Guía básica de iniciación a SPARQL con ejemplos de búsquedas en DBpedia


1. Introducción: ¿qué es SPARQL?

SPARQL es un lenguaje para interrogar bases de datos RDF, es decir, hacer búsquedas (querys) en repositorios Web (Web semántica). Sirve para extraer valores de datos estructurados y semiestructurados, explorar datos mediante consultas a relaciones desconocidas y realizar búsquedas con combinaciones complejas de bases de datos dispares en una única consulta simple.

El acceso a la información disponible en la web lo realizaremos a través de plataformas como DBpedia (Wikipedia), LinkedMDB (IMDB) o ResearchSpace (British Museum); hay muchas otras plataformas con repositorios de casi cualquier tema (música, medicina, educación…).

2. SPARQL Endpoints.

Las búsquedas se realizan a través de un SPARQL Endpoint, que es la interfaz de entrada y salida de estas bases de datos y que permitirá nuestras consultas. Dicho de otra forma, los Endpoints de SPARQL no son más que una dirección web (URL) que acepta peticiones de búsqueda SPARQL y devuelve resultados.  Por ejemplo, el Endpoint de DBpedia es http://dbpedia.org/sparql y el de LinkedMDB es http://data.linkedmdb.org/sparql . Aquí tienes un listado de algunos de los SPARQL Enpoint más populares. Aquí otro.

3. Tripletas RDF.

Las consultas SPARQL se realizan en realidad sobre un grafo de entrada compuesto por tripletas RDF. No te preocupes si esto te suena ahora mismo a chino, veremos en qué consiste de forma simple a continuación.

RDF no es más es un lenguaje para representar información sobre recursos en la World Wide Web. Está particularmente indicado para representar metadatos sobre dichos recursos web, tales como el título, autor, año, etc. RDF es especialmente útil para aplicaciones que necesitan intercambiar información entre ellas.
RDF describe los recursos con sentencias, de forma parecida a como hablamos. Y estas sentencias RDF se dividen en 3 partes (de ahí el nombre de tripleta): sujeto – predicado – objeto.

La imagen anterior es un grafo simple. En ella la sentencia es “J.R.R. Tolkien escribió El Señor de los Anillos“, siendo “J.R.R. Tolkien” el sujeto, “escribió” el predicado y “El Señor de los Anillos” el objeto. Es un caso muy simple de grafo. Podemos intuir fácilmente que del nodo “J.R.R. Tolkien” salen muchas otras flechas como por ejemplo “El Hobbit”, “escritor”, “profesor”, etc. Y también entran muchas flechas, como por ejemplo “Nacidos en 1892”, “escritores británicos”, etc. De hecho, el sentido de las flechas dependen exclusivamente de qué nodo usemos como sujeto. La sentencia “El Señor de los Anillos fue escrito por J.R.R. Tolkien” es justo la inversa del grafo anterior, con el sujeto y objeto intercambiados.

Si esto de “sujeto-predicado-objeto” no te convence, hay una forma alternativa de interpretar la tripleta. Podemos mirar las 3 partes como “Recurso” (o identificador del recurso), “Nombre de la propiedad” y “Valor de la propiedad“. Por ejemplo:

Identificador

Propiedad Valor

Frodo

Email

frodo_baggins@gmail.com

Gandalf Tlf

555-Grey

El dataset RDF almacenaría los datos de una libreta de direcciones utilizando tripletes que hacen declaraciones como “el valor Email de Frodo es frodo_baggins@gmail.com” o “el valor de Tlf. de Gandalf es 555-Grey“. RDF no tiene problemas para asignar valores múltiples para una propiedad determinada a un recurso dado, como por ejemplo asignar dos direcciones de correo electrónico a un mismo identificador.

Por último, señalar que los recursos son representados con URI’s como identificadores (para no entrar en detalles, diremos que una URI es una URL pero con algo más de información). Estas URI’s suelen abreviarse al principio del código SPARQL con comando PREFIX (ya veremos cómo) para evitar tener que escribirlas varias veces y hacer el código más legible.

