Apéndice A – Entornos de Desarrollo de Aplicaciones

Este apéndice ofrece información sobre algunos entornos de desarrollo de aplicaciones y de distribución de datos RDF. Puede obtenerse material más detallado sobre cada uno de los productos a partir de los links ofrecidos en cada ítem.

A.1 D2RQ

En la actualidad, una gran cantidad de datos se encuentra almacenada en bancos de datos relacionales. Estos bancos constituyen la fuente de alimentación de muchos sitios, que exhiben los datos a través de páginas Web. La plataforma D2RQ [92] permite acceder a bancos de datos relacionales como grafos RDF virtuales, en modo lectura, sin necesidad de replicar los bancos de datos a sistemas de almacenamiento nativos en RDF. permite acceder a bancos de datos relacionales como grafos RDF virtuales, en modo lectura, sin necesidad de replicar los bancos de datos a sistemas de almacenamiento nativos en RDF.

El método utiliza un lenguaje [93] para realizar el mapeo de los datos incluidos en las tablas del banco relacional a un conjunto de tripletas en RDF. En la sección 4.1, donde se presentaron los conceptos de RDF, se hizo una exposición inicial en la cual las celdas de una tabla eran identificadas como tripletas. Las tablas en sí constituían un conjunto de tripletas de recursos de un tipo determinado. El lenguaje de la plataforma D2RQ aplica esa idea de un modo sofisticado, permitiendo que se efectúe una definición depurada del conjunto de tripletas.

Como forma de ilustrar ese mapeo, imaginemos un ejemplo bien simple, en el cual tenemos tres tablas (figuras A.1 a A.3) de un banco de datos acerca de una conferencia:

• Paper – informaciones sobre artículos publicados.

• Person – informaciones sobre personas.

• Rel_Person_Paper – relación de los autores de un artículo.

PaperId Title ...
1 Trusting Information Sources Citizen at a Time
... ... ...
Figura A.1 – Tabla “Paper”
PerId Name ...
1 Yolanda Gil
2 Varun Ratnakar ...
...
Figura A.2 – Tabla “Person”
PersonId PaperId
1 1
2 1
... ...
Figura A.3 – Tabla “Rel_Person_Paper”

La figura A.4 exhibe una parte del mapeo de las tablas relacionales para las tripletas RDF:

• map:Database1
Define la conexión con el banco de datos.

• map:PaperClassMap
Define una clase RDF, estableciendo el estándar de URIs que deberá utilizarse para acceder a un recurso de este tipo. En el caso del ejemplo, podrá accederse a las tripletas de un recurso asociado a una persona que tenga el identificador "1" en la tabla "Person" a través de la URI “http://www.conference.org/conf2004/paper#Paper1”.

• map:paperTitle
Define una propiedad de una clase, asociando una columna de una tabla a una determinada propiedad de algún vocabulario. En el caso del ejemplo, la columna "Title" de la tabla "Paper" está relacionada a la propiedad "title" del vocabulario Dublin Core.

• map:authorName
Define también una propiedad de una clase, pero en este caso, la identificación de la columna se realiza a partir de la unión de las tablas. En el caso del ejemplo, para saber el nombre de los autores de un artículo, es necesario utilizar la tabla de relaciones “Rel_Person_Paper”, para identificar el valor de la propiedad. Por ejemplo, el artículo "1" tiene dos autores, lo cual implicará la creación de dos tripletas con la propiedad "dc:creator" del vocabulario Dublin Core (figura A.5).

@prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> .
@prefix map: <file:///Users/d2r/example.ttl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
map:Database1 a d2rq:Database;
  d2rq:jdbcDSN "jdbc:mysql://localhost/iswc" ;
  d2rq:jdbcDriver "com.mysql.jdbc.Driver" ;
  d2rq:username "user ;
  d2rq:password "password" .
  map:PaperClassMap a d2rq:ClassMap; map:PaperClassMap a d2rq:ClassMap;
  d2rq:uriPattern
   "http://www.conference.org/conf2004/paper#Paper@@Paper.PaperID@@" ;
  d2rq:class :Paper ;
  d2rq:dataStorage map:Database1 .
map:paperTitle a d2rq:PropertyBridge ;
  d2rq:belongsToClassMap map:Paper ;
  d2rq:column "Paper.Title" ;
  d2rq:property dc:title .
