2012-02-09 17 views
9

SPARQL'de C sınıfının C ve alt sınıflarının (doğrudan veya dolaylı) tüm örneklerini almam gerekir.SPARQL: Belirli bir sınıfın alt sınıflarının tüm varlıklarını alın

ben bu şekilde C'nin tüm doğrudan alt sınıflarını alabilirsiniz:

SELECT ?entity 
WHERE { 
    ?subclass rdfs:subClassOf :C . 
    ?entity rdf:type ?subclass . 
} 

Ama dolaylı bir alt sınıf örneklerini alamayan ve ben bildiği gibi C

herhangi örneği ne (Onları önceden hesapladım) tüm alt sınıflar (doğrudan ve dolaylı olarak C) ve dinamik bir sorgu oluşturabilirim, aşağıdaki gibi bir sorgu oluşturmak mümkün mü?

Herkese teşekkürler.

DÜZENLEME:

Sadece hatta zarif olmayan bir şekilde eğer, bunu çözdük. SPARQL 1.1 specification olurdu yapmak uygun yolu dayanarak

SELECT ?entity 
WHERE { 
    ?entity rdf:type ?type. 
    ?type rdfs:subClassOf* :C. 
} 

cevap

20

Daha iyi bir çözüm SPARQL 1.1

özellik yolu ifadeleri kullanmaktır Bu şekilde tekrar yazılabilir olur

SELECT ?entity 
WHERE { 
    ?entity rdf:type/rdfs:subClassOf* :C 
} 

Özellik yollarını desteklemeden, herhangi bir harcama yolu yoktur rasgele uzunluk sys sınıf hiyerarşileri.

+2

Üçlü depolamaya bağlı olarak, bu olabilir veya çalışmayabilir. Tüm üçlü mağazalarda özellik yolları ifadeleri kullanılmaz. –

+0

Teşekkürler, işe yaradı! – auino

+0

@msalvadores Bir güncelleme olarak, hala eski üçlü depolar olsa da, özellik yolları SPARQL 1.1'e dönüştü, böylece geçerli standardı destekleyen üçlü depolar özellik yollarını destekleyecektir. –

3

:

SELECT ?entity 
WHERE { 
    { ?entity rdf:type :C } 
    UNION { ?entity rdf:type :SubClass1 } 
    UNION { ?entity rdf:type :SubClass2 } 
    UNION { ?entity rdf:type :SubClass3 } 
} 
İlgili konular