Apêndice A – Ambientes de Desenvolvimento de Aplicações

Este apêndice apresenta os resumos de alguns ambientes para o desenvolvimento de aplicações e para a distribuição de dados RDF. Informações mais detalhadas sobre cada um dos produtos podem ser obtidas a partir dos links fornecidos em cada resumo.

A.1 D2RQ

Atualmente, uma grande quantidade de dados encontra-se armazenada em bancos de dados relacionais. Eles são a fonte de alimentação de muitos sites , que expõem os dados desses bancos por meio de páginas na Web. A plataforma D2RQ [92] permite acessar bancos de dados relacionais como grafos RDF virtuais, em modo leitura, sem a necessidade de replicar esse banco de dados para um sistema de armazenamento nativo em RDF.

O método utiliza uma linguagem [93] para fazer o mapeamento dos dados contidos nas tabelas do banco relacional para um conjunto de triplas em RDF. Na seção 4.1, onde foram apresentados os conceitos de RDF, foi feita uma exposição inicial onde as células de uma tabela eram identificadas como triplas. As tabelas em si eram um conjunto de triplas de recursos de um determinado tipo. A linguagem da plataforma D2RQ aplica essa ideia de uma forma sofisticada permitindo que se faça uma definição apurada do conjunto de triplas.

Como forma de ilustrar esse mapeamento vamos supor um exemplo bem simples onde temos três tabelas ( figuras A.1 a A.3 ) de um banco de dados sobre uma conferência:

• Paper – informações sobre artigos publicados.

• Person – informações sobre pessoas.

• Rel_Person_Paper – relação dos autores de um artigo.

PaperId Title ...
1 Trusting Information Sources Citizen at a Time
... ... ...
Figura A.1 - Tabela "Paper"
PerId Name ...
1 Yolanda Gil
2 Varun Ratnakar ...
...
Figura A.2 - Tabela "Person"
PersonId PaperId
1 1
2 1
... ...
Figura A.3 - Tabela "Rel_Person_Paper"

A figura A.4 apresenta uma parte do mapeamento das tabelas relacionais para as triplas RDF:

• map:Database1

Define a conexão com o banco de dados.

• map:PaperClassMap

Define uma classe RDF, definindo qual o padrão de URIs que deverá ser utilizado para acessar um recurso desse tipo. No caso do exemplo, as triplas de um recurso associado a uma pessoa que tenha o identificador “1” na tabela “Person” será acessado pela URI “http://www.conference.org/conf2004/paper#Paper1”.

• map:paperTitle

Define uma propriedade de uma classe, associando uma coluna de uma tabela a uma determinada propriedade de algum vocabulário. No caso do exemplo, a coluna “ Title ” da tabela “Paper” é relacionada a propriedade “title” do vocabulário Dublin Core.

• map:authorName

Define também uma propriedade de uma classe, mas nesse caso a identificação da coluna é feita a partir da junção de tabelas. No caso do exemplo, para saber o nome dos autores de um artigo é preciso utilizar a tabela de relacionamentos “Rel_Person_Paper”, para identificar o valor da propriedade. Por exemplo, o artigo “1” tem dois autores, o que implicará na criação de duas triplas com a propriedade “dc:creator” do vocabulário 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 - Exemplo de mapeamento de linguagem 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 - Triplas geradas em um artigo

Além do acesso aos recursos por meio dos padrões de URIs definidos no mapeamento do banco de dados relacional, a plataforma D2RQ também oferece um SPARQL endpoint onde podem ser feitas consultas ao grafo RDF.

A.2 Virtuoso

OpenLink Virtuoso [94] é um servidor universal, um híbrido de Servidor de Aplicações Web e Sistema de Gerenciamento de Banco de Dados Objeto-Relacional (ORDBMS). Sua arquitetura permite a persistência de dados nos formatos relacional, RDF, XML, texto, documentos, Dados Conectados, etc. Além disso, ele também pode funcionar como um Servidor de Aplicações Web, bem como um host para Web Services .

