Трудно перевести Saxon в режим XQuery вместо XSLT. - PullRequest
4 голосов
/ 28 марта 2010

Мне трудно заставить XQuery работать. Я скачал Saxon-HE 9.2. Кажется, он хочет работать только с XSLT.

Когда я печатаю:

java -jar saxon9he.jar

Я получаю информацию об использовании XSLT. Когда я использую синтаксис команды для XQuery, он не распознает параметры (например, -q) и предоставляет информацию об использовании XSLT.

Вот некоторые взаимодействия командной строки:

>java -jar saxon9he.jar
No source file name
Saxon-HE 9.2.0.6J from Saxonica
Usage: see http://www.saxonica.com/documentation/using-xsl/commandline.html
Options:
  -a                    Use xml-stylesheet PI, not -xsl argument
  -c:filename           Use compiled stylesheet from file
  -config:filename      Use configuration file
  -cr:classname         Use collection URI resolver class
  -dtd:on|off           Validate using DTD
  -expand:on|off        Expand defaults defined in schema/DTD
  -explain[:filename]   Display compiled expression tree
  -ext:on|off           Allow|Disallow external Java functions
  -im:modename          Initial mode
  -ief:class;class;...  List of integrated extension functions
  -it:template          Initial template
  -l:on|off             Line numbering for source document
  -m:classname          Use message receiver class
  -now:dateTime         Set currentDateTime
  -o:filename           Output file or directory
  -opt:0..10            Set optimization level (0=none, 10=max)
  -or:classname         Use OutputURIResolver class
  -outval:recover|fatal Handling of validation errors on result document
  -p:on|off             Recognize URI query parameters
  -r:classname          Use URIResolver class
  -repeat:N             Repeat N times for performance measurement
  -s:filename           Initial source document
  -sa                   Use schema-aware processing
  -strip:all|none|ignorable      Strip whitespace text nodes
  -t                    Display version and timing information
  -T[:classname]        Use TraceListener class
  -TJ                   Trace calls to external Java functions
  -tree:tiny|linked     Select tree model
  -traceout:file|#null  Destination for fn:trace() output
  -u                    Names are URLs not filenames
  -val:strict|lax       Validate using schema
  -versionmsg:on|off    Warn when using XSLT 1.0 stylesheet
  -warnings:silent|recover|fatal  Handling of recoverable errors
  -x:classname          Use specified SAX parser for source file
  -xi:on|off            Expand XInclude on all documents
  -xmlversion:1.0|1.1   Version of XML to be handled
  -xsd:file;file..      Additional schema documents to be loaded
  -xsdversion:1.0|1.1   Version of XML Schema to be used
  -xsiloc:on|off        Take note of xsi:schemaLocation
  -xsl:filename         Stylesheet file
  -y:classname          Use specified SAX parser for stylesheet
  --feature:value       Set configuration feature (see FeatureKeys)
  -?                    Display this message
  param=value           Set stylesheet string parameter
  +param=filename       Set stylesheet document parameter
  ?param=expression     Set stylesheet parameter using XPath
  !option=value         Set serialization option


>java -jar saxon9he.jar -q:"..\w3xQueryTut.xq"
Unknown option -q:..\w3xQueryTut.xq
Saxon-HE 9.2.0.6J from Saxonica
Usage: see http://www.saxonica.com/documentation/using-xsl/commandline.html
Options:
  -a                    Use xml-stylesheet PI, not -xsl argument
// etc...


>java net.sf.saxon.Query -q:"..\w3xQueryTut.xq"
Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/saxon/Query
Caused by: java.lang.ClassNotFoundException: net.sf.saxon.Query
                 // etc...
Could not find the main class: net.sf.saxon.Query.  Program will exit.

Я, вероятно, совершаю глупую ошибку. Вы знаете, что это может быть?

ОБНОВЛЕНИЕ 1 Эта команда не работает:

>java -jar saxon9he.jar net.sf.saxon.Query q:"..\w3xQueryTut.xq"
Source file net.sf.saxon.Query does not exist

ОБНОВЛЕНИЕ 2 Эта команда работает лучше:

>dir

03/28/2010  16:07    <DIR>          .
03/28/2010  16:07    <DIR>          ..
03/27/2010  13:37               849 books.xml
03/27/2010  13:32    <DIR>          doc
03/27/2010  13:32    <DIR>          notices
03/27/2010  13:32         5,473,874 saxon9he.jar
03/27/2010  13:38                37 w3xQueryTut.xq



>java -cp saxon9he.jar net.sf.saxon.Query q:"w3xQueryTut.xq"


