我有一个关于如何在DBpedia中共享类的实例查找不同属性的问题。我认为更多的是在SPARQL中如何做到这一点。我在这里尝试了这个查询:
SELECT DISTINCT ?p WHERE {
?s a <http://dbpedia.org/ontology/Film> .
?s ?p ?o.
}
但是,我意识到这个查询为您提供了所有实例使用的所有不同属性,主要是因为类实例的不同属性可能保持不变,例如在LUBM中,例如,一个真实的基于维基百科的提取集,如DBpedia,你没有。因此,对上述查询的计数会给我1767 distinct properties
。但是,如何在SPARQL中找到类实例的所有属性?就像在一个类的实例中出现的一组属性一样,对于整个集合是通用的。这应该是比1767更小的一套吗?同样对于LUBM,上面的查询会这样做,并且看起来所有实例都共享同一组不同的属性。我猜对于DBpedia而言并非如此。我也知道这可以用Java完成。我可以遍历所有类的实例的所有属性,只保存出现在所有实例中的那些属性。我认为这太贵了,并且想知道SPARQL是否可行。
答案 0 :(得分:3)
如果您正在寻找每个电影都具有这些属性值的属性,那么您可以通过以下查询来表达:
select distinct ?p {
#-- Find all the distinct properties
#-- of some reference Film. It shouldn't
#-- matter which Film we get.
{ select distinct ?p {
{ select ?ex { ?ex a dbo:Film } limit 1 }
?ex ?p ?o
}
}
#-- Now exclude any of those properties
#-- if there is a Film that doesn't have
#-- a value for them.
filter not exists {
?f a dbo:Film .
filter not exists { ?f ?p ?o }
}
}
此查询查找单个影片,然后获取其所有不同的属性。由于我们正在寻找所有电影所具有的属性,因此我们选择哪一部电影作为单一电影并不重要。然后我们过滤掉其中某些Film 没有具有属性的属性。剩下的就是每部电影都具备的那些属性。
不幸的是,似乎DBpedia数据中每个电影的唯一属性是 rdf:type 。
答案 1 :(得分:2)
取消引用电影URI将告诉您有关DBpedia中电影类的所有信息:
HTML资源:
http://mappings.dbpedia.org/server/ontology/classes/Film
RDF资源:
http://dbpedia.org/data3/Film.ttl
对电影的域和范围属性的SPARQL查询:
SELECT ?predicate
WHERE {
?predicate rdfs:domain|rdfs:range <http://dbpedia.org/ontology/Film>
}