2016-08-11 17 views
1

這是一個關於Virtuoso 7.1和DBpedia中簡單RDFS推理的問題。我有一個使用這個link作爲參考安裝的Virtuoso實例。現在,如果我用以下查詢查詢端點:Virtuoso 7.x中的默認RDFS推理

Select ?s 
where { ?s a <http://dbpedia.org/ontology/Cricketer> . } 

我得到了DBpedia中存在的板球員列表。假設我希望所有運動員(所有的運動和板球列入,其中運動員爲rdfs:superClassOf板球),我只是嘗試查詢

Select ?s 
where { ?s a <http://dbpedia.org/ontology/Athlete> . } 

爲此,我得到的所有正確的答案。不過,我有一個問題rdfs:subPropertyOf。例如,物業<http://dbpedia.org/ontology/capital><http://dbpedia.org/ontology/administrativeHeadCity>的子財產。因此,假設我想要所有的首都和行政首長城市,我發出查詢

Select ?s ?o 
where { ?s <http://dbpedia.org/ontology/administrativeHeadCity> ?o . } 

我得到零結果。爲什麼子屬性推理在DBpedia中不起作用?還有什麼我錯過了嗎?

回答

2

你已經錯過了幾件事情。

首先,Virtuoso位於7.2.4 as of April 2016,強烈建議您從2014年開始使用該版本,原因很多。

@ AKSW有關Property Paths的建議在這個更高版本中也會更好。

然後,您可以使用推斷在DBpedia的端點(包括本地鏡像),通過the input:inference pragma,在如圖所示的live resultsthe query shown below的 -

DEFINE input:inference "http://dbpedia.org/resource/inference/rules/dbpedia#" 

SELECT ?place ?HeadCity 
WHERE 
    { 
    ?place <http://dbpedia.org/ontology/administrativeHeadCity> ?HeadCity 
    } 
ORDER BY ?place ?HeadCity 

您還可以看到的predefined inference rule sets列表。

And ...更多relevant documentation。 (ObDisclaimer:我爲OpenLink Software工作,生產者Virtuoso。)

+0

這真的解決了@TallTed的問題。我會假設一個人也應該能夠使用Jena的編譯指示來查詢Virtuoso! – N00bsie

+0

是的,可以在通過任何連接到達Virtuoso的任何SPARQL查詢中使用該編譯指示。根據您要使用的特定Virtuoso功能,[您可能需要繞過我們的文檔中所述的Jena解析器](http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtJenaProvider#Bypass% 20Jena/ARQ%20parser)。 – TallTed

2

DBpedia中沒有啓用自動推理。 DBpedia本身是一個加載到Virtuoso中的數據集。

,你得到所有實例與像dbo:Athlete超類的原因是子類繼承當前DBpedia的數據集完全物化:

(s rdf:type c1), (c1 rdfs:subClassOf c2) -> (s rdf:type c2)

這意味着,每一個人x的DBpedia的數據集包含它所屬的所有類C - 事實上也是超類。

這一程序是做了子屬性繼承,即

(s p1 o), (p1 rdfs:subPropertyOf p2) -> (s p2 o)

可以解決SPARQL 1.1屬性路徑這一問題:

SELECT ?s ?o WHERE { 
    ?p rdfs:subPropertyOf* <http://dbpedia.org/ontology/administrativeHeadCity> . 
    ?s ?p ?o . 
} 
+0

啊!這解釋了爲什麼subPropertyOf不工作!我應該早點檢查一下。非常感謝@AKSW! – N00bsie