我有一个包含许多complexType
的架构,其中有些具有子类型(通过xsi:type
)。我需要创建一个XQuery
表达式,以检查元素(MyPath
)是否是父类型的成员,但是没有其他人,我尝试过以下形式的表达式,但是没有运气。 / p>
/MyPath[element(*,ParentClass) and not element(*,ChildClass)]
似乎element
适用于它所调用的上下文中的所有子项,但不适用于本身(MyPath
),这不会产生任何结果。
我也尝试了instance of
运算符,但这似乎仅适用于simpleType
。
答案 0 :(得分:1)
您应该使用
. instance of element(*, ParentClass)
and not(. instance of element(*, ChildClass))
如果这不起作用,请提供MCVE
使用Saxon扩展功能的另一种方法是直接测试类型注释:saxon:type-annotation(.) eq xs:QName('ParentClass')
当然,这是否是一个好习惯还有一个问题。定义派生类型的全部要点是,它应该可以替代基本类型。在任何可以使用父类型的实例的地方,都应该能够替换子类型的实例。您似乎在故意设计一个不是这种情况的查询。