XML-схема для ограничения одного поля на основе другого - PullRequest
4 голосов
/ 25 марта 2010

У меня есть следующая схема, которую я использую, чтобы гарантировать, что PhoneNumber и PhoneNumberType человека (Дом, Работа и т. Д.) Не длиннее 10 символов. Тем не менее, я хочу улучшить эту схему, чтобы PhoneNumberType не требовалось, если PhoneNumber не указано, но требуется, если указывалось PhoneNumber. Есть ли способ сделать это в XML Schema 1.0?

Я знаю, что это может быть достигнуто в XML Schema 1.1 с использованием <xs:assert/>, но, к сожалению, я застрял с XML Schema 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>

Ответы [ 3 ]

0 голосов
/ 10 июня 2011

Может быть слишком поздно, но вы можете поместить их в группу, как это

<xs:group name="group">
<xs:sequence>
    <xs:element ref="PhoneNumber"/>
    <xs:element ref="PhoneNymberType" />
</xs:sequence>

И сделать эту группу обязательной или нет

0 голосов
/ 25 марта 2010

Мне кажется, что это отношения "имеет".

Если у вас есть элемент PhoneNumber, то он должен иметь свойство типа PhoneNumberType. Вместо того, чтобы возиться с проверкой и ограничениями, я бы посоветовал вам превратить PhoneNumber в сложный элемент и сделать PhoneNumberType его обязательным свойством.

...