2012-02-09 39 views
9

Tôi đã nhận được tất cả các cá thể của một lớp C và các lớp con (trực tiếp hoặc gián tiếp) của C, trong SPARQL.SPARQL: Nhận tất cả các thực thể của các lớp con của một lớp nhất định

tôi có thể nhận được tất cả các lớp con trực tiếp của C theo cách này:

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

Nhưng tôi không thể có được sự thể hiện của một lớp con gián tiếp và không phải bất kỳ trường hợp của C.

Như tôi biết (Tôi đã tính toán trước chúng) tất cả các lớp con (trực tiếp và gián tiếp của C), và tôi có thể xây dựng một truy vấn động, có thể xây dựng một truy vấn như sau không?

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

Xin cảm ơn tất cả mọi người.

CHỈNH SỬA:

Tôi vừa mới giải quyết nó, ngay cả khi không theo cách thanh lịch.

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

Trả lời

20

Một giải pháp tốt hơn là sử dụng biểu thức đường dẫn bất động sản trong SPARQL 1.1

này sẽ được viết lại như sau:

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

Tùy thuộc vào cửa hàng ba có thể hoặc không hoạt động. Không phải tất cả các cửa hàng ba đều triển khai biểu thức đường dẫn thuộc tính. –

+0

Cảm ơn, nó đã hoạt động !! – auino

+0

@msalvadores Như một bản cập nhật, trong khi vẫn có thể có các cửa hàng ba cũ hơn, đường dẫn đặc tính đã đưa nó vào SPARQL 1.1, vì vậy bất kỳ cửa hàng ba nào hỗ trợ chuẩn hiện hành sẽ hỗ trợ đường dẫn đặc tính. –

3

Dựa trên SPARQL 1.1 specification cách thích hợp để làm điều đó sẽ là:

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

Không có hỗ trợ cho đường dẫn thuộc tính, không có cách nào hết hạn phân cấp lớp ssing có độ dài tùy ý.

Các vấn đề liên quan