SlideShare una empresa de Scribd logo
Linked data con R
2
#LDR_JPD15
Contenido
• Datos enlazados
• DBpedia del español
• Paquetes R
DATOS ENLAZADOS
¿Qué son?
4
#LDR_JPD15
Terminología
Bla, bla, bla, RDF, bla, bla,
blaaa, SPARQL, bla, bla, bla,
Semantic Web, bla, bla, bla,
bla, bla, bla, Linked Data,
bla, bla Open Data, bla, bla,
bla, blaaaaaa, bla, bla,
blaaa, bla, bla, Ontologías,
blaaa, blaaa, bla..
5
#LDR_JPD15
Terminología
6
#LDR_JPD15
Terminología
7
#LDR_JPD15
Datos  Business?
8
#LDR_JPD15
Datos RDF: Datos con sentido
9
#LDR_JPD15
Datos con semántica
• Semántica porque
– Enlaza con datos de una (o varias) ontologías
• Una ontología es un modelo matemático que permite
– Razonar  Crear nuevos datos
– Preguntar si algo existe o una afirmación es cierta
– Sin enlaces a ontologías no hay semántica
10
#LDR_JPD15
Datos con semántica
• Ejemplo: “Cervantes escribió el Quijote”
“Miguel de Cervantes”@es
http://es.dbpedia.org/resource/Miguel_de_Cervantes
http://dbpedia.org/ontology/Writer
“Cervantes”
dbpedia:alias
rdf:type
rdfs:label
“Don Quijote de la Mancha”@es
http://es.dbpedia.org/resource/Don_Quijote_de_la_Mancha
dbpedia:author
rdfs:label
http://dbpedia.org/ontology/Artist
rdfs:subClassOf
11
#LDR_JPD15
Datos con semántica
• Razono: “Cervantes es un artista”
“Miguel de Cervantes”@es
http://es.dbpedia.org/resource/Miguel_de_Cervantes
http://dbpedia.org/ontology/Writer
“Cervantes”
dbpedia:alias
rdf:type
rdfs:label
“Don Quijote de la Mancha”@es
http://es.dbpedia.org/resource/Don_Quijote_de_la_Mancha
dbpedia:author
rdfs:label
http://dbpedia.org/ontology/Artist
rdfs:subClassOf
rdf:type
12
#LDR_JPD15
http://es.dbpedia.org/Yann_Martel
Datos con semántica
• Añado más enlaces y datos
http://es.dbpedia.org/resource/La_vida_de_Pi
dbpedia:author
dbpedia:literaryGenreOf
http://upload.wikimedia.org/Wikipedia/commons/thumbd...
dbpedia:thumbnail
http://es.dbpedia.org/resource/Novela_de_aventuras
dbpedia:literaryGenre
13
#LDR_JPD15
Datos con semántica
• Añado más enlaces y datos
14
#LDR_JPD15
Datos con semántica
• Añado más enlaces y datos
15
#LDR_JPD15
Datos con semántica
• Conjunto de datos (dataset)
DBPEDIA DEL ESPAÑOL
Datos en español
17
#LDR_JPD15
Datos con semántica
• Conjunto de datos (dataset)
18
#LDR_JPD15
DBpedia
• Conjunto de datos de la Wikipedia
DBpedia
19
#LDR_JPD15
DBpedia del español (esDBpedia)
• Conjunto de datos de la Wikipedia del idioma
español
esDBpedia
20
#LDR_JPD15
DBpedia: extracción de Linked Data
RDF Triple
store
Rendering
21
#LDR_JPD15
2007
http://lod-cloud.net/versions/2007-10-08/lod-cloud.png
25 datasets
DBpedia, núcleo de Linked Data
22
#LDR_JPD15
2010
http://lod-cloud.net/versions/2011-09-19/lod-cloud_colored.png
203 datasets
DBpedia, núcleo de Linked Data
23
#LDR_JPD15
2011
http://lod-cloud.net/versions/2011-09-19/lod-cloud.png
295 datasets
DBpedia, núcleo de Linked Data
24
#LDR_JPD15
2014
570 datasets
DBpedia, núcleo de Linked Data
26
#LDR_JPD15
esDBpedia y la lingüística
• Parte de
Linguistic
LOD cloud
27
#LDR_JPD15
Hasta aquí… ¿bien?...
DATOS, DATOS, DATOS
Dame
29
#LDR_JPD15
¿Qué datos tiene DBpedia?
• DBpedia (idioma inglés). Datos septiembre 2014 (última
versión)
• Cosas (entradas Wikipedia): 4.58 millones
– Clasificadas en la ontología DBpedia: 4.22
1.445.000 personas 735.000 lugares
241.000 organizaciones 123.000 discos 87.000 películas…
• DBpedias de 125 idiomas
• Enlaces:
25.2 millones a imágenes 29.8 millones a páginas web externas
50.0 millones a otros RDF datasets 80,9 millones a categorías Wikipedia
41.2 millones a categorías YAGO
• Tripletas (triples)
3000 millones de triples (583 millones de la versión inglesa)
(No están todos en el EP)
30
#LDR_JPD15
La ontología DBpedia
• Es una ontología OWL
–Con 685 clases
–Con 2679 propiedades
• 1600 DBpediaDatatypeProperty
• 1079 DBpediaObjectProperty
– Equivalencias con schema.org
• 47 owl:equivalentClass
• 35 owl:equivalentProperty
31
#LDR_JPD15
Ver las clases y propiedades
http://mappings.dbpedia.org/server/ontology/classes
http://mappings.dbpedia.org/server/ontology/classes/BullFighter
http://mappings.dbpedia.org/index.php/OntologyProperty:DebutTeam
SPARQL
Sacando datos a un dataset de linked data
33
#LDR_JPD15
Sacando datos del EP
• EP = EndPoint
• “El EP” de esDBpedia
http://es.dbpedia.org/sparql
34
#LDR_JPD15
Sacando datos del EP
• La consulta
(“la query”)
– Sintaxis similar a
SQL
(bases de datos
tradicionales)
35
#LDR_JPD15
Sacando datos del EP
• Formatos de
salida
– Por omisión HTML
– Otros formatos
• JSON
• CSV
• RDF
• …
36
#LDR_JPD15
Sacando datos del EP
• Ejemplo “zero”
– Número de instancias de cada clase
de la ontología DBpedia
SELECT ?class
(COUNT(?s) AS ?count)
WHERE {
?s a ?class .
filter (strstarts(str(?class),
"http://dbpedia.org/ontology"
))
}
GROUP BY ?class
ORDER BY DESC(?count)
37
#LDR_JPD15
¡¡Alto ahí!!. SPARQuéeel?????
38
#LDR_JPD15
Aprende SPARQL
39
#LDR_JPD15
Aprende SPARQL
• A base de ejemplos
– En el wiki de esDBpedia
40
#LDR_JPD15
Aprende SPARQL
• A base de ejemplos
– En el wiki de esDBpedia
41
#LDR_JPD15
Queries “duras”
• Hay queries que necesitan mucho tiempo de cálculo
• Son rechazadas por el EP
• Ejemplo
– Número de instancias de cada propiedad de la ontología DBpedia
• Esta suele rechazarse por ser muy pesada
SELECT ?p (COUNT(?s) AS ?count) WHERE {
?s ?p ?o .
filter (strstarts(str(?p), "http://dbpedia.org/ontology"))
} GROUP BY ?p ORDER BY DESC(?count)
42
#LDR_JPD15
Más datasets
• The Data hub
– Filtra por
• Tags
– lod
– format-rdf
• Formats
– api/sparql
43
#LDR_JPD15
Hasta aquí… ¿bien?...
44
#LDR_JPD15
Hasta aquí… ¿bien?...
45
#LDR_JPD15
Hasta aquí… ¿bien?...
USANDO R
¡¡Por fin!!
47
#LDR_JPD15
Package SPARQL
library(SPARQL)
endpoint <- "http://es.dbpedia.org/sparql"
query <-
'
PREFIX dcterms: <http://purl.org/dc/terms/>
SELECT ?torero ?cantante WHERE{
?torero rdf:type dbpedia-owl:BullFighter .
?torero dbpedia-owl:spouse ?cantante .
?cantante dcterms:subject
<http://es.dbpedia.org/resource/Categoría:Cantantes_de_coplas>
}
'
reslist <- SPARQL(endpoint,query)
df <- reslist$results
df
48
#LDR_JPD15
Package SPARQL
#continuación…
nss <- c("esdbres", "http://es.dbpedia.org/resource/")
reslist <- SPARQL(endpoint,query, ns = nss)
df <- reslist$results
df
• Uso de argmento ns
– Para reducir tamaño de resultado
49
#LDR_JPD15
Múltiples maneras de preguntar
• Científicos españoles
SELECT ?person WHERE{
?person dcterms:subject
<http://es.dbpedia.org/resource/Categoría:Científicos_de_España>
}
PREFIX esdbpr: <http://es.dbpedia.org/resource/>
SELECT ?person WHERE{
?person rdf:type dbpedia-owl:Scientist .
?person dbpedia-owl:country esdbpr:España .
}
Forma1 resultado: 66 científicos
Forma2 resultado: 143 científicos
50
#LDR_JPD15
Múltiples maneras de preguntar
• Desde SPARQL EP: Científicos españoles
– UNION
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX esdbpr: <http://es.dbpedia.org/resource/>
SELECT ?person WHERE{
{
?person dcterms:subject
<http://es.dbpedia.org/resource/Categoría:Científicos_de_España>
}
UNION
{
?person rdf:type dbpedia-owl:Scientist .
?person dbpedia-owl:country esdbpr:España .
}
}
resultado: 209 = 66 + 143
51
#LDR_JPD15
Múltiples maneras de preguntar
• Desde SPARQL EP: Científicos españoles
– UNION
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX esdbpr: <http://es.dbpedia.org/resource/>
SELECT DISTINCT ?person WHERE{
{
?person dcterms:subject
<http://es.dbpedia.org/resource/Categoría:Científicos_de_España>
}
UNION
{
?person rdf:type dbpedia-owl:Scientist .
?person dbpedia-owl:country esdbpr:España .
}
}
resultado: 200
(había 9 duplicados)
52
#LDR_JPD15
Múltiples maneras de preguntar
• Desde R: Científicos españoles
library(SPARQL)
endpoint <- "http://es.dbpedia.org/sparql"
nss <- c("esdbres", "http://es.dbpedia.org/resource/")
queryF1 <-
'
SELECT ?person WHERE{
?person dcterms:subject
<http://es.dbpedia.org/resource/Categoría:Científicos_de_España>
}
'
queryF2 <-
'
PREFIX esdbpr: <http://es.dbpedia.org/resource/>
SELECT ?person WHERE{
?person rdf:type dbpedia-owl:Scientist .
?person dbpedia-owl:country esdbpr:España .
}
'
reslistF1 <- SPARQL(endpoint,queryF1, ns = nss)
reslistF2 <- SPARQL(endpoint,queryF2, ns = nss)
#Devuelve los 9 comunes a las dos queries
intersect (t(reslistF1$results), #Si devuelve una única columna “se lía” y necesita t()
t(reslistF2$results))
53
#LDR_JPD15
Siguiendo la pista
• Ejemplo: Políticos
• Veo la página de Rajoy en Wikipedia
• Veo qué nombre de recurso tiene
– “Mariano_Rajoy”
• Busco sus datos en esDBpedia
– http://es.dbpedia.org/resource/Mariano_Rajoy
– Veo properties
• occupation
• party
• …
54
#LDR_JPD15
Siguiendo la pista
• Ejemplo: Políticos
• Obteniendo los datos de Rajoy en esDBpedia
library(SPARQL)
endpoint <- "http://es.dbpedia.org/sparql"
nss <- c("esdbres", "http://es.dbpedia.org/resource/")
query <-
'
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX esdbp: <http://es.dbpedia.org/property/>
PREFIX esdbr: <http://es.dbpedia.org/resource/>
select * where{
esdbr:Mariano_Rajoy ?p ?v
}
'
reslist <- SPARQL(endpoint,query, ns = nss) #Salen 550 datos
head(reslist$results)
55
#LDR_JPD15
Siguiendo la pista
• Ejemplo: Políticos
• Políticos y su partido político
library(SPARQL)
endpoint <- "http://es.dbpedia.org/sparql"
nss <- c("esdbres", "http://es.dbpedia.org/resource/")
query <-
'
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX esdbp: <http://es.dbpedia.org/property/>
PREFIX esdbr: <http://es.dbpedia.org/resource/>
select ?uri ?par where{
?uri dbo:occupation esdbr:Político .
?uri dbo:party ?par
}
ORDER BY ?par
'
reslist <- SPARQL(endpoint,query, ns = nss)
nrow(reslist$results)
#Salen 1514 de todas partes del mundo
56
#LDR_JPD15
Siguiendo la pista
• Ejemplo: Políticos
• ¿Cómo saco los políticos españoles?
• Ver preguntas abierta 3 en wiki esDBpedia
???
57
#LDR_JPD15
Coordenadas de recursos
library(ggmap) #Para geocode(), get_map(). Carga ggplot2
library(SPARQL)
endpoint <- "http://es.dbpedia.org/sparql"
query <-
'SELECT * WHERE {
?uri geo:lat ?lat .
?uri geo:long ?lon .
?uri rdf:type ?thetype .
FILTER ( (?lat> 40.0 && ?lat < 41.15) &&
(?lon> -4.5 && ?lon < -3.1)
&& regex(?thetype, "^http://schema.org")
)
}
'
reslist <- SPARQL(endpoint,query)
df <- reslist$results
df$thetype <- factor(df$thetype)
map.center <- geocode("Madrid, Spain")
map <- get_map(c(lon=map.center$lon, lat=map.center$lat),
source="google", zoom=9)
ggmap(map) + geom_point(data=df,
aes(x=lon, y=lat, colour=thetype, position="dodge"),
size=6, alpha=0.8
)
58
#LDR_JPD15
Packages rrdf y rrdflibs
library("rrdf")
#Descarga de la ontología DBpedia
db2014URL <- "http://data.dws.informatik.uni-mannheim.de/dbpedia/2014/dbpedia_2014.owl.bz2"
tempBZ2 <- tempfile()
download.file(db2014URL, tempBZ2) #Lo guarda en tempBZ2
con <- bzfile(tempBZ2) #descomprimo
lines <-readLines(con) #Tengo las líneas en memoria
unlink(tempBZ2)
#Guardo en un fichero (requerido por load.rdf())
tempOWL <- tempfile()
write(lines, file=tempOWL )
model <- load.rdf(tempOWL, format="RDF/XML")
unlink(tempOWL)
#Ya tengo el model y todos los ficheros aux borrados
summarize.rdf(model)
#[1] "Number of triples: 29402"
59
#LDR_JPD15
Packages rrdf y rrdflibs
#Continuación…
#Clases con label
query <-
'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?class ?classLabel WHERE {
?class rdf:type rdfs:Class.
?class rdfs:label ?classLabel.
}'
#OJO! matrix con variables ?class y ?classLabel
res <- sparql.rdf(model, query)
#Lo paso a data.frame
df <- as.data.frame(res, stringsAsFactors = TRUE)
#Pongo TRUE para que sea mono el summary
summary(df)
60
#LDR_JPD15
Packages rrdf y rrdflibs
#Continuación…
nrow(df)
#En total hay 3520, pero muchas están repetidas 13 veces, 12…
#Elimino duplicados
length(unique(df$class))
#Ahora salen 683
#¿Cómo selecciono las labels en inglés?
????
61
#LDR_JPD15
Packages rrdf y rrdflibs
#Continuación…
#¿Cómo selecciono las labels en inglés?
query <-
'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?class ?classLabel WHERE {
?class rdf:type rdfs:Class.
?class rdfs:label ?classLabel.
FILTER(lang(?classLabel) ="en")
}'
res <- sparql.rdf(model, query)
df <- as.data.frame(res, stringsAsFactors = TRUE)
summary(df) #Para ver que no hay multiplicidad
nrow(df) #Salen 683 classes
62
#LDR_JPD15
63
Muchas gracias por vuestra atención
Mariano.Rico@upm.es

