MarkLogic查询控制台执行时态文档导入XQuery报错
MarkLogic时态文档导入XQuery语法错误排查与修复
问题场景
在MarkLogic的Schemas数据库下的时态集合中导入单时态文件时,执行XQuery出现语法错误。
执行的XQuery代码
xquery version "1.0-ml"; import module namespace temporal = "http://marklogic.com/xdmp/temporal" at "/MarkLogic/temporal.xqy"; let $root := <tempdoc> <content>v1-content here</content> </tempdoc> let $options := <options xmlns="xdmp:document-insert"> <metadata> <map:map xmlns:map="http://marklogic.com/xdmp/map"> <map:entry key="systemStart"> <map:value>2014-04-03T11:00:00</map:value> </map:entry> <map:entry key="systemEnd"> <map:value>2014-04-03T16:00:00</map:value> </map:entry> </map:map> </metadata> </options> return
报错信息
[1.0-ml] XDMP-UNEXPECTED: (err:XPST0003) 意外的令牌语法错误,意外遇到$end,期望Function30_或Percent_ 堆栈跟踪 在第21行第0列: In xdmp:eval("xquery version "1.0-ml"; import module namespace t...", (), <options xmlns="xdmp:eval"><database>1754687030342455867</database>...</options>) </metadata> </options> return
错误原因与修复方案
报错核心是XQuery代码不完整,return关键字后未指定任何要执行的操作。导入时态文档需调用MarkLogic的时态插入API完成动作。
修正后的完整代码示例:
xquery version "1.0-ml"; import module namespace temporal = "http://marklogic.com/xdmp/temporal" at "/MarkLogic/temporal.xqy"; let $root := <tempdoc> <content>v1-content here</content> </tempdoc> let $options := <options xmlns="xdmp:document-insert"> <metadata> <map:map xmlns:map="http://marklogic.com/xdmp/map"> <map:entry key="systemStart"> <map:value>2014-04-03T11:00:00</map:value> </map:entry> <map:entry key="systemEnd"> <map:value>2014-04-03T16:00:00</map:value> </map:entry> </map:map> </metadata> </options> return temporal:document-insert("/tempdoc.xml", $root, $options)
关键说明
return后必须添加具体执行函数,这里使用temporal:document-insert()插入时态文档,参数依次为文档URI、文档内容、插入选项。- 需确保目标时态集合已正确配置,
systemStart和systemEnd的时间格式符合ISO 8601标准。
内容的提问来源于stack exchange,提问作者Rashmita Purkayastha
相关产品推荐
相关产品推荐

