Получение rdf:type корневого узла

У меня есть следующие данные:

@prefix ex: <http://example.com/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sch: <http://schema.org/> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<ex:a4fe06ac906b092870> a ex:XXXX ;
    ex:pA [ a ex:YYYY ;
            ex:bar "value" ;
            ex:foo "" ;
            ex:name "another_name" ] ;
    ex:pB "another_value" ;
    ex:pC [ a ex:ZZZZ ;
            ex:identifier "the id" ;
            ex:index "asdf" ] .

который можно визуализировать как это.

Корневой узел определяется как узел без входящих ребер.

Корневой узел в этом примере — ex:a4fe06ac906b092870, а rdf:type — ex:XXXX.

Какой запрос SPARQL вернет мне ex:XXXX?


person James Hudson    schedule 28.04.2020    source источник
comment
если корневой узел означает отсутствие входящих ребер, вы могли бы сделать select ?type { ?s a ?type filter not exists {?s_in ?p_in ?s} } в противном случае вам нужно определить отличительные признаки, которые делают узел корневым узлом, а затем попытаться отобразить их в SPARQL. Понятно, что поскольку RDF можно использовать для моделирования (псевдо)графов, которые могут содержать циклы, или данные могут иметь несколько корней, или... по сравнению с деревьями, SPARQL имеет некоторые очевидные ограничения.   -  person UninformedUser    schedule 28.04.2020


Ответы (1)


Основываясь на комментарии UninformedUser, запрос SPARQL, который вернет rdf:type корневого узла:

        SELECT ?o 
        WHERE { 
            ?s a ?o . 
            FILTER NOT EXISTS {
                ?s_in ?p_in ?s .
            } 
        }

Поскольку rdf:type корневого узла желателен, необходимо учитывать только те субъекты, которые имеют ребро rdf:type ( ?s a ?o . ).

?s_in ?p_in ?s . в фильтре будет соответствовать всем узлам с краем rdf:type, которые имеют входящее ребро. Эти узлы затем отфильтровываются из результатов.

Остается rdf:type корневого узла.

person James Hudson    schedule 28.04.2020