Làm việc với RDFLiteral

Một phần của tài liệu nghiên cứu semantic web, ứng dụng xây dựng cơ sở dữ liệu luật việt nam (Trang 35 - 42)

RDF Literal trong câu truy vấn SPARQL là một chuỗi, cĩ thể cĩ thẻ ngơn ngữ hoặc kiểu dữ liệu. Cĩ vài dạng tiện ích cho kiểu dữ liệu dạng số học là xsd:integer, xsd:decimal, xsd:double và xsd:boolean.

Ví dụ một vài dạng literal trong cú pháp của SPARQL:

• "chat"

• "Việt Nam"@vicĩ thẻ ngơn ngữ “vi”

• "xyz"^^<http://example.org/ns/userDatatype>

• "abc"^^appNS:appDataType

• 1, tương đương với"1"^^xsd:integer

• 1.3, tương đương với"1.3"^^xsd:decimal

• 1.0e6, tương đương với"1.0e6"^^xsd:double

• true, tương đương với"true"^^xsd:boolean

HU

TE

CH

Dữ liệu dưới đây chứa một số các RDF literal theo định dạng N3, sử dụng định dạng N3 ngắn gọn hơn và dễ đọc hơn so với định dạng RDF/XML.

@prefix dt: <http://example.org/datatype#> . @prefix ns: <http://example.org/ns#> . @prefix : <http://example.org/ns#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :x ns:p "42"^^xsd:integer . :y ns:p "abc"^^dt:specialDatatype . :z ns:p "cat"@en .

Dữ liệu này được dùng cho các ví dụ đưới.

Đối sánh số nguyên

Câu truy vấn lấy các chủ thể tham gia triple cĩ thành phần thứ ba là số 42

SELECT ?v WHERE { ?v ?p 42 }

Các kết quả trả về của truy vấn gọi là các giải pháp (solution). Kết quả cĩ một giải pháp :x bởi vì 42 là tương ứng với

"42"^^<http://www.w3.org/2001/XMLSchema#integer>.

Tương tự ta cĩ thể viết một cách tường minh chỉ rõ kiểu dữ liệu. Câu truy vấn dưới đây cĩ một giải pháp của biến v là :y. Trình xử lý truy vấn chỉ kiểm tra bằng nhau giữa giá trị và biến.

