miercuri, 14 ianuarie 2009

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 .
}