Más contenido relacionado

PDF
Diseño de Ontologías: Protégé - OWL: SPARQL
KEY
Web semántica y linked data la web como bd
PPTX
Mini tutorial rdflib
PDF
Jorge lopez web_apps
PDF
Introducción a Linked Data [esp]
PPTX
Wikidata: qué es y cómo subirse al carro
Diseño de Ontologías: Protégé - OWL: SPARQL
Web semántica y linked data la web como bd
Mini tutorial rdflib
Jorge lopez web_apps
Introducción a Linked Data [esp]
Wikidata: qué es y cómo subirse al carro

Destacado (11)

PDF
DBpedia del idioma español
PPTX
Presentación d bpedia
PPTX
PDF
DBpedia Latinoamérica en ENC 2015
PDF
Web Semántica y Linked Data
PPT
Maps, projection and scale 2012
PDF
Elaboración de mapas para publicaciones científicas y documentos de divulgación
PPTX
map projections
PPTX
Map Projections
PPTX
Map projections
PPTX
Consultas sparql
DBpedia del idioma español
Presentación d bpedia
DBpedia Latinoamérica en ENC 2015
Web Semántica y Linked Data
Maps, projection and scale 2012
Elaboración de mapas para publicaciones científicas y documentos de divulgación
map projections
Map Projections
Map projections
Consultas sparql
Publicidad

