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"/>