2012-03-30 22 views
6

SPARQL hakkında bir sorum var.SPARQL: Sınıf hiyerarşisinin derinliği bilinmediğinde bir ontolojiden nasıl delinir?

Animals (is a superclass with object property <hasColor>) 
------ Mammals (subclass of Animals) 
------------- Dog (subclass of Mammals) 
---------------- dog1 (a instance with property <hasColor>="white") 
---------------- dog2 (a instance with property <hasColor>="red" ) 
------ Bird (subclass of Animals) 

o "Hayvanlar tüm örnekleri" ya da " 'beyaz' olan tüm hayvanlar," SPARQL ile bulmak mümkün mü: Ben hayvanların bir ontolojisi var? Ve geriye doğru: Bir örnek (dog1) Hayvanlar'a aitse nasıl bilebilirim?

NOT: Sınıf hiyerarşisi derinliği ve genişliği önceden bilinmemektedir.

Ayrıca aşağıda sorgu

SELECT ?x WHERE {?x rdfs:subClassOf :Animals . ?x :hasСolor "white"} 

çalışmayacak Ve gelecek sorgu ('beyaz' olan tüm Hayvanlar, bulmak) sınıf hiyerarşisinin derinliği bilinir durumunda çalışır. (Yani hiyerarşi biliniyorsa, ben hedefe ulaşmak için aşağıya hiyerarşi) üstünden belirtilen adımları (yapabilir. Bu durumda 2 adım

SELECT ?z WHERE { 
?x rdfs:subClassOf :Animals . 
?y rdfs:subClassOf ?x . 
?z rdf:type ?y . 
?z :hasColor "white" 
} 

aynı sonraki örneğin doğrudur - "Hayvanlar tüm örneklerini bulmak"

SELECT ?z WHERE { 
?x rdfs:subClassOf :Animals . 
?y rdfs:subClassOf ?x . 
?z rdf:type ?y . 
} 

hierarchie bilinmiyorsa, ne yapmalı?

sorgu SDB ile işlenecektir

(olan bir bileşeni Jena). select ?x where {?x rdfs:subClassOf :Animals . ?x :hasСolor "white"})

UPD:

Ben böyle bir şey istiyorum. şöyle görünebilir " 'beyaz' olan tüm Hayvanlar (örneğini) bulmak" için Çözüm:?

SEÇ y {x RDFS: subclassof *: Hayvanlar. ? y rdf: type? x. ? Y :

cevap

10

Sen SPARQL sorguda geçişlilik kullanabilirsiniz hasColor "beyaz"} (* kullanarak):

SELECT ?y WHERE { ?x rdfs:subClassOf* :Animals . 
        ?y rdf:type ?x . 
        ?y :hasColor "white" } 
+0

Teşekkür! Sorguyu Protege ile test ettim. SELECT? X WHERE {? X rdfs: subClassOf *: Hayvanlar} iyi çalışıyor. Ama SELECT? X WHERE {? X rdfs: subClassOf *: Hayvanlar. ? x: hasСolor "beyaz"} hiçbir eşleşme bulamadı – ERG

+0

tuhaf sorgu SELECT? x? Y WHERE {? x rdfs: subClassOf *: Hayvanlar. ? y rdf: type? x.}} çok iyi çalışır ve tüm örnekleri döndürür, ancak ekliyorsa (? x: hasСolor "white"), – ERG

+0

@ERG ile eşleşmiyorsa ne bulur ve ne hakkında? SELECT? x WHERE {? x rdfs : subclassof *: Hayvanlar y rdf:.? tipi x y:?.?. hasColor "beyaz"} ' –