W3C home > Mailing lists > Public > public-webapi@w3.org > December 2006

Re: Selectors API naming

From: Bjoern Hoehrmann <derhoermi@gmx.net>
Date: Fri, 22 Dec 2006 00:24:20 +0100
To: "Anne van Kesteren" <annevk@opera.com>
Cc: "Web API WG (public)" <public-webapi@w3.org>
Message-ID: <7evlo25cuamhh3b173opuo4limb6113ljb@hive.bjoern.hoehrmann.de>

* Anne van Kesteren wrote:

I would like to point out that there exists a valid technical reason for
using different method names than the ones in the current draft. One of
reasons why the DOM uses longer, more descriptive names is to avoid name
clashes. The current draft essentially reserves the names 'matchAll' and
'matchSingle' for attributes and methods on all specialized Document and
Element interfaces. This implies, among other things, that you cannot
make a markup language where you have

  <foo matchAll='...' or <foo match-single='...' etc.

and provide a 1:1 mapping from attributes in the markup to attributes in
the DOM since foo.matchAll would be the Selector API method where it is
implemented on Element nodes which is likely to occur in the future as
per the current draft. The same goes for any other use of these names,
you could not make a .matchAll attribute that, for example, indicates if
all children of an element match the element in a specialized DOM API
where this is desired functionality. The naming should therefore not be
taken lightly.

As far as the names go, I do not think they are intuitive at all. I tend
to associate boolean semantics and text string operations with match*
names, document.matchAll sounds to me more like a method to highlight
text strings in a document, for example to highlight search terms on a
page. In fact, several web sites I use have match=search+terms in the
URL for exactly this purpose. For these two reasons, I think that the
name should include terms like 'CSS' or 'Selector' in its name.

>These names would also be slightly confusing as they would not take a  
>selector but rather a group of selectors. I suppose the group in favor of  
>these methods find that acceptable. I wonder if they find the  
>inconsistency with the other DOM methods to be acceptable as well.  

I do not think that properties of return values such as liveness should
influence naming, so I do not really see how picking such a name would
introduce any new inconsistency. As for selector groups, you could just
use getElementsBySelectors(...) or getElementsByCssQuery(...) or just
cssQuery(...). I'd be fine with 'cssQuery' and 'cssQueryOne' instead of
the current methods; these names happen to be exactly as long, would not
have either of the problems mentioned above, and are already well-known
among developers if


counts as "evidence". We already broke the getElementsBy... convention
with the .selectNodes(...) and .selectSingleNode(...) methods, we have
plenty of experience that this is not too big an issue. I'd be fine with
the getElementsBy... versions above though of course.

>It seems that libraries find there's a need to provide shortcuts for the  
>several of the above mentioned methods (notably document.getElementById  
>and document.getElementsByTagName). Several authors have argued that they  
>don't see a need for such a thing but no "evidence" has been provided. No  
>evidence to the contrary either, though.

These libraries typically do not simply set up some alias for a feature
like the Selectors API, they would add code to detect whether the user
agent supports the feature, might switch to an alternate pure-script im-
plementation in case it does not, they might have work arounds for known
issues, they might have a pre-defined namespace resolver so you have the
prefixes for all the common namespaces available, they might add some
tracing code for debugging purposes, and they might add other features.

Further, no name can remove the `document.` you have to put in front of
it, and if you can have document.matchAll(...) or cssQ(...), you'd pick
the latter. As such I do not think the argument, if we pick a short name
the library designers won't write wrapper functions, holds at all. If I
were to make considerable use of the API, I would certainly write one,
if only so I can use BH.cssQuery(...) instead of document.matchAll(...,
Björn Höhrmann · mailto:bjoern@hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/ 
Received on Thursday, 21 December 2006 23:24:34 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:16:22 UTC