#xml #xsd #xsd-validation
#xml #xsd #xsd-проверка
Вопрос:
Мой фактический xml выглядит примерно так:
<gender code="2" display="female />
Код для обозначения пола: 1-мужской, 2-женский. Теперь у меня уже есть xsd, подобный этому:
<xs:element name="gender">
<xs:complexType>
<xs:attribute name="code" type="xs:int">
<xs:simpleType>
<xs:restriction base="int">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="displayName" type="xs:string">
<xs:simpleType>
<xs:restriction>
<xs:enumeration value="male"/>
<xs:enumeration value="female"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
Но это также справедливо для этого xml:
<gender code="2" display="male />
Я ищу xs: ограничение, но это кажется бесполезным.Есть ли другой способ исправить мой xsd?
Комментарии:
1. Я не могу понять, зачем вы вообще беспокоитесь об этих избыточных (ненормализованных) элементах.
code
уже содержит необходимую информацию иdisplay
кажется просто украшением для потребления человеком; Я не вижу смысла включать это в схему и тем более для каждого элемента person в отдельности.
Ответ №1:
Чтобы наложить ограничения на несколько атрибутов, вам нужны утверждения XSD 1.1:
<xs:assert test="(@code=1 and @display='male')
or (@code=2 and @display='female')"/>
как дочерний элемент xs:element
.
Но не все процессоры схем поддерживают XSD 1.1.