2010-10-19 9 views
11

Dans mon XSD, je veux pouvoir spécifier que l'ordre des éléments n'a pas d'importance. Voilà ce que j'ai:Ordre du schéma XML des éléments

<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> 

Comment puis-je faire en sorte que l'EVN et l'élément PID peut se produire au hasard (première EVN puis PID ou premier élément PID et l'élément EVN) dans le fichier XML?

<EVN_EventTypeSegment>Test</EVN_EventTypeSegment> 
<PID_PatientIdentificationSegment>PIDTest</PID_PatientIdentificationSegment> 

ou:

<PID_PatientIdentificationSegment>PIDTest</PID_PatientIdentificationSegment> 
<EVN_EventTypeSegment>Test</EVN_EventTypeSegment> 
+0

Pourquoi pensez-vous que vous voulez faire cela? Parce que vous ne voulez probablement pas faire ça. –

+2

Que voulez-vous dire? Je dois être en mesure de le faire, je reçois certains messages d'un client et je dois traiter cela. Maintenant, l'ordre de certains champs des messages peut être différent, donc dans mon schéma, je dois prendre cela en compte. Est-ce qu'il n'y a vraiment aucun moyen que je puisse y parvenir? –

Répondre

-1

J'ai fait ce possible en utilisant un groupe de choix: D

+6

un exemple aurait été un peu plus utile – chharvey

+0

L'inconvénient d'un groupe de choix ici est qu'il ne résout pas le problème décrit: le groupe de choix doit répéter, afin que EVN et PID peuvent se produire, et puis il n'y a pas contrainte que ni EVN ni PID ne peuvent répéter. –

9

Modifier le xs:sequence dans votre document de schéma pour xs:all. Un groupe contenant des références à (ou des déclarations) des éléments A, B et C est satisfait si et seulement si A, B et C sont présents dans un certain ordre. Les éléments peuvent avoir minOccurs mis à 0 pour les rendre facultatifs (comme votre élément PD1_PatientAdditionalDemographicSegment).

Dans XSD 1.0, les enfants d'un groupe entier doivent avoir maxOccurs sur 1, ce que certaines personnes trouvent inconfortablement restrictif, mais dans votre cas, c'est ce que vous voulez quand même. Dans XSD 1.1, cette restriction est levée.

22

Utilisez xs:all au lieu de xs:sequence.

+0

Il est inutile d'ajouter de nouvelles réponses qui n'ajoutent aucune nouvelle information aux anciens messages. Cependant, votre réponse est plus facile à lire. – vdbuilder

Questions connexes