Schematron XPath:我可以在Schematron中拆分一个像列表一样的字符串属性吗?

时间:2016-06-17 12:57:53

标签: xml xpath schematron

我试图验证在单个属性中编写的列表的所有idRef都已声明为ids。

以下是一个例子:

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

但是我无法找到如何使用&#34;,&#34;分隔的字符串中使用这样定义的列表进行验证。 我无法修改XML的结构,我知道使用元素列表会更容易/可行,但我有一些限制阻止我改变结构。

你们有解决方案吗?

1 个答案:

答案 0 :(得分:2)

假设您使用Schematron和XSLT / XPath 2.0,您可以使用

<assert test="every $id in tokenize(@regions, ',\s*') satisfies $id = //Regions/Region/@id"/>