Mi problema (o pregunta) se centra en elementos vacíos que se escriben como xs: entero. Necesito permitir elementos vacíos, así que utilicé una unión para permitir que un elemento vacío o un número entero válido sea el valor que se muestra en el esquema a continuación. Sin embargo, mi esquema cumple una doble función y también debe importarse en un software de terceros que espera tipos de datos de cadena, flotante, entero o fecha. Si codigo el esquema utilizando el método union para todos los enteros, no se escribirán como enteros en el software. ¿Hay alguna otra manera que no sea el método de unión de permitir un elemento vacío para tipos de datos enteros? Me gustaría simplemente tener un XSD, pero puedo tener dos si eso es lo que debe suceder.XSD: opciones para permitir valores nulos al declarar xs: tipos de datos enteros
Dada XML de ejemplo de:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<division>
<department>
<roles/>
<employees>7</employees>
</department>
</division>
</company>
y el esquema de:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="nullval">
<xs:union memberTypes="IntegerType empty"/>
</xs:simpleType>
<xs:simpleType name="IntegerType">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
<xs:simpleType name="empty">
<xs:restriction base="xs:string">
<xs:maxLength value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="company">
<xs:complexType>
<xs:sequence>
<xs:element name="division">
<xs:complexType>
<xs:sequence>
<xs:element name="department" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<!-- elements may appear in any order -->
<xs:all minOccurs="0" maxOccurs="1">
<xs:element name="roles" type="nullval"/>
<xs:element name="employees" type="xs:integer"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Sí, probé tanto nillable = "true" como minOccurs = "0" y no funcionó (utilizando XMLSpy con Saxon). – johkar
¿Tiene algún control sobre el XML que se envía? ¿Puedes establecer xsi: nil = "true" en el elemento roles? (ref. http://www.w3.org/TR/xmlschema11-1/#xsi_nil) – sho222
Eso es una buena idea. Sí, tengo acceso al XML. Es bastante grande XML y hay muchos elementos declarados como tipos de datos enteros, así que no estoy seguro de querer ir por ese camino. Puede ser más fácil simplemente eliminar todas las etiquetas vacías si voy a tener que hacer un pase adicional. Gracias. – johkar