В настоящее время я использую плагин Eclipses XQuery xqdt с движком XQuery Zorba.Schema aware XQuery
Я хотел бы, чтобы движок XQuery «набирал» проверку правильности моих выражений XPath, например. если схема определяет видео/видео, но видео/изображения нет, интерпретатор должен предупредить, что последнее выражение XPath недействительна.
Я попытался выполнить урок Schema-Aware Queries and Stylesheets, но я не могу заставить его работать. В моих примерах кода используется образец video.xml и образец video.xsd из учебника.
Мой первый, урезанный пример их результатов приводит к ошибке типа: import schema default element namespace "" на "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
Q: Может кто-нибудь дать мне с минимальным рабочим примером, где $ input/videos/video2 терпит неудачу?
Update: Я добавил пространств имен в videos.xsd, в videos.xml и изменил схему импорта для
import schema default element namespace "myVideos" at "videos.xsd";
, но без успеха.
Похоже, что ваш xml не имеет пространства имен (которое отличается от префикса). Возможно, лучше всего связать xsd и xml с uri пространства имен и обратиться к пространству имен с помощью префикса в вашем XPath. Не уверен, хотя в том, что понимание схемы включает в себя проверку утверждений XPath, по крайней мере, в XQDT. – grtjn
Спасибо за подсказку, я собираюсь проверить это. Что касается XQDT: мне все равно, если xqdt показывает ошибку «время компиляции», но я хотел бы, чтобы Zorba сообщал об этом при выполнении запроса. –