SPARQL транзитивный запрос для нескольких иерархических отношений - PullRequest
0 голосов
/ 31 марта 2020

У меня есть дерево, которое я бы хотел пройти транзитивно.

Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть родительское понятие:

parentConcept -> hierRelationship1 -> child -> hierRelationship2 -> 
     -> grandChild -> hierelationship3 -> greatGrandChild -> hierelationship2 -> greatGreatGrandChild     

Так что в основном у меня есть несколько иерархических отношений которые смешивают иерархию. Я знаю, что у всех прямых потомков parentConcept есть отношения skos:broader - это внуки +, где вещи становятся волосатыми.

То, что я до сих пор пробовал, это:

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?child
WHERE {

    ?rel rdfs:subPropertyOf skos:broader  .  # get subPropertyOf rels
    ?child skos:broader <parentConcept> .
    ?grandchild ?rel ?child
    }

В идеале я хотел бы «распаковать» мою переменную? Rel, чтобы я мог добавить транзитивный оператор (+) к каждому отношению в этой переменной, но я не уверен, возможно ли это в sparql.

Кто-нибудь видите лучший способ сделать это, или я на правильном пути?

Я также пытался включить OPTIONAL {} запросы, например, OPTIONAL {grandchild2 ?rel grandchild}, но это очень медленно и кажется громоздким

...