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