- From: Michael Kay <mike@saxonica.com>
- Date: Wed, 29 Apr 2009 15:02:56 +0100
- To: "'Costello, Roger L.'" <costello@mitre.org>, <xmlschema-dev@w3.org>
> > I wish to confirm that I correctly understand the > specification. I believe it says the XPath in an <assert> > cannot "look up" the XML tree. That is, it can't reference a > parent, grandparent, etc. Is that correct? Yes, that's right. The idea is that the validity of an element (or, if you like, the rules for a type) depend only on the content of that element, and not on the context where it is used. > > Consider this instance document: > > <Document classification="secret"> > <Para classification="unclassified"> > ... > </Para> > <Para classification="secret"> > ... > </Para> > <Para classification="unclassified"> > ... > </Para> > <Para classification="secret"> > ... > </Para> > </Document> > > > Here I place an <assert> on the Para element which attempts > to reference the (parent) Document element: > > <xs:element name="Para"> > <xs:complexType> > <xs:simpleContent> > <xs:extension base="paraType"> > <xs:attribute name="classification" > type="classificationLevels" use="required"/> > <xs:assert test="if (@classification eq > 'top-secret') then ../Document/@classification eq 'top-secret') ... /> > </xs:extension> > </xs:simpleContent> > </xs:complexType> > </xs:element> > This is a rule affecting the validity of the Document, not the validity of any Para considered in isolation. It needs to go at the Document level. <xs:complexType name="DocumentType"> <xs:complexContent> ... <xs:assert test="if (@classification ne 'top-secret') then empty(Para[@classification eq 'top-secret']) else true()"/> If you're in a world where PSVI annotations matter, each Para is valid, but the Document is invalid. Michael Kay http://www.saxonica.com/
Received on Wednesday, 29 April 2009 14:03:36 UTC