Por meio de uma camada ODBC ou JDBC, o Virtuoso se conecta à maioria das plataformas de bancos de dados relacionais comerciais mais populares, incluindo Oracle, SQL Server, Progress, DB2, Sybase, CA-Ingres, Informix, etc. Uma das características principais do Virtuoso é o Sponger , que permite a transformação de dados não RDF para dados RDF em tempo de execução, similar ao grafo RDF virtual gerado pelo D2RQ. Seu objetivo é utilizar fontes de dados não RDF da Web como entrada (páginas em HTML, páginas com microformatos embutidos, dados provenientes de Web Services , Web APIs , etc.), e criar um grafo RDF como saída. Isso permite a exposição de fontes de dados não RDF na forma de Dados Conectados na Web. Para cada tipo de dado não RDF é possível instalar um cartridge que faz a extração e transformação dos dados para RDF. O produto já vem com uma grande quantidade de cartridges embutidos, mas o usuário pode construir um cartridge para um formato de dados específico.

De forma análoga ao D2RQ, o Virtuoso tem uma linguagem de mapeamento de dados relacionais para RDF [95]. A linguagem é uma extensão da linguagem de consulta SPARQL [96] e permite mapear, declarativamente, tabelas, colunas, linhas, etc. para classes, atributos, relacionamentos e instâncias definidas por esquemas RDF ou ontologias OWL. O Virtuoso também aceita o mapeamento de dados relacionais para RDF [97] utilizando R2RML [98], uma recomendação do W3C de uma linguagem para expressar os mapeamentos personalizados de bancos de dados relacionais para conjuntos de dados RDF. Além disso, o Virtuoso é um servidor de Dados Conectados que oferece um SPARQL endpoint e permite a configuração do esquema de URIs para acesso aos recursos, por meio do mapeamento das URIs para consultas SPARQL ao grafo RDF.

A.3 Sesame

Sesame [99] é um arcabouço em Java (código aberto) para armazenamento, inferência e consulta de dados RDF, extensível e configurável com relação a mecanismos de armazenamento, máquinas de inferência, formatos de arquivo RDF, linguagens de consulta e formatos de resultados de consulta. O acesso ao Sesame é feito via uma API que pode ser conectada a todas as principais soluções de armazenamento de RDF, e uma interface HTTP RESTful que oferece suporte ao protocolo SPARQL. Sesame também pode ser utilizado em conjunto com o ambiente de desenvolvimento Eclipse [100], para o desenvolvimento de aplicações Web com bibliotecas de suporte para a manipulação de RDF.

Sesame tem duas interfaces principais de comunicação:

• Sail API (Camada de armazenamento e inferência)

É uma API de interface de sistema, de baixo nível, para bancos de triplas RDF e máquinas de inferência. É uma forma de abstração dos detalhes de armazenamento, permitindo o uso de diversos tipos de armazenamento e de inferência. Dessa forma, diversos bancos de triplas, código aberto e comerciais, que implementam a Sail API podem ser acoplados ao Sesame .

• Repository API

È uma API de mais alto nível utilizada na código das aplicações. Ela oferece diversos métodos para o upload de arquivos, consultas, e extração e manipulação de dados. Os repositórios podem ser locais ou remotos. Repositórios locais estão localizados na mesma máquina virtual Java. Repositórios remotos são utilizados segundo o modelo cliente-servidor, onde a aplicação se comunica com um servidor Sesame . Nos dois modos, a interface utilizada é a mesma, de tal forma que as aplicações podem ser desenvolvidas de forma transparente para os dois tipos de repositórios.

A figura A.6 apresenta parte de um código 10 Java onde são incluídas triplas em um repositório. São criadas URIs para dois recursos, com duas triplas geradas para cada um deles.

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 - Triplas geradas em um ambiente Sesame-Eclipse

A.4 Jena-Fuseki

Jena [101] é um arcabouço em Java (código aberto) para o desenvolvimento de aplicações para Web Semântica e Dados Conectados. Ele provê uma API para extrair e inserir dados de grafos RDF, que são representados como modelos que podem ser alimentados com dados a partir de arquivos, bancos de dados, URLs, etc. Além disso, esses modelos também podem ser consultados via SPARQL. Jena oferece suporte a ontologias especificadas em OWL, com diversos raciocinadores internos, além de poder utilizar o raciocinador Pellet [102].

As figuras A.7 e A.8 apresentam, respectivamente, extratos de código 11 da inserção de uma tripla em um modelo e o carregamento de dados em um modelo a partir da leitura de um arquivo contendo dados RDF definidos, por exemplo, em 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.78 - Tripla inserida em um 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 - Leitura de dados de arquivo (Jena)

