W3C home > Mailing lists > Public > www-svg@w3.org > December 2008

Re: [selectors-api] SVG WG Review of Selectors API

From: Lachlan Hunt <lachlan.hunt@lachy.id.au>
Date: Tue, 09 Dec 2008 16:24:41 +0100
Message-ID: <493E8DB9.2000100@lachy.id.au>
To: Erik Dahlström <ed@opera.com>
Cc: Doug Schepers <schepers@w3.org>, "public-webapps@w3.org" <public-webapps@w3.org>, www-svg <www-svg@w3.org>

Erik Dahlström wrote:
> On Mon, 08 Dec 2008 17:26:18 +0100, Lachlan Hunt
> <lachlan.hunt@lachy.id.au> wrote:
>> 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?
> 
> The SVG WG have no objections to listing other features that will be 
> added in the next version.

I have not listed any other potential features because I don't think 
it's appropriate to indicate any sort of premature commitment to any of 
them within the spec and because feature requests are already recorded 
and tracked separately.

http://www.w3.org/Bugs/Public/buglist.cgi?product=WebAppsWG&component=Selectors+API

Each one will be considered fairly and objectively based on the evidence 
provided, and namespace resolution will be treated no differently in 
this respect.  For this reason, I'm still personally opposed to the 
inclusion of such a note in the spec.

However, having said that, it does seem useful for readers of this 
specification to understand that prefix resolution is not currently 
available.  I have, therefore, included the following note in the spec:

  "This specification does not provide support for resolving arbitrary
   namespace prefixes. However, support for a namespace prefix resolution
   mechanism may be considered for inclusion in a future version of this
   specification."

>>> == Section 6. The NodeSelector Interface
>>> 
>>>>> The caller must pass a valid group of selectors.
>>> That's an authoring requirement, explain how that is applicable?
>> It seems perfectly applicable for the spec to define how the
>> methods need to be used by conforming applications.  Please explain
>> why you think it is not applicable?
>> 
>>>>> The group of selectors must not use namespace prefixes that
>>>>> need to be resolved.
>>> That also sounds like an authoring requirement. If it's an
>>> authoring requirement please mark it as informative, or as only
>>> applying to "conforming applications".
> 
> See
> http://lists.w3.org/Archives/Public/public-webapps/2008OctDec/0453.html.

I have changed it from MUST to SHOULD and rephrased the statement so 
that it just describes the syntax of the expected input.

   "Both querySelector() and querySelectorAll() take a group of selectors
    (selectors) as their argument. This group of selectors should match
    the selectors_group production with the additional provision that
    leading and trailing whitespace is permitted. This group of selectors
    should not use namespace prefixes that need to be resolved."

>> "This group of selectors must not use namespace prefixes that need
>> to be resolved."
> 
> What are the consequences on future versions of the spec?

If namespace resolution is included in a future version of the spec, 
then that is not expected to cause any issues.

>>>>> Selectors are evaluated against a given element in the
>>>>> context the entire DOM tree in which the element is located.
>>> ...in the context of?
>> I'm not sure how to phrase that any more clearly.  It means that
>> when evaluating a selector, all elements in the document may be
>> taken into account, and not just those within the node's subtree.
> 
> You were only missing an 'of' in the sentence there, simply adding
> that will be enough to satisfy this comment.

That wasn't clear since "... in the context of?" appeared to be a 
question.  Anyway, this was already fixed.

>>>> This means that the object will instead contain a list of matching
>>>> Element nodes that were in the document at the time the list was created.
>>> 
>>> Is this time defined? I propose to reword it as follows:
>>> "This means that the object will instead contain a list of matching
>>> Element nodes that were in the document at the time the method was
>>> invoked."
> 
> Some of the things I could potentially see at risk of being
> non-interoperable are listed below.
> 
> Using the Selectors API:
> 
> * on a subtree that is outside of the document

I don't understand what the issue is with this, or how it's related to 
when the list is created.

> * on a document that  isn't fully loaded (e.g triggered from a load
>   event on some element in the document)

This seems to be a reason to retain the current wording instead of 
changing it as proposed.  If the spec said "at the time the method was 
invoked", then the implementation would have to ensure that no further 
changes to the document were made between then and the time it obtained 
the result.  By saying "at the time the list is created" makes it easier 
to populate the list whenever the implementation is ready, simply based 
on what it has available to it at the time.

But regardless of the wording in this case, given the unpredicatable 
nature of loading times, the results could potentially vary anyway, 
depending on all sorts of factors affecting when resources finish loading.

> * triggered from a document load event

I don't understand what the issue is here either.

>> 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
> 
> Those are quite different, since neither of the svg or xhtml
> namespaces are predefined (unless you count doctype declarations
> possibly).
> 
> So essentially Selectors API is a downlevel client[2]?

No, although it is possible to be implemented by such a client.  IE8 is 
a downlevel client, but Opera, Safari and Firefox are not.

The API supports the syntax, which can be used for the null- and 
any-namespace cases.  It just doesn't have a namespace prefix resolution 
mechanism.

>>> Or alternatively forward the reader to DOM 3 XPath for the cases
>>> where the Selectors API falls short.
>> 
>> 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.

Indeed, there are some significant limitations of the current API.  Some 
of them are even more significant than the lack of namespace resolution. 
  But beyond namespace resolution, which hasn't yet been proven to be a 
significant problem in practice, it's not clear to me that XPath solves 
any of the other significant issues (particularly the issue regarding 
selector scoping that is a real problem for JS libraries).

> 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

The popularity of a particular point of view doesn't have any impact on 
the merits of the arguments in favour of it.

>>> == 8. Examples
>>> 
>>> Please add an example such as this one:
>>> ...
>>> 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.

I will reconsider this issue shortly.

> It would also be useful to mention the backslash escaping mechanism
> for downlevel clients[2].

That technique is already adequately described in Selectors, and since 
this API is not inherently limited to downlevel clients (in fact, most 
implementations are not), doing so does not seem useful.

-- 
Lachlan Hunt - Opera Software
http://lachy.id.au/
http://www.opera.com/
Received on Tuesday, 9 December 2008 15:25:23 GMT

This archive was generated by hypermail 2.3.1 : Friday, 8 March 2013 15:54:41 GMT