Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XQuery中的复杂类型检查_Xquery_Saxon - Fatal编程技术网

XQuery中的复杂类型检查

XQuery中的复杂类型检查,xquery,saxon,Xquery,Saxon,我有一个模式,它有许多complexType,其中一些有子类型(通过xsi:type)。我需要创建一个XQuery表达式来检查一个元素(MyPath)是否是父类型的成员,但是没有其他的,我尝试了下面形式的表达式,但没有成功 /MyPath[元素(*,父类)而非元素(*,子类)] 它似乎元素适用于它所调用的上下文中的所有子元素,但不适用于它本身(MyPath),这不会产生任何结果 我还尝试了操作符的实例,但这似乎只适用于您应该使用的simpleType . instance of element(

我有一个模式,它有许多
complexType
,其中一些有子类型(通过
xsi:type
)。我需要创建一个
XQuery
表达式来检查一个元素(
MyPath
)是否是父类型的成员,但是没有其他的,我尝试了下面形式的表达式,但没有成功

/MyPath[元素(*,父类)而非元素(*,子类)]

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

我还尝试了操作符的
实例,但这似乎只适用于您应该使用的
simpleType

. instance of element(*, ParentClass) 
and not(. instance of element(*, ChildClass))
如果这不起作用,请提供

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


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

是Saxon EE支持模式感知的XQuery吗
的实例似乎是正确的工具或
类型开关
,但只有当您有一个架构感知处理器、正确的架构导入和正确的设置时,这一切才行。我尝试了一种更懒惰的方法,
。元素(*,ParentClass)[not(@xsi:type)]
的实例。但是,此表达式不返回任何结果。是否确定源文档经过架构验证并且具有类型批注?(我只是在猜测,在没有复制的情况下,我只能这么做。)