Jena上带有选项(可传递)的SPARQL查询错误

Jena上带有选项(可传递)的SPARQL查询错误,sparql,jena,virtuoso,fuseki,transitive-dependency,Sparql,Jena,Virtuoso,Fuseki,Transitive Dependency,我有以下疑问 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?type WHERE { { SELECT * WHERE { ?x rdfs:subClassOf ?type . } } OPTION (TRANSITIVE, t_distinct, t_in (?x), t_out (?type) ) . FILTE

我有以下疑问

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?type
WHERE
{
   {
      SELECT *
      WHERE
      {
           ?x rdfs:subClassOf ?type .
      }
   }
   OPTION (TRANSITIVE, t_distinct, t_in (?x), t_out (?type) ) .
   FILTER (?x = <http://dbpedia.org/ontology/Hospital>)
}

它表示“Hospital”的所有超类

这是预期的行为。查询的这一部分:

OPTION (TRANSITIVE, t_distinct, t_in (?x), t_out (?type) ) 
不是标准的SPARQL 1.1,但它是一个特定于大师的扩展

Jena是符合SPARQL 1.1的实现

以下查询使用标准SPARQL 1.1语法执行相同的操作,并且应该与Fuseki和Virtuoso一起使用(刚刚在dbpedia端点上进行了测试,得到了相同的结果):

前缀rdfs:
选择?类型
哪里
{
{
挑选*
哪里
{
?x rdfs:子类+类型。
}
}
过滤器(?x=)
}
使用的功能是“属性路径”


请参见

如果使用Jena发送具有Virtuoso特定功能的查询,则需要直接创建QueryEngineHTTP(这是一个QueryExecution),并仅提供两个字符串,端点和查询字符串。否则,Jena会在本地验证查询,但它不是有效的SPARQL,因此会失败。谢谢enridago和@AndyS。这家伙[声称使用QueryEngineHTTP对他有效。这就是为什么我删掉了enridaga的建议,尽管我知道它的具体技巧。不幸的是,建议的代码没有为我运行,Fuseki抛出了相同的异常,所以我猜这与你们两人指出的相符。有没有办法重写此查询以与Jena合作?可以吗你可以编辑你的问题,描述你期望得到什么样的结果?这只是rdfs:subClassOf上的传递性吗?如果是这种情况,你可以使用属性路径,这是SPARQL 1.1的一个特性。Iv扩展了问题以询问等效的查询,我也扩展了答案。接受?:)
http://dbpedia.org/ontology/Building
http://dbpedia.org/ontology/ArchitecturalStructure
http://dbpedia.org/ontology/Place
http://dbpedia.org/ontology/d0:Location
OPTION (TRANSITIVE, t_distinct, t_in (?x), t_out (?type) ) 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?type
WHERE
{
  {
   SELECT *
   WHERE
    {
       ?x rdfs:subClassOf+ ?type .
    }
  }
  FILTER (?x = <http://dbpedia.org/ontology/Hospital>)
}