2012-02-09 10 views
9

Muszę uzyskać wszystkie wystąpienia klasy C i podklas (bezpośrednie lub pośrednie) C, w SPARQL.SPARQL: Pobierz wszystkie jednostki podklas określonej klasy

mogę uzyskać wszystkie bezpośrednie podklasy C w ten sposób:

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

Ale nie mogę uzyskać instancji podklasy pośredniego i nie każdy przypadek C

co wiem (Wstępnie je wyliczyłem) wszystkie podklasy (bezpośrednie i pośrednie z C), i mogę zbudować zapytanie dynamiczne, czy możliwe jest zbudowanie zapytania podobnego do poniższego?

SELECT ?entity 
WHERE { 
    ?entity rdf:type in <list>. 
} 

Dziękuję wszystkim.

EDIT:

Właśnie rozwiązać go, nawet jeśli nie w elegancki sposób.

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

Odpowiedz

20

Lepszym rozwiązaniem jest użycie wyrażeń ścieżki nieruchomość w SPARQL 1.1

To będzie zapisane jako:

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

W zależności od potrójnego sklepu to może działać lub nie. Nie wszystkie potrójne magazyny realizują wyrażenia ścieżek właściwości. –

+0

Dzięki, zadziałało !! – auino

+0

@msalvadores Jako aktualizację, chociaż wciąż istnieją starsze potrójne zapasy, ścieżki własności trafiły do ​​SPARQL 1.1, więc wszelkie potrójne sklepy, które obsługują obecny standard, będą obsługiwać ścieżki własności. –

3

Na podstawie SPARQL 1.1 specification właściwy sposób to zrobić byłoby:

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

Bez wsparcia dla ścieżek własności nie ma możliwości Hierarchie klas o dowolnej długości.

Powiązane problemy