Jump to content

Help with repeating tag substitution groups


Guest Davidb

Recommended Posts

Guest Davidb

Hi,I'm currently having an issue with defining a schema.My XML 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>... etc ...

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 combinationsof xs:choice, xs:all, but I cannot get it to work.For example: this is valid, but shouldn't be:

<letter> <header>...</header> <data1>...</data1> <data2>...</data2> <data1>...</data1> <data1>...</data2></letter>

Any ideas?Thanks!David

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...