Linked Data in UseGuillermo Álvaro Rey
La Granja de San Ildefonso, 21 Julio 2011
Cursos de Verano UPM 2011 Oportunidades de la web de datos (Linked Data) en España
2
Agenda
» Re-Intro Linked Data» (Motivación)
» Publicando Linked Data» (un ejemplo)
» Consumiendo Linked Data» (ejemplos)
» “Ejercicios”» (Un poco de SPARQL)
3
• Linked Data: – Para pasar de una Web de documentos…– …a una Web de Datos
– …¿por qué?
Motivación
Un ejemplo:
¿Jugadores de fútbol de la provincia de Albacete que han marcado un gol
en la final de la Copa del Mundo?
4
Motivación: Ejemplo
¿¿??
5
Motivación: Ejemplo
No debería ser…?
6
(jugadores de fútbol de la provincia de Albacete que han ganado la
la Copa del Mundo)
Mejor encontrar que buscar…
Motivación: Ejemplo
7
• ¿Qué sucede?– Nos interesan “cosas” concretas, no documentos– Tenemos que encontrar las cosas que buscamos en los
documentos– Las máquinas no pueden saber (aunque adivinan bien) los
contenidos
• Publicando datos en bruto…– Hacemos más fácil a las máquinas encontrar cosas– Mejor si lo hacemos siguiendo formatos y protocolos estándar– …y mejor aún si los enlazamos con otros datos
Motivación: Datos vs Documentos
8
1) Usar URIs para identificar cosas
2) Usar el protocolo HTTP para esas URIs
3) Ofrecer información útil en esas direcciones
4) Incluir enlaces a otras URIs
Linked Data: Los 4 principios (Tim Berners-Lee, 2006)
Image by: http://www.flickr.com/photos/PhOtOnQuAnTiQuE/
9
En la Web de documentos, usamos HTML,
En la Web de datos, usamos:
RDF(Resource Description Framework)
• Modelo de datos
• Basado en tripletas: sujeto, verbo, predicado. Ej:– <Guillermo> <vive en> <Madrid>– <Madrid> <es la capital de> <España>– <España> <es campeona de> <Mundial de Fútbol>– …
• Serializable en diferentes formatos:– RDF/XML, RDFa, N3, Turtle, JSON…
RDF
10
Servicio
Operación
Mensajeentrada
Mensajesalida
Documentos y DatosDocumento
Datos
11
http://...service#lastFm
http://...operation#getEvents
http://...inMessage http://...outMessage
hasOperation
hasInput hasOutput
Last.fm service
geo.getEvents
label
label
Datos en RDF
Datos en RDF y con URIs
12
http://...service#lastFm
http://...operation#getEvents
http://...inMessage http://...outMessage
hasOperation
hasInput hasOutput
Last.fm service
geo.getEvents
label
label
http://...review
http://...reviewer
Guillermo
Great music service!
hasReviewhasReviewer
name
text
Enlazando con otros datos
Datos en RDF
13
http://...service#lastFm
http://...operation#getEvents
http://...inMessage http://...outMessage
hasOperation
hasInput hasOutput
Last.fm service
geo.getEvents
label
label
http://...review
http://...reviewer
Guillermo
Great music service!
hasReviewhasReviewer
name
text
http://dbpedia.org/resource/Madrid
lives in
…y más
Datos en RDF
14
Datos en la Web expuestos como RDF, y enlazados con otros datos. Eso es:
Linked Data!
Datos enlazados
15
2007
2008
2009 2010
La evolución de Linked Data
Linking Open Data cloud diagram,
by Richard Cyganiak and Anja Jentzsch.
http://lod-cloud.net/
16
• Imagen anterior:– La nube de “Linked Open Data”
• No confundir:– Linked Data (Datos enlazados)– Open Data (Datos abiertos)
Linked (Open?) Data
17
• “La Web se transforma en una gran Base de Datos”…• ¿Cómo consultar esta gran BD?
SPARQL(W3C Recommendation)
http://www.w3.org/TR/rdf-sparql-query/
Veremos unos cuantos ejemplos…
SPARQL
18
Motivación para enlazar: Ejemplo en Logística
Image by:http://
www.flickr.com/photos/senoranderson/
Image by:http://www.flickr.com/photos/argen/
Image by: http://map-of-spain.co.uk
19
Agenda
» Re-Intro Linked Data» (Motivación)
» Publicando Linked Data» (un ejemplo)
» Consumiendo Linked Data» (ejemplos)
» “Ejercicios”» (Un poco de SPARQL)
20
Dos grandes vías:
1) De Bases de Datos relacionales a Linked Data• D2R• Triplify• Virtuoso• Ultrawrap• …
2) Usando Repositorios RDF nativos• Sesame• Jena• Owlim• Talis platform• …
(También en CMS tipo Drupal 7, en HTML + RDFa…)
http://triplify.org
http://www4.wiwiss.fu-berlin.de/bizer/d2r-server/
Veremos ejemplo de esto…
Publicando Linked Data
21
Caso práctico:
Linked User Feedback
• Un servicio para almacenar y exponer como Linked Data feedback de los usuarios en forma de:
– Ratings– Comentarios– Etiquetas
http://soa4all.isoco.net/luf/about
Creando Linked Data con repositorio
22
• Vocabularios:
(usados en Revyu.com)
– Review vocabulary• http://www.purl.org/stuff/rev
– Tag Ontology• http://www.holygoat.co.uk/projects/tags/
(además…)
– Provenance vocabulary• http://purl.org/net/provenance/
¿Qué necesitamos? (I)
23
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rev: <http://purl.org/stuff/rev#> .
@prefix tags: <http://www.holygoat.co.uk/owl/redwood/0.1/tags/> .
<http://example.com/items#item1>
rev:hasReview <http://soa4all.isoco.net/luf/ratings/xxx> ;
rev:hasReview <http://soa4all.isoco.net/luf/comments/yyy> ;
tags:tag <http://soa4all.isoco.net/luf/taggings/zzz> .
<http://soa4all.isoco.net/luf/ratings/xxx>
rdf:Type rev:Review ;
rev:rating "3" ;
rev:minRating "1" ;
rev:maxRating "5" ;
rev:reviewer <http://example.com/users#user1> ;
rev:createdOn "2010-06-22T12:29:28+0200"^^xsd:dateTime .
<http://soa4all.isoco.net/luf/comments/yyy>
rdf:Type rev:Review ;
rev:text "This is a comment" ;
rev:reviewer <http://example.com/users#user1> ;
rev:createdOn "2010-06-22T10:59:01+0200"^^xsd:dateTime .
<http://soa4all.isoco.net/luf/taggings/zzz>
rdf:Type tags:Tagging ;
tags:associatedTag "one tag" , "other tag" ;
tags:taggedBy <http://example.com/users#user1> ;
tags:taggedOn "2010-06-22T13:03:05+0200"^^xsd:dateTime .
Un rating:
Un comentario:
Un etiquetado:
¿Qué necesitamos? (I)
24
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rev: <http://purl.org/stuff/rev#> .
@prefix tags: <http://www.holygoat.co.uk/owl/redwood/0.1/tags/> .
<http://example.com/items#item1>
rev:hasReview <http://soa4all.isoco.net/luf/ratings/xxx> ;
rev:hasReview <http://soa4all.isoco.net/luf/comments/yyy> ;
tags:tag <http://soa4all.isoco.net/luf/taggings/zzz> .
<http://soa4all.isoco.net/luf/ratings/xxx>
rdf:Type rev:Review ;
rev:rating "3" ;
rev:minRating "1" ;
rev:maxRating "5" ;
rev:reviewer <http://example.com/users#user1> ;
rev:createdOn "2010-06-22T12:29:28+0200"^^xsd:dateTime .
<http://soa4all.isoco.net/luf/comments/yyy>
rdf:Type rev:Review ;
rev:text "This is a comment" ;
rev:reviewer <http://example.com/users#user1> ;
rev:createdOn "2010-06-22T10:59:01+0200"^^xsd:dateTime .
<http://soa4all.isoco.net/luf/taggings/zzz>
rdf:Type tags:Tagging ;
tags:associatedTag "one tag" , "other tag" ;
tags:taggedBy <http://example.com/users#user1> ;
tags:taggedOn "2010-06-22T13:03:05+0200"^^xsd:dateTime .
http://example.com/items#item1
http://soa4all.isoco.net/luf/comments/yyy
http://example.com/users#user1This is
a comment
hasReview
hasReviewertext
¿Qué necesitamos? (I)
25
• Un repositorio RDF:– Para almacenar los datos
semánticamente.– P.ej. SESAME
• http://www.openrdf.org/
• Desplegar en Tomcat
RDF repository(Sesame)
SPARQL
¿Qué necesitamos? (II)
26
• Un frontend Linked Data:– Para exponer los datos como Linked Data
(con content negotiation, etc.)– P.ej. Pubby
• http://www4.wiwiss.fu-berlin.de/pubby/
• Desplegar en Tomcat
RDF repository(Sesame)
LD Frontend(Pubby)
SPARQLquery
LDaccess
¿Qué necesitamos? (III)
27
• Y ya tenemos los datos expuestos como Linked Data con Pubby:– Acceso HTML:
• [base]/comments/73ab5e51d203587be87b1b3bbb4f3cc6• [base]/ratings/643e74d8389277dd26907ea56856cbd4• [base]/taggings/675330fa199511c3098672a200d7834b
– Con content-negotiation. También ofrece los datos como RDF/XML:• ?output=n3• ?output=xml
¿Qué necesitamos? (III)
28
• Una API
RDF repository(Sesame)
REST API LD Frontend(Pubby)
RDF2Go
POSTfeedback
GETfeedback
SPARQLquery
LDaccess
Añadidos (I)
• P.ej. RDF2Go:http://rdf2go.semweb4j.org/
– Abstracción java sobre repositorios RDF
– Programación independiente del repositorio
– Alternativa, programar sobre la interfaz del repositorio
29
• Un SPARQL explorer
RDF repository(Sesame)
REST API LD Frontend(Pubby)
RDF2Go
POSTfeedback
GETfeedback
SPARQLquery
LDaccess
SPARQL explorer(SNORQL)
SPARQLVia Web
Añadidos (II)
30
• Snorql:– SPARQL explorer
• http://wiki.github.com/kurtjx/SNORQL/
– Ejemplo:• http://soa4all.isoco.net/luf/snorql/
Añadidos (II)
Luego volvemos para hacer consultas…
31
Agenda
» Re-Intro Linked Data» (Motivación)
» Publicando Linked Data» (un ejemplo)
» Consumiendo Linked Data» (ejemplos)
» “Ejercicios”» (Un poco de SPARQL)
32
• Navegadores Linked Data (páginas y extensiones sobre navegadores, etc.)– Tabulator
– Disco
– LENA
– Marble
– VisiNav
– Zitgist
– …
Consumiendo Linked Data: Navegadores
Ejemplo de rating en Zitgist:
33
• Herramientas para visualizar relaciones.• Ejemplo RelFinder:
– http://www.visualdataweb.org/relfinder/relfinder.php
Consumiendo Linked Data: Visualizadores de relaciones
Ejemplo: Relación entre Iniesta y Gasol
34
“Ejercicio” en RelFinder
Relaciones entre “Pulp Fiction”, “Kill Bill” y “Reservoir Dogs”
35
• Consumiendo Linked Data con SPARQL– Usando los SPARQL endpoints que exponen los diferentes
conjuntos de datos– Ejemplos:
• Dbpedia: http://dbpedia.org/sparql• UK Government: http://data.gov.uk/sparql• USA Government: http://semantic.data.gov/sparql• Musicbrainz: http://dbtune.org/musicbrainz/sparql
…• LUF: http://soa4all.isoco.net/luf/sparql
– CKAN data hub: http://ckan.net/
Consumiendo Linked Data: Usando SPARQL
36
• Un SPARQL endpoint es un servicio REST• HTTP GET con parámetro query
– GET /sparql?query=PREFIX+...
• Respuestas: – (usando la cabecera ACCEPT o vía parámetro ej. “&out=json”)
– RDF– XML– (JSON)
Usando SPARQL
37
SPICES
(Semantic Platform for the Interaction and Consumption of Enriched Services)
http://soa4all.isoco.net/spices/iServe
(Linked Data services repository)http://iserve.kmi.open.ac.uk/browser.html
Ejemplos de integración de LUF
(via consultas al SPARQL endpoint)
38
• Algunos ejemplos– RAP – RDF API for PHP
• http://www4.wiwiss.fu-berlin.de/bizer/rdfapi/index.html
– Sesame (Java)• http://www.openrdf.org/
– Jena / ARQ (Java)• http://jena.sourceforge.net
– PySPARQL (Python)• http://code.google.com/p/pysparql
– …
Librerías para SPARQL
Usada en la página de LUF
http://soa4all.isoco.net/luf/about
39
Visualizando grafos con SPARQL
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wsl: <http://cms-wg.sti2.org/ns/minimal-service-model#>
SELECT DISTINCT ?op ?labelOp
WHERE {
<http://iserve.kmi.open.ac.uk/...#LastFmEvents> wsl:hasOperation ?op .
OPTIONAL{ ?op rdfs:label ?labelOp . }
}
SPARQL y visualización
40
• The New York Times: Alumni In The News– http://data.nytimes.com/schools/schools.html
Ejemplo de consumo de Linked Data: NY Times
41
• The New York Times: Código fuente disponible
… y son consultas SPARQL
Ejemplo de consumo de Linked Data: NY Times
42
Ejemplo de Usoen la Web de iSOCO Lab
http
://la
b.is
oco.
net
+
43
Recomendaciones
Ejemplo sacando partido de enlazar(work-in-progress)
“El Viajero” como Linked Data
“Guía Santillana” como Linked Data
Ratings de LUF
Datos meteorológicos (AEMET)
Contexto de Usuarios (RDF)
+
44
Servicios de reconocimiento de nombres de entidades
(en textos en lenguaje natural)
Ejemplos:
Named Entity Recognition sobre Linked Data
http://dbpedia.org/spotlight
http://www.alchemyapi.com/http://www.opencalais.com/
45
Ejemplo NER en miKrow
Company: Vodafone UK (info)
Uso de Linked Data, para ir más allá de la ontología de dominio
http://mikrow.isoco.net
46
Agenda
» Re-Intro Linked Data» (Motivación)
» Publicando Linked Data» (un ejemplo)
» Consumiendo Linked Data» (ejemplos)
» “Ejercicios”» (Un poco de SPARQL)
47
Últimos ratings en LUF
Últimos 5 ratings en LUF
¿Cómo sería para los últimos ratings de 5 estrellas?
http://soa4all.isoco.net/luf/snorql
48
Fútbol en la DBpediahttp://dbpedia.org/snorql
Jugadores de fútbol de la provincia de Albacete que han ganado la Copa del Mundo
49
http://dbpedia.org/page/Andrés_Iniesta
¿Cómo sería para los jugadores de fútbol nacidos en España que han ganado la Copa del Mundo de fútbol?
Una pista…
Fútbol en la DBpedia
50
22 jugadores y no 23 ¿?
Fútbol en la DBpedia
51
http://dbpedia.org/page/Fernando_Torres
Ojo con los datos…
Fútbol en la DBpedia
52
Ejemplo de app: Linked Data Movie Quiz
Creando preguntas sobre cine usando la Linked Movie Data Base
http://10k.aneventapart.com/Uploads/310/
Extra! (idea) Usuarios al jugar pueden identificar errores en el set de datos
53
SPARQL en Linked Data Movie Quiz
https://github.com/lamboratory/Linked-Data-Movie-Quiz
Podemos ver las consultas SPARQL usadas para generar las preguntas…
54
Actores en la Linked Movie DataBase
http://data.linkedmdb.org/snorql
Películas en donde sale Marlon Brando, con sus personajes, directores y años
Corripio, c/Fuencarral 102
…
55
Corripio, c/Fuencarral 102
¿Cómo sería para actores que hayan hecho de Vito Corleone?
Actores en la Linked Movie DataBase
56
• Consultar un repositorio está bien…• …pero ¿y si quiero consultar sobre varios a la vez?• Algunas opciones:
– Varias queries– Queries federadas (usando “SERVICE” en SPARQL 1.1)– Juntando sets de datos– Usar repositorio con varios datasets
Consultando más de un dataset a la vez
Veremos ejemplo
Veremos ejemplo
57
Queries federadas:Personajes de la Biblia
Hijos de Abraham
58
Bibleontology
DBpedia
Personajes de la Biblia:Bible Ontology y DBpedia
59
Hijos de Abraham con abstract en castellano en la DBpedia
Queries federadas: Ejemplo
60
Consulta a repositorio centralizado
Corripio, c/Fuencarral 102 http://factforge.net/sparql
Opción para queries sobre distintos datasets: Usar un repositorio que incluya varios. P.ej.
“Ejercicio”: ¿Qué datos saca esta query?
61
Visualizando datos en FactForge
Corripio, c/Fuencarral 102
Datos sobre playmates en FactForge, incluyendo inferidas
Navegación facetada directamente con exhibit
Ojo a algunos datos en distintos formatos
62
Agradecimientos / Acknowledgements
– Juan Sequeda @juansequeda(many ideas from his Consuming Linked Data slides at SemTech2010)
– Selección española de fútbol, Marlon Brando, Hugh Heffner, personajes bíblicos…;)
63
¿Quieres innovar?
Barcelona
Tel +34 935 677 200
Edificio Testa A
C/ Alcalde Barnils, 64-68
St. Cugat del Vallès
08174 Barcelona
Madrid
Tel +34 913 349 797
Av. del Partenón, 16-18 1,7
28042 Madrid
Valencia
Tel +34 963 467 143
Oficina 107
C/ Prof. Beltrán Báguena, 4
46009 Valencia
Pamplona
Tel +34 948 102 408
Parque Tomás
Caballero, 2, 6º-4ª
31006 Pamplona
¿Dónde estamos?Contacta con iSOCO
Guillermo Álvaro [email protected]
@guillelamb