获取一个DBpedia类的所有属性

21

如何获得特定类别的属性列表?考虑类别dbpedia-owl:Person。所有Person类别的实例都有一些以dbpprop:为前缀的属性。我怎样才能获取所有Person类别的实例中找到的dbpprop:属性呢?

2个回答

28

有效的解决方案是:

select distinct ?property where { 
   ?property <http://www.w3.org/2000/01/rdf-schema#domain> 
                             <http://dbpedia.org/ontology/Person> . }

在这个查询中,你正在请求所有将dbpedia:Person作为rdfs:domain的属性。这个查询需要一个模式定义才能工作,有时数据集并不完全遵循模式。对于这些数据集,你可以尝试使用另一个查询。

select distinct ?property where {
         ?instance a <http://dbpedia.org/ontology/Person> . 
         ?instance ?property ?obj . }

这个查询会查看每个人实例绑定其产生的所有属性。这比第一个查询要困难得多,在dbpedia公共实例中,你将会超时。因此,如果你想使用公共端点,最好使用第一个查询。


1
这只能找到那些域确切地为dbpedia-owl:Person的属性。然而,由于每个人都是Person的每个超类的实例,任何适用于超类的属性也适用于Person。您应该检索所有域为Person或其超类的属性。参见http://stackoverflow.com/q/22797424/1281433。 - Joshua Taylor
为什么你需要在这里使用“distinct”?也许我还没有真正理解这个关键词的功能。 - gsamaras
否则,您将为每个语句获取所有属性。使用distinct,它们只显示一次。就像对具有重复项的列表应用uniq一样。 - Manuel Salvadores

5
要获取所有传递属性,您可以使用此查询。
select distinct ?property where{
{
  ?property rdfs:domain ?class . 
  dbpedia-owl:Person rdfs:subClassOf+ ?class.
} UNION {
  ?property rdfs:domain dbpedia-owl:Person.
}}

在'rdfs:subClassOf'中的'+'是一个属性路径表达式[1],它还获取Person的所有上级类。这些属性也适用于Person。
另外请注意,dbprop命名空间不推荐使用,因为数据是原始的,没有规范化为数据类型。
[1] http://www.w3.org/TR/2010/WD-sparql11-property-paths-20100126/ 披露:我是DBpedia开发人员。

如何独立于类获取查询的属性?例如,我有一个查询“巴黎”,如何提取所有属性及其值。 - Hani Goc
1
选择*,其中{dbr:巴黎?p?o} - jimkont
Jim,我有一个之前发布在http://stackoverflow.com/questions/28671935/dbpedia-return-relations-information-is-dbpedia-owl-of 的问题。我真的不明白为什么有些属性缺失了。我的查询有什么问题吗? - Hani Goc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接