viernes, 30 de octubre de 2015

3.3.2 El operador SPARQL OPTIONAL

Hoy vamos a ver cómo funciona el operador OPTIONAL. A grandes rasgos, lo que hace es retornarnos información, en el caso de que exista, y si no existe, nos lo retorna en blanco. Ahora lo vamos a ver con más detalle.

Los datos a consultar, los vemos en esta imagen. Tenemos el recurso Lima, de tipo lugar, que además tiene como alcalde Luis Castañeda Lossio; y Lima está en Perú, representado con el recurso Perú, y Perú es de tipo país. Además, Lima tiene como nombre oficial el stream Lima.

Estos son los datos del archivo RDF, y el operador OPTIONAL de SPARQL nos permite recuperar datos en el caso de que existan. Si no existen esos datos, no hay problema, porque siempre nos va a devolverá aquellos datos que existan, pero en una respuesta incompleta

Este operador es especialmente útil en un entorno como la web donde hay muchos datos, pero pueden ser incompletos. Si  nos intersa encontrar nombres de personas y filtrar aquellas personas que tengan una página web, nos las va a retornar; si yo no tengo página web, también va a retornar mi nombre. Si otra persona tiene página web, completará la respuesta agregando la dirección de la página web.

En este grafo de ejemplo, vamos a hacer una consulta sin OPTIONAL. Queremos obtener todos los recursos que tengan un nombre y que además sean de tipo lugar. Esto solo nos retornaría la ciudad de Lima.

Si añadimos el operador OPTIONAL, OPTIONAL entre llaves, la variable X que estamos consultando en el patrón anterior, el predicado le pedía owl leaderName y alcalde. Estamos preguntando por todos aquellos lugares que tienen nombre, y si sabemos el nombre de su alcalde, nos lo retornara. Lo que vamos a obtener utilizando este OPTIONAL es, todas aquellas ciudades que tienen alcalde; y las que no tengan alcalde, nos las va a seguir retornando, en alguna respuesta.

En la imagen de arriba vemos el grafo. ¿Qué vamos a hacer? ¿Qué va a coincidir con nuestra consulta? Y estos son los resultados:

Nos damos cuenta de que en la primera fila de resultados tenemos a Lima y sabemos el nombre de su alcalde. En cambio, en la segunda fila, no tenemos el nombre del alcalde, con lo cual, lo que tenemos es un espacio en blanco. También sucede en la tercera fila, donde está el recurso Alameda County en California que tampoco sabemos quién es su alcalde, con lo cual nos retorna en blanco. Hay que darse cuenta que esta consulta siempre nos devuelve resultados, y en caso de que no sepamos algo, nos devuelve en blanco.

En esta consulta queremos obtener todos los recursos que tengan un nombre, que sean de tipo lugar, y opcionalmente queremos saber su alcalde o líder, y que además este alcalde debe haber nacido en la misma ciudad en la cual está gobernando. Vemos en amarillo los patrones, los triples SPARQL que indican esto, y la condición filter en la cual se especifica que el lugar de nacimiento del alcalde tiene que ser el mismo que el lugar que estamos consultando.

Y estos son los resultados. No hay muchos, pero por ejemplo tenemos en la primera fila a Delhi En el cual, su alcalde nació en la misma ciudad, la ciudad de Delhi; en cambio, si su alcalde no ha nacido en la misma ciudad que gobierna, nos sigue devolviendo las ciudades y su nombre, pero no nos devuelve ni el alcalde, ni la ciudad que está gobernando.

En resumen, El operador OPTIONAL es un operador que nos devuelve datos en el supuesto de que existan. Si no existen, nos devuelve en blanco, pero la consulta nos sigue devolviendo los datos que estén fuera de OPTIONAL. Esto es muy útil en el contexto de la web, porque la web es directamente incompleta; no podemos meter todos los datos porque no están todos los datos aquí. Además dentro del operador OPTIONAL podemos añadir otros operadores SPARQL, como un FILTER.

No hay comentarios:

Publicar un comentario