Sparql 获取rdf:根节点的类型

Sparql 获取rdf:根节点的类型,sparql,rdf,turtle-rdf,Sparql,Rdf,Turtle Rdf,我有以下数据: @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.w

我有以下数据:

@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:。
@前缀rdf:。
@前缀rdfs:。
@前缀sch:。
@前缀xml:。
@前缀xsd:。
a例如:XXXX;
ex:pA[a ex:YYYY;
例如:酒吧“价值”;
例如:foo“;
例如:名称“另一个名称”];
例如:pB“另一个_值”;
ex:pC[a ex:ZZZZ;
例如:标识符“id”;
例如:索引“asdf”]。
这可以可视化为

根节点定义为没有传入边的节点

此示例中的根节点是ex:a4fe06ac906b092870,rdf:type是ex:XXXX


什么SPARQL查询将返回给我,例如:XXXX?

根据UninformedUser的注释,将返回根节点的rdf:type的SPARQL查询是:

        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。

如果“根节点”意味着没有传入的边,您可以
select?type{s a?type过滤器不存在{s_in?p_in?s}
否则,您必须定义使节点成为根节点的区别特征,然后尝试将它们映射到SPARQL。显然,由于RDF可以用于建模(伪)图,这些图可以包含循环,或者数据可以有多个“根”,或者。。。与树相比,SPARQL有一些明显的局限性