Reputation: 1060
In my XSD, I want to be able to specify that the order of the elements doesn't matter. This is what I have:
<xs:element name="ADT_A08_231_GLO_DEF">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="EVN_EventTypeSegment" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="PID_PatientIdentificationSegment" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="PD1_PatientAdditionalDemographicSegment" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
How can I make it so that the EVN and PID element can occur random (first EVN then PID or first PID element and then the EVN element) in the XML file?
<EVN_EventTypeSegment>Test</EVN_EventTypeSegment>
<PID_PatientIdentificationSegment>PIDTest</PID_PatientIdentificationSegment>
or:
<PID_PatientIdentificationSegment>PIDTest</PID_PatientIdentificationSegment>
<EVN_EventTypeSegment>Test</EVN_EventTypeSegment>
Upvotes: 22
Views: 23352
Reputation: 25034
Change the xs:sequence
in your schema document to xs:all
. An all-group containing references to (or declarations of) elements A, B, and C is satisfied if and only if A, B, and C are present in some order. The elements may have minOccurs
set to 0 to make them optional (like your PD1_PatientAdditionalDemographicSegment
element).
In XSD 1.0, the children of an all-group must have maxOccurs
of 1, which some people find uncomfortably restrictive, but in your case that's what you want anyway. In XSD 1.1 that restriction is lifted.
Upvotes: 23