Jena tem um componente denominado TDB (banco de triplas) que é utilizado para a persistência de grafos RDF, via uma API específica. O acesso via SPARQL é provido pelo Fuseki, que é um servidor que oferece suporte ao protocolo SPARQL sobre HTTP.

A.5 PublishMyData

PublisMyData [103] é um serviço de hospedagem da Dados Conectados oferecido pela empresa Swirrl [104], localizada no Reino Unido. Ele oferece um conjunto de funcionalidades e formas configuráveis de exibição dos dados, que se propõe a ser uma forma mais atraente para o consumo de Dados Conectados. Além disso, ele oferece interfaces de acesso para desenvolvedores, como forma de facilitar a criação de aplicações sobre os dados.

A vantagem de um serviço como esse, como em geral para serviços terceirizados, é a não necessidade de ter uma instalação própria com todos os custos de infraestrutura e, principalmente, de pessoal especializado para a configuração e manutenção dos sistemas.

O serviço é utilizado, por exemplo, pela cidade de Hampshire no Reino Unido. A figura A.9 apresenta a página inicial do catálogo dos conjuntos de dados do Hampshire Hub [105].

figA9_new_hampshire_hub_catalogo.png

A figura A.10 apresenta a visualização do conjunto de dados “COS emissions reduction” na forma de uma planilha . Além disso, são também apresentadas informações sobre o conjunto dos dados (figura A.11), como, por exemplo, o publicador dos dados, a licença de uso, etc.

figA10_dados_do_conjunto_cos_emissions_reduction.png
figA11_metadados_do_conjunto_cos_emissions_reduction.png

A.6 Plataforma de Publicação de Dados Conectados Epimorphics

A Plataforma de Publicação de Dados Conectados Epimorphics [106] inclui uma base de triplas e um SPARQL endpoint , além de acesso aos recursos RDF por meio da Linked Data API . A plataforma oferece um serviço totalmente hospedado (baseado na Amazon Web Services , por exemplo) e gerenciado para a publicação de Dados Conectados, podendo, alternativamente, ser instalada em uma infraestrutura própria do cliente. Cada instância da plataforma é executada em um conjunto de máquinas dedicadas para cada cliente.

A plataforma oferece:

• Uma interface nos moldes da Linked Data API, fornecendo acesso aos dados em diferentes formatos, tanto para uso por desenvolvedores quanto para o público em geral, na forma de páginas Web.

• Um banco de triplas para armazenamento de dados RDF.

• Um SPARQL endpoint .

• Um gerenciador de uploads , para que os usuários possam carregar seus próprios dados.

A plataforma é utilizada por diversos sites do governo do Reino Unido, incluindo, environment.data.gov.uk , landregistry.data.gov.uk , entre outros.

A seguir são apresentadas algumas figuras referentes ao site de dados ambientais do governo do Reino Unido . A figura A.12 apresenta a página inicial do site . A figura A.13 apresenta um conjunto de dados referentes a qualidade da água nas diversas regiões do reino. Nessa página são listadas diversas informações incluindo aplicações desenvolvidas utilizando os dados do conjunto (figura A.14) e informações sobre a API para acesso aos dados (figura A.15). Uma das informações da API são os padrões de URI para acesso aos recursos. Na figura A.16 são apresentadas as triplas de um recurso recuperado pela URI http://environment.data.gov.uk/doc/bathing-water/ukl1702-36800 , onde ukl1702-36800 é o identificador do distrito “ Neath Port Talbot ” localizado na região de “Wales”. A seleção do link em “ Neath Port Talbot ” recupera informações sobre o distrito, armazenados na base de dados de mapeamento do Reino Unido, “ Ordnance Survey ” [107] (figura A.17).

figA12_pagina_inicial_do_site_de_dados_ambientais_do_reino_nido.png
figA13_informacoes_sobre_o_conjunto_de_dados_qualidade_da_agua.png
figA14_aplicacao_com_informacoes_sobre_a_qualidade_da_agua_no_reino_unido.png
figA15_informacoes_sobre_a_API_de_acesso_aos_dados_qualidade_da_agua.png
figA16_informacoes_sobre_a_qualidade_da_agua_em_neath_port_talbot_ld_api.png
figA17_informacoes_sobre_neath_port_talbot_no_site_ordnance_survey.png

A.7 Bancos de Triplas

