luni, 12 ianuarie 2009

Completari despre SPARQL

RDF este un limbaj care defineste grafuri de cunostinte prin specificarea unor triplete de tipul Subiect Predicat Atribut, unde subiectul si atributul sunt noduri in graful de cunostinte, iar predicatul reprezinta relatia dintre ele. SPARQL se bazeaza pe crearea de sabloane ce vor fi cautate in interiorul acestui graf de cunostinte; el permite definirea de subgrafuri prin specificarea unei succesiuni de triplete si cauta sa potriveasca subgraful in graful de cunostinte.

Sintaxa SPARQL este foarte asemanatoare cu sintaxa SQL

Select ?variabila1 ?variabila2
Where
{
?variabila1 predicat prefix_alt_namespace:atribut .
?variabila1 predicat2 ?variabila2
}
Order by ?variabila1


Prefixele reprezinta spatiul de cautare pentru interogarea ce se doreste a fi facuta si se folosesc pentru a creste lizibilitatea cererii, prin eliminarea cailor lungi din partea de verificare a relatiilor.

PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
SELECT ?name
WHERE
{
:Albert_Einstein dbpedia2:name ?name .
}


Clauza SELECT precizeaza variabilele ce vor fi intoarse de cererea scrisa. Acestea incep intotdeauna cu ? si vor fi prezente in cadrul clauzei WHERE, unde se vor specifica conditiile ce trebuie sa le indeplineasca variabila pentru a fi acceptata de cerere.
Clauza WHERE poate sa contina unul sau mai multe triplete de forma SUBIECT PREDICAT ATRIBUT. În cadrul clauzei Where putem folosi operatorul FILTER pentru a specifica restrictii care s? se aplice asupra rezultatelor c?ut?rii. Restrictiile pot fi aritmetice, logice sau bazate pe expresii regulate asupra sirurilor de caractere.

Observatii:
- fiecare triplet din clauza where se termina cu <punct>
- fiecare triplet trebuie scris pe o linie separata

Ex. FILTER:
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpediaontology: <http://dbpedia.org/ontology/>
SELECT distinct ?person
WHERE
{
?person dbpedia2:name ?name .
?person dbpediaontology:award :Nobel_Prize_in_Physics .
FILTER regex(?name, "einstein", "i") .
}


Ex. tip de date:
PREFIX dbpediaontology: <http://dbpedia.org/ontology/>
SELECT distinct ?person
WHERE
{
?person dbpediaontology:award :Nobel_Prize_in_Physics .
?person dbpediaontology:birthdate ?birthdate .
FILTER (?birthdate>"1940-01-01"^^xsd:date) .
}



Pentru o mai usoara intelegere a principiilor voi prezenta si varianta mea de rezolvare a exercitiilor de la laborator:

1. Scrieti un query care să găsească jucătorii care au activat la echipa voastră favorită de fotbal.

PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX yago: <http://dbpedia.org/class/yago/>
SELECT ?name
WHERE
{
?person dbpedia2:playername ?name .
?person a yago:SteauaBucharestPlayers .
}



2. Scrieti un query care să găsească poetii/scriitorii români născuti după 1850.

PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX yago: <http://dbpedia.org/class/yago/>
PREFIX dbpediaontology: <http://dbpedia.org/ontology/>
SELECT ?name
WHERE
{
?person dbpedia2:name ?name .
?person a yago:RomanianPoets .
?person dbpediaontology:birthdate ?birthdate .
FILTER (?birthdate > "1850-01-01"^^xsd:date) .
}



3. Site-urile orașelor din România cu peste 100.000 de locuitori

PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX yago: <http://dbpedia.org/class/yago/>
SELECT ?name
WHERE
{
?person a yago:MunicipalitiesOfRomania .
?person dbpedia2:website ?name .
?person dbpedia2:populationTotal ?populatie .
FILTER (?populatie > "100000"^^xsd:integer) .
}



4. site-urile ziarelor din România.

PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX yago: <http://dbpedia.org/class/yago/>
SELECT ?site
WHERE
{
?ziar a yago:NewspapersPublishedInRomania .
?ziar dbpedia2:website ?site .
}

vineri, 9 ianuarie 2009

RDF, OWL, SPARQL

"Alte litere si grupuri de litere care denumesc tot felul de tehnologii."

Probabil asta esti tentat sa spui la prima vedere. Cel putin cam asta e reactia mea cand mai aflu cate un acronim. Dar luate la puricat, nu sunt cine stie ce chestii complicate. Doar niste instrumente usor de folosit si care isi dovedesc repede utilitatea.

Sa incepem cu inceputul:

