У меня есть следующие данные:
@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?
select ?type { ?s a ?type filter not exists {?s_in ?p_in ?s} }
в противном случае вам нужно определить отличительные признаки, которые делают узел корневым узлом, а затем попытаться отобразить их в SPARQL. Понятно, что поскольку RDF можно использовать для моделирования (псевдо)графов, которые могут содержать циклы, или данные могут иметь несколько корней, или... по сравнению с деревьями, SPARQL имеет некоторые очевидные ограничения. - person UninformedUser   schedule 28.04.2020