Sparql - Перемещение вверх (самое широкое)

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

Я пытаюсь реализовать функцию опережающего ввода для приложения, использующего набор данных.

Я пытаюсь выяснить, как я могу условно перейти к основной концепции.

введите здесь описание изображения

На этом рисунке, если бы я искал Dreamworks, это было бы на 3 уровня ниже (Коммерческие организации -> Частная компания -> Dreamworks).

Если я сделаю что-то еще, очевидно, это будет на разных слоях графа.

Я пытаюсь получить значение «Организация» или «Человек» в качестве верхнего уровня.

Этот очень простой запрос работает.

        SELECT DISTINCT  ?subjectPrefLabel ?a ?b ?o
    WHERE
        { 
            ?subject skosxl:prefLabel/skosxl:literalForm ?subjectPrefLabel .
    ?subject skos:broader/skos:broader/skos:broader/skosxl:prefLabel/skosxl:literalForm ?a


    FILTER regex(?subjectPrefLabel, "Dreamworks", 'i')
        }
    ORDER BY ?subjectPrefLabel

введите здесь описание изображения

Однако очевидно, что это недопустимо, так как разработчику необходимо знать, на сколько уровней вниз по иерархии для выдачи правильного количества skos:broader.

Могу ли я в любом случае условно обнаружить высший уровень иерархии?

Поскольку это внутренняя онтология, я не могу делиться какими-либо данными, поэтому я знаю, что с ней будет сложно работать, любые советы приветствуются.


person Busturdust    schedule 30.05.2017    source источник


Ответы (1)


Использование оператора звезды Клини * в сочетании с FILTER, указывающим, что более широкой концепции нет, должно возвращать только основные концепции:

SELECT DISTINCT  ?subjectPrefLabel ?a ?b ?o WHERE { 
    ?subject skosxl:prefLabel/skosxl:literalForm ?subjectPrefLabel .
    ?subject skos:broader* ?concept. 
    ?concept skosxl:prefLabel/skosxl:literalForm ?a
    FILTER NOT EXISTS { ?concept skos:broader ?supConcept } 
    FILTER regex(?subjectPrefLabel, "Dreamworks", 'i')
}
ORDER BY ?subjectPrefLabel
person UninformedUser    schedule 30.05.2017