Синтаксис XQuery для объявления пространства имен: [XPST0081] Пространство имен не объявлено для «text: p» - PullRequest
2 голосов
/ 14 февраля 2020

Каков синтаксис для объявления пространства имен для Libre Office , и какое конкретное c пространство имен необходимо объявить?

thufir@dur:~/fods/flwor$ 
thufir@dur:~/fods/flwor$ basex text.xq 
Stopped at /home/thufir/fods/flwor/text.xq, 3/14:
[XPST0081] No namespace declared for 'text:p'.
thufir@dur:~/fods/flwor$ 
thufir@dur:~/fods/flwor$ cat text.xq 

for $foo  in db:open("foo")
return $foo//text:p

thufir@dur:~/fods/flwor$ 

Конечно, возвращая $foo сам прекрасно работает, чтобы вернуть документ полностью.

Нужно ли также пространство имен, хранящееся локально в файле? Или просто добавить что-то как :

declare namespace type4="http:///de/tudarmstadt/ukp/dkpro/core/api/segmentation/type.ecore";

1 Ответ

4 голосов
/ 14 февраля 2020

Каждый префикс пространства имен, который вы используете в своем запросе , также должен быть объявлен в запросе. В вашем случае вы можете добавить строку

declare namespace text="urn:oasis:names:tc:opendocument:xmlns:text:1.0";

вверху, чтобы исправить ваш запрос.

Так как префиксы пространства имен (text в вашем случае) являются только ссылкой на связанный URI пространства имен, он не должен совпадать с префиксом в документе XML. Следующий запрос эквивалентен на 100%:

declare namespace whatever="urn:oasis:names:tc:opendocument:xmlns:text:1.0";

for $foo in db:open("foo")
return $foo//whatever:p
...