RDF SORGULAMA (SPARQL)

  1. SPARQL Nedir?

RDF, bilgisayarların web ’deki verileri anlayabilmeleri ve işleyebilmeleri ve verileri farklı web içeriklerine entegre edebilmeleri için meta data tanımlamaları ile ilgili standartlar getirmektedir. İşte bu anlamda, RDF, tasarım sürecini kolaylaştırmak için standart bir veri sorgulama diline gereksinim duymaktadır. SPARQL RDF verileri için kullanılan bir sorgulama dilidir. [15]

Mesela, bir statement örneği ve onun RDF triple şeklinde yazılışı ve RDF graph olarak gösterilişi şu şekildedir:

David Billington is the owner of the Web page

http://www.cit.gu.edu.au/∼db.

Bu statament için kullanılan RDF triple şu şekildedir:

(http://www.cit.gu.edu.au/~db, http://www.mydomain.org/site-owner, #DavidBillington).

RDF triple graph görünümü RDF triple’larını içeren bir kaynağa RDF graph denir.

Örnek 1: G isminde bir graph ele alalım. G aşağıdaki triple’ları içermektedir:

john knows karen

karen knows alex

karen name “Karen”

alex name “Alex”

SPARQL’de sorgulama yapılırken triple pattern’ler kullanılır. Triple pattern bir RDF riple’nın bir değişken içeren şeklidir. Değişkenler genellikle?Öntakısıyla gösterilir. Triple pattern’in ne olduğunu aşağıdaki örnekle daha iyi anlayalım:

john knows ?y

Triple pattern bir RDF triple ile eşlesirse, her variable için bir binding üretir. Mesela bu örnekteki binding

?y: karen.

Mesela diğer bir triple pattern

?x knows ?y

bir binding tablosu döndürür. Tablodaki herbir satır SPARQL sorgusunun sonucudur.

 xy
1johnkaren
2karenAlex

Graph pattern: birden fazla triple pattern’nin beraberce yazılış şeklidir. Graph pattern’ler süslü parantezlerle{,} belirtilirler.

{

 ?x foaf:knows ?y .

?y foaf:name ?name .

}

foaf vocabulary: insanlarla ilgili bilgileri içeren önceden tanımlanmıi bir dataset’dir.

  1. SELECT-FROM-WHERE Sorgusu

SQL’de olduğu gibi SPARQL’de de SELECT-FROM-WHERE yapısı kullanılmaktadır.

SELECT istenilen data’nın sayısını ve sırasını belirlerlemek için kullanılır.

FROM ise sorgulanan kaynağı belirtir. Kullanılması zorunlu değildir, seçimi kullanıcıya kalmıştır.

WHERE ise olası sonuçları isteğimize göre kısıtlamak için kullanılır.

Örnek 2: Tim Berners-Lee’nin foaf dosyasını kullanarak

http://dig.csail.mit.edu/2008/webdav/timbl/foaf.rdf’deki, dosyadaki bütün isimleri döndürünüz.

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name

WHERE

{

?person foaf:name ?name .

}

Bu örnekte yandaki şekilde de görülebileceği gibi toplam 52 isim dönmektedir.

Örnek 3: Tim Berners-Lee’s FOAF dosyasında isim ve email addres bilgileri bulunan kişilerin URI, name, and email addreslerini bulunuz.

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT *

WHERE

{

?person foaf:name ?name .

?person foaf:mbox ?email .

}

Örnek 5: by Tim Berners-Lee’yi tanıyanların homepage’inibulunuz.

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

PREFIX card: <http://www.w3.org/People/Berners-Lee/card#>

SELECT ?homepage

FROM <http://dig.csail.mit.edu/2008/webdav/timbl/foaf.rdf>

WHERE

 {

card:i foaf:knows ?known .

?known foaf:homepage ?homepage .

}

?known’u bir triple’ın objecti diğerinin de subject’i olarak kullanarak sonucu bulabiliriz.

Optional:

Örnek 6:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name ?mbox ?hpage

WHERE

{

?x foaf:name ?name

OPTIONAL

{

?x foaf:mbox ?mbox

}.

OPTIONAL

{

?x foaf:homepage ?hpage

}.

}

  1. Solution Modifiers of SPARQL:

LIMIT: bir sorgudan dönen satır sayısını sınırlar.

Örnek7:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name

WHERE

{

?person foaf:name ?name .

} LIMIT 10

  1. ORDER BY:

Sorgu sonuçlarını bir veya birden fazla değişkene göre sıralar.

Örnek8:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name

WHERE

{

?person foaf:name ?name .

} ORDER BY ?name

  1. DISTINCT: Dönen sonuçların içinden aynı olanları eler.

Örnek 9.

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT DISTINCT ?name

WHERE

{

?x foaf:name ?name

}

FILTER: İstenilmeyen sonuçları elemek için kullanılır.

Örnek 10: name’i K ile başlayan kişileri bulunuz.

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name WHERE

{

?x foaf:knows ?y .

?y foaf:name ?name .

FILTER regex(?name, ‘^K.*’)

}

DIGER SPARQL SORGULARI: CONSTRUCT, DESCRIBE ve ASK

  1. CONSTRUCT Sorgusu: Sorgulanan bilgiden bir alt küme çıkarır. Dönen değer bir RDF graph’dır.

Örnek 11:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

CONSTRUCT

{

?friend a foaf:Person;

foaf:name ?name;

foaf:homepage ?home.

}

WHERE

{

?person foaf:mbox <mailto:leigh@ldodds.com>;

foaf:knows ?friend.

?friend foaf:name ?name;

foaf:homepahe ?home.

}

  1. DESCRIBE Sorgusu:

Örnek 12:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

DESCRIBE ?x

WHERE

{

?x foaf:mbox <mailto:leigg@ldodds.com>

}

ASK Sorgusu: İstenilen değerin varolup olmadığını sorgular.True yada false değei döndürür.

Örnek 13:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

ASK {?x foaf:name “Alice”}