XSD:断言(复杂字符验证)

问题描述 投票:0回答:1

有没有一种方法,以验证该模板仅包含那些传递给@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或否则执行?

xpath xsd-1.1
1个回答
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)])

我将离开你把这个放在一起。

© www.soinside.com 2019 - 2024. All rights reserved.