On Dec 9, 2008, at 12:46 , Erik Dahlström wrote:
On Mon, 08 Dec 2008 17:26:18 +0100, Lachlan Hunt <[EMAIL PROTECTED]
> wrote:
As a compromise, we believe that if the NSResolver support remains
removed from this specification, there should be explicit mention of
workarounds (see below), and an informative note mentioning that
it may
be readded in a future version of the spec, to ensure that
implementers
set up their architecture accordingly.
There are several features which will be considered for inclusion
in the
next version of the spec. Why should this one in particular be
called
out over any other requested feature?
Given that NSResolvers were taken out of the spec it deserves to be
called out, and the problem described. Were there any other features
that were removed in this LC draft?
I think the important part of the comment is "to ensure that
implementers set up their architecture accordingly". Now that's a bit
of a pipe dream in the general case, but there is a specific issue to
do with this specific situation. See below.
Similar functionality was previously requested and rejected for the
xml
and xmlns prefixes, and I see no reason to treat the xhtml and svg
prefixes any differently.
http://lists.w3.org/Archives/Public/public-webapi/2008Feb/0062.html
So essentially Selectors API is a downlevel client[2]?
That's an interesting question. From that section of CSS Selectors (http://www.w3.org/TR/css3-selectors/#downlevel
):
"down-level client will view and match element type and attribute
selectors based on their fully qualified name (...). CSS selectors may
be declared using an escaped colon "\:" to describe the fully
qualified names, e.g. "html\:h1" will match <html:h1>." And further:
"Note that selectors declared in this fashion will /only/ match in
down-level clients." (original emphasis)
So say some service I'm using sends me some piece of DOM containing
<evil:kitten dahut:type='tamarou'/> and a bunch more of that, with
proper namespace declarations and all. I'm one sexy hacker and I want
all them kittens, and the only way that works is:
var cutesy = document.querySelectorAll("evil\\:kitten");
So that's all fine and good, but now you crazy kids at the browser
factories decide to ship us a new a wicked cooler Selectors API, that
supports NSResolver (or something like that). What happens? Does my
code break suddenly? Or do you detect that I'm not using an NSResolver
and implement a special branch of the code to emulate dumblevel
clients? Do you hack your parser so that selectors that match using \:
match against the QName and the rest use namespaces (and if so what do
we do with those that have neither \: nor | ?).
From here it looks like a good plan for a punk rock concert, except
without the music and without the beer. So if we're not going to have
the fun stuff, I formally request that the spec be light on the drugs
and violence, and include a discussion of its strategy to include
namespace support later without breaking the above case.
Please explain how providing a reference to DOM 3 XPath would be of
any
benefit? How would it help readers in their understanding of this
spec?
There are limitations in Selectors API that will force people into
either doing workarounds, or to use another technology for the
selection.
It seems the SVG WG isn't alone in wanting to have the informative
reference to DOM 3 XPath:
http://lists.w3.org/Archives/Public/public-webapps/2008OctDec/
0451.html
http://lists.w3.org/Archives/Public/public-webapps/2008OctDec/
0449.html
These two could in fact be tied together into a "Working with
Namespaces" section. My example above would have been evolution-
friendly had it used D3XPath instead of hacking around Selectors'
limitations.
== 8. Examples
Please add an example such as this one:
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<svg xmlns="http://www.w3.org/2000/svg">
<font id="mysvgfont">
...
</font>
</svg>
<font face="Arial">Example</font>
<svg:font id="anothersvgfont" xmlns:svg="http://www.w3.org/2000/svg
">
...
</svg:font>
</body>
</html>
Then explain how to use the Selectors API to select only the svg
'font'
elements and how to select only the svg font elements that have a
prefix
on the element.
As Boris explained, and as I'm sure you're well aware, it is not
possible to distinguish between elements with the same local name
without using namespaces. I cannot demonstrate the impossible and
have
not included the example in the spec.
The SVG WG disagrees with this reasoning. People will run into this
problem, and it seems appropriate to give an example and to show how
to work around the lack of namespace-aware selectors. Note that even
if it's not possible to distinguish between the elements using
Selectors API alone, the result can be filtered e.g using DOM Core
methods to give a meaningful result. Another workaround could be to
pass a descendant combinator selector such as "svg font" to check
the the <font> element has an <svg> element ancestor, this would
cover many of the use-cases.
It would also be useful to mention the backslash escaping mechanism
for downlevel clients[2].
My thoughts exactly, and again it seems like fodder for the same
section.
--
Robin Berjon - http://berjon.com/
Feel like hiring me? Go to http://robineko.com/