XQuery中的复杂类型检查

时间:2019-03-20 21:24:39

标签: xquery saxon

我有一个包含许多complexType的架构,其中有些具有子类型(通过xsi:type)。我需要创建一个XQuery表达式,以检查元素(MyPath)是否是父类型的成员,但是没有其他人,我尝试过以下形式的表达式,但是没有运气。 / p>

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

似乎element适用于它所调用的上下文中的所有子项,但不适用于本身(MyPath),这不会产生任何结果。

我也尝试了instance of运算符,但这似乎仅适用于simpleType

1 个答案:

答案 0 :(得分:1)

您应该使用

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

如果这不起作用,请提供MCVE

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

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