Similar a Linked data con R (20)

PPTX
Presentación d bpedia
PPTX
Presentación d bpedia
PDF
Curso integración Web Semántica
PPTX
Sparql
PPTX
PPTX
Sparql
PPTX
Sparql
PPT
Web of data y los repositorios institucionales
PPT
Charla Biblioteca Nacional, 24 de julio de 2014
DOCX
Evaluación de base de datos rdf
PPTX
Sparql
PPT
Charla 9a Jornada de Usuarios Ex-Libris, 30 de septiembre de 2014
PPT
Linked Data In Use (Cursos de Verano UPM 2011)
PPTX
Linked Open Data - Datos Abiertos Enlazados
PPTX
Sparql
PPT
La Web Semantica
PPTX
Web Semántica / Celso Gonzales
PPT
Seminario "Uso de TICs en la Enseñanza de la Historia y el Patrimonio Cultura...
PDF
Web semántica y lógica
PDF
Life Sciences Linked Data
Presentación d bpedia
Presentación d bpedia
Curso integración Web Semántica
Sparql
Sparql
Sparql
Web of data y los repositorios institucionales
Charla Biblioteca Nacional, 24 de julio de 2014
Evaluación de base de datos rdf
Sparql
Charla 9a Jornada de Usuarios Ex-Libris, 30 de septiembre de 2014
Linked Data In Use (Cursos de Verano UPM 2011)
Linked Open Data - Datos Abiertos Enlazados
Sparql
La Web Semantica
Web Semántica / Celso Gonzales
Seminario "Uso de TICs en la Enseñanza de la Historia y el Patrimonio Cultura...
Web semántica y lógica
Life Sciences Linked Data
Publicidad

