Sparql 在不知道底层属性路径的情况下,查找Dbpedia图形网络的两个节点之间的路径长度

Sparql 在不知道底层属性路径的情况下,查找Dbpedia图形网络的两个节点之间的路径长度,sparql,dbpedia,Sparql,Dbpedia,我需要找到dbpediagraph的任意两个节点之间的路径长度,如果它们之间存在任何连接。此时,我只知道开始节点和结束节点,而不知道连接的属性路径。因此,我尝试编写SPARQL查询,如下所示: PREFIX dbo:<http://dbpedia.org/ontology/> PREFIX dbp:<http://dbpedia.org/property/> select dbp:Video dbo:VideoGame (count(?mid) as ?length)

我需要找到dbpediagraph的任意两个节点之间的路径长度,如果它们之间存在任何连接。此时,我只知道开始节点和结束节点,而不知道连接的属性路径。因此,我尝试编写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
前缀dbo:
前缀dbp:
选择dbp:Video dbo:Video Game(计数(?中间)为?长度)
在哪里{
dbp:视频(|!)*?中。
中级(|!)+dbo:电子游戏。
}
按dbp分组:视频dbo:视频游戏
这里我想找到视频视频游戏之间的路径长度。但它给出的错误如下:

“}”之前的“dbo:VideoGame”出现语法错误


有人能帮我写正确的吗

该错误消息可能具有误导性。我看到的一个问题是不能选择常量,只能选择变量。您可以尝试使用一些bind语句将它们转换为变量:

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
前缀dbo:
前缀dbp:
选择?视频?视频游戏(计数(?中间)为?长度)
在哪里{
绑定(dbp:视频作为视频)
绑定(dbo:视频游戏AS?视频游戏)
视频(|!)*?中。
中(|!)+?视频游戏。
}
分组?视频?视频游戏

此错误消息可能会产生误导。我看到的一个问题是不能选择常量,只能选择变量。您可以尝试使用一些bind语句将它们转换为变量:

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
前缀dbo:
前缀dbp:
选择?视频?视频游戏(计数(?中间)为?长度)
在哪里{
绑定(dbp:视频作为视频)
绑定(dbo:视频游戏AS?视频游戏)
视频(|!)*?中。
中(|!)+?视频游戏。
}
分组?视频?视频游戏

现在它给出了另一个错误:Virtuoso 42000错误TN.:在可传递临时内存中超过100000000字节。使用t_distinct、t_max或更多t_max_内存选项来限制搜索或增加池当我尝试从运行此查询时,它给出了错误:Virtuoso 37000错误SP031:SPARQL编译器:返回值列表包含“*”但模式不包含变量。有人能帮忙吗?您可以尝试使用限制来防止超过字节限制。关于Virtuoso错误,您可能需要与供应商核实。现在它给出了另一个错误:Virtuoso 42000错误TN.:在可传递临时内存中超过100000000字节。使用t_distinct、t_max或更多t_max_内存选项来限制搜索或增加池当我尝试从运行此查询时,它给出了错误:Virtuoso 37000错误SP031:SPARQL编译器:返回值列表包含“*”但模式不包含变量。有人能帮忙吗?您可以尝试使用限制来防止超过字节限制。关于Virtuoso错误,您可能需要与供应商核实。