Web Semántica - Lenguaje SPARQL

Publicado el 16 febrero 2016 por Miguel Miguel Gómez Cuesta @mgomezcuesta

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 sonOracle, MySql, Postgresql o SqlServer.

    Base de datos de En estas bases de datos las información se organiza en grafos con 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. nodos que representan las entidades y aristas que representan las relaciones. Algunas de las Bbdd más conocidas son Neo4JInfoGrid 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.

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


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

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 .
}
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) . 
}
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

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 .}
}