2010-05-28 67 views
41

bất cứ khi nào tôi bắt đầu sử dụng sql tôi có xu hướng ném một vài phát biểu thăm dò tại cơ sở dữ liệu để hiểu những gì là có sẵn, và những gì hình thức dữ liệu có.truy vấn SPARQL thăm dò?

ví dụ:

show tables 

describe table 

select * from table 

ai cũng có thể giúp tôi hiểu cách khám phá một kho dữ liệu rdf tương tự bằng điểm cuối SPARQL không?

Cảm ơn :)

Trả lời

69

Vâng, bắt đầu đầu tiên rõ ràng là xem xét các lớp và thuộc tính có trong dữ liệu.

Sau đây là cách để xem những gì các lớp học đang được sử dụng:.

SELECT DISTINCT ?class 
WHERE { 
    ?s a ?class . 
} 
LIMIT 25 
OFFSET 0 

(LIMITOFFSET đang có cho phân trang Điều đáng làm quen với những đặc biệt là nếu bạn đang gửi truy vấn của bạn qua Internet tôi. sẽ bỏ qua chúng trong các ví dụ khác)

a là một SPARQL đặc biệt (và Notation3/Turtle) cú pháp để đại diện cho rdf:type ngữ -. này liên kết các trường hợp cá nhân để owl:Class/rdfs:Class loại s (tương đương với các bảng trong SQL RDBMSes).

Thứ hai, bạn muốn xem các thuộc tính. Bạn có thể làm điều này bằng cách sử dụng các lớp bạn đã tìm kiếm hoặc chỉ tìm kiếm các thuộc tính. Hãy chỉ nhận được tất cả các tài sản ra khỏi cửa hàng:

SELECT DISTINCT ?property 
WHERE { 
    ?s ?property ?o . 
} 

này sẽ nhận được tất cả các thuộc tính, mà có thể bạn không quan tâm đến này tương đương với một danh sách tất cả các cột dòng trong SQL, nhưng không có. bất kỳ nhóm nào theo bảng.

hữu ích hơn là để xem những gì thuộc tính đang được sử dụng bởi các trường hợp đó khai báo một lớp học đặc biệt:

SELECT DISTINCT ?property 
WHERE { 
    ?s a <http://xmlns.com/foaf/0.1/Person>; 
    ?property ?o . 
} 

này sẽ giúp bạn trở lại các thuộc tính được sử dụng trên bất kỳ trường hợp đáp ứng các triple đầu tiên - cụ thể là, có số rdf:type của http://xmlns.com/foaf/0.1/Person. Hãy nhớ rằng, bởi vì một rdf: Tài nguyên có thể có nhiều thuộc tính loại rdf: type - nếu bạn muốn - và bởi vì mô hình dữ liệu của RDF là phụ gia, bạn không có vấn đề về kim cương. Loại này chỉ là một tài sản khác - đó chỉ là một thỏa thuận xã hội hữu ích để nói rằng một số thứ là con người hoặc chó hoặc gen hoặc đội bóng đá. Nó không có nghĩa là kho dữ liệu sẽ chứa các thuộc tính thường được liên kết với kiểu đó. Loại không đảm bảo bất kỳ điều gì về các thuộc tính mà tài nguyên có thể có.

Bạn cần tự làm quen với mô hình dữ liệu và sử dụng cú pháp UNION và OPTIONAL của SPARQL. Lập bản đồ thô của rdf: gõ vào các bảng SQL chỉ là - thô.

Bạn có thể muốn biết loại thực thể mà thuộc tính trỏ đến. Thứ nhất, bạn có thể muốn biết về các thuộc tính datatype - tương đương với các literals hoặc primitives. Bạn biết đấy, chuỗi, số nguyên, v.v. RDF định nghĩa các chữ này như tất cả các thừa kế từ chuỗi.Chúng ta có thể lọc ra chỉ là những tính năng mà literals sử dụng phương pháp lọc SPARQL isLiteral:

SELECT DISTINCT ?property 
WHERE { 
    ?s a <http://xmlns.com/foaf/0.1/Person>; 
    ?property ?o . 
    FILTER isLiteral(?o) 
} 

Chúng tôi đang ở đây chỉ xảy ra để có được tài sản mà có khi đối tượng của họ một chữ - một chuỗi, ngày thời gian, boolean, hoặc một trong các kiểu dữ liệu XSD khác.

