我们有一个schematron,其xsi名称空间声明如下
<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding='xslt2'>
<ns prefix="xsi" uri="http://www.w3.org/2001/XMLSchema-instance"/>
我们这样做是因为我们想要定义基于上下文的规则如下:
<rule context="*[@xsi:type='DATA_TYPE']">...</rule>
这些规则适用于我们目前收到的过去的XML文件。但是,我们最近收到了一个XML,其xsi名称空间定义为:
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
这个&#39;新&#39; xsi名称空间导致不触发上面定义的规则(因为规则不共享相同的xsi)。有没有办法以一种独立于xsi名称空间方式触发规则的方式来定义schematron命名空间?
总是可以选择根据local-name()=&#34; type&#34;来定义规则。而不是使用xsi:type,但我想知道是否有正确的(更好的)方法来实现这一点。
答案 0 :(得分:1)
这是旧规范中XMLSchema-instance
命名空间的一个版本。
您可以为它添加另一个前缀声明:
<ns prefix="xsi_old" uri="http://www.w3.org/2000/10/XMLSchema-instance"/>
然后调整规则以测试两者:
<rule context="*[@xsi:type='DATA_TYPE' or @xsi_old:type='DATA_TYPE']">...</rule>