Нет в 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 (Реализация)