Nhưng còn đối tượng không theo nghĩa đen thì sao? Xem xét rất đơn giản định nghĩa lớp pseudo-Java này như là một loại suy:

public class Person { 
    int age; 
    Person marriedTo; 
} 

Sử dụng các truy vấn trên, chúng tôi sẽ lấy lại đen đó sẽ đại diện cho tuổi nếu tài sản tuổi đang bị ràng buộc. Nhưng marryTo không phải là nguyên thủy (tức là một nghĩa đen trong các thuật ngữ RDF) - nó là một tham chiếu đến một đối tượng khác - trong thuật ngữ RDF/OWL, đó là một thuộc tính đối tượng. Nhưng chúng ta không biết những loại đối tượng nào đang được giới thiệu bởi những thuộc tính đó (các biến vị ngữ). Truy vấn này sẽ giúp bạn lấy lại các thuộc tính với các kiểu đi kèm.

SELECT DISTINCT ?property, ?class 
WHERE { 
    ?s a <http://xmlns.com/foaf/0.1/Person>; 
    ?property ?o . 
    ? a ?class . 
    FILTER(!isLiteral(?o)) 
} 

Điều đó là đủ để định hướng bản thân bạn trong một tập dữ liệu cụ thể. Tất nhiên, tôi cũng khuyên bạn nên rút ra một số tài nguyên cá nhân và kiểm tra chúng. Bạn có thể làm điều đó bằng cách sử dụng truy vấn MÔ TẢ:

DESCRIBE <http://example.org/resource> 

Có một số công cụ SPARQL - SNORQL, ví dụ - cho phép bạn làm điều này trong một trình duyệt. Ví dụ SNORQL mà tôi đã liên kết có một truy vấn mẫu để khám phá các biểu đồ có thể có tên, mà tôi chưa đề cập ở đây.

Nếu bạn không quen thuộc với SPARQL, trung thực, tài nguyên tốt nhất nếu bạn gặp khó khăn là đặc điểm kỹ thuật. Đó là một thông số W3C nhưng khá tốt (họ đã xây dựng một bộ kiểm tra phong nha để bạn có thể thực sự xem việc triển khai có thực hiện đúng hay không) và nếu bạn có thể vượt qua ngôn ngữ phức tạp, nó sẽ rất hữu ích.

+0

phẳng ra câu trả lời tuyệt vời - nhờ rất nhiều Tom! – significance

+0

Tôi biết tôi không phải đăng đơn giản "Cảm ơn!"tin nhắn trên SO, nhưng bạn đã chỉ cần nghiêm túc giúp đỡ một SPARQL noob, vì vậy:" Cảm ơn! ". –

1

Tôi thường đề cập đến điều này list of queries from the voiD project. Chúng chủ yếu là bản chất thống kê, nhưng không chỉ. Sẽ không khó để xóa COUNT từ một số câu lệnh để nhận giá trị thực.

6

tôi thấy các thiết lập sau đây của các truy vấn thăm dò hữu ích:

Thấy các lớp:

select distinct ?type ?label 
where { 
    ?s a ?type . 
    OPTIONAL { ?type rdfs:label ?label } 
} 

Thấy các thuộc tính:

select distinct ?objprop ?label 
where { 
    ?objprop a owl:ObjectProperty . 
    OPTIONAL { ?objprop rdfs:label ?label } 
} 

Thấy các thuộc tính dữ liệu:

select distinct ?dataprop ?label 
where { 
    ?dataprop a owl:DatatypeProperty . 
    OPTIONAL { ?dataprop rdfs:label ?label } 
} 

Thấy mà tính đang thực sự được sử dụng:

select distinct ?p ?label 
where { 
    ?s ?p ?o . 
    OPTIONAL { ?p rdfs:label ?label } 
} 

Thấy gì thực thể được khẳng định:

select distinct ?entity ?elabel ?type ?tlabel 
where { 
    ?entity a ?type . 
    OPTIONAL { ?entity rdfs:label ?elabel } . 
    OPTIONAL { ?type rdfs:label ?tlabel } 
} 

Thấy các đồ thị khác biệt trong sử dụng:

select distinct ?g where { 
    graph ?g { 
     ?s ?p ?o 
    } 
} 
Các vấn đề liên quan