Subject:xsd question Author:matt cole Date:20 Jun 2005 08:52 PM Originally Posted: 20 Jun 2005 08:37 PM
Hi,<br>
I'm pretty much a newbie to xsd's in general, and have a case in a schema I'm designing that I'm not sure how to solve. Basically I have a situation like this: (sorry i can't figure out how to post markup which renders properly)
<parenttype>
<category>Standard</category>
<standardcategorynodes>
<a/>
<b/>
</standardcategorynodes>
</parenttype>
<parenttype>
<category>Special</category>
<specialcategorynodes>
<c>
<d/>
<c/>
</specialcategorynodes>
</parenttype>
where the parent node type is the same, but depending on the value of the category node, subsequent nodes are different. I thought a good solution would be to have a xs:choice, where each choice has a fixed value for the category node and then the relevant subsequent nodes follow but I get a Unique Particle Attribution violation as both choices have a category node.
Is there a solution for this type of situation or will i have to workaround it somehow?
Thanks very much,
Matt
Subject:xsd question Author:dan thompson Date:04 Jul 2005 10:55 AM
Try this XSD, hope it helps.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Substitution_Root">
<xs:annotation>
<xs:documentation>Substitution Groups allow you to define different content for a single node</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="a"/>
<xs:element name="b"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Substitution_1" substitutionGroup="Substitution_Root">
<xs:annotation>
<xs:documentation>If you name the substitution groups 'standard' and 'special' this may solve your problem</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="c"/>
<xs:element name="d"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>