目前我正在使用Eclipses XQuery插件xqdt和XQuery引擎Zorba。Schema aware XQuery
我希望XQuery引擎能「檢查」XPath表達式的正確性,例如,如果模式定義允許視頻/視頻,但視頻/圖片不允許,則解釋器應警告後者的XPath表達式無效。
我試圖按照Schema-Aware Queries and Stylesheets教程,但我無法讓它工作。我的代碼示例使用示例video.xml和本教程中的示例video.xsd。
我的第一個精簡的例子會導致類型錯誤: 導入架構默認元素名稱空間「」at「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)
與類型的播放,使用元素而不是架構元素不提醒我,我拼錯視頻2路和沒有打印任何東西:
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中。 – grtjn
感謝提示,我將測試這個。關於XQDT:我不在乎xqdt是否顯示'編譯時間'錯誤,但我希望Zorba在執行查詢時報告這一點。 –