如何在Sparql中双向获取n跳

时间:2019-07-11 02:40:27

标签: sparql dbpedia

我正在使用以下查询针对Wikidata中的给定概念上下subclass of谓词。

SELECT ?item ?itemLabel ?linkTo {
  { wd:Q22673982 wdt:P279* ?item } UNION { ?item wdt:P279* wd:Q22673982 }
  OPTIONAL { ?item wdt:P279 ?linkTo }
  SERVICE wikibase:label {bd:serviceParam wikibase:language "en" }
}

为了仅将跳数限制为10,我将上述查询扩展为以下内容。

PREFIX gas: <http://www.bigdata.com/rdf/gas#>

SELECT ?item ?itemLabel ?linkTo {
  { SERVICE gas:service {
    gas:program gas:gasClass "com.bigdata.rdf.graph.analytics.SSSP" ;
                gas:in wd:Q22673982 ;
                gas:traversalDirection "Forward" ;
                gas:out ?item ;
                gas:out1 ?depth ;
                gas:maxVisited 10 ;
                gas:linkType wdt:P279 .
  } } UNION { SERVICE gas:service {
    gas:program gas:gasClass "com.bigdata.rdf.graph.analytics.SSSP" ;
                gas:in wd:Q22673982 ;
                gas:traversalDirection "Reverse" ;
                gas:out ?item ;
                gas:out1 ?depth ;
                gas:maxVisited 10 ;
                gas:linkType wdt:P279 .
  } }
  OPTIONAL { ?item wdt:P279 ?linkTo }
  SERVICE wikibase:label {bd:serviceParam wikibase:language "en" }
}

我尝试使用DBpedia以类似方式进行操作,如下所示。

SELECT * {
  { dbr:Word2vec dct:subject* ?item } UNION { ?item dct:subject* dbr:Word2vec }
  OPTIONAL { ?item dct:subject ?linkTo }
}

但是,出现以下错误:Virtuoso 37000 Error SP031: SPARQL compiler: Variable '_::trans_subj_4_0' is used in subexpressions of the query but not assigned

我的问题是;在DBpedia中可以做同样的事情吗?

很高兴在需要时提供更多详细信息。

1 个答案:

答案 0 :(得分:1)

Virtuoso 37000错误SP031:SPARQL编译器:... 错误在github托管的Virtuoso上有几个未解决的问题(#530#681)中被标记项目。

如此处所述,如果您仅取消选中SPARQL查询表单上的严格检查void变量框,则您的查询可能会运行。