应用于不同 xsi 命名空间的 Schematron
Schematron applied to different xsi namespaces
我们有一个 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"
这个 'new' xsi 命名空间导致上面定义的规则不被触发(因为规则不共享相同的 xsi)。有没有一种方法可以以独立于 xsi 命名空间触发规则的方式定义 schematron 命名空间?
总是可以选择基于 local-name()="type" 而不是使用 xsi:type 来定义规则,但我想知道是否有正确的(更好的) ) 的实现方式。
这是来自旧规范的 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>
我们有一个 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"
这个 'new' xsi 命名空间导致上面定义的规则不被触发(因为规则不共享相同的 xsi)。有没有一种方法可以以独立于 xsi 命名空间触发规则的方式定义 schematron 命名空间?
总是可以选择基于 local-name()="type" 而不是使用 xsi:type 来定义规则,但我想知道是否有正确的(更好的) ) 的实现方式。
这是来自旧规范的 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>