- From: Eddie Robertsson <eddie@allette.com.au>
- Date: Tue, 23 Oct 2001 10:23:28 +1000
- To: Jeni Tennison <jeni@jenitennison.com>
- CC: "Dolan, Kieran" <DolanK@logica.com>, xmlschema-dev@w3.org
Hi Dolan, > > For example: <X>23</X> is valid and <X><Y>45</Y></X> is also valid > > but not <X>23<Y>45</Y></X>. Use of a "mixed" content model permits > > the first two cases but does not exclude the last one. > > You could go this route and add a schema adjunct (some RELAX NG or > Schematron elements in xs:appinfo) that went on to define more tightly > that the X element can either have text or a Y element as a child. Of > course you would have to pull out these extra constraints yourself in > order to test them, but they'd be there in the schema for > documentation purposes. If you choose to go with the Schematron option this is one way to do it: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="X"> <xs:annotation> <xs:appinfo> <pattern name="Restrict mixed content" xmlns="http://www.ascc.net/xml/schematron"> <rule context="X[count(*)=0]"> <assert test='(text() != "")'>If you don't have a Y element you must store the value in the X element.</assert> </rule> <rule context="X[Y]"> <assert test="string-length(text()) = 0">If you have a Y element you can't have text content in the X element.</assert> </rule> </pattern> </xs:appinfo> </xs:annotation> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="Y" type="xs:integer" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> The Schematron Validator from Topologi [1] can validate XML Schemas and Schematron as well as provide validation results from embedded Schematron rules like the above example. For more information about Schematron see [2] and more information about how to extend XML Schemas can be found at [3]. Cheers, /Eddie [1] www.topologi.com [2] http://www.ascc.net/xml/resource/schematron/ [3] http://www.xfront.com/BestPracticesHomepage.html (see Extending XML Schemas)
Received on Monday, 22 October 2001 20:15:48 UTC