Más de Mariano Rico (11)

PDF
Lexicalizing ontologies with Lemonade Tools
PDF
Redes sociales en el ámbito investigador y académico
PDF
Plagio vs. Síntesis
PDF
Redes sociales en el ámbito académico y científico
PDF
Presencia en la web: redes científicas y difusión de publicaciones
PDF
Curso LaTeX. UAM, 2012
PPTX
Usando flex en Windows
PPTX
Curso Herramientas Avanzadas de Apoyo a la Investigación (versión 2011)
PPT
Introducción a LaTeX 2010
PPT
Curso HIAI Versión Julio 2009
PPT
Curso "Herramientas Informáticas de apoyo a la investigación"
Lexicalizing ontologies with Lemonade Tools
Redes sociales en el ámbito investigador y académico
Plagio vs. Síntesis
Redes sociales en el ámbito académico y científico
Presencia en la web: redes científicas y difusión de publicaciones
Curso LaTeX. UAM, 2012
Usando flex en Windows
Curso Herramientas Avanzadas de Apoyo a la Investigación (versión 2011)
Introducción a LaTeX 2010
Curso HIAI Versión Julio 2009
Curso "Herramientas Informáticas de apoyo a la investigación"

Último (20)

PDF
dhjhfjhjcnjhghhhdfhuhhchchuuhuhduhduddyhdu
PDF
INFORME ESPECIAL BICENTENARIO DE BOLIVIA.pdf
PPTX
EXPOSICIÓN 2021.pptxhgdfshdghsdgshdghsds
PPTX
Copia de Plantilla VSL Method Como crear videos ee 7 minutos hipnoticods.pptx
PDF
REPORTE DE VICTIMAS POR HOMICIDIO DOLOSO IRAPUATO JULIO 2025
PPTX
ESTRADA ORDEN INTERNO 111111111111111111
PDF
Pobreza porcentual en el mundo y sistemas socioeconómicos (1945-2030).pdf
PDF
6°-Básico-Matemática-Diagrama-de-tallo-y-hoja_y_probabilidades.pdf
PDF
RADIOGRAFIA DEL PARQUE AUTOMOTOR EN BOLIVA Y PROYECCIONES 2025-2030.pdf
PPTX
Inteligencia_Artificialdelosk_Mujer.pptx
PPTX
DOROTHEA E OREM EXPO.pptx de una teoridta importante
PPTX
Tutoria 3. Unidad 2 PRUEBAS BIOLÓGICAS.pptx
PPTX
FACTORES DE RIESGOS EN EL PERSONAL DE SALUD 2 DIAPOSITIVAS.pptx
PPTX
lareformaprevisional-091013175510-phpapp01.pptx
PPTX
fisioterapia 6 semestre - ---- serealizo
PDF
Presentación_rendición_de_cuentas_2020_26-FEB-2021.pdf
PDF
MORFOLOGIA (ASPECTO FORMACION DE PALABRAS).pdf
PDF
Riesgos en Negociaciones_comercio exterior.pdf
PPTX
Introducción al analisis de datos con Power bi
PDF
PRESENTACION DE LA ASIGNATURA materiales no convencionales.pdf
dhjhfjhjcnjhghhhdfhuhhchchuuhuhduhduddyhdu
INFORME ESPECIAL BICENTENARIO DE BOLIVIA.pdf
EXPOSICIÓN 2021.pptxhgdfshdghsdgshdghsds
Copia de Plantilla VSL Method Como crear videos ee 7 minutos hipnoticods.pptx
REPORTE DE VICTIMAS POR HOMICIDIO DOLOSO IRAPUATO JULIO 2025
ESTRADA ORDEN INTERNO 111111111111111111
Pobreza porcentual en el mundo y sistemas socioeconómicos (1945-2030).pdf
6°-Básico-Matemática-Diagrama-de-tallo-y-hoja_y_probabilidades.pdf
RADIOGRAFIA DEL PARQUE AUTOMOTOR EN BOLIVA Y PROYECCIONES 2025-2030.pdf
Inteligencia_Artificialdelosk_Mujer.pptx
DOROTHEA E OREM EXPO.pptx de una teoridta importante
Tutoria 3. Unidad 2 PRUEBAS BIOLÓGICAS.pptx
FACTORES DE RIESGOS EN EL PERSONAL DE SALUD 2 DIAPOSITIVAS.pptx
lareformaprevisional-091013175510-phpapp01.pptx
fisioterapia 6 semestre - ---- serealizo
Presentación_rendición_de_cuentas_2020_26-FEB-2021.pdf
MORFOLOGIA (ASPECTO FORMACION DE PALABRAS).pdf
Riesgos en Negociaciones_comercio exterior.pdf
Introducción al analisis de datos con Power bi
PRESENTACION DE LA ASIGNATURA materiales no convencionales.pdf

