xml - minoccurs= 0 que significa
¿Diferencia entre<xsd: all> y<xsd: sequence> en la definición de esquema? (5)
Estoy usando xsd:all
en un tipo complejo. Cuando pierdo elementos obligatorios durante la validación, mostraré todos los elementos. No mostrará el elemento perdido exacto.
Pero si uso xsd:sequence
, puedo obtener el elemento perdido exacto.
¿Hay alguna diferencia entre estos dos?
xsd:sequence
: el elemento XML debe estar en el mismo orden.
Pero xsd:all
: el elemento XML puede ser cualquier orden.
Diferencia:
- xsd: all - "los elementos secundarios pueden aparecer en cualquier orden y cada elemento hijo puede ocurrir cero o una vez" (es decir, maxOccurs puede ser 0 o 1)
- xsd: sequence - "los elementos secundarios deben aparecer en una secuencia. Cada elemento hijo puede ocurrir de 0 a cualquier cantidad de veces" (es decir, maxOccurs puede ser 0 o cualquier número o ''ilimitado'')
El esquema simplemente define qué constituye un documento compatible.
Cómo se informa el incumplimiento se debe exclusivamente al validador. No hay nada que impida que un validador informe exactamente qué campos faltan, pero aparentemente el que usted usa no lo hace en este caso.
Ya sea que se trate de un error o por diseño, tendría que hablar con el proveedor del validador.
cuando usamos under tag, indica que todos los elementos que se declaran en ese complexType DEBEN aparecer en el mismo orden en el documento XML. de lo contrario, obtendrá un error. porque no hay necesidad de especificar elementos en el orden correcto.
<xsd:all>
especifica que los elementos secundarios pueden aparecer en cualquier orden.
<xsd:sequence>
especifica que los elementos secundarios solo pueden aparecer en el orden mencionado.
Ejemplo de secuencia:
<xs:element name="compElement">
<xs:complexType>
<xs:sequence>
<xs:element name="ele1" type="xs:string"/>
<xs:element name="ele2" type="xs:string"/>
<xs:element name="ele3" type="xs:string"/>
<xs:element name="ele4" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Si crea un XML a partir de este xsd, se verá más o menos así:
<compElement>
<ele1>First</ele1>
<ele2>Second</ele2>
<ele3>Third</ele3>
<ele4>Fourth</ele4>
</compElement>
Ejemplo para todos:
<xs:element name="compElement">
<xs:complexType>
<xs:all>
<xs:element name="ele1" type="xs:string"/>
<xs:element name="ele2" type="xs:string"/>
<xs:element name="ele3" type="xs:string"/>
<xs:element name="ele4" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Si crea un archivo XML a partir de este xsd, podría verse más o menos así:
<compElement>
<ele2>Second</ele2>
<ele1>First</ele1>
<ele4>Fourth</ele4>
<ele3>Third</ele3>
</compElement>
Más información sobre xsd: all
Más información sobre xsd: secuencia
Espero que haya respondido tu pregunta.
Todo indicador
El indicador
<all>
especifica que los elementos secundarios pueden aparecer en cualquier orden y que cada elemento hijo debe aparecer solo una vez:
Indicador de secuencia
El indicador
<sequence>
especifica que los elementos secundarios deben aparecer en un orden específico: