我试图验证在单个属性中编写的列表的所有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的结构,我知道使用元素列表会更容易/可行,但我有一些限制阻止我改变结构。
你们有解决方案吗?
答案 0 :(得分:2)
假设您使用Schematron和XSLT / XPath 2.0,您可以使用
<assert test="every $id in tokenize(@regions, ',\s*') satisfies $id = //Regions/Region/@id"/>