xsd - totaldigits - esquema xml maxOccurs=ilimitado dentro de xs: all
xsd element types (1)
¿Es posible tener una combinación de xs:all
y xs:sequence
?
Tengo una estructura xml con un elemento probenode que consta de los elementos name, id, url, tags, priority, statuws_raw, active. Y una combinación de dispositivo y grupo.
dispositivo y grupo pueden ocurrir cero o más veces ...
la solución a continuación no funciona porque no está permitido usar ilimitado para un elemento. dentro de un grupo completo
<xs:complexType name="probenodetype">
<xs:all>
<xs:element name="name" type="xs:string" />
<xs:element name="id" type="xs:unsignedInt" />
<xs:element name="url" type="xs:string" />
<xs:element name="tags" />
<xs:element name="priority" type="xs:unsignedInt" />
<xs:element name="status_raw" type="xs:unsignedInt" />
<xs:element name="active" type="xs:boolean" />
<xs:element name="device" type="devicetype" minOccurs="0" maxOccurs="unbounded">
<!-- zie devicetype -->
</xs:element>
<xs:element name="group" type="grouptype" minOccurs="0" maxOccurs="unbounded">
<!-- zie grouptype -->
</xs:element>
</xs:all>
<xs:attribute name="noaccess" type="xs:integer" use="optional" />
</xs:complexType>
En XSD 1.0, los elementos secundarios de xs: all deben tener maxOccurs establecido en 1.
En XSD 1.1 esta restricción se levanta.
Entonces, sus alternativas parecen ser:
Use un procesador XSD 1.1 (Saxon o Xerces-J).
Use XSD 1.0 e imponga un orden en los hijos de probenodetype. Esto es un problema si el orden en el que aparecen los hijos lleva información (por lo que id seguido de url es diferente de url seguido de id ...).
En algunos casos simples, es factible escribir un modelo de contenido que acepte exactamente lo que usted sugiere que desea, usando solo opciones y secuencias, pero con siete elementos requeridos, el modelo de contenido resultante es probable que sea demasiado largo y complejo para ser útil.
En este punto, algunos usuarios abandonan y escriben un tipo complejo con un grupo OR repetible y transfieren la responsabilidad de verificar ese nombre, identificador, URL, etc. todos ocurren al menos una vez y como máximo una vez en la aplicación; que permite que el generador de XML no tenga que preocuparse por un pedido fijo (y abre un canal lateral para la filtración de información, lo cual es importante para algunas personas) pero también hace que el esquema sea menos útil como documentación del contrato entre proveedor de datos y datos consumidor.