获取DBPedia信息框类别

时间:2011-03-19 20:56:07

标签: rdf sparql dbpedia

我目前正在寻找一种通过SPARQL端点查询DBPedia's Infobox Onyology database的方法,以获取类的列表,所选类的子类以及给定类的属性。据我所知,您要么需要知道您正在寻找的属性,要么搜索特定的内容 - 我发现的所有示例似乎都基于您想要搜索特定内容的想法(比如某个高度以上的城市人口等),而我想建立一些可以有效“浏览”类别的东西。例如,从this class hierarchy chart上的“owl:Thing”的子类列表开始,向用户显示所选子类的子类列表。似乎可以通过映射wiki浏览这样的东西,但最好是直接查询SPARQL端点。

是否有一些简单的SPARQL查询会返回这些类的可用类和属性?

更新 通过迭代this query:

,我想出了一种获得类层次结构的方法
SELECT ?subject WHERE {
     ?subject rdfs:subClassOf owl:Thing
}

返回owl的子类列表:Thing,如果我用其中一个子类替换owl:Thing,我得到它的子类列表,直到没有子类,此时我可以选择所有子类具有所选子类给出的类型的资源。不过,我仍然不太确定如何获得子类共有的所有属性。

更新2 现在越来越近了。此查询获取了所有属性(dbpedia:property的子项),它们也是一个国家/地区,以及它们的标题:

SELECT DISTINCT ?prop ?title WHERE {
     ?country ?prop ?value.
     ?country a <http://dbpedia.org/ontology/Country>.
     ?prop rdf:type rdf:Property.
     ?prop rdfs:label ?title
}

这实际上是我真正要求的。我现在要做的最后一件事就是尝试按照它们出现的页数来排序(可能最常见的属性是最感兴趣的属性)。

4 个答案:

答案 0 :(得分:7)

好的,所以我实际上已经或多或少地想出了如何做到这一点,所以我提交这个作为答案而不仅仅是编辑。什么似乎给我正是我正在寻找的是从使用this query迭代类heirarchy开始:

SELECT ?class ?label WHERE {
     ?class rdfs:subClassOf owl:Thing.
     ?class rdfs:label ?label. 
     FILTER(lang(?label) = "en")
}

将所选结果送入查询而不是猫头鹰:每次都是。

一旦用户选择了他们想要的最低级别的类,要显示属性列表,按照它们出现的条目数的降序排列,我使用this query

SELECT ?prop ?title WHERE {
     ?country ?prop [].
     ?country a <http://dbpedia.org/ontology/Country>.
     ?prop rdf:type rdf:Property.
     ?prop rdfs:label ?title
} ORDER BY DESC(COUNT(DISTINCT ?country))

当然,如果你真的看看那些结果,那里有一些时髦的属性,没有非常具有描述性的标签(“s”?什么?),但这至少是我在第一次看到的的地方。

答案 1 :(得分:3)

(1)查询所有现有类:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?class
WHERE {
  ?s rdf:type ?class .
}

(2)查询C类的任何实例中使用的所有属性:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?property
WHERE {
  ?s rdf:type <C> .
  ?s ?property ?o
}

答案 2 :(得分:2)

这将为您提供rdfs:domainSpaceMission s:

的所有属性
select ?property where {
    ?property rdfs:domain <http://dbpedia.org/ontology/SpaceMission>
}

这些属性都接受SpaceMission作为主题。

请注意,在RDF(S)中,不需要为每个属性都有明确的rdfs:domain语句,因为属性的使用可以暗示rdfs:domain。因此,您可能会发现此查询将为您提供已使用域SpaceMission进行定义的所有属性的列表,但不会为您提供实际使用与SpaceMission的所有实例。

答案 3 :(得分:1)

很可能某些属性实际上并未定义为:

?p a rdf:Property .

但根据定义,中间位置的任何术语都是属性。因此,您可能会获得更多结果:

SELECT ?prop ?title WHERE {
     ?country a <http://dbpedia.org/ontology/Country>.
     ?country ?prop [] .
     ?prop rdfs:label ?title .
} 
ORDER BY DESC(COUNT(DISTINCT ?country))

(稍微重新排序,在开始时有选择性可能会提高性能)