簡體   English   中英

Java中使用XQuery Engine的OSB fn:bea函數

[英]OSB fn:bea Function using XQuery Engine in Java

經過一些研究,我還沒有找到解決方案,但是很多人都遇到了這個問題:

我正在嘗試使用以下方法在Java應用程序中進行XQuery轉換

net.sf.saxon.s9api

但是,當嘗試編譯XQueryExecutable exec = compiler.compile(...));時,出現此錯誤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 Engine(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

到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()的功能非常相似,我建議您嘗試在查詢中進行替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM