Seguir a Miguel Gomez Cuesta en Twitter Seguir a Miguel Gomez Cuesta en Linkedin Seguir a Miguel Gomez Cuesta en Google+ Contactar a Miguel Gomez Cuesta por Correo Electrónico

martes, 16 de febrero de 2016

Web Semántica - Lenguaje SPARQL

Datos enlazados (Linked Open Data)


Para el W3C, el concepto Linked Open Data (Datos enlazados) es la forma que tiene la Web Semántica de vincular los datos que están distribuidos por toda la Web.

En el siguiente enlace podemos ver un diagrama con las bases de datos públicas y la representación de las relaciones entre ellas. Es decir, podemos ver la manera en que las bases de datos se apoyan en otras bases de datos enlazado la información de ambas para aprovecharse de la reutilización de información común.


Almacenamiento de datos


Para poder compartir toda esta información con el resto de la Web, es necesario seleccionar un destino para almacenar nuestros ficheros de texto RDF o grafos RDF. Estos almacenamientos son conocidos como “triple store”. 

A grandes rasgos, tenemos dos opciones:

  • Base de datos relacionales: Son las Bbdd más comúnmente utilizadas. En este caso la información se organiza en tablas y cada tabla tiene un conjunto de campos que la definen. Algunas de las Bbdd más conocidas son Oracle, MySql, Postgresql o SqlServer

  • Base de datos de grafos:  La razón que nos lleva a utilizar este tipo de bases de datos es que la importancia reside en las relaciones entre entidades. En estas bases de datos las información se organiza en grafos con nodos que representan las entidades y aristas que representan las relacionesAlgunas de las Bbdd más conocidas son Neo4J InfoGrid o AllegroGraph .

Existen algunas bases de datos públicas RDF:

  • La dbpedia es una base de datos que expone la información accesible desde la Wikipedia en formato rdf.
  • La Imdb es una base de datos con información referentes a películas y contenido audiovisual.


Acceso de datos


SPARQL es una recomendación del W3C para consultar los datos RDF de un almacén de datos.
Muchas de las Bases de datos RDF públicas permiten consultar sus datos mediante un servicio Web denominado punto de entrada (endpoint). 

Este servicio Web permite a las organizaciones que generan los datos publicarlos y ofrecer una forma para acceder a ellos.


Punto de entrada sparql a la dbpedia


Podemos consultar los datos desde el punto de entrada (endpoint) mediante el lenguaje SPARQL. Algunos ejemplos son:

También podemos acceder a los datos en algunos casos utilizando el navegador para acceder a toda la información de un recurso de manera visual. Ejemplo: El recurso España de la dbpedia 

Acceso al recurso España por url



Dados los siguientes triples RDF extraídos de la dbpedia vamos a realizar consultas basadas en esta información.

@prefix rdf: https://www.w3.org/1999/02/22-rdf-syntax-ns#
@prefix rdfs: http://www.w3.org/2000/01/rdf−schema#
@prefix dbprop: http://dbpedia.org/property .
@prefix dbpedia-owl: http://dbpedia.org/ontology .
@prefix dbpedia: http://dbpedia.org/resource .

dbpedia:Madrid  rdf:type    dbpedia-owl:Place .
dbpedia:Madrid dbpedia-owl:country  dbpedia:España .
dbpedia:Madrid dbprop:capital   dbpedia:España .
dbpedia:Madrid foaf:name   "Madrid"@es
dbpedia:España rdf:type   dbpedia-owl:Country .


Consulta SPARQL

Estructura de una consulta sparql

SELECT y WHERE son palabras reservadas del lenguaje

Encabezado de consulta está formado por una lista de variables que representan la respuesta de la consulta.

Patrón de consulta es una lista de triples RDF que sigue la estructura sujeto-predicado-objeto y puede contener variables.

Una variable comienza con el símbolo de interrogación seguido de un identificador “?”

Resultado de la consulta se obtiene reemplazando cada variable por un URI del grafo que representa nuestro modelo de dominio. Veámoslo con un ejemplo:
select ?X ?nombre
where { ?X dbpedia-owl:country dbpedia:Spain .
 ?X rdf:type dbpedia-owl:Place .
 ?X foaf:name ?nombre
} LIMIT 50
  • La variable ?X puede ser reemplazada por el URI dbpedia:Madrid.
  • La variable ?nombre puede ser reemplazada por el literal "Madrid"@es.
  • Así sucesivamente con todos los reemplazos de variables que coincidan con los triples RDF indicados en el patrón de consulta.

La lista completa de la consulta anterior la podemos obtener en diferentes formatos rdf o formato html


Operador AND


Se utiliza para expresar la conjunción de patrones y se representa mediante el carácter punto “.”

Operador SELECT


Se utiliza para indicar el resultado de nuestra consulta. Después de la palabra reservada SELECT indicaremos las variables que representan a los datos que queremos obtener.    
 

Operador FILTER


Permite filtrar los resultados de la consulta añadiendo algunas condiciones.
Por ejemplo, la siguiente consulta muestra todos los recursos de tipo Lugar en España y para cada uno de ellos muestra la URI del recurso, el nombre y la población.
select ?lugar ?nombre ?poblacion
where { 
?lugar rdf:type dbpedia-owl:Place .
?lugar dbpedia-owl:country dbpedia:Spain .
 ?lugar foaf:name ?nombre .
 ?lugar dbpedia-owl:populationTotal ?poblacion .
}

Sobre la consulta anterior podemos añadir un filtro para obtener los lugares cuya población es mayor.
select ?lugar ?nombre ?poblacion
where { 
?lugar rdf:type dbpedia-owl:Place .
?lugar dbpedia-owl:country dbpedia:España .
 ?lugar foaf:name ?nombre .
 ?lugar dbpedia-owl:populationTotal ?poblacion .
filter (?poblacion > 1000000) . 
}

Además podemos añadir una conjunción de condiciones al filtro usando el operador “&&”.
filter (?poblacion > 1000000 &&  ?nombre = "Asturias"@es) .

También podemos añadir una disyunción de condiciones usando el operador “||”
filter (?poblacion > 1000000 ||  ?nombre = "Bayas"@es) .

Operador OPTIONAL


Permite obtener los datos en el caso de que la información no esté completa. Es especialmente útil en el contexto de la web semántica porque en numerosas ocasiones los datos están incompletos.
select ?lugar ?nombre ?alcalde
where { 
?lugar rdf:type dbpedia-owl:Place .
?lugar dbpedia-owl:country dbpedia:España .
 ?lugar foaf:name ?nombre .
 OPTIONAL {?lugar dbpedia-owl:mayor ?alcalde .}
}


Operador UNION


Permite hacer la unión de un conjunto de resultados. Por ejemplo podemos obtener información de lugares de la provincia de Madrid unido a los lugares de Portugal.
select ?lugar ?nombre ?pais
where { 

?lugar rdf:type dbpedia-owl:Place .
?lugar foaf:name ?nombre .
?lugar dbpedia-owl:country ?pais .

{?lugar dbpedia-owl:province dbpedia:Comunidad_de_Madrid .}
UNION
{?lugar dbpedia-owl:country dbpedia:Portugal . }
}


Operador CONSTRUCT


Estructura de consulta construct

Permite obtener los resultados de la consulta en forma de Grafo RDF en lugar de obtener la respuesta como una tabla. 

Es útil por ejemplo para redefinir las URI definida por la una base de datos externa. En el siguiente ejemplo modificamos la URI definida por la dbpedia por una que nos gusta más.
CONSTRUCT{
?lugar ex:alcalde ?alcalde
}
where { 
?lugar rdf:type dbpedia-owl:Place .
?lugar dbpedia-owl:country dbpedia:España .
 ?lugar foaf:name ?nombre .
 OPTIONAL {?lugar dbpedia-owl:mayor ?alcalde .}
}

Funciones

Son operadores que se utilizan normalmente dentro de un FILTER. Vamos a ver las funciones más útiles a continuación.

isIRI: Verifica si el resultado es una URI.
isLiteral: Verifica si el resultado es un literal.
bound: Verifica si existe un resultado.


En anteriores artículos: 


Suscríbete al boletín de novedades

En próximos artículos: 
  • Damos por finalizado este bloque sobre la Web Semántica. 
  • Si te han gustado los contenidos y quieres aprender mas... Haznos llegar tus inquietudes, comentarios, dudas y sugerencias. 
  • Tenemos muchos más contenidos sobre la web semántica y nos gustaría compartirlos: Lenguaje de ontologías OWL, características avanzadas del lenguaje SPARQL 1.1, principales herramientas de desarrollo para trabajar con la web semántica, ejemplos de aplicaciones reales de la web semántica y otros ...


No hay comentarios:

Publicar un comentario

Entradas populares