[
Lists Home |
Date Index |
Thread Index
]
David Megginson wrote:
> OK, people, what do we do here? Here are my opinions:
>
> 1. Anyone who writes an application that actually cares about the
> Namespace assigned to xmlns attributes is f#@$%@#$ed in the head and
> deserves whatever happens.
>
> 2. That said, we still have a responsibility to try to do the right
> thing. If we get it wrong, though, it doesn't matter all that much (see
> #1).
One may indeed be fuxored in the head but one may simply be implementing
a SAX handler that produces a DOM. In that case, well, you just need to
know (and I suspect that would translate equally to other
representations of the Infoset, depending on which parts they decide to
stick to and which they ditch). Head-fuxoring is transitive.
> So, bearing all that in mind, what should we report for the following
> Namespace declaration?
>
> <foo xmlns="http://www.example.org/ns#"/>
>
> a) an attribute with no Namespace URI and the local name "xmlns";
>
> b) an attribute with the Namespace URI "http://www.w3.org/2000/xmlns/"
> and no local name; or
>
> c) an attribute with the Namespace URI "http://www.w3.org/2000/xmlns/"
> and the local name "xmlns".
>
> Note that none of these is a clean solution, probably because Namespaces
> 1.1 is a bit broken. Then again, I doubt it matters much. If no one
> presents a convincing argument, I'll just pick one of the three at random.
Is consistency accross SAXes a convincing argument? PerlSAX settled this
to be a) a while ago, on the grounds that ok it might not be the spec
but having an attribute with no prefix have a namespace was taking it
too far to our taste.
Quickly throwing together something:
use XML::SAX::ParserFactory;
use Data::Dumper;
XML::SAX::ParserFactory->parser(Handler=>bless[])->parse_string('<foo
xmlns="hhh"/>');
sub start_element { print Dumper($_[1]->{Attributes}); }
produces:
$VAR1 = {
'{}xmlns' => {
'LocalName' => 'xmlns',
'Prefix' => '',
'Value' => 'hhh',
'Name' => 'xmlns',
'NamespaceURI' => ''
}
};
--
Robin Berjon
|