XSD и требование наличия элемента или другие опции - PullRequest
1 голос
/ 04 марта 2011

Могу ли я определить требования к элементу на уровне XSD на основе наличия другого элемента в документе?

Например, я хочу, чтобы элемент <firstname /> предоставлялся всякий раз, когда также присутствует элемент <id />, в противном случае имя необязательно.

Если это не может быть применено в XSDуровень, тогда я должен сделать оба элемента необязательными и обеспечить соблюдение требования через другой уровень проверки?

Опции приветствуются.

Ответы [ 2 ]

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

Вот пример того, как это делается в DTD. (Примечание. Экземпляры теста были проверены с помощью oXygen XML Editor (который использует Xerces).)

DTD (test.dtd)

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT user ((firstname?|(firstname,id)),lastname)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT id (#PCDATA)>

Вот несколько примеров экземпляров XML (допустимых и недействительных):

Действительно

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
  <firstname/>
  <id/>
  <lastname/>
</user>

Invalid

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
  <id/>
  <lastname/>
</user>

Действительно

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
  <firstname/>
  <lastname/>
</user>
1 голос
/ 04 марта 2011

Это не может быть применено на уровне XSD.

Сделать оба элемента необязательными и обеспечить соблюдение требований на другом уровне в архитектуре приложения для меня - хороший вариант.

...