2017-06-12 55 views
2

我正在創建基於RDFS/OWL的類層次結構,並使用ardf:type)關係在所有類中創建實例。我想要檢索特定類的實例,但不包括其子實例。但是,當我編寫SPARQL查詢時,它也爲我提供了每個子類的所有實例。Sparql 1.1獲取特定類的所有實例,但不包含子類的任何實例

我的本體說:

Book是一類,它有兩個子類:hard_bounded_booksoft_binded_books

換句話說(某些情況下):

@prefix ex: <http://book_triples.org/> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 

ex:hard_bounded_book1 
     a  ex:hard_bounded_book . 
ex:soft_binded_books1a 
     a  ex:soft_binded_books . 
ex:soft_binded_books rdfs:subClassOf ex:Book . 
ex:hard_bounded_book rdfs:subClassOf ex:Book . 
ex:Book a  rdf:Class . 
ex:Book1 a  ex:Book . 

當我查詢

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX ex: <http://book_triples.org/> 
SELECT ?book 
WHERE 
    { ?book rdf:type ex:Book } 

它返回s全部三個Book1,hard_bounded_book1,soft_binded_books1,但我只想得到第一個結果(Book1)。

任何幫助表示讚賞。謝謝。

+0

您使用哪個API或三重存儲? – AKSW

回答

2

無論在商店中打開還是關閉推理,都可以編寫一個只返回特定類的實例的查詢,由 過濾掉所有也是實例的實例的ex:Book一個子類,像這樣:

SELECT ?book 
WHERE { 
    ?book rdf:type ex:Book 
    FILTER NOT EXISTS { 
    ?book rdf:type ?c . 
    ?c rdfs:subClassOf+ ex:Book . 
    FILTER (?c != ex:Book) 
} 

它檢查了每本書回來,那本書的ex:Book一個子類的實例三決策不存在。第二個過濾器(檢查?c不等於ex:Book)是必要的,因爲在RDFS中,每個類都是它自己的子類。

當然,這個查詢運行起來要比原來簡單,所以如果你的triplestore有一個選項來暫時關閉推斷,那可能是一個更好的解決方案。

另外:subClassOf模式後面的+符號是一個「1級或更多級別」的操作符,在此處是可選的。如果您希望嚴格排除全部子類的可能實例,即使推理程序已完成所有推理,也需要包含它。鑑於在你的情景中,可能有一個推理者推斷完整的演繹關閉,你可以忽略它。

更新爲了更詳細一點我的觀點解釋這件+跡象:假設有類A,B和C:B是A的子類,C是B.

的子類

設想一個個體x,它被宣佈爲C.

  1. 的實例沒有推理,對於A的所有實例將不會返回X,任何查詢無論我們在查詢中篩選出的子類。
  2. 推理,x將被推斷爲B型,和A型的,所以沒有+符號子類過濾器將工作從 結果移去X。

到目前爲止好。 然而,假設我們也插入了明確的事實,x是A.

的一個實例,如果推理被啓用,我們仍然罰款沒有+運營商查詢。然而,沒有推理,即使x也是A(的間接)子類的一個實例(即C),現在對A的所有實例的查詢將返回x。這是+操作員有幫助的邊界情況。

+0

謝謝。這解決了這個問題。大致有兩個問題:是否有任何方法可以暫時關閉推理,而暫時關閉推理。如果我不使用+符號,它會忽略直接的子類,並因此忽略所有後續的子類。真的需要+符號嗎? – Sidd

+0

問題1:這取決於你正在使用的三重儲存。問題2:我將編輯答案,以便快速勾畫出爲什麼可能有必要。 –

+0

明白了。再次感謝。 – Sidd

1

我編輯你的問題,提供一個格式良好的輸入和查詢。我歪曲了什麼?

我真的懷疑這是一個推論或推理問題。你正在使用什麼triplestore?你知道推理是否被啓用嗎?

當我將您的三倍到Blazegraph,與inference轉身off,並運行查詢,我得到了想要的結果:

+----------------------------------------------+ 
|      book      | 
+----------------------------------------------+ 
| <http://book_triples.org/Book1>    | 
+----------------------------------------------+ 

當我打開推論,我得到的結果你描述:

+----------------------------------------------+ 
|      book      | 
+----------------------------------------------+ 
| <http://book_triples.org/Book1>    | 
| <http://book_triples.org/hard_bounded_book1> | 
| <http://book_triples.org/soft_binded_books1> | 
+----------------------------------------------+ 
相關問題