查找DBpedia中

时间:2016-09-09 13:56:21

标签: sparql rdf semantic-web dbpedia

我有一个关于如何在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是否可行。

PS:有人问了一个相关的问题here,但正如我在这里写的那样,我不确定它是否真正捕获了所有类的公共属性。

2 个答案:

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

SPARQL results

此查询查找单个影片,然后获取其所有不同的属性。由于我们正在寻找所有电影所具有的属性,因此我们选择哪一部电影作为单一电影并不重要。然后我们过滤掉其中某些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>
}