Ошибка запроса SPARQL с OPTION(TRANSITIVE) в Йене

У меня есть следующий запрос

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

который представляет все суперклассы для "Больницы"

1 ответ

Решение

Это ожидаемое поведение. Эта часть запроса:

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/

Другие вопросы по тегам