2011-03-19 36 views
7

Tôi hiện đang tìm cách truy vấn DBPedia's Infobox Onyology database qua điểm cuối SPARQL để lấy danh sách các lớp, lớp con của lớp đã chọn và thuộc tính của một lớp nhất định. Theo như tôi đã có thể tìm thấy, bạn cần phải biết tài sản mà bạn đang tìm kiếm hoặc tìm kiếm một cái gì đó cụ thể - tất cả các ví dụ tôi đã tìm thấy dường như được dựa trên ý tưởng rằng bạn sẽ muốn tìm kiếm một cái gì đó cụ thể (giống như dân số của các thành phố trên một độ cao nhất định, vv), trong khi tôi muốn xây dựng một cái gì đó mà tôi có thể có hiệu quả "duyệt" các loại. Ví dụ: bắt đầu với danh sách các lớp con của "owl: Thing" trên this class hierarchy chart và hiển thị cho người dùng danh sách các lớp con của một lớp con đã chọn. Có vẻ như có thể duyệt một cái gì đó như thế này thông qua wiki ánh xạ, nhưng nó sẽ là thích hợp hơn để truy vấn điểm cuối SPARQL trực tiếp.Tìm loại DBPedia Infobox

Có một số truy vấn SPARQL đơn giản sẽ trả về các lớp và thuộc tính có sẵn của các lớp đó không?

Cập nhật: Tôi đã tìm ra một cách để có được hệ thống phân cấp lớp có vẻ như, bằng cách duyệt qua this query:

SELECT ?subject WHERE { 
    ?subject rdfs:subClassOf owl:Thing 
} 

nào trả về một danh sách các lớp con của cú: Thing, và nếu tôi thay thế owl: Thing với một trong các lớp con, tôi nhận danh sách các lớp con, cho đến khi không có lớp con, tại thời điểm đó tôi có thể chọn tất cả các tài nguyên có kiểu được chọn bởi lớp con đã chọn. Tôi vẫn không hoàn toàn chắc chắn làm thế nào để có được tất cả các thuộc tính chung cho lớp con, mặc dù.

Cập nhật 2 Bắt gần hơn ngay bây giờ. Truy vấn này cho tôi tất cả các thuộc tính (con của dbpedia: property) cũng là một quốc gia, cũng như tiêu đề của chúng:

SELECT DISTINCT ?prop ?title WHERE { 
    ?country ?prop ?value. 
    ?country a <http://dbpedia.org/ontology/Country>. 
    ?prop rdf:type rdf:Property. 
    ?prop rdfs:label ?title 
} 

Thực ra tất cả những gì tôi thực sự yêu cầu. Điều cuối cùng tôi đang cố gắng làm bây giờ là cố gắng sắp xếp chúng theo số trang mà chúng xuất hiện (có lẽ các thuộc tính phổ biến nhất sẽ là những thuộc tính quan tâm nhất).

Trả lời

7

OK, vì vậy tôi đã thực sự tìm ra nhiều hơn hoặc ít hơn chính xác làm thế nào để làm điều này, vì vậy tôi gửi này như là một câu trả lời chứ không phải chỉ là một chỉnh sửa.Có gì dường như để cho tôi chính xác những gì tôi đang tìm là bắt đầu bằng cách duyệt qua các lớp hệ thống cấp bậc sử dụng this query:

SELECT ?class ?label WHERE { 
    ?class rdfs:subClassOf owl:Thing. 
    ?class rdfs:label ?label. 
    FILTER(lang(?label) = "en") 
} 

ăn kết quả được lựa chọn vào truy vấn vào vị trí của con cú: Thing mỗi lần.

Khi người dùng chọn lớp cấp thấp nhất mà họ muốn, để hiển thị một danh sách các tài sản, thứ tự giảm dần bởi số lượng các mục trong đó chúng xuất hiện, tôi sử dụng this query:

SELECT ?prop ?title WHERE { 
    ?country ?prop []. 
    ?country a <http://dbpedia.org/ontology/Country>. 
    ?prop rdf:type rdf:Property. 
    ?prop rdfs:label ?title 
} ORDER BY DESC(COUNT(DISTINCT ?country)) 

Tất nhiên, nếu bạn thực sự nhìn vào những kết quả đó, có một số tính năng sôi nổi ở đó không có nhãn rất mô tả ("s"? Cái gì?), Nhưng đây là ít nhất những gì tôi đang tìm kiếm ở nơi đầu tiên.

2

Điều này sẽ giúp bạn có được tất cả các thuộc tính mà rdfs:domainSpaceMission s:

select ?property where { 
    ?property rdfs:domain <http://dbpedia.org/ontology/SpaceMission> 
} 

Các tính chất này tất cả chấp nhận SpaceMission như đề tài này.

Lưu ý rằng trong RDF (S), không bắt buộc phải có tuyên bố rõ ràng rdfs:domain cho mỗi thuộc tính, bởi vì rdfs:domain có thể được ngụ ý bằng cách sử dụng thuộc tính. Do đó, bạn có thể thấy rằng truy vấn này sẽ cung cấp cho bạn danh sách tất cả các thuộc tính đã được xác định với miền là SpaceMission nhưng sẽ không cung cấp cho bạn danh sách tất cả các thuộc tính thực sự được sử dụng với tất cả các trường hợp SpaceMission .

+0

Đối với bất cứ lý do đó dường như không làm việc khi bạn lựa chọn nước thay vì SpaceMission. Tất cả nó trả về là "twinCountry". Ngoài ra, nó chỉ có vẻ trả lại những thứ trong dbpedia: ontology, không phải dbpedia: property. Tôi đã cập nhật bài đăng chính với những gì dường như là câu trả lời cho câu hỏi ban đầu của tôi. – Paul

3

(1) Query cho tất cả các lớp học hiện có:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT DISTINCT ?class 
WHERE { 
    ?s rdf:type ?class . 
} 

(2) Query cho tất cả các thuộc tính được sử dụng trong bất kỳ trường hợp của lớp C:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT DISTINCT ?property 
WHERE { 
    ?s rdf:type <C> . 
    ?s ?property ?o 
} 
1

Nó khá có thể là một số tính chất không thực sự định nghĩa như vậy với:

?p a rdf:Property .

nhưng bất kỳ điều khoản ở vị trí giữa là theo định nghĩa một tài sản. Vì vậy, bạn có thể nhận được nhiều kết quả hơn với:

 
SELECT ?prop ?title WHERE { 
    ?country a <http://dbpedia.org/ontology/Country>. 
    ?country ?prop [] . 
    ?prop rdfs:label ?title . 
} 
ORDER BY DESC(COUNT(DISTINCT ?country)) 

(sắp xếp lại một chút, là có chọn lọc vào lúc bắt đầu có thể cải thiện hiệu suất)

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