Spira — Crie Aplicações Semânticas com Ruby on Rails

Aparecida Santiago
Jaguaribe Tech
Published in
5 min readAug 20, 2017
Semantic Web Cloud

Desde o surgimento da Web, diversas modificações foram realizadas na sua arquitetura, sempre com o objetivo de aumentar o poder processamento por parte dos computadores. A maioria das aplicações existentes na Web atualmente, não estão estruturadas de maneira que facilitem a interpretação do conteúdo da aplicação por máquinas. O processo de extrair informações dos conjuntos de dados, ainda não é uma tarefa trivial.

A Web Semântica (Lopes, 2015), foi proposta com objetivo de tornar a Web um espaço global de conhecimento compartilhado. Isso quer dizer, que os dados estarão ligados de forma que existam relacionamentos com base não somente em sintaxe, mas principalmente relacionamentos baseados em semântica, entre tais dados.

Aplicações Semânticas, são aplicações desenvolvidas seguindo os padrões e tecnologias recomendados pela Web Semântica. Existem diversos frameworks para se trabalhar com aplicações semânticas, para diversas linguagens de programação. A seguir exemplificaremos, através de um pequeno tutorial, como trabalhar com RDF utilizando o framework Ruby on Rails. Não é um tutorial completo. O objetivo é fornecer diretrizes e mostrar possibilidades de utilizar o Rails para o desenvolvimento de aplicações semânticas.

O que RDF?

O RDF (Resource Description Framework) é um modelo de dados que tem por objetivo definir um mecanismo de representação de metadados e dados para descrever recursos (Souza, 2017). RDF utiliza triplas para representação do conteúdo.

Triplas RDF. Fonte: Semantic Web Technologies

Um tripla é composta de um sujeito, um predicado e um objeto. Um conjunto de triplas, formam um grafo RDF.

Grafo RDF. Fonte: W3C

O modelo RDF permite intercâmbio de informações entre aplicações sem perda de significado (Souza, 2017).

Spira

Spira é um framework que usa objetos do RDF.rb como modelo. Ele permite trabalhar de forma orientada a recursos, sem perder acesso à natureza declarativa dos dados ligados.

Pode ser usado para acessar dados de um RDF existente ou criar um novo local de armazenamento de grafos RDF (Bendiken, 2010). RDF.rb é uma biblioteca RDF para Ruby que utiliza o seguinte modelo de objetos:

Classes do core RDF.rb
  • RDF::Literal Representa literais simples;
  • RDF::URI Representa referências URI (URLs e URNs).
  • RDF::Node Representa nós anônimos (também conhecidos como nós em branco).
  • RDF::Statement Representa declarações RDF (também conhecidas como triplas).
  • RDF::Graph Representa grafos anônimos ou nomeados contendo zero ou mais declarações.

Além disso, as duas interfaces núcleo RDF.rb (conhecidas como mixins no linguagem Ruby) são:

  • RDF::Enumerable Fornece métodos de iteração específicos de RDF para qualquer coleção de instruções RDF.
  • RDF::Queryable Fornece métodos de consulta específicos do RDF para qualquer coleção de instruções RDF (Bendiken, 2010).

O Spira está atualmente na versão 2.0.2 e faz uso do ActiveModel para aumentar a compatibilidade com o Rails. Mais detalhes sobre o Spira podem ser encontrados na página do projeto no GitHub do Spira, lá existe uma definição completa das modificações feitas para a versão atual.

Nota: Usaremos como exemplo a criação de classes do domínio de música. Todos os exemplos utilizados neste artigo foram retirados da página do projeto Spira. Não faz parte do escopo deste tutorial ampliar conceitos referentes ao RDF, nem do Ruby ou do Rails. Espera-se que o leitor tenha o mínimo conhecimento sobre o modelo RDF e suas definições antes de ler este tutorial. Bem como tenha conhecimento da sintaxe Ruby e da estrutura do Rails.

