2010-10-19 21 views
11

En mi XSD, deseo poder especificar que el orden de los elementos no es importante. Esto es lo que tengo:Orden de elementos de esquema XML

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

¿Cómo puedo hacerlo de modo que el elemento EVN y el PID puede ocurrir al azar (EVN primer elemento PID entonces PID o primero y luego el elemento EVN) en el archivo XML?

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

o:

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

¿Por qué crees que quieres hacer esto? Porque probablemente no quieras hacer esto. –

+2

¿Qué quieres decir? Tengo que poder hacer esto, recibo ciertos mensajes de un cliente y tengo que procesar esto. Ahora el orden de algunos campos de los mensajes puede ser diferente, entonces en mi esquema tengo que tomar esto en cuenta ... ¿Realmente no hay manera de que pueda lograr esto? –

Respuesta

-1

que lo hicieron posible mediante el uso de un grupo de elección: D

+6

un ejemplo hubiera sido un poco más útil – chharvey

+0

El inconveniente de un grupo de elección aquí es que no resuelve el problema descrito: el grupo de elección debe repetirse, para que tanto EVN como PID puedan ocurrir, y luego no hay restricción que ni EVN ni PID pueden repetir. –

9

Cambiar el xs:sequence en su documento de esquema a xs:all. Un todo grupo que contiene referencias a (o declaraciones de) los elementos A, B y C se cumple si y solo si A, B y C están presentes en algún orden. Los elementos pueden tener minOccurs establecido en 0 para que sean opcionales (como su elemento PD1_PatientAdditionalDemographicSegment).

En XSD 1.0, los elementos secundarios de un todo-grupo deben tener maxOccurs de 1, lo que algunas personas consideran incómodamente restrictivo, pero en su caso eso es lo que desea de todos modos. En XSD 1.1 esa restricción se levanta.

22

Use xs:all en lugar de xs:sequence.

+0

No tiene mucho sentido agregar nuevas respuestas que no agreguen información nueva a las publicaciones anteriores, sin embargo, su respuesta es más fácil de leer, por lo tanto, se ha hecho +1 en – vdbuilder

Cuestiones relacionadas