XSD: параметры для разрешения нулевых значений при объявлении типов данных xs: integer

Моя проблема (или вопрос) сосредоточена вокруг пустых элементов, которые набраны как 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>
11
задан johkar 6 December 2010 в 19:28
поделиться