SlideShare una empresa de Scribd logo
1 de 70
SPARQL
Departamento de Informática
Universidad de Oviedo
Jose Emilio Labra Gayo
Jose Emilio Labra Gayo – Universidad de Oviedo
SPARQL
URIUnicode
XML
Intercambio de datos: RDF
Consultas:
SPARQL
Lógica unificadora
Confianza
RDF Schema
Ontologías
OWL
Reglas
RIF
Demostración
Jose Emilio Labra Gayo – Universidad de Oviedo
SPARQL
Los ficheros RDF pueden considerarse bases de datos
de tripletas
SPARQL (Abril 2006) es un lenguaje de consulta para
datos RDF
Similar a SQL para RDF
Lenguaje de consultas
Basado en RDQL
Modelo = patrones sobre grafos
También describe un protocolo de transporte
SPARQL 1.1 (2013, recomendación)
Actualizaciones, consultas federadas, etc.
Jose Emilio Labra Gayo – Universidad de Oviedo
SPARQL
Sintaxis Turtle
Sintaxis similar a N3
URIs entre < >
<http://www.uniovi.es>
Prefijos para espacios de nombres
PREFIX x: <http://www.alumnos.org/>
x:profesor
Nodos anónimos
_:nombre ó [ ]
Literales entre " "
"Jose", "234"^^xsd:integer
Variables empiezan por ?
?nombre
Comentarios empiezan por #
# esto es un comentario
Nota: En N3 se ponía @prefix ….
Declaraciones de prefijos no terminan en punto
Jose Emilio Labra Gayo – Universidad de Oviedo
RDF
RDF = Modelo de grafo
Diferentes sintaxis: N3, Turtle, RDF/XML
@prefix dc: <http://purl.org/dc/terms/> .
@prefix uni: <http://uniovi.es/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
uni:biologia dc:creator uni:juan .
uni:biologia dc:creator uni:ana .
uni:quimica dc:creator uni:ana .
uni:quimica dc:creator uni:luis .
uni:derecho dc:creator uni:luis .
uni:ana rdf:type uni:Profesor .
uni:juan rdf:type uni:Profesor .
uni:luis rdf:type uni:Becario .
Ejemplo en Turtle
Jose Emilio Labra Gayo – Universidad de Oviedo
@prefix dc: <http://purl.org/dc/terms/> .
@prefix uni: <http://uniovi.es/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
uni:biologia dc:creator uni:juan .
uni:biologia dc:creator uni:ana .
uni:quimica dc:creator uni:ana .
uni:quimica dc:creator uni:luis .
uni:derecho dc:creator uni:luis .
uni:ana rdf:type uni:Profesor .
uni:juan rdf:type uni:Profesor .
uni:luis rdf:type uni:Becario .
Ejemplo en Turtle
Grafo RDF
uni:quimica
uni:ana
dc:creator
uni:luis
dc:creator
uni:Becario
rdf:type
uni:biologia
uni:juan
dc:creator
dc:creator
uni:Profesor
rdf:type
rdf:type
uni:derecho
dc:creator
Jose Emilio Labra Gayo – Universidad de Oviedo
Consulta RDF
Buscar páginas creadas por un profesor
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX uni: <http://uniovi.es/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?p ?c WHERE {
?p dc:creator ?c .
?c rdf:type uni:Profesor .
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Encaje de grafos
SELECT ?p ?c WHERE {
?p dc:creator ?c .
?c rdf:type uni:Profesor .
}
uni:quimica
uni:ana
dc:creator
uni:luis
dc:creator
uni:Becario
rdf:type
uni:biologia
uni:juan
dc:creator
dc:creator
uni:Profesor
rdf:type
rdf:type
uni:derecho
dc:creator
?p
dc:creator ?c
uni:Profesor
rdf:type
?p
?c
Resultados
?p ?c
uni:biologia uni:juan
uni:quimica uni:ana
uni:biologia uni:ana
?p
?c
?p
?c
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejercicio Test
¿Cuál sería la respuesta de la consulta SPARQL ante el fichero N3 siguiente?
PREFIX e: <http://www.pp.org#>
SELECT ?z WHERE {
?x e:p ?y.
?y e:q ?z.
}
@prefix : <http://www.pp.org#>.
:a :p :b.
:a :p :c.
:b :q "M".
:b :q "N".
M
N
b
c
M :a
:b
:c
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejercicio Test
¿Cuál sería la respuesta de la consulta SPARQL ante el fichero N3 siguiente?
PREFIX e: <http://www.pp.org#>
SELECT ?x WHERE {
e:a ?x e:c.
}
@prefix : <http://www.pp.org#>.
:a :p :b.
:a :p :c.
:b :q "M".
:b :q "N".
?x e:p e:q e:b
Jose Emilio Labra Gayo – Universidad de Oviedo
Filtros
FILTER añade restricciones a los valores encajados
PREFIX e: <http://ejemplo.org#>
SELECT ?n ?e WHERE {
?x e:nombre ?n .
?x e:edad ?e
FILTER (?e > 18)
}
@prefix e: <http://ejemplo.org#>.
e:Pepe e:nombre "Jose" .
e:Pepe e:edad 31 .
e:Juan e:nombre "Juan" .
e:Juan e:edad 12 .
e:Ana e:nombre "Ana" .
e:Ana e:edad 25.
| n | e |
===============
| "Ana" | 25 |
| "Jose" | 31 |
Jose Emilio Labra Gayo – Universidad de Oviedo
Operadores en los Filtros
FILTER utiliza funciones y operadores de XPath 2.0
Tipos de datos: Boolean, Integer, Float, dataTime, etc.
Operadores habituales: >, <, >=, <=, =, !=, ||, &&
PREFIX e: <http://ejemplo.org#>
SELECT ?n ?e WHERE {
?x e:nombre ?n .
?x e:edad ?e
FILTER (?e > 30 || ?e < 18)
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Conversión/creación de tipos de datos
str(arg) : convierte el argumento a una cadena
NOTA: Las URIs deben convertirse a cadenas si se quieren tratar
como tales
lang(arg): devuelve el idioma del literal
Si ?x = "University"@en
Entonces: lang(?x) = "en"
datatype(arg): devuelve el tipo de datos del literal
Si ?x = "123"^^xsd:integer
Entonces datatype(?x) = xsd:integer
Jose Emilio Labra Gayo – Universidad de Oviedo
Creación tipos de datos
uri(arg), iri(arg): convierten el argumento a una URI/IRI
bnode(arg): genera un nodo anónimo
strdt(literal,tipo): genera un literal con un tipo de datos
STRDT("123","xsd:integer") = "123"^^<xsd:integer>
strlang(literal,tipo): genera un literal con un idioma dado
strlang("University","en") = "University"@"en"
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones de comprobación de tipos
isNumeric(arg) = true si el argumento es un número
isBlank(arg) = true si el argumento es un nodo anónimo
isLiteral(arg) = true si el argumento es un literal
isIRI(arg) = true si el argumento es una IRI
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones condicionales
bound(arg) = true si el argumento tiene un valor
exists(patrón) = true si se cumple el patrón
not exists(patrón) = true si no se cumple el patrón
if(cond,expr1,expr2) = si se cumple cond, devuelve
expr1, si no, devuelve expr2
coalesce(e1,e2,...)= devuelve la primer expresión que
se evalúa sin error
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejemplo
Filtrar las notas numéricas
PREFIX : <http://ejemplo.org#>
SELECT ?n WHERE {
?x :nota ?n .
FILTER (isNumeric(?n))
}
@prefix : <http://ejemplo.org#> .
_:1 :nombre "Juan" .
_:1 :nota 8.5 .
_:2 :nombre "Luis" .
_:2 :nota "No presentado" .
_:3 :nombre "Ana" .
_:3 :nota 6.0 .
-------
| n |
=======
| 6.0 |
| 8.5 |
-------
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con cadenas
strlen(str) = longitud de str
ucase(str) convierte a mayúsculas
lcase(str) convierte a minúsculas
substr(str,inicio,tam?)= subcadena a partir de inicio de tamaño tam
substr('camino',3,2)='mi'
strstarts(str1,str2) = true si str1 comienza con str2
strends(str1,str2) = true si str1 finaliza con str2
contains(str1,str2) = true si str1 contiene str2
encode_for_uri (str) = resultado de codificar str
concat (str1,...strN) = concatenación de cadenas
langMatches(str,lang) = true si encaja el idioma
regex(str,patrón,flags) = true si encaja la expresión regular
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejemplo
PREFIX : <http://ejemplo.org#>
SELECT
(concat(?nombre,' ',?apells) AS ?persona)
WHERE
{
?x :nombre ?nombre .
?x :apellidos ?apells .
FILTER (contains(ucase(?nombre),'L'))
}
@prefix : <http://ejemplo.org#>.
_:1 :nombre "Juan" .
_:1 :apellidos "Gallardo" .
_:2 :nombre "Julio" .
_:2 :apellidos "Zamora" .
_:3 :nombre "Luis" .
_:3 :apellidos "Castro" .
------------------
| persona |
==================
| "Luis Castro" |
| "Julio Zamora" |
------------------
Jose Emilio Labra Gayo – Universidad de Oviedo
Regex
REGEX invoca el encaje de expresiones regulares
Utiliza la función de XPath 2.0
regex(?Expresión, ?Patrón [, ?Flags])
?Expresión = expresión a encajar
?Patrón = expresión regular con la que se encaja
?Flags = opciones para el encaje
PREFIX e: <http://ejemplo.org#>
SELECT ?n ?e WHERE {
?x e:nombre ?n .
?x e:edad ?e
FILTER regex(?n,"A","i")
}
Selecciona los nombres que contengan la "A" ó la "a"
Jose Emilio Labra Gayo – Universidad de Oviedo
Regex
Expresiones regulares
^ = Inicio de cadena
$ = Fin de la cadena
. = Cualquier carácter
d = dígito
? = opcional, * = 0 ó más, + = 1 ó más
X{n} = encaja X n veces
X{m,n} = encaja X de m a n veces
Flags:
i = insensible mayúsculas/minúsculas
m = múltiples líneas
s = línea simple
x = elimina espacios en blanco
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejercicio
El siguiente documento contiene una lista de países
http://www.di.uniovi.es/~labra/cursos/XML/europa.ttl
1. Mostrar países cuyo nombre empieza por 'A'
2. Mostrar países cuyo nombre termina por 'a'
3. Mostrar países cuyo nombre empieza por 'A' y termina por 'a'
4. Mostrar países cuyo pib es mayor que 20000
5. Mostrar países cuyo pib es mayor que 20000 y su población
menor de 40 millones
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones numéricas
abs(n) = valor absoluto
floor(n) = redondear nº hacia bajo
round(n) = redondear nº
ceil(n) = redondear nº hacia arriba
rand() = nº aleatorio entre 0 y 1
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con fechas (1)
now() = devuelve el instante actual
year(i) = devuelve el año de un instante de tiempo i
year("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 2011
month(i) = devuelve el mes de i
month("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 1
day(i) = devuelve el día de i
day("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 10
hours(i) = devuelve la hora de i
hours("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 14
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con fechas (2)
minutes(i) = devuelve los minutos de i
minutes("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 45
seconds(i) = devuelve los segundos de i
seconds("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) =
13.815
timezone(i) = devuelve la zona temporal de i
timezone("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = -
PT5H
tz(i) = devuelve la zona temporal de i
tz("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = -5
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones HASH
md5(str) = aplica el algoritmo MD5 a str
sha1(str), sha224(str), sha256(str), sha384(str),
sha512(str) = calculan el valor HASH de str utilizando
las variaciones correspondientes del algoritmo SHA
PREFIX : <http://ejemplo.org#>
SELECT ?nombre
(SHA1(?email) AS ?sha1Email)
WHERE {
?x :nombre ?nombre .
?x :email ?email .
}
@prefix : <http://ejemplo.org#>.
@prefix : <http://ejemplo.org#> .
_:1 :nombre "Juan" .
_:1 :email "juan@uni.com" .
_:2 :nombre "Luis" .
_:2 :email "luis@uni.com" .
| nombre | sha1Email |
=======================================================
| "Luis" | "c3fbedeb973ffbf0b319f152562b31552f03f157" |
| "Juan" | "bb402e5fe4d9ccbc8895caf0bae12122f1b0d2fa" |
Jose Emilio Labra Gayo – Universidad de Oviedo
@prefix e: <http://ejemplo.org#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
e:Pepe e:nombre "Jose" .
e:Pepe e:edad 31 .
e:Pepe e:conoceA e:Juan .
e:Juan foaf:name "Juan" .
e:Juan e:edad 25 .
e:Juan e:conoceA e:Ana .
e:Ana foaf:name "Ana" .
e:Ana e:nombre "Ana Mary".
Unión de grafos
UNION combina resultados de varios grafos
PREFIX e: <http://ejemplo.org#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?n
WHERE {
{ ?x foaf:name ?n }
UNION
{ ?y e:nombre ?n }
}
n
---------------
"Ana"
"Juan"
"Ana Mary"
"Jose"
Jose Emilio Labra Gayo – Universidad de Oviedo
Encajes opcionales
OPTIONAL permite obtener valores en tripletas sin
fallar cuando éstas no existan
@prefix e: <http://ejemplo.org#>.
@prefix foaf: <http://xmlns.com/foaf/01./>.
e:Pepe e:nombre "Jose" .
e:Pepe e:edad 31 .
e:Juan e:nombre "Juan" .
e:Ana e:nombre "Ana" .
e:Ana e:edad 13.
PREFIX e: <http://ejemplo.org#>
SELECT ?n ?e WHERE {
?x e:nombre ?n .
OPTIONAL { ?x e:edad ?e }
} ---------------
| n | e |
===============
| "Ana" | 13 |
| "Juan" | |
| "Jose" | 31 |
---------------
Jose Emilio Labra Gayo – Universidad de Oviedo
Especificar grafos de entrada
FROM indica la URL de la que proceden los datos
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?n
FROM <http://www.di.uniovi.es/~labra/labraFoaf.rdf>
WHERE { ?x foaf:name ?n }
Si se incluyen varios conjuntos de entrada se realiza la mezcla de los
grafos resultantes
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?n
FROM <http://www.di.uniovi.es/~labra/labraFoaf.rdf>
FROM <http://www.w3.org/People/Berners-Lee/card>
WHERE {
?x foaf:name ?n
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejercicio
Modelizar las siguientes tablas en 2 ficheros Turtle
diferentes
DNI Nombre Apellidos
9999 Juan Gallardo
8888 Jose Torre
7777 Ana Cascos
DNI Nota
9999 3
7777 5
Construir una consulta que permita visualizar la nota de
cada alumno junto con su nombre y apellidos
Jose Emilio Labra Gayo – Universidad de Oviedo
Grafos con nombre
FROM NAMED asigna un nombre al grafo de entrada
GRAPH encaja con el nombre del grafo que corresponda
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?n ?g
FROM NAMED <http://www.w3.org/People/Berners-Lee/card>
FROM NAMED <http://www.di.uniovi.es/~labra/labraFoaf.rdf>
WHERE {
GRAPH ?g { ?x foaf:name ?n }
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Control de los resultados
DISTINCT elimina valores duplicados
ORDER BY permite especificar el orden de los
resultados (puede especificarse ASC, DESC…)
LIMIT n indica el número de resultados
OFFSET m indica a partir de qué resultado empezar a
contar
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?n
WHERE { ?x foaf:knows ?y .
?y foaf:name ?n . }
ORDER BY ASC(?n)
LIMIT 5
OFFSET 10
Jose Emilio Labra Gayo – Universidad de Oviedo
CONSTRUCT
Permite crear un grafo de salida
@prefix : <http://ejemplo.org#> .
_:1 :nombre "Juan" .
_:1 :amigoDe _:2, _:3 .
_:2 :nombre "Luis" .
_:2 :amigoDe _:1 .
_:3 :nombre "Ana" .
_:3 :amigoDe _:1 .
PREFIX : <http://ejemplo.org#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
CONSTRUCT {
?x foaf:name ?n .
?x foaf:knows ?y .
} WHERE {
?x :nombre ?n .
?x :amigoDe ?y .
} @prefix foaf: <http://xmlns.com/foaf/0.1/> .
_:b1 foaf:knows [ foaf:knows _:b1 ;
foaf:name "Luis"
] ;
foaf:knows [ foaf:knows _:b1 ;
foaf:name "Ana"
] ;
foaf:name "Juan" .
Jose Emilio Labra Gayo – Universidad de Oviedo
ASK
ASK devuelve sí o no
Puede ser útil para chequeo de errores
@prefix : <http://ejemplo.org#>
.
_:1 :nombre "Juan" .
_:1 :nota 8.5 .
_:2 :nombre "Luis" .
_:2 :nota "No presentado" .
_:3 :nombre "Ana" .
_:3 :nota 6.0 . Yes
PREFIX : <http://ejemplo.org#>
ASK WHERE {
?x :nota ?n .
FILTER ( ! isNumeric(?n))
}
Jose Emilio Labra Gayo – Universidad de Oviedo
@prefix : <http://ejemplo.org#> .
_:1 :nombre "Juan" .
_:1 :nota 8.5 .
_:2 :nombre "Luis" .
_:2 :nota "No presentado" .
_:3 :nombre "Ana" .
_:3 :nota 6.0 .
DESCRIBE
Devuelve una descripción RDF de uno o varios nodos
@prefix : <http://ejemplo.org#> .
[] :nombre "Ana" ;
:nota 6.0 .
PREFIX : <http://ejemplo.org#>
DESCRIBE ?x WHERE
{
?x :nota ?n .
FILTER(?n = 6.0)
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Asignaciones
BIND expr AS v = Asigna el valor de expr a la variable v
@prefix e: <http://ejemplo.org#>.
_:1 e:nombre "Manzanas" .
_:1 e:cantidad 3 .
_:1 e:precio 3 .
_:2 e:nombre "Peras" .
_:2 e:cantidad 2 .
_:2 e:precio 2 .
_:3 e:nombre "Naranjas" .
_:3 e:cantidad 4 .
_:3 e:precio 1 .
PREFIX e: <http://ejemplo.org#>
SELECT ?n ?precioTotal
WHERE {
?x e:nombre ?n .
?x e:cantidad ?cantidad .
?x e:precio ?precio .
BIND ((?cantidad * ?precio) AS ?precioTotal)
}
----------------------------
| n | precioTotal |
============================
| "Naranjas" | 4 |
| "Peras" | 4 |
| "Manzanas" | 9 |
----------------------------
Jose Emilio Labra Gayo – Universidad de Oviedo
Asignaciones en SELECT
Es posible realizar la asignación directamente
@prefix e: <http://ejemplo.org#>.
_:1 e:nombre "Manzanas" .
_:1 e:cantidad 3 .
_:1 e:precio 3 .
_:2 e:nombre "Peras" .
_:2 e:cantidad 2 .
_:2 e:precio 2 .
_:3 e:nombre "Naranjas" .
_:3 e:cantidad 4 .
_:3 e:precio 1 .
PREFIX e: <http://ejemplo.org#>
SELECT ?n
((?cantidad * ?precio) AS ?precioTotal)
WHERE {
?x e:nombre ?n .
?x e:cantidad ?cantidad .
?x e:precio ?precio .
}
----------------------------
| n | precioTotal |
============================
| "Naranjas" | 4 |
| "Peras" | 4 |
| "Manzanas" | 9 |
----------------------------
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones de agregación:
AVG, SUM, COUNT, SAMPLE
@prefix e: <http://ejemplo.org#>.
e:Pepe e:nombre "Jose" .
e:Pepe e:edad 31 .
e:Juan e:nombre "Juan" .
e:Juan e:edad 12 .
e:Ana e:nombre "Ana" .
e:Ana e:edad 25.
PREFIX e: <http://ejemplo.org#>
SELECT (AVG(?edad) AS ?media)
(SUM(?edad) AS ?suma)
(COUNT(?edad) AS ?cuenta)
(SAMPLE(?edad) AS ?muestra)
WHERE
{
?n e:edad ?edad .
}
| media | suma | cuenta | muestra |
====================================
| 22.66 | 68 | 3 | 25 |
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones de agregación:
MAX, MIN
@prefix e: <http://ejemplo.org#>.
e:Pepe e:nombre "Jose" .
e:Pepe e:edad 31 .
e:Juan e:nombre "Juan" .
e:Juan e:edad 12 .
e:Ana e:nombre "Ana" .
e:Ana e:edad 25.
PREFIX e: <http://ejemplo.org#>
SELECT (MAX(?edad) as ?mayor)
(MIN(?edad) as ?menor)
WHERE
{
?n e:edad ?edad .
}
| mayor | menor |
==================
| 31 | 12 |
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones de agregación
GROUP_CONCAT
@prefix e: <http://ejemplo.org#>.
e:Pepe e:nombre "Jose" .
e:Pepe e:edad 31 .
e:Juan e:nombre "Juan" .
e:Juan e:edad 12 .
e:Ana e:nombre "Ana" .
e:Ana e:edad 25.
PREFIX e: <http://ejemplo.org#>
SELECT (GROUP_CONCAT(?edad;
SEPARATOR=',')
as ?edades) where
{
?n e:edad ?edad .
}
| edades |
===============
| 25, 12, 31|
Jose Emilio Labra Gayo – Universidad de Oviedo
Agrupaciones: GROUP_BY
GROUP BY permite agrupar conjuntos de resultados
@prefix e: <http://ejemplo.org#>.
_:1 e:nombre "Ana".
_:1 e:edad 18 .
_:1 e:nota 8 .
_:2 e:nombre "Juan".
_:2 e:edad 20 .
_:2 e:nota 7 .
_:3 e:nombre "Luis".
_:3 e:edad 18 .
_:3 e:nota 5 .
_:4 e:nombre "Mario".
_:4 e:edad 19 .
_:4 e:nota 6 .
_:5 e:nombre "Carlos".
_:5 e:edad 20 .
_:5 e:nota 9 .
PREFIX e: <http://ejemplo.org#>
SELECT (AVG(?nota) AS ?mediaNota) ?edad
WHERE {
?x e:nombre ?n .
?x e:edad ?edad .
?x e:nota ?nota .
}
GROUP BY ?edad
---------------------
| mediaNota | edad |
=====================
| 6.5 | 18 |
| 8.0 | 20 |
| 6.0 | 19 |
---------------------
Jose Emilio Labra Gayo – Universidad de Oviedo
Agrupaciones: HAVING
HAVING permite filtrar los grupos que cumplan una condición
@prefix e: <http://ejemplo.org#>.
_:1 e:nombre "Ana".
_:1 e:edad 18 .
_:1 e:nota 8 .
_:2 e:nombre "Juan".
_:2 e:edad 20 .
_:2 e:nota 7 .
_:3 e:nombre "Luis".
_:3 e:edad 18 .
_:3 e:nota 5 .
_:4 e:nombre "Mario".
_:4 e:edad 19 .
_:4 e:nota 6 .
_:5 e:nombre "Carlos".
_:5 e:edad 20 .
_:5 e:nota 9 .
PREFIX e: <http://ejemplo.org#>
SELECT (AVG(?nota) AS ?mediaNota) ?edad
WHERE {
?x e:nombre ?n .
?x e:edad ?edad .
?x e:nota ?nota .
}
GROUP BY ?edad
HAVING (?mediaNota < 8)
---------------------
| mediaNota | edad |
=====================
| 6.5 | 18 |
| 6.0 | 19 |
---------------------
Jose Emilio Labra Gayo – Universidad de Oviedo
Subconsultas
Es posible realizar consultas dentro de consultas
@prefix e: <http://ejemplo.org#>.
_:1 e:nombre "Ana".
_:1 e:edad 18 .
_:1 e:nota 8 .
_:2 e:nombre "Juan".
_:2 e:edad 20 .
_:2 e:nota 7 .
_:3 e:nombre "Luis".
_:3 e:edad 18 .
_:3 e:nota 5 .
_:4 e:nombre "Mario".
_:4 e:edad 19 .
_:4 e:nota 6 .
_:5 e:nombre "Carlos".
_:5 e:edad 20 .
_:5 e:nota 9 .
PREFIX e: <http://ejemplo.org#>
SELECT ?nombre ?nota
(?nota - ?notaMedia AS ?desv)
WHERE {
?x e:nombre ?nombre .
?x e:nota ?nota .
{
SELECT (AVG(?nota) AS ?notaMedia) WHERE {
?x e:nota ?nota .
}
}
}
--------------------------
| nombre | nota | desv |
==========================
| "Carlos" | 9 | 2 |
| "Mario" | 6 | -1 |
| "Luis" | 5 | -2 |
| "Juan" | 7 | 0 |
| "Ana" | 8 | 1 |
--------------------------
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejercicio
El siguiente documento contiene una lista de países
http://www.di.uniovi.es/~labra/cursos/XML/europa.ttl
1. Mostrar el país con mayor PIB
2. Mostrar el PIB medio
3. Mostrar países cuyo PIB es mayor que el PIB medio
4. Mostrar países de una población similar a la de España cuyo
PIB esté por encima
Jose Emilio Labra Gayo – Universidad de Oviedo
Caminos de propiedades
La URI que identifica la propiedad puede contener una
expresión regular p Encaja con la propiedad p
(e) Camino agrupado entre parántesis
^e Camino inverso de e
!p No encaja con la propiedad p
e1 / e2 Camino e1 seguido de e2
e1 | e2 Camino e1 ó e2
e* 0 ó más apariciones de e
e+ 1 ó más apariciones de e
e? 0 ó 1 aparición de e
e{n} n apariciones de e
e{m,n} Entre m y n apariciones de e
e{n,} n ó más apariciones de e
e{,n} Entre 0 y n apariciones de e
Jose Emilio Labra Gayo – Universidad de Oviedo
@prefix e: <http://ejemplo.org#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
e:Pepe e:nombre "Jose" .
e:Juan foaf:name "Juan" .
e:Ana foaf:name "Ana" .
e:Ana e:nombre "Ana Mary".
Caminos de propiedades
n
---------------
"Ana"
"Ana Mary"
"Jose"
"Juan"
PREFIX e: <http://ejemplo.org#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?n
WHERE {
?x (foaf:name | e:nombre) ?n
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Caminos de propiedades
e:Ignacio e:conoceA e:Francisco, e:Genaro.
e:Francisco e:conoceA e:Carlos, e:Emilio .
e:Genaro e:conoceA e:Carlos, e:Emilio .
e:Carlos e:conoceA e:Antonio .
e:Emilio e:conoceA e:Antonio .
e:Hilario e:conoceA e:Dionisio .
e:Dionisio e:conoceA e:Bernardo .
e:Bernardo e:conoceA e:Antonio .
PREFIX e: <http://ejemplo.org#>
SELECT ?p
{
?p e:conoceA+ e:Antonio.
} ---------------
| p |
===============
| e:Bernardo |
| e:Dionisio |
| e:Hilario |
| e:Emilio |
| e:Genaro |
| e:Ignacio |
| e:Francisco |
| e:Ignacio |
| e:Carlos |
| e:Genaro |
| e:Ignacio |
| e:Francisco |
| e:Ignacio |
---------------
Antonio
Bernardo Carlos Emilio
Dionisio Francisco Genaro
Hilario Ignacio
Jose Emilio Labra Gayo – Universidad de Oviedo
Caminos de propiedades
e:Ignacio e:conoceA e:Francisco, e:Genaro.
e:Francisco e:conoceA e:Carlos, e:Emilio .
e:Genaro e:conoceA e:Carlos, e:Emilio .
e:Carlos e:conoceA e:Antonio .
e:Emilio e:conoceA e:Antonio .
e:Hilario e:conoceA e:Dionisio .
e:Dionisio e:conoceA e:Bernardo .
e:Bernardo e:conoceA e:Antonio .
PREFIX e: <http://ejemplo.org#>
SELECT ?p
{
?p e:conoceA{2} e:Antonio.
}
---------------
| p |
===============
| e:Dionisio |
| e:Genaro |
| e:Francisco |
| e:Genaro |
| e:Francisco |
---------------
Antonio
Bernardo Carlos Emilio
Dionisio Francisco Genaro
Hilario Ignacio
Jose Emilio Labra Gayo – Universidad de Oviedo
Caminos de propiedades
e:Ignacio e:conoceA e:Francisco, e:Genaro.
e:Francisco e:conoceA e:Carlos, e:Emilio .
e:Genaro e:conoceA e:Carlos, e:Emilio .
e:Carlos e:conoceA e:Antonio .
e:Emilio e:conoceA e:Antonio .
e:Hilario e:conoceA e:Dionisio .
e:Dionisio e:conoceA e:Bernardo .
e:Bernardo e:conoceA e:Antonio .
PREFIX e: <http://ejemplo.org#>
SELECT DISTINCT ?p
{
?p e:conoceA/e:conoceA e:Antonio.
}
---------------
| p |
===============
| e:Dionisio |
| e:Genaro |
| e:Francisco |
| e:Genaro |
| e:Francisco |
---------------
Antonio
Bernardo Carlos Emilio
Dionisio Francisco Genaro
Hilario Ignacio
Jose Emilio Labra Gayo – Universidad de Oviedo
Caminos de propiedades
e:Ignacio e:conoceA e:Francisco, e:Genaro.
e:Francisco e:conoceA e:Carlos, e:Emilio .
e:Genaro e:conoceA e:Carlos, e:Emilio .
e:Carlos e:conoceA e:Antonio .
e:Emilio e:conoceA e:Antonio .
e:Hilario e:conoceA e:Dionisio .
e:Dionisio e:conoceA e:Bernardo .
e:Bernardo e:conoceA e:Antonio .
PREFIX e: <http://ejemplo.org#>
SELECT ?p
{
?p e:conoceA/^e:conoceA e:Francisco.
FILTER (?p != e:Francisco)
}
---------------
| p |
===============
| e:Genaro |
| e:Genaro |
---------------
Antonio
Bernardo Carlos Emilio
Dionisio Francisco Genaro
Hilario Ignacio
Jose Emilio Labra Gayo – Universidad de Oviedo
Actualizaciones
SPARQL Update
Jose Emilio Labra Gayo – Universidad de Oviedo
Tratamiento de grafos
Actualización
INSERT DATA = insertar tripletas
DELETE/INSERT… = borrar/insertar tripletas condicionalmente
DELETE DATA = borrar tripletas
LOAD = cargar tripletas de un documento
CLEAR = borrar todas las tripletas de un grafo
Gestión de grafos
CREATE = crear grafo
DROP = eliminar grafo
COPY…TO… = copiar grafo
MOVE…TO… = mover grafo
ADD = insertar todos los datos de un grafo en otro
Jose Emilio Labra Gayo – Universidad de Oviedo
Inserción
INSERT DATA permite insertar tripletas
PREFIX e: <http://ejemplo.org#>
INSERT DATA {
e:ana e:nombre "Ana".
e:ana e:edad 18 .
e:ana e:nota 8 .
e:juan e:nombre "Juan Manuel".
e:juan e:edad 20 .
e:juan e:nota 7 .
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Inserción en un grafo concreto
INSERT DATA puede especificar el grafo
PREFIX e: <http://ejemplo.org#>
PREFIX g: <http://grafos.org#>
INSERT DATA {
GRAPH g:g1 {
e:ana e:nombre "Ana".
e:ana e:edad 18 .
e:ana e:nota 8 .
}
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Inserción
INSERT permite insertar tripletas en un grafo.
Requiere una cláusula WHERE
PREFIX e: <http://ejemplo.org#>
INSERT {
?p e:nombreNota "Notable".
}
WHERE {
?p e:nota ?nota .
FILTER (?nota >= 7 && ?nota < 9)
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Carga de grafo
LOAD permite cargar todas las tripletas existentes en
una URI
LOAD <http://www.di.uniovi.es/~labra/labraFoaf.rdf>
Jose Emilio Labra Gayo – Universidad de Oviedo
Borrado
DELETE DATA permite eliminar tripletas de un grafo
PREFIX e: <http://ejemplo.org#>
DELETE DATA
{
e:luis e:nota 5 .
}
NOTA: DELETE DATA No admite variables
Jose Emilio Labra Gayo – Universidad de Oviedo
Borrado
DELETE WHERE permite eliminar tripletas de un grafo
especificando una condición
PREFIX e: <http://ejemplo.org#>
DELETE
{ ?x e:nota ?nota . }
WHERE
{
?x e:nota ?nota .
FILTER (?nota >= 8)
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Actualización
DELETE/INSERT permite actualizar tripletas de un
grafo
PREFIX e: <http://ejemplo.org#>
DELETE { ?x e:edad ?edad }
INSERT { ?x e:edad ?edad1 }
WHERE {
?x e:edad ?edad .
BIND((?edad + 1) AS ?edad1)
}
Ejemplo: incrementar la edad
Jose Emilio Labra Gayo – Universidad de Oviedo
Borrado total
CLEAR borra todas las tripletas
Puede indicarse el conjunto de datos
CLEAR g = Borra grafo g
CLEAR DEFAULT = Borra grafo actual
CLEAR ALL = Borra todos los grafos
Jose Emilio Labra Gayo – Universidad de Oviedo
Consulta universal
Para ver todas las tripletas de la base de datos
PREFIX e: <http://ejemplo.org#>
SELECT *
WHERE {
{ ?x ?p ?y . }
UNION
{ GRAPH ?g {?x ?p ?y .} }
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Acceso a servicios remotos
SERVICE uri = indica un endpoint SPARQL
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?nombre WHERE {
SERVICE <http://dbpedia.org/sparql> {
SELECT ?nombre WHERE {
?pais rdf:type dbo:Country .
?pais rdfs:label ?nombre .
FILTER (lang(?nombre)='es')
}
}
}
Lista de terminales SPARQL
http://esw.w3.org/topic/SparqlEndpoints
Jose Emilio Labra Gayo – Universidad de Oviedo
Consultas federadas
Combinando
resultados
PREFIX imdb: <http://data.linkedmdb.org/resource/movie/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX dbpo: <http://dbpedia.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * {
{ SERVICE <http://dbpedia.org/sparql>
{ SELECT ?fechaNacim ?nombreMujer WHERE {
?actor rdfs:label "Javier Bardem"@en ;
dbpo:birthDate ?fechaNacim ;
dbpo:spouse ?mujerURI .
?mujerURI rdfs:label ?nombreMujer .
FILTER ( lang(?nombreMujer) = "en" )
}
}
}
{ SERVICE <http://data.linkedmdb.org/sparql>
{ SELECT ?peli ?fechaPeli WHERE {
?actor imdb:actor_name "Javier Bardem".
?movie imdb:actor ?actor ;
dcterms:title ?peli ;
dcterms:date ?fechaPeli .
}
}
}
}
DBPedia: http://dbpedia.org
IMDB: http://data.linkedmdb.org
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejercicio
Buscar en la DBPedia películas españolas, mostrando
el título, el nombre del director y el año en que se
hicieron.
Combinar la información con otros terminales SPARQL
Jose Emilio Labra Gayo – Universidad de Oviedo
Patrón de negación por fallo en SPARQL
Combinando FILTER, OPTIONAL y !BOUND se puede
simular la negación por fallo
Ejemplo: Buscar personas que no están casadas.
@prefix : <http://ej.org#>.
:Pepe :estaCasadoCon :Ana .
:Pepe :nombre "Jose" .
:Luis :estaCasadoCon :Marta .
:Luis :nombre "Luis" .
:Carlos :nombre "Carlos" .
PREFIX : <http://ej.org#>
SELECT ?n WHERE {
?x :nombre ?n
OPTIONAL {?x :estaCasadoCon ?y }
FILTER ( !BOUND(?y) )
}
Jose Emilio Labra Gayo – Universidad de Oviedo
Creación de Base de Datos RDF
Fuseki permite trabajar con datos RDF como una base
de datos
Es posible realizar consultas SPARQL
> mkdir dirDatos
> fuseki-server --update --loc=dirDatos /datos
Arrancar servidor
Acceso en puerto: http://localhost:3030
Jose Emilio Labra Gayo – Universidad de Oviedo
Validación de RDF mediante SPARQL
Ejemplo:
Una persona tiene una edad (entero) y uno ó más nombres (string)
Persona__
foaf:age xsd:integer
foaf:name xsd:string+
:john foaf:age 23;
foaf:name "John" .
:bob foaf:age 34;
foaf:name "Bob", "Robert" .

Ejemplos de RDF
:mary foaf:age 50, 65 .
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejemplo de consulta SPARQL
ASK {
{ SELECT ?Person {
?Person foaf:age ?o .
} GROUP BY ?Person HAVING (COUNT(*)=1)
}
{ SELECT ?Person {
?Person foaf:age ?o .
FILTER ( isLiteral(?o) &&
datatype(?o) = xsd:integer )
} GROUP BY ?Person HAVING (COUNT(*)=1)
}
{ SELECT ?Person (COUNT(*) AS ?Person_c0) {
?Person foaf:name ?o .
} GROUP BY ?Person HAVING (COUNT(*)>=1)
}
{ SELECT ?Person (COUNT(*) AS ?Person_c1) {
?Person foaf:name ?o .
FILTER (isLiteral(?o) &&
datatype(?o) = xsd:string)
} GROUP BY ?Person HAVING (COUNT(*)>=1)
} FILTER (?Person_c0 = ?Person_c1)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Persona__
foaf:age xsd:integer
foaf:name xsd:string+
Jose Emilio Labra Gayo – Universidad de Oviedo
¿Es posible añadir recursividad al modelo?
Ejemplo:
Una persona tiene una edad (entero), uno o más
nombres (string) y conoce a 0 ó más personas
Persona__
foaf:age xsd:integer
foaf:name xsd:string+
0..*
foaf:knows
Jose Emilio Labra Gayo – Universidad de Oviedo
Fin de la Presentación

Más contenido relacionado

La actualidad más candente

The Semantic Web #9 - Web Ontology Language (OWL)
The Semantic Web #9 - Web Ontology Language (OWL)The Semantic Web #9 - Web Ontology Language (OWL)
The Semantic Web #9 - Web Ontology Language (OWL)Myungjin Lee
 
El dba(administracion de base de datos)
El dba(administracion de base de datos)El dba(administracion de base de datos)
El dba(administracion de base de datos)UTN
 
Diseño de Ontologías: Protégé - OWL: SPARQL
Diseño de Ontologías: Protégé - OWL: SPARQLDiseño de Ontologías: Protégé - OWL: SPARQL
Diseño de Ontologías: Protégé - OWL: SPARQLCarlos Casamayor
 
Web ontology language (owl)
Web ontology language (owl)Web ontology language (owl)
Web ontology language (owl)Ameer Sameer
 
RDF 개념 및 구문 소개
RDF 개념 및 구문 소개RDF 개념 및 구문 소개
RDF 개념 및 구문 소개Dongbum Kim
 
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasks
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasksSearching for AI - Leveraging Solr for classic Artificial Intelligence tasks
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasksAlexandre Rafalovitch
 
Introduction To RDF and RDFS
Introduction To RDF and RDFSIntroduction To RDF and RDFS
Introduction To RDF and RDFSNilesh Wagmare
 
Knowledge Graph Introduction
Knowledge Graph IntroductionKnowledge Graph Introduction
Knowledge Graph IntroductionSören Auer
 
The Semantic Knowledge Graph
The Semantic Knowledge GraphThe Semantic Knowledge Graph
The Semantic Knowledge GraphTrey Grainger
 
Lecture: Ontologies and the Semantic Web
Lecture: Ontologies and the Semantic WebLecture: Ontologies and the Semantic Web
Lecture: Ontologies and the Semantic WebMarina Santini
 
Analytics and Graph Traversal with Solr - Yonik Seeley, Cloudera
Analytics and Graph Traversal with Solr - Yonik Seeley, ClouderaAnalytics and Graph Traversal with Solr - Yonik Seeley, Cloudera
Analytics and Graph Traversal with Solr - Yonik Seeley, ClouderaLucidworks
 
Tutorial on SPARQL: SPARQL Protocol and RDF Query Language
Tutorial on SPARQL: SPARQL Protocol and RDF Query Language Tutorial on SPARQL: SPARQL Protocol and RDF Query Language
Tutorial on SPARQL: SPARQL Protocol and RDF Query Language Biswanath Dutta
 
An introduction to Semantic Web and Linked Data
An introduction to Semantic Web and Linked DataAn introduction to Semantic Web and Linked Data
An introduction to Semantic Web and Linked DataFabien Gandon
 
Ontologías: qué son y para qué sirven
Ontologías: qué son y para qué sirvenOntologías: qué son y para qué sirven
Ontologías: qué son y para qué sirventorrubia
 
Wimmics Research Team Overview 2017
Wimmics Research Team Overview 2017Wimmics Research Team Overview 2017
Wimmics Research Team Overview 2017Fabien Gandon
 

La actualidad más candente (20)

The Semantic Web #9 - Web Ontology Language (OWL)
The Semantic Web #9 - Web Ontology Language (OWL)The Semantic Web #9 - Web Ontology Language (OWL)
The Semantic Web #9 - Web Ontology Language (OWL)
 
El dba(administracion de base de datos)
El dba(administracion de base de datos)El dba(administracion de base de datos)
El dba(administracion de base de datos)
 
Diseño de Ontologías: Protégé - OWL: SPARQL
Diseño de Ontologías: Protégé - OWL: SPARQLDiseño de Ontologías: Protégé - OWL: SPARQL
Diseño de Ontologías: Protégé - OWL: SPARQL
 
Web ontology language (owl)
Web ontology language (owl)Web ontology language (owl)
Web ontology language (owl)
 
RDF 개념 및 구문 소개
RDF 개념 및 구문 소개RDF 개념 및 구문 소개
RDF 개념 및 구문 소개
 
RDF Data Model
RDF Data ModelRDF Data Model
RDF Data Model
 
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasks
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasksSearching for AI - Leveraging Solr for classic Artificial Intelligence tasks
Searching for AI - Leveraging Solr for classic Artificial Intelligence tasks
 
Introduction To RDF and RDFS
Introduction To RDF and RDFSIntroduction To RDF and RDFS
Introduction To RDF and RDFS
 
Knowledge Graph Introduction
Knowledge Graph IntroductionKnowledge Graph Introduction
Knowledge Graph Introduction
 
22 rdf
22 rdf22 rdf
22 rdf
 
The Semantic Knowledge Graph
The Semantic Knowledge GraphThe Semantic Knowledge Graph
The Semantic Knowledge Graph
 
Lecture: Ontologies and the Semantic Web
Lecture: Ontologies and the Semantic WebLecture: Ontologies and the Semantic Web
Lecture: Ontologies and the Semantic Web
 
Arquitectura Web
Arquitectura WebArquitectura Web
Arquitectura Web
 
Analytics and Graph Traversal with Solr - Yonik Seeley, Cloudera
Analytics and Graph Traversal with Solr - Yonik Seeley, ClouderaAnalytics and Graph Traversal with Solr - Yonik Seeley, Cloudera
Analytics and Graph Traversal with Solr - Yonik Seeley, Cloudera
 
SPARQL Cheat Sheet
SPARQL Cheat SheetSPARQL Cheat Sheet
SPARQL Cheat Sheet
 
Tutorial on SPARQL: SPARQL Protocol and RDF Query Language
Tutorial on SPARQL: SPARQL Protocol and RDF Query Language Tutorial on SPARQL: SPARQL Protocol and RDF Query Language
Tutorial on SPARQL: SPARQL Protocol and RDF Query Language
 
An introduction to Semantic Web and Linked Data
An introduction to Semantic Web and Linked DataAn introduction to Semantic Web and Linked Data
An introduction to Semantic Web and Linked Data
 
Ontologías: qué son y para qué sirven
Ontologías: qué son y para qué sirvenOntologías: qué son y para qué sirven
Ontologías: qué son y para qué sirven
 
Wimmics Research Team Overview 2017
Wimmics Research Team Overview 2017Wimmics Research Team Overview 2017
Wimmics Research Team Overview 2017
 
RDF, linked data and semantic web
RDF, linked data and semantic webRDF, linked data and semantic web
RDF, linked data and semantic web
 

Destacado

reutilización de datos públicos: la perspectiva de un ciudadano
reutilización de datos públicos: la perspectiva de un ciudadanoreutilización de datos públicos: la perspectiva de un ciudadano
reutilización de datos públicos: la perspectiva de un ciudadanoAlberto Ortiz de Zarate
 
Consultas sparql
Consultas sparqlConsultas sparql
Consultas sparqljhoax
 
Consultas sparql en dbpedia
Consultas sparql en dbpediaConsultas sparql en dbpedia
Consultas sparql en dbpediaIsrael Rey
 
Datos abiertos: Reutilización de información en el sector público
Datos abiertos: Reutilización de información en el sector públicoDatos abiertos: Reutilización de información en el sector público
Datos abiertos: Reutilización de información en el sector públicoJose Emilio Labra Gayo
 
Linked Open Data - Datos Abiertos Enlazados
Linked Open Data - Datos Abiertos EnlazadosLinked Open Data - Datos Abiertos Enlazados
Linked Open Data - Datos Abiertos EnlazadosJose Emilio Labra Gayo
 

Destacado (11)

reutilización de datos públicos: la perspectiva de un ciudadano
reutilización de datos públicos: la perspectiva de un ciudadanoreutilización de datos públicos: la perspectiva de un ciudadano
reutilización de datos públicos: la perspectiva de un ciudadano
 
Consultas sparql
Consultas sparqlConsultas sparql
Consultas sparql
 
Consultas sparql en dbpedia
Consultas sparql en dbpediaConsultas sparql en dbpedia
Consultas sparql en dbpedia
 
Consultas sparql
Consultas sparqlConsultas sparql
Consultas sparql
 
Consultas de sparql en dbpedia
Consultas de sparql en dbpediaConsultas de sparql en dbpedia
Consultas de sparql en dbpedia
 
Datos abiertos: Reutilización de información en el sector público
Datos abiertos: Reutilización de información en el sector públicoDatos abiertos: Reutilización de información en el sector público
Datos abiertos: Reutilización de información en el sector público
 
Sparql
SparqlSparql
Sparql
 
SPARQL
SPARQLSPARQL
SPARQL
 
Linked Open Data - Datos Abiertos Enlazados
Linked Open Data - Datos Abiertos EnlazadosLinked Open Data - Datos Abiertos Enlazados
Linked Open Data - Datos Abiertos Enlazados
 
Tecnologias Web Semantica
Tecnologias Web SemanticaTecnologias Web Semantica
Tecnologias Web Semantica
 
25 ontologias
25 ontologias25 ontologias
25 ontologias
 

Similar a 23 sparql

Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Germán Ferrari
 
Rc jose franqueller_garcia
Rc jose franqueller_garciaRc jose franqueller_garcia
Rc jose franqueller_garciafrankgatom
 
Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Ricardo Tesoriero
 
Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Andres Garcia Garcia
 
Fundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolFundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolJean-Paul Calbimonte
 
Crystal: herramientas, uso y creación.
Crystal: herramientas, uso y creación.Crystal: herramientas, uso y creación.
Crystal: herramientas, uso y creación.Crystal Language
 
07-MIPSVHL CIRCUITOS TEORÍA ELECTRÓNICA DIGITAL.pdf
07-MIPSVHL CIRCUITOS TEORÍA ELECTRÓNICA DIGITAL.pdf07-MIPSVHL CIRCUITOS TEORÍA ELECTRÓNICA DIGITAL.pdf
07-MIPSVHL CIRCUITOS TEORÍA ELECTRÓNICA DIGITAL.pdfLuisVargasVelazquez
 
Clase 08 Python UP 2022-2.pptx
Clase 08 Python UP 2022-2.pptxClase 08 Python UP 2022-2.pptx
Clase 08 Python UP 2022-2.pptxJoelMCh
 
Estadística con Lenguaje R: Sesión Introductoria
Estadística con Lenguaje R: Sesión IntroductoriaEstadística con Lenguaje R: Sesión Introductoria
Estadística con Lenguaje R: Sesión IntroductoriaLuis Fernando Aguas Bucheli
 
Librería String, Math de Java (NetBeans)
Librería String, Math de Java (NetBeans)Librería String, Math de Java (NetBeans)
Librería String, Math de Java (NetBeans)Daniel Gómez
 

Similar a 23 sparql (20)

Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03
 
XPath
XPathXPath
XPath
 
XPath
XPathXPath
XPath
 
Rc jose franqueller_garcia
Rc jose franqueller_garciaRc jose franqueller_garcia
Rc jose franqueller_garcia
 
Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)
 
Intro haskell
Intro haskellIntro haskell
Intro haskell
 
Bd oo presentacion
Bd oo presentacionBd oo presentacion
Bd oo presentacion
 
Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6
 
Sem_1_Est_Comp.pdf
Sem_1_Est_Comp.pdfSem_1_Est_Comp.pdf
Sem_1_Est_Comp.pdf
 
Presentación Base de Datos Slideshare
Presentación Base de Datos Slideshare Presentación Base de Datos Slideshare
Presentación Base de Datos Slideshare
 
Fundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolFundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) Catecbol
 
Crystal: herramientas, uso y creación.
Crystal: herramientas, uso y creación.Crystal: herramientas, uso y creación.
Crystal: herramientas, uso y creación.
 
07-MIPSVHL CIRCUITOS TEORÍA ELECTRÓNICA DIGITAL.pdf
07-MIPSVHL CIRCUITOS TEORÍA ELECTRÓNICA DIGITAL.pdf07-MIPSVHL CIRCUITOS TEORÍA ELECTRÓNICA DIGITAL.pdf
07-MIPSVHL CIRCUITOS TEORÍA ELECTRÓNICA DIGITAL.pdf
 
Programacion logica
Programacion logicaProgramacion logica
Programacion logica
 
Clase 08 Python UP 2022-2.pptx
Clase 08 Python UP 2022-2.pptxClase 08 Python UP 2022-2.pptx
Clase 08 Python UP 2022-2.pptx
 
Workshop Manipulacion de Datos con R
Workshop Manipulacion de Datos con RWorkshop Manipulacion de Datos con R
Workshop Manipulacion de Datos con R
 
Estadística con Lenguaje R: Sesión Introductoria
Estadística con Lenguaje R: Sesión IntroductoriaEstadística con Lenguaje R: Sesión Introductoria
Estadística con Lenguaje R: Sesión Introductoria
 
2pdf relacoinal.pdf
2pdf relacoinal.pdf2pdf relacoinal.pdf
2pdf relacoinal.pdf
 
Librería String, Math de Java (NetBeans)
Librería String, Math de Java (NetBeans)Librería String, Math de Java (NetBeans)
Librería String, Math de Java (NetBeans)
 
Presentacion1
Presentacion1Presentacion1
Presentacion1
 

Más de Jose Emilio Labra Gayo

Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctoradoJose Emilio Labra Gayo
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapesJose Emilio Labra Gayo
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data qualityJose Emilio Labra Gayo
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesJose Emilio Labra Gayo
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesJose Emilio Labra Gayo
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosJose Emilio Labra Gayo
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorJose Emilio Labra Gayo
 
RDF Validation Future work and applications
RDF Validation Future work and applicationsRDF Validation Future work and applications
RDF Validation Future work and applicationsJose Emilio Labra Gayo
 

Más de Jose Emilio Labra Gayo (20)

Publicaciones de investigación
Publicaciones de investigaciónPublicaciones de investigación
Publicaciones de investigación
 
Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctorado
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapes
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data quality
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectives
 
Wikidata
WikidataWikidata
Wikidata
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologies
 
ShEx by Example
ShEx by ExampleShEx by Example
ShEx by Example
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
Introducción a la Web Semántica
Introducción a la Web SemánticaIntroducción a la Web Semántica
Introducción a la Web Semántica
 
2017 Tendencias en informática
2017 Tendencias en informática2017 Tendencias en informática
2017 Tendencias en informática
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazados
 
16 Alternativas XML
16 Alternativas XML16 Alternativas XML
16 Alternativas XML
 
XSLT
XSLTXSLT
XSLT
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el Servidor
 
RDF validation tutorial
RDF validation tutorialRDF validation tutorial
RDF validation tutorial
 
RDF Validation Future work and applications
RDF Validation Future work and applicationsRDF Validation Future work and applications
RDF Validation Future work and applications
 
ShEx vs SHACL
ShEx vs SHACLShEx vs SHACL
ShEx vs SHACL
 

Último

el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docxAleParedes11
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 

Último (20)

el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 

23 sparql

  • 1. SPARQL Departamento de Informática Universidad de Oviedo Jose Emilio Labra Gayo
  • 2. Jose Emilio Labra Gayo – Universidad de Oviedo SPARQL URIUnicode XML Intercambio de datos: RDF Consultas: SPARQL Lógica unificadora Confianza RDF Schema Ontologías OWL Reglas RIF Demostración
  • 3. Jose Emilio Labra Gayo – Universidad de Oviedo SPARQL Los ficheros RDF pueden considerarse bases de datos de tripletas SPARQL (Abril 2006) es un lenguaje de consulta para datos RDF Similar a SQL para RDF Lenguaje de consultas Basado en RDQL Modelo = patrones sobre grafos También describe un protocolo de transporte SPARQL 1.1 (2013, recomendación) Actualizaciones, consultas federadas, etc.
  • 4. Jose Emilio Labra Gayo – Universidad de Oviedo SPARQL Sintaxis Turtle Sintaxis similar a N3 URIs entre < > <http://www.uniovi.es> Prefijos para espacios de nombres PREFIX x: <http://www.alumnos.org/> x:profesor Nodos anónimos _:nombre ó [ ] Literales entre " " "Jose", "234"^^xsd:integer Variables empiezan por ? ?nombre Comentarios empiezan por # # esto es un comentario Nota: En N3 se ponía @prefix …. Declaraciones de prefijos no terminan en punto
  • 5. Jose Emilio Labra Gayo – Universidad de Oviedo RDF RDF = Modelo de grafo Diferentes sintaxis: N3, Turtle, RDF/XML @prefix dc: <http://purl.org/dc/terms/> . @prefix uni: <http://uniovi.es/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . uni:biologia dc:creator uni:juan . uni:biologia dc:creator uni:ana . uni:quimica dc:creator uni:ana . uni:quimica dc:creator uni:luis . uni:derecho dc:creator uni:luis . uni:ana rdf:type uni:Profesor . uni:juan rdf:type uni:Profesor . uni:luis rdf:type uni:Becario . Ejemplo en Turtle
  • 6. Jose Emilio Labra Gayo – Universidad de Oviedo @prefix dc: <http://purl.org/dc/terms/> . @prefix uni: <http://uniovi.es/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . uni:biologia dc:creator uni:juan . uni:biologia dc:creator uni:ana . uni:quimica dc:creator uni:ana . uni:quimica dc:creator uni:luis . uni:derecho dc:creator uni:luis . uni:ana rdf:type uni:Profesor . uni:juan rdf:type uni:Profesor . uni:luis rdf:type uni:Becario . Ejemplo en Turtle Grafo RDF uni:quimica uni:ana dc:creator uni:luis dc:creator uni:Becario rdf:type uni:biologia uni:juan dc:creator dc:creator uni:Profesor rdf:type rdf:type uni:derecho dc:creator
  • 7. Jose Emilio Labra Gayo – Universidad de Oviedo Consulta RDF Buscar páginas creadas por un profesor PREFIX dc: <http://purl.org/dc/terms/> PREFIX uni: <http://uniovi.es/> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?p ?c WHERE { ?p dc:creator ?c . ?c rdf:type uni:Profesor . }
  • 8. Jose Emilio Labra Gayo – Universidad de Oviedo Encaje de grafos SELECT ?p ?c WHERE { ?p dc:creator ?c . ?c rdf:type uni:Profesor . } uni:quimica uni:ana dc:creator uni:luis dc:creator uni:Becario rdf:type uni:biologia uni:juan dc:creator dc:creator uni:Profesor rdf:type rdf:type uni:derecho dc:creator ?p dc:creator ?c uni:Profesor rdf:type ?p ?c Resultados ?p ?c uni:biologia uni:juan uni:quimica uni:ana uni:biologia uni:ana ?p ?c ?p ?c
  • 9. Jose Emilio Labra Gayo – Universidad de Oviedo Ejercicio Test ¿Cuál sería la respuesta de la consulta SPARQL ante el fichero N3 siguiente? PREFIX e: <http://www.pp.org#> SELECT ?z WHERE { ?x e:p ?y. ?y e:q ?z. } @prefix : <http://www.pp.org#>. :a :p :b. :a :p :c. :b :q "M". :b :q "N". M N b c M :a :b :c
  • 10. Jose Emilio Labra Gayo – Universidad de Oviedo Ejercicio Test ¿Cuál sería la respuesta de la consulta SPARQL ante el fichero N3 siguiente? PREFIX e: <http://www.pp.org#> SELECT ?x WHERE { e:a ?x e:c. } @prefix : <http://www.pp.org#>. :a :p :b. :a :p :c. :b :q "M". :b :q "N". ?x e:p e:q e:b
  • 11. Jose Emilio Labra Gayo – Universidad de Oviedo Filtros FILTER añade restricciones a los valores encajados PREFIX e: <http://ejemplo.org#> SELECT ?n ?e WHERE { ?x e:nombre ?n . ?x e:edad ?e FILTER (?e > 18) } @prefix e: <http://ejemplo.org#>. e:Pepe e:nombre "Jose" . e:Pepe e:edad 31 . e:Juan e:nombre "Juan" . e:Juan e:edad 12 . e:Ana e:nombre "Ana" . e:Ana e:edad 25. | n | e | =============== | "Ana" | 25 | | "Jose" | 31 |
  • 12. Jose Emilio Labra Gayo – Universidad de Oviedo Operadores en los Filtros FILTER utiliza funciones y operadores de XPath 2.0 Tipos de datos: Boolean, Integer, Float, dataTime, etc. Operadores habituales: >, <, >=, <=, =, !=, ||, && PREFIX e: <http://ejemplo.org#> SELECT ?n ?e WHERE { ?x e:nombre ?n . ?x e:edad ?e FILTER (?e > 30 || ?e < 18) }
  • 13. Jose Emilio Labra Gayo – Universidad de Oviedo Conversión/creación de tipos de datos str(arg) : convierte el argumento a una cadena NOTA: Las URIs deben convertirse a cadenas si se quieren tratar como tales lang(arg): devuelve el idioma del literal Si ?x = "University"@en Entonces: lang(?x) = "en" datatype(arg): devuelve el tipo de datos del literal Si ?x = "123"^^xsd:integer Entonces datatype(?x) = xsd:integer
  • 14. Jose Emilio Labra Gayo – Universidad de Oviedo Creación tipos de datos uri(arg), iri(arg): convierten el argumento a una URI/IRI bnode(arg): genera un nodo anónimo strdt(literal,tipo): genera un literal con un tipo de datos STRDT("123","xsd:integer") = "123"^^<xsd:integer> strlang(literal,tipo): genera un literal con un idioma dado strlang("University","en") = "University"@"en"
  • 15. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones de comprobación de tipos isNumeric(arg) = true si el argumento es un número isBlank(arg) = true si el argumento es un nodo anónimo isLiteral(arg) = true si el argumento es un literal isIRI(arg) = true si el argumento es una IRI
  • 16. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones condicionales bound(arg) = true si el argumento tiene un valor exists(patrón) = true si se cumple el patrón not exists(patrón) = true si no se cumple el patrón if(cond,expr1,expr2) = si se cumple cond, devuelve expr1, si no, devuelve expr2 coalesce(e1,e2,...)= devuelve la primer expresión que se evalúa sin error
  • 17. Jose Emilio Labra Gayo – Universidad de Oviedo Ejemplo Filtrar las notas numéricas PREFIX : <http://ejemplo.org#> SELECT ?n WHERE { ?x :nota ?n . FILTER (isNumeric(?n)) } @prefix : <http://ejemplo.org#> . _:1 :nombre "Juan" . _:1 :nota 8.5 . _:2 :nombre "Luis" . _:2 :nota "No presentado" . _:3 :nombre "Ana" . _:3 :nota 6.0 . ------- | n | ======= | 6.0 | | 8.5 | -------
  • 18. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con cadenas strlen(str) = longitud de str ucase(str) convierte a mayúsculas lcase(str) convierte a minúsculas substr(str,inicio,tam?)= subcadena a partir de inicio de tamaño tam substr('camino',3,2)='mi' strstarts(str1,str2) = true si str1 comienza con str2 strends(str1,str2) = true si str1 finaliza con str2 contains(str1,str2) = true si str1 contiene str2 encode_for_uri (str) = resultado de codificar str concat (str1,...strN) = concatenación de cadenas langMatches(str,lang) = true si encaja el idioma regex(str,patrón,flags) = true si encaja la expresión regular
  • 19. Jose Emilio Labra Gayo – Universidad de Oviedo Ejemplo PREFIX : <http://ejemplo.org#> SELECT (concat(?nombre,' ',?apells) AS ?persona) WHERE { ?x :nombre ?nombre . ?x :apellidos ?apells . FILTER (contains(ucase(?nombre),'L')) } @prefix : <http://ejemplo.org#>. _:1 :nombre "Juan" . _:1 :apellidos "Gallardo" . _:2 :nombre "Julio" . _:2 :apellidos "Zamora" . _:3 :nombre "Luis" . _:3 :apellidos "Castro" . ------------------ | persona | ================== | "Luis Castro" | | "Julio Zamora" | ------------------
  • 20. Jose Emilio Labra Gayo – Universidad de Oviedo Regex REGEX invoca el encaje de expresiones regulares Utiliza la función de XPath 2.0 regex(?Expresión, ?Patrón [, ?Flags]) ?Expresión = expresión a encajar ?Patrón = expresión regular con la que se encaja ?Flags = opciones para el encaje PREFIX e: <http://ejemplo.org#> SELECT ?n ?e WHERE { ?x e:nombre ?n . ?x e:edad ?e FILTER regex(?n,"A","i") } Selecciona los nombres que contengan la "A" ó la "a"
  • 21. Jose Emilio Labra Gayo – Universidad de Oviedo Regex Expresiones regulares ^ = Inicio de cadena $ = Fin de la cadena . = Cualquier carácter d = dígito ? = opcional, * = 0 ó más, + = 1 ó más X{n} = encaja X n veces X{m,n} = encaja X de m a n veces Flags: i = insensible mayúsculas/minúsculas m = múltiples líneas s = línea simple x = elimina espacios en blanco
  • 22. Jose Emilio Labra Gayo – Universidad de Oviedo Ejercicio El siguiente documento contiene una lista de países http://www.di.uniovi.es/~labra/cursos/XML/europa.ttl 1. Mostrar países cuyo nombre empieza por 'A' 2. Mostrar países cuyo nombre termina por 'a' 3. Mostrar países cuyo nombre empieza por 'A' y termina por 'a' 4. Mostrar países cuyo pib es mayor que 20000 5. Mostrar países cuyo pib es mayor que 20000 y su población menor de 40 millones
  • 23. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones numéricas abs(n) = valor absoluto floor(n) = redondear nº hacia bajo round(n) = redondear nº ceil(n) = redondear nº hacia arriba rand() = nº aleatorio entre 0 y 1
  • 24. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con fechas (1) now() = devuelve el instante actual year(i) = devuelve el año de un instante de tiempo i year("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 2011 month(i) = devuelve el mes de i month("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 1 day(i) = devuelve el día de i day("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 10 hours(i) = devuelve la hora de i hours("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 14
  • 25. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con fechas (2) minutes(i) = devuelve los minutos de i minutes("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 45 seconds(i) = devuelve los segundos de i seconds("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = 13.815 timezone(i) = devuelve la zona temporal de i timezone("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = - PT5H tz(i) = devuelve la zona temporal de i tz("2011-01-10T14:45:13.815-05:00"^^xsd:dateTime) = -5
  • 26. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones HASH md5(str) = aplica el algoritmo MD5 a str sha1(str), sha224(str), sha256(str), sha384(str), sha512(str) = calculan el valor HASH de str utilizando las variaciones correspondientes del algoritmo SHA PREFIX : <http://ejemplo.org#> SELECT ?nombre (SHA1(?email) AS ?sha1Email) WHERE { ?x :nombre ?nombre . ?x :email ?email . } @prefix : <http://ejemplo.org#>. @prefix : <http://ejemplo.org#> . _:1 :nombre "Juan" . _:1 :email "juan@uni.com" . _:2 :nombre "Luis" . _:2 :email "luis@uni.com" . | nombre | sha1Email | ======================================================= | "Luis" | "c3fbedeb973ffbf0b319f152562b31552f03f157" | | "Juan" | "bb402e5fe4d9ccbc8895caf0bae12122f1b0d2fa" |
  • 27. Jose Emilio Labra Gayo – Universidad de Oviedo @prefix e: <http://ejemplo.org#>. @prefix foaf: <http://xmlns.com/foaf/0.1/>. e:Pepe e:nombre "Jose" . e:Pepe e:edad 31 . e:Pepe e:conoceA e:Juan . e:Juan foaf:name "Juan" . e:Juan e:edad 25 . e:Juan e:conoceA e:Ana . e:Ana foaf:name "Ana" . e:Ana e:nombre "Ana Mary". Unión de grafos UNION combina resultados de varios grafos PREFIX e: <http://ejemplo.org#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?n WHERE { { ?x foaf:name ?n } UNION { ?y e:nombre ?n } } n --------------- "Ana" "Juan" "Ana Mary" "Jose"
  • 28. Jose Emilio Labra Gayo – Universidad de Oviedo Encajes opcionales OPTIONAL permite obtener valores en tripletas sin fallar cuando éstas no existan @prefix e: <http://ejemplo.org#>. @prefix foaf: <http://xmlns.com/foaf/01./>. e:Pepe e:nombre "Jose" . e:Pepe e:edad 31 . e:Juan e:nombre "Juan" . e:Ana e:nombre "Ana" . e:Ana e:edad 13. PREFIX e: <http://ejemplo.org#> SELECT ?n ?e WHERE { ?x e:nombre ?n . OPTIONAL { ?x e:edad ?e } } --------------- | n | e | =============== | "Ana" | 13 | | "Juan" | | | "Jose" | 31 | ---------------
  • 29. Jose Emilio Labra Gayo – Universidad de Oviedo Especificar grafos de entrada FROM indica la URL de la que proceden los datos PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?n FROM <http://www.di.uniovi.es/~labra/labraFoaf.rdf> WHERE { ?x foaf:name ?n } Si se incluyen varios conjuntos de entrada se realiza la mezcla de los grafos resultantes PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?n FROM <http://www.di.uniovi.es/~labra/labraFoaf.rdf> FROM <http://www.w3.org/People/Berners-Lee/card> WHERE { ?x foaf:name ?n }
  • 30. Jose Emilio Labra Gayo – Universidad de Oviedo Ejercicio Modelizar las siguientes tablas en 2 ficheros Turtle diferentes DNI Nombre Apellidos 9999 Juan Gallardo 8888 Jose Torre 7777 Ana Cascos DNI Nota 9999 3 7777 5 Construir una consulta que permita visualizar la nota de cada alumno junto con su nombre y apellidos
  • 31. Jose Emilio Labra Gayo – Universidad de Oviedo Grafos con nombre FROM NAMED asigna un nombre al grafo de entrada GRAPH encaja con el nombre del grafo que corresponda PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?n ?g FROM NAMED <http://www.w3.org/People/Berners-Lee/card> FROM NAMED <http://www.di.uniovi.es/~labra/labraFoaf.rdf> WHERE { GRAPH ?g { ?x foaf:name ?n } }
  • 32. Jose Emilio Labra Gayo – Universidad de Oviedo Control de los resultados DISTINCT elimina valores duplicados ORDER BY permite especificar el orden de los resultados (puede especificarse ASC, DESC…) LIMIT n indica el número de resultados OFFSET m indica a partir de qué resultado empezar a contar PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT DISTINCT ?n WHERE { ?x foaf:knows ?y . ?y foaf:name ?n . } ORDER BY ASC(?n) LIMIT 5 OFFSET 10
  • 33. Jose Emilio Labra Gayo – Universidad de Oviedo CONSTRUCT Permite crear un grafo de salida @prefix : <http://ejemplo.org#> . _:1 :nombre "Juan" . _:1 :amigoDe _:2, _:3 . _:2 :nombre "Luis" . _:2 :amigoDe _:1 . _:3 :nombre "Ana" . _:3 :amigoDe _:1 . PREFIX : <http://ejemplo.org#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> CONSTRUCT { ?x foaf:name ?n . ?x foaf:knows ?y . } WHERE { ?x :nombre ?n . ?x :amigoDe ?y . } @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:b1 foaf:knows [ foaf:knows _:b1 ; foaf:name "Luis" ] ; foaf:knows [ foaf:knows _:b1 ; foaf:name "Ana" ] ; foaf:name "Juan" .
  • 34. Jose Emilio Labra Gayo – Universidad de Oviedo ASK ASK devuelve sí o no Puede ser útil para chequeo de errores @prefix : <http://ejemplo.org#> . _:1 :nombre "Juan" . _:1 :nota 8.5 . _:2 :nombre "Luis" . _:2 :nota "No presentado" . _:3 :nombre "Ana" . _:3 :nota 6.0 . Yes PREFIX : <http://ejemplo.org#> ASK WHERE { ?x :nota ?n . FILTER ( ! isNumeric(?n)) }
  • 35. Jose Emilio Labra Gayo – Universidad de Oviedo @prefix : <http://ejemplo.org#> . _:1 :nombre "Juan" . _:1 :nota 8.5 . _:2 :nombre "Luis" . _:2 :nota "No presentado" . _:3 :nombre "Ana" . _:3 :nota 6.0 . DESCRIBE Devuelve una descripción RDF de uno o varios nodos @prefix : <http://ejemplo.org#> . [] :nombre "Ana" ; :nota 6.0 . PREFIX : <http://ejemplo.org#> DESCRIBE ?x WHERE { ?x :nota ?n . FILTER(?n = 6.0) }
  • 36. Jose Emilio Labra Gayo – Universidad de Oviedo Asignaciones BIND expr AS v = Asigna el valor de expr a la variable v @prefix e: <http://ejemplo.org#>. _:1 e:nombre "Manzanas" . _:1 e:cantidad 3 . _:1 e:precio 3 . _:2 e:nombre "Peras" . _:2 e:cantidad 2 . _:2 e:precio 2 . _:3 e:nombre "Naranjas" . _:3 e:cantidad 4 . _:3 e:precio 1 . PREFIX e: <http://ejemplo.org#> SELECT ?n ?precioTotal WHERE { ?x e:nombre ?n . ?x e:cantidad ?cantidad . ?x e:precio ?precio . BIND ((?cantidad * ?precio) AS ?precioTotal) } ---------------------------- | n | precioTotal | ============================ | "Naranjas" | 4 | | "Peras" | 4 | | "Manzanas" | 9 | ----------------------------
  • 37. Jose Emilio Labra Gayo – Universidad de Oviedo Asignaciones en SELECT Es posible realizar la asignación directamente @prefix e: <http://ejemplo.org#>. _:1 e:nombre "Manzanas" . _:1 e:cantidad 3 . _:1 e:precio 3 . _:2 e:nombre "Peras" . _:2 e:cantidad 2 . _:2 e:precio 2 . _:3 e:nombre "Naranjas" . _:3 e:cantidad 4 . _:3 e:precio 1 . PREFIX e: <http://ejemplo.org#> SELECT ?n ((?cantidad * ?precio) AS ?precioTotal) WHERE { ?x e:nombre ?n . ?x e:cantidad ?cantidad . ?x e:precio ?precio . } ---------------------------- | n | precioTotal | ============================ | "Naranjas" | 4 | | "Peras" | 4 | | "Manzanas" | 9 | ----------------------------
  • 38. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones de agregación: AVG, SUM, COUNT, SAMPLE @prefix e: <http://ejemplo.org#>. e:Pepe e:nombre "Jose" . e:Pepe e:edad 31 . e:Juan e:nombre "Juan" . e:Juan e:edad 12 . e:Ana e:nombre "Ana" . e:Ana e:edad 25. PREFIX e: <http://ejemplo.org#> SELECT (AVG(?edad) AS ?media) (SUM(?edad) AS ?suma) (COUNT(?edad) AS ?cuenta) (SAMPLE(?edad) AS ?muestra) WHERE { ?n e:edad ?edad . } | media | suma | cuenta | muestra | ==================================== | 22.66 | 68 | 3 | 25 |
  • 39. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones de agregación: MAX, MIN @prefix e: <http://ejemplo.org#>. e:Pepe e:nombre "Jose" . e:Pepe e:edad 31 . e:Juan e:nombre "Juan" . e:Juan e:edad 12 . e:Ana e:nombre "Ana" . e:Ana e:edad 25. PREFIX e: <http://ejemplo.org#> SELECT (MAX(?edad) as ?mayor) (MIN(?edad) as ?menor) WHERE { ?n e:edad ?edad . } | mayor | menor | ================== | 31 | 12 |
  • 40. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones de agregación GROUP_CONCAT @prefix e: <http://ejemplo.org#>. e:Pepe e:nombre "Jose" . e:Pepe e:edad 31 . e:Juan e:nombre "Juan" . e:Juan e:edad 12 . e:Ana e:nombre "Ana" . e:Ana e:edad 25. PREFIX e: <http://ejemplo.org#> SELECT (GROUP_CONCAT(?edad; SEPARATOR=',') as ?edades) where { ?n e:edad ?edad . } | edades | =============== | 25, 12, 31|
  • 41. Jose Emilio Labra Gayo – Universidad de Oviedo Agrupaciones: GROUP_BY GROUP BY permite agrupar conjuntos de resultados @prefix e: <http://ejemplo.org#>. _:1 e:nombre "Ana". _:1 e:edad 18 . _:1 e:nota 8 . _:2 e:nombre "Juan". _:2 e:edad 20 . _:2 e:nota 7 . _:3 e:nombre "Luis". _:3 e:edad 18 . _:3 e:nota 5 . _:4 e:nombre "Mario". _:4 e:edad 19 . _:4 e:nota 6 . _:5 e:nombre "Carlos". _:5 e:edad 20 . _:5 e:nota 9 . PREFIX e: <http://ejemplo.org#> SELECT (AVG(?nota) AS ?mediaNota) ?edad WHERE { ?x e:nombre ?n . ?x e:edad ?edad . ?x e:nota ?nota . } GROUP BY ?edad --------------------- | mediaNota | edad | ===================== | 6.5 | 18 | | 8.0 | 20 | | 6.0 | 19 | ---------------------
  • 42. Jose Emilio Labra Gayo – Universidad de Oviedo Agrupaciones: HAVING HAVING permite filtrar los grupos que cumplan una condición @prefix e: <http://ejemplo.org#>. _:1 e:nombre "Ana". _:1 e:edad 18 . _:1 e:nota 8 . _:2 e:nombre "Juan". _:2 e:edad 20 . _:2 e:nota 7 . _:3 e:nombre "Luis". _:3 e:edad 18 . _:3 e:nota 5 . _:4 e:nombre "Mario". _:4 e:edad 19 . _:4 e:nota 6 . _:5 e:nombre "Carlos". _:5 e:edad 20 . _:5 e:nota 9 . PREFIX e: <http://ejemplo.org#> SELECT (AVG(?nota) AS ?mediaNota) ?edad WHERE { ?x e:nombre ?n . ?x e:edad ?edad . ?x e:nota ?nota . } GROUP BY ?edad HAVING (?mediaNota < 8) --------------------- | mediaNota | edad | ===================== | 6.5 | 18 | | 6.0 | 19 | ---------------------
  • 43. Jose Emilio Labra Gayo – Universidad de Oviedo Subconsultas Es posible realizar consultas dentro de consultas @prefix e: <http://ejemplo.org#>. _:1 e:nombre "Ana". _:1 e:edad 18 . _:1 e:nota 8 . _:2 e:nombre "Juan". _:2 e:edad 20 . _:2 e:nota 7 . _:3 e:nombre "Luis". _:3 e:edad 18 . _:3 e:nota 5 . _:4 e:nombre "Mario". _:4 e:edad 19 . _:4 e:nota 6 . _:5 e:nombre "Carlos". _:5 e:edad 20 . _:5 e:nota 9 . PREFIX e: <http://ejemplo.org#> SELECT ?nombre ?nota (?nota - ?notaMedia AS ?desv) WHERE { ?x e:nombre ?nombre . ?x e:nota ?nota . { SELECT (AVG(?nota) AS ?notaMedia) WHERE { ?x e:nota ?nota . } } } -------------------------- | nombre | nota | desv | ========================== | "Carlos" | 9 | 2 | | "Mario" | 6 | -1 | | "Luis" | 5 | -2 | | "Juan" | 7 | 0 | | "Ana" | 8 | 1 | --------------------------
  • 44. Jose Emilio Labra Gayo – Universidad de Oviedo Ejercicio El siguiente documento contiene una lista de países http://www.di.uniovi.es/~labra/cursos/XML/europa.ttl 1. Mostrar el país con mayor PIB 2. Mostrar el PIB medio 3. Mostrar países cuyo PIB es mayor que el PIB medio 4. Mostrar países de una población similar a la de España cuyo PIB esté por encima
  • 45. Jose Emilio Labra Gayo – Universidad de Oviedo Caminos de propiedades La URI que identifica la propiedad puede contener una expresión regular p Encaja con la propiedad p (e) Camino agrupado entre parántesis ^e Camino inverso de e !p No encaja con la propiedad p e1 / e2 Camino e1 seguido de e2 e1 | e2 Camino e1 ó e2 e* 0 ó más apariciones de e e+ 1 ó más apariciones de e e? 0 ó 1 aparición de e e{n} n apariciones de e e{m,n} Entre m y n apariciones de e e{n,} n ó más apariciones de e e{,n} Entre 0 y n apariciones de e
  • 46. Jose Emilio Labra Gayo – Universidad de Oviedo @prefix e: <http://ejemplo.org#>. @prefix foaf: <http://xmlns.com/foaf/0.1/>. e:Pepe e:nombre "Jose" . e:Juan foaf:name "Juan" . e:Ana foaf:name "Ana" . e:Ana e:nombre "Ana Mary". Caminos de propiedades n --------------- "Ana" "Ana Mary" "Jose" "Juan" PREFIX e: <http://ejemplo.org#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?n WHERE { ?x (foaf:name | e:nombre) ?n }
  • 47. Jose Emilio Labra Gayo – Universidad de Oviedo Caminos de propiedades e:Ignacio e:conoceA e:Francisco, e:Genaro. e:Francisco e:conoceA e:Carlos, e:Emilio . e:Genaro e:conoceA e:Carlos, e:Emilio . e:Carlos e:conoceA e:Antonio . e:Emilio e:conoceA e:Antonio . e:Hilario e:conoceA e:Dionisio . e:Dionisio e:conoceA e:Bernardo . e:Bernardo e:conoceA e:Antonio . PREFIX e: <http://ejemplo.org#> SELECT ?p { ?p e:conoceA+ e:Antonio. } --------------- | p | =============== | e:Bernardo | | e:Dionisio | | e:Hilario | | e:Emilio | | e:Genaro | | e:Ignacio | | e:Francisco | | e:Ignacio | | e:Carlos | | e:Genaro | | e:Ignacio | | e:Francisco | | e:Ignacio | --------------- Antonio Bernardo Carlos Emilio Dionisio Francisco Genaro Hilario Ignacio
  • 48. Jose Emilio Labra Gayo – Universidad de Oviedo Caminos de propiedades e:Ignacio e:conoceA e:Francisco, e:Genaro. e:Francisco e:conoceA e:Carlos, e:Emilio . e:Genaro e:conoceA e:Carlos, e:Emilio . e:Carlos e:conoceA e:Antonio . e:Emilio e:conoceA e:Antonio . e:Hilario e:conoceA e:Dionisio . e:Dionisio e:conoceA e:Bernardo . e:Bernardo e:conoceA e:Antonio . PREFIX e: <http://ejemplo.org#> SELECT ?p { ?p e:conoceA{2} e:Antonio. } --------------- | p | =============== | e:Dionisio | | e:Genaro | | e:Francisco | | e:Genaro | | e:Francisco | --------------- Antonio Bernardo Carlos Emilio Dionisio Francisco Genaro Hilario Ignacio
  • 49. Jose Emilio Labra Gayo – Universidad de Oviedo Caminos de propiedades e:Ignacio e:conoceA e:Francisco, e:Genaro. e:Francisco e:conoceA e:Carlos, e:Emilio . e:Genaro e:conoceA e:Carlos, e:Emilio . e:Carlos e:conoceA e:Antonio . e:Emilio e:conoceA e:Antonio . e:Hilario e:conoceA e:Dionisio . e:Dionisio e:conoceA e:Bernardo . e:Bernardo e:conoceA e:Antonio . PREFIX e: <http://ejemplo.org#> SELECT DISTINCT ?p { ?p e:conoceA/e:conoceA e:Antonio. } --------------- | p | =============== | e:Dionisio | | e:Genaro | | e:Francisco | | e:Genaro | | e:Francisco | --------------- Antonio Bernardo Carlos Emilio Dionisio Francisco Genaro Hilario Ignacio
  • 50. Jose Emilio Labra Gayo – Universidad de Oviedo Caminos de propiedades e:Ignacio e:conoceA e:Francisco, e:Genaro. e:Francisco e:conoceA e:Carlos, e:Emilio . e:Genaro e:conoceA e:Carlos, e:Emilio . e:Carlos e:conoceA e:Antonio . e:Emilio e:conoceA e:Antonio . e:Hilario e:conoceA e:Dionisio . e:Dionisio e:conoceA e:Bernardo . e:Bernardo e:conoceA e:Antonio . PREFIX e: <http://ejemplo.org#> SELECT ?p { ?p e:conoceA/^e:conoceA e:Francisco. FILTER (?p != e:Francisco) } --------------- | p | =============== | e:Genaro | | e:Genaro | --------------- Antonio Bernardo Carlos Emilio Dionisio Francisco Genaro Hilario Ignacio
  • 51. Jose Emilio Labra Gayo – Universidad de Oviedo Actualizaciones SPARQL Update
  • 52. Jose Emilio Labra Gayo – Universidad de Oviedo Tratamiento de grafos Actualización INSERT DATA = insertar tripletas DELETE/INSERT… = borrar/insertar tripletas condicionalmente DELETE DATA = borrar tripletas LOAD = cargar tripletas de un documento CLEAR = borrar todas las tripletas de un grafo Gestión de grafos CREATE = crear grafo DROP = eliminar grafo COPY…TO… = copiar grafo MOVE…TO… = mover grafo ADD = insertar todos los datos de un grafo en otro
  • 53. Jose Emilio Labra Gayo – Universidad de Oviedo Inserción INSERT DATA permite insertar tripletas PREFIX e: <http://ejemplo.org#> INSERT DATA { e:ana e:nombre "Ana". e:ana e:edad 18 . e:ana e:nota 8 . e:juan e:nombre "Juan Manuel". e:juan e:edad 20 . e:juan e:nota 7 . }
  • 54. Jose Emilio Labra Gayo – Universidad de Oviedo Inserción en un grafo concreto INSERT DATA puede especificar el grafo PREFIX e: <http://ejemplo.org#> PREFIX g: <http://grafos.org#> INSERT DATA { GRAPH g:g1 { e:ana e:nombre "Ana". e:ana e:edad 18 . e:ana e:nota 8 . } }
  • 55. Jose Emilio Labra Gayo – Universidad de Oviedo Inserción INSERT permite insertar tripletas en un grafo. Requiere una cláusula WHERE PREFIX e: <http://ejemplo.org#> INSERT { ?p e:nombreNota "Notable". } WHERE { ?p e:nota ?nota . FILTER (?nota >= 7 && ?nota < 9) }
  • 56. Jose Emilio Labra Gayo – Universidad de Oviedo Carga de grafo LOAD permite cargar todas las tripletas existentes en una URI LOAD <http://www.di.uniovi.es/~labra/labraFoaf.rdf>
  • 57. Jose Emilio Labra Gayo – Universidad de Oviedo Borrado DELETE DATA permite eliminar tripletas de un grafo PREFIX e: <http://ejemplo.org#> DELETE DATA { e:luis e:nota 5 . } NOTA: DELETE DATA No admite variables
  • 58. Jose Emilio Labra Gayo – Universidad de Oviedo Borrado DELETE WHERE permite eliminar tripletas de un grafo especificando una condición PREFIX e: <http://ejemplo.org#> DELETE { ?x e:nota ?nota . } WHERE { ?x e:nota ?nota . FILTER (?nota >= 8) }
  • 59. Jose Emilio Labra Gayo – Universidad de Oviedo Actualización DELETE/INSERT permite actualizar tripletas de un grafo PREFIX e: <http://ejemplo.org#> DELETE { ?x e:edad ?edad } INSERT { ?x e:edad ?edad1 } WHERE { ?x e:edad ?edad . BIND((?edad + 1) AS ?edad1) } Ejemplo: incrementar la edad
  • 60. Jose Emilio Labra Gayo – Universidad de Oviedo Borrado total CLEAR borra todas las tripletas Puede indicarse el conjunto de datos CLEAR g = Borra grafo g CLEAR DEFAULT = Borra grafo actual CLEAR ALL = Borra todos los grafos
  • 61. Jose Emilio Labra Gayo – Universidad de Oviedo Consulta universal Para ver todas las tripletas de la base de datos PREFIX e: <http://ejemplo.org#> SELECT * WHERE { { ?x ?p ?y . } UNION { GRAPH ?g {?x ?p ?y .} } }
  • 62. Jose Emilio Labra Gayo – Universidad de Oviedo Acceso a servicios remotos SERVICE uri = indica un endpoint SPARQL PREFIX dbo: <http://dbpedia.org/ontology/> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?nombre WHERE { SERVICE <http://dbpedia.org/sparql> { SELECT ?nombre WHERE { ?pais rdf:type dbo:Country . ?pais rdfs:label ?nombre . FILTER (lang(?nombre)='es') } } } Lista de terminales SPARQL http://esw.w3.org/topic/SparqlEndpoints
  • 63. Jose Emilio Labra Gayo – Universidad de Oviedo Consultas federadas Combinando resultados PREFIX imdb: <http://data.linkedmdb.org/resource/movie/> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX dbpo: <http://dbpedia.org/ontology/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT * { { SERVICE <http://dbpedia.org/sparql> { SELECT ?fechaNacim ?nombreMujer WHERE { ?actor rdfs:label "Javier Bardem"@en ; dbpo:birthDate ?fechaNacim ; dbpo:spouse ?mujerURI . ?mujerURI rdfs:label ?nombreMujer . FILTER ( lang(?nombreMujer) = "en" ) } } } { SERVICE <http://data.linkedmdb.org/sparql> { SELECT ?peli ?fechaPeli WHERE { ?actor imdb:actor_name "Javier Bardem". ?movie imdb:actor ?actor ; dcterms:title ?peli ; dcterms:date ?fechaPeli . } } } } DBPedia: http://dbpedia.org IMDB: http://data.linkedmdb.org
  • 64. Jose Emilio Labra Gayo – Universidad de Oviedo Ejercicio Buscar en la DBPedia películas españolas, mostrando el título, el nombre del director y el año en que se hicieron. Combinar la información con otros terminales SPARQL
  • 65. Jose Emilio Labra Gayo – Universidad de Oviedo Patrón de negación por fallo en SPARQL Combinando FILTER, OPTIONAL y !BOUND se puede simular la negación por fallo Ejemplo: Buscar personas que no están casadas. @prefix : <http://ej.org#>. :Pepe :estaCasadoCon :Ana . :Pepe :nombre "Jose" . :Luis :estaCasadoCon :Marta . :Luis :nombre "Luis" . :Carlos :nombre "Carlos" . PREFIX : <http://ej.org#> SELECT ?n WHERE { ?x :nombre ?n OPTIONAL {?x :estaCasadoCon ?y } FILTER ( !BOUND(?y) ) }
  • 66. Jose Emilio Labra Gayo – Universidad de Oviedo Creación de Base de Datos RDF Fuseki permite trabajar con datos RDF como una base de datos Es posible realizar consultas SPARQL > mkdir dirDatos > fuseki-server --update --loc=dirDatos /datos Arrancar servidor Acceso en puerto: http://localhost:3030
  • 67. Jose Emilio Labra Gayo – Universidad de Oviedo Validación de RDF mediante SPARQL Ejemplo: Una persona tiene una edad (entero) y uno ó más nombres (string) Persona__ foaf:age xsd:integer foaf:name xsd:string+ :john foaf:age 23; foaf:name "John" . :bob foaf:age 34; foaf:name "Bob", "Robert" .  Ejemplos de RDF :mary foaf:age 50, 65 .
  • 68. Jose Emilio Labra Gayo – Universidad de Oviedo Ejemplo de consulta SPARQL ASK { { SELECT ?Person { ?Person foaf:age ?o . } GROUP BY ?Person HAVING (COUNT(*)=1) } { SELECT ?Person { ?Person foaf:age ?o . FILTER ( isLiteral(?o) && datatype(?o) = xsd:integer ) } GROUP BY ?Person HAVING (COUNT(*)=1) } { SELECT ?Person (COUNT(*) AS ?Person_c0) { ?Person foaf:name ?o . } GROUP BY ?Person HAVING (COUNT(*)>=1) } { SELECT ?Person (COUNT(*) AS ?Person_c1) { ?Person foaf:name ?o . FILTER (isLiteral(?o) && datatype(?o) = xsd:string) } GROUP BY ?Person HAVING (COUNT(*)>=1) } FILTER (?Person_c0 = ?Person_c1) } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Persona__ foaf:age xsd:integer foaf:name xsd:string+
  • 69. Jose Emilio Labra Gayo – Universidad de Oviedo ¿Es posible añadir recursividad al modelo? Ejemplo: Una persona tiene una edad (entero), uno o más nombres (string) y conoce a 0 ó más personas Persona__ foaf:age xsd:integer foaf:name xsd:string+ 0..* foaf:knows
  • 70. Jose Emilio Labra Gayo – Universidad de Oviedo Fin de la Presentación