XQuery 中的复杂类型检查

Complex type checks in XQuery

我有一个包含许多 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')

当然,这是否是一种好的做法存在疑问。定义派生类型的全部意义在于它应该可以替代基类型;在任何可以使用父类型实例的地方,您都应该能够替换子类型的实例。您似乎是在故意尝试设计一个并非如此的查询。