Как сравнить атрибуты друг с другом - PullRequest
1 голос
/ 10 июня 2010

У меня есть элемент Range, такой как

<Range min="-5.0" max="5.0" />

, который описывается в схеме XML как тип RangeType

<complexType name="RangeType">
    <attribute name="min" use="required" type="double" />
    <attribute name="max" use="required" type="double" />
</complexType>

Можно ли использовать XML-схему, чтобы атрибут max был больше, чем атрибут min?

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Нет.Вы не можете указать ограничения между элементами (edit: или cross-attribute) в XML-схеме.

Вам придется написать код или использовать что-то вроде Schematron.

0 голосов
/ 20 марта 2013

Для дальнейшего использования, одним из решений может быть определение вашего диапазона по-другому, с «start» и «count» вместо минимума и максимума.

Таким образом, ваш пример можно переписать так:

<Range start="-5.0" count="10.0" /> <!-- range from -5 to 5 -->

Затем можно использовать схему, чтобы ограничить count минимальным значением 0,0, что делает невозможным, чтобы рассчитанное максимальное значение было ниже минимального:

<xs:complexType name="RangeType">
  <xs:attribute name="start" use="required" type="xs:double" />
  <xs:attribute name="count" use="required">
    <xs:simpleType>
      <xs:restriction base="xs:double">
        <xs:minInclusive value="0.0"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
</xs:complexType>

Если вам не нужно, чтобы диапазон был двойным, вы также можете просто определить count как type="unsignedInt", что позволит избежать пользовательского типа.

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