Quoting Douglas Crosher (dtc@scieneer.com):
o Add support for including the namespace URI in the element and attribute names.
Thanks, that was a long-standing issue.
Checked in with a few changes:
+(defun make-xmls-builder (&key (include-default-values t)
(include-namespace-uri nil))
Applied with default (include-namespace-uri t).
when (and (or (sax:attribute-specified-p attr)
include-default-values)
(or (not include-namespace-uri)
(not attr-namespace-uri)
attr-local-name))
What is the (or ..) test for? IIUC, it currently removes declarations for the default namespace (xmlns="a") but not declarations for other namespaces (xmlns:b="a"). If removal of namespace declarations was the idea of this test, it should probably affect all of them, but only if *include-xmlns-attributes* is false.
Applied without the OR.
(t
(let ((lq (length qname))
(ll (length local-name)))
(if (eql lq ll)
nil
(subseq qname 0 (- lq ll 1)))))))
Changed to use just qnames in this mode. The old mode with pairs of local name and prefix was useless.
Finally, I have changed serialization (CXML-XMLS:MAP-NODE) to also distinguish between the two representations. With namespace URI, we run the events through the namespace normalizer, which invents prefixes for us. Without namespaces, we continue to generate namespace-less SAX events, which are suitable for normal serialization purposes (but nothing else, really).