XML-схема для ограничения одного поля на основе другого
Вопрос
У меня есть следующая схема, которую я использую, чтобы убедиться, что человек PhoneNumber
и PhoneNumberType
(Дом, Работа и т. д.) не длиннее 10 символов.Однако я хочу улучшить эту схему, чтобы PhoneNumberType
не требуется, если PhoneNumber
не предусмотрено, но требуется, если PhoneNumber
предоставлен.Есть ли способ сделать это в XML-схеме 1.0?
Я знаю, что это можно сделать в XML-схеме 1.1, используя <xs:assert/>
, но, к сожалению, я застрял на XML-схеме 1.0.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xs:element name="PhoneNumber">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PhoneNumberType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xsd:schema>
Решение
Извините, XML-схема не может этого сделать.
Несколько похожих вопросов:
Другие советы
Мне кажется, это отношение «имеет».
Если у вас есть элемент PhoneNumber, он должен иметь свойство типа PhoneNumberType.Вместо того, чтобы возиться с проверкой и ограничениями, я бы предложил вам превратить PhoneNumber в сложный элемент и сделать PhoneNumberType обязательным его свойством.
Возможно, уже слишком поздно, но вы можете объединить их в группу вот так.
<xs:group name="group">
<xs:sequence>
<xs:element ref="PhoneNumber"/>
<xs:element ref="PhoneNymberType" />
</xs:sequence>
И сделать эту группу обязательной или нет