XSD: параметры разрешения значений null при объявлении типов данных xs:integer
моя проблема (или вопрос) сосредоточена вокруг пустых элементов, которые набираются как xs:integer. Мне нужно разрешить пустые элементы, поэтому я использовал объединение, чтобы разрешить пустой элемент или допустимое целое число в качестве значения, как показано в схеме ниже. Однако моя схема выполняет двойную роль, а также должна быть импортирована в стороннее программное обеспечение, которое ожидает типы данных String, Float, Integer или Date. Если я закодирую схему с помощью метода union для всех целых чисел, они не будут набираться как целые числа в программное обеспечение. Есть ли другой способ, кроме метода объединения, разрешить пустой элемент для целочисленных типов данных? Я хотел бы иметь только один 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>
4 ответов
что вам нужно сделать, это назначить два ограничения на один и тот же элемент, а также сделать их союз, такой как в следующем примере:
<xs:element name='job_code'>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:length value='0'/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base='xs:integer'>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:element>
используя это ограничение, вы говорите проверке XML разрешить любое целочисленное значение и разрешить элемент, если он пуст.
hi nillable= "true"и minOccurs=" 0 " работает только тогда, когда вы вообще не отправляете тег. Если, однако, вам нужно передать пустое значение внутри тегов, я думаю, вам нужно реализовать объединение.
У меня было такое же требование сегодня. После XSD только позволяет пустой, или любое значение между -1 и 999
я извлекаю только необходимый материал из очень большого XSD, поэтому некоторые из них могут выглядеть как излишние.
<xs:simpleType name="emptyString">
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="int-1999">
<xs:restriction base="xs:int">
<xs:minInclusive value="-1"/>
<xs:maxInclusive value="999"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="preNotificationPeriod" nillable="true">
<xs:simpleType>
<xs:union memberTypes="int-1999 emptyString"/>
</xs:simpleType>
</xs:element>
ссылка - http://www.ilearnttoday.com/xsd-empty-values-and-range-restriction-for-numeric-types