Schematron应用于不同的xsi名称空间

时间:2015-09-17 10:07:16

标签: xml xslt xml-namespaces schematron

我们有一个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,但我想知道是否有正确的(更好的)方法来实现这一点。

1 个答案:

答案 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>