XSD определяет элемент по имени или альтернативному атрибуту - PullRequest
2 голосов
/ 05 марта 2020

Рассмотрим две возможные реализации «группы тегов»:

Авторам разрешено использовать либо элемент с именем <tag-group>, либо любой элемент с атрибутом role="tag-group".

. Я хотел бы написать схему XSD, которая будет проверять любой случай.

В идеале, схема также может проверять, что дочерние элементы действительны в пределах данного родителя. «Группа тегов», например, позволяет дочерним элементам быть либо элементом с именем <tag>, либо любым элементом с атрибутом role="tag".

Таким образом, идеальная схема будет проверять, что данный <tag-group>, дочерний элемент должно быть <tag>; ИЛИ учитывая любой элемент с role="tag-group", дочерний элемент должен быть любым элементом с role="tag".

Ожидания теста:

PASS

<tag-group>
  <tag>foo</tag>
</tag-group>

PASS

<foo role="tag-group">
  <bar role="tag">fum</bar>
</foo>

FAIL

<tag-group>
  <bar role="tag">fum</bar>
</tag-group>

FAIL

<foo role="tag-group">
  <tag>foo</tag>
</foo>

Я новичок в XSD и с удовольствием просматриваю справочные документы, если вы их связываете.

1 Ответ

2 голосов
/ 06 марта 2020

Чем дальше вы получаете от типа, определяемого именем элемента, тем больше вы обнаруживаете, что в целом вы идете против структуры XSD.

XSD 1.1 * Условное присвоение типа (CTA) позволяют модели содержимого варьироваться в зависимости от значений атрибута. Утверждения XSD 1.1 допускают дальнейшие изменения типов на основе зависимостей данных. Вы можете попытаться создать утверждения для такой дополнительной «гибкости», но я предупреждаю вас, что быстро наступает момент, когда лучше переосмыслить ваш дизайн.

См. Также для CTA:

...