【问题标题】:Schema aware XQuery模式感知 XQuery
【发布时间】:2014-02-14 16:02:08
【问题描述】:

目前我正在使用 Eclipses XQuery 插件 xqdt 和 XQuery 引擎 Zorba

我希望 XQuery 引擎“类型检查”我的 XPath 表达式的正确性,例如如果架构定义了视频/视频是允许的,但视频/图片不是,解释器应该警告后面的 XPath 表达式是无效的。

我尝试按照Schema-Aware Queries and Stylesheets 教程进行操作,但无法正常工作。我的代码示例使用教程中的示例video.xml 和示例video.xsd

我的第一个精简示例导致类型错误: 在“videos.xsd”处导入架构默认元素命名空间“”;

1   import schema default element namespace "" at "videos.xsd";
2
3   declare variable $input as schema-element(result) := doc('videos.xml')/*;
4   for $v in $input/videos/video
5   return $v
 ...\XQqueryProject\videos.xq>:3,1: type error [err:XPTY0004]: 
element(result, xs:untyped) can not be treated as type schema-element(result)

使用类型,使用元素而不是模式元素不会警告我我的 video2 路径拼写错误,也不会打印任何内容:

import schema default element namespace "" at "videos.xsd";

declare variable $input as element(result) := doc('videos.xml')/*;
for $v in $input/videos/video2
return $v

问:有人能给我提供一个 $input/videos/video2 失败的最小工作示例吗?

更新: 我已将命名空间添加到 videos.xsdvideos.xml 并将导入架构更改为

import schema default element namespace "myVideos" at "videos.xsd";

,但没有成功。

【问题讨论】:

  • 看起来您的 xml 不在命名空间中(这与没有前缀不同)。也许最好将 xsd 和 xml 都绑定到命名空间 uri,并使用 XPath 中的前缀来引用命名空间。不确定模式感知是否包括对 XPath 语句的验证,至少在 XQDT 中......
  • 感谢您的提示,我将对此进行测试。关于 XQDT:我不在乎 xqdt 是否显示“编译时”错误,但我希望 Zorba 在执行查询时报告这一点。

标签: xml xsd xquery zorba


【解决方案1】:

XQDT 和 Zorba 都不支持 XPath 表达式的静态验证。模式。围绕该主题已经/曾经进行过相当多的研究,但(afaik)尚未将其制成产品。

例如,您可以通过http://wam.inrialpes.fr/websolver/ 与上面的人取得联系,了解该项目的状态。

【讨论】:

    猜你喜欢
    • 2010-10-21
    • 2019-11-13
    • 2018-02-24
    • 1970-01-01
    • 2011-01-18
    • 2017-03-28
    • 1970-01-01
    • 2021-09-07
    • 2012-09-30
    相关资源
    最近更新 更多