Schematron XPath: Могу ли я разделить строковый атрибут, действующий как список в Schematron?

Я пытаюсь проверить, что все idRef списка, написанного в одном атрибуте, уже объявлены идентификаторами.

Вот пример:

<Regions>
    <Region id="REGION1>
    <Region id="REGION3>
    <Region id="REGION3>
</Regions>
<Layouts>
    <Layout regions="REGION1, REGION2, REGION3" />
</Layouts>

Я знаю, как это сделать, если атрибут idRef определяет один idRef:

<rule context="Display[@touchAspectRatio]">
    <assert test="@touchAspectRatio = //TouchAspectRatio/@id"></assert>

<TouchAspectRatio id="T1" />
<Displays>
    <Display touchAspectRatio="T1" />
    <Display touchAspectRatio="T1" />
</Displays>

но я не могу найти, как проверить со списком, определенным как это в строке, отделенной ", ". Я не могу изменить структуру XML, и я знаю, что это было бы намного проще / выполнимо со списком элементов, но у меня есть некоторые ограничения, которые мешают мне изменить структуру.

Ребята, у вас есть решение?

1 ответ

Решение

Предполагая, что вы используете Schematron с XSLT/XPath 2.0, вы можете использовать

<assert test="every $id in tokenize(@regions, ',\s*') satisfies $id = //Regions/Region/@id"/>
Другие вопросы по тегам