Bancos de triplas são sistemas de gerenciamento para dados modelados usando RDF. Ao contrário de sistemas de gerenciamento de bancos de dados relacionais, que armazenam dados em relações (ou tabelas) e são consultados usando SQL, os bancos de triplas armazenam triplas RDF e são consultados usando SPARQL. Além disso, uma característica fundamental de muitos bancos de triplas é a possibilidade de fazer inferências. Existem dois tipos principais de bancos de triplas: os que armazenam as triplas diretamente no banco e os que fazem o armazenamento em bancos de dados relacionais e oferecem uma camada de gerenciamento de RDF. Determinados arcabouços como, por exemplo, o Sesame , têm uma interface (Sail API) que permite que uma instalação possa configurar diferentes bancos de triplas. A seguir é apresentada uma lista de alguns dos principais bancos de triplas atuais:

Virtuoso

Possui um banco de triplas nativo e é uma das plataformas de Dados Conectados mais utilizadas atualmente, como, por exemplo, a DBpedia. Possui duas versões, uma comercial e uma em código aberto com um número restrito de características e menor desempenho. Oferece um conjunto restrito de inferências.

Sesame

Arcabouço Java com um banco de triplas nativo, que permite a configuração de outros bancos de triplas que utilizem a Sail API. Não oferece, de forma nativa, um nível sofisticado de inferências.

Jena TDB [108]

Arcabouço Java com um banco de triplas nativo, com diversos raciocinadores internos, além de poder configurar raciocinadores externos, tais como o Pellet.

GraphDB [109]

Previamente denominado OWLIN, é um dos bancos de triplas mais utilizados atualmente, que permite inferências em ontologias OWL e é oferecido em três versões, uma delas gratuita. GraphDB dá suporte à Sail API do Sesame .

4store [110]

É um software livre que tem como pontos fortes o desempenho, a escalabilidade e a estabilidade. Possui uma licença GNU GPL. Não oferece inferências. 4store dá suporte à Sail API do Sesame .

Bigdata [111]

Banco de dados de grafos, escrito em Java, de alta performance e escalabilidade. A plataforma oferece suporte ao modelo de dados RDF e SPARQL, incluindo consulta, atualização e consulta federada básica. Oferece um conjunto restrito de inferências. Possui dois tipos de licença, uma comercial e uma GNU GPLv2 . Bigdata dá suporte à Sail API do Sesame .

A.8 Bibliotecas

Nesta seção são listadas algumas bibliotecas que manipulam dados RDF e consultas SPARQL, para a utilização em ambientes de desenvolvimento de diferentes linguagens de programação:

RDFLib [112]

Biblioteca para Python com diversos parsers e diversos formatos de serializações, incluindo Turtle, RDF/XML, RDFa, Microdados e JSON-LD. Armazenamento em memória e de forma persistente utilizando Oracle Berkeley DB. Suporta consultas e atualizações SPARQL.

Redland [113]

Biblioteca para C com APIs para manipular grafos RDF, triplas, URIs e literais. Armazenamento em memória e de forma persistente utilizando Oracle Berkeley DB, MySQL 3-5, PostgreSQL, Virtuoso, SQLite, entre outros. Suporta várias sintaxes para leitura e escrita de RDF como RDF/XML, N-triples, Turtle, etc., por meio da biblioteca Raptor RDF [114]. Permite consultas em SPARQL e RDQL usando a biblioteca de consulta Rasqal RDF [115].

dotNetRDF [116]

Biblioteca para .Net com uma API para RDF e SPARQL. Suporte para várias infraestruturas de armazenamento, bem como uma API que permite que sejam conectadas infraestruturas de terceiros, como, por exemplo, Virtuoso, 4store, Jena-Fuseki, etc.

EasyRDF [117]

Biblioteca para PHP com diversos parsers e diversos formatos de serializações, incluindo Turtle, RDF/JSON, N-Triples. Vem acompanhada de uma série de exemplos e oferece suporte para a visualização de gráficos usando GraphViz [118]. Permite consultas SPARQL.

Perl RDF [119]

Biblioteca para Perl com uma API para armazenamento, parsing e serializações de RDF. Produz um conjunto de classes para representar objetos básicos de RDF.

rdfQuery [120]

Biblioteca para JavaScript que permite a análise de RDFa embutido dentro de uma página, a consulta sobre os fatos que ela contém, e um raciocinador que permite inferências para produzir mais fatos. Depende da biblioteca jQuery.