Re: [ssax-sxml] // (S)Xpath query [was: duplication]
Brought to you by:
oleg
From: Kirill L. <lis...@ac...> - 2002-12-01 22:01:38
|
On Sun, 1 Dec 2002 br...@ar... wrote: > Kirill> (sxpath `((element ; node-test > Kirill> (@ (equal? (name "sym_overname")))) ; predicate @name="sym_overname" > Kirill> @ (or@ value id addr) )) ; OR > > ^ > Is the @ misplaced ? > No, it is not. There are three (BTW: it's 'length' of location-path) SXPath location steps in this location path Probably better indentation is: (sxpath `((element (@ (equal? (name "sym_overname")))) @ (or@ value id addr) )) In accordance with W3C XPath rec. a location step may be cosidered as: Step ::= AxisSpecifier NodeTest Predicate* Let's consider this SXPath expression from this point of view: 1. (element (@ (equal? (name "sym_overname")))) Selects all the child elements (axis - child) of type 'element' (node-test - element) and filter them using predicate (@ (equal? (name "sym_overname"))) 2. @ Selects a list of attributes axis - child, node-test - @ A list of SXML (and thus SXPath) attributes is just a nested element with "special" name - '@' The symbol '@' is allowed by R5RS but is forbidden by XML Rec., so there is no possibility for a name clash here. Besides, its used for attributes in XPath That is, SXML/SXPath considers elements/attributes uniformely, so an attribute node is not distinct from an element node, it's just an element node nested in an attribute-list. In XPath, where is a special type of attribute nodes: they are attached to an element node directly, but are not considered as "children" for such a node. While in SXPath expression '@' is a node-test, in XPath it's an axis specifier. So, here we have selected lists of attributes for all the elements selected by the location step one. 3. (or@ value id addr) axis - child node-test - value | id | addr 'or@' is abbreviated syntax for logical 'or' which is used for union of node-sets. Best regards, Kirill. |