[jdom-interest] Attribute name verification special casing for xml:base
Bradley S. Huffman
hip at a.cs.okstate.edu
Mon Jun 17 09:20:59 PDT 2002
Elliotte Rusty Harold writes:
> I think it's best for JDOM to accept this paragraph at
> least, and not allow other prefixes to be bound to
> http://www.w3.org/XML/1998/namespace
+1
> Looking at the Namespace class with this in mind I see several bugs:
>
> 1. We allow other prefixes to be mapped to the
> http://www.w3.org/XML/1998/namespace namespace. Arguably, this is OK
> according to Namespaces 1.0, if not Namespaces 1.0 + errata. We may
> not want to fix it.
>
+1 Namespaces 1.0 + errata.
> 2. Someone can call Namespace.getNamespace("xml",
> "http://www.someweirdURI.com") and get the
> http://www.w3.org/XML/1998/namespace namespace back. This should
> probably throw an IllegalNameException instead.
+1
> Now back to the Attribute class. The Attribute class is definitely
> broken with respect to xml:base, xml:lang, and xml:space because of
> the special casing. You can create such an attribute, but
> getNamespacePrefix() and getNamespaceURI() return the empty string
> and getNamespace() returns Namespace.NO_NAMESPACE. If we're going to
> special case xml:space/xml:lang/xml:base, then we need to add extra
> code to Attribute to handle the special cases, which can certainly be
> done. It just makes the Attribute and Verifier classes somewhat more
> complex.
>
> Son our options here are:
>
> 1. Remove the special casing completely from Verifier, and let
> clients pass in the prefix, local name, and URI when they want to
> create an xml:base, xml:space, or xml:lang attribute.
>
> or
>
> 2. Add xml:base to Verifier and add special casing for names that
> start xml: to Attribute.
>
> I think the first solution is cleaner and more consistent with the
> JDOM model, but I can write a patch for either one.
+1 for first solution.
> I also note that XMLOutputter has some code that doesn't work with
> the current special casing because whoever wrote it was assuming that
> the namespaces were in place:
>
>
> protected void printElement(Element element, Writer out,
> int level, NamespaceStack namespaces)
> throws IOException {
>
> List attributes = element.getAttributes();
> List content = element.getContent();
>
> // Check for xml:space and adjust format settings
> String space = null;
> if (attributes != null) {
> space = element.getAttributeValue( "space",
> Namespace.XML_NAMESPACE);
> }
>
> I don't know or remember who wrote this particular line of code. It
> might even have been me. But clearly at least some programmers are
> thinking of xml:space etc. as existing in a namespace. If we stay
> with special casing, we'll need to fix this too.
Hmmm, this is a bug. If the doc is built with SAXHandler the above code
works (if qname != local name, SAXHandler parses the qname), if built
by hand it may or may not work depending on which constructor is used.
Brad
More information about the jdom-interest
mailing list