4. 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. Sabin Buragawww.purl.org/net/busaco
modele de date disponibile pe Web
5. date RDF
(reprezentare
în memorie)
date RDF
(documente de
sine-stătătoare)
date conforme modelului RDF
(“scufundate” în alte resurse)
conform (Bailer & Hausenblas, 2007)
date non-conforme modelului RDF
(de sine-stătătoare + incluse în fișiere)
conform (Bailer & Hausenblas, 2007)
Dr. Sabin Buragawww.purl.org/net/busaco
model
RDF
abstract
6. date RDF
(reprezentare
în memorie)
RDF/XML, N3, TriX,
N-Triple,… (serializări)
cod binar
date RDF
(documente de
sine-stătătoare)
date conforme modelului RDF
RDFa,
(“scufundate” în alte resurse)
Semantic MediaWiki
baze de date
conform (Bailer & Hausenblas, 2007)
relaționale, XML,
date non-conforme modelului RDF
HTML, microformate,
(de sine-stătătoare + incluse în fișiere)
microdate, JSON
conform (Bailer & Hausenblas, 2007)
Dr. Sabin Buragawww.purl.org/net/busaco
model
RDF
abstract
8. Procesor (parser) RDF
preluarea datelor disponibile în diverse formate
și reprezentarea lor ca triple RDF
Dr. Sabin Buragawww.purl.org/net/busaco
necesități
9. Dr. Sabin Buragawww.purl.org/net/busaco
api-uri & biblioteci rdf – exemple
ARC2 (PHP)
dotNetRDF (C#)
Graphite (PHP)
Jena Semantic Web Toolkit (Java)
PerlRDF (Perl)
RDFLib (Python)
rdfQuery.js, rdfstore-js (JavaScript)
Redland (C; portări în alte limbaje: C#, Objective-C, PHP)
Sesame (Java)
...
detalii la http://www.w3.org/2001/sw/wiki/Tools
10. Serializator (serializer) RDF
exprimarea modelului intern RDF
în diverse formate
N-Triples, RDF/XML, Turtle (N3), TriX, RDFa, JSON-LD,...
Dr. Sabin Buragawww.purl.org/net/busaco
necesități
11. Convertor RDF
preluarea datelor din alte modele
și transformarea lor in RDF
extragerea directă din documentele HTML
via scrapers/harvesters
Dr. Sabin Buragawww.purl.org/net/busaco
necesități
13. 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. Sabin Buragawww.purl.org/net/busaco
instrumente
14. Inițiativa Triplr
exemple:
din HTML în RDF/XML via GRDDL
http://triplr.org/rdf/www.w3.org/People/Connolly/
Dr. Sabin Buragawww.purl.org/net/busaco
instrumente
conversie în format Turtle a unui fișier FOAF (RDF/XML)
http://triplr.org/turtle/profs.info.uaic.ro/~busaco/busaco.foaf.xml
15. Navigatoare RDF (hyperdata browsers)
redau utilizatorului (uman) o reprezentare
“frumoasă” a triplelor RDF, permitând
interacțiunea cu datele: vizualizare, filtrare,...
Dr. Sabin Buragawww.purl.org/net/busaco
necesități
16. Navigatoare RDF (hyperdata browsers)
exemple:
Disco
Marbles
OpenLink Data Explorer
Q&D RDF Browser
Tabulator
uzual, disponibile ca extensii pentru browser-ul Web
Dr. Sabin Buragawww.purl.org/net/busaco
instrumente
17. Dr. Sabin Buragawww.purl.org/net/busaco
necesități
Extragerea și procesarea datelor existente pe Web
o soluție „clasică”: information extraction
(eventual, pe baza procesării limbajului natural – NLP)
în cazul nostru, dorim să recurgem la
tehnologiile Web-ului semantic
18. O modalitate standardizată de “convertire”
în triple RDF
a construcțiilor semantice încapsulate
în documentele Web
Dr. Sabin Buragawww.purl.org/net/busaco
necesități
19. GRDDL – Gleaning Resource Descriptions
from Dialects of Languages
Dr. Sabin Buragawww.purl.org/net/busaco
grddl
glean
verb [ trans. ]
extract (information) from various sources:
the information is gleaned from press clippings.
• collect gradually and bit by bit:
objects gleaned from local markets.
• historical gather (leftover grain or other produce) after a harvest:
[as n. ] (gleaning)
the conditions of farm workers in the ‘30s made gleaning essential.
20. Dr. Sabin Buragawww.purl.org/net/busaco
grddl
Permite asocierea de transformări
din formate structurate – e.g., microformate, RDFa, XML –
în declarații RDF, fără pierderea semanticii (meaning)
www.w3.org/TR/grddl/
www.w3.org/TR/grddl-primer/
21. Există o multitudine de documente modelate pe baza
unor dialecte XML – e.g., ODF, RSS/Atom, XHTML etc. –,
încapsulând date care ar putea fi exprimate via RDF
se dorește o asociere faithful – se păstrează înțelesul
Dr. Sabin Buragawww.purl.org/net/busaco
grddl
22. Există o multitudine de documente modelate pe baza
unor dialecte XML – e.g., ODF, RSS/Atom, XHTML etc. –,
încapsulând date care ar putea fi exprimate via RDF
se dorește o asociere faithful – se păstrează înțelesul
se va specifica o transformare GRDDL
uzual, se folosesc transformări XSLT
Dr. Sabin Buragawww.purl.org/net/busaco
grddl
24. Un document XHTML ce include microformatul hCard:
<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://www.w3.org/2003/g/data-view">
<link rel="transformation" href="mHTML2RDF.xsl" />
<title>...</title></head>
transformare
<body>
GRDDL
<div class="vcard">
<p class="fn n">
<span class="given-name">Sabin</span>
<span class="family-name">Buraga</span></p>
</div>
...
</body>
</html>
Dr. Sabin Buragawww.purl.org/net/busaco
grddl: exemplu
25. În urma transformării XSLT, ar putea rezulta:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:v="http://www.w3.org/2006/vcard/ns#">
<rdf:Description rdf:nodeID="EsAVHkUx6">
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#VCard"/>
<v:fn>Sabin Buraga</v:fn>
</rdf:Description>
<rdf:Description rdf:nodeID="EsAVHkUx8">
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Name"/>
<v:given-name>Sabin</v:given-name>
<v:family-name>Buraga</v:family-name>
</rdf:Description>
</rdf:RDF>
Dr. Sabin Buragawww.purl.org/net/busaco
grddl: exemplu
26. Efectuarea diverselor conversii via GRDDL:
microformatul hCardRDF
http://www.w3.org/2006/vcard/hcard2rdf.xsl
microformatul hCalendarRDF
http://www.w3.org/2002/12/cal/glean-hcal.xsl
RDFaRDF
http://www.w3.org/2001/sw/grddl-wg/td/RDFa2RDFXML.xsl
detalii în R. Akerkar, Semantic Markup Report,
NCE Tourism Fjord Norway, 2012
Dr. Sabin Buragawww.purl.org/net/busaco
grddl: exemplu
27. Date stocate în sisteme de baze de date relaționale
date modelate cu RDF
asocieri directe – mappings (via schema bazei de date)
Dr. Sabin Buragawww.purl.org/net/busaco
necesități
30. Motoare de căutare
căutarea de documente RDF, eventual cu extragerea
de cunoștințe – e.g., meta-date – din alte resurse Web
(HTML, RSS/Atom, microformate, microdate, RDFa,...)
câteva exemple:
Knoodle, SameAs, Sig.ma, Sindice, Swoogle
Dr. Sabin Buragawww.purl.org/net/busaco
necesități
33. Datele RDF sunt menținute persistent
în cadrul unui RDF store
Dr. Sabin Buragawww.purl.org/net/busaco
sisteme de stocare rdf
34. 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. Sabin Buragawww.purl.org/net/busaco
sisteme de stocare rdf
35. Intern, un RDF store poate stoca triplele
într-o varietate de formate
baze de date relaționale
versus
structuri de date speciale
inclusiv, la nivel de cloud
Dr. Sabin Buragawww.purl.org/net/busaco
sisteme de stocare rdf
36. Asigurarea interoperabilității este facilitată de
formatele de serializare standardizate
RDF/XML, Turtle, JSON(-LD)
Dr. Sabin Buragawww.purl.org/net/busaco
sisteme de stocare rdf
37. Aspecte de interes:
performanța – e.g., scalabilitatea, timpul de răspuns,...
capacitatea de stocare
facilitățile privind interogarea datelor
API-urile disponibile
fiabilitatea
securitatea
Dr. Sabin Buragawww.purl.org/net/busaco
sisteme de stocare rdf
38. Exemple de implementări curente
(unele disponibile în regim open source)
stocare în structuri de date native:
AllegroGraph (Common Lisp &
multe alte limbaje de programare), BigData (Java),
Jena TBD (Java), Sesame (Java), Stardog (Java, Groovy)
www.w3.org/wiki/LargeTripleStores
Dr. Sabin Buragawww.purl.org/net/busaco
sisteme de stocare rdf
39. Exemple de implementări curente
(unele disponibile în regim open source)
folosind sisteme tradiționale de baze de date:
IBM DB2 (Java), Jena SDB (Java), OpenLink Virtuoso (C,
PHP, Perl, Ruby, JS,…), OWLIM (Java), StrixDB (Lua)
http://semanticweb.com/introduction-to-triplestores_b34996
Dr. Sabin Buragawww.purl.org/net/busaco
sisteme de stocare rdf
40. 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 7
(interogări XQuery, SQL, SPARQL + API-uri diverse)
Dr. Sabin Buragawww.purl.org/net/busaco
sisteme de stocare rdf
41. Utilizări notabile
Dr. Sabin Buragawww.purl.org/net/busaco
sisteme de stocare rdf
OWLIM folosit de BBC, FactForge și LinkedLifeData și
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 Jena TDB
43. SPARQL Protocol and RDF Query Language
Dr. Sabin Buragawww.purl.org/net/busaco
sparql
limbaj descriptiv standardizat
pentru realizarea de interogări pe baza potrivirilor
de șabloane referitoare la triple RDF
inspirat din RDQL – oferit de Jena, RAP, Redland etc.
44. 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. Sabin Buragawww.purl.org/net/busaco
sparql
45. 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. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
46. Modelul de interogare e fundamentat de
șabloane de grafuri RDF – graph patterns
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
47. 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. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
48. Convenții sintactice bazate pe Turtle/N3
triplele RDF sunt considerate
ca fiind tablouri de termeni RDF
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
49. 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. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
50. URI – sau, mai general, IRI – delimitați de “<” si “>”
situl Web al unei persoane:
<http://www.purl.org/net/busaco>
o proprietate definită de specificația FOAF:
<http://xmlns.com/foaf/0.1/name>
o clasă de resurse:
<http://dbpedia.org/ontology/Film>
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
51. 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 dbpedia: <http://dbpedia.org/ontology/>
lista prefixelor comune: http://prefix.cc/
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
52. Nodurile blanc se specifică prin _:nume
sau sunt delimitate de [ și ]
dacă se folosesc o singură dată
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
53. Literali RDF
(șiruri de caractere cu atribute opționale)
"Web"
"Web"@ro
"true"^^xsd:boolean
"true"^^xsd:string
# se indica limba
# se specifică tipul de date
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
54. Abrevieri
referitoare la triple
:s
:s
:p
:p1
:p2
:o1 ,
:o2 .
:o1 ;
:o2 .
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
echivalent cu
:s
:s
:p
:p
:o1 .
:o2 .
echivalent cu
:s
:s
:p1
:p2
:o1 .
:o2 .
55. Abrevieri
privitoare la nodurile blanc
:s :p [ :p' :o ]
echivalent cu
:s :p _:x .
_:x :p' :o .
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
56. Un șablon (pattern) permite specificarea
de variabile indicând date ce vor fi returnate
în urma realizării interogării
?subiect ?predicat ?obiect .
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
57. Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
Șablon: subiect ?predicat ?obiect .
?predicat și ?obiect reprezintă necunoscutele (unbounded)
?obiect
?predicat
subiect
?predicat
obiect1
?obiect
obiect2
?predicat
?obiect
obiectn
după (Corno & Farinetti, 2009)
58. Exemplu
lista persoanelor inter-conectate
via predicatul (proprietatea) foaf:knows
?persoana foaf:knows ?altaPersoana .
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
60. Șabloanele pot fi combinate pentru a forma
șabloane mai complexe
șablon de tip graf (BGP – basic graph pattern)
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
61. Ș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 (data set) local/disponibil pe Web
QF = formular de interogare (query form)
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
63. Rezultatul interogării poate fi:
un tabel de valori corespunzătoare variabilelor
utilizate, rezultat precizat prin SELECT
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
64. Rezultatul interogării poate fi:
o valoare booleană întoarsă de construcția ASK
“este adevărat că…?”
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
65. 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. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
67. SELECT
rezultatul interogării reprezintă un tabel
secvență de rânduri compuse
din valorile variabilelor (variable bindings)
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
69. SELECT ?persoana
WHERE {
?persoana rdf:type foaf:Person
}
Dr. Sabin Buragawww.purl.org/net/busaco
determinarea resurselor de tip persoană
70. 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. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
71. 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. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
72. Funcții predefinite
de testare: bound ( ), isBlank ( ), isLiteral ( ), isURI ( )
de conversie: str ( ), lang ( ), datatype ( )
altele: sameTerm ( ), langMatches ( ), regex ( )
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
74. determinarea numelor tuturor resurselor de gen feminin
Dr. Sabin Buragawww.purl.org/net/busaco
SELECT ?numeStudenta
WHERE {
?persoana foaf:gen ?gen ;
foaf:firstName ?numeStudenta .
FILTER regex (?gen, "^female", "i") .
}
75. SELECT DISTINCT ?studentSub22 ?titulatura
WHERE {
?persoana foaf:age ?ani ;
foaf:firstName ?studentSub22
OPTIONAL { ?persoana foaf:title ?titulatura . }
FILTER (?ani <= 22)
}
numele și, eventual, titulatura persoanelor mai tinere
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
76. Nodurile blanc într-o interogare
joacă rol de variabile anonime
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
77. SELECT DISTINCT ?nume ?ani ?prof
s-a recurs la
WHERE {
vocabularul
[ ] foaf:knows ?persoana .
relationship
?persoana foaf:firstName ?nume ;
rel:knowsByReputation
<http://www.w3.org/People/Berners-Lee/card#i> ;
foaf:age ?ani .
?prof s:examineaza ?persoana
}
numele și vârsta cunoscuților care-l „știu” pe Sir Tim Berners-Lee
după reputație și sunt examinați de profesori
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
78. 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. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
79. 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 > "2011-01-01"^^xsd:date ) . }
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
80. Exemplu de recurgere la ASK (Lee Feigenbaum, 2009):
aflarea răspunsului la întrebarea
“Fluviul Amazon este mai lung decât Nilul?”
PREFIX prop: <http://dbpedia.org/property/>
ASK {
<http://dbpedia.org/resource/Amazon_River>
prop:length ?lungAmazon .
<http://dbpedia.org/resource/Nile> prop:length ?lungNil .
FILTER (?lungAmazon > ?lungNil) .
}
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
81. Obținerea de șabloane de graf alternative
se realizează via clauza UNION
{ ?nod voc:hasName ?nume }
UNION
{ ?nod vcard:FN ?nume }
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
82. 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. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
resursele cunoscute sau rude cu o persoană
și examinate doar de un anumit profesor
83. Întrebare:
am putea realiza interogări SPARQL
asupra mai multor grafuri RDF?
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
84. O interogare poate fi aplicată:
grafului implicit (default graph)
unuia sau mai multor grafuri externe (named graphs)
fuziunii dintre graful implicit și cele externe
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
85. Graful RDF de intrare poate fi specificat via URI
FROM <http://planetrdf.com/bloggers.rdf>
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: limbaj de interogare
86. 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) .
}
adaptare după (J. Hebeler et al., 2009)
Dr. Sabin Buragawww.purl.org/net/busaco
extragerea tuturor datelor despre persoanele
cunoscute de Sir Tim Berners-Lee
87. Pune la dispoziție un mecanism de realizare
de interogări SPARQL prin invocarea de
servicii Web – SPARQL end-points
recomandare a Consorțiului Web (2008, 2013)
www.w3.org/TR/rdf-sparql-protocol/
www.w3.org/TR/sparql11-protocol/
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: protocol
88. 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 întoarce rezultate via HTTP(S)
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: protocol
89. 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 întoarce rezultate via HTTP(S)
rezultatul poate fi serializat într-o suită de formate:
HTML, JSON, RDF (N3, Turtle), XML etc.
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: protocol
90. 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 întoarce rezultate via HTTP(S)
rezultatul poate fi serializat într-o suită de formate:
HTML, JSON, RDF (N3, Turtle), XML etc.
exemplu de punct terminal: http://dbpedia.org/sparql/
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: protocol
91. 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. Sabin Buragawww.purl.org/net/busaco
sparql: protocol
92. Un posibil răspuns din partea serviciului:
HTTP/1.1 200 OK
Date: Fri, 1 Nov 2013 19:33:00 GMT
Server: Apache/2.4.6 (Unix)
Connection: close
Content-Type: application/turtle
mesaj de
răspuns HTTP
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
<http://sit.ro/Ana> foaf:knows <http://sit.ro/Bogdan> .
…
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: protocol
93. Maniera de serializare XML a rezultatelor
interogărilor SPARQL este standardizată
SPARQL Query Results XML Format (2013)
www.w3.org/TR/rdf-sparql-XMLres/
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: protocol
94. Procesoare SPARQL – exemplificări:
AllegroGraph (Java)
ARC (PHP)
ARQ (Java – bazat pe Jena)
dotNetRDF (C#)
EasyRDF (PHP)
Rasqual (C, cu portări în alte limbaje)
RDF::Query (Perl)
sparql-p (Python)
de consultat și http://semanticweb.org/wiki/Tools
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: instrumente
95. Implementări ale protocolului SPARQL
http://www.w3.org/wiki/SparqlImplementations
exemplificări:
RDF2Go – abstractizează accesul la RDF stores
SparqlGUI (C#), Twinkle (Java)
editoare de interogări SPARQL pentru desktop
Sparqling (JavaScript) – aplicație Web pentru Chrome
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: instrumente
96. Dr. Sabin Buragawww.purl.org/net/busaco
sparql: instrumente
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
Twinkle – interogări asupra unui document RDF local
97. Dr. Sabin Buragawww.purl.org/net/busaco
sparql: instrumente
SELECT DISTINCT ?abilitati
WHERE {
[ a <http://dbpedia.org/ontology/FictionalCharacter> ;
<http://dbpedia.org/property/abilities> ?abilitati ] . }
LIMIT 30
interogări asupra DBpedia via instrumentul Twinkle:
listarea abilităților personajelor fictive
99. Puncte terminale (end-points) SPARQL:
http://www.w3.org/wiki/SparqlEndpoints
+
seturi de date deschise – exemplificări:
DBpedia
http://wiki.dbpedia.org/Downloads
oferite de inițiativa Linked Open Data
http://datahub.io/group/lod
bioinformatică – proiectul BIO2RDF
http://download.bio2rdf.org/release/2/release.html
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: instrumente
100. Puncte terminale (end-points) SPARQL:
verificarea disponibilității:
SPARQL Endpoints Status – http://sparqles.okfn.org/
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. Sabin Buragawww.purl.org/net/busaco
sparql: instrumente
101. SPARQL Endpoints Status pe baza serviciilor
SPARQL înregistrate la datahub.io
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: instrumente
105. interogarea SPARQL asupra DBpedia:
ocupația persoanelor cu un anumit sufix al numelui
clase de
resurse
Dr. Sabin Buragawww.purl.org/net/busaco
SELECT ?nume ?ocupatie
WHERE {
?persoana foaf:name
?nume ;
dbp:occupation ?ocupatie .
FILTER regex (?nume, "escu$")
}
ORDER BY ?nume
LIMIT 7
107. PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT ?numeStat ?pop WHERE {
?stat a
type:LandlockedCountries ;
rdfs:label ?numeStat ;
prop:populationEstimate ?pop .
FILTER (?pop > 15000000) .
}
Dr. Sabin Buragawww.purl.org/net/busaco
Interogarea serviciului specific SPARQL al DBpedia
http://dbpedia.org/sparql
pentru a obține date privitoare la anumite state ale lumii
(Lee Feigenbaum & Eric Prud’hommeaux, 2011)
109. SELECT DISTINCT ?personalitate ?nume ?dataMoarte
WHERE {
?personalitate rdf:type
<http://umbel.org/umbel/rc/PersonWithOccupation> .
OPTIONAL { ?personalitate rdf:type d:Monarch . }
?personalitate d:deathDate ?dataMoarte .
?personalitate rdfs:label ?nume .
FILTER (lang (?nume) = "en" AND regex (?nume, "^A"))
}
ORDER BY ?dataMoarte
LIMIT 10
Dr. Sabin Buragawww.purl.org/net/busaco
Obținerea datelor privind personalitățile
(persoane cu o anumită ocupație, eventual monarhi)
care au numele începând cu litera A
113. Fie interogarea SPARQL asupra DBpedia:
numele papilor născuți în Roma
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE {
?papa a <http://dbpedia.org/ontology/Pope> ;
<http://dbpedia.org/property/birthPlace>
<http://dbpedia.org/resource/Rome> ;
rdfs:label ?nume .
}
LIMIT 3
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: detectarea inconsistențelor
118. apare rdf:Literal
în loc de rdf:Resource
Dr. Sabin Buragawww.purl.org/net/busaco
SELECT ?subiect ?url
WHERE {
?subiect dbpedia2:siteweb ?url .
FILTER (isLITERAL (?url))
} ORDER BY DESC (?url)
LIMIT 7
119. apare rdf:Literal
în loc de rdf:Resource
SPARQL oferă premisele verificării corectitudinii datelor
(context mai larg: knowledge quality)
Dr. Sabin Buragawww.purl.org/net/busaco
SELECT ?subiect ?url
WHERE {
?subiect dbpedia2:siteweb ?url .
FILTER (isLITERAL (?url))
} ORDER BY DESC (?url)
LIMIT 7
120. Dr. Sabin Buragawww.purl.org/net/busaco
Folosind punctul terminal SPARQL oferit de inițiativa voiD,
avem informații privind seturi de date utilizând DBpedia
vezi http://www.w3.org/TR/void/
SELECT DISTINCT ?dataset ?url ?voc
WHERE {
?dataset a void:Dataset .
?dataset void:subset ?set .
?set void:objectsTarget
<http://dbpedia.org/void.ttl#DBpedia> .
?dataset void:sparqlEndpoint ?url .
?dataset void:vocabulary ?voc .
}
122. PREFIX go: <http://purl.org/obo/owl/GO#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX obo: <http://www.obofoundry.org/ro/ro.owl#>
SELECT DISTINCT ?label ?process WHERE {
{ ?process obo:part_of
go:GO_0007165 } # integral to
UNION
{ ?process rdfs:subClassOf
go:GO_0007165 } # refinement of
?process
rdfs:label
?label
}
“Find me the cellular processes that are either integral to or
a refinement of signal transduction.” – Feigenbaum, 2009
Dr. Sabin Buragawww.purl.org/net/busaco
Acces la HCLS (Health Care and Life Science)
http://hcls.deri.org/sparql – pentru a obține date
biomedicale disponibile sub licența Science Commons
123. Dr. Sabin Buragawww.purl.org/net/busaco
sparql: exemplificare
Obținerea de date privind entități referitoare la
evenimentele ISWC (International Semantic Web
Conference) și ESWC (European Semantic Web Conference)
http://data.semanticweb.org/
datele despre fiecare conferință sunt stocate
într-un graf separat (named graph)
124. "Nicholas Gibbins"
"Nicola Fanizzi"
"Nicola Henze"
exemplu inspirat de (Corno & Farinetti, 2009)
"Norman Heino"
Dr. Sabin Buragawww.purl.org/net/busaco
# Participanții comuni la ISWC2010 și ESWC2011
# al căror nume începe cu litera N
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?nume
FROM NAMED
<http://data.semanticweb.org/conference/eswc/2011/complete>
FROM NAMED
<http://data.semanticweb.org/conference/iswc/2010/complete>
WHERE {
GRAPH ?g1 { ?pers a foaf:Person ; foaf:name ?nume }
GRAPH ?g2 { ?pers a foaf:Person ; foaf:name ?nume }
FILTER ( ?g1 != ?g2 && regex (?nume, "^N") ) .
nume
}
"Neil Ireson"
LIMIT 7
"Nenad Stojanovic"
127. 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. Sabin Buragawww.purl.org/net/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
128. Dr. Sabin Buragawww.purl.org/net/busaco
date publice
guvernamentale
oferite de data.gov.uk
pe baza unui
serviciu SPARQL
(open government)
PREFIX ed: <http://education.data.gov.uk/def/school/>
SELECT DISTINCT ?denumire ?capacitate
WHERE {
?scoala a ed:TypeOfEstablishment_Other_Independent_School ;
ed:establishmentName ?denumire ;
ed:establishmentNumber ?capacitate
}
ORDER BY DESC(?capacitate)
LIMIT 10
130. Dr. Sabin Buragawww.purl.org/net/busaco
DESCRIBE ?s
WHERE {
?s a <http://purl.org/ontology/wo/Species> ;
foaf:depiction ?foto
} LIMIT 150
vizualizarea structurată a datelor (aici, animale sălbatice)
preluate de la BBC via OpenLink HTML5 Pivot Viewer
131. Dr. Sabin Buragawww.purl.org/net/busaco
SELECT *
WHERE {
[ ] w:hasCountryCode ?ID ; w:hasGNP ?GNP ;
…
}
generarea de chart-uri pe baza datelor obținute cu SPARQL
biblioteca Sgvizler (JavaScript)
https://code.google.com/p/sgvizler/
132. ?concept = http://schema.org/Thing
?concept = http://schema.org/CreativeWork
?concept = http://schema.org/Article
?concept = http://schema.org/BlogPosting
?concept = http://schema.org/NewsArticle
?concept = http://schema.org/ScholarlyArticle
?concept = http://schema.org/MedicalScholarlyArticle
?concept = http://schema.org/Blog
?concept = http://schema.org/Book
?concept = http://schema.org/Comment
…
sparql.us – enumerarea conceptelor (clase de resurse) definite
de schema.org – scheme de date folosite via microdate HTML5
Dr. Sabin Buragawww.purl.org/net/busaco
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT *
WHERE {
?concept rdf:type rdfs:Class .
}
133. O interogare SPARQL constă în:
declarații de prefixe – vocabulare desemnate de URL
definiții ale seturilor de date (grafuri RDF) interogate
clauză (result clause) identificând datele rezultate
un șablon (query pattern) specificând termeni liberi
Dr. Sabin Buragawww.purl.org/net/busaco
sparql: recapitulare
modificatori (query modifiers) ce oferă posibilități de
fragmentare, sortare, rearanjare a rezultatelor interogării
134. graf RDF
HTML
RDB↔RDF
Dr. Sabin Buragawww.purl.org/net/busaco
punct terminal SPARQL
Procesor
SPARQL
tehnici NLP
triple
store
punct terminal SPARQL
Aplicație
bază
de date
(e.g.,
NoSQL)
bază
de date
relațională
text nestructurat XML/XHTML
SPARQL – privire de ansamblu (Ivan Herman, 2012)
136. Propunere de extindere a SPARQL
SPARQL 1.0SPARQL 1.1SPARQL 2.0
a se studia și prezentarea lui Lee Feigenbaum (2010)
www.slideshare.net/LeeFeigenbaum/sparql2-status
Dr. Sabin Buragawww.purl.org/net/busaco
sparql – viitor
137. Oferă mijloace pentru exprimarea:
actualizărilor de date (updates)
negațiilor (negation)
agregărilor (aggregates)
proiecțiilor (projected expressions)
sub-interogărilor (subqueries)
…
conform (Bob DuCharme, 2013)
Dr. Sabin Buragawww.purl.org/net/busaco
sparql 1.1
139. SELECT ?prof (COUNT (DISTINCT ?stud) AS ?studenti)
WHERE {
?prof a ac:Student_Adviser ;
s:examineaza ?stud
} GROUP BY ?prof
obținerea datelor privind profesorii îndrumători și
numărul studenților examinați de fiecare
Dr. Sabin Buragawww.purl.org/net/busaco
funcțiile de agregare (AVG, COUNT, MIN, MAX, SUM,…)
sunt deja implementate de anumite sisteme SPARQL
140. Posibilitatea utilizării funcțiilor de proiecție:
SELECT (fn:concat (?prenume, ' ', ?nume) AS ?numeComplet)
WHERE {
?persoana foaf:firstName ?prenume ;
foaf:lastName ?nume ;
foaf:interest :Art , :Music .
}
obținerea numelui complet al persoanelor
interesate de artă și muzică
Dr. Sabin Buragawww.purl.org/net/busaco
sparql 1.1
141. SELECT *
WHERE {
?s ?p ?o .
MINUS { ?s <http://xmlns.com/foaf/0.1/maker> ?o . }
}
Dr. Sabin Buragawww.purl.org/net/busaco
MINUS exprimă negația
142. numele persoanelor care nu cunosc după reputație
pe cineva important
Dr. Sabin Buragawww.purl.org/net/busaco
SELECT ?nume
WHERE {
?persoana foaf:firstName ?nume
FILTER ( NOT EXISTS { ?persoana rel:knowsByReputation [ ] } )
}
143. 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. Sabin Buragawww.purl.org/net/busaco
sparql 1.1
144. Dr. Sabin Buragawww.purl.org/net/busaco
SELECT ?persoana
WHERE {
s:dlucanu s:examineaza/(rel:closeFriendOf|rel:siblingOf) ?persoana
}
persoana
s:diana
s:cristina
determinarea persoanelor care sunt prieteni apropiați
sau rude cu un student examinat de un anumit profesor
145. Local Graph Store
s:graph
SPARQL endpoint
SD
s:sw1
Web
SPARQL endpoint
s:sw2
PREFIX s: <…>
SELECT …
FROM s:graph
WHERE {
…A…
SERVICE s:sw1 {
…B…
}
SERVICE s:sw2 {
…C…
}
}
SD = Service Description (folosind RDF)
Dr. Sabin Buragawww.purl.org/net/busaco
Recurgerea la puncte terminale SPARQL multiple
(federated query) – adaptare după Lee Feigenbaum (2010)
146. un serviciu SPARQL poate avea atașată o descriere RDF
conform www.w3.org/TR/sparql11-service-description/
exemplu: serviciul http://gov.tso.co.uk/legislation/sparql (legislație)
Dr. Sabin Buragawww.purl.org/net/busaco
sparql 1.1
147. 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. Sabin Buragawww.purl.org/net/busaco
sparql 1.1
148. INSERT DATA { # inserăm unele date despre noua eroină :-)
:desdemona foaf:title "Dr." ; foaf:name "Dés de Möna" .
}
Dr. Sabin Buragawww.purl.org/net/busaco
sparql 1.1
MODIFY <http://castel.info/eveniment/bal-mascat/participanti>
DELETE { ?persoana foaf:knows :julieta } # substituim :julieta
INSERT { ?persoana foaf:knows :desdemona } # cu noua venită
WHERE {
fiecare operație
?persoana rdf:type
foaf:Person .
e considerată
?persoana foaf:knows :julieta .
atomică
}
149. Pentru mai multe detalii, a se consulta:
Dr. Sabin Buragawww.purl.org/net/busaco
sparql
Bob DuCharme, Learning SPARQL. Querying and Updating
with SPARQL 1.1 (Second Edition), O’Reilly, 2013
Lee Feigenbaum & Eric Prud’hommeaux,
SPARQL By Example, 2013
www.cambridgesemantics.com/semantic-university/sparql-by-example
150. SPARQL permite:
Dr. Sabin Buragawww.purl.org/net/busaco
sparql – privire de ansamblu
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
151. obținerea, transformarea și interogarea
datelor modelate în RDF
Dr. Sabin Buragawww.purl.org/net/busaco
rezumat