我有一个有很多complexType
的架构,其中一些有子类型(通过xsi:type
)。我需要创建一个XQuery
表达式,检查一个元素(MyPath
)是父类型的成员,但没有其他人,我在下面的表单中尝试了一个没有运气的表达式。
/MyPath[element(*,ParentClass) and not element(*,ChildClass)]
看来element
适用于所谓的上下文中的所有孩子,但不适用于自身(MyPath
),这不会产生任何结果。
我也尝试过instance of
算子,但这似乎只适用于simpleType
。
你应该用
. instance of element(*, ParentClass)
and not(. instance of element(*, ChildClass))
如果这不起作用请提供MCVE
使用Saxon扩展函数的另一种方法是直接测试类型注释:saxon:type-annotation(.) eq xs:QName('ParentClass')
当然,这是一个好的做法还有一个问题。定义派生类型的全部意义在于它应该可以替代基类型;在任何可以使用父类型实例的地方,您都应该能够替换子类型的实例。您似乎故意试图设计一个不是这种情况的查询。