[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: XPath question with regards to Schematron rule
Hi Paul, You can do that with something like: <xs:annotation> <xs:appinfo> <sch:pattern name="Check references."> <sch:rule context="F"> <sch:assert test="count(G)=../../D[@name=current()/@ref]/@num">Number of G elements should match the refered D num attribute value.</sch:assert> </sch:rule> </sch:pattern> </xs:appinfo> </xs:annotation> A possible complete schema (generated with Trang from the instance document and annotated with Schematron) can look like: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:sch="http://www.ascc.net/xml/schematron"> <xs:annotation> <xs:appinfo> <sch:title>Test schematron schema</sch:title> </xs:appinfo> </xs:annotation> <xs:element name="A"> <xs:complexType> <xs:sequence> <xs:element ref="B"/> <xs:element ref="C"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="B"> <xs:complexType/> </xs:element> <xs:element name="C"> <xs:complexType> <xs:sequence> <xs:element ref="D"/> <xs:element ref="E"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="D"> <xs:complexType> <xs:attribute name="name" use="required" type="xs:NCName"/> <xs:attribute name="num" use="required" type="xs:integer"/> </xs:complexType> </xs:element> <xs:element name="E"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="F"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="F"> <xs:annotation> <xs:appinfo> <sch:pattern name="Check references."> <sch:rule context="F"> <sch:assert test="count(G)=../../D[@name=current()/@ref]/@num">Number of G elements should match the refered D num attribute value.</sch:assert> </sch:rule> </sch:pattern> </xs:appinfo> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="G"/> </xs:sequence> <xs:attribute name="name" use="required" type="xs:NCName"/> <xs:attribute name="ref" use="required" type="xs:NCName"/> </xs:complexType> </xs:element> <xs:element name="G"> <xs:complexType/> </xs:element> </xs:schema> Hope that helps, George --------------------------------------------------------------------- George Cristian Bina <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger http://www.oxygenxml.com Paul Popiel wrote: > Hi, > > If i have a XML stucture like so: > > <A> > <B> > </B> > <C> > <D name=test num=3> > </D> > <E> > <F name=one ref=test> > <G></G> > <G></G> > <G></G> > </F> > <F name=two ref=test> > <G></G> > <G></G> > </F> > </A> > > > how can i write a schematron rule to test that each <F> element has the > right number of <G> elements in it with respect to the value of the num > attribute in the <D> element with the same name as that of the <F> elements > ref attribute. > > so with respect to the above example <F> elements one and two both have ref > "pointing" to element <D> test, where num=3 > so both <F> elements should have 3 <G> elements > > so in this case <F> two should signal an error when the schematron rule is > run. > > > In terms of the schematron rule: > > <sch:pattern name="Correct number of G in > F."> > <sch:rule context="/"> > <sch:assert > test="????">Incorrect number of G.</sch:assert> > </sch:rule> > </sch:pattern> > > what would be in the test attribute? > > also i would like to work with absolute paths if possible. > > ive tried all sorts of things using //F[count(G) = etc etc but i just cant > seem to get something working. > > any help would be greatly appreciated > > thanks > > Paul Popiel > Software Engineer > > Advanced Engine Components Limited > 14 Energy St, Malaga WA 6090 > Fax: +61 8 9209 6999 > Mob: 0412 657 051 > mailto:paulp@a... > http://www.advancedengine.com > > > > ********************************************************************** > This email is confidential. If you are not the intended recipient, > you must not copy, distribute, disclose or otherwise use the > information contained in it. If you have received this email in > error, please tell us immediately by return email or by contacting > us on (+61 8) 9209 6900 and delete the document. Email may > be susceptible to data corruption, interception and unauthorised > amendment. Advanced Engine Components Ltd is not > responsible for any changes made to a document other than > those made by Advanced Engine Components Ltd, or for the > effect of the changes on the document's meaning. > > You must scan this email and any attachments for viruses. > Advanced Engine Components Ltd accepts no liability for any > loss, damage or consequence, whether caused by our own > negligence or not, resulting directly or indirectly from your > receipt of this email or the use of any attachments. > ********************************************************************** > > ----------------------------------------------------------------- > The xml-dev list is sponsored by XML.org <http://www.xml.org>, an > initiative of OASIS <http://www.oasis-open.org> > > The list archives are at http://lists.xml.org/archives/xml-dev/ > > To subscribe or unsubscribe from this list use the subscription > manager: <http://www.oasis-open.org/mlmanage/index.php> >
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|