- From: Maciej Stachowiak <mjs@apple.com>
- Date: Thu, 01 Oct 2009 14:04:19 -0700
- To: Julian Reschke <julian.reschke@gmx.de>
- Cc: Anne van Kesteren <annevk@opera.com>, Jonas Sicking <jonas@sicking.cc>, Adrian Bateman <adrianba@microsoft.com>, HTML WG <public-html@w3.org>, Tony Ross <tross@microsoft.com>, Sam Ruby <rubys@intertwingly.net>
On Oct 1, 2009, at 1:00 PM, Julian Reschke wrote:
> Maciej Stachowiak wrote:
>> ...
>> You said it's well-defined how to find out what meaning an element
>> has using DOM Level 1 (presumably determining the namespaceURI
>> somehow). Can you state or point to the definition?
>> ...
>
> I'm referring to the algorithm that ways mentioned multiple times in
> RDFa threads: visit all parents, and check for all attributes where
> the local name is "xmlns", or starts with "xmlns:". Figure out
> namespace declarations from those.
That algorithm is incorrect. Prefix bindings apply at parse time, not
lookup time.
Here's a test case, using XML. What's the namespace of the <bar>
element?
<foo xmlns:bar="http://example.com/bar">
<baz id="baz" />
<xhtml:script xmlns:xhtml="http://www.w3.org/1999/xhtml/">
var newElement = document.createElement("bar:bar", "http://barbar.com/barbar/
");
document.getElemebtById("baz").appendChild(newElement);
</xhtml:script>
</foo>
Your algorithm says "http://example.com/bar" but the correct answer is
"http://barbar.com/barbar/". This is not just "an edge case" - it will
apply any time the DOM has been mutated after parsing. It affects not
just element or attribute creation, but also moving chunks of the DOM
from one place to another with different namespace declarations in
scope (the namespace URIs shouldn't change for the moved content!) or
to adding or removing namespace declaration attributes.
Thus, your algorithm for finding the namespace URI of an element using
DOM Level 1 APIs may be well-defined but it is incorrect.
Regards,
Maciej
Received on Thursday, 1 October 2009 21:04:55 UTC