Моя проблема (или вопрос) сосредоточена вокруг пустых элементов, которые напечатаны как 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>