Ошибка запроса 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>)
}
Используемая функция - "путь свойства".