我目前正在寻找一种通过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
}
这实际上是我真正要求的。我现在要做的最后一件事就是尝试按照它们出现的页数来排序(可能最常见的属性是最感兴趣的属性)。
答案 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:domain
为SpaceMission
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))
(稍微重新排序,在开始时有选择性可能会提高性能)