map:authorName a d2rq:PropertyBridge ;
  d2rq:belongsToClassMap map:Paper ;
  d2rq:join "Paper.PaperID <= Rel_Person_Paper.PaperID" ;
  d2rq:join "Rel_Person_Paper.PersonID => Person.PerID" ;
  d2rq:datatype xsd:string ;
  d2rq:property dc:creator .
Figura A.4 – Ejemplo de mapeo del lenguaje del D2RQ
@prefix dc: <http://purl.org/dc/elements/1.1/> .
http://www.conference.org/conf2004/paper#Paper1
  dc:title "Trusting Information Sources One Citizen at a Time" ;
  dc:creator "Yolanda Gil" ;
  dc:creator "Varun Ratnakar"
Figura A.5 – Tripletas generadas para un artículo

Además del acceso a los recursos mediante los estándares de URIs definidos en el mapeo del banco de datos relacional, la plataforma D2RQ también ofrece un SPARQL endpoint, a través del cual pueden efectuarse consultas al grafo RDF.

A.2 Virtuoso

OpenLink Virtuoso es un servidor universal, un híbrido de Servidor de Aplicaciones Web y Sistema de Gerenciamiento de Banco de Datos Objeto-Relacional (ORDBMS). Su arquitectura permite la persistencia de datos en los formatos relacional, RDF, XML, texto, documentos, Datos Conectados, etc. Además de ello, también puede funcionar como un Servidor de Aplicaciones Web y como un host para Web Services.

A través de una capa ODBC o JDBC, Virtuoso se conecta a la mayoría de las plataformas reconocidas de bancos de datos relacionales comerciales, incluyendo Oracle, SQL Server, Progress, DB2, Sybase, CA-Ingres, Informix, etc. Una de las características principales de Virtuoso es el Sponger, que permite transformar datos no RDF a RDF en tiempo de ejecución similar al grafo RDF virtual generado por el D2RQ. Su objetivo es el de utilizar fuentes de datos no RDF de la Web como entrada (páginas en HTML, páginas con microformatos embutidos, datos provenientes de Web Services, Web APIs, etc.), y crear un grafo RDF como elemento de salida. Eso permite la exposición de fuentes de datos no RDF en forma de Datos Conectados en la Web. Para cada tipo de dato no RDF es posible instalar un cartridge que realiza la extracción y transformación de los datos a RDF. El producto viene con una gran cantidad de cartridges embutidos, pero también el usuario puede construir uno para un formato de datos específico.

De manera análoga al D2RQ, Virtuoso posee un lenguaje de de mapeo de datos relacionales a RDF [95]. El lenguaje es una extensión del lenguaje de consulta SPARQL [96] y permite mapear declarativamente tablas, columnas, líneas, etc. a clases, atributos, relaciones e instancias definidas por esquemas RDF u ontologías OWL. Virtuoso también acepta el mapeo de dados relacionales a RDF [97] utilizando R2RML [98], una recomendación del W3C en carácter de lenguaje para expresar los mapeos personalizados de bancos de datos relacionales para conjuntos de datos RDF. Además de eso, Virtuoso es un servidor de Datos Conectados que ofrece un SPARQL endpoint y permite la configuración del esquema de URIs para acceder a los recursos a través del mapeo de las URIs para consultas SPARQL al grafo RDF.

A.3 Sesame

Sesame [99] es una estructura en Java (código abierto) para el almacenamiento, inferencia y consulta de datos RDF, extensible y configurable en relación a dispositivos de almacenamiento, máquinas de inferencia, formatos de archivo RDF, lenguajes de consulta y formatos de resultados de consulta. El acceso a Sesame se hace a través de una API, que puede conectarse a las principales soluciones de almacenamiento de RDF, y de una interfaz HTTP RESTful, que ofrece soporte al protocolo SPARQL. Sesame también puede ser utilizado en forma conjunta con el entorno de desarrollo Eclipse [100] para el desarrollo de aplicaciones Web con bibliotecas de soporte para la manipulación de RDF.

Sesame tiene dos interfaces principales de comunicación:

• Sail API (Capa de almacenamiento e inferencia)
Se trata de una API de interfaz de sistema, de bajo nivel, para bancos de tripletas RDF y máquinas de inferencia. Es una forma de abstracción de los detalles de almacenamiento, permitiendo el uso de diversos tipos de almacenamiento y de inferencia. De esa forma, diversos bancos de tripletas de código abierto o comerciales que implementan la Sail API, pueden acoplarse a Sesame.

