- From: Robin Berjon <robin@berjon.com>
- Date: Tue, 9 Dec 2008 14:04:36 +0100
- To: Erik Dahlström <ed@opera.com>
- Cc: public-webapps@w3.org, www-svg <www-svg@w3.org>
On Dec 9, 2008, at 12:46 , Erik Dahlström wrote:
> On Mon, 08 Dec 2008 17:26:18 +0100, Lachlan Hunt <lachlan.hunt@lachy.id.au
> > 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/
Received on Tuesday, 9 December 2008 13:05:18 UTC