Ontologii

O ontologie este o descriere formala a unor concepte si a relatiilor dintre acestea. Este o specificatie a unui domeniu, o modalitate formala de reprezentare a cunostintelor (exista si o modalitate informala numita folksonomie). O ontologie este o parte importanta a web-ului semantic. Ideea web-ului semantic este sa contina date, nu documente. Web-ul trebuie sa fie o baza de cunostinte ce pot fi intelese si prelucrate atat de oameni, cat si de calculatoare. Ontologiile ajuta la crearea acestor baze de cunostinte prin structurarea informatiei intr-o forma comuna ambelor parti.

Si astfel ajungem la primele grupuri de litere:)

RDF, OWL

Spuneam ca baza de cunostinte trebuie inteleasa atat de oameni, cat si de calculatoare. Evident, cel mai potrivit limbaj pentru acest scop este unul bazat pe XML. De aceea, pentru a putea fi folosite de web-ul semantic, ontologiile trebuie sa fie create folosind limbaje bazate pe XML. Doua dintre aceste limbaje sunt RDF (Resource Description Framework) si OWL (Web Ontology Language).

Initial, RDF a fost creat ca un model de reprezentare a metadatelor, dar acum este folosit ca o metoda generala de modelare conceptuala a informatiilor din resursele web. Ideea este de a face afirmatii despre resursele web in forma unor expresii subiect-predicat-obiect(atribut) (expresii numite tripleti). Subiectul denota resursa si este identificat printr-un URI (Uniform Resource Locator); predicatul este de asemenea o resursa identificata printr-un URI si face legatura intre subiect si obiect; obiectul (atributul) poate fi o resursa sau o valoare. O colectie de asemenea afirmatii formeaza un graf; se obtine astel un graf de cunostinte in care subiectul si obiectul sunt noduri, iar predicatul este muchia dintre aceste noduri. Prin aceasta reprezentare, RDF este mai potrivit decat modelele relationale pentru reprezentarea cunostintelor.

OWL este un limbaj conceput special pentru a defini ontologii. El extinde practic RDF prin posibilitatea de a folosi instrumente de inferenta pe datele din ontologie.

SPARQL

Limbajele mai sus mentionate descriu concepte si relatii, creand o baza de cunostinte usor de utilizat de oameni si calculatoare. Pentru a folosi aceasta baza de cunostinte s-au creat alte limbaje pentru a extrage informatiile dorite. Astfel, pentru RDF s-a creat SPARQL, un limbaj de interogare cu o sintaxa asemanatoare sintaxei SQL.

O interogare tipică în SPARQL are următoarea structură:

PREFIX : URI_NAMESPACE_Default
PREFIX prefix_alt_namespace: URI_alt_namespace
Select ?variabila1 ?variabila2
Where
{
?variabila1 predicat prefix_alt_namespace:atribut .
?variabila1 predicat2 ?variabila2
}
Order by ?variabila1

Prefixurile sunt folosite pentru a desemna spatiile de nume ce vor fi folosite la interogarea propriu-zisa. Exista un spatiu de nume default (URI_NAMESPACE_Default) si alte spatii de nume (URI_alt_namespace) care primesc un alias (prefix_alt_namespace) ce va fi folosit in interogari.

Select precizeaza ce variabile va intoarce interogarea. In interiorul interogarii pot fi folosite mai multe variabile ajutatoare, dar cele intoarse sunt doar cele precizate in clauza select. Toate variabilele incep cu semnul ? sau $.

Clauza where contine unul sau mai multe triplete subiect-predicat-atribut care vor construi efectiv sablonul ce va fi cautat in baza de cunostinte. Cum am mai spus, subiectul si predicatul sunt identificate prin URI-uri. Daca un URI face parte din spatiul de nume default, atunci subiectul, respectiv predicatul apar ca atare in interogare. Altfel, ele sunt precedate de alias-ul spatiului de nume din care face parte resursa: alias:subiect sau alias:predicat. Atributul poate fi de asemenea o resursa, caz in care apare cu sau fara alias, la fel ca subiectul si predicatul, sau poate fi o valoare efectiva, caz in care trebuie precizat tipul si eventual limba.

In clauza where informatiile pot fi filtrate folosind operatorul FILTER care specifica restrictii aritmetice, logice sau bazate pe expresii regulate asupra sirurilor de caractere.

Sintaxa completa a SPARQL se gaseste aici.

O baza de cunostinte structurata ce poate fi folosita pentru interogari SPARQL se gaseste aici. Pe acelasi site se gaseste o interfata web pentru testarea interogarilor SPARQL.