0

XQuery/XPath 3.0のformat-number関数を使用しようとしています。

Saxon のドキュメントによると、これは v9.3-9.4 からサポートされています。

私はSaxon-EE 9.5を使用しています:

    <dependency>
        <groupId>com.saxonica</groupId>
        <artifactId>Saxon-EE</artifactId>
        <version>9.5.1-3</version>
    </dependency>

非常に単純なテストでは、次のエラーで例外がスローされます。

@Test
public void testFormatNumber() throws SaxonApiException {
  Processor proc = new Processor(false);
  XQueryCompiler comp = proc.newXQueryCompiler();
  XQueryExecutable exp = comp.compile("format-number(number('123.4'),'#.00000000')");
}

これにより、次のエラーがスローされます。

Error on line 1 column 0 
  XPST0017 XQuery static error near #...(number('123.4'),'#.00000000')#:
    System function format-number#2 is not available with this host language/version

これは Saxon-HE-9.6.0-4 を使用して動作しますが、スキーマ検証を行うには EE エディションが必要です。Saxon-EE 9.5.1-3 は、ライセンスを取得しているバージョンです。

Saxon-EE に関するソリューションはありますか? XQuery 3.0 とスキーマ検証をサポートする成熟した代替ライブラリはありますか?

4

3 に答える 3

1

このサイトから、xpath 3.0 を有効にする必要があるようです:

((net.sf.saxon.xpath.XPathEvaluator)xpath).setXPathLanguageLevel("3.0");
于 2015-05-13T12:51:43.080 に答える
0

@flafoux と @martin-honnen からの回答を組み合わせると、解決策は次のようになります。

    @Test
    public void testFormatNumber() throws SaxonApiException {
      Processor proc = new Processor(true);
      XQueryCompiler comp = proc.newXQueryCompiler();
      comp.setLanguageVersion("3.0");
      XQueryExecutable exp = comp.compile("xquery version \"3.0\"; format-number(number('123.4'),'#.00000000')");

      XQueryEvaluator qe = exp.load();
      Serializer out = new Serializer(new StringWriter());
      qe.run(out);

      for(XdmItem i : qe) {
        System.out.println(i.getStringValue());
      }
    }
于 2015-05-15T10:32:09.950 に答える
0

Saxon 9.5 では、XQuery 3.0 のサポートは -PE と -EE でのみ利用でき、明示的に有効にする必要がありました。これは、「コア」XQ 3.0 機能が -HE 製品で利用可能になった Saxon 9.6 で変更されました。

于 2015-05-20T19:48:49.560 に答える