Ограничение в XML-схеме - PullRequest
3 голосов
/ 30 июля 2011

Мне нужно наложить ограничение на целое число, которое может принимать значения от 1 до 48, но также может принимать одно значение 63. Можно ли это сделать?

Я знаю, что следующее ограничение позаботится о следующем, но как я могу добавить 63 к списку?

    <xs:simpleType name="nameId">
      <xs:element name="id">
        <xs:simpleType>
          <xs:restriction base="xs:integer">
            <xs:minInclusive value="1"/>
            <xs:maxInclusive value="48"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:simpleType>

Ответы [ 3 ]

2 голосов
/ 30 июля 2011

Определите два типа: один допускает целое число в диапазоне 1-48, а другой разрешает только целое число 64;затем определите тип, который является объединением этих двух.

Или в XSD 1.1, просто определите тип, который ограничивает xs: integer с фасетом

<assert test="$value=(1 to 48, 64)"/>

0 голосов
/ 30 июля 2011

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

<xs:restriction base="xs:integer">
      <xs:enumeration value="1"/>
      <xs:enumeration value="2"/>
      <xs:enumeration value="3"/>
      <xs:enumeration value="4"/>
      <xs:enumeration value="5"/>
      <xs:enumeration value="6"/>
      <xs:enumeration value="7"/>
      <xs:enumeration value="8"/>
      <xs:enumeration value="9"/>
      <xs:enumeration value="10"/>
      <xs:enumeration value="11"/>
      <xs:enumeration value="12"/>
      <xs:enumeration value="13"/>
      <xs:enumeration value="14"/>
      <xs:enumeration value="15"/>
      <xs:enumeration value="16"/>
      <xs:enumeration value="17"/>
      <xs:enumeration value="18"/>
      <xs:enumeration value="19"/>
      <xs:enumeration value="20"/>
      <xs:enumeration value="21"/>
      <xs:enumeration value="22"/>
      <xs:enumeration value="23"/>
      <xs:enumeration value="24"/>
      <xs:enumeration value="25"/>
      <xs:enumeration value="26"/>
      <xs:enumeration value="27"/>
      <xs:enumeration value="28"/>
      <xs:enumeration value="29"/>
      <xs:enumeration value="30"/>
      <xs:enumeration value="31"/>
      <xs:enumeration value="32"/>
      <xs:enumeration value="33"/>
      <xs:enumeration value="34"/>
      <xs:enumeration value="36"/>
      <xs:enumeration value="36"/>
      <xs:enumeration value="37"/>
      <xs:enumeration value="38"/>
      <xs:enumeration value="39"/>
      <xs:enumeration value="40"/>
      <xs:enumeration value="41"/>
      <xs:enumeration value="42"/>
      <xs:enumeration value="43"/>
      <xs:enumeration value="44"/>
      <xs:enumeration value="45"/>
      <xs:enumeration value="46"/>
      <xs:enumeration value="47"/>
      <xs:enumeration value="48"/>
      <xs:enumeration value="63"/>
    </xs:restriction>
0 голосов
/ 30 июля 2011

Вместо использования целочисленной базы вы можете использовать RegEx?

Например, это почти сработало бы, но у него есть предостережение ....

   <xs:simpleType name="nameId">
      <xs:element name="id">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="([1-4]{1}\d|63)"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:simpleType>

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...