[英]SPARQL query to get all Person available in DBpedia is showing only some Person data, not all
[英]SPARQL Query for list of ALL Classes related to Person
我想创建一个SPARQL查询,它返回与Person
相关的所有Ontology类/属性的列表。 例如,像Person
的子类(派生自)
<rdfs:subClassOf rdf:resource="http://dbpedia.org/ontology/Person"/>
或拥有域/范围的Person
<rdfs:domain rdf:resource="http://dbpedia.org/ontology/Person"/>
。
例如,查询应返回"http://dbpedia.org/ontology/OfficeHolder"
和"http://dbpedia.org/ontology/Astronaut"
等结果,因为第一个结果有rdfs:domain
Person第二个是rdfs:subClassOf
Person。
这是我写的查询:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
select distinct ?s
where {
{
?s rdfs:domain dbo:Person .
}
union
{
?s rdfs:range dbo:Person .
}
union
{
?s rdfs:subClassOf dbo:Person .
}
}
现在,此查询返回在其属性中明确提及Person
的所有类的列表,但是错过了像Singer
这样的类,它是MusicalArtist
的子类,位于Person的域中。
我想要一个查询列出所有这些类/属性,直接或通过“继承”列出与Person相关的类。 有什么建议么?
看来,你把类与属性混淆了......仔细阅读RDFS 1.1 ,它很简短。
如果要检索“与” dbo:Person
相关的类和属性dbo:Person
,请使用属性路径 :
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?p ?s WHERE
{
{
?s (rdfs:subPropertyOf|owl:equivalentProperty|^owl:equivalentProperty)*/
rdfs:domain/
(rdfs:subClassOf|owl:equivalentClass|^owl:equivalentClass)*
dbo:Person .
BIND (rdfs:domain AS ?p)
}
UNION
{
?s (rdfs:subPropertyOf|owl:equivalentProperty|^owl:equivalentProperty)*/
rdfs:range/
(rdfs:subClassOf|owl:equivalentClass|^owl:equivalentClass)*
dbo:Person .
BIND (rdfs:range AS ?p)
}
UNION
{
?s (rdfs:subClassOf|owl:equivalentClass|^owl:equivalentClass)*
dbo:Person .
BIND (rdfs:subClassOf AS ?p)
}
# FILTER (STRSTARTS(STR(?s), "http://dbpedia.org/"))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.