是否有办法验证模板仅包含传递给@param的那些字符?
我考虑了带有xpath函数(fn :)的选项,但是没有找到合适的选项。
例如,这是2个有效xml:
<rule type="myRule" template="A-B-CB">
<attribute param="B"/>
<attribute param="A"/>
<attribute param="C"/>
</rule>
<rule type="myRule" template="A(C)-B">
<attribute param="C"/>
<attribute param="A"/>
<attribute param="B"/>
</rule>
和2个无效的xml:
<rule type="myRule" template="AB-CD">
<attribute param="A"/>
<attribute param="B"/>
<attribute param="C"/>
</rule>
<rule type="myRule" template="AC">
<attribute param="A"/>
<attribute param="B"/>
<attribute param="C"/>
</rule>
也许有想法如何使用schematrone或其他方式实现它?
答案 0 :(得分:1)
因此@template
中的字母集必须与./attribute/@param
中的字母集完全相同吗?
也就是说,distinct-values(string-to-codepoints(replace(@template, '\P{L}', '')))
必须与distinct-values(attribute/@param/string-to-codepoints())
相同。
那么您如何断言在置换下两个序列包含相同的值?
在XPath 3.1中,deep-equal(sort($X), sort($Y))
在XPath 2.0中,我想不出什么比
empty($X[not(.=$Y)]) and empty($Y[not(.=$X)])
我会让你把它们放在一起。