【发布时间】: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.xsd、videos.xml 并将导入架构更改为
import schema default element namespace "myVideos" at "videos.xsd";
,但没有成功。
【问题讨论】:
-
看起来您的 xml 不在命名空间中(这与没有前缀不同)。也许最好将 xsd 和 xml 都绑定到命名空间 uri,并使用 XPath 中的前缀来引用命名空间。不确定模式感知是否包括对 XPath 语句的验证,至少在 XQDT 中......
-
感谢您的提示,我将对此进行测试。关于 XQDT:我不在乎 xqdt 是否显示“编译时”错误,但我希望 Zorba 在执行查询时报告这一点。