XQuery中的复杂类型检查

问题描述 投票:2回答:1

我有一个有很多complexType的架构,其中一些有子类型(通过xsi:type)。我需要创建一个XQuery表达式,检查一个元素(MyPath)是父类型的成员,但没有其他人,我在下面的表单中尝试了一个没有运气的表达式。

/MyPath[element(*,ParentClass) and not element(*,ChildClass)]

看来element适用于所谓的上下文中的所有孩子,但不适用于自身(MyPath),这不会产生任何结果。

我也尝试过instance of算子,但这似乎只适用于simpleType

xquery saxon
1个回答
1
投票

你应该用

. instance of element(*, ParentClass) 
and not(. instance of element(*, ChildClass))

如果这不起作用请提供MCVE

使用Saxon扩展函数的另一种方法是直接测试类型注释:saxon:type-annotation(.) eq xs:QName('ParentClass')

当然,这是一个好的做法还有一个问题。定义派生类型的全部意义在于它应该可以替代基类型;在任何可以使用父类型实例的地方,您都应该能够替换子类型的实例。您似乎故意试图设计一个不是这种情况的查询。

© www.soinside.com 2019 - 2024. All rights reserved.