我需要找到Dbpedia图的任意两个节点之间的路径长度,如果它们之间存在任何连接。此时,我只知道起始节点和结束节点,并且连接的属性路径未知。所以,我正在尝试编写SPARQL查询,如:
PREFIX dbo:<http://dbpedia.org/ontology/>
PREFIX dbp:<http://dbpedia.org/property/>
select dbp:Video dbo:VideoGame (count(?mid) as ?length)
where {
dbp:Video (<>|!<>)* ?mid .
?mid (<>|!<>)+ dbo:VideoGame .
}
group by dbp:Video dbo:VideoGame
在这里,我想找到视频和 VideoGame 之间的路径长度。但它给出的错误如下:
在'}'之前'dbo:VideoGame'的语法错误
任何人都可以帮忙写出正确的吗?
答案 0 :(得分:2)
错误消息可能会产生误导。我看到的一个问题是你不能选择常数,只能选择变量。您可以尝试使用一些绑定语句将它们转换为变量:
PREFIX dbo:<http://dbpedia.org/ontology/>
PREFIX dbp:<http://dbpedia.org/property/>
select ?vid ?vidGame (count(?mid) as ?length)
where {
BIND(dbp:Video AS ?vid)
BIND(dbo:VideoGame AS ?vidGame)
?vid (<>|!<>)* ?mid .
?mid (<>|!<>)+ ?vidGame .
}
group by ?vid ?vidGame