获取根节点的rdf:type
Obtaining the rdf:type of the root node
我有以下数据:
@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" ] .
可以形象化为this。
根节点定义为没有入边的节点。
本示例中的根节点是 ex:a4fe06ac906b092870,rdf:type 是 ex:XXXX。
什么 SPARQL 查询 return 我 ex:XXXX?
根据 UninformedUser 的评论,将 return 根节点的 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
我有以下数据:
@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" ] .
可以形象化为this。
根节点定义为没有入边的节点。
本示例中的根节点是 ex:a4fe06ac906b092870,rdf:type 是 ex:XXXX。
什么 SPARQL 查询 return 我 ex:XXXX?
根据 UninformedUser 的评论,将 return 根节点的 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