簡體   English   中英

獲取DBPedia信息框類別

[英]Getting DBPedia Infobox categories

我目前正在尋找一種通過SPARQL端點查詢DBPedia的Infobox Onyology數據庫的方法,以獲取類的列表,所選類的子類以及給定類的屬性。 據我所知,您要么需要知道您正在尋找的屬性,要么搜索特定的內容 - 我發現的所有示例似乎都基於您想要搜索特定內容的想法(比如某個高度以上的城市人口等),而我想建立一些可以有效“瀏覽”類別的東西。 例如,從此類層次結構圖上的“owl:Thing”的子類列表開始,向用戶顯示所選子類的子類列表。 似乎可以通過映射wiki瀏覽這樣的東西,但最好直接查詢SPARQL端點。

是否有一些簡單的SPARQL查詢會返回這些類的可用類和屬性?

更新:通過迭代查詢 ,我想出了一種方法來獲得類層次結構

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
}

這實際上是我真正要求的。 我現在要做的最后一件事是嘗試按照它們出現的頁數來排序(可能最常見的屬性是最感興趣的屬性)。

好的,所以我實際上已經或多或少地想出了如何做到這一點,所以我提交這個作為答案而不僅僅是編輯。 什么似乎給我正是我正在尋找的是從使用此查詢迭代類heirarchy開始:

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

將所選結果送入查詢而不是貓頭鷹:每次都是。

一旦用戶選擇了他們想要的最低級別的類,要顯示屬性列表,按照它們出現的條目數的降序排列,我使用此查詢

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)查詢所有現有類:

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
}

這將獲得rdfs:domainSpaceMission的所有屬性:

select ?property where {
    ?property rdfs:domain <http://dbpedia.org/ontology/SpaceMission>
}

這些屬性都接受SpaceMission作為主題。

請注意,在RDF(S)中,不需要為每個屬性都有一個顯式的rdfs:domain語句,因為屬性的使用可以隱含rdfs:domain 因此,您可能會發現此查詢將為您提供已使用SpaceMission定義的所有屬性的列表,但不會為您提供實際SpaceMission所有實例一起使用的所有屬性的列表。

很可能某些屬性實際上並未如此定義:

?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))

(稍微重新排序,在開始時有選擇性可能會提高性能)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM