RE: [dom-xpath] XPath or? (was RE: Announcing www-dom-xpath@w3.or g)

Scott Boag wrote,
> Here's an argument for your side:
>
> void foo(Node n1, Node n2)
> {
>   NodeIterator n1i = ((XPath)n1).locate("name/address", ...);
>    // uses your implementation
>   NodeIterator n2i = ((XPath)n2).locate("name/address", ...);
>    // uses my implementation
>   ...
> }
>
> i.e. in this case, the method didn't know or care which 
> implementation it was using.  Using an external 
> implementations would make this harder, as you would have to 
> match the Node implemenation to the XPath implementation.

That's the sort of thing I'd been thinking about. But: the only
thing I'm committed to is delegating the query to the
_implementation_. Whether that's done by invoking a method on
Node, or via some other route is far less important.

> You could have something like:
[snip: DOMImplementation based method]
> Which is way ugly.  As compared to:
[snip: Node based method]

How about a Document based variant,

  if(node.getOwnerDocument().supports("http://www.w3.org/TR/xpath"))
  {
    DocumentXPath doc = (DocumentXPath)node.getOwnerDocument();
    XPathQuery query = doc.createQuery("name/address");

    NodeIterator ni1 = query.execute(node, someContext);
    // etc.

    // try again with a diffent root Node and context but
    // same query instance (allows implementation to compile
    // query and reuse).
    NodeIterator ni2 = query.execute(otherNode, someOtherContext);
    // etc.
  }  

Remind me what the context was supposed to be for.

> I suppose an XPath implementation could do something like:
>
> Expression expr = new XPathImpl(node, "name/address");
> NodeIterator n1i =
>   expr.findNodes("name/address", exprContext);
>
> ...which would allow looser coupling with the DOM 
> implementation, and allow compatibility with DOM1 
> implementations.

I don't follow. If you have an XPath implementation you're
free to support Level 1 DOMs whatever happens in Level 3.
Equally you're free to use that XPath implementation in the
implementation of any Level 3 XPath query API. I don't think
anyone was suggesting that you'd _have_ to have an XPath
implementation which could _only_ be used with exactly one
DOM.

Or am I missing something?

Cheers,


Miles

-- 
Miles Sabin                       Cromwell Media
Internet Systems Architect        5/6 Glenthorne Mews
+44 (0)20 8817 4030               London, W6 0LJ, England
msabin@cromwellmedia.com          http://www.cromwellmedia.com/

Received on Wednesday, 3 May 2000 16:13:56 UTC