[Home] [By Thread] [By Date] [Recent Entries]

  • From: "G. Ken Holman" <gkholman@C...>
  • To: xml-dev@l...
  • Date: Sun, 17 Oct 2010 16:21:27 -0400

At 2010-10-17 12:04 -0700, trubliphone wrote:
>I have a question about Schematron.  I don't know if this is a 
>suitable forum, but it's worth a shot.

I think Schematron questions are entirely in scope here ... no 
problem in my view.

>I have an XML file with certain elements with an attribute that can 
>take one of a set of values.  That set, however, change depending 
>upon the position of the element.  Here's a simplified sample:
>
><root>
>   <!-- the 1st matching element -->
>   <element match="true" value="one"/>
>   <element match="false">
>     <element match="false">
>      <!-- the 2nd matching element -->
>       <element match="true" value="two"/>
>     </element>
>   </element>
>   <element match="false/>
>   <!-- the 3rd matching element -->
>   <element match="true" value="three/>
>   ...
></root>
>
>I've been playing with XPath and the following expression will match 
>all of the appropriate elements:
>
>"/descendant-or-self::node()[@match='true']"

All you need is "*[@match='true']" since only attributes can have 
attached attributes.  And this expression is, implicitly through an 
abbreviation, accessing the child axis as the complete syntax is 
"child::*[attribute::match='true']".

>I can narrow this down by adding "[position()=n]" and then check in 
>an <assert> that @value is one of the allowable terms.
>
>In order to ensure that I don't miss out on any _nested_ elements 
>(as with number 2 above) - the matching elements could be absolutely 
>anyplace in the document - I search all descendants of the root element.

No need ... the expression I've given you above is context free ... 
it will match elements at any depth of the tree.

>However, the above expression generates an error: "axis in pattern 
>must be child or attribute".

Right, because you've used the "descendent-or-self::" axis and that 
isn't allowed in a pattern expression, which is a subset of all expressions.

I hope this helps.

. . . . . . . . . Ken

--
XSLT/XQuery training:   after http://XMLPrague.cz 2011-03-28/04-01
Vote for your XML training:   http://www.CraneSoftwrights.com/x/i/
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/x/
G. Ken Holman                 mailto:gkholman@C...
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/x/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member