3

我正在使用 Schematron 中的 xPath。我能够检查一个类型是否等于一个目标类型。例如'xsd:string eq xsd:string'。

<sch:rule context="uis:variable/uis:dependency/uis:length">
<sch:assert test="**../../@type eq 'xsd:string'**">      
Text        
</sch:assert>                       
</sch:rule>

如何检查用户定义的类型是否派生自 xsd:string?我试过了:

<sch:rule context="uis:variable/uis:dependency/uis:length">
<sch:assert test="**../../@type instance of attribute (*,xsd:string)**">
Text        
</sch:assert>                       
</sch:rule>

但它不起作用。

4

1 回答 1

4

没有公开的 XPath 2.0 功能可以执行此操作。事实上,XPath 2.0 类型不是一等值;无法从仅在运行时知道的名称中找到类型,也无法要求类型的属性。您将需要使用扩展:Xerces 和 Saxon 都有用于询问模式组件的 API,并且您可以构建调用这些的 Java 扩展函数。

于 2011-11-30T15:56:58.513 回答