Linked data con R

  • 2. 2 #LDR_JPD15 Contenido • Datos enlazados • DBpedia del español • Paquetes R
  • 4. 4 #LDR_JPD15 Terminología Bla, bla, bla, RDF, bla, bla, blaaa, SPARQL, bla, bla, bla, Semantic Web, bla, bla, bla, bla, bla, bla, Linked Data, bla, bla Open Data, bla, bla, bla, blaaaaaa, bla, bla, blaaa, bla, bla, Ontologías, blaaa, blaaa, bla..
  • 9. 9 #LDR_JPD15 Datos con semántica • Semántica porque – Enlaza con datos de una (o varias) ontologías • Una ontología es un modelo matemático que permite – Razonar  Crear nuevos datos – Preguntar si algo existe o una afirmación es cierta – Sin enlaces a ontologías no hay semántica
  • 10. 10 #LDR_JPD15 Datos con semántica • Ejemplo: “Cervantes escribió el Quijote” “Miguel de Cervantes”@es http://es.dbpedia.org/resource/Miguel_de_Cervantes http://dbpedia.org/ontology/Writer “Cervantes” dbpedia:alias rdf:type rdfs:label “Don Quijote de la Mancha”@es http://es.dbpedia.org/resource/Don_Quijote_de_la_Mancha dbpedia:author rdfs:label http://dbpedia.org/ontology/Artist rdfs:subClassOf
  • 11. 11 #LDR_JPD15 Datos con semántica • Razono: “Cervantes es un artista” “Miguel de Cervantes”@es http://es.dbpedia.org/resource/Miguel_de_Cervantes http://dbpedia.org/ontology/Writer “Cervantes” dbpedia:alias rdf:type rdfs:label “Don Quijote de la Mancha”@es http://es.dbpedia.org/resource/Don_Quijote_de_la_Mancha dbpedia:author rdfs:label http://dbpedia.org/ontology/Artist rdfs:subClassOf rdf:type
  • 12. 12 #LDR_JPD15 http://es.dbpedia.org/Yann_Martel Datos con semántica • Añado más enlaces y datos http://es.dbpedia.org/resource/La_vida_de_Pi dbpedia:author dbpedia:literaryGenreOf http://upload.wikimedia.org/Wikipedia/commons/thumbd... dbpedia:thumbnail http://es.dbpedia.org/resource/Novela_de_aventuras dbpedia:literaryGenre
  • 13. 13 #LDR_JPD15 Datos con semántica • Añado más enlaces y datos
  • 14. 14 #LDR_JPD15 Datos con semántica • Añado más enlaces y datos
  • 15. 15 #LDR_JPD15 Datos con semántica • Conjunto de datos (dataset)
  • 17. 17 #LDR_JPD15 Datos con semántica • Conjunto de datos (dataset)
  • 18. 18 #LDR_JPD15 DBpedia • Conjunto de datos de la Wikipedia DBpedia
  • 19. 19 #LDR_JPD15 DBpedia del español (esDBpedia) • Conjunto de datos de la Wikipedia del idioma español esDBpedia
  • 20. 20 #LDR_JPD15 DBpedia: extracción de Linked Data RDF Triple store Rendering
  • 25. 26 #LDR_JPD15 esDBpedia y la lingüística • Parte de Linguistic LOD cloud
  • 28. 29 #LDR_JPD15 ¿Qué datos tiene DBpedia? • DBpedia (idioma inglés). Datos septiembre 2014 (última versión) • Cosas (entradas Wikipedia): 4.58 millones – Clasificadas en la ontología DBpedia: 4.22 1.445.000 personas 735.000 lugares 241.000 organizaciones 123.000 discos 87.000 películas… • DBpedias de 125 idiomas • Enlaces: 25.2 millones a imágenes 29.8 millones a páginas web externas 50.0 millones a otros RDF datasets 80,9 millones a categorías Wikipedia 41.2 millones a categorías YAGO • Tripletas (triples) 3000 millones de triples (583 millones de la versión inglesa) (No están todos en el EP)
  • 29. 30 #LDR_JPD15 La ontología DBpedia • Es una ontología OWL –Con 685 clases –Con 2679 propiedades • 1600 DBpediaDatatypeProperty • 1079 DBpediaObjectProperty – Equivalencias con schema.org • 47 owl:equivalentClass • 35 owl:equivalentProperty
  • 30. 31 #LDR_JPD15 Ver las clases y propiedades http://mappings.dbpedia.org/server/ontology/classes http://mappings.dbpedia.org/server/ontology/classes/BullFighter http://mappings.dbpedia.org/index.php/OntologyProperty:DebutTeam
  • 31. SPARQL Sacando datos a un dataset de linked data
  • 32. 33 #LDR_JPD15 Sacando datos del EP • EP = EndPoint • “El EP” de esDBpedia http://es.dbpedia.org/sparql
  • 33. 34 #LDR_JPD15 Sacando datos del EP • La consulta (“la query”) – Sintaxis similar a SQL (bases de datos tradicionales)
  • 34. 35 #LDR_JPD15 Sacando datos del EP • Formatos de salida – Por omisión HTML – Otros formatos • JSON • CSV • RDF • …
  • 35. 36 #LDR_JPD15 Sacando datos del EP • Ejemplo “zero” – Número de instancias de cada clase de la ontología DBpedia SELECT ?class (COUNT(?s) AS ?count) WHERE { ?s a ?class . filter (strstarts(str(?class), "http://dbpedia.org/ontology" )) } GROUP BY ?class ORDER BY DESC(?count)
  • 38. 39 #LDR_JPD15 Aprende SPARQL • A base de ejemplos – En el wiki de esDBpedia
  • 39. 40 #LDR_JPD15 Aprende SPARQL • A base de ejemplos – En el wiki de esDBpedia
  • 40. 41 #LDR_JPD15 Queries “duras” • Hay queries que necesitan mucho tiempo de cálculo • Son rechazadas por el EP • Ejemplo – Número de instancias de cada propiedad de la ontología DBpedia • Esta suele rechazarse por ser muy pesada SELECT ?p (COUNT(?s) AS ?count) WHERE { ?s ?p ?o . filter (strstarts(str(?p), "http://dbpedia.org/ontology")) } GROUP BY ?p ORDER BY DESC(?count)
  • 41. 42 #LDR_JPD15 Más datasets • The Data hub – Filtra por • Tags – lod – format-rdf • Formats – api/sparql
  • 46. 47 #LDR_JPD15 Package SPARQL library(SPARQL) endpoint <- "http://es.dbpedia.org/sparql" query <- ' PREFIX dcterms: <http://purl.org/dc/terms/> SELECT ?torero ?cantante WHERE{ ?torero rdf:type dbpedia-owl:BullFighter . ?torero dbpedia-owl:spouse ?cantante . ?cantante dcterms:subject <http://es.dbpedia.org/resource/Categoría:Cantantes_de_coplas> } ' reslist <- SPARQL(endpoint,query) df <- reslist$results df
  • 47. 48 #LDR_JPD15 Package SPARQL #continuación… nss <- c("esdbres", "http://es.dbpedia.org/resource/") reslist <- SPARQL(endpoint,query, ns = nss) df <- reslist$results df • Uso de argmento ns – Para reducir tamaño de resultado
  • 48. 49 #LDR_JPD15 Múltiples maneras de preguntar • Científicos españoles SELECT ?person WHERE{ ?person dcterms:subject <http://es.dbpedia.org/resource/Categoría:Científicos_de_España> } PREFIX esdbpr: <http://es.dbpedia.org/resource/> SELECT ?person WHERE{ ?person rdf:type dbpedia-owl:Scientist . ?person dbpedia-owl:country esdbpr:España . } Forma1 resultado: 66 científicos Forma2 resultado: 143 científicos
  • 49. 50 #LDR_JPD15 Múltiples maneras de preguntar • Desde SPARQL EP: Científicos españoles – UNION PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX esdbpr: <http://es.dbpedia.org/resource/> SELECT ?person WHERE{ { ?person dcterms:subject <http://es.dbpedia.org/resource/Categoría:Científicos_de_España> } UNION { ?person rdf:type dbpedia-owl:Scientist . ?person dbpedia-owl:country esdbpr:España . } } resultado: 209 = 66 + 143
  • 50. 51 #LDR_JPD15 Múltiples maneras de preguntar • Desde SPARQL EP: Científicos españoles – UNION PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX esdbpr: <http://es.dbpedia.org/resource/> SELECT DISTINCT ?person WHERE{ { ?person dcterms:subject <http://es.dbpedia.org/resource/Categoría:Científicos_de_España> } UNION { ?person rdf:type dbpedia-owl:Scientist . ?person dbpedia-owl:country esdbpr:España . } } resultado: 200 (había 9 duplicados)
  • 51. 52 #LDR_JPD15 Múltiples maneras de preguntar • Desde R: Científicos españoles library(SPARQL) endpoint <- "http://es.dbpedia.org/sparql" nss <- c("esdbres", "http://es.dbpedia.org/resource/") queryF1 <- ' SELECT ?person WHERE{ ?person dcterms:subject <http://es.dbpedia.org/resource/Categoría:Científicos_de_España> } ' queryF2 <- ' PREFIX esdbpr: <http://es.dbpedia.org/resource/> SELECT ?person WHERE{ ?person rdf:type dbpedia-owl:Scientist . ?person dbpedia-owl:country esdbpr:España . } ' reslistF1 <- SPARQL(endpoint,queryF1, ns = nss) reslistF2 <- SPARQL(endpoint,queryF2, ns = nss) #Devuelve los 9 comunes a las dos queries intersect (t(reslistF1$results), #Si devuelve una única columna “se lía” y necesita t() t(reslistF2$results))
  • 52. 53 #LDR_JPD15 Siguiendo la pista • Ejemplo: Políticos • Veo la página de Rajoy en Wikipedia • Veo qué nombre de recurso tiene – “Mariano_Rajoy” • Busco sus datos en esDBpedia – http://es.dbpedia.org/resource/Mariano_Rajoy – Veo properties • occupation • party • …
  • 53. 54 #LDR_JPD15 Siguiendo la pista • Ejemplo: Políticos • Obteniendo los datos de Rajoy en esDBpedia library(SPARQL) endpoint <- "http://es.dbpedia.org/sparql" nss <- c("esdbres", "http://es.dbpedia.org/resource/") query <- ' PREFIX dbo: <http://dbpedia.org/ontology/> PREFIX esdbp: <http://es.dbpedia.org/property/> PREFIX esdbr: <http://es.dbpedia.org/resource/> select * where{ esdbr:Mariano_Rajoy ?p ?v } ' reslist <- SPARQL(endpoint,query, ns = nss) #Salen 550 datos head(reslist$results)
  • 54. 55 #LDR_JPD15 Siguiendo la pista • Ejemplo: Políticos • Políticos y su partido político library(SPARQL) endpoint <- "http://es.dbpedia.org/sparql" nss <- c("esdbres", "http://es.dbpedia.org/resource/") query <- ' PREFIX dbo: <http://dbpedia.org/ontology/> PREFIX esdbp: <http://es.dbpedia.org/property/> PREFIX esdbr: <http://es.dbpedia.org/resource/> select ?uri ?par where{ ?uri dbo:occupation esdbr:Político . ?uri dbo:party ?par } ORDER BY ?par ' reslist <- SPARQL(endpoint,query, ns = nss) nrow(reslist$results) #Salen 1514 de todas partes del mundo
  • 55. 56 #LDR_JPD15 Siguiendo la pista • Ejemplo: Políticos • ¿Cómo saco los políticos españoles? • Ver preguntas abierta 3 en wiki esDBpedia ???
  • 56. 57 #LDR_JPD15 Coordenadas de recursos library(ggmap) #Para geocode(), get_map(). Carga ggplot2 library(SPARQL) endpoint <- "http://es.dbpedia.org/sparql" query <- 'SELECT * WHERE { ?uri geo:lat ?lat . ?uri geo:long ?lon . ?uri rdf:type ?thetype . FILTER ( (?lat> 40.0 && ?lat < 41.15) && (?lon> -4.5 && ?lon < -3.1) && regex(?thetype, "^http://schema.org") ) } ' reslist <- SPARQL(endpoint,query) df <- reslist$results df$thetype <- factor(df$thetype) map.center <- geocode("Madrid, Spain") map <- get_map(c(lon=map.center$lon, lat=map.center$lat), source="google", zoom=9) ggmap(map) + geom_point(data=df, aes(x=lon, y=lat, colour=thetype, position="dodge"), size=6, alpha=0.8 )
  • 57. 58 #LDR_JPD15 Packages rrdf y rrdflibs library("rrdf") #Descarga de la ontología DBpedia db2014URL <- "http://data.dws.informatik.uni-mannheim.de/dbpedia/2014/dbpedia_2014.owl.bz2" tempBZ2 <- tempfile() download.file(db2014URL, tempBZ2) #Lo guarda en tempBZ2 con <- bzfile(tempBZ2) #descomprimo lines <-readLines(con) #Tengo las líneas en memoria unlink(tempBZ2) #Guardo en un fichero (requerido por load.rdf()) tempOWL <- tempfile() write(lines, file=tempOWL ) model <- load.rdf(tempOWL, format="RDF/XML") unlink(tempOWL) #Ya tengo el model y todos los ficheros aux borrados summarize.rdf(model) #[1] "Number of triples: 29402"
  • 58. 59 #LDR_JPD15 Packages rrdf y rrdflibs #Continuación… #Clases con label query <- 'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?class ?classLabel WHERE { ?class rdf:type rdfs:Class. ?class rdfs:label ?classLabel. }' #OJO! matrix con variables ?class y ?classLabel res <- sparql.rdf(model, query) #Lo paso a data.frame df <- as.data.frame(res, stringsAsFactors = TRUE) #Pongo TRUE para que sea mono el summary summary(df)
  • 59. 60 #LDR_JPD15 Packages rrdf y rrdflibs #Continuación… nrow(df) #En total hay 3520, pero muchas están repetidas 13 veces, 12… #Elimino duplicados length(unique(df$class)) #Ahora salen 683 #¿Cómo selecciono las labels en inglés? ????
  • 60. 61 #LDR_JPD15 Packages rrdf y rrdflibs #Continuación… #¿Cómo selecciono las labels en inglés? query <- 'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?class ?classLabel WHERE { ?class rdf:type rdfs:Class. ?class rdfs:label ?classLabel. FILTER(lang(?classLabel) ="en") }' res <- sparql.rdf(model, query) df <- as.data.frame(res, stringsAsFactors = TRUE) summary(df) #Para ver que no hay multiplicidad nrow(df) #Salen 683 classes
  • 62. 63 Muchas gracias por vuestra atención Mariano.Rico@upm.es