Схема XML: проверка списка дочерних элементов - PullRequest
1 голос
/ 04 января 2012
<structure>
  <pause length="2s" />
  <action ref="move" />
  <action ref="replace" />
  <pause length="2s" />
  <pause length="2s" /> <!-- error -->
  <action ref="move" />
  <action ref="move" /> <!-- error -->
  <pause length="2s" title="cd"/>
  <pause length="2s" title="cu"/> <!-- ok -->
  <action ref="move" title="m1" />
  <action ref="move" title="m2" /> <!-- ok-->
  <action ref="remove" />
  <pause length="2s" /> <!-- error -->
<structure>

Я новичок в написании XML-схем. Я хотел бы знать, есть ли способ выполнить следующую операцию проверки с помощью XSD:

  • СТРУКТУРА содержит ПАУЗУ и ДЕЙСТВИЕ в любом порядке
    • СТРУКТУРА содержит хотя бы одно ДЕЙСТВИЕ
    • без СТРУКТУРЫ с разрешенной только паузой
  • никакая PAUSE не может следовать за PAUSE, пока оба (или только один, если это невозможно) не будут иметь различного @ TITLE
  • СТРУКТУРА не может заканчиваться паузой
  • никакое ДЕЙСТВИЕ не может следовать за ДЕЙСТВИЕМ с одним и тем же @REF, пока оба (или только один, если это невозможно) не будут иметь разное @ НАЗВАНИЕ

1 Ответ

1 голос
/ 04 января 2012

XSD 1.0 в основном позволяет указывать ограничения в форме грамматики.Вы не описали свои ограничения таким образом, и я сомневаюсь, можно ли выразить их как грамматику.Для таких правил вам нужна схема, которая описывает набор ограничений целостности или правил, что означает либо Schematron или XSD 1.1, либо пользовательский валидатор, написанный с использованием XSLT.

Эти правила довольно легко выразить как утверждения XSD 1.1на элемент структуры.Детали зависят от того, означает ли «следует» в вашем описании «сразу следует».

...