OSB fn:bea函数在Java中使用XQuery引擎

OSB fn:bea函数在Java中使用XQuery引擎,java,xquery,saxon,bea,Java,Xquery,Saxon,Bea,经过一些研究,我还没有找到解决方案,但很多人都有这个问题: 我试图在Java应用程序中使用 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(f

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

我试图在Java应用程序中使用

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)找到前缀

问题的简单答案是,您可以使用

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
当XQuery1.0成为推荐时,
dayTimeDuration
数据类型已经被移动到标准XML模式(xs)名称空间中,因此您可以简单地将“xdt”替换为“xs”——尽管您应该知道,该语言的语义可能在一些小细节上也发生了变化

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

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

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

这表明该函数的功能与XQuery 3.0函数类似,我建议您尝试在查询中进行替换