Добавочное значение элемента в xsd - PullRequest
1 голос
/ 25 мая 2011

У меня есть схема xsd для проверки xml. Эта схема определяет элемент:

<xsd:element name="num" default="0">
  <xsd:simpleType>
    <xsd:union memberTypes="xsd:integer xsd:positiveInteger" />
  </xsd:simpleType>
</xsd:element>

Существует также уникальное ограничение для num значений элементов.

Я хочу, чтобы значения элементов были в порядке возрастания. Как мне это сделать? Может быть, цикл или проверка позиции, или, возможно, можно присвоить элементу некоторое инкрементное значение?

Пример данных:

<num>0</num> 
<num>1</num> 
<num>2</num>
<num>3</num>

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Невозможно указать такое ограничение с использованием схемы XSD.Вы можете указать такое ограничение, используя язык схемы Schematron.

например,

<sch:rule context="num[preceding-sibling::num]">
  <sch:let name="the-preceding-value" value="preceding-sibling::num[1]"/>
  <sch:let name="the-value" value="."/>
  <sch:assert test="number($the-value) = (number($the-preceding-value)+1)">The value
      <sch:value-of select="$the-value"/> is not in sequence; it must be <sch:value-of
    select="$the-preceding-value + 1"/></sch:assert>
</sch:rule>
0 голосов
/ 25 мая 2011

В XSD 1.1 (реализовано в настоящее время в Xerces и Saxon) вы можете иметь утверждение о родительском типе элементов num:

<xs:assert test="every $i in 1 to count(num) satisfies num[$i] = $i - 1"/>

(Обратите внимание, что это не может быть утверждение для самого элемента num, поскольку допустимость элемента не может зависеть ни от каких элементов вне его собственного содержимого.)

...