- From: Berend de Boer <berend@xsol.co.nz>
- Date: Sun, 30 Jun 2002 18:09:49 -0400 (EDT)
- To: public-qt-comments@w3.org
Hello All, XPath 1.0 only seems to be able to return an element and ALL of its children. Does XPath 2.0 allow to write an expression that returns an element and SOME of its children? Example: <publisher name="Addison Wesley"> <book title="... XML .."/> <book title="... Eiffel ..."/> <book title="... XML ..."/> </publisher> <publisher name="O'Reilly"> <book title="... XML ..."/> <book title="... Java ..."/> </publisher> I want to get all books where XML appears in the title, but I want to know the publisher as well. This is the result I want to see: <publisher name="Addison Wesley"> <book title="... XML .."/> <book title="... XML ..."/> </publisher> <publisher name="O'Reilly"> <book title="... XML ..."/> </publisher> I've been unable to express this query with XPath 1.0. publisher[book/@title='XML'] returns publishers and ALL books, and publisher/book[@title='XML'] gives ONLY the books and does NOT have the parent <publisher> (read for '=' contains()...). What I can understand from the specs, a for loop can do what I want. But can anyone suggest what it would look like? This is probably incorrect: for $p in (//publisher) return (<publisher name="$p">, for $b in //book[../@name=$p/@name] return $b, </publisher>) But more importantly, is there an expression that doesn't use programming? My XPath expressions are meant for non-programmers, and a for loop is probably not easy to understand for them. In the use cases (1.2.4.1 Q1) I found something like this: <result> { let $b := document("publishers.xml") return filter($b//publisher | $b//publisher/book[@title='XML']) } </result> I really didn't understand this expression at all. I assume it's equal to [//publisher | //publisher/book[@title='XML'] but with XPath 1.0 this returns all publishers, including all their child elements, i.e. all books and not only the books with 'XML' in the title. Is XPath 2.0 different in this respect? So does $b//publisher just return publishers and not the child nodes?? To give you some background: for a certain XML database I'm investigating what language is most appropiate to use to specify queries. XPath 1.0 seemed to be limited in its power, but a full programming language is too much. So I'm searching for a relative simple declarative query language, that isn't too hard to implement and can run fast on a relational database (the XML is stored in a relational database). So I like to know if XPath 2.0 is more suited to the task. Any help appreciated. Regards, Berend. (-:
Received on Tuesday, 2 July 2002 11:39:41 UTC