validacion significa que opcional minoccurs elemento ejemplo xml xsd xsd-validation xml-validation

xml - significa - validacion xsd



¿Estableciendo minOccurs y maxOccurs en XSD según el valor de otro campo XML? (1)

Recomendación de diseño : si su diseño XML aún se puede cambiar, elimine el elemento de size y transmita esa información implícitamente en lugar de explícitamente. Al eliminar la duplicación de información, no necesitará verificar que la duplicación sea consistente.

Si su diseño XML aún no se puede cambiar, o si elige no cambiarlo ...

XSD 1.0

Imposible. Tendría que ser verificado fuera de banda wrt XSD.

XSD 1.1

Posible usando xs:assert :

<?xml version="1.0" encoding="UTF-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="child"> <xs:complexType> <xs:sequence> <xs:element name="size" type="xs:integer"/> <xs:element name="childElement" maxOccurs="unbounded"/> </xs:sequence> <xs:assert test="count(childElement) = size"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

Tengo un XSD para validar un archivo XML. La estructura es la siguiente:

<root> <child> <size>2</size> <childElement>Element 1</childElement> <childElement>Element 2</childElement> </child> </root>

El número de childElement s depende del tamaño proporcionado, es decir, si el size se estableció en 3, no se pueden agregar más de 3 childElement s.

He intentado usar xs:alternative pero no parece funcionar:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="child" minOccurs="1" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="size" type="xs:integer" maxOccurs="1"/> <xs:element name="childElement" type="xs:string" maxOccurs="1"> <xs:alternative test="@size>1" maxOccurs="@size"/> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

¿Hay alguna forma de usar xs:alternative u otra etiqueta para lograr esto, o está fuera del ámbito de posibilidades con XSD?