как написать запрос, в котором входной файл передается из командной строки (Saxon)

#xquery

#xquery

Вопрос:

Я очень новичок в этом.

У меня есть запрос и XML-файл.

Я могу написать запрос по этому конкретному файлу

 for $x in doc("file:///C:/Users/Foo/IdeaProjects/XQuery/src/books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
  

У меня есть базовый XML-файл с книгами в нем, он хорошо работает в intellij.

но если бы я хотел выполнить этот запрос к некоторому файлу, определенному в командной строке, то как мне это сделать?

командная строка для выполнения приведенного выше (столько же, сколько для ссылки других людей)

 java -cp C:UsersFoo.IdeaIC2019.2configpluginsxquery-intellij-pluginlibSaxon-HE-9.9.1-7.jar net.sf.saxon.Query -t -q:"C:UsersFooIdeaProjectsXQuerysrcw3schools.com.xqy"
  

и это тоже хорошо работает.

документация saxon

https://www.saxonica.com/html/documentation/using-xquery/commandline.html

подразумевает, что я могу указать входной файл, используя «-d» и «Узел документа документа становится доступным для запроса в качестве элемента контекста»

но на самом деле это не имеет никакого смысла для моих 1-дневных навыков XQuery.

как мне указать, что документ отправляется из командной строки в запросе? что такое элемент контекста? и как мне на него ссылаться?

(Я могу немного поработать с XSLT 1.0, поэтому я понимаю понятие контекста).

Ответ №1:

Я думаю, что опция названа -s (for source ), чтобы вы могли использовать -s:books.xml , и внутри вашего основного выражения XQuery любой путь вычисляется с этим документом в качестве элемента контекста, поэтому вы можете просто использовать, например

 for $x in /bookstore/book
where $x/price>30
order by $x/title
return $x/title
  

Ответ №2:

и ответ заключается в том, чтобы удалить функцию doc ()

 for $x in bookstore/book
  

т. е. то же понятие, что и xslt.