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

Schematron XPath : Can I split a string attribute acting like a list in a Schematron?

我正在尝试验证在单个属性中写入的列表的所有 idRef 是否已声明为 id。

这是一个例子:

<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 的结构,我知道它会用一个元素列表 easier/feasible 很多,但我有一些限制阻止我改变结构。

你们有解决办法吗?

假设您将 Schematron 与 XSLT/XPath 2.0 一起使用,您可以使用

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