如何在sparql中获得双向n跳

如何在sparql中获得双向n跳,sparql,dbpedia,Sparql,Dbpedia,我使用下面的查询来获取wikidata中给定概念的上下谓词的子类 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" } } 为

我使用下面的查询来获取wikidata中给定概念的上下谓词的
子类

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" }
}
但是,我得到了以下错误:
Virtuoso 37000 error SP031:SPARQL编译器:变量“\u1::trans\u subc\u 4\u 0”在查询的子表达式中使用,但未赋值

我的问题是,;在DBpedia中也可以这样做吗

如果需要,我很乐意提供更多细节。

大师37000错误SP031:SPARQL编译器:。。。github托管的Virtuoso项目上的几个开放问题(,)中标记了错误


如上所述,如果您只是取消选中SPARQL查询表单上的严格检查无效变量框,您的查询可能会运行。

为什么要有
dct:subject
关系的路径
dct:subject
将一个项目链接到一个类别,唯一的层次结构在类别中,这是通过
skos:borader
关系表示的。是的,这是Virtuoso中的一个(已知)缺陷(或限制)。显而易见的解决方法是使用两个SPARQL查询。是的,只需向端点发送两个查询。这应该是最明显的解决方法,或者不是?我不知道这个查询应该返回什么,但这并不重要:所以我的答案是,是什么阻止您在DBpedia中执行同样的操作?我的意思是,是否只使用
skos:broader
属性?您仍然不了解数据的外观和查询的作用,对吗
dct:subject/skos:Brother
仅在项目对具有边缘的节点具有边缘
dct:subject
时才起作用,该节点对其他节点具有边缘
skos:Brother
。想一想为什么这没有意义,再想想我之前的陈述“
dct:subject
将实体连接到一个类别。
skos:brother
将一个类别连接到一个类别。”我不确定我是否清楚地理解了你。你能告诉我你所说的
严格检查无效变量是什么意思吗
对不起,@EmJ,我犯了一个复制粘贴错误。请重新阅读我编辑过的答案,同时也请关注开放问题的链接并阅读那里的回复——特别是。
SELECT * {
  { dbr:Word2vec dct:subject* ?item } UNION { ?item dct:subject* dbr:Word2vec }
  OPTIONAL { ?item dct:subject ?linkTo }
}