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

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.

luni, 5 ianuarie 2009

Ajax, mini introducere

Ajax

Ajax este un nume interesant pentru un tip de programare facut popular de catre cei de la Google in 2005 si alti dezvoltatori web. Ajax este un acronim pentru Asynchronous Javascript And XML.

De asemenea ne putem gandi la Ajax ca la o versiune s Javascriptului dopata:P

Ajax - Javascript imbunatatit

Cand a fost introdus javascriptul, oamenilor le-au placut toate chestiile cool pe care le puteau face cu browserele web pentru a imbunatati experienta utilizatorilor si ai face sa interactioneze mai bine si mai usor cu paginile vizitate. Puteau valida forumurile, face popup messages mai interesante, sa face utilitare web cool si multe altele. Insa, Javascript nu oferea nici o posibilitate de a transmite informatii intre browserele web si server-ul web.

Daca cineva vroia sa transfere informatii de la o baza de date de pe un server sau sa trimita informatii de la utilizator catre un script de pe server precum PHP, trebuia sa faci mai intai un form HTML pentru a trimite prin POST sau Get date catre server. Utilizatorul trebuia apoi sa faca click pe “Submit”, sa astepte ca serverul sa raspunda si de abia atunci o noua pagina s-ar fi incarcat cu rezultatele. Si nu era prea placut sa se astepte atat de mult.

Ajax incearca sa remedieze aceasta problema lasand Javascriptul sa comunice direct cu serverul, folosind un obiect special Javascript XMLHttpRequest. Cu acest obiect, Javascript poate prelua informatii de la server fara a mai fi nevoie sa se incarce o noua pagina!

Ajax – O solutie?

Destul de adevarat. Folosind programarea in Ajax veti putea sa schimbati date cu un server web fara sa mai fie necesar incarcarea unei noi pagini. In loc sa priviti Ajax-ul ca “un nou mod de a dezvolta site-uri web” ar trebui sa-l priviti ca o noua arma pe care o puteti adauga arsenalului vostru de programare.
 
Ajax poate fi putin greoi pentru cei cu putina experienta in programarea web. Este recomandat sa stiti bine inainte sa va apucati de Ajax HTML si Javascript mai intai.

vineri, 2 ianuarie 2009