未定义的函数sem:sparql-update()在尝试运行推理示例时

时间:2015-07-15 07:36:59

标签: sparql marklogic inference inference-engine

我正在尝试在ML 8.0上运行以下推理示例,它正在抱怨

" [1.0-ml] XDMP-UNDFUN :(错误:XPST0017)未定义的函数sem:sparql-update()"

有人能说出为什么会出现这个问题吗?

http://docs.marklogic.com/guide/semantics/inferencing?print=yes

import module namespace sem = "http://marklogic.com/semantics" 
  at "/MarkLogic/semantics.xqy";
let $sup :=
'
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

INSERT DATA
{ <someMedicalCondition> rdf:type <osteoarthritis> .
  <osteoarthritis> rdfs:subClassOf <bonedisease> . }'
return sem:sparql-update($sup)
; (: transaction separator :)

let $sq := 
'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX d: <http://diagnoses#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?diagnosis
WHERE { ?diagnosis rdf:type <bonedisease>. } '

let $rs := sem:ruleset-store("rdfs.rules", sem:store())  
(: rdfs:rules is a predefined rule set in <MarkLogic-install-dir>/Config :)
return sem:sparql($sq, (), (), $rs)  
(: the rules specify that query for <bonedisease> will return the subclass <osteoarthritis> :)

1 个答案:

答案 0 :(得分:0)

自{8.0}以来sem:sparql-update()功能已经可用。我刚刚完成了MarkLogic 8.0-2的全新安装并运行了上面的代码并且运行正常。这让我想知道安装是否存在问题。也许您从早期访问版本升级到8.0-2? (不支持早期访问版本的升级,有时会发生奇怪的事情。)

无论如何,如果数据库中有有意义的数据,我会导出它并进行全新安装(卸载;删除数据目录),然后重新导入数据。 MLCP 可以帮助您解决此问题。

只要您执行这些步骤,您也可以升级到当前版本8.0-3。

附注:一些语义函数在 XQuery 中实现为库;一些是在C ++中实现的内置函数。这可能是您在 semantics.xqy 库中没有看到sparql-update()的原因。