XML-схема для ограничения одного поля на основе другого

StackOverflow https://stackoverflow.com/questions/2518384

  •  22-09-2019
  •  | 
  •  

Вопрос

У меня есть следующая схема, которую я использую, чтобы убедиться, что человек 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>

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top