在 DBpedia 中查找 class 共有的属性

Finding properties that are common to a class in DBpedia

我有一个关于如何在 DBpedia 中为共享 class 的实例查找不同属性的问题。我认为更多的是关于如何在 SPARQL 中执行此操作。我在这里尝试了这个查询:

SELECT DISTINCT ?p WHERE {
       ?s a <http://dbpedia.org/ontology/Film> .
       ?s ?p ?o.
} 

但是,我意识到这个查询为您提供了所有实例使用的所有不同属性,本质上,class 实例的不同属性可能保持不变,即 [=13] =] 例如,在像 DBpedia 这样的现实生活中基于维基百科的提取集,你没有那个。所以对上面查询的计数会给我 1767 distinct properties。但是,如何在 SPARQL 中找到 class 实例共有的所有属性呢?就像在 class 的实例中出现的一组属性一样,对于整个集合是通用的。这应该比 1767 小一些吧?同样,对于 LUBM,上面的查询执行了它,并且似乎所有实例都共享同一组不同的属性。我想对于 DBpedia 来说情况并非如此。我也知道这可以在 Java 中完成,例如。我可以遍历 class 的所有实例的所有属性,并保存所有出现的属性。我认为这太贵了,想知道在 SPARQL 中是否可行。

PS:有人问了一个相关问题 ,但正如我在这里写的,我不确定这是否真的捕获了所有 classes 的共同属性.

解引用电影 URI 将告诉您有关 DBpedia 中的电影 class 的所有信息:

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>
}

如果您正在寻找每部影片都具有这些属性值的属性,那么您可以使用如下查询来表达:

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 }
  }
}

SPARQL results

此查询查找一部影片,然后获取其所有不同的属性。由于我们正在寻找 all 电影具有的属性,因此我们选择哪部电影作为单一电影并不重要。然后我们过滤掉某些电影 没有 的属性中的任何一个 属性。剩下的就是每部电影都有的属性。

不幸的是,DBpedia 数据中 every Film 似乎唯一的 属性 是 rdf:type