经过一些研究,我还没有找到解决办法,但很多人都有这个问题:
我试图在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)找到前缀?
发布于 2017-03-21 14:34:42
问题的简单答案是,您可以在查询prolog中使用
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 (xs)命名空间中,因此您可能只需将"xdt“替换为"xs”--尽管您应该知道语言的语义可能也在一些次要细节上发生了变化。
至于fn-bea:inlinedXML,前缀的选择告诉我,这可能是由甲骨文接管的BEA查询处理器中内置的供应商扩展。这里的规格:
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(),我建议您尝试在查询中进行替换。
https://stackoverflow.com/questions/42929193
复制相似问题