[英]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.