SPARQL es un acrónimo recursivo del inglés SPARQL Protocol and RDF Query Language. Se trata de un lenguaje estandarizado para la consulta de grafos RDF, normalizado por el RDF Data Access Working Group (DAWG) del World Wide Web Consortium (W3C). Es una tecnología clave en el desarrollo de la Web Semántica.
SPARQL actualmente está definida en su versión 1.1, en el documento http://www.w3.org/TR/sparql11-query, en el que en parte se fundamenta la presente introducción.
En otras palabras, SPARQL es la forma de explotar la información contenida en la web semántica.
Aunque el presente documento se fundamenta en el lenguaje de consulta propiamente dicho, el estándar SPARQL 1.1 contempla también la sintaxis para construir sentencias de actualización y construcción de ternas (INSERT, DELETE, etc.).
Una sentencia SPARQL comprende las siguientes secciones:
Figura: Consulta SPARQL: Secciones
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX card: <http://www.w3.org/People/Berners-Lee/card#>
SELECT ?homepage
FROM <http://www.w3.org/People/Berners-Lee/card>
WHERE {
card:i foaf:knows ?known .
?known foaf:homepage ?homepage .
} ORDER BY DESC(?homepage)
Un SPARQL endpoint acepta consultas SPARQL y devuelve los resultados vía HTTP. Pueden ser de dos tipos:
Puede ver una lista de SPARQL endpoints en http://www.w3.org/wiki/SparqlEndpoints.
Los resultados de una consulta pueden ser devueltos en diversos formatos: XML, JSON, RDF, HTML, etc.
Un Dataset típico es el FOAF (Friend of a Friend) que describe las relaciones interpersonales.
Figura: Todos los nombres posibles
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE {
?person foaf:name ?name .
}
DBPedia es la versión RDF de información derivada de la Wikipedia, conteniendo alrededor de 100 millones de tripletas.
DBPedia endpoint: http://dbpedia.org/sparql
NOTA: A partir de éste punto, los ejemplos del presente documento se basarán en el DBPedia endpoint.
BGP (Basic Graph Pattern): Es la forma mas simple de patrones describiendo un grafo mediante ternas, usando URIs, literales o variables donde corresponda. El patrón mas simple sería **?s ?p ?o .
Figura: Todos los libros (limitado a los 1000 primeros resultados)
PREFIX dbprop: <http://dbpedia.org/property/>
PREFIX dbclass: <http://dbpedia.org/class/>
SELECT ?object
WHERE {
?object rdf:type dbclass:Book .
}
LIMIT 1000
Figura: Todos los títulos de libros
PREFIX dbprop: <http://dbpedia.org/property/>
PREFIX dbclass: <http://dbpedia.org/class/>
SELECT ?title
WHERE {
?object rdf:type dbclass:Book .
?object dbprop:name ?title .
}
LIMIT 1000
Listas de Predicados-Objetos: La nomenclatura permite abreviar diferentes patrones mediante el uso de ";" y "," en vez del terminador ".".
Uso del ";":
?x dbprop:author ?autor ;
dbprop:isbn ?isbn .
Sería equivalente a:
?x dbprop:author ?autor .
?x dbprop:isbn ?isbn .
Uso del ",":
?x dbprop:author "Cervantes", "Cervantes_" .
Sería equivalente a:
?x dbprop:author "Cervantes" .
?x dbprop:author "Cervantes_" .
Usando Literales: Pueden utilizarse directamente con entrecomillado o utilizar modificadores para matizar su concordancia (mas información: http://skos.um.es/TR/rdf-sparql-query/#matchingRDFLiterals ).
?a ?p "cat" .
?b ?p "cat"@en .
?c ?p "42"^^xsd:integer .
Figura: Busca "Lo que el viento se llevó" en español
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbprop: <http://dbpedia.org/property/>
PREFIX dbclass: <http://dbpedia.org/class/>
SELECT ?object
WHERE {
?object rdf:type dbclass:Book .
?object rdfs:label "Lo que el viento se llevó"@es .
}
LIMIT 1000
Rdf:type Se puede utilizar la palabra clave "a" como un predicado en un patrón de tripleta; es una alternativa para la IRI http://www.w3.org/1999/02/22-rdf-syntax-ns#type. Esta palabra clave es sensible a las mayúsculas.
?x a :Class1 .
es equivalente a:
?x rdf:type :Class1 .
Filtros [FILTER]: selecciona solo las soluciones que cumplen la condición indicada (mas información: http://skos.um.es/TR/rdf-sparql-query/#termConstraint).
Figura: Busca Libros de menos de 100 páginas
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbowl: <http://dbpedia.org/ontology/>
PREFIX dbprop: <http://dbpedia.org/property/>
PREFIX dbclass: <http://dbpedia.org/class/>
SELECT ?object ?npages
WHERE {
?object a dbclass:Book .
?object dbowl:numberOfPages ?npages .
FILTER (?npages < 100)
}
LIMIT 1000
{ ?x foaf:name ?name .
?x foaf:mbox ?mbox .
FILTER regex(?name, "Smith")
}
{ FILTER regex(?name, "Smith")
?x foaf:name ?name .
?x foaf:mbox ?mbox .
}
Concordancias Alternativas [UNION]: SPARQL provee de un mecanismo para seleccionar patrones alternativos, equivalentes al tradicional OR, mediante la clausula UNION.
Figura: Libros de menos de 500 páginas de Stephen King o de Michael Crichton ordenados por número de páginas
PREFIX dbowl: <http://dbpedia.org/ontology/>
PREFIX dbclass: <http://dbpedia.org/class/>
SELECT ?object ?autor ?npages
WHERE {
?object a dbclass:Book .
?object dbowl:author ?autor .
?object dbowl:numberOfPages ?npages .
FILTER (?npages < 500)
{
?object dbowl:author <http://dbpedia.org/resource/Stephen_King> .
} UNION {
?object dbowl:author <http://dbpedia.org/resource/Michael_Crichton> .
}
}
ORDER BY ?npages
LIMIT 1000