java.io.FileNotFoundException: q:w3xQueryTut.xq (The system cannot find the path
 specified)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at net.sf.saxon.Query.compileQuery(Query.java:885)
        at net.sf.saxon.Query.doQuery(Query.java:183)
        at net.sf.saxon.Query.main(Query.java:89)
Fatal error during query: java.io.FileNotFoundException: q:w3xQueryTut.xq (The s
ystem cannot find the path specified)

w3xQueryTut.xq:

doc("books.xml")/bookstore/book/title

books.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>

<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>

</bookstore>

Ответы [ 4 ]

3 голосов
/ 14 января 2011

Когда вы используете «java -jar saxon9he.jar», вы запрашиваете у Java активизировать точку входа по умолчанию в файле JAR, которая является net.sf.saxon.Transform. Для ввода в определенную точку входа, например net.sf.saxon.Query, необходимо использовать форму "java -cp saxon9he.jar net.sf.saxon.Query".

1 голос
/ 21 мая 2013
  1. предварительные препараты
  2. Скачать саксонский: сначала вы должны загрузить пакет Saxon на http://sourceforge.net/projects/saxon/ and unzip it at some directory like D:\Program Files\SaxonHE9-5-0-1J.
  3. Получить исходный код: Если вам нужен исходный код, скачайте его по адресу http://nchc.dl.sourceforge.net/project/saxon/Saxon-HE/9.3/saxon-resources9-3.zip, прежде чем распаковать его в каталог SaxonHE9-5-0-1J;
  4. Рабочая станция сборки: подготовьте рабочую станцию ​​для тренировки: она находится в SaxonHE9-5-0-1J\iexercise, где вы можете поместить файлы * .xq и их результаты; вы также можете создать каталог с именем icache для хранения ваших кэшей;
  5. Сообщите Java, где найти переводчика: Чтобы он хорошо работал для операторов Xquery, необходимо добавить базовый пакет для интерпретации его в среде Windows: откройте командную строку и измените на SaxonHE9-5-0-1J и запустите после копирования saxon9he.jar в jdk1.7.0\lib :

    set classpath =.;% Java_home% \ lib \ saxon9he.jar

  6. Проверьте, известно ли это: Поэтому обычно вы можете запускать сценарии xquery прямо сейчас, после выполнения шага 4. Если вы все еще не уверены, проверьте это с помощью: java net.sf.saxon.Query 2. Подготовьте свой первый запуск

  7. Создайте файл (например, с именем test.xq) с аффиксом .xq, .xquery или .xqy в iexercise, его содержимое отображается ниже:

    doc («catalog.xml») / catalog / product [@dept = «ACC»]

  8. Скопируйте готовый файл catalog.xml в. /.

  9. Пробег java net.sf.saxon.Query -q:test.xq -o:result.xml первый аргумент указывает интерпретатору для компиляции файла xquery, который является вашим трудом на шаге 1.4, -q: filename - это файл, который будет скомпилирован с помощью операторов xquery, а третий показывает, куда поместить результат; если не указано, будет отображаться на стандартном выходе.

Файл каталога:

<catalog>
    <product dept="WMN">
        <number>557</number>
        <name language="en">Fleece Pullover</name>
        <colorChoices>navy black</colorChoices>
    </product>
    <product dept="ACC">
        <number>563</number>
        <name language="en">Floppy Sun Hat</name>
    </product>
    <product dept="ACC">
        <number>433</number>
        <name language="en">Deluxe Travel Bag</name>
    </product>
    <product dept="MEN">
        <number>784</number>
        <name language="en">Cotton Dress Shirt</name>
        <colorChoices>white green</colorChoices>
    <desc>Our <i>favorite</i> shirt!</desc>
    </product>
</catalog>
1 голос
/ 28 марта 2010

У меня нет проблем с использованием этой командной строки :

java -cp C:\xml\Parsers\Saxon\HE-9-2-0-6\saxon9he.jar net.sf.saxon.Query<br> -q:"C:\Program Files\Oxygen XML Editor 11\samples\xquery\Books\authors.xquery"

0 голосов
/ 22 июля 2010

Обратите внимание, что в документации по saxonica не написано

java -jar saxon9he.jar net.sf.saxon.Query -q:myQuery.xql

(это не исполняемый файл JAR и вам вообще не нужен параметр -q, если файл xql является последним вариантом)следующее будет работать

java net.sf.saxon.Query myQuery.xql 

или

java -cp C:\downloads\saxon\saxon9he.jar net.sf.saxon.Query myQuery.xql
...