- From: Michael Kay <mike@saxonica.com>
- Date: Mon, 7 Apr 2008 09:30:36 +0100
- To: "'David Broker'" <davidb@warpedweb.net>, <xmlschema-dev@w3.org>
- Message-ID: <018e01c89889$a7cc6170$6401a8c0@turtle>
I don't think this can be done in XML Schema 1.0. When you're trying to write a schema to describe an existing XML document structure, it's often the case that not all the constraints can be expressed. Michael Kay http://www.saxonica.com/ _____ From: xmlschema-dev-request@w3.org [mailto:xmlschema-dev-request@w3.org] On Behalf Of David Broker Sent: 07 April 2008 07:26 To: xmlschema-dev@w3.org Subject: Issue with repeating tags using substitution groups Hi, I'm currently having an issue with defining a schema for some existing XML (i.e. the XML structure cannot change) The structure looks like this: <document> <letter> <header>...</header> <data1>...</data1> <data2>...</data2> </letter> <letter> <header>...</header> <data2>...</data2> <data4>...</data4> <data1>...</data1> </letter> </document> Each letter is repeated, with a header first, then a mixture of "data" tag which can be in any order, but can only occur once. The "data" tags are defined by substitution groups and are complex types. Here is my schema: <xs:element name="document"> <xs:complexType> <xs:sequence> <xs:element name="letter" type="letter" minOccurs="1" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="letter"> <xs:sequence> <xs:element ref="header" /> <xs:element ref="DataBlock" minOccurs="1" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> <xs:element name="header"> ... </xs:element> <xs:element name="DataBlock" type="DataBlockType" abstract="true" /> <xs:complexType name="DataBlockType" abstract="true" /> <xs:element name="data1" substitutionGroup="DataBlock"> <xs:complexType> <xs:complexContent> <xs:extension base="DataBlockType"> <xs:sequence> <xs:element name="id" type="xs:integer" /> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> My problem is how to get the "DataBlock" tags to only repeat once. The above workds fine execpt that the tags can be repeated. I have tried combinations of xs:choice, xs:all and xs:group but I cannot get it to work. For example, this is valie, but shouldn't be: <letter> <header>...</header> <data1>...</data1> <data2>...</data2> <data1>...</data1> <data1>...</data2> </letter> Any ideas? Thanks! David
Received on Monday, 7 April 2008 08:31:19 UTC