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"/>
我正在尝试验证在单个属性中写入的列表的所有 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"/>