【问题标题】:OSB fn:bea Function using XQuery Engine in Java在 Java 中使用 XQuery 引擎的 OSB fn:bea 函数
【发布时间】:2017-03-21 13:55:24
【问题描述】:

经过一番研究,我还没有找到解决方案,但很多人都遇到了这个问题:

我正在尝试在 Java 应用程序中使用 XQuery 转换

net.sf.saxon.s9api

但是,当我尝试编译 XQueryExecutable exec = compiler.compile(...)); 我的 XQuery 时出现此错误:

    Error on line 13 column 3 of AivPumaRequest.xquery:
  XPST0081 XQuery static error near #... fn-bea:inlinedXML(fn:concat#:
    Prefix fn-bea has not been declared
Error on line 44 column 102 of AivPumaRequest.xquery:
  XPST0081 XQuery static error near #... div xdt:dayTimeDuration('P1D'#:
    Prefix xdt has not been declared
Error on line 199 column 3 of AivPumaRequest.xquery:
  XPST0081 XQuery static error near #... fn-bea:inlinedXML(fn:concat#:
    Prefix fn-bea has not been declared
Error on line 282 column 4 of AivPumaRequest.xquery:
  XPST0081 XQuery static error near #... {fn-bea:inlinedXML(fn:concat#:
    Prefix fn-bea has not been declared

net.sf.saxon.s9api.SaxonApiException: Prefix fn-bea has not been declared

有没有办法静态包含这个前缀或者我错过了什么,所以我的 XQuery 引擎 (SAXON) 找到了前缀?

【问题讨论】:

    标签: java xquery saxon bea


    【解决方案1】:

    您的问题的简单答案是,您可以在查询序言中声明命名空间前缀

    declare namespace fn-bea = "http://some-appropriate-uri";
    

    或在 Saxon API 中使用

    XQueryCompiler.declareNamespace("fn-bea", "http://some-appropriate-uri")
    

    但这不会让您更进一步,除非 (a) 您知道要将前缀绑定到哪个 URI,并且 (b) 您使具有这些名称的函数可用于查询处理器。

    对 xdt:dayTimeDuration 的引用向我表明,此查询是在 XQuery 仍处于工作草案时编写的。例如,如果您查看 2005 年的工作草案

    https://www.w3.org/TR/2005/CR-xquery-20051103/
    

    您将在第 2 节中看到它使用内置前缀

    xdt = http://www.w3.org/2005/xpath-datatypes
    

    当 XQuery 1.0 成为推荐标准时,dayTimeDuration 数据类型已移至标准 XML Schema (xs) 命名空间,因此您可以简单地将“xdt”替换为“xs”——尽管您应该注意语言的语义可能也在细微的细节上发生了变化。

    至于fn-bea:inlinedXML,前缀的选择向我表明这可能是BEA 查询处理器中的内置供应商扩展,已被Oracle 接管。这里的规范:

    https://docs.oracle.com/cd/E13162_01/odsi/docs10gr3/xquery/extensions.html
    

    说:

    fn-bea:inlinedXML 解析文本 XML 并返回 XQuery 1.0 数据模型。

    这表明该函数的作用与 XQuery 3.0 函数 fn:parse-xml() 非常相似,我建议您尝试在查询中进行替换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      相关资源
      最近更新 更多