Lamento que haya estado trabajando duro con este problema desde hace 7 años sin respuesta.
Voy a ayudar revisando sus suposiciones.
Al tratar "Nombre" como un dato que debe venir primero, y que requiere que sea un hijo de la Aplicación, y luego, en general, diciendo que no le importa el orden de sus hermanos, está haciendo una situación confusa para ti. ¿Por qué Name es un hermano de ADD y DELETE si sigue reglas diferentes y tiene un propósito diferente? Si tuviera que modelar esto en cualquier otra estructura de datos, no incluiría "Nombre" en una lista de cosas junto con "AGREGAR" y "ELIMINAR". Diría dos cosas: una aplicación tiene un nombre y también una lista de comandos como AGREGAR y ELIMINAR.
Dado que Name es algo especial en comparación con ADD y DELETE, entonces debe modelarse por separado de esas otras etiquetas.
Entonces, puede hacer que Nombre sea un atributo de Aplicación y mantener Agregar y Eliminar como elementos secundarios, o puede mantener Nombre como elemento secundario pero rodear AGREGAR y ELIMINAR con un marcador de posición/agrupación, como Comandos . La etiqueta Commands sería el único hermano de Name.
Aquí hay un esquema que admite el nombre como un atributo, con un número arbitrario de comandos en cualquier orden. "Nombre como Attribute.xsd":
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Application" type="Application_Type" />
<xs:complexType name="Application_Type">
<xs:all>
<xs:element minOccurs="0" ref="ADD"/>
<xs:element minOccurs="0" ref="DELETE"/>
<xs:element minOccurs="0" ref="THIRD"/>
<xs:element minOccurs="0" ref="FOURTH"/>
</xs:all>
<xs:attribute name="Name"/>
</xs:complexType>
<xs:element name="ADD"/>
<xs:element name="DELETE"/>
<xs:element name="THIRD"/>
<xs:element name="FOURTH"/>
</xs:schema>
Ejemplo XML:
<?xml version="1.0" encoding="UTF-8"?>
<Application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="text" xsi:noNamespaceSchemaLocation="Name as Attribute.xsd">
<THIRD>text</THIRD>
<ADD>text</ADD>
<FOURTH>text</FOURTH>
<DELETE>text</DELETE>
</Application>
Y es uno con los comandos anidados dentro de una etiqueta de marcador de posición aquí. "Comandos Grouping.xsd":
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Application" type="Application_Type"/>
<xs:complexType name="Application_Type">
<xs:sequence>
<xs:element ref="Name"/>
<xs:element name="Commands" type="Commands_Type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Commands_Type">
<xs:all>
<xs:element minOccurs="0" ref="ADD"/>
<xs:element minOccurs="0" ref="DELETE"/>
<xs:element minOccurs="0" ref="THIRD"/>
<xs:element minOccurs="0" ref="FOURTH"/>
</xs:all>
</xs:complexType>
<xs:element name="Name"/>
<xs:element name="ADD"/>
<xs:element name="DELETE"/>
<xs:element name="THIRD"/>
<xs:element name="FOURTH"/>
</xs:schema>
Ejemplo XML:
<?xml version="1.0" encoding="UTF-8"?>
<Application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Commands Grouping.xsd">
<Name>text</Name>
<Commands>
<THIRD>text</THIRD>
<ADD>text</ADD>
<FOURTH>text</FOURTH>
<DELETE>text</DELETE>
</Commands>
</Application>
Una nota acerca de cualquiera de éstos es que los mensajes con comandos de cero son todavía mensaje válido. Quizás está bien, pero si es un problema, tal vez esa validación pertenece a la capa de Aplicación en lugar de a la XSD.
Muchas gracias por su respuesta. Bien afinado mi pregunta anterior. Quise decir que ADD y DELETE no deberían aparecer 0 o 1 veces, pero su orden no es importante. "todos" no se puede utilizar en este caso, porque el elemento obligatorio NAME no puede venir con "todos". ¿Tiene alguna otra solución? Gracias – ogee
Funciona únicamente con el atributo maxOccurs = "ilimitado" para la etiqueta de elección – Pooya