4. Editores SPARQL.

Hay muchos editores para hacer las querys de SPARQL. Estos son 3 de ellos:

Virtuoso SPARQL Query Editor: El editor de DBpedia.
Sparql Playground: Plataforma del Swiss Institute of Bioinformatics.
Yasgui: Editor de Data Semantics.

5. Estructura básica de una búsqueda SPARQL.

La estructura es la siguiente:

  • PREFIX: Declaración de prefijos para abreviar URI’s.
  • FROM: Definición del dataset, indicando que grafos RDF vamos a consultar.
  • SELECT: Selección del resultado, indicando que información nos va a devolver la consulta.
  • WHERE: Patrón de consulta.
  • Modificadores de consulta (ordenar, cribar, etc.): ORDER BY, OFFSET, LIMIT…

En general, una búsqueda en SPARQL debe ser algo parecido a “quiero estas piezas de información del subconjunto de datos que cumple estas condiciones”.

5. Un “Hello World!” en SPARQL.

El ejemplo más sencillo en SPARQL es una consulta simple, por ejemplo, obtener el título de un libro (que en este caso se titula “Hello World!“) en un grafo de datos dado. La consulta básica constará de dos partes: SELECT identifica las variables de la consulta con el símbolo “?” delante y WHERE establece el patrón de consulta.

Suponemos que estos son los datos que disponemos:

<http://example.org/book/book1> <http://purl.org/dc/elements/1.1./title> “Hello World!” .

Como se ve, disponemos es una tripleta RDF tal como hemos analizado antes. Purl es un localizador persistente uniforme de recursos. Es como una URL, pero en lugar de apuntar directamente a la ubicación de un recurso de Internet, un PURL apunta a un servicio intermedio de resolución, en este caso al metadata de título o title.

La consulta sería la siguiente:

SELECT ?title
WHERE
{
  <http://example.org/book/book1> <http://purl.org/dc/elements/1.1./title> ?title .
}

Esta consulta produciría el siguiente resultado:

                                                                                     title
                                                                            “Hello World!”

6. Una primera búsqueda en DBpedia.

Vamos a realizar nuestra primera consulta en DBpedia. Por ejemplo, obtener un listado de todos los directores de cine de fantasía. Para ello, lo primero es saber cómo está representada esta información en nuestra base datos, que es DBpedia. Usando Google, averiguamos que hay una categoría denominada “Fantasy film directors“:

Además, en la misma página vemos que “Fantasy film directors” es un tema (subject) de una serie de directores de cine. Por tanto, tenemos que preguntar por “directores de cine, con la categoría de “Fantasy films director” como subject”:

PREFIX cat: <http://dbpedia.org/resource/Category:>
PREFIX ter: <http://purl.org/dc/terms/>

select ?directores
WHERE {
?directores ter:subject cat:Fantasy_film_directors .
}

El resultado es un listado de 18 directores de cine.

7. Una búsqueda más en DBpedia.

En el listado del ejercicio anterior, uno de los directores era Peter Jackson. Vamos a realizar ahora una consulta, para obtener un listado de todas las películas dirigidas por él. En este caso, entrando en cualquier de sus películas en DBpedia vemos las siguientes etiquetas:

Por lo tanto, debemos buscar por la etiqueta de “director” en dbo (ontología) y por la de “Peter Jackson” en dbr (recurso). El editor Yasgui rellena estos PREFIX de forma atomática.

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>

select ?peliculas
WHERE {
?peliculas dbo:director dbr:Peter_Jackson .
}

El resultado son las 18 películas dirigidas por Peter Jackson hasta la fecha (según DBpedia):

Para saber más:
SPARQL Lenguaje de consulta para RDF.
El lenguaje de marcado semántico RDF.
RDF.

Deja una respuesta