2014-07-07 48 views
2

我正在尋找解決方案,以便在芝麻上啓動的查詢過程中「刪除」推理。我必須使用「本地Java軟件商店RDF Schema的」資料庫,我有這個疑問: 我有一個實例,一個NamedIndividual,我要的類,其實例它是URI:芝麻:如何在查詢過程中刪除推理?

SELECT DISTINCT ?uri WHERE { 
     <http://www.semanticweb.org/ontotest#myInstance> rdf:type ?uri . 
     FILTER (?uri rdf:type owl:Class)   
    } 

的問題是我得到了幾個URI(誰是好的URI),而不是因爲推理。我得到了本體的超類,然後與實例的類沒有關係。 如何在不更改存儲庫的情況下獲得正確的結果?

回答

0

聽起來好像你正在嘗試返回某個人是實例的最具體的類。 ThomasFrancart's answer解釋瞭如何禁用推理,但您可能不想這樣做,因爲您可能需要推理來推斷最具體的實例。例如,你可能有一個類關係

SeniorCitizen&sqsubseteq; Person
Person ⊓ hasAge some integer [> = 60]&sqsubseteq; SeniorCitizen

和數據:

約翰RDF:Person類型
約翰hasAge 62

然後,如果你禁用推斷,你將無法知道約翰一個SeniorCitizen,儘管它比Person更具體。這聽起來像你實際上想保持推理啓用,但只返回最具體的類。你可以做到這一點與這樣的查詢:

select ?class where { 
    :myInstance rdf:type ?class . 
    filter not exists { 
    ?subclass rdfs:subClassOf* ?class . 
    :myInstance rdf:type ?subclass . 
    filter (?subclass != ?class) 
    } 
} 

這是說找到?class這樣:myInstance這些值是?class的元素,但只在有沒有?subclass這就是?class(比?class本身以外的一個子類):myInstance也屬於。請注意,一個實例可以有多個最具體的類。

參見:

+0

我沒有找到正確的查詢我的問題,但功能setIncludeInferred運行 – user3661334