2011-12-20 11 views
9

SPARQL'e yeni başlıyorum ve geçişli ilişkileri geri döndürmeme yardımcı olabilecek bir sorgu olup olmadığını merak ediyordum. Örneğin, aşağıdaki n3 dosyası, "a" sameas c "ya da bu satırlar boyunca bir şey döndüren bir sorgu isterim. TeşekkürSPARQL Sorgulama Geçişli

@prefix : <http://websitename.com/links/> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 

:a owl:sameas :b. 
:b owl:sameas :c. 

cevap

13

Eğer uygun bir şekilde etkinleştirilmiş SPARQL 1.1 motorunu kullanıyorsanız, mülkiyet yolları kullanabilirsiniz, bunu sana bu özelliği destekleyen onun RMKM motorunu kullanan varsayalım soru Jena etiketlediniz.

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT * 
WHERE 
{ 
    ?x owl:sameAs+ ?y 
} 

Not dayanaktan sonra +, bu bir/daha adımlardan oluşan ilişkileri için bakmak gerektiğini belirtmek için kullanılır:

Yani aşağıdaki gibi bir sorgu yazabilirsiniz.

Özellik yollarının sözdizimi here bulunabilir ve çok düzenli bir ifadedir. Bunu kullanan sorguların yalnızca olumsuz yanı, yolların ne kadar olduğu veya ara düğümlerin ne olduğu hakkında bilgi almamanızdır.

+0

Yardımlarınız için tekrar teşekkürler. SPARQL sözdizimi – Sam

+3

üzerindeki bağlantıyı mutlaka kontrol etmeye gidiyoruz Sorgulama yaptığınız şey OWL gerekçesini destekliyorsa, aktarma özelliğini içeren bir OWL profili ve bir TransitiveProperty özelliği tanımladığınızda, herhangi bir özel SPARQL'e ihtiyacınız yoktur. sözdizimi, sadece özelliği normalde kullanabilirsiniz ve mantık doğru şeyi yapacağız. – Michael

4

Sizin durumunuzda RobV's answer doğru iken, ben baykuşun iki yönlü doğası: Bence aynı şeyden bahsetmeye değer.

en bu ederek örnek uzatmak edelim: Basit owl:sameAs+:e bulmak yeterli olmaz Bu durumda

:a owl:sameAs :d. 
:e owl:sameAs :d. 

, belki bütün denklik ağacını bulmak için (owl:sameAs|^owl:sameAs)+ gibi bir şey kullanın. Son noktaya bağlı olarak bunun döngülere neden olabileceğini unutmayın.

Ayrıca uygulama belirli uzantıları böyle Virtuoso gibi owl:sameAs muhakeme işlemek için olabilir:

DEFINE input:same-as "yes" 
select * where { :a ?p ?o. } 

da ?p ve :b, :c, :d ve :e için verilir ?o dönüyor.