SPARQL - извлечь подмножество графа с условиями фильтрации - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь извлечь подмножество графа с мультииерархией.

Пример структуры:

                                         root
                                   /                     \ 
                               SubWant                   subNotWant
                             /         \                           \
                     childWant        childWant                   gCWant
                        /                 \
                       gCWant       gCNotWant
                      /
                   gGCWant

поддерево subWant - это то, что я хотел бы получить ( Предположим, что все отношения {'/', '\'} или broader/narrower)

Мой текущий запрос:

CONSTRUCT
{
  ?children a skos:Concept ;
    skos:broader ?parent ;
    skos:prefLabel ?childPrefLiteral .
   }  

    WHERE {
    ?children skos:broader+ <http://example.com#subWant> ;
        skos:prefLabel ?childPrefLiteral .

    filter(STRBEFORE(?childPrefLiteral, " ") NOT IN (<criteria to prune by>) )
    ?children skos:broader ?parent ;


    # filter parent to only have transitive broader relation to desired concept

    ?parent skos:broader+ <http://example.com#subWant>
  }

Этот запрос почти работает, за исключением того, что он не будет включать прямых дочерних элементов узел subWant. Любые рекомендации, как элегантно выполнить sh это? Обратите внимание на то, что последняя тройка ?parent skos:broader <http://example.com#subWant> необходима, поскольку узлы имеют несколько родителей (мультииерархия) - см. Узел gCWant в образце графа.

1 Ответ

1 голос
/ 08 мая 2020

Попробуйте заменить

?parent skos:broader+ <http://example.com#subWant>

на

?parent skos:broader* <http://example.com#subWant>

Разница между «*» и «+» в том, что «*» также соответствует результатам, где ?parent равно <http://example.com#subWant> .

...