4

我很难让 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

书籍.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

4 回答 4

4

当您使用“ java -jar saxon9he.jar”时,您是在要求 Java 调用 JAR 文件中的默认入口点,即net.sf.saxon.Transform. 例如,要在特定入口点输入net.sf.saxon.Query,您需要使用“ java -cp saxon9he.jar net.sf.saxon.Query”形式。

于 2011-01-13T22:18:19.530 回答
1

我对这个命令行用法没有问题

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

于 2010-03-28T19:32:06.023 回答
1
  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.jarjdk1.7.0\lib

    设置类路径=.;%java_home%\lib\saxon9he.jar

  6. 测试它是否已知:所以通常您可以在第 4 步正确运行后立即运行 xquery 脚本。如果您仍然不确定,请使用以下命令检查:java net.sf.saxon.Query 2.准备您的首次启动

  7. 在 iexercise 中创建一个后缀为 .xq、.xquery 或 .xqy 的文件(例如名为 test.xq),其内容如下所示:

    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>
于 2013-05-21T07:01:25.373 回答
0

请注意,关于 saxonica 的文档并没有说

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

(它不是可执行的 jar 文件,如果 xql 文件是最后一个选项,则根本不需要 -q)所以以下内容将起作用

java net.sf.saxon.Query myQuery.xql 

或者

java -cp C:\downloads\saxon\saxon9he.jar net.sf.saxon.Query myQuery.xql
于 2010-07-22T19:34:33.887 回答