我正在尝试在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> :)
答案 0 :(得分:0)
自{8.0}以来sem:sparql-update()
功能已经可用。我刚刚完成了MarkLogic 8.0-2的全新安装并运行了上面的代码并且运行正常。这让我想知道安装是否存在问题。也许您从早期访问版本升级到8.0-2? (不支持早期访问版本的升级,有时会发生奇怪的事情。)
无论如何,如果数据库中有有意义的数据,我会导出它并进行全新安装(卸载;删除数据目录),然后重新导入数据。 MLCP 可以帮助您解决此问题。
只要您执行这些步骤,您也可以升级到当前版本8.0-3。
附注:一些语义函数在 XQuery 中实现为库;一些是在C ++中实现的内置函数。这可能是您在 semantics.xqy 库中没有看到sparql-update()
的原因。