Escolar Documentos
Profissional Documentos
Cultura Documentos
FORTALEZA
2014
ii
FORTALEZA
2014
L768s Lira, Hermano Albuquerque.
Semantic data services: uma abordagem para acesso e manipulação de dados
interligados / Hermano Albuquerque Lira. - 2014.
117 f.
Agradecimentos
Acima de tudo, não poderia deixar de agradecer a Deus, que me dá saúde, coragem e
força de vontade para enfrentar os desafios da vida. Agradeço a ele por me permitir superar
todos os desafios que enfrentei ao longo nesta pesquisa e da minha vida.
Agradeço ao meu orientador, Prof. Pedro Porfírio, por sua inestimável orientação, dis-
ponibilidade, receptividade, além de muita paciência sempre que eu ficava meio “aperreado”.
Nossas reuniões sempre foram muito proveitosas, fornecendo todas as condições para que
meus estudos pudessem ser explorados eficientemente e direcionado à obtenção dos resulta-
dos que a pesquisa acadêmica exige.
Agradeço ao meu colega de mestrado e de trabalho José Renato, que muito me ajudou
e contribuiu com este trabalho, sua ajuda foi fundamental inúmeras vezes.
Agradeço a todos da equipe DE312 (da qual faço parte lá no SERPRO), pois todos
sempre foram muito generosos comigo e compreensíveis com minhas ausências no trabalho
em função das atividades do mestrado. Agradeço em especial ao meu chefe Marcelo, que
sempre me incentivou a entrar no mestrado, a crescer na carreira e me deu todo o suporte para
que fosse possível conciliar as atividades do trabalho e do mestrado.
Agradeço aos meus pais, por todos os sacrifícios enfrentados para promover a minha
educação, por sempre acreditarem em mim e incentivarem os meus estudos desde sempre.
Agradeço à Hayanne, minha recém-esposa, pelo seu apoio, paciência, amor e por abrir
mão da minha presença em muitas ocasiões, inclusive abrindo mão da nossa lua de mel, para
que eu utilizasse esse tempo para concluir a dissertação e entregá-la no prazo. A você meu
eterno amor e agradecimento. Prometo compensá-la em breve.
Por fim, agradeço ao SERPRO, empresa onde trabalho, pelo apoio financeiro e pela
minha inclusão no Programa de Incentivo à Pós-Graduação, o que possibilitou que eu fosse
liberado do trabalho parte do meu tempo para me dedicar a esta pesquisa.
vii
Resumo
Dados interligados (Linked Data) são dados disponibilizados na Web que adotam o
modelo RDF (Resource Description Framework) para representar suas estruturas, e a lingua-
gem OWL (Web Ontology Language) para atribuir uma semântica formal a essas estruturas.
Frequentemente tais dados podem ser acessados por serviços Web. Contudo, parte desses ser-
viços não permite o suporte à escrita. O que impossibilita a atualização das bases de dados dos
serviços. Mesmo nos serviços com suporte à escrita, são limitados ou inexistentes os meca-
nismos de verificação da integridade dos dados.
Abstract
Linked Data is a kind of data that is available on the Web and adopt the Resource De-
scription Framework (RDF) model to represent their structures. Linked Data also adopts the
Web Ontology Language (OWL) to assign a formal semantics to these structures. Often such
data can be accessed by Web Services, such as the SPARQL Services, the Linked Data Ser-
vices (LIDS) and Linked Data Platform (LDP). However, not all of these approaches have
support to writing, what makes it impossible to update the databases in these services. Even in
the approaches that support writing, the data integrity checking mechanisms are limited, or
nonexistent.
In this work, we propose the Semantic Data Services (SDS), an approach to building
RESTful Data Services with writeable Linked Data support and integrity constraint check
support. This approach takes the RESTful Semantic Interface (SERIN) specification for build-
ing service descriptors. These interfaces define what type of data is provided and what opera-
tions are allowed on SDS services.
A key differentiator of SDS approach is that while other approaches adopt the Open
World Assumption (OWA), the SDS adopts the Local Closed World Assumption (LCWA).
For supporting LCWA, the SDS extended SERIN specification, adding a new set of annota-
tions that define integrity constraint rules on data.
A typical characteristic of OWA is that the domain of data is always considered in-
complete. This implies that the databases of services based on that assumption does not have a
well-defined schema. This characteristic makes it difficult to implement a data integrity con-
straint mechanism for such services. On the other hand, in the SDS approach, the new annota-
tions added in SERIN specification act as markers that tell to SDS service what types of data
should be interpreted according to the LCWA. Our approach allows defining which data may,
or may not, be inserted into the base. It is possible to identify incomplete or inconsistent data,
according to integrity rules defined via these new annotations. In general, the SDS approach
helps to establish the domain of knowledge in a RDF graph store.
Lista de Figuras
Figura 1: Diferença semântica entre a suposição de mundo aberto e de mundo fechado. ....... 16
Figura 2: Tipos de acesso a dados interligados. Figura adaptada de (AUER et al., 2010)....... 19
Figura 3: Relação entre especificações SPARQL. ................................................................... 20
Figura 4: Os recursos apresentados em cada host são instâncias de classes e podem ser
acessados por meio dos Serviços de Dados Semânticos que adotarem a interface SERIN
especificada. ............................................................................................................................. 33
Figura 5: Estrutura de uma tripla RDF. .................................................................................... 35
Figura 6: Uma instância utilizando diversas sintaxes, em (a) um objeto na UML, em (b) um
grafo RDF, em (c) uma representação RDF/XML e em (d) uma representação em Turtle. .... 35
Figura 7: Classes e propriedades de uma interface SERIN com suas anotações de operações
HTTP. ....................................................................................................................................... 40
Figura 8: Universidades A e B compartilhando a mesma interface SERIN. ............................ 41
Figura 9: Requisição HTTP GET para obter a lista de professores da Universidade A. .......... 41
Figura 10: Requisição HTTP POST e o retorno (código 201), indicando sucesso na criação da
nova instância. .......................................................................................................................... 43
Figura 11: Duas instâncias da classe “#Aluno”, uma com e a outra sem a propriedade
“#nome”. ................................................................................................................................... 50
Figura 12: Apenas uma relação P(x, y) é permitida para propriedades
InverseFunctionalProperty. ...................................................................................................... 52
Figura 13: Exemplo de alunos e suas matrículas. ..................................................................... 53
Figura 14: Dois hosts distintos mantendo dados de uma mesma pessoa.................................. 55
Figura 15: Interface SERIN com os conceitos "#Universidade", "#Professor" e suas
propriedades anotadas com NotNull e ForeignURI. ................................................................ 58
Figura 16: Propriedade #trabalha sem a anotação ForeignURI no cenário 1 e com a anotação
no cenário 2. ............................................................................................................................. 58
Figura 17: Dois serviços de dados semânticos compartilhando a mesma interface SERIN. ... 60
Figura 18: Possível ontologia para representar um comprovante de matrícula e suas entidades
correlatas................................................................................................................................... 64
x
Lista de Tabelas
Listagens
Listagem 24: Requisições HTTP GET necessárias para se obter todas as informações
relevantes de um comprovante de matrícula sem o auxílio da anotação Embedded. ............... 65
Listagem 25: Resposta a requisição HTTP GET. Sem a anotação Embedded, o RDF retornado
traria apenas a instância “#2014.1” (descrita nas linhas 3 a 10)............................................... 66
Listagem 26 Propriedade “#disciplinaMatriculada” com a anotação Embedded. .................... 67
Listagem 27: Requisições POST não permitidas, pois classes com anotação Internal não pode
ser instânciadas diretamente. .................................................................................................... 69
Listagem 28: Comando HTTP POST válido para criação de uma nova nota fiscal. ............... 69
Listagem 29 Coleção de instâncias do tipo People. ................................................................. 89
Listagem 30 Inserção de uma instância via HTTP POST. ....................................................... 90
Listagem 31: Interface LIDS descrita em formato RDF/N3 (Notation 3). ............................... 93
Listagem 32: Instância do aluno "#Hermano" em RDF/XML. ................................................ 95
Listagem 33: Retorno XML da consulta SPARQL para a instância "#Hermano". .................. 96
Listagem 34: Retorno JSON da consulta SPARQL para a instância "#Hermano". ................. 97
Listagem 35: Retorno CSV da consulta SPARQL para a instância "#Hermano". ................... 97
Listagem 36: Documento de descrição de serviço SPARQL. ................................................ 100
xiv
Sumário
Listagens ..................................................................................................................................xii
1 Introdução ............................................................................................................................ 1
Introdução
1.1 Motivação
1
http://www.worldwidewebsize.com
2
http://linkeddata.org
2
No ambiente Web, tanto servidores quanto serviços Web operam sobre o protocolo
HTTP. No entanto, pouco deles expõem seus dados como dados interligados e os que expõem
nem sempre possuem suporte à escrita. Além disso, entre as soluções que possuem algum
suporte à escrita, são raros os que possuem mecanismos de verificação de integridade de da-
dos de acordo com a suposição de mundo fechado. A adoção da suposição de mundo fechado
permite que um serviço interprete sua base de dados como um mundo fechado e isso é bastan-
te útil quando essa base pode ser considerada completa. A interpretação dos dados interliga-
dos de uma base segundo a suposição de mundo fechado oferece algumas garantias de inte-
gridade para os dados que não pode ser obtida a partir da suposição de mundo aberto, mais
tradicionalmente utilizada para os dados interligados.
Neste estudo, serão analisados dois problemas: 1) a falta de suporte à escrita nos servi-
ços Web e 2) a falta de um mecanismo de verificação de integridade de dados aderente à su-
posição de mundo fechado. A partir desses problemas, objetiva-se propor uma especificação
para serviços Web que permita a leitura e a escrita de dados interligados, por meio de serviços
RESTful (RICHARDSON; RUBY, 2007), e possua um mecanismo de integridade dos dados.
Sobre a falta de suporte à escrita, Coppens (COPPENS et al., 2012) declara que as
abordagens atuais para a publicação de dados estruturados na Web geralmente oferecem inter-
faces de leitura/consulta para os dados subjacentes. Coppens também argumenta que a Web
começou como uma versão somente de leitura (i.e. Web 1.0), evoluiu para uma Web de leitura
e escrita, onde os seres humanos podem colaborar (i.e. Web 2.0), e é atualmente uma Web que
adota tecnologias semânticas para que agentes de software possam ler e interpretar os dados
subjacentes (i.e. Web 3.0). Assim, Coppens conclui que dada essa linha de evolução, o próxi-
mo passo lógico para uma Web 4.0 parece ser uma Web semântica de leitura e escrita, onde os
agentes possam colaborar.
De acordo com (LANTHALER; GUTL, 2011a), muitos hosts optam por disponibilizar
seus dados através de serviços Web alinhados ao estilo arquitetural REST — Representational
State Transfer — (FIELDING, 2000), porém tais serviços não costumam se beneficiar das
vantagens dos dados interligados. Uma das razões para isso é a falta de suporte à escrita para
os dados interligados. Ao passo que os serviços Web RESTful promovem uma interface de
leitura e escrita para os dados subjacentes. Dessa forma, a combinação de serviços RESTful e
da Web semântica pode trazer vários benefícios ao acesso e à manipulação dos dados interli-
gados. Enquanto os dados interligados oferecem um conjunto de melhores práticas para a pu-
3
Várias pesquisas, e.g. (LANTHALER; GUTL, 2011a), têm sido conduzidas com foco
na especificação de serviços Web RESTful com suporte à leitura e à escrita de dados interli-
gados. Tais pesquisas focam no alinhamento natural entre o modelo de dados RDF e o estilo
arquitetural REST e especificam Web APIs 4 , ao invés de endpoints SPARQL, como uma
abordagem mais adequada para o estabelecimento de comunicação entre clientes e serviços.
Para os serviços Web centrados em dados interligados, a interface de serviço deve de-
sempenhar dois papeis: 1) descrever quais são os tipos de dados providos pelo serviço e 2)
quais são as operações que podem ser feitas sobre esses dados. É desejável a utilização da
linguagem OWL — Web Ontology Language — (SMITH; WELTY; MCGUINNESS, 2004)
para descrever a interface de serviço. Também é desejável que a linguagem OWL codifique as
restrições de integridade que devem ser satisfeitas pelas instâncias dos dados.
3
http://www.w3.org
4
O termo Web API surgiu como o nome coletivo para os serviços Web RESTful, a fim de distingui-los
dos serviços Web baseados em SOAP.
4
terligados, bem como o protocolo HTTP será utilizado para prover a comunicação entre clien-
tes e hosts de serviços.
Este estudo propõe o uso de uma especificação simples — os serviços de dados se-
mânticos — para a manipulação de dados interligados e ao mesmo tempo ideal para utilização
conjunta com as bases de dados legadas. Essas características justificam essa pesquisa, por
tratar algumas limitações existentes nos serviços de dados atuais, como será apresentado ao
longo deste trabalho.
1.2 Objetivos
Este trabalho tem como objetivo geral definir uma abordagem para especificar servi-
ços Web RESTful aderentes a especificação SERIN (MUNIZ et al., 2011) e com suporte à
escrita de dados interligados.
1.3 Contribuições
classes e propriedades da interface indicam restrições que devem ser atendidas para que o
conjunto de triplas possa ser considerado uma instância. Portanto nem sempre um conjunto de
triplas com o mesmo sujeito constitui uma instância RDF.
Além desta introdução, a dissertação está organizada em mais seis capítulos, descritos
a seguir.
O capítulo 3 apresenta os serviços de dados semânticos (SDS), sua relação com a in-
terface SERIN e explica os conceitos associados a essa interface.
Dados Interligados
2.1 Introdução
O primeiro princípio declara o uso de referências URI para identificar, não apenas do-
cumentos Web e conteúdos digitais, mas também objetos do mundo real e conceitos abstratos.
O segundo princípio declara o uso de URIs como URLs para endereçar os objetos e os concei-
tos abstratos definidos pelo princípio anterior, possibilitando que por meio dessas URLs os
recursos sejam recuperados via o protocolo HTTP. O terceiro princípio declara o uso do pa-
drão RDF (MANOLA; MILLER, 2004) como modelo padrão para os dados interligados e o
quarto princípio diz respeito ao uso de hiperlinks para conectar não apenas os documentos da
Web, mas qualquer tipo de recurso.
9
Os dados interligados permitem que as informações sejam representadas com uma se-
mântica explícita e formal, facilitando, assim, seu compartilhamento, reuso e processamento
por sistemas de software. Abordagens tradicionais para representação de dados, como o XML
(BRAY et al., 2008), atacam o problema em um nível estrutural ou sintático e dependem for-
temente de padronização de um conjunto predeterminado de esquemas de representação dos
dados. De acordo com o World Wide Web Consortium (W3C), para tornar a Web de Dados
interligados uma realidade, é importante que uma grande quantidade de dados esteja disponí-
vel na Web em um modelo padrão, interpretável por agentes de software e gerenciável medi-
ante as ferramentas da Web semântica.
As vantagens da criação de uma visão de dados interligados para os dados na Web po-
dem ser resumidas com base nas tarefas que facilitam:
gar através dos documentos, encontrando outros documentos de assuntos relacionados. A Web
é uma rede de documentos interconectados de natureza genérica, aberta e extensível
(JACOBS; WALSH, 2004), e são justamente esses princípios os elementos-chave para o seu
crescimento irrestrito.
Contudo, apesar dos benefícios citados, até recentemente os mesmos princípios que
permitiram que a Web de documentos se desenvolvesse não tinham sido aplicados aos dados.
Tradicionalmente, os dados publicados na Web eram disponibilizados em formatos como
CSV ou XML, ou descritos em tabelas HTML, sacrificando muito de sua estrutura e semânti-
ca. Adicionalmente, a semântica convencional de um link entre documentos é implícita e in-
formal, assim como o formato HTML não é suficientemente expressivo para descrever dados
como uma entidade individual.
No entanto, nos últimos anos, a Web evoluiu de uma rede de documentos interligados
para uma rede de documentos e dados interligados. A razão para essa evolução está em um
conjunto de melhores práticas para a publicação e conexão de dados estruturados na Web.
Essas melhores práticas ficaram conhecidas pelos termos Linked Data ou Web semântica. De
acordo com o criador desses termos, Tim Berners-Lee, a Web Semântica é uma rede de dados
que podem ser processados diretamente ou indiretamente por máquinas (BERNERS-LEE,
1999). Assim, baseado nessa definição, os dois termos serão tratados neste trabalho como
sinônimos.
De acordo com o W3C5, a Web semântica provê um arcabouço comum que permite
que dados sejam compartilhados e reutilizados através das interfaces de aplicações empresari-
ais e comunitárias. É um esforço colaborativo liderado pelo W3C com a participação de um
grande número de pesquisadores e parceiros da indústria. Baseia-se no Resource Description
Framework (RDF).
5
http://www.w3.org/2001/sw/
11
2.2.2 RDF
2.2.3 Ontologia
endossado pelo World Wide Web Consortium (W3C) e tem atraído interesses tanto do meio
acadêmico, como comercial. Ela inclui definições interpretáveis por máquina de conceitos
básicos em um domínio e as relações entre eles. Entre os benefícios de sua utilização desta-
cam-se: o compartilhamento de um entendimento comum de estruturas de dados entre agentes
de software, a reutilização do conhecimento de um domínio e a separação entre o conheci-
mento do domínio do conhecimento operacional.
OWL Lite: Projetada para aqueles usuários que necessitam primariamente de uma
hierarquia de classificação e características de restrição simples. Por exemplo, a
OWL Lite suporta restrições de cardinalidade, mas somente permite valores de
cardinalidade de 0 ou 1;
OWL DL: Projetada para aqueles usuários que precisam de expressividade
máxima sem perda de completude computacional, i.e., garantia de que todas as in-
ferências serão computadas, e decidibilidade, todas as computações terminarão em
tempo finito. Essa sub-linguagem inclui todos os construtores da linguagem OWL,
porém, com restrições tais como a separação de tipos, i.e., uma classe não pode ser
também um indivíduo ou propriedade. Em outras palavras, classes, indivíduos e
propriedades formam conjuntos disjuntos e consequentemente uma classe sim-
plesmente denota um conjunto de indivíduos, mas não pode ser ela mesma um in-
divíduo. O termo “DL”, acrônimo para Description Logic, presente no nome dessa
sub-linguagem, refere-se a sua correspondência com a lógica descritiva, um campo
de pesquisa que tem estudado um fragmento decidível de lógica de primeira or-
dem;
OWL Full: Destinada aos usuários que desejam máxima expressividade e a liber-
dade sintática do RDF, mas sem as garantias computacionais de completude e de-
cidibilidade previstas na OWL DL. Por exemplo, é possível que uma classe possa
ser tratada simultaneamente como uma coleção de indivíduos e como um indiví-
duo propriamente dito. Outra diferença significativa em relação à OWL DL é que
13
A lógica descritiva (BAADER et al., 2003) compõe uma família de formalismos para
representação do conhecimento. Ela modela conceitos, papéis, indivíduos e seus relaciona-
mentos; sendo comumente utilizada para representar formalmente taxonomias de um domínio.
Por essa razão, em 2004 foi adotada como base para a linguagem OWL.
Formalmente, uma base de conhecimento de lógica descritiva é um par К = (Τ, Α), on-
de Τ é um TBox (Terminological Box) e Α é um ABox (Assertional Box). De forma geral, o
TBox representa sentenças descrevendo conceitos, papeis e suas relações, i.e, descrevendo as
noções relevantes de um domínio de aplicação, enquanto que o ABox representa sentenças
que expressam as relações entre os indivíduos e seus conceitos e papeis, i.e., descreve uma
situação concreta, afirmando propriedades a cerca dos indivíduos.
14
pertence ao ABox.
Outras duas características típicas da lógica descritiva, e que não são compartilhadas
pela maioria dos outros formalismos de descrição de dados, são a ausência da suposição de
nomes únicos (Unique Name Assumption — UNA) e a suposição de mundo aberto (Open
World Assumption — OWA). Isso contrasta bastante com outro formalismo bastante utilizado
para descrição de dados, o modelo relacional, que é baseado na suposição de mundo fechado
(Closed World Assumption — CWA) e admite a UNA. Essas suposições serão apresentadas
em mais detalhes nas próximas seções.
A suposição de mundo aberto (Open World Assumption — OWA) define que os dados
que não estão presentes na base de conhecimento de um host — e que não podem ser deduzi-
dos como consequência lógica dos dados presentes — não são considerados falsos, mas des-
conhecidos. Essa suposição é bastante útil em cenários onde a base de conhecimento é consi-
derada incompleta, i.e., é assumido que nem todos os fatos e axiomas que compõem o domí-
nio de aplicação são conhecidos. No entanto, as deduções lógicas feitas sobre o domínio co-
15
nhecido não devem possibilitar conclusões divergentes ao se adicionar à base novos fatos e
axiomas. Essa característica da suposição de mundo aberto é chamada de monotonicidade, e
pode ser expressa matematicamente como:
(a) Γ ⊢ C
(b) Γ, Α ⊢ C
Por outro lado, a suposição de mundo fechado (Closed World Assumption — CWA)
define que os fatos e axiomas que não são correntemente conhecidos, e que também não po-
dem ser deduzidos a partir dos fatos conhecidos, são sempre assumidos como falsos. A se-
mântica do CWA está relacionada ao conceito Negation as Failure (CLARK, 1978), onde
Clark afirma que a falsidade de uma informação P pode ser inferida se toda prova possível
para P falhar. Reiter (REITER, 1978) declara que em domínios de mundo fechado é natural
representar explicitamente somente os fatos positivos e assumir a verdade dos fatos negativos
por padrão.
Para ilustrar as características semânticas das duas suposições de mundo, supõe-se que
a Tabela 1 apresente um conjunto de voos conhecidos e disponíveis em território nacional.
Pela semântica adotada na suposição de mundo fechado, o domínio é assumido como comple-
to (i.e., não há lacunas de conhecimento sobre esse domínio), portanto, todos os voos domés-
ticos estão explicitamente representados na tabela e a ausência de um trecho específico impli-
ca que ele não existe. Assim, a falha ao localizar, por exemplo, o voo Gol 3700 que parte de
Fortaleza com destino à Recife permite que se conclua que esse voo não existe. O mundo é
16
fechado em torno dos fatos conhecidos na tabela e a negação de um fato pode ser inferida
implicitamente se sua contraparte positiva não estiver explicita.
Por outro lado, a suposição de mundo aberto assume a possibilidade de haver informa-
ções sobre voos além dos listados na Tabela 1 e, portanto, exige que tanto os fatos positivos
quanto negativos estejam explicitamente disponíveis. A OWA não utiliza a convenção Nega-
tion as Failure e, assim, permite que haja lacunas de conhecimento no domínio da aplicação.
A OWA, dessa maneira, aplica-se a sistemas que possuem informações incompletas sobre um
domínio. Por causa disso, não é possível responder se o voo Gol 3700 de Fortaleza à Recife
existe ou não, esse resposta é indefinida, não computável, na OWA.
A principal diferença entre as OWA e CWA pode ser sumarizada na Figura 1, onde β
é um conhecimento (ou fato) que não está contido em uma base de dados e β também não
pode ser deduzido, por meio de lógica descritiva, a partir dos conhecimentos contidos nessa
mesma base.
As figuras 1.a e 1.b possuem as mesmas premissas, contudo suas conclusões são bas-
tante diferentes em razão da suposição de mundo adotada em cada caso. Enquanto a Figura
1.a conclui que β é desconhecido, a Figura 1.b assume o seu valor é falso.
1. owl:sameAs é o termo da OWL que afirma que dois nomes (ou URIs) se referem à
mesma entidade;
2. owl:differentFrom é o termo da OWL que afirma que dois nomes (ou URIs) se re-
ferem a entidades diferentes.
um único país e Hermano é cidadão do Brasil e de Portugal, então Brasil e Portugal são o
mesmo país.
De maneira simplificada, a suposição de nome único declara que se dois recursos pos-
suem nomes distintos, então serão considerados recursos distintos. A suposição de nome úni-
co é predominante nos modelos relacionais, enquanto que as tecnologias da Web semântica
(e.g. RDF e OWL) não a utilizam.
O conceito de uma suposição do mundo fechado localmente (Local Closed World As-
sumption — LCWA) foi introduzido pela primeira vez por Etzioni et al (ETZIONI;
GOLDEN; WELD, 1997), no contexto de bases de conhecimento para os agentes de software.
A motivação para esse tipo de suposição de mundo era ter um formalismo mais adequado para
efetuar inferências lógicas em ambientes multiagentes, onde cada agente conhecia sua própria
base de conhecimento completamente, mas não conhecia as informações mantidas nas bases
dos outros agentes.
A OWA é adequada para contextos abertos, como a Web, pois nesse ambiente não há
garantias de um agente obter informações completas ou consistentes sobre algo. Todavia, si-
tuações naturalmente surgem em que seria preferível utilizar a CWA. Ela é o preferível, por
exemplo, quando os dados da base local de um agente podem ser considerados completos no
que diz respeito ao domínio em questão. A semântica da CWA permite que se façam verifica-
19
ções sobre a integridade dos dados locais, mantendo, portanto, uma representação consistente
do mundo, mesmo durante operações que resultam em mudanças sobre os dados.
Segundo (AUER et al., 2010), existem três tipos de acesso a dados interligados, como
mostrado na Figura 2:
Figura 2: Tipos de acesso a dados interligados. Figura adaptada de (AUER et al., 2010).
O primeiro tipo é o acesso por consulta, onde um agente envia para um endpoint, de
um serviço de acesso a dados, uma consulta SPARQL (HARRIS; SEABORNE, 2013) e rece-
be o resultado dessa consulta. O segundo tipo é o acesso em nível de entidade, onde um agen-
te executa uma requisição HTTP GET em uma URI identificadora de um recurso e recebe
uma representação do recurso em RDF como resposta a requisição. Por último, o acesso por
Dump, onde o agente executa uma requisição HTTP GET na URI identificadora de um grafo
RDF e obtêm todo o grafo como resultado.
20
SPARQL (SPARQL Protocol and RDF Query Language) é uma linguagem de consul-
ta para bases de dados em RDF. Essa é a linguagem de consulta oficial do W3C e pode ser
utilizada para expressar consultas em diversas fontes de dados, estando os dados armazenados
nativamente em RDF ou representados em RDF via algum middleware. Além de consultas,
SPARQL contém recursos para fazer conjunção, disjunção, agregação, subconsultas, negação,
entre outras funcionalidades (HARRIS; SEABORNE, 2013).
Como exemplos de serviços de acesso a dados por consulta que implementam as espe-
cificações da Figura 3, pode-se citar o Fuseki Server6, o AllegroGraph Server7 e o Virtuoso
6
http://jena.apache.org/documentation/serving_data/
7
http://franz.com/agraph/allegrograph/
21
Como exemplos de serviços de acesso por Dump, pode-se citar o Fuseki Server e o
Virtuoso Universal Server. Esses dois serviços implementam a especificação SPARQL Graph
Store HTTP Protocol, além da SPARQL Protocol com já foi citado na Seção 2.3.1.
8
http://virtuoso.openlinksw.com/
22
Contudo, apesar dos esforços da OASIS, a especificação OData ainda é pouco adotada
pelos serviços de acesso a dados. Assim, o cenário atual da Web é composto por uma infini-
dade de serviços de dados com propósitos específicos, dentre os quais se destacam o Simple
9
http://www.oasis-open.org
23
Storage Service (S3)10, uma API REST da Amazon, o Twitter REST API11 e o Graph API12
do Facebook. Nesse cenário a integração de dados é uma tarefa bastante árdua, em razão da
heterogeneidade dos serviços, e mesmo que a especificação OData se tornasse um padrão
entre os provedores de dados, ainda haveria o problema da falta de alinhamento com os prin-
cípios dos dados interligados.
Tim Berners-Lee (BERNERS-LEE et al., 2009) afirma que a Web de dados interliga-
dos atual é majoritariamente uma Web apenas de leitura, e que embora essa Web permita a
integração, navegação e consultas estruturadas em grandes conjuntos de dados, ainda falta um
conceito geral para uma Web de dados de leitura e escrita.
10
http://docs.aws.amazon.com/AmazonS3/latest/API/APIRest.html
11
https://dev.twitter.com/docs/api
12
https://developers.facebook.com/docs/graph-api/using-graph-api/
24
Garrote (GARROTE; GARCÍA, 2011) afirma que a falta de um suporte à escrita para
os repositórios de dados interligados impõe barreiras à adoção dessa tecnologia.
Coppens (COPPENS et al., 2012) declara que as abordagens atuais para a publicação
de dados interligados na Web geralmente oferecem interfaces de consulta para os dados subja-
centes. Ele também argumenta que a Web começou como uma versão somente de leitura (i.e.,
Web 1.0), evoluiu para uma Web de leitura e escrita, onde os seres humanos podem colaborar
(i.e., Web 2.0), e é atualmente uma Web que adota tecnologias semânticas para que as máqui-
nas possam ler e entender os dados subjacentes (i.e., Web 3.0). Assim, Coppens conclui que
dada essa linha de evolução, o próximo passo lógico para uma Web 4.0 parece ser uma Web
semântica de leitura e escrita, onde as máquinas podem colaborar.
Usando como ponto de partida o Linked Data Basic Profile 1.0, o W3C iniciou em
2012 um grupo de trabalho com o intuito de produzir uma recomendação, chamada Linked
Data Platform (SPEICHER; ARWE; MALHOTRA, 2014), que permita a leitura e a escrita
de dados interligados via HTTP, que tenha plena integração entre as tecnologias da Web se-
mântica — tais como o RDF e OWL — e que siga plenamente os princípios do estilo arquite-
tural REST. Portanto, o Linked Data Platform descreve um conjunto de melhores práticas
para a construção de serviços RESTful de dados com uma arquitetura de leitura e escrita de
dados interligados acessados via HTTP. Além disso, os dados mantidos pelos serviços são
representados por meio do modelo RDF.
Até a data de conclusão desta dissertação a especificação Linked Data Plataform ainda
não havia se tornado uma recomendação do W3C, embora já estivesse em uma etapa bem
avançada desse processo.
Os serviços de acesso a dados interligados com suporte à escrita são essenciais para a
evolução da Web. Contudo, esse suporte trás alguns desafios. Por exemplo, em cenários onde
um serviço aceita requisições para inserção, atualização e deleção de dados e onde tais requi-
sições são executadas por clientes diferentes e independentes entre si, existe uma preocupação
em se manter a consistência dos dados na base ao longo dessas requisições. A manutenção da
consistência desses dados é essencial nos casos onde o host assume que sua base de conheci-
mento é completa em relação a um determinado domínio.
Fang (FANG, 2013) argumenta que o problema de manter a integridade dos dados in-
terligados surge porque eles são baseados nas tecnologias da Web semântica (e.g., RDF e
OWL) e tais tecnologias empregam a suposição de mundo aberto (Open World Assumption —
OWA) e não adotam a suposição de nomes únicos (Unique Name Assumption — UNA). Es-
sas suposições são tipicamente adequadas para representar o conhecimento distribuído na
Web, onde dados completos sobre um determinado domínio não podem ser presumidos. Por
outro lado, isso torna difícil a utilização da OWL para fazer a verificação da integridade dos
dados no contexto do mundo fechado, onde o conhecimento sobre um domínio é sempre as-
sumido como completo.
26
1 <owl:Class rdf:about="#Pessoa">
2 <rdfs:subClassOf>
3 <owl:Restriction>
4 <owl:onProperty rdf:resource="#temCPF"/>
5 <owl:onClass rdf:resource="#CPF"/>
6 <owl:qualifiedCardinality>1</owl:qualifiedCardinality>
7 </owl:Restriction>
8 </rdfs:subClassOf>
9 </owl:Class>
10
11 <owl:NamedIndividual rdf:about="#Pedro">
12 <rdf:type rdf:resource="#Pessoa"/>
13 </owl:NamedIndividual>
A Listagem 1 apresenta um cenário que ilustra a razão pela qual a linguagem OWL
não é adequada para fazer a verificação de integridade dos dados. As linhas 1 a 9 apresentam
axiomas que descrevem que qualquer instância da classe “#Pessoa” deve ter exatamente um
CPF. Portanto, o fato descrito nas linhas 11 a 13, que declara que “#Pedro” é uma pessoa e
nada informa sobre seu CPF, deveria gerar uma violação de integridade. Contudo, a ontologia
da Listagem 1 não apresenta nenhuma violação, pois a restrição declarada nas linhas 3 a 7 não
são interpretadas como uma verificação de integridade, ao invés disso, essa restrição infere
que “#Pedro” possui um CPF desconhecido.
Sirin, Tao e outros (SIRIN; TAO, 2009; TAO et al., 2010a, 2010b) declaram que para
usar a OWL tanto como linguagem de representação de conhecimento, quanto como meca-
nismo de restrição de integridade, é preciso combinar as semânticas do mundo aberto e do
28
mundo fechado. Para eles, em muitas aplicações centradas em dados interligados é desejável a
utilização de OWL para codificar as restrições de integridade que devem ser satisfeitas pelas
instâncias. No entanto, as condições que desencadeiam as violações de integridade em siste-
mas que usam a suposição de mundo fechado irão gerar novas inferências em aplicações onde
os dados são descritos pela linguagem OWL. Assim, eles propõem uma abordagem inspirada
no trabalho de Motik (MOTIK; HORROCKS; SATTLER, 2007), onde alguns axiomas TBox
são selecionados para representarem restrições de integridade e são, portanto, interpretados
com uma semântica diferente, própria para validação de dados. A principal diferença entre os
dois trabalhos reside no tratamento diferente que Sirin e Tao dão para os axiomas TBox inter-
pretados como restrições e que possuem disjunções.
No contexto dos serviços de acesso a dados interligados, várias pesquisas têm sido fei-
tas na direção de se criar uma especificação que permita o suporte adequado à escrita. Já no
contexto da Web de dados interligados, notoriamente na linguagem OWL, outras pesquisas
têm focado no desenvolvimento de um mecanismo de restrição de integridade aderente a su-
posição de mundo fechado. A integração entre essas duas linhas de pesquisa parece natural,
uma vez que se beneficiariam dessa integração, entre outras coisas, os serviços cujo domínio
de dados é considerado finito e os dados propriamente ditos são assumidos como completos.
Contudo, apesar dos benefícios identificados, tais abordagens são praticamente disjuntas.
2.7 Sumário
Neste capítulo, foram mostradas a principais tecnologias relacionadas aos dados inter-
ligados. Também foram apresentados os conceitos sobre mundo aberto (OWA) e mundo fe-
chado (CWA) e suas derivações — conceitos nos quais toda linguagem de representação de
conhecimento se apoia. Além disso, este capítulo apresentou pesquisas recentes sobre o su-
porte à escrita de dados interligados e abordagens para sua verificação de integridade.
Este capítulo define o conceito de Serviços de Dados Semânticos, i.e., serviços Web
que implementam as operações de acesso, atualização, criação e exclusão de dados por meio
do protocolo HTTP, expõem os seus recursos como dados interligados e utilizam ontologias
para descrever sua interface de serviço.
3.1 Introdução
O termo Serviços de dados é usado neste trabalho para definir pontos de acesso a fon-
tes de dados por meio de serviços Web. Uma característica que distingue os serviços de dados
de outros tipos de serviços Web é que eles manipulam seus dados mediante as operações de
CRUD (Create, Read, Update e Delete), assim não há operações para computação de dados.
Tais serviços atuam como camadas de acesso a dados, o que permite abstrair a fonte de dados
do host. Assim, outros sistemas podem chamar as operações do serviço para solicitar ou exe-
cutar operações sobre esses dados. Os serviços de dados são, portanto, uma maneira útil de
fornecer dados para uma gama de consumidores por meio da Web.
Neste trabalho são propostos os Serviços de Dados Semânticos (SDS), pontos de aces-
so para dados que estão armazenados nativamente como RDF ou são visualizados como RDF
via algum middleware. Os SDS são descritos por interfaces SERIN (MUNIZ et al., 2011) e
estão alinhados ao estilo arquitetural REST (FIELDING, 2000). Portanto, o suporte à leitura e
à escrita em tais serviços é provido pelo protocolo HTTP (FIELDING et al., 1999).
Garrote (GARROTE; GARCÍA, 2011) afirma que os dados interligados estão rapida-
mente se tornando um importante mecanismo para expor dados estruturados na Web. Ele ar-
gumenta que a capacidade que diferentes fontes de dados interligados possuem de serem des-
critas por um vocabulário comum e utilizarem o mesmo modelo de dados abre novas possibi-
lidades na forma como esses dados podem ser utilizados. Contudo, ele conclui que a falta de
31
um suporte à escrita para os repositórios de dados interligados impõe barreiras à adoção dessa
tecnologia.
Porém, nem toda URI é desreferenciável. Os elementos de uma tripla RDF, por exem-
plo, utilizam URIs unicamente para identificação, pois a especificação atual do RDF
(MANOLA; MILLER, 2004) não trata a desreferenciação dessas URIs. Por outro lado, os
serviços Web RESTful se comunicam com seus clientes por meio dos métodos HTTP para
obter e alterar dados em um host. Nesses serviços, os dados são identificados mediante URIs
que são desreferenciadas a cada operação. Portanto, a combinação do modelo RDF com os
serviços Web RESTful é natural, com RDF fornecendo uma representação padrão para codifi-
car os dados e identificação de seus elementos mediante URIs e os serviços RESTful forne-
cendo uma maneira de obter e alterar os dados. Vários autores, tanto na academia, quanto na
indústria, têm explorado formas de alinhar essas duas tecnologias de maneira adequada. Page
(PAGE; DE ROURE; MARTINEZ, 2011), por exemplo, apresenta um estudo onde são mos-
tradas as principais diferenças e similaridades entre o modelo RDF e o estilo arquitetural
REST, enquanto Kjernsmo (KJERNSMO, 2012) propõe que o suporte a hipermídia no RDF é
necessário para um melhor alinhamento ao estilo arquitetural REST.
32
Dentro do World Wide Web Consortium (W3C), o Grupo de Trabalho responsável pe-
la especificação SPARQL (HARRIS; SEABORNE, 2013) desenvolveu uma especificação
voltada para acessar dados em Graph Stores RDF por meio de serviços RESTful (OGBUJI,
2013). Contudo, mesmo nessa especificação ainda há a possibilidade dos dados RDF possuí-
rem URIs não desreferenciáveis, o que não é desejado. Em maio de 2012, o W3C em parceria
com a IBM e Oracle, criou um Grupo de Trabalho com a finalidade de desenvolver um corpo
de conhecimentos que sintetizem as melhores práticas para o desenvolvimento de serviços
RESTful alinhados ao modelo RDF. Esse grupo de trabalho está — pelo menos até a data de
conclusão deste trabalho — trabalhando na especificação Linked Data Platform 1.0
(SPEICHER; ARWE; MALHOTRA, 2014), cujo objetivo é se tornar uma recomendação do
W3C para o desenvolvimento de serviços Web RESTful capazes de ler e escrever dados inter-
ligados e adequados para o uso em integração de aplicações e construção de sistemas de sof-
tware modulares e interoperáveis.
A interface SERIN é parte essencial dos Serviços de Dados Semânticos. Todos os da-
dos providos por esses serviços precisam seguir o modelo de dados RDF definido na interfa-
ce. Assim, as classes e propriedades da interface caracterizam semanticamente os dados man-
tidos no host. Essa interface é um documento OWL DL válido, portanto, seque as mesmas
regras de validade impostas à linguagem OWL DL. Dentre essas regras, uma que possui im-
portante relevância no contexto dos serviços de dados semânticos é a que diz que referências
URI para classes, propriedades e indivíduos devem ser disjuntas, i.e., classes e propriedades
não podem ser usadas como instâncias e vice versa. Essa separação imposta pela OWL DL é
fundamental para se definir a fronteira do que é interface e o que são os dados.
33
As interfaces SERIN são uma evolução da visão de ontologia ativa definida por Neto
(NETO, 2007). Essa visão classifica o conhecimento que pode ser representado por uma onto-
logia em dois grupos, o conhecimento compartilhado e o conhecimento particular. Nessa clas-
sificação, o conhecimento compartilhado diz respeito ao modelo de dados, enquanto que o
conhecimento particular está relacionado às instâncias desse modelo. Por exemplo, se um
determinado agente requisita a um serviço de dados semânticos de uma universidade quais os
cursos ofertados por ela, ambos têm que saber o que significa “curso”. O termo “curso” deve
pertencer ao conhecimento compartilhado do transmissor e do receptor da comunicação. Con-
tudo, o agente não deve saber quais os cursos ofertados até que o serviço os informe. Esse
conhecimento da lista de cursos ofertados pela universidade em questão é particular apenas
àquela universidade. Por esse motivo, as ontologias utilizadas para construção de interfaces
SERIN frequentemente só possuem as definições de classes e propriedades, enquanto as ins-
tâncias que pertencem ao domínio definido pela interface são armazenadas na base de dados
do host, pois são informações particulares ao host e não devem fazer parte da ontologia, a
Figura 4 ilustra essa visão.
Figura 4: Os recursos apresentados em cada host são instâncias de classes e podem ser acessados por meio
dos Serviços de Dados Semânticos que adotarem a interface SERIN especificada.
34
Essa visão não é a que muitas abordagens utilizam. Normalmente, modelam se as on-
tologias como um conjunto único, composto por classes, propriedades e instâncias, onde as
instâncias fazem parte da ontologia e todo o conjunto está eventualmente compartilhado na
internet. Portanto, não é feita a distinção que é feita neste trabalho, de existir um modelo e
existir hosts que seguem o modelo. Os hosts possuem bases distintas cada qual seguindo o
modelo da ontologia. Essa abordagem é diferente, por exemplo, da Wikipédia, onde se supõe
que exista uma ontologia composta por classes, propriedades e instâncias.
Uma interface, de maneira geral, é um contrato que define quais dados podem ser tro-
cados entre o agente e o serviço e como essa troca pode ser feita, i.e., que métodos são permi-
tidos sobre os dados. Portanto, o conhecimento compartilhado — representado por meio da
interface — é de natureza estática, enquanto o particular — representado pelas instâncias ar-
mazenadas no host — é de natureza dinâmica.
Essa separação entre o modelo e as instâncias permite que quem vá criar as instâncias
no host não seja necessariamente quem modelou a ontologia. Essa característica torna a espe-
cificação SERIN uma boa candidata para ser utilizada na construção das interfaces de serviços
de dados semânticos. Um host que implementa uma interface SERIN oferece acesso a dados
que são instâncias das classes e propriedades definidas na interface. Os serviços de dados se-
mânticos usam os conceitos previamente estabelecidos na interface e os ligam semanticamen-
te aos dados armazenados no host do serviço.
O modelo RDF expressa quaisquer informações como uma coleção de triplas, cada
tripla consistindo de um sujeito, um predicado e um objeto. O conjunto de tais triplas é cha-
mado de grafo RDF (KLYNE; CARROLL, 2004). A Figura 5 ilustra um diagrama de repre-
sentação de uma tripla, onde dois nós são ligados por um arco direcionado.
35
Este trabalho tem como uma de suas contribuições, definir o conceito de instância
RDF. Os serviços de dados semânticos expõem os dados armazenados em seus hosts como
instâncias RDF. Tais instâncias são trocadas entre o SDS e seus clientes por meio de docu-
mentos RDF válidos, contendo uma ou mais instâncias.
Figura 6: Uma instância utilizando diversas sintaxes, em (a) um objeto na UML, em (b) um grafo RDF,
em (c) uma representação RDF/XML e em (d) uma representação em Turtle.
36
Além do tipo de dados, os serviços de dados semânticos sequem mais duas suposições
de integridade semântica:
A partir dessas suposições, as seguintes restrições devem ser adotadas pela interface
SERIN para assegurar a integridade semântica dos dados do serviço:
instâncias devem ser associadas a, pelo menos, uma classe. Além disso, todas as instâncias
gerenciadas pelo host são consideradas distintas entre si (owl:AllDifferent).
Restrições sobre classes: Dentro de uma interface SERIN não são permitidas classes
anônimas, nem classes intersection (owl:intersectionOf) e nem classes union (owl:unionOf).
Além disso, todas as classes definidas na interface são consideradas distintas entre si
(owl:AllDisjointClasses).
Segundo as restrições apresentadas nesta seção, e impostas aos serviços de dados se-
mânticos, instâncias de classes que não estão presentes na interface, não podem ser inseridas
na base de dados do host que implementa aquela interface. Nem tais instâncias podem possuir
propriedades que também não estejam definidas na interface. Essas restrições alinham a inter-
face SERIN ao conceito de suposição de mundo fechado, onde não existem outros objetos no
mundo além daqueles designados pela interface.
estilo arquitetural REST. A Listagem 2 apresenta a ontologia SERIN com a descrição comple-
ta das anotações de operações HTTP.
1 <?xml version="1.0"?>
2 <rdf:RDF xmlns="http://www.unifor.br/serin.owl#"
3 xmlns:owl="http://www.w3.org/2002/07/owl#"
4 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
5 <owl:Ontology rdf:ID="http://www.unifor.br/serin.owl"/>
6 <owl:AnnotationProperty rdf:ID="#get"/>
7 <owl:AnnotationProperty rdf:ID="#delete"/>
8 <owl:AnnotationProperty rdf:ID="#put"/>
9 <owl:AnnotationProperty rdf:ID="#post"/>
10 </rdf:RDF>
As operações não permitidas pelo serviço de dados semânticos irão retornar o código
HTTP 405 — Método não permitido (Method Not Allowed).
26 </owl:ObjectProperty>
27
28 <owl:DatatypeProperty rdf:about="#nome">
29 <rdfs:domain rdf:resource="#Professor"/>
30 <rdfs:range rdf:resource="&xsd;string"/>
31 </owl:DatatypeProperty>
32
33 <owl:DatatypeProperty rdf:about="#CPF">
34 <rdfs:domain rdf:resource="#Professor"/>
35 <rdfs:range rdf:resource="&xsd;integer"/>
36 </owl:DatatypeProperty>
37 </rdf:RDF>
Figura 7: Classes e propriedades de uma interface SERIN com suas anotações de operações HTTP.
A classe “#Professor” está anotada com as quatro operações Get, Post, Put e Delete.
Para possibilitar a utilização dessas anotações, a interface de serviço precisa importar a onto-
logia SERIN, como mostrado na linha 11 da Listagem 3. A semântica dessas anotações é a
mesma definida para os métodos HTTP (FIELDING et al., 1999). Portanto, é possível recupe-
rar, atualizar e remover instâncias de professor mantidas em hosts de serviços de dados se-
mânticos. A Figura 8 mostra o cenário onde as duas universidades implementam os serviços
SDS que sequem a interface SERIN da Figura 7.
41
Método GET
1 <?xml version="1.0"?>
2 <rdf:RDF xmlns="http://www.universidade.org/interface.owl#"
3 xml:base="http://www.universidade.org/interface.owl"
4 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
6
7 <Professor rdf:about="www.universidade_A.br/serin/www.universidade.org/interface.owl/Professor/1">
8 <CPF rdf:datatype="&xsd;integer">11111111111</CPF>
9 <nome rdf:datatype="&xsd;string">Frank Manola</nome>
10 <trabalhaEm rdf:resource="www.universidade_A.br/serin/www.universidade.org/interface.owl/Universidade/A"/>
11 </Professor>
12
13 <Professor rdf:about="www.universidade_A.br/serin/www.universidade.org/interface.owl/Professor/2">
14 <CPF rdf:datatype="&xsd;integer">22222222222</CPF>
15 <nome rdf:datatype="&xsd;string">Eric Miller</nome>
16 <trabalhaEm rdf:resource="www.universidade_A.br/serin/www.universidade.org/interface.owl/Universidade/A"/>
17 </Professor>
18
19 <Professor rdf:about="www.universidade_A.br/serin/www.universidade.org/interface.owl/Professor/3">
20 <CPF rdf:datatype="&xsd;integer">33333333333</CPF>
21 <nome rdf:datatype="&xsd;string">Graham Klyne</nome>
22 <trabalhaEm rdf:resource="www.universidade_A.br/serin/www.universidade.org/interface.owl/Universidade/A"/>
23 </Professor>
24
25 <Professor rdf:about="www.universidade_A.br/serin/www.universidade.org/interface.owl/Professor/4">
26 <CPF rdf:datatype="&xsd;integer">44444444444</CPF>
27 <nome rdf:datatype="&xsd;string">Jeremy J. Carroll</nome>
28 <trabalhaEm rdf:resource="www.universidade_A.br/serin/www.universidade.org/interface.owl/Universidade/A"/>
29 </Professor>
30 </rdf:RDF>
Listagem 5: Requisição HTTP GET retorna um documento RDF como a instância "1" de professor.
Método DELETE
muito baixa, i.e., as unidades de informação são as triplas (BIZER; HEATH; BERNERS-
LEE, 2009). Se a visão de triplas fosse adotada em detrimento da visão de instâncias, a requi-
sição DELETE iria remover apenas a tripla que define que a instância 1 é do tipo professor
(<1> <rdf:type> <#Professor>) e deixaria na base de dados todas as triplas de pro-
priedade “órfãs”. Isso não é o desejado, pois permitiria o armazenado de dados incompletos
nos serviços, possibilitando situações de inconsistência de dados no contexto da suposição de
mundo fechado localmente.
Método POST
A requisição POST solicita ao serviço de dados semânticos que uma nova instância se-
ja inserida na base de dados do host. Contudo, diferentemente das requisições GET e DELE-
TE, uma requisição POST deve possuir um corpo (ou payload), que deve ser passado junta-
mente com a mensagem de requisição HTTP. A Figura 10 ilustra esse comportamento, onde
uma agente solicita a inserção de uma nova instância no host da universidade A. O código
HTTP 201 Created indica que o SDS aceitou a requisição com sucesso.
Figura 10: Requisição HTTP POST e o retorno (código 201), indicando sucesso na criação da nova
instância.
Por exemplo, a Listagem 7 mostra a requisição POST para a inserção de uma quinta
instância de professor na universidade A.
13 <trabalhaEm rdf:resource="www.universidade_A.br/serin
/www.universidade.org/interface.owl/Universidade/A"/>
14 </rdf:Description>
15 </rdf:RDF>
e que o payload (linhas 4 a 15) da requisição POST contém uma nova instância de professor
demilitada pela tag <rdf:Description> (linhas 9 a 14). Essa tag não contem a URI identifi-
cadora da instância (rdf:ID ou rdf:about), pois é função do serviço de dados semânticos
gerar uma nova URI válida para qualquer instância adicionada à base da universidade A. No
exemplo apresentado acima, a URI gerada poderia ser
www.universidade_A.br/serin/www.universidade.org/interface.owl/Professor/5.
Além da geração, o SDS retorna a URI para o cliente da requisição no corpo da mensagem de
resposta HTTP 201.
Método PUT
Por último, o quarto método HTTP adotado pelos serviços de dados semânticos é o
PUT. A requisição PUT solicita ao SDS que uma instância seja atualizada na base de dados
do host. Assim como no caso do POST, a requisição PUT também possui como payload um
documento RDF. Contudo, diferentemente da URL utilizada no POST, a URL da requisição
PUT deve identificar a instância que se deseja atualizar.
Para exemplificar um cenário de uso da requisição PUT, suponha que se deseje atuali-
zar a propriedade “#CPF” da instância 5 (inserida pelo POST da Listagem 7 no exemplo ante-
rior).
45
Por fim, a atualização de uma propriedade com cardinalidade maior que 1 requer al-
guns cuidados. Para exemplificar essa situação suponha que um professor trabalhe na univer-
sidade A, como definido na linha 4 da Listagem 9, e que começará a trabalhar também na uni-
versidade B.
1 <Professor rdf:about="…/interface.owl/Professor/5">
2 <CPF rdf:datatype="&xsd;integer">88888888888</CPF>
3 <nome rdf:datatype="&xsd;string">Pedro Porfírio</nome>
4 <trabalhaEm rdf:resource="…/interface.owl/Universidade/A"/>
5 </Professor>
Listagem 9: Instância de professor com uma propridade "#trabalhaEm".
A requisição PUT deve acrescentar a nova relação “#trabalhaEm” sem remover a que
já existe, como é mostrado na Listagem 10.
46
Listagem 10: Requisição PUT para adicionar duas propriedades "#trabalhaEm" à mesma instância de
professor.
Note que payload da requisição PUT precisa reenviar a relação da linha 10 para o ser-
viço de dados semânticos junto com a nova relação da linha 11, pois caso contrário, isso indi-
caria para o SDS que o professor iria trabalhar apenas na universidade B e não mais na A. Isso
acontece por que o método PUT sempre remove todas as triplas para reinseri-las novamente.
3.5 Sumário
Neste capítulo, foram apresentados os serviços de dados semânticos como uma abor-
dagem para construção de serviços de acesso a dados interligados. Foram mostrados os prin-
cipais desafios a serem superados para a construção de serviços Web RESTful alinhados ao
modelo de dados RDF. Também foi explicada como a abordagem SERIN, para construção de
interfaces semânticas, se relaciona com os serviços de dados semânticos.
Este capítulo define o mecanismo de restrição de integridade que dá suporte aos ser-
viços de dados semânticos.
4.1 Introdução
A presença de uma semântica baseada na suposição de mundo aberto, i.e., uma declaração
que não está explicitamente disponível no domínio ou que não pode ser inferida a partir
dos fatos disponíveis não pode ser assumida como falsa, mas como desconhecida.
A ausência da suposição de nome único, i.e., dois nomes diferentes podem referenciar um
mesmo indivíduo.
ada na suposição de mundo fechado localmente e aplicada ao contexto dos serviços de dados
semânticos. Tais restrições de integridade são, assim, mecanismos que verificam se todas as
informações necessárias foram fornecidas explicitamente.
dos por serviços de dados semânticos. Essa abordagem, contudo, não implica em perda de
expressividade do modelo RDF que descreve os dados manipulados por esses serviços.
A anotação NotNull obriga que uma instância possua um valor não nulo associado a
propriedade anotada. Essa anotação, portanto, assegura que uma instância declare explicita-
mente a propriedade que se deseja manter no host.
Existem muitas situações onde se deseja evitar valores nulos. A Figura 11, por exem-
plo, apresenta duas instâncias da classe “#Aluno”. A instância “#Hermano” está explicitamen-
te associada ao nome do aluno por meio da propriedade “#nome”, enquanto que “#Pedro”
possui um nome desconhecido. Espera-se que todos os alunos registrados no host de uma uni-
versidade, entre outras informações, tenham seus nomes explicitamente cadastrados. É neces-
sário então que a ontologia utilizada para descrever a interface SERIN de um serviço de dados
semânticos defina que não são permitidas inserções de instâncias de aluno sem a propriedade
“#nome” explicitamente declarada.
50
Figura 11: Duas instâncias da classe “#Aluno”, uma com e a outra sem a propriedade “#nome”.
1 <owl:Class rdf:about="#Aluno">
2 <rdfs:subClassOf>
3 <owl:Restriction>
4 <owl:onProperty rdf:resource="#nome"/>
5 <owl:qualifiedCardinality>
6 1
7 </owl:qualifiedCardinality>
8 <owl:onDataRange rdf:resource="&xsd;string"/>
9 </owl:Restriction>
10 </rdfs:subClassOf>
11 </owl:Class>
12
13 <owl:DatatypeProperty rdf:about="#nome">
14 <rdfs:domain rdf:resource="#Aluno"/>
15 <rdfs:range rdf:resource="&xsd;string"/>
16 </owl:DatatypeProperty>
Listagem 11: Restrição de cardinalidade para a ontologia Aluno.
1 <owl:DatatypeProperty rdf:about="#nome">
2 <serin:notNull/>
3 <rdfs:domain rdf:resource="#Aluno"/>
4 <rdfs:range rdf:resource="&xsd;string"/>
5 </owl:DatatypeProperty>
A anotação NotNull permite que se mantenha no host dados tão completos quanto se
deseje. Portanto, essa anotação contribui para o suporte a LCWA nos serviços de dados se-
mânticos. Atualmente não é possível obter esse tipo de suporte apenas com o vocabulário de-
finido na linguagem OWL por ela adotar unicamente a suposição de mundo aberto.
a especificação UNIQUE é definida como um conjunto de atributos de uma tabela, tal que
nenhum par de linhas essa tabela possui valores de atributos iguais. Entretanto, os valores dos
atributos podem ser nulos — a menos que tenham sido explicitamente declarados como sendo
NOT NULL — pois um valor nulo não se iguala a qualquer outro valor. É possível haver vá-
rias propriedades de uma classe com a anotação Unique. Contudo, a unicidade de cada propri-
edade é independente, ao contrário dos bancos de dados onde é possível combinar várias co-
lunas de maneira a obter a unicidade da combinação de valores das colunas.
Figura 12: Apenas uma relação P(x, y) é permitida para propriedades InverseFunctionalProperty.
Na Figura 13, é declarado que o aluno “#Hermano” possui a matrícula 10001, enquan-
to que o aluno “#Pedro” possui a matrícula 20001. Supondo que a matrícula é uma proprieda-
de que identifica unicamente um aluno, é necessário que o serviço de dados semânticos asse-
gure a consistência dos dados recusando a inserção de outro aluno que esteja associado a uma
matrícula em uso.
53
1 <owl:DatatypeProperty rdf:about="#matricula">
2 <serin:unique/>
3 <rdfs:domain rdf:resource="#Aluno"/>
4 <rdfs:range rdf:resource="&xsd;integer"/>
5 </owl:DatatypeProperty>
Listagem 14 Propriedade #matricula com anotação Unique.
A anotação Unique permite que se identifique uma instância dentro de um host por
meio da propriedade anotada. Portanto, essa anotação contribui para o suporte a suposição de
nome único nos serviços de dados semânticos. A partir dessa anotação é possível inferir se
duas instâncias são distintas entre si. A linguagem OWL, em sua versão atual (HITZLER et
al., 2012), não permite essa suposição. A menos que uma declaração explícita seja feita de
que duas instâncias se referem à mesma ou a diferentes indivíduos por meio dos termos:
owl:sameAs, owl:differentFrom ou owl:AllDifferent.
4.3.3 Anotação Id
A anotação Id, portanto, possui a semântica combinada das anotações NotNull e Uni-
que em uma única declaração. Proíbe várias instâncias de ter o mesmo valor na mesma pro-
priedade e proíbe os valores de serem nulos. Além disso, é possível anotar várias proprieda-
des, o que possibilita criar identificadores compostos, equivalente à chave primária composta
do modelo relacional.
No modelo relacional, os campos que permitem identificar unicamente uma linha (tu-
pla) em uma tabela são os candidatos naturais à chave primaria. Da mesma maneira, é interes-
55
sante que os serviços de dados semânticos possuam um mecanismo similar, para que instân-
cias sejam unicamente identificáveis. Na especificação original de SERIN (MUNIZ et al.,
2011), nenhuma anotação foi proposta com a finalidade de identificar uma instância. Enten-
deu-se na época que a URI do sujeito já fazia esse papel. Toda instância é um conjunto de
triplas RDF que compartilham o mesmo sujeito, além disso, a especificação RDF propõe que
sujeitos e predicados obrigatoriamente sejam identificados por uma URI válida. No escopo de
um único host a URI do sujeito pode ser utilizada como identificador único, pois o próprio
host é quem controla a criação e utilização dessas URIs. Porém, em cenários onde vários hosts
são considerados e em razão da ausência de suposição de nome único, duas URI distintas po-
dem apontar para a mesma instância como mostra a Figura 14.
Figura 14: Dois hosts distintos mantendo dados de uma mesma pessoa.
1. www.univA.br/serin/interface.owl/Professor/Pedro e;
2. www.univB.br/serin/interface.owl/Professor/Porfirio.
Por serem mantidas em hosts diferentes que por sua vez são controlados por universi-
dades diferentes e independentes entre si, não há garantias de que as URIs 1 e 2 sejam iguais.
56
A anotação Id se propõe a permitir que inferências desse tipo sejam feitas, e fatos co-
mo “#Pedro” owl:sameAs “#Porfirio” sejam inferidos ao invés de serem declarados explici-
tamente. Isso é possível por que ambos dos hosts, A e B, compartilham a mesma interface
SERIN, portanto, a propriedade “#CPF” é definida como um identificador único para o domí-
nio de dados definido na interface e não para um ou outro host.
1 <owl:DatatypeProperty rdf:about="#CPF">
2 <serin:id/>
3 <rdfs:domain rdf:resource="#Professor"/>
4 <rdfs:range rdf:resource="&xsd;integer"/>
5 </owl:DatatypeProperty>
mo host. Da mesma forma, o serviço de dados semânticos também não efetuará a inserção
caso a instância esteja sem a propriedade CPF definida explicitamente. Nessas duas situações
será retornado o código HTTP 412, Precondition Failed, alertando para a falha na operação.
A anotação ForeignURI obriga que o valor da propriedade anotada seja uma URI de
uma instância mantida ou pelo próprio host ou definida dentro da sua interface SERIN. Por-
tanto, URIs de instâncias externas à base de dados do host, bem como de interfaces e ontolo-
gias alheias ao serviço de dados semânticos, não podem ser associadas a esse tipo de proprie-
dade. Essa anotação se aplica apenas às propriedades do tipo owl:ObjectProperty, pois as
propriedades owl:DatatypeProperty possuem um contradomínio (rdfs:range) que pode ser
definido apenas por tipos primitivos; os quais não possuem URIs.
Essa anotação é inspirada nas chaves estrangeiras (Foreign Key) dos bancos de dados
relacionais. Silberschatz e outros (SILBERSCHATZ; KORTH; SUDARSHAN, 2005) afir-
mam que chaves estrangeiras são mecanismos de restrição de integridade referencial que ga-
rantem que os valores que aparece em uma relação para um determinado conjunto de atributos
de uma tabela também devem aparecer em outra relação para um conjunto de atributos equi-
valente de outra tabela.
A Figura 15 apresenta uma ontologia como interface SERIN que exemplifica a utiliza-
ção da anotação ForeignURI. A ontologia define as classes “#Universidade” e “#Professor”;
além das propriedades “#endereco” e “#trabalha”. Essas propriedades estão anotadas respecti-
58
vamente com as anotações NotNull e ForeignURI. (Na Listagem 20 essa mesma ontologia é
apresentada em linguagem OWL).
Figura 15: Interface SERIN com os conceitos "#Universidade", "#Professor" e suas propriedades anota-
das com NotNull e ForeignURI.
A ontologia acima define apenas conceitos, i.e., classes e propriedades, mas não ins-
tâncias. Os exemplos a seguir comtemplam o caso onde as instâncias são mantidas em bases
de dados. Contudo, ao final dessa seção será apresentado o caso onde as instâncias são defini-
das na própria interface SERIN.
Figura 16: Propriedade #trabalha sem a anotação ForeignURI no cenário 1 e com a anotação no cenário 2.
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="…">
<rdf:Description rdf:about="#Unifor">
<endereco>Av. Washigton Soares, 1321</endereco>
</rdf:Description>
</rdf:RDF>
É importante destacar que a requisição HTTP DELETE, mostrada na Listagem 19, so-
bre a propriedade “#trabalha” não é ilegal. Nesse caso o serviço de dados semânticos retorna
o código HTTP 200 OK, pois o comando irá remover apenas a relação que existe entre “#Pe-
dro” e “#Unifor”, mas não as instâncias. Apenas se “#trabalha” estivesse anotada com
NotNull esse comando seria ilegal.
1 <owl:Class rdf:about="#Professor"/>
2 <owl:Class rdf:about="#Universidade"/>
3
4 <owl:ObjectProperty rdf:about="#trabalha">
5 <serin:foreignURI/>
6 <rdfs:domain rdf:resource="#Professor"/>
7 <rdfs:range rdf:resource="#Universidade"/>
8 </owl:ObjectProperty>
9
10 <owl:DatatypeProperty rdf:about="#endereco">
11 <serin:notNull/>
12 <rdfs:domain rdf:resource="#Universidade"/>
13 <rdfs:range rdf:resource="&xsd;string"/>
14 </owl:DatatypeProperty>
Listagem 20: Propriedade #trabalha anotada com ForeignURI e #endereco anotado com NotNull.
60
O modelo RDF foi concebido tendo em vista o ambiente aberto da Web, assim ele uti-
liza URIs para interligar instâncias dispostas em bases de dados diferentes e independentes
uma das outras. Esse modelo não impõe nenhum tipo de restrição condicionada à suposição
de mundo fechado localmente para as instâncias mantidas em um host, pois o RDF tem como
objetivo formar um imenso espaço global de dados interligados (HEATH; BIZER, 2011).
Contudo, existem situações onde é desejável um mecanismo de restrição de integridade refe-
rencial. Tal mecanismo se propõe a permitir que apenas instâncias mantidas em um host parti-
cipem das relações definidas na interface de serviço do host. Situações como, por exemplo, do
cenário 2 da Figura 16, onde apenas instâncias cadastradas no host da universidade A devem
estar interligadas entre si. Sem esse tipo de restrição não há como manter a consistência dos
dados, pois seria possível, por exemplo, associar professores da universidade B à universidade
A, o que não é o desejado.
Figura 17: Dois serviços de dados semânticos compartilhando a mesma interface SERIN.
balha”, na ontologia, permite que “#Pedro” se associe a uma universidade de qualquer tipo,
pois o contradomínio dessa propriedade é “#Universidade”.
1 <owl:Class rdf:about="#ProfessorServidor">
2 <rdfs:subClassOf rdf:resource="#Professor"/>
3 <rdfs:subClassOf>
4 <owl:Restriction>
5 <owl:onProperty rdf:resource="#trabalha"/>
6 <owl:allValuesFrom rdf:resource="#UniversidadePublica"/>
7 </owl:Restriction>
8 </rdfs:subClassOf>
9 </owl:Class>
10
11 <owl:Class rdf:about="#ProfessorCeletista">
11 <rdfs:subClassOf rdf:resource="#Professor"/>
13 <rdfs:subClassOf>
14 <owl:Restriction>
15 <owl:onProperty rdf:resource="#trabalha"/>
16 <owl:allValuesFrom rdf:resource="#UniversidadeParticular"/>
17 </owl:Restriction>
18 </rdfs:subClassOf>
19 </owl:Class>
20
21 <owl:Class rdf:about="#UniversidadeParticular">
22 <rdfs:subClassOf rdf:resource="#Universidade"/>
23 <owl:disjointWith rdf:resource="#UniversidadePublica"/>
24 </owl:Class>
priedades anotadas. Quanto mais propriedades forem anotadas, mais fechados e controlados
serão os dados do host.
A utilização da anotação ForeignURI também está prevista para o caso onde as instân-
cias associadas a propriedade anotada não estão na base de dados, mas definidas na própria
interface SERIN. Esse caso é bastante comum quando as instâncias de uma determinada clas-
se são poucas e mudam pouco ao longo do tempo. Um exemplo típico é a classe país — defi-
nida na Listagem 22. Uma vantagem de se definir o conjunto de instâncias de país diretamen-
te na interface SERIN é que dessa forma todos os hosts que adotarem a interface poderão re-
ferenciar exatamente as mesmas instâncias, não havendo, assim, duplicação de instâncias nas
bases de dados de cada host. Contudo, as interfaces SERIN não podem ser modificadas pelos
serviços de dados semânticos, consequentemente todas as instâncias definidas na interface são
apenas de leitura.
1 <owl:Class rdf:about="#Pais">
2 <owl:oneOf rdf:parseType="Collection">
3 <rdf:Description rdf:about="#EUA"/>
4 <rdf:Description rdf:about="#Italia"/>
5 <rdf:Description rdf:about="#Alemanha"/>
6 <rdf:Description rdf:about="#Brasil"/>
7 <rdf:Description rdf:about="#China"/>
8 <rdf:Description rdf:about="#Franca"/>
9 </owl:oneOf>
10 </owl:Class>
Por último, é interessante frisar que essa anotação não implica na obrigatoriedade da
instância “#Pedro” ter a propriedade “#trabalha” definida explicitamente. No entanto, caso ela
esteja definida, então obrigatoriamente as instâncias do contradomínio devem estar definidas
na interface SERIN ou presentes na base de dados do host. Como é ilustrado no segundo ce-
nário da Figura 16 e na Figura 17.
63
Todas as anotações apresentadas até esse ponto têm como principal característica vali-
dar a entrada de dados nos serviços de dados semânticos. Isso significa que as restrições de
integridade são verificadas sempre que uma operação de escrita de dados (POST, PUT e DE-
LETE) é executada. Diferentemente, a anotação Embedded não se propõe a fazer verificação
de integridade, pois ela está associada apenas à operação de leitura (HTTP GET). O propósito
dela é permitir que uma requisição GET executada para uma instância em particular retorne
tanto a instância requisitada, quanto as instâncias relacionadas a ela por meio de propriedades
Embedded. Essa anotação se diferencia da ForeignURI, pois ela indica ao serviço SDS quais
as instâncias que sempre devem ser visualizadas em conjunto pela requisição GET, enquanto
a anotação ForeignURI indica qual o conjunto de propriedades de uma instância que deve,
obrigatoriamente, ser armazenado na mesma base de dados da instância requisitada.
A anotação Embedded atua somente sobre instâncias, ela se aplica apenas às proprie-
dades do tipo owl:ObjectProperty, já que o contradomínio das propriedades
owl:DatatypeProperty é definido por tipos primitivos e não permitem associação com uma
instância. Para exemplificar o contexto onde essa anotação se aplica, suponha que se deseje
gerar um comprovante de matrícula como o apresentado na Listagem 23.
Listagem 23: Exemplo de comprovante de matrícula gerado para o primeiro semestre de 2014.
nome, uma data de ingresso em determinado curso e está alocado em uma turma especifica
desse curso. Já os campos: código, nome da disciplina, crédito e horário são próprios da enti-
dade disciplina.
A Figura 18 mostra uma possível ontologia que define as entidades — e suas relações
— utilizadas para representar o comprovante da Listagem 23. Nessa figura a ontologia apre-
sentada atua como uma interface SERIN, onde as propriedades “#alunoMatriculado” e “#dis-
ciplinaMatriculada” estão anotadas com Embedded.
Figura 18: Possível ontologia para representar um comprovante de matrícula e suas entidades correlatas.
Figura 19: O conjunto de instâncias que compõe um comprovante de matricula e a interface SERIN que o
define.
65
A anotação Embedded permite que o serviço de dados semânticos, ao receber uma re-
quisição HTTP GET para uma instância de comprovante, retorne sempre a instância requisi-
tada juntamente com suas instâncias embutidas, i.e., o aluno e suas disciplinas. A Figura 20
ilustra esse comportamento.
Figura 20: Requisição HTTP GET para uma instância com propriedades Embedded.
Na Figura 20, um agente efetua uma requisição HTTP GET a um serviço de dados
semânticos. Esse agente solicita o comprovante de matrícula “#2014.1”. No entanto, como as
propriedades “#alunoMatriculado” e “#disciplinaMatriculada” estão anotadas com Embedded,
todas as instâncias associadas ao comprovante, mediante essas propriedades, são retornadas
juntamente com ele. O retorno previsto pelo serviço de dados semânticos é exibido na Lista-
gem 25. A vantagem de se utilizar a anotação Embedded, é que com apenas uma requisição
HTTP GET é possível obter todas as instâncias necessárias para gerar o comprovante da Lis-
tagem 23. Sem essa anotação, por outro lado, seriam necessárias cinco requisições GET para a
obtenção das mesmas instâncias. A Listagem 24 apresenta as requisições necessárias na au-
sência dessa anotação.
1. GET /serin/interface.owl/Comprovante/2014.1 HTTP/1.1
Host: www.unifor.br
1 <?xml version="1.0"?>
2 <rdf:RDF xmlns:rdf="…">
3 <Comprovante rdf:about="#2014.1">
4 <periodoLetivo>2014.1</periodoLetivo>
5 <emissor rdf:resource="#Unifor"/>
6 <matricula rdf:resource="#Hermano"/>
7 <atividade rdf:resource="#AspectosFormais"/>
8 <atividade rdf:resource="#ServicoWeb"/>
9 <atividade rdf:resource="#WebSemantica"/>
10 </Comprovante>
11
12 <Universidade rdf:about="#Unifor">
13 <nome>Universidade de Fortaleza</nome>
14 </Universidade>
15
16 <Aluno rdf:about="#Hermano">
17 <codigo>10001</codigo>
18 <turma>13</turma>
19 <ingresso>2011.1</ingresso>
20 <nome>Hermano Albuquerque Lira</nome>
21 <curso>Mestrado em Informática Aplicada</curso>
22 </Aluno>
23
24 <Disciplina rdf:about="#AspectosFormais">
25 <horario>3a 5a MANHÃ 7h30 às 9h10</horario>
26 <credito>4</credito>
27 <nome>ASPECTOS FORMAIS</nome>
28 </Disciplina>
29
30 <Disciplina rdf:about="#ServicoWeb">
31 <horario>6a NOITE 19h às 20h40</horario>
32 <credito>2</credito>
33 <nome>SERVIÇOS WEB</nome>
34 </Disciplina>
35
36 <Disciplina rdf:about="#WebSemantica">
37 <credito>2</credito>
38 <horario>4a NOITE 19h às 20h40</horario>
39 <nome>WEB SEMÂNTICA</nome>
40 </Disciplina>
41 </rdf:RDF>
Listagem 25: Resposta a requisição HTTP GET. Sem a anotação Embedded, o RDF retornado traria
apenas a instância “#2014.1” (descrita nas linhas 3 a 10).
Em razão da baixa granularidade do modelo RDF — ele representa os dados como tri-
plas (sujeito-predicado-objeto) — sua manipulação pode se tornar bastante complexa. Para
facilitar essa manipulação a anotação Embedded possibilita combinar instâncias de forma a se
obter uma representação com maior granularidade. O que é mais adequado em muitas situa-
ções como no exemplo do comprovante de matricula.
1 <owl:ObjectProperty rdf:about="#disciplinaMatriculada">
2 <serin:embedded/>
3 <rdfs:domain rdf:resource="#Comprovante"/>
4 <rdfs:range rdf:resource="#Disciplina"/>
5 </owl:ObjectProperty>
O SDS não permite que uma instância Internal seja persistida diretamente por uma re-
quisição HTTP POST. Sua adição deve ocorrer juntamente com a de sua instância pai, na
mesma requisição que a insere, ou então por meio de uma requisição HTTP PUT, adicionan-
do-a como um novo membro de uma instância já presente na base.
A anotação Internal não pretende tornar o conjunto fechado, i.e., outras instâncias po-
dem ser adicionadas a ele no futuro. Porém, com essa anotação, pretende-se garantir que um
conjunto mínimo de instâncias esteja explicitamente armazenado no host, de forma a manter o
conjunto todo consistente nos moldes da suposição de mundo fechado localmente.
Figura 21: Ontologia de um nota fiscal eletrônica com propriedades Embedded e classes Internal.
Listagem 27: Requisições POST não permitidas, pois classes com anotação Internal não pode ser
instânciadas diretamente.
Para que as notas fiscais criadas em um serviço de dados semânticos sejam consisten-
tes, a requisição POST que instancia a nota fiscal também deve instanciar todos os seus itens,
bem como o total. Uma requisição POST válida é apresentada na Listagem 28.
4.4 Sumário
Este capítulo apresenta uma arquitetura de software para suportar os serviços de da-
dos semânticos. A arquitetura é descrita por meio da apresentação dos seus componentes e
do relacionamento entre eles. Este capítulo também apresenta uma implementação da arqui-
tetura baseada na linguagem Java
5.1 Introdução
Baseado nos conceitos definidos acima, o capítulo 3 deste trabalho propôs os serviços
de dados semânticos (SDS), uma abordagem aderente ao estilo arquitetural REST, para cons-
trução de serviços de dados interligados. Um importante componente dessa abordagem é a
interface SERIN, a qual foi estendida no capítulo 4 para que permitisse a verificação da inte-
gridade dos dados mantidos pelo serviço SDS.
Assim, o objetivo deste capítulo é apresentar uma possível arquitetura que propicie a
construção de serviços SDS. Essa arquitetura deve, portanto, ler e interpretar a interface SE-
RIN, bem como suas anotações, gerenciando as requisições HTTP feitas ao serviço e verifi-
cando a integridade de dados de acordo com as regras estabelecida na interface. Essa arquite-
72
tura será dividida em três componentes principais: o primeiro responsável por processar as
requisições HTTP, o segundo responsável por verificar a integridade dos dados e o terceiro
responsável por abstrair a base de dados.
Neste trabalho, adotou-se a linguagem Java para a implementação dos serviços de da-
dos semânticos. Outras linguagens poderiam ter sido utilizadas para a implementação do SDS,
pois a arquitetura aqui definida é independente de plataforma ou linguagem de programação.
Contudo, a linguagem Java foi escolhida por ser madura e por possuir um grande conjunto de
frameworks que auxiliam a implementação. Dentre esses frameworks, destacam-se: o RES-
TEasy13 e o Jena14. O primeiro tem como finalidade auxiliar o desenvolvedor na construção
de serviços Web RESTful, enquanto o segundo fornece parsers para as linguagens RDF e
OWL, além de uma API para execução de inferências e um motor de busca SPARQL.
13
http://resteasy.jboss.org
14
http://jena.apache.org
15
http://www.jboss.org
16
http://www.apache.org
73
O servidor SDS reconhece os métodos HTTP GET, POST, PUT e DELETE e os inter-
preta de acordo com a semântica padrão estabelecida na especificação do próprio protocolo
HTTP (FIELDING et al., 1999). A Tabela 4 mostra essa semântica. Toda a comunicação en-
tre um cliente e o servidor precisa acontecer por meio desses quatro métodos. Contudo, o ser-
vidor SDS implementado neste trabalho também responde aos métodos HEAD e OPTIONS.
Isso acontece por que a utilização do framework RESTEasy fornece implementações padrão
para os dois métodos e como eles são idempotentes, não foram suprimidos ou redefinidos no
servidor.
Um servidor SDS pode ser configurado para reconhecer uma ou mais interfaces SE-
RIN, e é por meio dessas interfaces que ele verifica se os dados que um cliente deseja ler, ou
escrever, são adequados à base mantida pelo serviço. A Figura 23 mostra a interação entre um
cliente e um serviço que mantém dados referentes ao domínio de conhecimento de uma uni-
versidade, via interface Universidade.owl.
74
Figura 23: Toda informação lida ou escrita na base de dados precisa respeitar o domínio de conhecimento
estabelecido na interface Universidade.owl.
Figura 24: Componentes do servidor SDS em um cenário de processamento de uma requisição HTTP.
dor SDS. Esse componente é composto por dois pacotes: endpoint e requesthandler.
O primeiro aloja a classe SDSAddressConventionHandler, cuja função é verificar se a
URL submetida está sintaticamente correta; e a partir dessa URL, verificar se a interface SE-
RIN que descreve o documento RDF submetido é reconhecida pelo servidor SDS. O segundo
pacote mantém a classe SDSRequestHandler, cuja função é mediar e controlar a comuni-
cação entre os outros componentes, i.e., decidir se a requisição HTTP deve passar pelo verifi-
cador de integridade (no caso de requisições de escrita) ou se vai direto para o componente de
persistência (caso de requisições de leitura). A Figura 26 mostra essas classes e seus princi-
pais métodos públicos.
Figura 26: Componente Processador de Requisições com seus pacotes e principais classes.
Figura 27: Diagrama de sequência de uma requisição HTTP GET sendo processada.
77
Figura 28: Componente Verificador de Integridade de Dados com seus pacotes e principais classes.
Figura 29: Diagrama de sequência mostrando a troca de mensagens entre as duas principais classes do
componente Verificador de Integridade de Dados.
tem como objetivo abstrair os mecanismos de persistência utilizados pelo servidor SDS. Essa
abstração possibilita persistir as informações sem haver um forte acoplamento entre a imple-
mentação do servidor SDS e o meio físico para persistência dos dados. Possíveis meios físicos
são os bancos de dados relacionais, os repositórios de grafos ou arquivos aderentes ao modelo
RDF. Neste trabalho adotou-se o framework Jena como base para a implementação do com-
ponente Persistência, no entanto, esse componente pode ser utilizado também com outros
frameworks.
A escolha do Jena se deve a dois importantes submódulos que ele possui para provi-
mento de acesso e armazenamento de dados: o SDB17 e o TDB18. O primeiro fornece uma
API para acesso a diversos bancos de dados relacionais (e.g., MySQL, Postgres, Oracle, SQL
Server, etc), permitindo o mapeamento dos elementos do modelo relacional (e.g., tabelas e
relações) com a estrutura de um grafo RDF. Contudo, a equipe de desenvolvedores do Jena
não pretende evoluir mais esse submódulo e recomenda que para novos projetos adote-se o
TDB. Esse submódulo, por sua vez, é a implementação de um Triple Store, i.e., um banco de
dados não relacional que persiste os dados diretamente como grafos RDF. De acordo com a
equipe do Jena, o TDB possui um desempenho melhor em relação ao SDB. A Figura 30 mos-
tra uma visão geral da arquitetura do Jena e sua relação com seus submódulos.
17
http://jena.apache.org/documentation/sdb/index.html
18
http://jena.apache.org/documentation/tdb/index.html
80
A Figura 32 ilustra o tráfego de dados desde a requisição acionada por um cliente até
sua persistência em uma base de dados gerenciada ou pelo SDB ou pelo TDB.
Figura 32: Camada de persistência implementada via framework Jena e submódulos SDB ou TDB.
Em 2011 foi lançada a Open Government Partnership (OGP), uma iniciativa interna-
cional entre diversos governos com a pretensão de difundir e incentivar globalmente práticas
governamentais relacionadas à transparência dos governos, ao acesso à informação pública e à
participação social. Oito países fundadores da parceria (África do Sul, Brasil, Estados Unidos,
Filipinas, Indonésia, México, Noruega e Reino Unido) assinaram a declaração de governo
aberto19 e apresentaram seus planos de ação. Atualmente, 64 países integram a parceria20.
Hoje, em razão do OGP, diversos portais de dados governamentais podem ser livre-
mente consultados via Web. O governo norte americano, por exemplo, publica seus dados em
www.data.gov, enquanto o reino unido publica em www.data.gov.uk e o Brasil dá
publicidade a seus dados por meio do portal www.dados.gov.br. Essencialmente, esses
portais disponibilizam conjuntos de bases de dados sobre educação, agricultura, clima, eco-
nomia, saúde, emprego, ciências e pesquisas, enfim, tudo que possa ser de interesse para o
cidadão. Tais portais se propõem a centralizar os dados produzidos pelos vários órgãos e esfe-
ras que compõem o governo de uma nação. Assim, é de responsabilidade de cada órgão, pu-
blicar seus dados.
Contudo, a grande maioria dos dados encontrada nesses portais ainda está representada
em formatos pouco amigáveis para processamento por máquinas; dificultando a análise, inte-
gração e inferências sobre eles. Dentre os formatos mais populares pode-se citar o HTML, o
19
http://www.cgu.gov.br/governoaberto/a-ogp/ogp-declaracao-de-governo-aberto.pdf
20
http://www.opengovpartnership.org/
82
XML, o PDF, o CSV, o ZIP, o DOC, o XLS, entre outros. O RDF que é um formato mais
alinhado com os princípios dos dados abertos, por exemplo, representa apenas duas bases de
dados, dentre todas as 238 bases catalogadas no portal brasileiro21.
Outra limitação bastante significativa com relação a esses portais diz respeito à falta
de uma API para consultar e atualizar os dados. O acesso esses dados pelo cidadão é feito por
meio de dump (Seção 2.3.2), i.e., o cidadão faz o download de um arquivo contendo todas as
informações de uma determinada base de dados. Essa abordagem possui algumas limitações,
como por exemplo, a impossibilidade de se consultar apenas uma parte da informação a qual
se está interessando sem precisar baixar a base inteira. Outra limitação, por parte dos órgãos
que atualizam os dados, é que não há como escrever novos dados na base, sem que se faça um
novo upload de toda a base.
O portal de dados do Reino Unido, assim como o portal brasileiro, também possui a
minoria de suas bases de dados em RDF, contudo, para essas bases foi disponibilizada uma
API de acesso, a Linked Data API22, cujo principal objetivo é permitir a navegação e a con-
sulta de dados sem a necessidade de se fazer um dump da base inteira.
21
http://dados.gov.br/dataset
22
https://code.google.com/p/linked-data-api/
23
http://vocab.e.gov.br/
83
24
http://vocab.e.gov.br/2013/09/loa
84
A partir da ontologia mostrada na Figura 33, que pode ser encontrada em formato
OWL no endereço http://vocab.e.gov.br/2013/09/loa.owl, a construção de
um serviço SDS é bastante simples. Inicialmente, devem ser acrescentadas as anotações Get,
Post, Put e Delete nessa ontologia. Essas anotações informam quais operações serão permiti-
das sobre os dados. Em seguida, devem ser acrescentadas também as anotações de restrição
de integridade (NotNull, Unique, Id, ForeignURI, Embedded e Internal) para garantir dados
completos e consistentes sobre o orçamento federal. Feitas as devidas anotações na ontologia
loa.owl, ela estará pronta para assumir o papel de uma interface SERIN perante um servi-
dor SDS.
Por “host qualquer”, enfatiza-se o fato de que a interface SERIN é abstrata e, portanto,
não se vincula a nem um serviço SDS. Contudo, bons candidatos para hosts do serviço SDS
de orçamento federal são os hosts dados.gov.br e o vocab.e.gov.br. Além desses,
outros possíveis bons candidatos são os portais mantidos pelos órgãos que compõem o gover-
no, por exemplo, portais ministeriais que são responsáveis por elaborar parcelas (de acordo
com as suas competências) do orçamento federal.
É interessante notar que a abordagem dos serviços SDS pode ser implementada para
os dados do orçamento federal de, pelo menos, duas maneiras distintas. A primeira, ilustrada
na Figura 34, é implantando-se o serviço no host dados.gov.br, e a segunda, mostrada na
Figura 35, é implantando-se vários serviços, um em cada host de órgão competente que parti-
cipa da elaboração do orçamento.
85
Figura 35: Serviços de dados semânticos implantados nos hosts dos órgãos do governo.
vendo que tipo de informações podem ser encontradas nos hosts e garantindo por meio de
suas anotações quais dados podem ser acessados e escritos, além de como os dados devem ser
escritos corretamente.
5.5 Sumário
Este capítulo avalia a abordagem dos Serviços de Dados Semânticos (SDS) por meio
de uma análise comparativa entre ela e outras abordagens similares.
6.1 Introdução
6.2 Metodologia
O Open Data Protocol (PIZZO; HANDL; ZURMUEHL, 2014a), ou OData, é uma es-
pecificação para construção de serviços Web RESTful de consulta e atualização de dados. Ele
fornece uma maneira uniforme para consultar e manipular conjuntos de dados por meio de
operações de CRUD. Esses dados estão representados no modelo Entity Data Model (EDM)
(PIZZO; HANDL; ZURMUEHL, 2014b), um modelo baseado no de Entidade-
Relacionamento (CHEN, 1976), e que estende seus usos tradicionais para o contexto da Web.
A abordagem OData adota somente o modelo EDM e propõe serializar seus dados nos
formatos Atom (ZURMUEHL; PIZZO; HANDL, 2013) e JSON (HANDL; PIZZO;
BIAMONTE, 2014). O EDM é uma representação de estruturas de dados como entidades e
relacionamentos inspirada no modelo relacional. Para ilustrar como os dados são representa-
dos esse modelo, vamos utilizar o serviço TripPin. Esse é um serviço de demonstração que
está disponível online na página de documentação 25 do OData. Ele pode ser acessado por
meio da URL http://services.odata.org/V4/TripPinServiceRW.
25
http://www.odata.org
89
No modelo EDM é possível definir tipos para os dados. O serviço TripPin, por exem-
plo, define o tipo People, entre outros. A Listagem 29 apresenta os dados retornados por esse
serviço ao se executar a requisição HTTP GET para a URL
http://services.odata.org/V4/TripPinServiceRW/People.
1 {
2 ”@odata.context”: “serviceRoot/$metadata#People”,
3 “value”: [
4 {
5 “@odata.id”: “serviceRoot/People('russellwhyte')”,
6 “UserName”: “russellwhyte”,
7 “FirstName”: “Russell”,
8 “LastName”: “Whyte”,
9 “Emails”: [
10 “Russell@example.com”,
11 “Russell@contoso.com”
12 ],
13 “AddressInfo”: [
14 {
15 “Address”: “187 Suffolk Ln.”,
16 “City”: {
17 “CountryRegion”: “United States”,
18 “Name”: “Boise”,
19 “Region”: “ID”
20 }
21 }
22 ],
23 “Gender”: “Male”
24 },
25 {
26 “@odata.id”: “serviceRoot/People('keithpinckney')”,
27 “UserName”: “keithpinckney”,
28 “FirstName”: “Keith”,
29 “LastName”: “Pinckney”,
30 “Emails”: [
31 “Keith@example.com”,
32 “Keith@contoso.com”
33 ],
34 “AddressInfo”: [],
35 “Gender”: “Male”
36 }
37 ]
38 }
2014), mas também é possível utilizar os serviços OData com os dados representados no for-
mato Atom (ZURMUEHL; PIZZO; HANDL, 2013).
Os serviços OData possuem suporte à escrita. Eles disponibilizam operações para cria-
ção, atualização e deleção de algumas ou todas as entidades definidas na interface do serviço.
Para criar uma entidade em uma coleção, por exemplo, o cliente envia uma requisição HTTP
POST para a URL da coleção. O corpo dessa requisição precisa conter uma única e válida
representação da entidade. A requisição abaixo, na Listagem 30, cria uma pessoa a qual con-
tém uma coleção de propriedades, inclusive propriedades multivaloradas.
1 POST http://services.odata.org/V4/TripPinServiceRW/People
2 Content-Type: application/json
3 Accept: application/json
4
5 {
6 "@odata.type":"Microsoft.OData.SampleService.Models.TripPin.Person",
7 "UserName": "teresa",
8 "FirstName" : "Teresa",
9 "LastName" : "Gilbert",
10 "Gender" : "Female",
11 "Emails" : ["teresa@example.com", "teresa@contoso.com"],
12 "AddressInfo" : [
13 {
14 "Address" : "1 Suffolk Ln.",
15 "City" :
16 {
17 "CountryRegion" : "United States",
18 "Name" : "Boise",
19 "Region" : "ID"
20 }
21 }
22 ]
23 }
A deleção por meio do serviço OData é executada via requisição HTTP DELETE, on-
de a URL deve informar o identificador da instância. A deleção, por exemplo, da instância
inserida na listagem acima seria:
DELETE http://services.odata.org/V4/TripPinServiceRW/People('teresa')
Os serviços OData devem suportar o comando HTTP PATCH e esse comando deve
ser utilizado como o principal meio de atualizar uma instância. Contudo, o comando HTTP
91
PUT também deve ser suportado, visto que a especificação OData é alinhada aos princípios
do estilo arquitetural REST. A requisição HTTP PUT é bastante semelhante ao HTTP POST,
pois no corpo da requisição deve haver uma única e válida representação de uma instância.
Por outro lado, na requisição HTTP PATCH o corpo da requisição contém apenas as proprie-
dades que se deseja alterar associadas a seus novos valores.
A interface OData é descrita por meio da especificação CSDL (Common Schema De-
finition Language) (PIZZO; HANDL; ZURMUEHL, 2014b). Essa especificação define uma
representação XML do modelo EDM. Um serviço OData é definido por um único documento
CSDL que pode ser acessado por meio de uma requisição HTTP GET para http://<endpoint
do serviço>/$metadata. Esse documento é chamado de documento de meta-dados e ele pode
referenciar outros documentos CSDL. O documento de meta-dados define as entidades expos-
tas pelo serviço e descreve suas relações. Esse documento também representa uma interface
abstrata, pois não há informações de binding que liguem a interface a um host em particular.
Por fim, o CSDL não relaciona explicitamente quais métodos HTTP são válidos para cada
entidade, assume-se que toda entidade é manipulável por qualquer método HTTP, além disso
o CSDL não utiliza ontologias para formalizar a semântica dos seus vocabulários.
Uma quantidade considerável de dados na Web está disponível via Web APIs que ex-
põem esses dados em formatos como JSON ou XML. A abordagem de serviços de dados in-
92
terligados — Linked Data Services (LIDS) (SPEISER; HARTH, 2010) — tem como objetivo
criar envoltórios em serviços Web provedores de dados pré-existentes, fornecendo assim uma
Web API que disponibiliza os dados na forma de dados interligados. Isso permite combinar
dados provenientes de diferentes APIs e fontes de dados, facilitando a integração entre servi-
ços provedores de dados.
A abordagem LIDS sempre apresenta seus dados de acordo com o modelo RDF. Os
dados de entrada no serviço podem vir em formatos como JSON ou XML, mas as saídas
sempre são em RDF.
A abordagem LIDS não tem suporte à escrita de dados. Ela tem como foco a consulta
a serviços de dados pré-existentes e a conversão dos dados retornados em uma representação
RDF. Não fazem parte de suas atribuições, portanto, a inserção e a modificação dos dados.
Por ser uma abordagem focada em leitura de dados, não há a necessidade de LIDS
possuir suporte à verificação de integridade de dados.
A interface LIDS descreve uma função e seus parâmetros de entrada e saída. Ela adota
a sintaxe Notation 3 (BERNERS-LEE; CONNOLLY, 2011), ou RDF/N3, como o formato de
descrição da interface de serviço. A Listagem 31 mostra um exemplo dessa interface. Esse
exemplo foi adaptado do artigo “Integrating Linked Data and Services with Linked Data Ser-
vices” (SPEISER; HARTH, 2011).
93
A abordagem LDP alinha o modelo RDF com o estilo arquitetural REST. Portanto, o
suporte à escrita é garantido via os comandos HTTP POST e PUT, enquanto a remoção de
dados é garantida via o comando HTTP DELETE.
94
A abordagem LDP não faz extensões à linguagem OWL, nem à linguagem RDF, por-
tanto, nessa abordagem adota-se unicamente a suposição de mundo aberto, típica da Web se-
mântica. Assim não há suporte à verificação de integridade de dados nos moldes discutidos
neste trabalho (de suposição de mundo fechado localmente).
A especificação atual da abordagem LDP não define nada a respeito de uma interface
de serviço. Contudo, até a data de conclusão deste trabalho essa especificação ainda não era
uma recomendação de fato, mas estava no estágio de draft na W3C.
A especificação SPARQL 1.1 Protocol utiliza o RDF como modelo de dados. Contu-
do, essa especificação possui três sintaxes de formato de dados. Essas sintaxes são definidas
em documentos de especificação próprios, enumerados a seguir:
A Figura 36 ilustra uma instância RDF. Essa instância representa o aluno “#Hermano”
e suas propriedades. Ela é descrita em RDF/XML na Listagem 32.
1 <rdf:RDF xmlns="http://www.unifor.br/serin/universidade.owl#"
2 xml:base="http://www.unifor.br/serin/universidade.owl"
3 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
4 <Aluno rdf:about="#Hermano">
5 <curso>Mestrado em Informática Aplicada</curso>
6 <nome>Hermano A. Lira</nome>
7 <CPF>82616973391</CPF>
8 <matricula>10001</matricula>
9 <anoIngresso>2011</anoIngresso>
10 <turma>13</turma>
11 </Aluno>
12 </rdf:RDF>
1 <?xml version="1.0"?>
2 <sparql xmlns="http://www.w3.org/2005/sparql-results#">
3 <head>
4 <variable name="p"/>
5 <variable name="o"/>
6 </head>
7 <results>
8 <result>
9 <binding name="p">
10 <uri>http://www.w3.org/1999/02/22-rdf-syntax-ns#type</uri>
11 </binding>
12 <binding name="o">
13
<uri>http://www.unifor.br/serin/universidade.owl#Aluno</uri>
14 </binding>
15 </result>
16 <result>
96
13 <uri>http://www.unifor.br/serin/universidade.owl#Aluno</uri>
14 </binding>
15 </result>
16 <result>
17 <binding name="p">
18 <uri>http://www.unifor.br/serin/universidade.owl#curso</uri>
19 </binding>
20 <binding name="o">
21 <literal>Mestrado em Informática Aplicada</literal>
22 </binding>
23 </result>
24 <result>
25 <binding name="p">
26 <uri>http://www.unifor.br/serin/universidade.owl#nome</uri>
27 </binding>
28 <binding name="o">
29 <literal>Hermano A. Lira</literal>
30 </binding>
31 </result>
32 <result>
33 <binding name="p">
34 <uri>http://www.unifor.br/serin/universidade.owl#CPF</uri>
35 </binding>
36 <binding name="o">
37 <literal>82616973391</literal>
38 </binding>
39 </result>
40 <result>
41 <binding name="p">
42 <uri>http://www.unifor.../universidade.owl#matricula</uri>
43 </binding>
44 <binding name="o">
45 <literal>10001</literal>
46 </binding>
47 </result>
48 <result>
49 <binding name="p">
50 <uri>http://www.unifor.../universidade.owl#anoIngresso</uri>
51 </binding>
52 <binding name="o">
53 <literal>2011</literal>
54 </binding>
55 </result>
56 <result>
57 <binding name="p">
58 <uri>http://www.unifor.br/serin/universidade.owl#turma</uri>
59 </binding>
60 <binding name="o">
61 <literal>13</literal>
62 </binding>
63 </result>
64 </results>
65 </sparql>
1 {
2 "head": {
3 "vars": ["p", "o"]
4 },
5 "results": {
6 "bindings": [
7 {
8 "p": {"type": "uri", "value": "#type"},
9 "o": {"type": "uri", "value": "#Aluno"}
10 },
11 {
12 "p": {"type": "uri", "value": "#curso"},
13 "o": {"type": "typed-literal",
14 "value": "Mestrado Informática Aplicada"}
15 },
16 {
17 "p": {"type": "uri", "value": "#nome"},
18 "o": {"type": "typed-literal",
19 "value": "Hermano A. Lira"}
20 },
21 {
22 "p": {"type": "uri", "value": "#CPF"},
23 "o": {"type": "typed-literal",
24 "value": "82616973391"}
25 },
26 {
27 "p": {"type": "uri", "value": "#matricula"},
28 "o": {"type": "typed-literal", "value": "10001"}
29 },
30 {
31 "p": {"type": "uri", "value": "#anoIngresso"},
32 "o": {"type": "typed-literal", "value": "2011"}
33 },
34 {
35 "p": {"type": "uri", "value": "#turma"},
36 "o": {"type": "typed-literal", "value": "13"}
37 }
38 ]
39 }
40 }
Listagem 34: Retorno JSON da consulta SPARQL para a instância "#Hermano".
1 p, o
2 #type, http://www.unifor.br/serin/universidade.owl#Aluno
3 http://www.unifor.br/serin/universidade.owl#curso, Mestrado em Infor-
4 mática Aplicada
6 http://www.unifor.br/serin/universidade.owl#nome, Hermano A. Lira
7 http://www.unifor.br/serin/universidade.owl#CPF, 82616973391
8 http://www.unifor.br/serin/universidade.owl#matricula, 10001
9 http://www.unifor.br/serin/universidade.owl#anoIngresso, 2011
10 http://www.unifor.br/serin/universidade.owl#turma, 13
Listagem 35: Retorno CSV da consulta SPARQL para a instância "#Hermano".
Os exemplos apresentados nas três listagens acima são equivalentes, todos usam sinta-
xes distintas para expressar a mesma informação. Estruturalmente, todos os exemplos podem
ser representados de forma tabular, como na Tabela 5.
98
p o
http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.unifor.br/serin/universidade.owl#Aluno
http://www.unifor.br/serin/universidade.owl#curso Mestrado em Informática Aplicada
http://www.unifor.br/serin/universidade.owl#nome Hermano A. Lira
http://www.unifor.br/serin/universidade.owl#CPF 82616973391
http://www.unifor.br/serin/universidade.owl#matricula 10001
http://www.unifor.br/serin/universidade.owl#anoIngresso 2011
http://www.unifor.br/serin/universidade.owl#turma 13
DESCRIBE <http://www.unifor.br/serin/universidade.owl#Hermano>
26
http://jena.apache.org/documentation/serving_data/index.html
99
para prover inserção, atualização e remoção de dados. A operação de atualização não possui
um comando UPDATE formalmente definido. Para executar uma atualização de dados, utili-
za-se um comando combinado DELETE/INSERT.
17 . <sd:defaultDataset>
18 <sd:Dataset>
19 <sd:defaultGraph>
20 <sd:Graph>
21 <void:triples>100</void:triples>
22 </sd:Graph>
23 </sd:defaultGraph>
24 <sd:namedGraph>
25 <sd:NamedGraph>
26 <sd:name rdf:resource="http://www.example/named-graph"/>
27 <sd:entailmentRegime
28 rdf:resource="http://www.w3.org/ns/entailment/OWL-RDF-Based"/>
29 <sd:supportedEntailmentProfile
30 rdf:resource="http://www.w3.org/ns/owl-profile/RL"/>
31 <sd:graph>
32 <sd:Graph>
33 <void:triples>2000</void:triples>
34 </sd:Graph>
35 </sd:graph>
36 </sd:NamedGraph>
37 </sd:namedGraph>
38 ...
38 </sd:Dataset>
39 Listagem 36: Documento de descrição de serviço SPARQL.
</sd:defaultDataset>
40 </sd:Service>
41 </rdf:RDF>
A partir dessa análise são discutidos os benefícios da utilização de serviços SDS e es-
tabelecidos os cenários onde esses serviços promovem uma melhoria no acesso a dados inter-
ligados.
As abordagens LIDS, LDP, SPARQL Protocol e SDS, por outro lado, possuem supor-
te ao modelo RDF. No entanto, algumas particularidades entre essas abordagens precisam ser
destacadas. Os serviços LDP, por exemplo, sempre retornam seus dados de acordo com mo-
delo RDF. Em contraste a isso, nos serviços SPARQL a adoção do RDF vai depender do tipo
de consulta executada. Consultas do tipo SELECT e ASK não retornam dados alinhados ao
modelo RDF. No caso do SELECT o retorno da consulta é devolvido em um formato tabular,
chamado SPARQL Result format, onde as colunas da tabela são as variáveis declaradas na
consulta executada (como pode ser visto na Tabela 5). Já a consultas do tipo ASK, sempre
retornam valores booleanos. Assim, esse tipo de consulta nunca retorna informações sobre as
possíveis soluções de uma consulta, apenas diz se existe solução ou não. Somente as consultas
do tipo DESCRIBE e CONSTRUCT retornam dados de acordo com o modelo RDF, e essas
duas consultas são semanticamente equivalentes a uma requisição HTTP GET na abordagem
SDS.
Dentre as abordagens aderentes ao modelo RDF, apenas a SDS define (Seção 3.3.2),
para seus dados, uma granularidade equivalente a de objetos (de acordo com o paradigma da
102
Dentre as abordagens analisadas, apenas a LIDS não possui suporte à escrita. Essa
abordagem diferentemente das outras apresentadas neste trabalho não possui uma base de
dados associada. Os serviços LIDS se propõem exclusivamente a encapsular serviços Web
pré-existentes que não possuam uma representação de dados em RDF. Essa abordagem, por-
tanto, concentra-se apenas em disponibilizar uma visão de serviços meramente sintáticos, co-
mo dados interligados. A adição da estrutura semântica do RDF possibilita uma navegação
facilitada e integrada entre fontes de dados.
Dentre as abordagens com suporte à escrita, a OData, a LDP e a SDS possuem uma
forte aderência ao estilo arquitetural REST. Isso significa que a inserção de uma nova infor-
mação por meio desses serviços se dá pela invocação do comando HTTP POST. De forma
análoga, a atualização acontece por meio do comando HTTP PUT e a deleção via comando
103
HTTP DELETE. A adoção dos princípios REST, por essas abordagens, tem a vantagem de
tornar esses serviços bastante alinhados com a arquitetura da Web. Isso permite aproximar a
Web de dados interligados da Web tradicional (de documentos).
Poder verificar a adequação e a integridade dos dados é fundamental para diversos ce-
nários do mundo real. Assim, muitos modelos de representação de dados possuem mecanis-
mos com essa finalidade. No paradigma da orientação a objetos, por exemplo, é possível ga-
rantir a integridade de um objeto por meio do construtor de sua classe. O construtor impõe
quais atributos do objeto precisam necessariamente estar preenchidos. De maneira semelhan-
te, as restrições de integridade definidas no esquema de um banco de dados relacional garan-
tem que a inserção de uma tupla só será permitida caso todas as colunas necessárias à consis-
tência dessa tupla estejam preenchidas e satisfazendo as regras definidas no esquema. Em
contraste a isso, o modelo RDF não possui nenhum mecanismo para garantir que uma deter-
minada propriedade seja obrigatoriamente (e explicitamente) associada a uma instância RDF.
Sobre essa perspectiva não há como garantir a consistência ou coerência de um conjunto de
triplas RDF dentro de um determinado domínio de conhecimento.
A abordagem SDS permite validar a consistência dos dados inseridos em uma base por
meio de anotações dispostas na interface SERIN que verificam a integridade de dados segun-
104
Enquanto a abordagem SDS estende o modelo RDF para tratar a suposição de mundo
fechado localmente, as abordagens LDP e SPARQL Protocol tratam os dados interligados
exclusivamente de acordo com a suposição de mundo aberto. Essa diferença com relação à
forma como os dados são interpretados, faz consigo uma série de implicações.
Tanto a abordagem LDP quanto a SPARQL permitem que qualquer tripla seja inserida
em suas bases independentemente de qual seja o domínio de conhecimento ao qual essa tripla
pertença. A suposição de mundo aberto não permite estabelecer o escopo de quais dados são
suscetíveis de serem inseridos na base e quais não são. Em razão disso, não há como se esta-
belecer um esquema para a representação do domínio de conhecimento nesses serviços.
Suponha, por exemplo, um host de uma universidade onde sua base é disponibilizada
por meio de um serviço SPARQL. Suponha também que a intenção original de quem criou a
base é que ela mantenha dados relacionados ao cadastro de alunos, suas disciplinas matricula-
das, seu histórico escolar, etc. Na especificação SPARQL 1.1 Protocol nada impediria que
uma aplicação cliente inserisse dados não relacionados com esse domínio de conhecimento.
Um professor fã de futebol, por exemplo, poderia incluir na base o resultado da última rodada
de jogos do campeonato brasileiro — o que evidentemente não estava na intenção original de
quem criou a base — e o servidor SPARQL da universidade iria aceitar esses dados por não
possuir um mecanismo capaz de verificar a adequação dos dados a finalidade pretendida para
a base. Isso acontece por que a intenção de qual domínio de conhecimento deve ser mantido
na base foi definida informalmente. Não existe um esquema em SPARQL que indique quais
dados podem ser inseridos e quais não podem na base em questão. É difícil imaginar na práti-
105
ca uma base de dados com permissão de escrita onde qualquer informação aleatória possa ser
inserida sem nenhum tipo de controle. Uma situação dessas é potencialmente perigosa visto
que não há como garantir a consistência nem a coerência dos dados dentro de um contexto.
A interface da abordagem LIDS, diferentemente das duas anteriores, possui uma ênfa-
se maior na descrição de chamadas de funções. A invocação das funções definidas nessa inter-
face se dá por meio de requisições HTTP GET. Essa abordagem não utiliza os comandos
HTTP POST, PUT ou DELETE, pois não há suporte à escrita de dados. Além disso, ela não
adere aos princípios REST, uma vez que a semântica de uma requisição HTTP GET é defini-
da pela função que está sendo invocada. É importante destacar que todos os dados de retorno
nos serviços LIDS possuem suas classes e propriedades definidas na interface. Assim como
na abordagem SDS, a interface LIDS informa os tipos de dados presentes na base e não é pos-
sível recuperar dados cujas classes e propriedades não estejam definidas nela. Diferentemente
da interface SERIN, a interface LIDS não é abstrata, pois ao definir uma função, a interface
expõe a URL onde o serviço está localizado. Isso impossibilita que a interface seja utilizada
106
por mais de um host. Por exemplo, para a função findNearby a interface expõe o endpoint
http://example.com/geowrapper/findNearby, onde a função pode ser invoca-
da.
dita possuam mecanismos de verificação de integridade que validem os dados a serem persis-
tidos na base. Assim, qualquer tripla pode ser persistida em um serviço SPARQL, mesmo que
tal tripla esteja associada a conceitos inexistentes na interface.
Por último, mas não menos importante, dentre as abordagens analisadas, apenas a
abordagem LDP não possui uma interface descritora de serviço. Contudo, essa abordagem é
também a mais recente. Até a data de conclusão deste trabalho ela ainda era uma especifica-
ção rascunho (draft) sendo trabalhada pelo W3C. Portanto, nada impede que no futuro especi-
fiquem uma interface para ela.
6.8 Sumário
Conclusão
Este capítulo apresenta as conclusões deste trabalho, incluindo suas principais con-
tribuições e propostas para trabalhos futuros.
7.1 Conclusões
Neste trabalho apresentou-se o serviço de dados semânticos (SDS). Tais serviços utili-
zam as interfaces SERIN para descrever quais tipos de dados estão mantidos na base de dados
do host. Essa interface é uma ontologia OWL que descreve as classes, as propriedades e as
relações que existem entre os dados. A interface SERIN também possui anotações que disci-
plinam quais métodos HTTP são utilizados para acessar e manipular os dados.
Definiu-se também neste trabalho, uma arquitetura de software para suportar os servi-
ços SDS. Essa arquitetura é formada por três componentes: o processador de requisições, o
verificador de integridade e o de persistência. Assim, o primeiro componente se responsabili-
za por capturar as requisições HTTP; o segundo por analisar o conteúdo do corpo dessa requi-
sição (com relação a validade ou não dos dados) e o terceiro por prover uma camada de iso-
109
lamento que permite uma comunicação transparente entre o serviço SDS e a base de dados do
host.
Por fim, fez-se um estudo comparativo do SDS com outras abordagens de serviços de
acesso a dados. Na comparação o SDS mostrou-se vantajoso em relação ao OData por possi-
bilitar a manipulação de dados interligados, enquanto o OData limita-se a dados em XML ou
JSON. Com relação à abordagem LIDS, o SDS é vantajoso por permitir a inserção de dados,
enquanto o LIDS limita-se apenas em oferecer a opção de consulta. O LDP, embora bastante
semelhante ao SDS, tem como principal limitação a falta de uma interface que auxilie na des-
crição dos dados mantidos no host. Por último, o serviço SPARQL não possui mecanismo de
verificação de integridade de dados que permitam manipular seus dados oferecendo garantias
de consistência de acordo com a suposição de mundo fechado localmente. Isso inibe o desen-
volvimento de serviços SPARQL com suporte a escrita e voltados para o armazenamento de
dados de um domínio especifico.
Como resultados deste trabalho, espera-se que os serviços SDS facilitem a integração
de dados entre os hosts que aderirem à mesma interface semântica. Espera-se também que o
processo de descoberta, análise, comparação, seleção e utilização dos dados sejam facilitados,
uma vez que os serviços SDS vão publicar interfaces SERIN descrevendo que tipos de dados
eles oferecem. Espera-se que os serviços SDS ajudem a promover as tecnologias da Web se-
mântica, por meio da utilização dos padrões recomendados pelo W3C (i.e. RDF, OWL). Es-
pera-se que os serviços SDS forneçam uma solução para acesso e manipulação de dados que
disponibilize uma camada de abstração que esconda a complexidade do acesso às fontes de
dados subjacentes e por último, espera-se promover o uso de ontologias OWL como interfa-
ces de serviço de dados.
Os serviços de dados semânticos (SDS) possuem algumas limitações que podem ser
abordadas e evoluídas em trabalhos futuros. Neste trabalho não se explorou a construção de
métodos e funções para serem invocadas pelo o serviço, apenas os métodos CRUD (create,
110
retrieve, update e delete) são suportados. Em trabalhos futuros é possível adicionar o suporte
a métodos com parâmetros de entrada e saída mais elaborados.
Este trabalho também não produziu uma solução específica para o controle de acesso e
autenticação de dados interligados. É certo que em muitas aplicações do mundo real é neces-
sário proteger os dados para que não sejam acessados ou modificados por qualquer um. As-
sim, os aspectos relacionados à segurança são tratados em nível do framework RESTEasy por
meio de especificações apropriadas, como por exemplo a OAuth. Contudo, há a possibilidade
de se estudar com mais profundidade e se evoluir esse mecanismo de controle de acesso em
trabalhos futuros.
Por último, os serviços SDS são alinhados ao estilo arquitetural REST e, portanto, uti-
lizam apenas os verbos do protocolo HTTP, e adotam rigorosamente a semântica definida no
próprio documento de especificação do protocolo. Portanto, o SDS não oferece suporte ao
verbo HTTP PATCH. Esse verbo (ou método) não é definido na documentação do protocolo
HTTP, mas em um documento a parte. Contudo, esse verbo oferece uma semântica mais fle-
xível para operações de atualização de dados e seu uso pode ser explorado em mais profundi-
da em trabalhos futuros de evolução do SDS.
Referências Bibliográficas
AUER, S. et al. Use Cases and Requirements for Mapping Relational Databases to RDF.
Disponível em: <http://www.w3.org/TR/rdb2rdf-ucr/>. Acesso em: 18 fev. 2014.
BECKETT, D. et al. RDF 1.1 Turtle - Terse RDF Triple Language. Disponível em:
<http://www.w3.org/TR/turtle/>. Acesso em: 18 fev. 2014.
BERNERS-LEE, T. Weaving the Web: The Original Design and Ultimate Destiny of the
World Wide Web by Its Inventor. [s.l.] Harper San Francisco, 1999. p. 226
BERNERS-LEE, T.; HENDLER, J.; LASSILA, O. The Semantic Web. Scientific American,
v. 284, n. 5, p. 34 – 43, maio 2001.
112
BIZER, C.; HEATH, T.; BERNERS-LEE, T. Linked Data - The Story So Far. International
Journal on Semantic Web and Information Systems (IJSWIS), v. 5, n. 3, p. 1–22, mar.
2009.
BRAY, T. et al. Extensible Markup Language (XML) 1.0 (Fifth Edition). [s.l.] World
Wide Web Consortium, 2008.
CHEN, P. P.-S. The Entity-relationship Model - Toward a Unified View of Data. ACM
Trans. Database Syst., v. 1, n. 1, p. 9–36, 1976.
CLARK, K. L. Negation as Failure (H. Gallaire, J. Minker, Eds.)Logic and Data Bases.
Anais...New York: Plenum Press, 1978
DOHERTY, P.; LUKASZEWICZ, W.; SZALAS, A. Efficient reasoning using the local
closed-world assumptionIN PROC. 9TH AIMSA, LNCS 2407. Anais...2000
ETZIONI, O.; GOLDEN, K.; WELD, D. S. Sound and Efficient Closed-world Reasoning for
Planning. Artif. Intell., v. 89, n. 1-2, p. 113–148, 1997.
GARROTE, A.; GARCÍA, M. N. M. RESTful writable APIs for the web of Linked Data
using relational storage solutionsIn WWW2011 Workshop: Linked Data on the Web
(LDOW2011. Anais...2011
GEARON, P.; PASSANT, A.; POLLERES, A. SPARQL 1.1 Update. Disponível em:
<http://www.w3.org/TR/sparql11-update/>. Acesso em: 18 fev. 2014.
113
HANDL, R.; PIZZO, M.; BIAMONTE, M. OData JSON Format Version 4.0. Disponível
em: <http://docs.oasis-open.org/odata/odata-json-format/v4.0/odata-json-format-v4.0.html>.
Acesso em: 15 mar. 2014.
HEATH, T.; BIZER, C. Linked Data: Evolving the Web into a Global Data Space. [s.l.]
Morgan {&} Claypool Publishers, 2011.
HOLBROOK, S. et al. Submission Request to W3C: Linked Data Basic Profile 1.0.
Disponível em: <http://www.w3.org/Submission/2012/02/>. Acesso em: 19 mar. 2014.
JACOBS, I.; WALSH, N. Architecture of the World Wide Web, Volume One. Disponível
em: <http://www.w3.org/TR/webarch/>. Acesso em: 18 fev. 2014.
KNORR, M.; ALFERES, J. J.; HITZLER, P. Local Closed World Reasoning with
Description Logics Under the Well-founded Semantics. Artif. Intell., v. 175, n. 9-10, p.
1528–1554, 2011.
KRISNADHI, A.; SENGUPTA, K.; HITZLER, P. Local Closed World Semantics : Keep it
simple , stupid! Proceedings of the 24th International Workshop on Description Logics
(DL), 2011.
LANTHALER, M.; GUTL, C. Aligning Web Services with the Semantic Web to Create a
Global Read-Write Graph of DataProceedings of the 2011 IEEE Ninth European
Conference on Web Services. Anais...: ECOWS ’11.Washington, DC, USA: IEEE Computer
Society, 2011aDisponível em: <http://dx.doi.org/10.1109/ECOWS.2011.17>
MOTIK, B.; HORROCKS, I.; SATTLER, U. Bridging the gap between OWL and relational
databases. Proceedings of the 16th international conference on World Wide Web
(WWW’07), WWW ’07. p. 807–816, 2007.
NETO, J. C. C. Active OWL - Uma arquitetura para integrar Serviços Web e Ontologias.
[s.l.] UNIVERSIDADE DE FORTALEZA, 2007.
PAGE, K. R.; DE ROURE, D. C.; MARTINEZ, K. REST and Linked Data: A Match
Made for Domain Driven Development?Proceedings of the Second International Workshop
on RESTful Design. Anais...: WS-REST ’11.New York, NY, USA: ACM, 2011Disponível
em: <http://doi.acm.org/10.1145/1967428.1967435>
PIZZO, M.; HANDL, R.; ZURMUEHL, M. OData Version 4.0 Part 1: Protocol. Disponível
em: <http://docs.oasis-open.org/odata/odata/v4.0/os/part1-protocol/odata-v4.0-os-part1-
protocol.html>. Acesso em: 15 mar. 2014a.
PIZZO, M.; HANDL, R.; ZURMUEHL, M. OData Version 4.0 Part 3: Common Schema
Definition Language (CSDL). Disponível em: <http://docs.oasis-
open.org/odata/odata/v4.0/os/part3-csdl/odata-v4.0-os-part3-csdl.html>. Acesso em: 15 mar.
2014b.
REITER, R. On Closed World Data Bases. In: GALLAIRE, H.; MINKER, J. (Eds.). . Logic
and Data Bases. New York: Plenum Press, 1978. p. 119–140.
115
RICHARDSON, L.; RUBY, S. RESTful web services. First ed. Sebastopol,CA: O’Reilly,
2007.
SEABORNE, A. SPARQL 1.1 Query Results CSV and TSV Formats. Disponível em:
<http://www.w3.org/TR/sparql11-results-csv-tsv/>. Acesso em: 10 maio. 2014b.
SMITH, M.; WELTY, C.; MCGUINNESS, D. L. OWL Web Ontology Language Guide.
Disponível em: <http://www.w3.org/TR/owl-guide/>. Acesso em: 18 fev. 2014.
SPEICHER, S.; ARWE, J.; MALHOTRA, A. Linked Data Platform 1.0. Disponível em:
<http://www.w3.org/TR/ldp/>. Acesso em: 19 mar. 2014.
SPEISER, S.; HARTH, A. Taking the LIDS off data silosProceedings of the 6th
International Conference on Semantic Systems. Anais...: I-SEMANTICS ’10.New York, NY,
USA: ACM, 2010Disponível em: <http://doi.acm.org/10.1145/1839707.1839761>
SPEISER, S.; HARTH, A. Integrating Linked Data and Services with Linked Data
ServicesProceedings of the 8th Extended Semantic Web Conference on The Semantic Web:
Research and Applications - Volume Part I. Anais...: ESWC’11.Berlin, Heidelberg: Springer-
Verlag, 2011Disponível em: <http://dl.acm.org/citation.cfm?id=2008892.2008907>
TAO, J. et al. Integrity Constraints in OWL (M. Fox, D. Poole, Eds.)Proceedings of the
Twenty-Fourth AAAI Conference on Artificial Intelligence (AAAI ). Anais...Atlanta,
Georgia, USA: AAAI Press, 2010a
TAO, J. et al. Extending OWL with Integrity Constraints (V. Haarslev, D. Toman, G. E.
Weddell, Eds.)Proceedings of the 23rd International Workshop on Description Logics (DL).
Anais...Waterloo, Ontario, Canada: CEUR-WS.org, 2010b
WILDE, E.; HAUSENBLAS, M. RESTful SPARQL? You name it!: aligning SPARQL
with REST and resource orientationNew York, {NY}, {USA}: ACM, 2009
ZURMUEHL, M.; PIZZO, M.; HANDL, R. OData Atom Format Version 4.0. Disponível
em: <http://docs.oasis-open.org/odata/odata-atom-format/v4.0/odata-atom-format-v4.0.html>.
Acesso em: 15 mar. 2014.
117
Publicações
LIRA, H. A. et al. Semantic data services: An approach to access and manipulate Linked
Data. In: Computing Conference (CLEI), 2014 XL Latin American. Anais... 2014. p. 717-
730.
LIRA, H. A.; FARIAS, P. P. M. Semantic Data Services: Uma abordagem para leitura e
atualização de dados semânticos. In: XIX Simpósio Brasileiro de Sistemas Multimídia e
Web. Anais... Salvador, 2013. p. 33-36.
MUNIZ, B. A.; LIRA, H. A. et al. SERIN: An Aproach to Specify Semantic Abstract In-
terfaces in the Context of RESTFul Web Services. In: Proceedings of the IADIS Interna-
tional Conference on WWW/Internet. Anais... Fort Worth, USA: IADIS Press, 2013