【发布时间】:2019-12-03 13:53:00
【问题描述】:
您好,我目前正在尝试在 Marklogic 中使用 SPARQL 进行一些分析,并且想知道是否可以防止循环查询?为了解释知道这一点的原因,我们将使用以下数据模型
假设我从 A 开始,最重要的是我想找到 A 和 G 之间的所有节点。在 sparql 中运行以下查询时
node_A </link>* x
y </link>* node_G
x </link> y
我将无法获取它们之间的每个节点,因为例如我将丢失节点 B。由于我认为 MarkLogic Sparql 不是最新的(版本 1.1),我将无法使用“或”运算符来解决此问题。因此,下一个解决方案是确保每个节点相互指向和相互连接,从而形成诸如
的连接B=>F
F=>B
但是这样做会导致节点循环,因此,我很好奇是否可以防止 SPARQL 查询中的循环。或者如果有任何其他方法可以检索节点 X 和节点 Y 之间的所有节点,请告诉我。
===更新===
使用的查询
xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";
let $query := sem:sparql(
'
PREFIX xs: <http://www.w3.org/2001/XMLSchema#>
PREFIX cts: <http://marklogic.com/cts#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema/>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX db: <http://dbpedia.org/resource/>
PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>
PREFIX xdmp: <http://marklogic.com/xdmp#>
SELECT DISTINCT ?x ?y
WHERE{
?x !</path> ?y .
}
',
(),
(),
()
)
return (
$query,
xdmp:elapsed-time(),
"Nil",
"Nil",
"Nil"
)
遇到错误
[1.0-ml] XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected !
【问题讨论】:
-
我认为至少最新的两个 ML 版本(9 和 10)支持 SPARQL 1.1。
-
“之间”是什么意思?没有路径 A-*-B-*-G
-
@BenW 我猜当把图当作无向图来处理时
-
啊,我明白了,我已经尝试在安装了 ML9 的不同系统上运行它。但我注意到“!” MarkLogic 9.0-8.1 不支持。因此,我很好奇它是否支持 MarkLogic 10? @wst
-
那不正确。 ML 9 支持简单映射运算符 (!)。