XSD ограничения на основе открытых / закрытых элементов - PullRequest
2 голосов
/ 01 июля 2011

Есть ли способ в схеме указать требование атрибутов, определяемых открытым или закрытым характером элемента. Например, у меня есть элемент, который, если для open нет требования для атрибута 'test', однако если он закрыт, он необходим.

<element name="employee" >
    blah!
</element>

Ok

<element name="employee" />

Fail - обязательный атрибут 'test'.

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Я предполагаю, что вы используете "open", чтобы обозначить, что элемент имеет дочерний текстовый узел, и "closed", чтобы обозначить, что он не имеет. То есть вы говорите, что элемент должен иметь дочерний элемент или атрибут текстового узла, но не оба (?) И ни того, ни другого.

Это классифицируется как ограничение совместного использования и не может быть сделано в XSD 1.0. Это можно сделать с помощью утверждений в XSD 1.1

<xs:element name="employee" type="...">
  <xs:assert test="string(.) or @name"/>
</xs:element>

Поддержка XSD 1.1 в настоящее время доступна в Xerces и Saxon.

0 голосов
/ 01 июля 2011

Нет, нет способа сделать это. (Я бы привел ссылку, но трудно сослаться на не-функцию!)

В общем, это шаг за пределы того, что обеспечивает XSD; только в очень немногих случаях (например, IDREF) он предоставляет какой-либо способ проверки одного элемента путем ссылки на другой. XSD 1.1 предоставляет некоторую новую поддержку утверждений , которая может делать то, что вам нужно, но на данный момент спецификация - это всего лишь рабочий черновик.

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