SELECT ?v WHERE { ?v ?p "abc"^^<http://example.org/datatype#specialDatatype> }

Đối sánh thẻ ngơn ngữ

Câu truy vấn cĩ dùng thẻ ngơn ngữ sẽ tìm thấy một giải pháp của biến x là :z :

SELECT ?x WHERE { ?x ?p "cat"@en }

Tuy nhiên, nếu bỏ thẻ ngơn ngữ trong câu truy vấn sẽ khơng tìm thấy một giải pháp nào vì literal bằng nhau khi cĩ cùng ngơn ngữ.

HU

TE

CH

Các mẫu triple trong nhĩm Optional sẽ khơng nhất thiết phải đối sánh. Nhĩm Optional bắt đầu bằng từ khĩa OPTIONAL:

pattern OPTIONAL { pattern }

Ví dụ cho dữ liệu:

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . _:a rdf:type foaf:Person .

_:a foaf:name "Alice" .

_:a foaf:mbox <mailto:alice@example.com> . _:a foaf:mbox <mailto:alice@work.example> . _:b rdf:type foaf:Person .

_:b foaf:name "Bob" .

PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?mbox

WHERE { ?x foaf:name ?name .

OPTIONAL { ?x foaf:mbox ?mbox } }

Với dữ liệu như trên thì kết quả truy vấn như sau:

name mbox

"Alice" <mailto:alice@example.com> "Alice" <mailto:alice@work.example> "Bob"

Trong giải pháp cuối biến name cĩ giá trị “Bob”, biến mbox khơng cĩ dữ liệu, vì trong dữ liệu khơng cĩ phát biểu mbox nào gán với chủ thể “Bob”.

Truy vấn này tìm tên của những người trong dữ liệu. Nếu cĩ một triple của thuộc tính mbox và cĩ cùng chủ thể thì sẽ cĩ 2 giải pháp cho mỗi phát biểu nên kết quả truy vấn cĩ 2 giải pháp cĩ biến name cùng giá trị “Alice”.

RDF Dataset

A truy vấn SPARQL tìm kiếm trong RDF Dataset . RDF Dataset là tập hợp các đồ thị. Khi truy vấn một tập hợp các đồ thị, từ khĩa GRAPH được dùng để đối sánh các mẫu

HU

TE

CH

trong các đồ thị được đặt tên. Việc chọn đồ thị cĩ thể thơng qua IRI hoặc dùng một biến.

Ví dụ cho hai đồ thị, ký tự (#) đứng đầu dịng cho biết dịng đĩ là dịng chú thích:

# http://example.org/foaf/aliceFoaf

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . _:a foaf:name "Alice" .

_:a foaf:mbox <mailto:alice@work.example> . _:a foaf:knows _:b . _:b foaf:name "Bob" . _:b foaf:mbox <mailto:bob@work.example> . _:b foaf:nick "Bobby" . _:b rdfs:seeAlso <http://example.org/foaf/bobFoaf> . <http://example.org/foaf/bobFoaf> rdf:type foaf:PersonalProfileDocument . # http://example.org/foaf/bobFoaf

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . _:z foaf:mbox <mailto:bob@work.example> . _:z rdfs:seeAlso <http://example.org/foaf/bobFoaf> . _:z foaf:nick "Robert" . <http://example.org/foaf/bobFoaf> rdf:type foaf:PersonalProfileDocument .

Giới hạn phạm vi của biến

Một biến được dùng trong mệnh đề GRAPH cũng cĩ thể được dùng trong mệnh đề GRAPH khác hoặc trong đồ thị mặc định trong dataset.

Giả sử câu truy vấn là tìm email, biệt danh, tên đồ thị mơ tả lý lịch của người đĩ mà chủ nhân của email alice@work.example quen biết.

HU

TE

CH

Truy vấn bên dưới dùng đồ thị cĩ IRI là http://example.org/foaf/aliceFoaf đề tìm kiếm lý lịch của Bob. Mẫu trong mệnh đề GRAPH thứ hai tìm nút rỗng (biến w) của người cĩ tên trong hộp thư (biến mbox) mã đã tìm ở trong mệnh đề GRAPH đầu tiên (biến whom).

PREFIX data: <http://example.org/foaf/> PREFIX foaf: <http://xmlns.com/foaf/0.1/>

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?mbox ?nick ?ppd

WHERE {

GRAPH data:aliceFoaf {

?alice foaf:mbox <mailto:alice@work.example> ; foaf:knows ?whom .

?whom foaf:mbox ?mbox ; rdfs:seeAlso ?ppd . ?ppd a foaf:PersonalProfileDocument . } . GRAPH ?ppd { ?w foaf:mbox ?mbox ; foaf:nick ?nick } } Kết quả truy vấn mbox Nick Ppd

<mailto:bob@work.example> "Robert" <http://example.org/foaf/bobFoaf>

Kết hợp FROM và FROM NAMED

Mệnh đề FROM và FROM NAMED cĩ thể dùng trong cùng một câu truy vấn. FROM

NAMED dùng để chỉ định phạm vi là các đồ thị.

# Đồ thị mặc định (lưu ở http://example.org/dft.ttl) @prefix dc: <http://purl.org/dc/elements/1.1/> .

<http://example.org/bob> dc:publisher "Bob Hacker" . <http://example.org/alice> dc:publisher "Alice Hacker" . # Đồ thị cĩ tên: http://example.org/bob

HU

TE

CH

_:a foaf:name "Bob" .

_:a foaf:mbox <mailto:bob@oldcorp.example.org> . # Đồ thị cĩ tên: http://example.org/alice

@prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name "Alice" .

_:a foaf:mbox <mailto:alice@work.example.org> .

PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?who ?g ?mbox

FROM <http://example.org/dft.ttl> FROM NAMED <http://example.org/alice> FROM NAMED <http://example.org/bob> WHERE

{

?g dc:publisher ?who .

GRAPH ?g { ?x foaf:mbox ?mbox } }

Who G mbox

"Bob Hacker" <http://example.org/bob> <mailto:bob@oldcorp.example.org> "Alice Hacker" <http://example.org/alice> <mailto:alice@work.example.org>

Câu truy vấn này tìm mbox cùng với những thơng tin trong đồ thị mặc định.

<http://example.org/dft.ttl>.

DISTINCT

Từ khĩa DISTINCT bảo đảm mọi tổ hợp biến trong các giải pháp là duy nhất.

@prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name "Alice" .

_:a foaf:mbox <mailto:alice@org> . _:z foaf:name "Alice" .

_:z foaf:mbox <mailto:smith@work> . PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT DISTINCT ?name WHERE { ?x foaf:name ?name } Name

"Alice"

ORDER BY

Mệnh đề ORDER BY để sắp xếp các giải pháp theo điều kiện. Điều kiện sắp xếp cĩ thể là một biến hoặc một lời gọi hàm. Thứ tự tăng là mặc định. Cĩ thể đặt lệnh sắp xếp

HU

TE

CH

tường minh hơn bằng cách đặt các điều kiện vào trong hàm ASC() hoặc DESC(). Nếu cĩ nhiều điều kiện thì sẽ sắp xếp lần lượt theo các điều kiện.

PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name

WHERE { ?x foaf:name ?name } ORDER BY ?name

PREFIX : <http://example.org/ns#> PREFIX foaf: http://xmlns.com/foaf/0.1/

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT ?name

WHERE { ?x foaf:name ?name ; :empId ?emp } ORDER BY DESC(?emp)

PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name

WHERE { ?x foaf:name ?name ; :empId ?emp } ORDER BY ?name DESC(?emp)

Nếu các biến tham gia làm điều kiện sắp xếp mà khơng cĩ trong mệnh đề SELECT sẽ bị bỏ qua.

LIMIT

LIMIT dùng để giới hạn số lượng giải pháp trả về. Nếu số lượng giải pháp lớn hơn con

số giới hạn thì số lượng giải pháp được giới hạn sẽ trả về.

PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name

WHERE { ?x foaf:name ?name } LIMIT 20

OFFSET

OFFSET sẽ lấy các đoạn giải pháp từ vị trí chỉ định bắt đầu.

Để lấy các tập con trong các kết quả trả về thì dùng LIMIT và OFFSET để chọn các tập con khác nhau.

PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name

HU

TE

CH

WHERE { ?x foaf:name ?name } ORDER BY ?name

LIMIT 5 OFFSET 10

Câu hỏi đúng hoặc sai

Các ứng dụng cĩ thể dùng dạng ASK để kiểm tra một truy vấn cĩ giải pháp hay khơng. Thơng tin trả về chỉ là true hoặc false.

@prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name "Alice" .

_:a foaf:homepage <http://work.example.org/alice/> . _:b foaf:name "Bob" .

_:b foaf:mbox <mailto:bob@work.example> . PREFIX foaf: <http://xmlns.com/foaf/0.1/> ASK { ?x foaf:name "Alice" }

Kết quả lả yes

FILTER

Filter dùng để ràng buộc giá trị

PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX app: <http://example.org/ns#>

SELECT * WHERE { GRAPH ?g { ?s ?p ?o } . { ?g dc:publisher <http://www.w3.org/> } . { ?g dc:date ?date } .

FILTER ( app:customDate(?date) > "2005-02-28T00:00:00Z"^^xsd:dateTime ) . }

Câu truy vấn trên cĩ ràng buộc ngày với app:customDate là định danh của hàm ngồi trả về định dạng dữ liệu kiểu xsd:dateTime.

Một phần của tài liệu nghiên cứu semantic web, ứng dụng xây dựng cơ sở dữ liệu luật việt nam (Trang 35 - 42)

Tải bản đầy đủ (PDF)

(93 trang)