• Repository API
Se trata de una API de nivel superior, utilizada en el código de las aplicaciones. Ofrece diversos métodos para el upload de archivos, consultas, y extracción y manipulación de datos. Los dispositivos de almacenamiento pueden ser locales o remotos. Los locales están ubicados en la propia máquina virtual Java. Los remotos son utilizados de acuerdo al modelo cliente-servidor, en el cual la aplicación se comunica con un servidor Sesame. En los dos modos, la interfaz utilizada es la misma, de manera tal que las aplicaciones pueden ser desarrolladas de forma transparente para ambos tipos de bancos de almacenamiento.

La figura A.6 muestra parte de un código Java en el cual están incluidas tripletas en un dispositivo de almacenamiento. Se crean URIs para dos recursos, con dos tripletas generadas para cada uno de ellos.

import org.openrdf.model.vocabulary.RDF;
import org.openrdf.model.vocabulary.RDFS;
import org.openrdf.model.vocabulary.FOAF;
...
Repository rep = new SailRepository(new MemoryStore());
rep.initialize();
ValueFactory f = rep.getValueFactory();
URI alice = f.createURI("http://example.org/people/alice");
URI bob = f.createURI("http://example.org/people/bob");
Literal bobsName = f.createLiteral("Bob");
Literal alicesName = f.createLiteral("Alice");
try {
  RepositoryConnection con = rep.getConnection();
  try {
   con.add(alice, RDF.TYPE, FOAF.PERSON);
   con.add(alice, FOAF.NAME, alicesName);

   con.add(bob, RDF.TYPE, FOAF.PERSON);
   con.add(bob, FOAF.NAME, bobsName);
  }
  finally {
   con.close();
  }
}
Figura A.6 – Tripletas generadas en un entorno Sesame-Eclipse

A.4 Jena-Fuseki

Jena [101] es una estructura en Java (código abierto) para el desarrollo de aplicaciones para Web Semántica y Datos Conectados. Provee una API para extraer e insertar datos de grafos RDF, que están representados como modelos que puede alimentarse con datos a partir de archivos, bancos de datos, URLs, etc. Además de eso, estos modelos también pueden ser consultados vía SPARQL. Jena ofrece soporte para ontologías especificadas en OWL, con diversos razonadores internos, además de poder utilizar el razonador Pellet [102].

Las figuras A.7 y A.8 muestran, respectivamente, extractos de código de la inserción de una tripleta en un modelo y la carga de datos en un modelo, a partir de la lectura de un archivo que contiene datos RDF definidos, por ejemplo, en XML:

static String personURI = "http://somewhere/JohnSmith";
static String fullName = "John Smith";
Model model = ModelFactory.createDefaultModel();
Resource johnSmith = model.createResource(personURI);
johnSmith.addProperty(VCARD.FN, fullName);
Figura A.7 – Tripleta insertada en un modelo (Jena)
Model model = ModelFactory.createDefaultModel();
InputStream in = FileManager.get().open( inputFileName );
if (in == null) {
  throw new IllegalArgumentException(
   "File: " + inputFileName + " not found");
}
model.read(in, null);
Figura A.8 – Lectura de datos de archivo (Jena)

Jena posee un componente denominado TDB (banco de tripletas), que se utiliza para la persistencia de grafos RDF, a través de una API específica. El acceso vía SPARQL es provisto por Fuseki, un servidor que ofrece soporte al protocolo SPARQL sobre HTTP.

A.5 PublishMyData

PublisMyData [103] es un servicio de hospedaje de Datos Conectados, ofrecido por la empresa británica Swirrl [104], Ofrece un conjunto de funcionalidades y de modos configurables de exhibición de datos, que propone un modo más atractivo de consumir Datos Conectados. Además de ello, brinda interfaces de acceso para desarrolladores, como manera de facilitar la creación de aplicaciones de manipulación de datos.

La ventaja de un servicio como este, como sucede en general con los servicios tercerizados, es el hecho de no necesitar contar con instalaciones propias, evitándose así afrontar los costos de infraestructura y, en particular, de recursos humanos especializados en el mantenimiento y configuración de los sistemas.

El servicio es utilizado, por ejemplo, por la ciudad de Hampshire, Reino Unido. La figura A.9 exhibe la página inicial del catálogo de los conjuntos de datos del Hampshire Hub [105].

