- From: David Broker <davidb@warpedweb.net>
- Date: Tue, 8 Apr 2008 11:23:28 +1000
- To: xmlschema-dev@w3.org
- Message-ID: <671d7caa0804071823y7eb6479er282261398b47c9d8@mail.gmail.com>
Thanks Michael, I was beginning to think that myself. I've decided to ignore the the fact that the header tag must be first and add all the children of <letter> to a group using <xsd:all>. The most important constraint is that the "data" tags can appear only once and in any order. My main aim was to not have to add each "data" element to a group but it doesn't look like I will be able to avoid that. Here is the resulting schema: <xs:element name="document"> <xs:complexType> <xs:sequence> <xs:element name="letter" minOccurs="1" maxOccurs="unbounded"> <xs:complexType> <xs:group ref="dataBlockGroup"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:group name="dataBlockGroup"> <xs:all> <xs:element ref="header" minOccurs="0" maxOccurs="1"/> <xs:element ref="data1" minOccurs="0" maxOccurs="1"/> </xs:all> </xs:group> <xs:element name="header"> <xs:complexType> <xs:sequence> <xs:element name="headerId" type="xs:integer" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="data1"> <xs:complexType> <xs:sequence> <xs:element name="id" type="xs:integer" /> </xs:sequence> </xs:complexType> </xs:element> Thank you Michael & Borris for you help. Regards, David On Mon, Apr 7, 2008 at 6:30 PM, Michael Kay <mike@saxonica.com> wrote: > 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 Tuesday, 8 April 2008 01:55:35 UTC