Começando

A primeira coisa a ser feita, é a instalação da gem Spira.

Definindo classes no modelo RDF

Usando o Spira você tem acesso a todas as classes básicas do modelo RDF, como RDF::Vocabulary e RDF::Uri:

Defina um repositório para usar as classes do modelo. O exemplo a seguir, mostra uma forma de definição de repositório genérica que pode ser usado para qualquer ORM. Falaremos mais sobre definição de repositórios nesta postagem.

URIs e Blank Nodes

Uma URI pode ser instanciada através de uma String ou qualquer coisa convertida para String via to_s. Por exemplo:

Também pode ser instanciada com URI completa:

Um chamada ‘for’ com um identificador válido, retorna um objeto com campos nulos.

Os blank nodes também podem ser usados, como se faz com a URI:

Pode também criar uma instância da Spira com #new, você terá uma instância com assunto em branco:

Opções de Classe

Existem vários temas disponíveis para as classes Spira.

base_uri

Uma classe com um conjunto base_uri (com RDF::URI ou String) usará essa URI como base nas chamadas ‘for’.

Exemplo:

Type

Type é usado para atribuir RDF.type à classe:

Além disso, pode-se usar membros de uma classe com type já definido:

Uma classe Spira pode ter vários types definidos para ela:

Opções de Propriedades

Propriedades podem ser declaradas através da chamada à função property.

As classes Spira podem ter uma ou várias propriedades. Um propriedade singular pode ser definida usando property. Uma lista de propriedades são definidas usando has_many. Quando se definem propriedades usando has_many o retorno é sempre uma lista, mesmo que vazia.

Propriedades sempre usam um symbol para definir os nomes das propriedades e uma lista de opções de variáveis. As opções suportadas são:

:type: O tipo para esta propriedade.

:predicate: O predicado usado para esse tipo.

:localized: Indica se a propriedade é multilingue.

Propriedades localizadas

Uma propriedade localizada permite definir um valor por idioma. Só funciona com um item único, ou seja, definido com property.

Tipos Classes

Um tipo de classe inclui um Spira::type e pode implementar funções de serialização e deserialização e registrar alias. Seu tipo de dado é geralmente expresso com uma URI. O exemplo a seguir é uma definição de uma classe Spira inteira e integrada:

Outras classes agora podem usar o tipo definido, assim:

Repositórios

Você pode trabalhar com qualquer tipo RDF::Repository com Spira:

Os repositórios Spira são thread-safe o que significa que você pode trabalhar com vários repositórios ao mesmo tempo:

Conclusões

Este tutorial foi uma pequena amostra de como se trabalhar com o modelo RDF com Rails. Para uma leitura mais completa acessa a página do projeto em https://github.com/ruby-rdf/spira/blob/develop/README.md. Existem outras abordagens para se trabalhar com RDF e Rails. Como a ActiveRDF, que é muito citada quando se faz pesquisas pelo tema. Porém, esse projeto foi descontinuado e por isso tornou-se inviável entrar nesse contexto.

Você pode utilizar diretamente a RDF.rb para mapear seus objetos para RDF, porém a utilização direta dessa biblioteca requer um esforço de implementação maior, como é descrito na própria página do RDF.rb.

O Spira fornece um conjunto de objetos prontos que podem ser usados na sua aplicação semântica, diminuindo o esforço da implementação e considerando um dos princípios mais falados em Web Semântica, que é o reuso.

Referências

Bendiken, Arto. (2010). RDF.rb: A Public-Domain RDF Library for Ruby. Disponível em: http://blog.datagraph.org/2010/03/rdf-for-ruby

Lopes, Ricardo.(2015). http://ricardolopes.net/blog/developing-for-the-semantic-web-with-ruby-on-rails-the-2012-guide/

Souza, Damires. (2017). Notas de aula. Modelo de Dados RDF. RDF/XML.

--

--