figA9_new_hampshire_hub_catalogo.png
Figura A.9 – New Hampshire Hub (catálogo)

La figura A.10 presenta la visualización del conjunto de datos "COS emissions reduction" en forma de planilla. Además, se muestran también informaciones sobre el conjunto de los datos (figura A.11), como, por ejemplo, su publicador, la licencia de uso, etc.

figA10_dados_do_conjunto_cos_emissions_reduction.png
Figura A.10 – Datos del conjunto “COS emissions reduction”
figA11_metadados_do_conjunto_cos_emissions_reduction.png
Figura A.11 – Metadatos del conjunto “COS emissions reduction”

A.6 Plataforma de Publicación de Datos Conectados Epimorphics

La Plataforma de Publicación de Datos Conectados Epimorphics [106] incluye una base de tripletas y un SPARQL endpoint, además de acceso a los recursos RDF a través de la Linked Data API. La plataforma ofrece un servicio integralmente hospedado (con base en la Amazon Web Services, por ejemplo) y gerenciado para la publicación de Datos Conectados, siendo posible, en forma alternativa, ser instalada en la infraestructura propia del cliente. Cada instancia de la plataforma es ejecutada por un conjunto de máquinas dedicadas para cada cliente.

La plataforma ofrece:

• Una interfaz en la línea de la Linked Data API, otorgando acceso a los datos en diferentes formatos, tanto para su uso por parte de desarrolladores como para el público en general, en forma de páginas Web.

• Un banco de tripletas para almacenamiento de datos RDF.

• Un SPARQL endpoint.

• Un gerenciador de uploads, para que los usuarios puedan cargar sus propios datos.

La plataforma es utilizada por diversos sitios gubernamentales del Reino Unido; entre ellos, environment.data.gov.uk, landregistry.data.gov.uk, etc.

A continuación, se presentan algunas figuras referentes al sitio de datos ambientales del gobierno del Reino Unido. La figura A.12 presenta un conjunto de datos relativos a la calidad del agua en las diversas regiones del país. En esa página están listadas diversas informaciones, incluyendo aplicaciones desarrolladas utilizando los datos del conjunto (figura A.14) e informaciones sobre la API de acceso a los datos (figura A.15). Una de las informaciones sobre la API es la de los estándares de URI para el acceso a los recursos. En la figura A.16 se muestran las tripletas de un recurso devuelto por la URI http://environment.data.gov.uk/doc/bathing-water/ukl1702-36800 en la cual ukl1702-36800 es el identificador del distrito “Neath Port Talbot”, localizado en la región de Gales. La selección del link en Neath Port Talbot devuelve informaciones sobre el distrito, almacenadas en la base de datos de mapeo del Reino Unido, “Ordnance Survey” [107] (figura A.17).

figA12_pagina_inicial_do_site_de_dados_ambientais_do_reino_nido.png
Figura A.12 – Página inicial del sitio de datos ambientales del Reino Unido
figA13_informacoes_sobre_o_conjunto_de_dados_qualidade_da_agua.png
Figura A.13 – Informaciones sobre el conjunto de datos (calidad del agua)
figA14_aplicacao_com_informacoes_sobre_a_qualidade_da_agua_no_reino_unido.png
Figura A.14 – Aplicación con informaciones sobre la calidad del agua en el Reino Unido
figA15_informacoes_sobre_a_API_de_acesso_aos_dados_qualidade_da_agua.png
Figura A.15 – Informaciones sobre la API de acceso a los datos (calidad del agua)
figA16_informacoes_sobre_a_qualidade_da_agua_em_neath_port_talbot_ld_api.png
Figura A.16 – Informaciones sobre la calidad del agua en “Neath Port Talbot” (LD API)
figA17_informacoes_sobre_neath_port_talbot_no_site_ordnance_survey.png
Figura A.17 – Informaciones sobre “Neath Port Talbot” en el sitio "Ordnance Survey”

A.7 Bancos de Tripletas

