【发布时间】:2018-05-10 20:45:24
【问题描述】:
是否可以在 SPARQL 中实现 blank node skolemization 而无需迭代?在我看来,需要迭代来完成空白节点链,例如:
@prefix : <http://example.com/> .
[ a :A ;
:p1 [
a :B
]
] .
用于 skolemization 的 SPARQL 更新操作可以从仅在三元组中显示为主体的空白节点开始,而没有空白节点对象:
DELETE {
?b1 ?outP ?outO .
?inS ?inP ?b1 .
}
INSERT {
?iri ?outP ?outO .
?inS ?inP ?iri .
}
WHERE {
{
SELECT ?b1 (uuid() AS ?iri)
WHERE {
{
SELECT DISTINCT ?b1
WHERE {
?b1 ?p1 [] .
FILTER isBlank(?b1)
FILTER NOT EXISTS {
?b1 ?p2 ?b2 .
FILTER isBlank(?b2)
}
}
}
}
}
?b1 ?outP ?outO .
OPTIONAL {
?inS ?inP ?b1 .
}
}
可以重复此操作,直到在数据中找不到空白节点:
ASK {
?bnode ?p [] .
FILTER isBlank(?bnode)
}
是否可以在单个 SPARQL 更新操作中避免迭代并实现空白节点 skolemization?
(此外,此方法假设没有“孤立”空白节点(即仅作为对象出现的空白节点)。
【问题讨论】:
标签: sparql blank-nodes