2

我有以下查询

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>)
}

当我将它发送到 Virtuoso 端点时它工作正常,但不适用于我的 Jena 实例。具体来说,我收到以下错误:

INFO  [1] 400 Parse error: 
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>)
}
Lexical error at line 12, column 39.  Encountered: " " (32), after : "OPTION" (17 ms)

如果这是一个 Virtuoso 特定的函数,我希望知道这个查询的等效函数,它可以与 *Jena/Standard SPARQL 一起使用)。预期的输出应该是:

http://dbpedia.org/ontology/Building
http://dbpedia.org/ontology/ArchitecturalStructure
http://dbpedia.org/ontology/Place
http://dbpedia.org/ontology/d0:Location

代表“医院”的所有超类

4

1 回答 1

5

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

OPTION (TRANSITIVE, t_distinct, t_in (?x), t_out (?type) ) 

不是标准的 SPARQL 1.1,但它是 Virtuoso 特定的扩展。

Jena 是一个符合 SPARQL 1.1 的实现。

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

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>)
}

使用的功能是“属性路径”。

http://www.w3.org/TR/sparql11-query/

于 2014-09-24T09:17:43.803 回答