Схема XML для проверки каждого значения в списке атрибутов NMTOKENS - PullRequest
5 голосов
/ 29 ноября 2011

Учитывая этот XML-файл:

<users blessed="phrogz alians">
  <user name="phrogz"  id="42" />
  <user name="lachtok" id="3"  />
  <user name="vielee"  id="5"  />
  <user name="alians"  id="17" />
</users>

... возможно ли создать проверку в стиле XSD key / keyref, которая гарантирует, что каждое значение в списке blessed соответствуетсуществующий user/@name?

Если это невозможно с XSD, возможно ли это с RelaxNG?

1 Ответ

5 голосов
/ 29 ноября 2011

Нет, это невозможно с XSD 1.0. Конечно, в XSD 1.1 это просто, используя утверждения:

Уникальность (если определено на уровне элемента users):

<xsl:assert test="count(@blessed) = count(distinct-values(@blessed))"/>

Ссылочная целостность (если определена на уровне элемента users):

<xsl:assert test="every $t in data(@blessed) satisfies $t = user/@name"/>
...