¿Cómo puedo diseñar mi xsd para ignorar la secuencia de elementos?Ignorar el orden de los elementos usando xs: extensión
<root> <a/> <b/> </root>
<root> <b/> <a/> </root>
Tengo que utilizar extension
por razones de generación de código, por lo que trataron los siguientes utilizando all
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.example.com/test"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:t="http://www.example.com/test" >
<xs:complexType name="BaseType">
<xs:all>
<xs:element name="a" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="ExtendedType">
<xs:complexContent>
<xs:extension base="t:BaseType">
<xs:all> <!-- ERROR -->
<xs:element name="b" type="xs:string" />
</xs:all>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="root" type="t:ExtendedType"></xs:element>
</xs:schema>
Este XSD no es válida sin embargo, th e siguiente error se informa en <!-- ERROR -->
:
cos-all-limited.1.2: Un grupo de todo el modelo debe aparecer en una partícula con {min} se produce = {ocurre max} = 1, y que las partículas debe ser parte de un par que constituye el {tipo de contenido} de una definición de tipo complejo.
Documentación de cos-all-limited.1.2 dice:
1,2 la {término} característica de una partícula con {ocurre max} = 1, que es parte de un par que constituye el {tipo de contenido} de un tipo complejo definición.
yo no entiendo muy bien esto (ni tampoco xsd Inglés nativo :)).
¿Estoy haciendo lo incorrecto, estoy haciendo lo correcto o no hay forma de lograrlo?
@Peter derecho, echaba de menos esa parte. Aquí hay una actualización. – Bolo
Gracias por su actualización. Desafortunadamente necesito definir algunos elementos en el tipo base, y algunos en el extendido, así que a menos que haya otra forma, los elementos del tipo extendido siempre tendrán que ser colocados después de los elementos del tipo base ... –
@Peter En ese caso, dado que "dos modelos de contenido se tratan como dos hijos de un grupo secuencial", no hay forma (hasta donde puedo ver) de ignorar la secuencia. – Bolo