XSD: Как я могу ограничить несколько значений, которые связаны между собой? - PullRequest
1 голос
/ 04 марта 2011

У меня есть элемент XML, скажем, <fruit>, который ограничен перечислением, так что он может принимать только значения: apple, orange, watermelon

У меня также есть другое поле, которое также должно быть ограничено перечислением со следующими значениями: red, orange, green

Есть ли способ как-то связать эти два элемента, чтобы единственными возможными комбинациями были: apple-red, orange-orange, watermelon-green? Я пытался найти какое-то перечисление в сложных типах, но кажется, что XSD их не поддерживает.

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Нет в XSL-схеме нет возможности сделать это.

Есть два способа достичь желаемого:

Если вам действительно нужно придерживаться XSD-схемы:

  • Использование преобразования Schematron и определение этих правил

Если вы не обязаны использовать XSD-схему в вашей среде

  • , вам действительно следуетиспользуйте взамен Relax NG .

В Relax NG у вас гораздо больше возможностей выразить сложное поведение.Кроме того, его гораздо проще писать и понимать, чем схему XSD.

В Relax NG то, что вы хотите выразить, выглядело бы так (вы могли бы определить свой элемент 3 раза в выборе)

<choice>
 <element name="fruit-combination">
  <element name="fruit">
   <value>apple</value>
  <element>
  <element name="colour">
   <value>red</value>
  </element>
 </element>
 <element name="fruit-combination">
  <element name="fruit">
   <value>orange</value>
  <element>
  <element name="colour">
   <value>orange</value>
  </element>
 </element>
 <element name="fruit-combination">
  <element name="fruit">
   <value>watermelon</value>
  <element>
  <element name="colour">
   <value>green</value>
  </element>
 </element>
</choice>

Затем реализация Relax NG выберет подходящий для вас элемент.Если вы используете хороший редактор xml и поместили свой элемент apple в файл, он даже ограничит вас, так что вы можете добавить только цветной элемент со значением red и т. Д.

В Schematron вы простонаписать правило для элемента color со значением red допустимо только в том случае, если в нем есть элемент fruit со значением apple.Сам по себе Schematron - это не что иное, как специальная XSL-трансформация, которая применяет некоторые правила к документу xml и выводит отчет об ошибках и предупреждениях в форме XML.

См .:

http://relaxng.org/ http://www.schematron.com/ (Спецификация) http://www.schematron.com/implementation.html (Реализация)

0 голосов
/ 04 марта 2011

Это хорошо известное ограничение в XSD 1.0, которое исправлено в XSD 1.1 с помощью механизмов утверждений и / или условного присвоения типов.

XSD 1.1 в настоящее время реализован в Saxon-EE и в Apache Xerces.

...