SlideShare a Scribd company logo
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Dezvoltarea aplicațiilor Web
⊶⊷
managementul datelor RDF
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
“Trebuie să adunăm fapte
pentru a avea idei.”
Georges-Louis de Buffon
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Ce modele de date sunt disponibile pe Web?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
modele de date disponibile pe Web
textuale
date nestructurate – eventual, multilingve
structurate
RDF – reprezintă „lucruri” (resurse) din lumea reală:
indivizi, servicii, aplicații,... – de dorit, modelate formal
hibride
date structurate „scufundate” în text
e.g., microdate HTML5, RDFa
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
conform (Bailer & Hausenblas, 2007)
model
RDF
abstract
date RDF
(reprezentare
în memorie)
date RDF
(documente de
sine-stătătoare)
date conforme modelului RDF
(„scufundate” în alte resurse)
date non-conforme modelului RDF
(de sine-stătătoare + incluse în fișiere)
conform(Bailer&Hausenblas,2007)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
conform (Bailer & Hausenblas, 2007)
model
RDF
abstract
date RDF
(reprezentare
în memorie)
date RDF
(documente de
sine-stătătoare)
date conforme modelului RDF
(„scufundate” în alte resurse)
date non-conforme modelului RDF
(de sine-stătătoare + incluse în fișiere)
conform(Bailer&Hausenblas,2007)
baze de date
relaționale, XML,
HTML, microformate,
microdate, JSON,…
RDFa,
Semantic MediaWiki
RDF/XML, N3, Turtle,
JSON-LD,… (serializări)
cod binar
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Ce instrumente de procesare
a declarațiilor RDF putem folosi?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
necesități
Procesor (parser) RDF
preluarea datelor disponibile în diverse formate
și reprezentarea lor ca triple RDF
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
api-uri & biblioteci rdf – exemple
Apache Jena (Java)
jena.apache.org
ARC2 (PHP)
github.com/semsol/arc2
Commons RDF (Java)
commons.apache.org/proper/commons-rdf/
dotNetRDF (C#)
dotnetrdf.org
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
api-uri & biblioteci rdf – exemple
EasyRDF (PHP)
www.easyrdf.org
node-rdf, rdfQuery.js, rdfstore-js (JavaScript)
www.w3.org/community/rdfjs/wiki/Comparison_of_RDFJS_libraries
RDF.rb (Ruby)
github.com/ruby-rdf
rdf4h (Haskell)
robstewart57.github.io/rdf4h/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
api-uri & biblioteci rdf – exemple
RDFLib (Python)
github.com/RDFLib/rdflib
Redland (C; portări în Perl, PHP, Python, Ruby)
librdf.org
Serd (C; oferă și un wrapper pentru Swift)
drobilla.net/software/serd
github.com/kasei/swift-serd
...
altele la www.w3.org/2001/sw/wiki/Tools
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
necesități
Serializator (serializer) RDF
exprimarea modelului intern RDF
în diverse formate
N-Triples, RDF/XML, Turtle (N3), TriX, RDFa, JSON-LD,...
(de)compresie triple RDF
în formatul binar HDT (Header, Dictionary, Triples)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
necesități
Convertor RDF
preluarea datelor din alte modele
și transformarea lor în RDF
extragerea directă din documentele HTML
via scrapers/harvesters
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente
Extractoare/convertoare RDF – exemple:
Apache Any23, Babel, RDF123, RDFSlice (Java)
EasyRDF (PHP) – www.easyrdf.org/converter
HDT-it! (C++, Java) – www.rdfhdt.org
Greengrass, LinqToRDF (C#)
Raptor (C) – librdf.org/raptor/
RDF Translator (Python) – rdf-translator.appspot.com
Tarql (CSV to RDF using SPARQL) – tarql.github.io
URIBurner – serviciu Web: linkeddata.uriburner.com
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente
Inițiativa Triplr
serviciu Web REST de conversie a datelor (d)in RDF
bazat pe biblioteca Redland
http://triplr.org/format-de-ieșire/uri-sursă
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente
Inițiativa Triplr
exemple:
din HTML în RDF/XML via GRDDL
http://triplr.org/rdf/www.w3.org/People/Connolly/
conversie în format Turtle a unui fișier FOAF (RDF/XML)
http://triplr.org/turtle/profs.info.uaic.ro/~busaco/busaco.foaf.xml
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
necesități
Navigatoare RDF (hyperdata browsers)
redau utilizatorului (uman) o reprezentare
„frumoasă” a triplelor RDF, permitând
interacțiunea cu datele: vizualizare, filtrare,...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
instrumente
Navigatoare RDF (hyperdata browsers)
exemple:
brwsr – https://github.com/Data2Semantics/brwsr
OpenLink Data Explorer – http://ode.openlinksw.com/
Q&D RDF Browser – http://graphite.ecs.soton.ac.uk/browser/
Tabulator – http://www.w3.org/2005/ajar/tab
uzual, disponibile ca extensii pentru browser-ul Web
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
necesități
Extragerea și procesarea datelor existente pe Web
o soluție „clasică”: information extraction
(eventual, pe baza procesării limbajului natural – NLP)
e.g., a se experimenta Data Enrichment Service
http://openup.tso.co.uk/developer/des
sau OpenRefine – http://openrefine.org/
în cazul nostru, dorim să recurgem la
tehnologiile Web-ului semantic
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
necesități
O modalitate standardizată de „convertire”
în triple RDF
a construcțiilor semantice încapsulate
în documentele Web
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
grddl
Gleaning Resource Descriptions from Dialects of Languages
permite asocierea de transformări
din formate structurate – e.g., microformate, RDFa, XML –
în declarații RDF, fără pierderea semanticii (meaning)
soluție: XSLT (Extensible Stylesheet Language Transformations)
www.w3.org/TR/grddl/
www.w3.org/TR/grddl-primer/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
necesități
Date stocate în sisteme de baze de date relaționale

date modelate cu RDF
asocieri directe – mappings (via schema bazei de date)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
realizarea diferitelor asocieri exprimate via
R2RML – RDB to RDF Mapping Language
recomandare a Consorțiului Web (2012)
www.w3.org/TR/r2rml/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
baze de date relaționale gestionate via SQL
CREATE TABLE "Software" (
"ID" INT, PRIMARY KEY("ID"), "nume" CHAR(69), "desc" CHAR(256)
)
CREATE TABLE "Utiliz" (
"ID" INT, PRIMARY KEY("ID"), "identit" CHAR(101),
"soft" INT, FOREIGN KEY("soft") REFERENCES "Software"("ID")
)
INSERT INTO "Software" ("ID", "nume", "desc") VALUES (13, 'Marmotta', '…')
INSERT INTO "Utiliz" ("ID", "identit", "soft") VALUES (7, 'Alexandra', 13)
INSERT INTO "Utiliz" ("ID", "identit", "soft") VALUES (8, 'Ciprian', NULL)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
baze de date relaționale gestionate via SQL
CREATE TABLE "Software" (
"ID" INT, PRIMARY KEY("ID"), "nume" CHAR(69), "desc" CHAR(256)
)
CREATE TABLE "Utiliz" (
"ID" INT, PRIMARY KEY("ID"), "identit" CHAR(101),
"soft" INT, FOREIGN KEY("soft") REFERENCES "Software"("ID")
)
INSERT INTO "Software" ("ID", "nume", "desc") VALUES (13, 'Marmotta', '…')
INSERT INTO "Utiliz" ("ID", "identit", "soft") VALUES (7, 'Alexandra', 13)
INSERT INTO "Utiliz" ("ID", "identit", "soft") VALUES (8, 'Ciprian', NULL)
date RDF
<Utiliz/ID=7> rdf:type <Utiliz> .
<Utiliz/ID=7> <Utiliz#ID> 7 .
<Utiliz/ID=7> <Utiliz#identit> "Alexandra" .
<Utiliz/ID=7> <Utiliz#soft> 13 .
<Utiliz/ID=7> <Utiliz#ref-software> <Software/ID=13> .
…
<Software/ID=13> rdf:type <Software> .
<Software/ID=13> <Software#ID> 13 .
<Software/ID=13> <Software#nume> "Marmotta" .
<Software/ID=13> <Software#desc> "An Open Platform for Linked Data – by Apache" .
asocieri directe
recomandare W3C
(M. Arenas et al., 2012)
www.w3.org/TR/
rdb-direct-mapping/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Nu există posibilitatea de a utiliza un sistem
de stocare/interogare a triplelor RDF?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Datele RDF sunt menținute persistent
în cadrul unui RDF store
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Oferă posibilitatea fuzionării (merging)
seturilor de date RDF
date 2 seturi de triple RDF, în urma fuzionării
va rezulta un set de triple RDF ce include toate triplele
din ambele seturi de intrare în care resursele
având același URI sunt considerate echivalente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Intern, un RDF store poate stoca triplele
într-o varietate de formate
baze de date (non-)relaționale
versus
structuri de date speciale – eventual, în memorie
inclusiv, la nivel de cloud
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Intern, un RDF store poate stoca triplele
într-o varietate de formate
dataset ≡ colecție de grafuri RDF
triple RDF + context desemnat de un URI
format standardizat: N-Quads (2014)
www.w3.org/TR/n-quads/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Asigurarea interoperabilității este facilitată de
formatele de serializare standardizate
RDF/XML, Turtle, JSON(-LD)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Aspecte de interes:
performanța – e.g., scalabilitatea, timpul de răspuns,...
capacitatea de stocare
facilitățile privind interogarea datelor (inclusiv tranzacții)
API-urile disponibile
fiabilitatea
securitatea
efectuarea de raționamente automate
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Exemple de implementări curente
(unele disponibile în regim open source)
stocare în structuri de date native:
AllegroGraph – http://franz.com/agraph/allegrograph/
Apache Jena TDB – http://jena.apache.org/
BigData – http://bigdata.com/
Oracle Spatial & Graph – http://tinyurl.com/oracle-rdf
RDF4J – http://rdf4j.org/
Stardog – http://stardog.com/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Exemple de implementări curente
(unele disponibile în regim open source)
folosind sisteme tradiționale de baze de date:
IBM DB2 (Java), OpenLink Virtuoso (C, C#, Java, JS, PHP,
Perl, Ruby, XQuery,…),
Ontotext Graph DB (Java), StrixDB (Lua)
www.w3.org/wiki/LargeTripleStores
www.dataversity.net/introduction-to-triplestores/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Exemple de implementări curente
(unele disponibile în regim open source ori freeware)
bazate pe sisteme NoSQL:
BrightstarDB (C#), CumulusRDF (utilizează Cassandra),
RDF Graph for Oracle NoSQL DB, SparkleDB (C++)
recurgând la baze de date native XML: MarkLogic
(interogări XQuery, SQL, SPARQL + API-uri diverse)
http://developer.marklogic.com/learn/semantics-exercises
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Suport pentru realizarea de inferențe (simple)
Jena – specificarea regulilor procesate de un rule engine
+ API pentru realizarea raționamentelor (reasoners)
RDF4J – raționamente privitoare la RDF Schema
MarkLogic – raționamente vizând tipul resurselor și
relațiile dintre ele
Stardog – raționamente automate
prin expandarea interogărilor (query expansion)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
Suport pentru constrângeri impuse datelor
cadrul general: SHACL – Shapes Constraint Language
suită de recomandări ale Consorțiului Web (iulie 2017)
validarea grafurilor RDF pe baza unor condiții (shapes)
www.topquadrant.com/2017/06/12/shacl-features-and-specifications/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf
@prefix schema: <http://schema.org/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
schema:PersonShape
a sh:NodeShape ;
sh:targetClass schema:Person ;
sh:property [
sh:path schema:givenName ;
sh:datatype xsd:string ;
sh:minLength "33"^^xsd:byte
] ;
sh:property [
sh:path schema:birthDate ;
sh:maxCount "1"^^xsd:byte ;
sh:lessThan schema:deathDate
] ;
sh:property [
sh:path schema:gender ;
sh:in ( "female" "male" ) ;
] .
constrângeri impuse
entităților din categoria
schema.org/Person
numele propriu e un șir
de minim 33 caractere,
data nașterii trebuie
să fie unică + să aibă
valoare mai mică decât
cea a morții, iar genul
trebuie să ia o valoare
dintr-o listă
:Tuxy a schema:Person ;
schema:givenName true ;
schema:givenName "Tuxy" ;
schema:gender "n/a" ;
schema:birthDate "2017-12-31"^^xsd:date ;
schema:birthDate "1974-01-07"^^xsd:date ;
schema:deathDate "2017-12-30"^^xsd:date .
graful datelor
de validat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
shacl
validateDatatype(true, xsd:string)1 violation
validateDatatype(Tuxy, xsd:string)
validateMinLength(true, 33)1 violation
validateMinLength(Tuxy, 33)1 violation
validateMaxCountProperty(s:Tuxy, schema:birthDate, 1)1 violation
validateLessThanProperty(s:Tuxy, schema:birthDate, schema:deathDate)1 violation
validateIn(n/a, Blank node _:n1525)1 violation
[
a sh:ValidationResult ;
sh:resultSeverity sh:Violation ;
sh:sourceConstraintComponent sh:InConstraintComponent ;
sh:sourceShape _:n1523 ;
sh:focusNode <http://www.infoiasi.ro/wade#Tuxy> ;
sh:value "n/a" ;
sh:resultPath schema:gender ;
sh:resultMessage "Value is not in Blank node _:n1525" ;
] .
de experimentat
instrumentul Web
SHACL Playground
http://shacl.org/playground/
raport disponibil
în format RDF
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sisteme de stocare rdf: utilizări
Ontotext Graph DB folosit de BBC,
FactForge și LinkedLifeData;
inclus în GATE (General Architecture for Text Engineering)
Best Buy, inQuest și NASA recurg la Stardog
OpenLink Virtuoso utilizat de DBpedia și
Linked Open Data Cloud
data.gov.uk se bazează pe Apache Jena TDB
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Există un limbaj de interogare
a seturilor de triple RDF?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql
SPARQL Protocol and RDF Query Language
limbaj descriptiv standardizat
pentru realizarea de interogări pe baza potrivirilor
de șabloane referitoare la triple RDF
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql
Oferă suport pentru manipularea construcțiilor RDF
Pune la dispoziție operații asupra grafurilor RDF
Independent de platforma software utilizată
limbaj de interogare + protocol de acces la triple RDF
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Recomandări ale Consorțiului Web:
SPARQL 1.0 (2008)
permite doar acces la date (interogări read-only)
www.w3.org/TR/rdf-sparql-query/
SPARQL 1.1 (2013)
oferă și posibilități de actualizare a datelor
www.w3.org/TR/sparql11-overview/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Modelul de interogare e fundamentat de
șabloane de grafuri RDF – graph patterns
Lee Feigenbaum & Eric Prud’hommeaux,
SPARQL By Example, 2013
www.cambridgesemantics.com/semantic-university/sparql-by-example
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Termeni RDF (RDF-T):
reuniunea mulțimilor IRI, noduri blanc, literali RDF
Variabile de interogare (V):
simboluri prefixate de „?” sau de „$”
Șablon (triple pattern): membru al mulțimii
(RDF-T  V)  (IRI  V)  (RDF-T  V)
Șabloane de tip graf: mulțimi de șabloane
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Convenții sintactice bazate pe Turtle/N3
triplele RDF sunt considerate
ca fiind tablouri de termeni RDF
termen RDF = IRI | nod blanc | literal
pattern de triple = tablou de termeni RDF
sau nume de variabile (termeni liberi)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
URI – sau, mai general, IRI – delimitați de „<” și „>”
situl Web al unei persoane:
<http://profs.info.uaic.ro/~busaco/>
o proprietate definită de un vocabular:
<http://xmlns.com/foaf/0.1/name>
<http://schema.org/servesCuisine>
o clasă de resurse:
<http://dbpedia.org/ontology/Film>
<http://schema.org/Winery>
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Pentru a referi spații de nume ale vocabularelor utilizate
se folosește construcția PREFIX
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX core: <http://www.bbc.co.uk/ontologies/coreconcepts/>
lista prefixelor uzual folosite: http://prefix.cc/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Nodurile blanc se specifică prin _:nume
sau sunt delimitate de [ și ]
dacă se folosesc o singură dată
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Literali RDF
(șiruri de caractere cu atribute opționale)
"Web"
"Web"@ro # se indică limba
"true"^^xsd:boolean # se specifică explicit
"true"^^xsd:string # tipul de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Abrevieri
referitoare la triple
:s :p :o1 , :s :p :o1 .
:o2 . echivalent cu :s :p :o2 .
:s :p1 :o1 ; :s :p1 :o1 .
:p2 :o2 . echivalent cu :s :p2 :o2 .
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Abrevieri
privitoare la nodurile blanc
:s :p [ :p' :o ]
echivalent cu
:s :p _:x . _:x :p' :o .
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Un șablon (pattern) permite specificarea
de variabile indicând date ce vor fi returnate
în urma realizării interogării
?subiect ?predicat ?obiect .
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Șablon: subiect ?predicat ?obiect .
?predicat și ?obiect reprezintă necunoscutele (unbounded)
subiect
obiect1
obiect2
obiectn
?predicat
?predicat
?predicat
?obiect
?obiect
?obiect
după (Corno & Farinetti, 2009)
.
.
.
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Exemple:
lista persoanelor inter-conectate
via predicatul (proprietatea) foaf:knows
?persoana foaf:knows ?altaPersoana .
perechi locații—coordonate geografice
folosind proprietatea specificată de schema.org
?loc schema:geo ?coordGeo .
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Exemplu
descoperirea proprietătilor/relațiilor
dintre subiect și obiect
_:subiect ?predicat _:obiect .
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Șabloanele pot fi combinate pentru a forma
șabloane mai complexe
șablon de tip graf (BGP – basic graph pattern)
componente ale unei interogări SPARQL
exprimate formal – algebric – prin tuplul (E, DS, QF)
E = expresie SPARQL
DS = set de date RDF (dataset) local/disponibil pe Web
QF = formular de interogare (query form)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
SELECT ?contrib
WHERE {
<http://en.wikipedia.org/>
<http://purl.org/dc/elements/1.1/contributor>
?contrib .
}
{ … } desemnează un graph pattern
în acest exemplu, se utilizează vocabularul DCMI
selectarea entităților
ce au contribuit
la o resursă
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Rezultatul interogării poate fi:
un tabel de valori corespunzătoare variabilelor
utilizate, rezultat precizat prin SELECT
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Rezultatul interogării poate fi:
o valoare booleană întoarsă de construcția ASK
„este adevărat că…?”
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Rezultatul interogării poate fi:
un graf RDF creat via CONSTRUCT sau DESCRIBE
CONSTRUCT oferă un graf în care variabilele
sunt înlocuite cu valorile găsite
DESCRIBE întoarce un graf care descrie resursele găsite
(structura datelor e determinată de procesorul RDF)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
anatomia unei interogări SPARQL 1.0 (Beckett, 2011)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
SELECT
rezultatul interogării reprezintă un tabel
secvență de rânduri compuse
din valorile variabilelor (variable bindings)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Considerăm
date modelate
în RDF
privitoare la
studenții FII
vezi exemplele
asociate cursului
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
determinarea resurselor de tip persoană
SELECT ?persoana
WHERE {
?persoana rdf:type foaf:Person
}
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
SELECT
oferirea de valori distincte via DISTINCT
ordonarea rezultatelor prin ORDER BY
returnarea de sub-secvențe cu LIMIT și OFFSET
precizarea construcțiilor opționale prin OPTIONAL
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Datele interogate pot fi filtrate via clauza FILTER
expresiile de filtrare includ:
variabile
operatori aritmetici/logici
funcții (predefinite sau specificate de utilizator)
tipuri de date definite de XML Schema
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Funcții predefinite
de testare: bound ( ), isBlank ( ), isLiteral ( ), isURI ( )
de conversie: str ( ), lang ( ), datatype ( )
altele: sameTerm ( ), langMatches ( ), regex ( )
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
FILTER (?anul != 2)
FILTER (?dataComanda < "2017-11-31T22:00:00Z"^^xsd:date)
FILTER (?pop > 15000000 &&
langMatches (lang (?numeStat), "EN"))
FILTER (?foss = 'Yes' && ?categ = 'Database/Datastore' &&
(?limbaj = 'PHP' || regex (?limbaj, "^C")))
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
determinarea numelor tuturor resurselor de gen feminin
SELECT ?numeStudenta
WHERE {
?persoana foaf:gen ?gen ;
foaf:firstName ?numeStudenta .
FILTER regex (?gen, "^female", "i") .
}
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
numele și, eventual, titulatura persoanelor mai tinere
SELECT DISTINCT ?studentSub22 ?titulatura
WHERE {
?persoana foaf:age ?ani ;
foaf:firstName ?studentSub22
OPTIONAL { ?persoana foaf:title ?titulatura . }
FILTER (?ani <= 22)
}
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Nodurile blanc într-o interogare
joacă rol de variabile anonime
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
numele și vârsta cunoscuților care-l „știu” pe Sir Tim Berners-Lee
după reputație și sunt examinați de profesori
SELECT DISTINCT ?nume ?ani ?prof
WHERE {
[ ] foaf:knows ?persoana .
?persoana foaf:firstName ?nume ;
rel:knowsByReputation
<http://www.w3.org/People/Berners-Lee/card#i> ;
foaf:age ?ani .
?prof s:examineaza ?persoana
}
s-a recurs la
vocabularul
relationship
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Crearea unui graf RDF se poate realiza prin CONSTRUCT
CONSTRUCT (?s ?p ?o)
WHERE {
?prop rdf:subject ?s .
?prop rdf:predicate ?p .
?prop rdf:object ?o .
web:Wikipedia s:afirma ?prop .
}
determinarea tuturor declarațiilor reificate
exprimate de Wikipedia
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Construirea modelului RDF al edițiilor London Gazette
conform Jeni Tennison (2009)
PREFIX g: <http://www.gazettes-online.co.uk/ontology#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
CONSTRUCT {
?issue a g:Issue .
?issue g:hasPublicationDate ?date .
} WHERE {
?issue a g:Issue .
?issue g:hasPublicationDate ?date .
FILTER ( ?date > "2013-01-01"^^xsd:date ) . }
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Operația ASK – exemplu (Lee Feigenbaum, 2009):
aflarea răspunsului la întrebarea
„Fluviul Amazon este mai lung decât Nilul?”
PREFIX dbp: <http://dbpedia.org/property/>
ASK {
<http://dbpedia.org/resource/Amazon_River>
dbp:length ?lungAmazon .
<http://dbpedia.org/resource/Nile> dbp:length ?lungNil .
FILTER (?lungAmazon > ?lungNil) .
}
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Întrebare: „Fluviul Amazon este mai lung decât Nilul?”
Răspuns: DA – true
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Obținerea de șabloane de graf alternative
se realizează via clauza UNION
{ ?nod voc:hasName ?nume }
UNION
{ ?nod vcard:FN ?nume }
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
resursele cunoscute sau rude cu o persoană
și examinate doar de un anumit profesor
SELECT ?cunoscutSauRudaCuCristinaExaminatDoarDeDL
WHERE {
{ ?pers foaf:knows s:cristina ;
foaf:firstName ?cunoscutSauRudaCuCristinaExaminatDoarDeDL
}
UNION
{ ?pers rel:siblingOf s:cristina ;
foaf:firstName ?cunoscutSauRudaCuCristinaExaminatDoarDeDL
}
s:dlucanu s:examineaza ?pers
}
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Întrebare:
am putea realiza interogări SPARQL
asupra mai multor grafuri RDF?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
O interogare poate fi aplicată:
grafului implicit (default graph)
unuia sau mai multor grafuri externe,
identificate via URI (named graphs)
fuziunii dintre graful implicit și cele externe
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: limbaj de interogare
Graful RDF de intrare poate fi specificat via URI
FROM <http://planetrdf.com/bloggers.rdf>
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SELECT ?numePers ?predicat ?obiect
FROM <http://www.w3.org/People/Berners-Lee/card>
FROM <http://www.dajobe.org/foaf.rdf>
FROM <http://www.ivan-herman.net/foaf.rdf>
FROM <http://www.lassila.org/ora.rdf>
WHERE {
tbl:i foaf:knows ?persoana .
?persoana foaf:name ?numePers ;
rdfs:seeAlso ?iri .
?iri foaf:primaryTopic ?persoana2 .
?persoana2 foaf:name ?numePers2 ;
?predicat ?obiect .
FILTER (?numePers = ?numePers2) .
}
extragerea tuturor datelor despre persoanele
cunoscute de Sir Tim Berners-Lee
adaptare după (J. Hebeler et al., 2009)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: protocol
Pune la dispoziție o modalitate de
realizare a interogărilor SPARQL prin
invocarea de servicii Web – SPARQL end-points
recomandări ale Consorțiului Web (2008, 2013)
www.w3.org/TR/rdf-sparql-protocol/
www.w3.org/TR/sparql11-protocol/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: protocol
Serviciile SPARQL pot fi descrise și invocate
via tehnologiile serviciilor Web clasice – i.e., prin REST
un punct terminal SPARQL – generic sau particular –
acceptă cereri și trimite rezultate via HTTP(S)
rezultatul poate fi serializat într-o suită de formate:
CSV, HTML, JSON(-LD), RDF (N3, Turtle), XML etc.
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: protocol
Serviciile SPARQL pot fi descrise și invocate
via tehnologiile serviciilor Web clasice – i.e., prin REST
un punct terminal SPARQL – generic sau particular –
acceptă cereri și trimite rezultate via HTTP(S)
exemple de puncte terminale:
DBpedia – http://dbpedia.org/sparql/
Wikidata – https://query.wikidata.org/
Bathing Water Quality – http://environment.data.gov.uk/bwq/sparql.html
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: protocol
exemplu: instrumentul YASGUI (Yet Another SPARQL GUI)
– http://yasgui.org/ – pentru a accesa un serviciu SPARQL
aici, unul privitor la resurse cinematografice
http://data.linkedmdb.org/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: protocol
Invocarea unui end-point SPARQL (serviciu REST)
recepționând ca date de intrare o interogare:
GET /sparql/?query=interogare&graph-uri=
http://www.retea-sociala.info/document-foaf.rdf HTTP/1.1
Host: www.undeva.org
User-agent: sparql-client/1.0
Accept: application/turtle, application/rdf+xml
cerere HTTP
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: protocol
Un posibil răspuns din partea serviciului:
HTTP/1.1 200 OK
Date: Wed, 08 Nov 2017 11:33:00 GMT
Server: Apache
Connection: close
Content-Type: application/turtle
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
<http://undeva.ro/Ana> foaf:knows <http://sit.info/Bogdan> .
…
mesaj de
răspuns HTTP
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: protocol
Maniera de serializare a rezultatelor
interogărilor SPARQL este standardizată
SPARQL Query Results JSON Format (2013)
http://www.w3.org/TR/sparql11-results-json/
SPARQL Query Results XML Format (2013)
www.w3.org/TR/rdf-sparql-XMLres/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: instrumente
Procesoare SPARQL – exemplificări:
AllegroGraph (Java)
ARC, EasyRDF (PHP)
ARQ (Java – oferit de Apache Jena)
dotNetRDF (C#)
Rasqual (C, cu diverse portări – bazat pe Redland)
RDF::Query (Perl)
sparql (Ruby)
sparql-p (Python)
sparql-js, yasgui-yasr (Node.js)
de consultat și http://www.w3.org/wiki/SparqlImplementations
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: instrumente
Implementări ale protocolului SPARQL – exemple
RDF2Go – abstractizează accesul la RDF stores
github.com/semweb4j/semweb4j
SparqlGUI (C#) – www.dotnetrdf.org
Twinkle (Java)
editoare de interogări SPARQL pentru desktop
SPARQL Playground, YASGUI
aplicații Web de editare/testare direct în browser
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: instrumente
Twinkle – interogări asupra unui document RDF local
www.ldodds.com/projects/twinkle/
SELECT ?nume ?url ?limbaj WHERE {
[ g:label ?nume ; g:URL ?url ; g:FOSS ?foss ; g:Category ?categ ;
g:Language ?limbaj ] .
FILTER (?foss = 'Yes' && ?categ = 'Database/Datastore' &&
(?limbaj = 'PHP' || regex (?limbaj, "^C"))) .
} ORDER BY ?limbaj
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: instrumente
YASGUI – instrument Web de interogare SPARQL
SELECT DISTINCT ?abilitati
WHERE {
[ a <http://dbpedia.org/ontology/FictionalCharacter> ;
<http://dbpedia.org/property/abilities> ?abilitati ] . }
LIMIT 30
listarea abilităților
personajelor fictive
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: instrumente
interogări SPARQL via instrumentul YASGUI
serviciu SPARQL al colinda.org
(Conference Linked Data)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: instrumente
interogări SPARQL specifice via o interfață Web
aici, proiectul UniProt (Universal Protein
Resource) – sparql.uniprot.org/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: instrumente
Puncte terminale (end-points) SPARQL:
www.w3.org/wiki/SparqlEndpoints
+
seturi de date deschise – exemplificări:
DBpedia
wiki.dbpedia.org/Downloads
bioinformatică – proiectul BIO2RDF
(Linked Data for the Life Sciences)
download.bio2rdf.org/current/release.html
numismatică – inițiativa Nomisma
nomisma.org/datasets
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: instrumente
Puncte terminale (end-points) SPARQL:
verificarea disponibilității:
SPARQL Endpoints Status – http://sparqles.ai.wu.ac.at/
detalii privind descoperirea de servicii SPARQL în
C. Buil-Aranda et al., SPARQL Web-Querying Infrastructure:
Ready for Action?, ISWC 2013
http://sw.deri.org/~aidanh/docs/epmonitorISWC.pdf
https://www.youtube.com/watch?v=k8AJ4evqbCc
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Câteva exemplificări din lumea reală?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Interogarea SPARQL asupra DBpedia:
informații despre locul de naștere a lui A. I. Cuza
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?locNastere ?dataNastere WHERE {
?persoana rdfs:label "Alexandru Ioan Cuza"@en ;
dbo:birthPlace ?locNastere ;
dbo:birthDate ?dataNastere .
}
de observat
diferitele
granularități
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SELECT ?nume ?ocupatie
WHERE {
?persoana foaf:name ?nume ;
dbp:occupation ?ocupatie .
FILTER regex (?nume, "terson$")
}
ORDER BY ?nume
LIMIT 7
clase de
resurse
interogarea SPARQL
asupra DBpedia:
ocupația persoanelor
cu un anumit sufix
al numelui
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
acces la DBpedia via interfața Web a serviciului SPARQL
ce recurge la sistemul Virtuoso
obținerea de informații
despre Romania
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
intern, interogarea
SPARQL este convertită
în SQL, apoi optimizată
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Obținerea datelor privind personalitățile
(persoane cu o anumită ocupație, eventual monarhi)
care au numele începând cu șirul „Ad”
SELECT DISTINCT ?personalitate ?nume ?dataMoarte
WHERE {
?personalitate a
<http://umbel.org/umbel/rc/PersonWithOccupation> .
OPTIONAL { ?personalitate a dbo:Monarch . }
?personalitate dbp:deathDate ?dataMoarte .
?personalitate rdfs:label ?nume .
FILTER ( lang (?nume)="en" && regex (?nume, "^Ad")) .
}
ORDER BY desc (?nume) ?dataMoarte
LIMIT 10
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Lista filmelor vorbite în limba japoneză, regizate și
– totodată – scrise de persoane născute după anul 1960
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?film ?nume ?regizor ?dataNastere WHERE {
?film a dbo:Film ;
dbo:language <http://dbpedia.org/resource/Japanese_language> ;
dbp:director ?regizor ;
dbp:writer ?scenarist ;
foaf:name ?nume .
?regizor dbp:dateOfBirth ?dataNastere .
FILTER ((?dataNastere >= 1960) && ?regizor = ?scenarist) .
}
ORDER BY ?nume
LIMIT 7
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
graful asociat interogării
rezultatele obținute
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Fie interogarea SPARQL asupra DBpedia
privind data de naștere a lui Mihai Eminescu
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?dataNastere WHERE {
?persoana rdfs:label "Mihai Eminescu"@en ;
dbo:birthDate ?dataNastere .
}
sparql: detectarea inconsistențelor
???
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Detectarea resurselor DBpedia
care prezintă adrese Web specificate eronat
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbp: <http://dbpedia.org/property/>
SELECT ?subiect ?url
WHERE {
{ ?subiect foaf:page ?url . }
UNION
{ ?subiect dbp:siteweb ?url . }
FILTER (isLITERAL (?url))
}
LIMIT 7
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
apare rdf:Literal
în loc de rdf:Resource
SPARQL oferă premisele verificării corectitudinii datelor
(context mai larg: knowledge quality)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Titlul lucrărilor în română ce au fost traduse în franceză
SELECT DISTINCT ?titlu ?data ?editor WHERE {
[ ] foaf:focus ?lucrare .
?lucrare rdarelationships:expressionOfWork ?exp .
?lucrare dcterms:language <http://id.loc.gov/vocabulary/iso639-2/rum> .
?manif rdarelationships:expressionManifested ?exp .
OPTIONAL { ?exp bnfroles:r680 ?trad ;
dcterms:language <http://id.loc.gov/vocabulary/iso639-2/fre> } .
OPTIONAL { ?manif dcterms:date ?data }
OPTIONAL { ?manif dcterms:title ?titlu }
OPTIONAL { ?manif dcterms:publisher ?editor }
}
LIMIT 7
Bibliothèque Nationale de France – acces la date publice
http://data.bnf.fr/semanticweb
date opționale
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rezultatele – în format HTML – oferite de serviciul SPARQL
http://data.bnf.fr/sparql/
a se remarca modelarea eronată a datelor temporale
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
aflarea entităților cu anumite recenzii (review-uri)
– e.g., comentarii, punctaj – disponibile la Revyu.com
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head><variable name="?eticheta"/><variable name="?comentariu"/>
<variable name="?punctaj"/></head>
<results ordered="false" distinct="false">
<result>
<binding name="?eticheta">
<literal>Borat: Cultural Learnings of America for Make Benefit
Glorious Nation of Kazakhstan</literal>
</binding>
<binding name="?comentariu">
<literal>I found the Borat film quite a disappointment. Being a long-time fan
of Sacha Baron Cohen in all his different guises, I was left with the feeling
that he hadn't done the character, or himself, justice. […]
</literal>
</binding>
<binding name="?punctaj"><literal>3</literal></binding>
</result>
</results>
</sparql> formatul XML standardizat al răspunsului
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
date publice ale Uniunii Europene
oferite de un serviciu SPARQL
(open government)
data.europa.eu/euodp/en/linked-data
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
British Museum: acces la date via collection.britishmuseum.org/sparql
{"head": { "vars": ["count"] },
"results": { "bindings": [
{"count": {"datatype":
"http://www.w3.org/2001/
XMLSchema#integer",
"type": "literal",
"value": "39211"} }
] } }
răspuns JSON oferit
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
vizualizarea structurată a datelor (aici, animale sălbatice)
preluate de la BBC via OpenLink HTML5 Pivot Viewer
github.com/openlink/html5pivotviewer
DESCRIBE ?s
WHERE {
?s a <http://purl.org/ontology/wo/Species> ;
foaf:depiction ?foto
} LIMIT 150
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
biblioteca Sgvizler (JS) – mgskjaeveland.github.io/sgvizler/
SELECT ?node ?parent ?size ?color
WHERE {
{ … } UNION { … }
} ORDER BY ?size
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql: recapitulare
O interogare SPARQL constă în:
declarații de prefixe – vocabulare desemnate de URL
specificări ale seturilor de date (grafuri RDF) interogate
clauză (result clause) identificând datele rezultate
un șablon (query pattern) reprezentând termeni liberi
modificatori (query modifiers) ce oferă posibilități de
fragmentare, sortare, rearanjare a rezultatelor interogării
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Procesor
SPARQL

HTML

bază
de date
relațională
RDB↔RDF

bază
de date
(e.g.,
NoSQL)
punctterminalSPARQL

triple
store
punctterminalSPARQL
Aplicație
tehniciNLP

text nestructurat

XML/XHTML
graf RDF
SPARQL – privire de ansamblu (Ivan Herman, 2012)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql 1.1
Recomandare W3C (2013)
oferă mijloace pentru exprimarea:
actualizărilor de date (updates)
negațiilor (negation)
agregărilor (aggregates)
proiecțiilor (projected expressions)
sub-interogărilor (subqueries)
www.w3.org/TR/sparql11-query/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql – viitor
anatomia unei interogări SPARQL 1.1
conform David Backett (2011)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
obținerea datelor privind profesorii îndrumători și
numărul studenților examinați de fiecare
SELECT ?prof (COUNT (DISTINCT ?stud) AS ?studenti)
WHERE {
?prof a ac:Student_Adviser ;
s:examineaza ?stud
} GROUP BY ?prof
funcțiile de agregare (AVG, COUNT, MIN, MAX, SUM,…)
sunt implementate de anumite sisteme SPARQL
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
exemplu concret:
SALAMI (Structural Analysis of Large Amounts of Data)
http://ddmal.music.mcgill.ca/research/salami
SELECT (STR(?channel) AS ?channelStr) (COUNT(?channel) AS ?freqCount)
WHERE { ?signalID a mo:DigitalSignal ;
mo:channels ?channel .
}
GROUP BY ?channel
?channel ?freqCount
"1"^^<http://www.w3.org/2001/XMLSchema#int> 680
"2"^^<http://www.w3.org/2001/XMLSchema#int> 73810
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
caz concret: interogări SPARQL 1.1
vizând date arheologice oferite de LinkedARC
http://linkedarc.net/sparql
se recurge la funcțiile
SUM și BIND
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql 1.1
Posibilitatea utilizării funcțiilor de proiecție:
SELECT (CONCAT(?prenume, ' ', ?nume) AS ?numeComplet)
WHERE {
?persoana foaf:firstName ?prenume ;
foaf:lastName ?nume ;
foaf:interest :Art ,
<https://www.wikidata.org/wiki/Q638> .
}
obținerea numelui complet al persoanelor
interesate de artă și muzică
Music
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Alte funcții utile:
operații logice: IF() – e.g., IF(?nota > 9, "super", "promovat")
prelucrarea șirurilor de caractere: STRLEN() SUBSTR()
LCASE() UCASE() STRSTARTS() STRENDS() CONTAINS()
STRBEFORE() STRAFTER() REPLACE()
privitoare la dată și timp: NOW() YEAR() MONTH() DAY()
HOURS() MINUTES() SECONDS() TIMEZONE() TZ()
de tip hash: MD5() SHA1() SHA256() etc.
crearea unui nod blanc: BNODE ()
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
alte exemple sunt oferite de
SPARQL Playground
http://sparql-playground.sib.swiss
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SELECT *
WHERE {
?s ?p ?o .
MINUS { ?s <http://xmlns.com/foaf/0.1/maker> ?o . }
}
MINUS exprimă negația
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SELECT ?nume
WHERE {
?persoana foaf:firstName ?nume
FILTER ( NOT EXISTS { ?persoana rel:knowsByReputation [ ] } )
}
utilizarea construcției NOT EXISTS
numele persoanelor care nu cunosc după reputație
pe cineva important
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql 1.1
Specificarea drumurilor privind proprietățile
(property paths)
potrivirile de triple iau în considerație
drumurile prin graful RDF
specificate sintactic via expresii similare XPath
a/b ^a a|b a* a+ a? a{m,n} a{n} a{m,} a{,n}
unde a și b sunt URI-uri ce semnifică predicate
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
SELECT ?persoana
WHERE {
s:dlucanu s:examineaza/(rel:closeFriendOf|rel:siblingOf) ?persoana
}
determinarea persoanelor care sunt prieteni apropiați
sau rude cu un student examinat de un anumit profesor
persoana
s:diana
s:cristina
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
exemplu concret: o interogare asupra Wikidata
https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service
?city wdt:P31/wdt:P279* wd:Q515
P31 = instance of (echivalentă cu rdf:type)
P279 = subclass of (≡ rdfs:subClassOf)
Q515 = city (≡ http://dbpedia.org/ontology/City)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Recurgerea la puncte terminale SPARQL multiple
(federated query) – adaptare după Lee Feigenbaum (2010)
PREFIX s: <…>
SELECT …
FROM s:graph
WHERE {
… A …
SERVICE s:sw1 {
… B …
}
SERVICE s:sw2 {
… C …
}
}
s:graph
SPARQL endpoint
s:sw2
SPARQL endpoint
s:sw1
Local Graph Store
SD
SD = Service Description – descrierea unui serviciu (folosind RDF)
Web
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql 1.1
Un serviciu SPARQL poate avea atașată o descriere RDF
SPARQL 1.1 Service Description (W3C, 2013)
www.w3.org/TR/sparql11-service-description/
@prefix sd: <http://www.w3.org/ns/sparql-service-description#> .
<#DBpediaSPARQL>
a sd:Service ;
sd:endpoint <http://dbpedia.org/sparql/> ;
sd:supportedLanguage sd:SPARQL11Query ;
sd:resultFormat <http://www.w3.org/ns/formats/SPARQL_Results_JSON> ,
<http://www.w3.org/ns/formats/Turtle> .
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql 1.1
Posibilități de actualizare a grafurilor RDF:
INSERT DATA, DELETE DATA, MODIFY, LOAD, CLEAR
Managementul unui graf RDF:
CREATE, DROP, COPY, MOVE, ADD
www.w3.org/TR/sparql11-update/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql 1.1
INSERT DATA { # inserăm unele date despre noua eroină :-)
:desdemona foaf:title "Dr." ; foaf:name "Dés de Möna" .
}
MODIFY <http://castel.info/eveniment/bal-mascat/participanti>
DELETE { ?persoana foaf:knows :julieta } # substituim :julieta
INSERT { ?persoana foaf:knows :desdemona } # cu noua venită
WHERE {
?persoana rdf:type foaf:Person .
?persoana foaf:knows :julieta .
}
fiecare operație
e considerată
atomică
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql 1.1
determinarea suportului
pentru diverse facilități
oferite de SPARQL 1.1
se poate realiza via
SPARQL Endpoint Status
sparqles.ai.wu.ac.at/interoperability
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
sparql – privire de ansamblu
SPARQL permite:
extragerea de valori de interes din date (semi)structurate
explorarea datelor via interogări asupra
posibilelor relații ce pot fi stabilite între aceste date
realizarea de join-uri complexe
transformarea datelor RDF dintr-un vocabular în altul,
inclusiv cu posibilitatea actualizării
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rezumat
⊶⊷
obținerea, transformarea și interogarea
datelor modelate în RDF
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
episodul viitor:
aplicații Web bazate pe RDF + Linked Data

More Related Content

PDF
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...
PDF
Dezvoltarea aplicațiilor Web (6/12): Managementul datelor RDF. Interogarea da...
PDF
WADe 2017-2018 Tutorial (3/3): Data Modeling in HTML by Using RDFa Constructs
PDF
WADe 2014—2015 (supliment): Modelarea datelor în HTML: aserţiuni RDFa
PDF
WADe 2017-2018 (5/12) Data Modeling in RDF (Resource Description Framework)
PDF
WADe 2017-2018 (10/12) Specifying Ontologies via OWL 2. Description Logics. R...
PDF
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
PDF
WADe 2014—2015 (10/12): Semantic Web—Specificarea ontologiilor via OWL 2. Log...
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...
Dezvoltarea aplicațiilor Web (6/12): Managementul datelor RDF. Interogarea da...
WADe 2017-2018 Tutorial (3/3): Data Modeling in HTML by Using RDFa Constructs
WADe 2014—2015 (supliment): Modelarea datelor în HTML: aserţiuni RDFa
WADe 2017-2018 (5/12) Data Modeling in RDF (Resource Description Framework)
WADe 2017-2018 (10/12) Specifying Ontologies via OWL 2. Description Logics. R...
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
WADe 2014—2015 (10/12): Semantic Web—Specificarea ontologiilor via OWL 2. Log...

Similar to WADe 2017-2018 (6/12) RDF Data Management. Accessing RDF Data via SPARQL (20)

PDF
WADe 2014—2015 (07/12): Semantic Web—Arhitectura aplicaţiilor RDF. Iniţiativa...
PDF
Modelarea datelor via XML. Design patterns in contextul specificarii document...
PDF
WADe 2017-2018 (1/12) Web Application Development: Concepts & Vision
PDF
WADe 2017-2018 (8/12) Modeling Vocabularies, Taxonomies, and Thesauri with RD...
DOC
Studiu Comparativ Privind API-urile de Procesare RDF Inplementate in PHP
PDF
WADe 2014—2015 (08/12): Semantic Web—Modelarea taxonomiilor şi lexicoanelor c...
PDF
De câte stele sunt datele d-voastră?
PDF
Procesare Rdf Sub .Net Framework
DOC
Fii linked data
DOC
Fii linked data
DOC
Fii linked data
PPT
Programare Web - Arhitectura WWW
PDF
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
PDF
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
PDF
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
PDF
Dezvoltarea aplicațiilor Web (5/12): Modelul RDF (Resource Description Framew...
PDF
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
PDF
WADe 2017-2018 (7/12) Architecture of RDF-based Applications. Linked Open Dat...
PDF
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
DOC
Procesarea Rdf in .NET
WADe 2014—2015 (07/12): Semantic Web—Arhitectura aplicaţiilor RDF. Iniţiativa...
Modelarea datelor via XML. Design patterns in contextul specificarii document...
WADe 2017-2018 (1/12) Web Application Development: Concepts & Vision
WADe 2017-2018 (8/12) Modeling Vocabularies, Taxonomies, and Thesauri with RD...
Studiu Comparativ Privind API-urile de Procesare RDF Inplementate in PHP
WADe 2014—2015 (08/12): Semantic Web—Modelarea taxonomiilor şi lexicoanelor c...
De câte stele sunt datele d-voastră?
Procesare Rdf Sub .Net Framework
Fii linked data
Fii linked data
Fii linked data
Programare Web - Arhitectura WWW
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Dezvoltarea aplicațiilor Web (5/12): Modelul RDF (Resource Description Framew...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
WADe 2017-2018 (7/12) Architecture of RDF-based Applications. Linked Open Dat...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
Procesarea Rdf in .NET
Ad

More from Sabin Buraga (20)

PDF
Web 2020 01/12: World Wide Web – aspecte arhitecturale
PDF
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
PDF
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
PDF
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
PDF
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
PDF
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
PDF
Web 2020 09/12: Servicii Web. Paradigma REST
PDF
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
PDF
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
PDF
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
PDF
STAW 01/12: Arhitectura aplicaţiilor Web
PDF
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
PDF
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
PDF
STAW 04/12: Programare Web: Node.js
PDF
STAW 05/12: Arhitectura navigatorului Web
PDF
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
PDF
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
PDF
STAW 08/12: Programare Web. Suita de tehnologii HTML5
PDF
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
PDF
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 04/12: Programare Web: Node.js
STAW 05/12: Arhitectura navigatorului Web
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
Ad

WADe 2017-2018 (6/12) RDF Data Management. Accessing RDF Data via SPARQL