Моя проблема (или вопрос) сосредоточена вокруг пустых элементов, которые набраны как xs: integer. Мне нужно разрешить пустые элементы, поэтому я использовал объединение, чтобы разрешить пустой элемент или действительное целое число в качестве значения, как показано в схеме ниже. Однако моя схема выполняет двойную роль, и ее также необходимо импортировать в стороннее программное обеспечение, которое ожидает типы данных String, Float, Integer или Date. Если я кодирую схему с использованием метода объединения для всех целых чисел, они не будут вводиться как целые числа в программе. Есть ли другой способ, кроме метода объединения, разрешить пустой элемент для целочисленных типов данных? Я хотел бы иметь только один XSD, но могу иметь два, если это необходимо.
Дан образец XML:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<division>
<department>
<roles/>
<employees>7</employees>
</department>
</division>
</company>
И схема:
<?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>