Los bancos de tripletas son sistemas de gerenciamiento para datos modelados, usando RDF. A diferencia de los sistemas de gerenciamiento de bancos de datos relacionales, que almacenan datos en relaciones (o tablas) y son consultados utilizando SQL, los bancos de tripletas almacenan tripletas RDF y son consultados utilizando SPARQL. Además, una característica fundamental de muchos bancos de tripletas es la posibilidad de hacer inferencias. Existen dos tipos fundamentales de bancos de tripletas: los que almacenan las tripletas directamente en el banco y los que realizan el almacenamiento en bancos de datos relacionales y ofrecen una capa de gerenciamiento de RDF. Determinadas estructuras, como por ejemplo Sesame, poseen una interfaz (Sail API) que permite que una instalación pueda configurar diferentes bancos de tripletas. A continuación, ofrecemos una lista de algunos de los principales bancos de tripletas actuales:

Virtuoso
Posee un banco de tripletas nativo, siendo una de las plataformas de Datos Conectados más utilizadas en la actualidad, al igual que, por ejemplo, la DBpedia. Existen dos versiones, una comercial y otra en código abierto, con un número restringido de características y un desempeño inferior. Ofrece un conjunto restringido de inferencias.

Sesame
Estructura Java con un banco de tripletas nativo, que permite la configuración de otros bancos de tripletas que utilicen la Sail API. No ofrece, de forma nativa, un nivel sofisticado de inferencias.

Jena TDB [108]
Estructura Java con un banco de tripletas nativo, con diversos razonadores internos, además de permitir la configuración de razonadores externos, tales como el Pellet.

GraphDB [109]
Conocido anteriormente como OWLIN, es uno de los bancos de tripletas más utilizados en la actualidad. Permite inferencias en ontologías OWL y se lo ofrece en tres versiones, una de ellas gratuita. GraphDB da soporte a la Sail API de Sesame.

4store [110]
Se trata de un software libre que tiene como puntos fuertes el desempeño, la escalabilidad y la estabilidad. Posee una licencia GNU GPL. No ofrece inferencias. 4stores da soporte a la Sail API de Sesame.

Bigdata [111]
Banco de datos de grafos, escrito en Java, de alta performance y escalabilidad. La plataforma ofrece soporte al modelo de datos RDF y SPARQL, incluyendo consulta, actualización y consulta federada básica. Ofrece un conjunto restringido de inferencias. Posee dos tipos de licencia, una comercial y la otra GNU GPLv2. Bigdata da soporte a la Sail API de Sesame.GPLv2. Bigdata gives support to Sail API of Sesame.

A.8 Bibliotecas

En esta sección se ofrece la lista de algunas bibliotecas que manipulan datos RDF y consultas SPARQL, para su utilización en entornos de desarrollo de diferentes lenguajes de programación:

RDFLib [112]
Biblioteca para Python con diversos parsers y variados formatos de serializaciones, incluyendo Turtle, RDF/XML, RDFa, Microdatos y JSON-LD. Almacenamiento en memoria y de forma persistente, utilizando Oracle Berkeley DB. Soporta consultas y actualizaciones SPARQL.

Redland [113]
Biblioteca para C con APIs para manipulación de grafos RDF, tripletas, URIs y literales. Almacenamiento en memoria y de forma persistente, utilizando Oracle Berkeley DB, MySQL 3-5, PostgreSQL, Virtuoso, SQLite, etc. Soporta varias sintaxis para lectura y escritura de RDF, como RDF/XML, N-Triples, Turtle, etc., mediante la biblioteca Raptor RDF Permite consultas en SPARQL y RDQL usando la biblioteca de consulta Rasqal RDF [115].

dotNetRDF [116]
Biblioteca para .Net con una API para RDF y SPARQL. Soporte para varias infraestructuras de almacenamiento, así como una API que permite que sean conectadas infraestructuras de terceros, como Virtuoso, 4store, Jena-Fuseki, etc.

EasyRDF [117]
Biblioteca para PHP con diversos parsers y variados formatos de serializaciones, incluyendo Turtle, RDF/JSON y N-Triples. Viene acompañada de una serie de ejemplos y ofrece soporte para la visualización de gráficos utilizando GraphViz [118] Permite consultas SPARQL.

Perl RDF [119]
Biblioteca para Perl con una API para almacenamiento, parsing y serializaciones de RDF. Genera un conjunto de clases para representar objetos básicos de RDF.

rdfQuery [120]
Biblioteca para JavaScript que permite el análisis de RDFa embutido dentro de una página, la consulta sobre los hechos que contiene, y un razonador que permite inferencias para producir más hechos. Depende de la biblioteca jQuery.