arquitetura técnica referencial para abertura de dados · usamos o termo piloto para esclarecermos...

29
1/29 Ministério do Planejamento, Orçamento e Gestão Secretaria de Logística e Tecnologia da Informação Arquitetura Técnica Referencial para Abertura de Dados Piloto de Dados Abertos SICAF Departamento de Integração de Sistemas e Informação 2011 Brasília, Dezembro de 2011 versão 1.0

Upload: others

Post on 11-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

129

Ministeacuterio do Planejamento Orccedilamento e Gestatildeo

Secretaria de Logiacutestica e Tecnologia da Informaccedilatildeo

Arquitetura Teacutecnica Referencial para Abertura de Dados

Piloto de Dados Abertos SICAF

Departamento de Integraccedilatildeo

de Sistemas e Informaccedilatildeo

2011

Brasiacutelia Dezembro de 2011 versatildeo 10

229

Sumaacuterio

1 Introduccedilatildeo 4

11 Objetivo do documento 4

12 Objetivo do projeto piloto 4

13 Realizaccedilatildeo 4

14 Escopo do projeto 5

15 O SICAF em produccedilatildeo (Serpro) 5

2 Metodologia de desenvolvimento 6

21 Recursos 6

22 Desenvolvimento Aacutegil 6

23 Gestatildeo do processo de abertura 7

24 Licenccedila dos dados 7

25 Definiccedilatildeo da Interface de dados 8

26 Documentaccedilatildeo 9

27 Construccedilatildeo de metadados (RDF) 9

28 Sequecircncia de desenvolvimento 9

1 [O que deveria estar aqui] 9

3 O Sistema 10

31 Arquitetura do sistema 10

32 Estrutura de persistecircncia dos dados (MER) 11

33 Moacutedulos 12

34 Tecnologias e frameworks 19

35 Padrotildees 23

4 Case - Painel de recadastramento de fornecedores no SICAF 27

41 Tecnologias do Mashup 28

42 Recursos ndash 25h 29

5 Consideraccedilotildees finais 30

51 Onde estaacute o coacutedigo fonte 30

52 Licenccedila de uso 30

53 Grupo consultor em Dados Abertos do SISP ndash C3S 30

329

Histoacuterico de Alteraccedilotildees

Data Versatildeo Histoacuterico Responsaacutevel(is)

10082011 01 Versatildeo inicial

Nitai Silva Augusto Herrmann e Christian Miranda - SLTI Time de Dados Abertos

429

1 Introduccedilatildeo

11 Objetivo do documento

A Secretaria de Logiacutestica e Tecnologia da Informaccedilatildeo do Ministeacuterio do Planejamento ndash SLTI

tem dentro de suas atribuiccedilotildees a competecircncia de planejar coordenar supervisionar e orientar

normativamente as atividades do Sistema de Administraccedilatildeo de Recursos de Informaccedilatildeo e Informaacutetica

ndash SISP propondo poliacuteticas e diretrizes de Tecnologia da Informaccedilatildeo no acircmbito da Administraccedilatildeo

Puacuteblica Federal direta autaacuterquica e fundacional

Este documento tem por objetivo servir como referecircncia para implementaccedilatildeo de soluccedilotildees

para disponibilizaccedilatildeo de dados na Internet seguindo os princiacutepios de dados abertos

Em marccedilo de 2011 a SLTI realizou a implementaccedilatildeo de um projeto piloto de Dados Abertos

com os dados do Sistema de Cadastramento Unificado de Fornecedores ndash SICAF Este documento

fornece detalhes teacutecnicos quanto ao desenvolvimento da aplicaccedilatildeo Resumidamente satildeo respondidos

questionamentos sobre a metodologia de desenvolvimento utilizada e o processo de abertura numa

visatildeo de gerecircncia de projeto

O conjunto de ferramentas e bibliotecas utilizadas no projeto constitui uma soluccedilatildeo derivada

das tecnologias escolhidas no iniacutecio poreacutem eacute fundamental esclarecer que outras combinaccedilotildees de

linguagens e bibliotecas podem proporcionar o mesmo ou melhor resultado Portanto o caraacuteter

arquitetural ou seja padrotildees de projetos padrotildees e formatos interoperaacuteveis e as boas praacuteticas de

desenvolvimento tecircm maior valor orientativo para as faacutebricas de software que desejam implementar

soluccedilotildees semelhantes de abertura de dados Utilize este documento como referecircncia para sua soluccedilatildeo

de abertura de dados Eacute importante salientar que o conceito de dados abertos estaacute fundamentado em

princiacutepios simples e que para certos casos dados estaacuteticos por exemplo uma soluccedilatildeo bem mais

simplificada pode alcanccedilar um oacutetimo niacutevel de qualidade

Entendemos que dados abertos natildeo eacute apenas transparecircncia e controle dos gastos puacuteblicos mas

tambeacutem uma plataforma onde a sociedade desenvolve e compartilha serviccedilos Queremos fugir do

usual aguardamos o retorno da sociedade e temos a certeza que seremos surpreendidos

12 Objetivo do projeto piloto

A escolha de abrir os dados do SICAF se deve a dois motivos primeiramente eacute dever do

Ministeacuterio do Planejamento dar o exemplo e implementar dados abertos em seus sistemas o SICAF

eacute gerido pela Diretoria de Logiacutestica e Serviccedilos Gerais - DLSG que tambeacutem faz parte da SLTI

Segundo enxergamos que o cadastro de fornecedores eacute um conjunto muito rico de dados e queremos

potencializar seu uso e agregar mais valor disponibilizando-o para sociedade

A aplicaccedilatildeo eacute RESTful ou seja constitui uma API disponiacutevel na Internet para acesso aos dados

em vaacuterios formatos abertos atraveacutes de requisiccedilotildees HTTP seguindo os princiacutepios REST Usamos o termo piloto para esclarecermos que eacute um projeto experimental no sentido de que estamos

testando as tecnologias desenhando processos acumulando boas praacuteticas ou seja estamos aprendendo como abrir

dados Toda essa experiecircncia fundamenta vaacuterias de nossas decisotildees na Infraestrutura Nacional de Dados Abertos

(INDA)

13 Realizaccedilatildeo

O desenvolvimento do presente projeto foi realizado pela SLTI A gestatildeo do projeto e a

implementaccedilatildeo da aplicaccedilatildeo foi feita pelo Time de Dados Abertos do Departamento de Integraccedilatildeo de

Sistemas e Informaccedilatildeo (DSI) A logiacutestica para acesso aos dados em produccedilatildeo e o entendimento

aprofundado sobre os conceitos em torno do SICAF foram possibilitados pelo Departamento de

Logiacutestica e Serviccedilos Gerais o qual eacute responsaacutevel pelo SICAF

529

14 Escopo do projeto

Numa perspectiva de dados abertos o escopo se resume agrave disponibilizaccedilatildeo dos dados puacuteblicos

do SICAF na Internet sob uma licenccedila pertinente Dos vaacuterios tipos de dados que constituem o SICAF

definiu-se dois conjuntos mais importantes dados das Unidades Cadastradoras e dados dos

Fornecedores Dados geograacuteficos relacionados a esses dois conjuntos tambeacutem foram

disponibilizados

No caraacuteter teacutecnico os dados estatildeo disponiacuteveis na Internet seguindo os princiacutepios da

Representational State Transfer - REST ou seja documentos em hipermiacutedia acessiacuteveis atraveacutes de

requisiccedilotildees HTTP A arquitetura possibilita a combinaccedilatildeo de diversos filtros nas requisiccedilotildees e a

serializaccedilatildeo em vaacuterios formatos A serializaccedilatildeo eacute feita em tempo real pois os dados satildeo atualizados

com boa frequecircncia Primando pela qualidade maacutexima de abertura de dados foi definido um rascunho

de vocabulaacuterio ou ontologia miacutenima cobrindo os principais conceitos do SICAF

A tiacutetulo de exemplificaccedilatildeo tambeacutem foi desenvolvida uma aplicaccedilatildeo (mashup) fazendo uso

dos dados disponibilizados pela aplicaccedilatildeo

141 O SICAF em produccedilatildeo (Serpro)

O SICAF assim como outros subsistemas do Comprasnet eacute desenvolvido e mantido pelo

Serpro No capiacutetulo 3 eacute apresentada a arquitetura do sistema desenvolvido neste projeto claramente

eacute perceptiacutevel a integraccedilatildeo com a aplicaccedilatildeo em produccedilatildeo a niacutevel de banco de dados O aplicaccedilatildeo de

produccedilatildeo do SICAF utiliza uma base de dados PostgreSQL

O SICAF sofreu diversas melhorias no iniacutecio de 2011 O processo de cadastramento e

habilitaccedilatildeo de fornecedores foi simplificado e faz maior uso dos meios eletrocircnicos O sistema pode

ser acessado atraveacutes da URL httpswww3comprasnetgovbrSICAFWeb

629

2 Metodologia de desenvolvimento

21 Recursos

A SLTI possui um time dedicado ao desenvolvimento de accedilotildees focadas em Dados Abertos

que foi responsaacutevel pela gestatildeo e execuccedilatildeo deste projeto Com caraacuteter experimental um dos

principais objetivos para realizaccedilatildeo deste projeto foi absorver e relatar o aprendizado no

desenvolvimento do piloto Para isso o desenvolvimento foi todo realizado nas dependecircncias do

Ministeacuterio do Planejamento

A infraestrutura para o desenvolvimento e manutenccedilatildeo atual da ferramenta eacute uma instacircncia do

servidor virtualizado no Labcluster como parte integrante do projeto Software Puacuteblico Todos os

componentes utilizados satildeo softwares livres O sucesso do projeto confirma o potencial de

desenvolvimento de soluccedilotildees de dados abertos utilizando estritamente software livre

22 Desenvolvimento Aacutegil

O conjunto de requisitos e tecnologias envolvidas caracteriza o projeto como ambicioso e

inovador Juntando um cronograma com prazos apertados agrave falta de modelos especiacuteficos de

implementaccedilatildeo de dados abertos decidimos fazer uso de uma metodologia adequada afim de

minimizar o risco e maximizar o valor agregado ao software decidimos utilizar SCRUM A Ilustraccedilatildeo

1 resume as etapas da utilizaccedilatildeo de SCRUM

Um dos princiacutepios norteadores da metodologia aacutegil eacute a de que o cliente faz parte do time ele

estaacute comprometido com o sucesso do projeto o que demanda fortes interaccedilotildees em ciclos curtos No

paradigma de dados abertos a plataforma de dados provida pelo governo eacute para uso da sociedade

mas defendemos que o proacuteprio governo deve fazer uso desses dados enxergando esta como uma

plataforma de interoperabilidade intragoverno Nesse sentido gestores do Departamento de Logiacutestica

e Serviccedilos Gerais ndash DLSG ndash participaram intensamente no refinamento da aplicaccedilatildeo de acordo com

as cobranccedilas por dados percebidas

Eacute importante pontuar que a configuraccedilatildeo destes recursos com a metodologia aacutegil possibilitou

o desenvolvimento e implantaccedilatildeo da aplicaccedilatildeo em pouco mais de 2 meses

Ilustraccedilatildeo 1

Iteraccedilotildees e produtos no desenvolvimento aacutegil SCRUM

729

23 Gestatildeo do processo de abertura

Apesar de natildeo ser objetivo principal do projeto piloto eacute atribuiccedilatildeo fundamental da SLTI

orientar e apoiar os oacutergatildeos do SISP na gestatildeo com caraacuteter estrateacutegico do processo de abertura dos

dados

Um dos primeiros produtos desenvolvidos pelo time de dados abertos da SLTI foi um Guia

de Abertura de Dados o qual estaacute em consulta puacuteblica no portal de Governo Eletrocircnico

[httpswwwconsultasgovernoeletronicogovbrConsultasPublicasconsultasdoacao=exibirampid=9

3] O guia eacute um manual destinado aos gestores que querem iniciar o processo de abertura de dados

em suas instituiccedilotildees Nele satildeo elencados diversos atores envolvidos no processo de abertura desde o

responsaacutevel maacuteximo da instituiccedilatildeo o qual tem poder de autorizaccedilatildeo legal de abertura dos dados ateacute

o envolvimento com a sociedade considerado no paradigma de dados abertos o principal beneficiado

O manual tambeacutem define um macroprocesso para orquestraccedilatildeo da abertura sempre focando no que

eacute mais importante e agregador ao objetivo Tambeacutem satildeo citadas etapas importantes como processo de

anonimizaccedilatildeo e de classificaccedilatildeo das informaccedilotildees

O manual passou por um processo de amadurecimento com o objetivo de aprofundar os

detalhes de planejamento e operacionalizaccedilatildeo da abertura de dados fornecendo orientaccedilatildeo para que

as aacutereas de TI nos oacutergatildeos possam promover essa accedilatildeo como estrateacutegica em suas instituiccedilotildees Quando

do encaminhamento para consulta puacuteblica em 1ordm de setembro de 2011 ele passou a se chamar Guia

de Abertura de Dados

O Guia de Abertura de Dados eacute um produto previsto do GT1 da INDA Para aqueles que

necessitam de apoio e orientaccedilatildeo mais dedicada o time de dados abertos da SLTI pode ser solicitada

pelo endereccedilo httpc3ssispgovbr ou pelo e-mail sispplanejamentogovbr

24 Licenccedila dos dados

O projeto busca um alinhamento com todos os princiacutepios de dados abertos onde um deles

sugere que o dado deve ser livre de regulaccedilatildeo patente marca e tudo que restrinja seu reuso

Reconhecemos que ainda natildeo foram desenvolvidas licenccedilas especiacuteficas de dados abertos ideais

adaptadas ao contexto do governo brasileiro Dessa forma decidimos utilizar as Licenccedilas de Banco

de Dados Aberto (ODbL) e de Conteuacutedo de Banco de Dados Aberto (DbCL) Essas satildeo licenccedilas

livres escritas especificamente para dados Nessa direccedilatildeo dentro da Infraestrutura Nacional de Dados

Abertos que estaacute sendo construiacuteda estaacute prevista a implementaccedilatildeo de uma licenccedila de dados abertos

governamentais brasileira

A ODbL eacute uma licenccedila aberta segundo os criteacuterios da definiccedilatildeo de conhecimento aberto -

httpopendefinitionorg Isto eacute importante para garantir a interoperabilidade de licenccedilas com outros

dados abertos quando o usuaacuterio dos dados seja a sociedade ou o proacuteprio governo for fazer

cruzamento entre esses dados e outros

Bases de dados e bancos de dados tecircm algumas caracteriacutesticas especiacuteficas que as diferenciam

de conteuacutedo e por isso eacute necessaacuterio utilizar licenccedilas que satildeo especiacuteficas para utilizaccedilatildeo em bases de

dados Assim como haacute alguns anos considerando as diferenccedilas de caracteriacutesticas entre software e

conteuacutedo desenvolveu-se a licenccedila Creative Commons especificamente para licenciar conteuacutedo de

forma livre (considerando-se o sentido de livre em espiacuterito semelhante ao que a licenccedila GPL faz

para tornar o software livre)

A DBCL foi utilizada para o conteuacutedo dos dados pois segundo o OpenDataCommons FAQ

[2] direitos diferentes podem ser aplicaacuteveis agrave baseconjunto de dados como um todo e ao conteuacutedo

dos dados (Trecho da nossa reportagem para Wireless Mundi)

829

25 Definiccedilatildeo da Interface de dados

O principal objetivo do projeto eacute disponibilizar o acesso aos dados atraveacutes da Internet Isso

fica muito claro ao analisar a arquitetura da aplicaccedilatildeo no Capiacutetulo 3 onde a camada superior eacute uma

interface programaacutevel de acesso agrave dados abertos Essa caracteriacutestica inerente agraves arquiteturas de

softwares baseados na nuvem provoca um desenvolvimento orientado agrave dados mais conhecido como

Data Driven Development (DDA) Em outras palavras os recursos disponiacuteveis na interface de dados

foram desenhados pensando-se nas dependecircncias de dados na perspectiva de quem iraacute consumir os

dados

Os meacutetodos para acesso aos dados estatildeo distribuiacutedos em 3 grupos como na Ilustraccedilatildeo 2 O

grupo principal eacute o Consulta ao Cadastro onde eacute possiacutevel combinar filtros e acessar dados das

Unidades Cadastradoras e dados dos Fornecedores O grupo de Informaccedilotildees Baacutesicas possui meacutetodos

para consulta dos dados necessaacuterios para possibilitar a construccedilatildeo dos filtros nas Consultas ao

Cadastro Por exemplo nas informaccedilotildees baacutesicas estatildeo os coacutedigos para filtrar os fornecedores de um

municiacutepio especiacutefico ou de uma linha de fornecimento especiacutefica No grupo de Informaccedilotildees

Detalhadas do Fornecedor da Unidade Cadastradora ou de Municiacutepio

Os detalhes de cada meacutetodo como os campos de retorno foram definidos de acordo com o

propoacutesito do meacutetodo Vaacuterios dados de Fornecedor soacute podem ser acessados pelo meacutetodo no grupo de

Informaccedilotildees Detalhadas assim nas Consultas ao Cadastro estatildeo apenas dados baacutesicos reduzindo-se

o tamanho dos arquivos transmitidos A diversidade de formatos para cada consulta possibilita que o

usuaacuterio utilize o de menor tamanho o mais expressivo semanticamente ou o que se adapta melhor ao

seu sistema Todos os meacutetodos disponiacuteveis estatildeo listados na URL

httpapicomprasnetgovbrsicafdocmetodoshtml

26 Documentaccedilatildeo

Uma documentaccedilatildeo de qualidade e completa eacute extremamente importante Eacute na documentaccedilatildeo

Ilustraccedilatildeo 2 Documentaccedilatildeo da API listando todos os meacutetodos disponiacuteveis para consulta

929

que o usuaacuterio da API encontraraacute os detalhes teacutecnicos sobre os meios possiacuteveis de acessarem os dados

Mais detalhes garantem maior adesatildeo agrave plataforma de dados Na documentaccedilatildeo eacute preciso que se

esclareccedila toda e qualquer informaccedilatildeo que possa influenciar a implementaccedilatildeo da soluccedilatildeo que faraacute uso

dos dados Sugerimos que a documentaccedilatildeo forneccedila detalhes sobre

bull Lista de meacutetodos recursos tipos ou classes dos grupos de dados

bull Descriccedilatildeo textual esclarecendo o significado de cada meacutetodo recurso tipo ou classe de dados

bull Lista de campos que compotildee o resultado de consulta de cada meacutetodo recurso tipo ou classe

de dado

bull Lista de paracircmetros e valores se houver que possibilitam realizar filtros sobre o meacutetodo

recurso tipo ou classe de dados

bull Lista dos diferentes formatos para acesso aos dados

bull Informaccedilotildees sobre frequecircncia de atualizaccedilatildeo dos dados

bull Exemplo de consulta para cada meacutetodo recurso tipo ou classe de dados

bull Licenccedila se houver sob a qual os dados estatildeo publicados

A documentaccedilatildeo da API do SICAF estaacute disponiacutevel em httpapicomprasnetgovbrsicafdoc

trazendo informaccedilotildees gerais da plataforma Para cada meacutetodo ou recurso da API existe uma

documentaccedilatildeo especiacutefica por exemplo em httpapicomprasnetgovbrsicafdocfornecedoreshtml

27 Construccedilatildeo de metadados (RDF)

Foram realizadas uma seacuterie de reuniotildees com pessoas ligadas agrave aacuterea de negoacutecio correspondente

na DLSG nas quais foram coletadas informaccedilotildees que nos levaram a esboccedilar um vocabulaacuterio miacutenimo

para o SICAF que representasse os dados que seriam disponibilizados Nesse processo foi tomado o

cuidado de ligar as classes e propriedades modeladas a outros conceitos externos definidos em

vocabulaacuterios amplamente utilizados na comunidade internacional da web semacircntica

28 Sequecircncia de desenvolvimento

[O que deveria estar aqui]

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 2: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

229

Sumaacuterio

1 Introduccedilatildeo 4

11 Objetivo do documento 4

12 Objetivo do projeto piloto 4

13 Realizaccedilatildeo 4

14 Escopo do projeto 5

15 O SICAF em produccedilatildeo (Serpro) 5

2 Metodologia de desenvolvimento 6

21 Recursos 6

22 Desenvolvimento Aacutegil 6

23 Gestatildeo do processo de abertura 7

24 Licenccedila dos dados 7

25 Definiccedilatildeo da Interface de dados 8

26 Documentaccedilatildeo 9

27 Construccedilatildeo de metadados (RDF) 9

28 Sequecircncia de desenvolvimento 9

1 [O que deveria estar aqui] 9

3 O Sistema 10

31 Arquitetura do sistema 10

32 Estrutura de persistecircncia dos dados (MER) 11

33 Moacutedulos 12

34 Tecnologias e frameworks 19

35 Padrotildees 23

4 Case - Painel de recadastramento de fornecedores no SICAF 27

41 Tecnologias do Mashup 28

42 Recursos ndash 25h 29

5 Consideraccedilotildees finais 30

51 Onde estaacute o coacutedigo fonte 30

52 Licenccedila de uso 30

53 Grupo consultor em Dados Abertos do SISP ndash C3S 30

329

Histoacuterico de Alteraccedilotildees

Data Versatildeo Histoacuterico Responsaacutevel(is)

10082011 01 Versatildeo inicial

Nitai Silva Augusto Herrmann e Christian Miranda - SLTI Time de Dados Abertos

429

1 Introduccedilatildeo

11 Objetivo do documento

A Secretaria de Logiacutestica e Tecnologia da Informaccedilatildeo do Ministeacuterio do Planejamento ndash SLTI

tem dentro de suas atribuiccedilotildees a competecircncia de planejar coordenar supervisionar e orientar

normativamente as atividades do Sistema de Administraccedilatildeo de Recursos de Informaccedilatildeo e Informaacutetica

ndash SISP propondo poliacuteticas e diretrizes de Tecnologia da Informaccedilatildeo no acircmbito da Administraccedilatildeo

Puacuteblica Federal direta autaacuterquica e fundacional

Este documento tem por objetivo servir como referecircncia para implementaccedilatildeo de soluccedilotildees

para disponibilizaccedilatildeo de dados na Internet seguindo os princiacutepios de dados abertos

Em marccedilo de 2011 a SLTI realizou a implementaccedilatildeo de um projeto piloto de Dados Abertos

com os dados do Sistema de Cadastramento Unificado de Fornecedores ndash SICAF Este documento

fornece detalhes teacutecnicos quanto ao desenvolvimento da aplicaccedilatildeo Resumidamente satildeo respondidos

questionamentos sobre a metodologia de desenvolvimento utilizada e o processo de abertura numa

visatildeo de gerecircncia de projeto

O conjunto de ferramentas e bibliotecas utilizadas no projeto constitui uma soluccedilatildeo derivada

das tecnologias escolhidas no iniacutecio poreacutem eacute fundamental esclarecer que outras combinaccedilotildees de

linguagens e bibliotecas podem proporcionar o mesmo ou melhor resultado Portanto o caraacuteter

arquitetural ou seja padrotildees de projetos padrotildees e formatos interoperaacuteveis e as boas praacuteticas de

desenvolvimento tecircm maior valor orientativo para as faacutebricas de software que desejam implementar

soluccedilotildees semelhantes de abertura de dados Utilize este documento como referecircncia para sua soluccedilatildeo

de abertura de dados Eacute importante salientar que o conceito de dados abertos estaacute fundamentado em

princiacutepios simples e que para certos casos dados estaacuteticos por exemplo uma soluccedilatildeo bem mais

simplificada pode alcanccedilar um oacutetimo niacutevel de qualidade

Entendemos que dados abertos natildeo eacute apenas transparecircncia e controle dos gastos puacuteblicos mas

tambeacutem uma plataforma onde a sociedade desenvolve e compartilha serviccedilos Queremos fugir do

usual aguardamos o retorno da sociedade e temos a certeza que seremos surpreendidos

12 Objetivo do projeto piloto

A escolha de abrir os dados do SICAF se deve a dois motivos primeiramente eacute dever do

Ministeacuterio do Planejamento dar o exemplo e implementar dados abertos em seus sistemas o SICAF

eacute gerido pela Diretoria de Logiacutestica e Serviccedilos Gerais - DLSG que tambeacutem faz parte da SLTI

Segundo enxergamos que o cadastro de fornecedores eacute um conjunto muito rico de dados e queremos

potencializar seu uso e agregar mais valor disponibilizando-o para sociedade

A aplicaccedilatildeo eacute RESTful ou seja constitui uma API disponiacutevel na Internet para acesso aos dados

em vaacuterios formatos abertos atraveacutes de requisiccedilotildees HTTP seguindo os princiacutepios REST Usamos o termo piloto para esclarecermos que eacute um projeto experimental no sentido de que estamos

testando as tecnologias desenhando processos acumulando boas praacuteticas ou seja estamos aprendendo como abrir

dados Toda essa experiecircncia fundamenta vaacuterias de nossas decisotildees na Infraestrutura Nacional de Dados Abertos

(INDA)

13 Realizaccedilatildeo

O desenvolvimento do presente projeto foi realizado pela SLTI A gestatildeo do projeto e a

implementaccedilatildeo da aplicaccedilatildeo foi feita pelo Time de Dados Abertos do Departamento de Integraccedilatildeo de

Sistemas e Informaccedilatildeo (DSI) A logiacutestica para acesso aos dados em produccedilatildeo e o entendimento

aprofundado sobre os conceitos em torno do SICAF foram possibilitados pelo Departamento de

Logiacutestica e Serviccedilos Gerais o qual eacute responsaacutevel pelo SICAF

529

14 Escopo do projeto

Numa perspectiva de dados abertos o escopo se resume agrave disponibilizaccedilatildeo dos dados puacuteblicos

do SICAF na Internet sob uma licenccedila pertinente Dos vaacuterios tipos de dados que constituem o SICAF

definiu-se dois conjuntos mais importantes dados das Unidades Cadastradoras e dados dos

Fornecedores Dados geograacuteficos relacionados a esses dois conjuntos tambeacutem foram

disponibilizados

No caraacuteter teacutecnico os dados estatildeo disponiacuteveis na Internet seguindo os princiacutepios da

Representational State Transfer - REST ou seja documentos em hipermiacutedia acessiacuteveis atraveacutes de

requisiccedilotildees HTTP A arquitetura possibilita a combinaccedilatildeo de diversos filtros nas requisiccedilotildees e a

serializaccedilatildeo em vaacuterios formatos A serializaccedilatildeo eacute feita em tempo real pois os dados satildeo atualizados

com boa frequecircncia Primando pela qualidade maacutexima de abertura de dados foi definido um rascunho

de vocabulaacuterio ou ontologia miacutenima cobrindo os principais conceitos do SICAF

A tiacutetulo de exemplificaccedilatildeo tambeacutem foi desenvolvida uma aplicaccedilatildeo (mashup) fazendo uso

dos dados disponibilizados pela aplicaccedilatildeo

141 O SICAF em produccedilatildeo (Serpro)

O SICAF assim como outros subsistemas do Comprasnet eacute desenvolvido e mantido pelo

Serpro No capiacutetulo 3 eacute apresentada a arquitetura do sistema desenvolvido neste projeto claramente

eacute perceptiacutevel a integraccedilatildeo com a aplicaccedilatildeo em produccedilatildeo a niacutevel de banco de dados O aplicaccedilatildeo de

produccedilatildeo do SICAF utiliza uma base de dados PostgreSQL

O SICAF sofreu diversas melhorias no iniacutecio de 2011 O processo de cadastramento e

habilitaccedilatildeo de fornecedores foi simplificado e faz maior uso dos meios eletrocircnicos O sistema pode

ser acessado atraveacutes da URL httpswww3comprasnetgovbrSICAFWeb

629

2 Metodologia de desenvolvimento

21 Recursos

A SLTI possui um time dedicado ao desenvolvimento de accedilotildees focadas em Dados Abertos

que foi responsaacutevel pela gestatildeo e execuccedilatildeo deste projeto Com caraacuteter experimental um dos

principais objetivos para realizaccedilatildeo deste projeto foi absorver e relatar o aprendizado no

desenvolvimento do piloto Para isso o desenvolvimento foi todo realizado nas dependecircncias do

Ministeacuterio do Planejamento

A infraestrutura para o desenvolvimento e manutenccedilatildeo atual da ferramenta eacute uma instacircncia do

servidor virtualizado no Labcluster como parte integrante do projeto Software Puacuteblico Todos os

componentes utilizados satildeo softwares livres O sucesso do projeto confirma o potencial de

desenvolvimento de soluccedilotildees de dados abertos utilizando estritamente software livre

22 Desenvolvimento Aacutegil

O conjunto de requisitos e tecnologias envolvidas caracteriza o projeto como ambicioso e

inovador Juntando um cronograma com prazos apertados agrave falta de modelos especiacuteficos de

implementaccedilatildeo de dados abertos decidimos fazer uso de uma metodologia adequada afim de

minimizar o risco e maximizar o valor agregado ao software decidimos utilizar SCRUM A Ilustraccedilatildeo

1 resume as etapas da utilizaccedilatildeo de SCRUM

Um dos princiacutepios norteadores da metodologia aacutegil eacute a de que o cliente faz parte do time ele

estaacute comprometido com o sucesso do projeto o que demanda fortes interaccedilotildees em ciclos curtos No

paradigma de dados abertos a plataforma de dados provida pelo governo eacute para uso da sociedade

mas defendemos que o proacuteprio governo deve fazer uso desses dados enxergando esta como uma

plataforma de interoperabilidade intragoverno Nesse sentido gestores do Departamento de Logiacutestica

e Serviccedilos Gerais ndash DLSG ndash participaram intensamente no refinamento da aplicaccedilatildeo de acordo com

as cobranccedilas por dados percebidas

Eacute importante pontuar que a configuraccedilatildeo destes recursos com a metodologia aacutegil possibilitou

o desenvolvimento e implantaccedilatildeo da aplicaccedilatildeo em pouco mais de 2 meses

Ilustraccedilatildeo 1

Iteraccedilotildees e produtos no desenvolvimento aacutegil SCRUM

729

23 Gestatildeo do processo de abertura

Apesar de natildeo ser objetivo principal do projeto piloto eacute atribuiccedilatildeo fundamental da SLTI

orientar e apoiar os oacutergatildeos do SISP na gestatildeo com caraacuteter estrateacutegico do processo de abertura dos

dados

Um dos primeiros produtos desenvolvidos pelo time de dados abertos da SLTI foi um Guia

de Abertura de Dados o qual estaacute em consulta puacuteblica no portal de Governo Eletrocircnico

[httpswwwconsultasgovernoeletronicogovbrConsultasPublicasconsultasdoacao=exibirampid=9

3] O guia eacute um manual destinado aos gestores que querem iniciar o processo de abertura de dados

em suas instituiccedilotildees Nele satildeo elencados diversos atores envolvidos no processo de abertura desde o

responsaacutevel maacuteximo da instituiccedilatildeo o qual tem poder de autorizaccedilatildeo legal de abertura dos dados ateacute

o envolvimento com a sociedade considerado no paradigma de dados abertos o principal beneficiado

O manual tambeacutem define um macroprocesso para orquestraccedilatildeo da abertura sempre focando no que

eacute mais importante e agregador ao objetivo Tambeacutem satildeo citadas etapas importantes como processo de

anonimizaccedilatildeo e de classificaccedilatildeo das informaccedilotildees

O manual passou por um processo de amadurecimento com o objetivo de aprofundar os

detalhes de planejamento e operacionalizaccedilatildeo da abertura de dados fornecendo orientaccedilatildeo para que

as aacutereas de TI nos oacutergatildeos possam promover essa accedilatildeo como estrateacutegica em suas instituiccedilotildees Quando

do encaminhamento para consulta puacuteblica em 1ordm de setembro de 2011 ele passou a se chamar Guia

de Abertura de Dados

O Guia de Abertura de Dados eacute um produto previsto do GT1 da INDA Para aqueles que

necessitam de apoio e orientaccedilatildeo mais dedicada o time de dados abertos da SLTI pode ser solicitada

pelo endereccedilo httpc3ssispgovbr ou pelo e-mail sispplanejamentogovbr

24 Licenccedila dos dados

O projeto busca um alinhamento com todos os princiacutepios de dados abertos onde um deles

sugere que o dado deve ser livre de regulaccedilatildeo patente marca e tudo que restrinja seu reuso

Reconhecemos que ainda natildeo foram desenvolvidas licenccedilas especiacuteficas de dados abertos ideais

adaptadas ao contexto do governo brasileiro Dessa forma decidimos utilizar as Licenccedilas de Banco

de Dados Aberto (ODbL) e de Conteuacutedo de Banco de Dados Aberto (DbCL) Essas satildeo licenccedilas

livres escritas especificamente para dados Nessa direccedilatildeo dentro da Infraestrutura Nacional de Dados

Abertos que estaacute sendo construiacuteda estaacute prevista a implementaccedilatildeo de uma licenccedila de dados abertos

governamentais brasileira

A ODbL eacute uma licenccedila aberta segundo os criteacuterios da definiccedilatildeo de conhecimento aberto -

httpopendefinitionorg Isto eacute importante para garantir a interoperabilidade de licenccedilas com outros

dados abertos quando o usuaacuterio dos dados seja a sociedade ou o proacuteprio governo for fazer

cruzamento entre esses dados e outros

Bases de dados e bancos de dados tecircm algumas caracteriacutesticas especiacuteficas que as diferenciam

de conteuacutedo e por isso eacute necessaacuterio utilizar licenccedilas que satildeo especiacuteficas para utilizaccedilatildeo em bases de

dados Assim como haacute alguns anos considerando as diferenccedilas de caracteriacutesticas entre software e

conteuacutedo desenvolveu-se a licenccedila Creative Commons especificamente para licenciar conteuacutedo de

forma livre (considerando-se o sentido de livre em espiacuterito semelhante ao que a licenccedila GPL faz

para tornar o software livre)

A DBCL foi utilizada para o conteuacutedo dos dados pois segundo o OpenDataCommons FAQ

[2] direitos diferentes podem ser aplicaacuteveis agrave baseconjunto de dados como um todo e ao conteuacutedo

dos dados (Trecho da nossa reportagem para Wireless Mundi)

829

25 Definiccedilatildeo da Interface de dados

O principal objetivo do projeto eacute disponibilizar o acesso aos dados atraveacutes da Internet Isso

fica muito claro ao analisar a arquitetura da aplicaccedilatildeo no Capiacutetulo 3 onde a camada superior eacute uma

interface programaacutevel de acesso agrave dados abertos Essa caracteriacutestica inerente agraves arquiteturas de

softwares baseados na nuvem provoca um desenvolvimento orientado agrave dados mais conhecido como

Data Driven Development (DDA) Em outras palavras os recursos disponiacuteveis na interface de dados

foram desenhados pensando-se nas dependecircncias de dados na perspectiva de quem iraacute consumir os

dados

Os meacutetodos para acesso aos dados estatildeo distribuiacutedos em 3 grupos como na Ilustraccedilatildeo 2 O

grupo principal eacute o Consulta ao Cadastro onde eacute possiacutevel combinar filtros e acessar dados das

Unidades Cadastradoras e dados dos Fornecedores O grupo de Informaccedilotildees Baacutesicas possui meacutetodos

para consulta dos dados necessaacuterios para possibilitar a construccedilatildeo dos filtros nas Consultas ao

Cadastro Por exemplo nas informaccedilotildees baacutesicas estatildeo os coacutedigos para filtrar os fornecedores de um

municiacutepio especiacutefico ou de uma linha de fornecimento especiacutefica No grupo de Informaccedilotildees

Detalhadas do Fornecedor da Unidade Cadastradora ou de Municiacutepio

Os detalhes de cada meacutetodo como os campos de retorno foram definidos de acordo com o

propoacutesito do meacutetodo Vaacuterios dados de Fornecedor soacute podem ser acessados pelo meacutetodo no grupo de

Informaccedilotildees Detalhadas assim nas Consultas ao Cadastro estatildeo apenas dados baacutesicos reduzindo-se

o tamanho dos arquivos transmitidos A diversidade de formatos para cada consulta possibilita que o

usuaacuterio utilize o de menor tamanho o mais expressivo semanticamente ou o que se adapta melhor ao

seu sistema Todos os meacutetodos disponiacuteveis estatildeo listados na URL

httpapicomprasnetgovbrsicafdocmetodoshtml

26 Documentaccedilatildeo

Uma documentaccedilatildeo de qualidade e completa eacute extremamente importante Eacute na documentaccedilatildeo

Ilustraccedilatildeo 2 Documentaccedilatildeo da API listando todos os meacutetodos disponiacuteveis para consulta

929

que o usuaacuterio da API encontraraacute os detalhes teacutecnicos sobre os meios possiacuteveis de acessarem os dados

Mais detalhes garantem maior adesatildeo agrave plataforma de dados Na documentaccedilatildeo eacute preciso que se

esclareccedila toda e qualquer informaccedilatildeo que possa influenciar a implementaccedilatildeo da soluccedilatildeo que faraacute uso

dos dados Sugerimos que a documentaccedilatildeo forneccedila detalhes sobre

bull Lista de meacutetodos recursos tipos ou classes dos grupos de dados

bull Descriccedilatildeo textual esclarecendo o significado de cada meacutetodo recurso tipo ou classe de dados

bull Lista de campos que compotildee o resultado de consulta de cada meacutetodo recurso tipo ou classe

de dado

bull Lista de paracircmetros e valores se houver que possibilitam realizar filtros sobre o meacutetodo

recurso tipo ou classe de dados

bull Lista dos diferentes formatos para acesso aos dados

bull Informaccedilotildees sobre frequecircncia de atualizaccedilatildeo dos dados

bull Exemplo de consulta para cada meacutetodo recurso tipo ou classe de dados

bull Licenccedila se houver sob a qual os dados estatildeo publicados

A documentaccedilatildeo da API do SICAF estaacute disponiacutevel em httpapicomprasnetgovbrsicafdoc

trazendo informaccedilotildees gerais da plataforma Para cada meacutetodo ou recurso da API existe uma

documentaccedilatildeo especiacutefica por exemplo em httpapicomprasnetgovbrsicafdocfornecedoreshtml

27 Construccedilatildeo de metadados (RDF)

Foram realizadas uma seacuterie de reuniotildees com pessoas ligadas agrave aacuterea de negoacutecio correspondente

na DLSG nas quais foram coletadas informaccedilotildees que nos levaram a esboccedilar um vocabulaacuterio miacutenimo

para o SICAF que representasse os dados que seriam disponibilizados Nesse processo foi tomado o

cuidado de ligar as classes e propriedades modeladas a outros conceitos externos definidos em

vocabulaacuterios amplamente utilizados na comunidade internacional da web semacircntica

28 Sequecircncia de desenvolvimento

[O que deveria estar aqui]

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 3: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

329

Histoacuterico de Alteraccedilotildees

Data Versatildeo Histoacuterico Responsaacutevel(is)

10082011 01 Versatildeo inicial

Nitai Silva Augusto Herrmann e Christian Miranda - SLTI Time de Dados Abertos

429

1 Introduccedilatildeo

11 Objetivo do documento

A Secretaria de Logiacutestica e Tecnologia da Informaccedilatildeo do Ministeacuterio do Planejamento ndash SLTI

tem dentro de suas atribuiccedilotildees a competecircncia de planejar coordenar supervisionar e orientar

normativamente as atividades do Sistema de Administraccedilatildeo de Recursos de Informaccedilatildeo e Informaacutetica

ndash SISP propondo poliacuteticas e diretrizes de Tecnologia da Informaccedilatildeo no acircmbito da Administraccedilatildeo

Puacuteblica Federal direta autaacuterquica e fundacional

Este documento tem por objetivo servir como referecircncia para implementaccedilatildeo de soluccedilotildees

para disponibilizaccedilatildeo de dados na Internet seguindo os princiacutepios de dados abertos

Em marccedilo de 2011 a SLTI realizou a implementaccedilatildeo de um projeto piloto de Dados Abertos

com os dados do Sistema de Cadastramento Unificado de Fornecedores ndash SICAF Este documento

fornece detalhes teacutecnicos quanto ao desenvolvimento da aplicaccedilatildeo Resumidamente satildeo respondidos

questionamentos sobre a metodologia de desenvolvimento utilizada e o processo de abertura numa

visatildeo de gerecircncia de projeto

O conjunto de ferramentas e bibliotecas utilizadas no projeto constitui uma soluccedilatildeo derivada

das tecnologias escolhidas no iniacutecio poreacutem eacute fundamental esclarecer que outras combinaccedilotildees de

linguagens e bibliotecas podem proporcionar o mesmo ou melhor resultado Portanto o caraacuteter

arquitetural ou seja padrotildees de projetos padrotildees e formatos interoperaacuteveis e as boas praacuteticas de

desenvolvimento tecircm maior valor orientativo para as faacutebricas de software que desejam implementar

soluccedilotildees semelhantes de abertura de dados Utilize este documento como referecircncia para sua soluccedilatildeo

de abertura de dados Eacute importante salientar que o conceito de dados abertos estaacute fundamentado em

princiacutepios simples e que para certos casos dados estaacuteticos por exemplo uma soluccedilatildeo bem mais

simplificada pode alcanccedilar um oacutetimo niacutevel de qualidade

Entendemos que dados abertos natildeo eacute apenas transparecircncia e controle dos gastos puacuteblicos mas

tambeacutem uma plataforma onde a sociedade desenvolve e compartilha serviccedilos Queremos fugir do

usual aguardamos o retorno da sociedade e temos a certeza que seremos surpreendidos

12 Objetivo do projeto piloto

A escolha de abrir os dados do SICAF se deve a dois motivos primeiramente eacute dever do

Ministeacuterio do Planejamento dar o exemplo e implementar dados abertos em seus sistemas o SICAF

eacute gerido pela Diretoria de Logiacutestica e Serviccedilos Gerais - DLSG que tambeacutem faz parte da SLTI

Segundo enxergamos que o cadastro de fornecedores eacute um conjunto muito rico de dados e queremos

potencializar seu uso e agregar mais valor disponibilizando-o para sociedade

A aplicaccedilatildeo eacute RESTful ou seja constitui uma API disponiacutevel na Internet para acesso aos dados

em vaacuterios formatos abertos atraveacutes de requisiccedilotildees HTTP seguindo os princiacutepios REST Usamos o termo piloto para esclarecermos que eacute um projeto experimental no sentido de que estamos

testando as tecnologias desenhando processos acumulando boas praacuteticas ou seja estamos aprendendo como abrir

dados Toda essa experiecircncia fundamenta vaacuterias de nossas decisotildees na Infraestrutura Nacional de Dados Abertos

(INDA)

13 Realizaccedilatildeo

O desenvolvimento do presente projeto foi realizado pela SLTI A gestatildeo do projeto e a

implementaccedilatildeo da aplicaccedilatildeo foi feita pelo Time de Dados Abertos do Departamento de Integraccedilatildeo de

Sistemas e Informaccedilatildeo (DSI) A logiacutestica para acesso aos dados em produccedilatildeo e o entendimento

aprofundado sobre os conceitos em torno do SICAF foram possibilitados pelo Departamento de

Logiacutestica e Serviccedilos Gerais o qual eacute responsaacutevel pelo SICAF

529

14 Escopo do projeto

Numa perspectiva de dados abertos o escopo se resume agrave disponibilizaccedilatildeo dos dados puacuteblicos

do SICAF na Internet sob uma licenccedila pertinente Dos vaacuterios tipos de dados que constituem o SICAF

definiu-se dois conjuntos mais importantes dados das Unidades Cadastradoras e dados dos

Fornecedores Dados geograacuteficos relacionados a esses dois conjuntos tambeacutem foram

disponibilizados

No caraacuteter teacutecnico os dados estatildeo disponiacuteveis na Internet seguindo os princiacutepios da

Representational State Transfer - REST ou seja documentos em hipermiacutedia acessiacuteveis atraveacutes de

requisiccedilotildees HTTP A arquitetura possibilita a combinaccedilatildeo de diversos filtros nas requisiccedilotildees e a

serializaccedilatildeo em vaacuterios formatos A serializaccedilatildeo eacute feita em tempo real pois os dados satildeo atualizados

com boa frequecircncia Primando pela qualidade maacutexima de abertura de dados foi definido um rascunho

de vocabulaacuterio ou ontologia miacutenima cobrindo os principais conceitos do SICAF

A tiacutetulo de exemplificaccedilatildeo tambeacutem foi desenvolvida uma aplicaccedilatildeo (mashup) fazendo uso

dos dados disponibilizados pela aplicaccedilatildeo

141 O SICAF em produccedilatildeo (Serpro)

O SICAF assim como outros subsistemas do Comprasnet eacute desenvolvido e mantido pelo

Serpro No capiacutetulo 3 eacute apresentada a arquitetura do sistema desenvolvido neste projeto claramente

eacute perceptiacutevel a integraccedilatildeo com a aplicaccedilatildeo em produccedilatildeo a niacutevel de banco de dados O aplicaccedilatildeo de

produccedilatildeo do SICAF utiliza uma base de dados PostgreSQL

O SICAF sofreu diversas melhorias no iniacutecio de 2011 O processo de cadastramento e

habilitaccedilatildeo de fornecedores foi simplificado e faz maior uso dos meios eletrocircnicos O sistema pode

ser acessado atraveacutes da URL httpswww3comprasnetgovbrSICAFWeb

629

2 Metodologia de desenvolvimento

21 Recursos

A SLTI possui um time dedicado ao desenvolvimento de accedilotildees focadas em Dados Abertos

que foi responsaacutevel pela gestatildeo e execuccedilatildeo deste projeto Com caraacuteter experimental um dos

principais objetivos para realizaccedilatildeo deste projeto foi absorver e relatar o aprendizado no

desenvolvimento do piloto Para isso o desenvolvimento foi todo realizado nas dependecircncias do

Ministeacuterio do Planejamento

A infraestrutura para o desenvolvimento e manutenccedilatildeo atual da ferramenta eacute uma instacircncia do

servidor virtualizado no Labcluster como parte integrante do projeto Software Puacuteblico Todos os

componentes utilizados satildeo softwares livres O sucesso do projeto confirma o potencial de

desenvolvimento de soluccedilotildees de dados abertos utilizando estritamente software livre

22 Desenvolvimento Aacutegil

O conjunto de requisitos e tecnologias envolvidas caracteriza o projeto como ambicioso e

inovador Juntando um cronograma com prazos apertados agrave falta de modelos especiacuteficos de

implementaccedilatildeo de dados abertos decidimos fazer uso de uma metodologia adequada afim de

minimizar o risco e maximizar o valor agregado ao software decidimos utilizar SCRUM A Ilustraccedilatildeo

1 resume as etapas da utilizaccedilatildeo de SCRUM

Um dos princiacutepios norteadores da metodologia aacutegil eacute a de que o cliente faz parte do time ele

estaacute comprometido com o sucesso do projeto o que demanda fortes interaccedilotildees em ciclos curtos No

paradigma de dados abertos a plataforma de dados provida pelo governo eacute para uso da sociedade

mas defendemos que o proacuteprio governo deve fazer uso desses dados enxergando esta como uma

plataforma de interoperabilidade intragoverno Nesse sentido gestores do Departamento de Logiacutestica

e Serviccedilos Gerais ndash DLSG ndash participaram intensamente no refinamento da aplicaccedilatildeo de acordo com

as cobranccedilas por dados percebidas

Eacute importante pontuar que a configuraccedilatildeo destes recursos com a metodologia aacutegil possibilitou

o desenvolvimento e implantaccedilatildeo da aplicaccedilatildeo em pouco mais de 2 meses

Ilustraccedilatildeo 1

Iteraccedilotildees e produtos no desenvolvimento aacutegil SCRUM

729

23 Gestatildeo do processo de abertura

Apesar de natildeo ser objetivo principal do projeto piloto eacute atribuiccedilatildeo fundamental da SLTI

orientar e apoiar os oacutergatildeos do SISP na gestatildeo com caraacuteter estrateacutegico do processo de abertura dos

dados

Um dos primeiros produtos desenvolvidos pelo time de dados abertos da SLTI foi um Guia

de Abertura de Dados o qual estaacute em consulta puacuteblica no portal de Governo Eletrocircnico

[httpswwwconsultasgovernoeletronicogovbrConsultasPublicasconsultasdoacao=exibirampid=9

3] O guia eacute um manual destinado aos gestores que querem iniciar o processo de abertura de dados

em suas instituiccedilotildees Nele satildeo elencados diversos atores envolvidos no processo de abertura desde o

responsaacutevel maacuteximo da instituiccedilatildeo o qual tem poder de autorizaccedilatildeo legal de abertura dos dados ateacute

o envolvimento com a sociedade considerado no paradigma de dados abertos o principal beneficiado

O manual tambeacutem define um macroprocesso para orquestraccedilatildeo da abertura sempre focando no que

eacute mais importante e agregador ao objetivo Tambeacutem satildeo citadas etapas importantes como processo de

anonimizaccedilatildeo e de classificaccedilatildeo das informaccedilotildees

O manual passou por um processo de amadurecimento com o objetivo de aprofundar os

detalhes de planejamento e operacionalizaccedilatildeo da abertura de dados fornecendo orientaccedilatildeo para que

as aacutereas de TI nos oacutergatildeos possam promover essa accedilatildeo como estrateacutegica em suas instituiccedilotildees Quando

do encaminhamento para consulta puacuteblica em 1ordm de setembro de 2011 ele passou a se chamar Guia

de Abertura de Dados

O Guia de Abertura de Dados eacute um produto previsto do GT1 da INDA Para aqueles que

necessitam de apoio e orientaccedilatildeo mais dedicada o time de dados abertos da SLTI pode ser solicitada

pelo endereccedilo httpc3ssispgovbr ou pelo e-mail sispplanejamentogovbr

24 Licenccedila dos dados

O projeto busca um alinhamento com todos os princiacutepios de dados abertos onde um deles

sugere que o dado deve ser livre de regulaccedilatildeo patente marca e tudo que restrinja seu reuso

Reconhecemos que ainda natildeo foram desenvolvidas licenccedilas especiacuteficas de dados abertos ideais

adaptadas ao contexto do governo brasileiro Dessa forma decidimos utilizar as Licenccedilas de Banco

de Dados Aberto (ODbL) e de Conteuacutedo de Banco de Dados Aberto (DbCL) Essas satildeo licenccedilas

livres escritas especificamente para dados Nessa direccedilatildeo dentro da Infraestrutura Nacional de Dados

Abertos que estaacute sendo construiacuteda estaacute prevista a implementaccedilatildeo de uma licenccedila de dados abertos

governamentais brasileira

A ODbL eacute uma licenccedila aberta segundo os criteacuterios da definiccedilatildeo de conhecimento aberto -

httpopendefinitionorg Isto eacute importante para garantir a interoperabilidade de licenccedilas com outros

dados abertos quando o usuaacuterio dos dados seja a sociedade ou o proacuteprio governo for fazer

cruzamento entre esses dados e outros

Bases de dados e bancos de dados tecircm algumas caracteriacutesticas especiacuteficas que as diferenciam

de conteuacutedo e por isso eacute necessaacuterio utilizar licenccedilas que satildeo especiacuteficas para utilizaccedilatildeo em bases de

dados Assim como haacute alguns anos considerando as diferenccedilas de caracteriacutesticas entre software e

conteuacutedo desenvolveu-se a licenccedila Creative Commons especificamente para licenciar conteuacutedo de

forma livre (considerando-se o sentido de livre em espiacuterito semelhante ao que a licenccedila GPL faz

para tornar o software livre)

A DBCL foi utilizada para o conteuacutedo dos dados pois segundo o OpenDataCommons FAQ

[2] direitos diferentes podem ser aplicaacuteveis agrave baseconjunto de dados como um todo e ao conteuacutedo

dos dados (Trecho da nossa reportagem para Wireless Mundi)

829

25 Definiccedilatildeo da Interface de dados

O principal objetivo do projeto eacute disponibilizar o acesso aos dados atraveacutes da Internet Isso

fica muito claro ao analisar a arquitetura da aplicaccedilatildeo no Capiacutetulo 3 onde a camada superior eacute uma

interface programaacutevel de acesso agrave dados abertos Essa caracteriacutestica inerente agraves arquiteturas de

softwares baseados na nuvem provoca um desenvolvimento orientado agrave dados mais conhecido como

Data Driven Development (DDA) Em outras palavras os recursos disponiacuteveis na interface de dados

foram desenhados pensando-se nas dependecircncias de dados na perspectiva de quem iraacute consumir os

dados

Os meacutetodos para acesso aos dados estatildeo distribuiacutedos em 3 grupos como na Ilustraccedilatildeo 2 O

grupo principal eacute o Consulta ao Cadastro onde eacute possiacutevel combinar filtros e acessar dados das

Unidades Cadastradoras e dados dos Fornecedores O grupo de Informaccedilotildees Baacutesicas possui meacutetodos

para consulta dos dados necessaacuterios para possibilitar a construccedilatildeo dos filtros nas Consultas ao

Cadastro Por exemplo nas informaccedilotildees baacutesicas estatildeo os coacutedigos para filtrar os fornecedores de um

municiacutepio especiacutefico ou de uma linha de fornecimento especiacutefica No grupo de Informaccedilotildees

Detalhadas do Fornecedor da Unidade Cadastradora ou de Municiacutepio

Os detalhes de cada meacutetodo como os campos de retorno foram definidos de acordo com o

propoacutesito do meacutetodo Vaacuterios dados de Fornecedor soacute podem ser acessados pelo meacutetodo no grupo de

Informaccedilotildees Detalhadas assim nas Consultas ao Cadastro estatildeo apenas dados baacutesicos reduzindo-se

o tamanho dos arquivos transmitidos A diversidade de formatos para cada consulta possibilita que o

usuaacuterio utilize o de menor tamanho o mais expressivo semanticamente ou o que se adapta melhor ao

seu sistema Todos os meacutetodos disponiacuteveis estatildeo listados na URL

httpapicomprasnetgovbrsicafdocmetodoshtml

26 Documentaccedilatildeo

Uma documentaccedilatildeo de qualidade e completa eacute extremamente importante Eacute na documentaccedilatildeo

Ilustraccedilatildeo 2 Documentaccedilatildeo da API listando todos os meacutetodos disponiacuteveis para consulta

929

que o usuaacuterio da API encontraraacute os detalhes teacutecnicos sobre os meios possiacuteveis de acessarem os dados

Mais detalhes garantem maior adesatildeo agrave plataforma de dados Na documentaccedilatildeo eacute preciso que se

esclareccedila toda e qualquer informaccedilatildeo que possa influenciar a implementaccedilatildeo da soluccedilatildeo que faraacute uso

dos dados Sugerimos que a documentaccedilatildeo forneccedila detalhes sobre

bull Lista de meacutetodos recursos tipos ou classes dos grupos de dados

bull Descriccedilatildeo textual esclarecendo o significado de cada meacutetodo recurso tipo ou classe de dados

bull Lista de campos que compotildee o resultado de consulta de cada meacutetodo recurso tipo ou classe

de dado

bull Lista de paracircmetros e valores se houver que possibilitam realizar filtros sobre o meacutetodo

recurso tipo ou classe de dados

bull Lista dos diferentes formatos para acesso aos dados

bull Informaccedilotildees sobre frequecircncia de atualizaccedilatildeo dos dados

bull Exemplo de consulta para cada meacutetodo recurso tipo ou classe de dados

bull Licenccedila se houver sob a qual os dados estatildeo publicados

A documentaccedilatildeo da API do SICAF estaacute disponiacutevel em httpapicomprasnetgovbrsicafdoc

trazendo informaccedilotildees gerais da plataforma Para cada meacutetodo ou recurso da API existe uma

documentaccedilatildeo especiacutefica por exemplo em httpapicomprasnetgovbrsicafdocfornecedoreshtml

27 Construccedilatildeo de metadados (RDF)

Foram realizadas uma seacuterie de reuniotildees com pessoas ligadas agrave aacuterea de negoacutecio correspondente

na DLSG nas quais foram coletadas informaccedilotildees que nos levaram a esboccedilar um vocabulaacuterio miacutenimo

para o SICAF que representasse os dados que seriam disponibilizados Nesse processo foi tomado o

cuidado de ligar as classes e propriedades modeladas a outros conceitos externos definidos em

vocabulaacuterios amplamente utilizados na comunidade internacional da web semacircntica

28 Sequecircncia de desenvolvimento

[O que deveria estar aqui]

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 4: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

429

1 Introduccedilatildeo

11 Objetivo do documento

A Secretaria de Logiacutestica e Tecnologia da Informaccedilatildeo do Ministeacuterio do Planejamento ndash SLTI

tem dentro de suas atribuiccedilotildees a competecircncia de planejar coordenar supervisionar e orientar

normativamente as atividades do Sistema de Administraccedilatildeo de Recursos de Informaccedilatildeo e Informaacutetica

ndash SISP propondo poliacuteticas e diretrizes de Tecnologia da Informaccedilatildeo no acircmbito da Administraccedilatildeo

Puacuteblica Federal direta autaacuterquica e fundacional

Este documento tem por objetivo servir como referecircncia para implementaccedilatildeo de soluccedilotildees

para disponibilizaccedilatildeo de dados na Internet seguindo os princiacutepios de dados abertos

Em marccedilo de 2011 a SLTI realizou a implementaccedilatildeo de um projeto piloto de Dados Abertos

com os dados do Sistema de Cadastramento Unificado de Fornecedores ndash SICAF Este documento

fornece detalhes teacutecnicos quanto ao desenvolvimento da aplicaccedilatildeo Resumidamente satildeo respondidos

questionamentos sobre a metodologia de desenvolvimento utilizada e o processo de abertura numa

visatildeo de gerecircncia de projeto

O conjunto de ferramentas e bibliotecas utilizadas no projeto constitui uma soluccedilatildeo derivada

das tecnologias escolhidas no iniacutecio poreacutem eacute fundamental esclarecer que outras combinaccedilotildees de

linguagens e bibliotecas podem proporcionar o mesmo ou melhor resultado Portanto o caraacuteter

arquitetural ou seja padrotildees de projetos padrotildees e formatos interoperaacuteveis e as boas praacuteticas de

desenvolvimento tecircm maior valor orientativo para as faacutebricas de software que desejam implementar

soluccedilotildees semelhantes de abertura de dados Utilize este documento como referecircncia para sua soluccedilatildeo

de abertura de dados Eacute importante salientar que o conceito de dados abertos estaacute fundamentado em

princiacutepios simples e que para certos casos dados estaacuteticos por exemplo uma soluccedilatildeo bem mais

simplificada pode alcanccedilar um oacutetimo niacutevel de qualidade

Entendemos que dados abertos natildeo eacute apenas transparecircncia e controle dos gastos puacuteblicos mas

tambeacutem uma plataforma onde a sociedade desenvolve e compartilha serviccedilos Queremos fugir do

usual aguardamos o retorno da sociedade e temos a certeza que seremos surpreendidos

12 Objetivo do projeto piloto

A escolha de abrir os dados do SICAF se deve a dois motivos primeiramente eacute dever do

Ministeacuterio do Planejamento dar o exemplo e implementar dados abertos em seus sistemas o SICAF

eacute gerido pela Diretoria de Logiacutestica e Serviccedilos Gerais - DLSG que tambeacutem faz parte da SLTI

Segundo enxergamos que o cadastro de fornecedores eacute um conjunto muito rico de dados e queremos

potencializar seu uso e agregar mais valor disponibilizando-o para sociedade

A aplicaccedilatildeo eacute RESTful ou seja constitui uma API disponiacutevel na Internet para acesso aos dados

em vaacuterios formatos abertos atraveacutes de requisiccedilotildees HTTP seguindo os princiacutepios REST Usamos o termo piloto para esclarecermos que eacute um projeto experimental no sentido de que estamos

testando as tecnologias desenhando processos acumulando boas praacuteticas ou seja estamos aprendendo como abrir

dados Toda essa experiecircncia fundamenta vaacuterias de nossas decisotildees na Infraestrutura Nacional de Dados Abertos

(INDA)

13 Realizaccedilatildeo

O desenvolvimento do presente projeto foi realizado pela SLTI A gestatildeo do projeto e a

implementaccedilatildeo da aplicaccedilatildeo foi feita pelo Time de Dados Abertos do Departamento de Integraccedilatildeo de

Sistemas e Informaccedilatildeo (DSI) A logiacutestica para acesso aos dados em produccedilatildeo e o entendimento

aprofundado sobre os conceitos em torno do SICAF foram possibilitados pelo Departamento de

Logiacutestica e Serviccedilos Gerais o qual eacute responsaacutevel pelo SICAF

529

14 Escopo do projeto

Numa perspectiva de dados abertos o escopo se resume agrave disponibilizaccedilatildeo dos dados puacuteblicos

do SICAF na Internet sob uma licenccedila pertinente Dos vaacuterios tipos de dados que constituem o SICAF

definiu-se dois conjuntos mais importantes dados das Unidades Cadastradoras e dados dos

Fornecedores Dados geograacuteficos relacionados a esses dois conjuntos tambeacutem foram

disponibilizados

No caraacuteter teacutecnico os dados estatildeo disponiacuteveis na Internet seguindo os princiacutepios da

Representational State Transfer - REST ou seja documentos em hipermiacutedia acessiacuteveis atraveacutes de

requisiccedilotildees HTTP A arquitetura possibilita a combinaccedilatildeo de diversos filtros nas requisiccedilotildees e a

serializaccedilatildeo em vaacuterios formatos A serializaccedilatildeo eacute feita em tempo real pois os dados satildeo atualizados

com boa frequecircncia Primando pela qualidade maacutexima de abertura de dados foi definido um rascunho

de vocabulaacuterio ou ontologia miacutenima cobrindo os principais conceitos do SICAF

A tiacutetulo de exemplificaccedilatildeo tambeacutem foi desenvolvida uma aplicaccedilatildeo (mashup) fazendo uso

dos dados disponibilizados pela aplicaccedilatildeo

141 O SICAF em produccedilatildeo (Serpro)

O SICAF assim como outros subsistemas do Comprasnet eacute desenvolvido e mantido pelo

Serpro No capiacutetulo 3 eacute apresentada a arquitetura do sistema desenvolvido neste projeto claramente

eacute perceptiacutevel a integraccedilatildeo com a aplicaccedilatildeo em produccedilatildeo a niacutevel de banco de dados O aplicaccedilatildeo de

produccedilatildeo do SICAF utiliza uma base de dados PostgreSQL

O SICAF sofreu diversas melhorias no iniacutecio de 2011 O processo de cadastramento e

habilitaccedilatildeo de fornecedores foi simplificado e faz maior uso dos meios eletrocircnicos O sistema pode

ser acessado atraveacutes da URL httpswww3comprasnetgovbrSICAFWeb

629

2 Metodologia de desenvolvimento

21 Recursos

A SLTI possui um time dedicado ao desenvolvimento de accedilotildees focadas em Dados Abertos

que foi responsaacutevel pela gestatildeo e execuccedilatildeo deste projeto Com caraacuteter experimental um dos

principais objetivos para realizaccedilatildeo deste projeto foi absorver e relatar o aprendizado no

desenvolvimento do piloto Para isso o desenvolvimento foi todo realizado nas dependecircncias do

Ministeacuterio do Planejamento

A infraestrutura para o desenvolvimento e manutenccedilatildeo atual da ferramenta eacute uma instacircncia do

servidor virtualizado no Labcluster como parte integrante do projeto Software Puacuteblico Todos os

componentes utilizados satildeo softwares livres O sucesso do projeto confirma o potencial de

desenvolvimento de soluccedilotildees de dados abertos utilizando estritamente software livre

22 Desenvolvimento Aacutegil

O conjunto de requisitos e tecnologias envolvidas caracteriza o projeto como ambicioso e

inovador Juntando um cronograma com prazos apertados agrave falta de modelos especiacuteficos de

implementaccedilatildeo de dados abertos decidimos fazer uso de uma metodologia adequada afim de

minimizar o risco e maximizar o valor agregado ao software decidimos utilizar SCRUM A Ilustraccedilatildeo

1 resume as etapas da utilizaccedilatildeo de SCRUM

Um dos princiacutepios norteadores da metodologia aacutegil eacute a de que o cliente faz parte do time ele

estaacute comprometido com o sucesso do projeto o que demanda fortes interaccedilotildees em ciclos curtos No

paradigma de dados abertos a plataforma de dados provida pelo governo eacute para uso da sociedade

mas defendemos que o proacuteprio governo deve fazer uso desses dados enxergando esta como uma

plataforma de interoperabilidade intragoverno Nesse sentido gestores do Departamento de Logiacutestica

e Serviccedilos Gerais ndash DLSG ndash participaram intensamente no refinamento da aplicaccedilatildeo de acordo com

as cobranccedilas por dados percebidas

Eacute importante pontuar que a configuraccedilatildeo destes recursos com a metodologia aacutegil possibilitou

o desenvolvimento e implantaccedilatildeo da aplicaccedilatildeo em pouco mais de 2 meses

Ilustraccedilatildeo 1

Iteraccedilotildees e produtos no desenvolvimento aacutegil SCRUM

729

23 Gestatildeo do processo de abertura

Apesar de natildeo ser objetivo principal do projeto piloto eacute atribuiccedilatildeo fundamental da SLTI

orientar e apoiar os oacutergatildeos do SISP na gestatildeo com caraacuteter estrateacutegico do processo de abertura dos

dados

Um dos primeiros produtos desenvolvidos pelo time de dados abertos da SLTI foi um Guia

de Abertura de Dados o qual estaacute em consulta puacuteblica no portal de Governo Eletrocircnico

[httpswwwconsultasgovernoeletronicogovbrConsultasPublicasconsultasdoacao=exibirampid=9

3] O guia eacute um manual destinado aos gestores que querem iniciar o processo de abertura de dados

em suas instituiccedilotildees Nele satildeo elencados diversos atores envolvidos no processo de abertura desde o

responsaacutevel maacuteximo da instituiccedilatildeo o qual tem poder de autorizaccedilatildeo legal de abertura dos dados ateacute

o envolvimento com a sociedade considerado no paradigma de dados abertos o principal beneficiado

O manual tambeacutem define um macroprocesso para orquestraccedilatildeo da abertura sempre focando no que

eacute mais importante e agregador ao objetivo Tambeacutem satildeo citadas etapas importantes como processo de

anonimizaccedilatildeo e de classificaccedilatildeo das informaccedilotildees

O manual passou por um processo de amadurecimento com o objetivo de aprofundar os

detalhes de planejamento e operacionalizaccedilatildeo da abertura de dados fornecendo orientaccedilatildeo para que

as aacutereas de TI nos oacutergatildeos possam promover essa accedilatildeo como estrateacutegica em suas instituiccedilotildees Quando

do encaminhamento para consulta puacuteblica em 1ordm de setembro de 2011 ele passou a se chamar Guia

de Abertura de Dados

O Guia de Abertura de Dados eacute um produto previsto do GT1 da INDA Para aqueles que

necessitam de apoio e orientaccedilatildeo mais dedicada o time de dados abertos da SLTI pode ser solicitada

pelo endereccedilo httpc3ssispgovbr ou pelo e-mail sispplanejamentogovbr

24 Licenccedila dos dados

O projeto busca um alinhamento com todos os princiacutepios de dados abertos onde um deles

sugere que o dado deve ser livre de regulaccedilatildeo patente marca e tudo que restrinja seu reuso

Reconhecemos que ainda natildeo foram desenvolvidas licenccedilas especiacuteficas de dados abertos ideais

adaptadas ao contexto do governo brasileiro Dessa forma decidimos utilizar as Licenccedilas de Banco

de Dados Aberto (ODbL) e de Conteuacutedo de Banco de Dados Aberto (DbCL) Essas satildeo licenccedilas

livres escritas especificamente para dados Nessa direccedilatildeo dentro da Infraestrutura Nacional de Dados

Abertos que estaacute sendo construiacuteda estaacute prevista a implementaccedilatildeo de uma licenccedila de dados abertos

governamentais brasileira

A ODbL eacute uma licenccedila aberta segundo os criteacuterios da definiccedilatildeo de conhecimento aberto -

httpopendefinitionorg Isto eacute importante para garantir a interoperabilidade de licenccedilas com outros

dados abertos quando o usuaacuterio dos dados seja a sociedade ou o proacuteprio governo for fazer

cruzamento entre esses dados e outros

Bases de dados e bancos de dados tecircm algumas caracteriacutesticas especiacuteficas que as diferenciam

de conteuacutedo e por isso eacute necessaacuterio utilizar licenccedilas que satildeo especiacuteficas para utilizaccedilatildeo em bases de

dados Assim como haacute alguns anos considerando as diferenccedilas de caracteriacutesticas entre software e

conteuacutedo desenvolveu-se a licenccedila Creative Commons especificamente para licenciar conteuacutedo de

forma livre (considerando-se o sentido de livre em espiacuterito semelhante ao que a licenccedila GPL faz

para tornar o software livre)

A DBCL foi utilizada para o conteuacutedo dos dados pois segundo o OpenDataCommons FAQ

[2] direitos diferentes podem ser aplicaacuteveis agrave baseconjunto de dados como um todo e ao conteuacutedo

dos dados (Trecho da nossa reportagem para Wireless Mundi)

829

25 Definiccedilatildeo da Interface de dados

O principal objetivo do projeto eacute disponibilizar o acesso aos dados atraveacutes da Internet Isso

fica muito claro ao analisar a arquitetura da aplicaccedilatildeo no Capiacutetulo 3 onde a camada superior eacute uma

interface programaacutevel de acesso agrave dados abertos Essa caracteriacutestica inerente agraves arquiteturas de

softwares baseados na nuvem provoca um desenvolvimento orientado agrave dados mais conhecido como

Data Driven Development (DDA) Em outras palavras os recursos disponiacuteveis na interface de dados

foram desenhados pensando-se nas dependecircncias de dados na perspectiva de quem iraacute consumir os

dados

Os meacutetodos para acesso aos dados estatildeo distribuiacutedos em 3 grupos como na Ilustraccedilatildeo 2 O

grupo principal eacute o Consulta ao Cadastro onde eacute possiacutevel combinar filtros e acessar dados das

Unidades Cadastradoras e dados dos Fornecedores O grupo de Informaccedilotildees Baacutesicas possui meacutetodos

para consulta dos dados necessaacuterios para possibilitar a construccedilatildeo dos filtros nas Consultas ao

Cadastro Por exemplo nas informaccedilotildees baacutesicas estatildeo os coacutedigos para filtrar os fornecedores de um

municiacutepio especiacutefico ou de uma linha de fornecimento especiacutefica No grupo de Informaccedilotildees

Detalhadas do Fornecedor da Unidade Cadastradora ou de Municiacutepio

Os detalhes de cada meacutetodo como os campos de retorno foram definidos de acordo com o

propoacutesito do meacutetodo Vaacuterios dados de Fornecedor soacute podem ser acessados pelo meacutetodo no grupo de

Informaccedilotildees Detalhadas assim nas Consultas ao Cadastro estatildeo apenas dados baacutesicos reduzindo-se

o tamanho dos arquivos transmitidos A diversidade de formatos para cada consulta possibilita que o

usuaacuterio utilize o de menor tamanho o mais expressivo semanticamente ou o que se adapta melhor ao

seu sistema Todos os meacutetodos disponiacuteveis estatildeo listados na URL

httpapicomprasnetgovbrsicafdocmetodoshtml

26 Documentaccedilatildeo

Uma documentaccedilatildeo de qualidade e completa eacute extremamente importante Eacute na documentaccedilatildeo

Ilustraccedilatildeo 2 Documentaccedilatildeo da API listando todos os meacutetodos disponiacuteveis para consulta

929

que o usuaacuterio da API encontraraacute os detalhes teacutecnicos sobre os meios possiacuteveis de acessarem os dados

Mais detalhes garantem maior adesatildeo agrave plataforma de dados Na documentaccedilatildeo eacute preciso que se

esclareccedila toda e qualquer informaccedilatildeo que possa influenciar a implementaccedilatildeo da soluccedilatildeo que faraacute uso

dos dados Sugerimos que a documentaccedilatildeo forneccedila detalhes sobre

bull Lista de meacutetodos recursos tipos ou classes dos grupos de dados

bull Descriccedilatildeo textual esclarecendo o significado de cada meacutetodo recurso tipo ou classe de dados

bull Lista de campos que compotildee o resultado de consulta de cada meacutetodo recurso tipo ou classe

de dado

bull Lista de paracircmetros e valores se houver que possibilitam realizar filtros sobre o meacutetodo

recurso tipo ou classe de dados

bull Lista dos diferentes formatos para acesso aos dados

bull Informaccedilotildees sobre frequecircncia de atualizaccedilatildeo dos dados

bull Exemplo de consulta para cada meacutetodo recurso tipo ou classe de dados

bull Licenccedila se houver sob a qual os dados estatildeo publicados

A documentaccedilatildeo da API do SICAF estaacute disponiacutevel em httpapicomprasnetgovbrsicafdoc

trazendo informaccedilotildees gerais da plataforma Para cada meacutetodo ou recurso da API existe uma

documentaccedilatildeo especiacutefica por exemplo em httpapicomprasnetgovbrsicafdocfornecedoreshtml

27 Construccedilatildeo de metadados (RDF)

Foram realizadas uma seacuterie de reuniotildees com pessoas ligadas agrave aacuterea de negoacutecio correspondente

na DLSG nas quais foram coletadas informaccedilotildees que nos levaram a esboccedilar um vocabulaacuterio miacutenimo

para o SICAF que representasse os dados que seriam disponibilizados Nesse processo foi tomado o

cuidado de ligar as classes e propriedades modeladas a outros conceitos externos definidos em

vocabulaacuterios amplamente utilizados na comunidade internacional da web semacircntica

28 Sequecircncia de desenvolvimento

[O que deveria estar aqui]

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 5: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

529

14 Escopo do projeto

Numa perspectiva de dados abertos o escopo se resume agrave disponibilizaccedilatildeo dos dados puacuteblicos

do SICAF na Internet sob uma licenccedila pertinente Dos vaacuterios tipos de dados que constituem o SICAF

definiu-se dois conjuntos mais importantes dados das Unidades Cadastradoras e dados dos

Fornecedores Dados geograacuteficos relacionados a esses dois conjuntos tambeacutem foram

disponibilizados

No caraacuteter teacutecnico os dados estatildeo disponiacuteveis na Internet seguindo os princiacutepios da

Representational State Transfer - REST ou seja documentos em hipermiacutedia acessiacuteveis atraveacutes de

requisiccedilotildees HTTP A arquitetura possibilita a combinaccedilatildeo de diversos filtros nas requisiccedilotildees e a

serializaccedilatildeo em vaacuterios formatos A serializaccedilatildeo eacute feita em tempo real pois os dados satildeo atualizados

com boa frequecircncia Primando pela qualidade maacutexima de abertura de dados foi definido um rascunho

de vocabulaacuterio ou ontologia miacutenima cobrindo os principais conceitos do SICAF

A tiacutetulo de exemplificaccedilatildeo tambeacutem foi desenvolvida uma aplicaccedilatildeo (mashup) fazendo uso

dos dados disponibilizados pela aplicaccedilatildeo

141 O SICAF em produccedilatildeo (Serpro)

O SICAF assim como outros subsistemas do Comprasnet eacute desenvolvido e mantido pelo

Serpro No capiacutetulo 3 eacute apresentada a arquitetura do sistema desenvolvido neste projeto claramente

eacute perceptiacutevel a integraccedilatildeo com a aplicaccedilatildeo em produccedilatildeo a niacutevel de banco de dados O aplicaccedilatildeo de

produccedilatildeo do SICAF utiliza uma base de dados PostgreSQL

O SICAF sofreu diversas melhorias no iniacutecio de 2011 O processo de cadastramento e

habilitaccedilatildeo de fornecedores foi simplificado e faz maior uso dos meios eletrocircnicos O sistema pode

ser acessado atraveacutes da URL httpswww3comprasnetgovbrSICAFWeb

629

2 Metodologia de desenvolvimento

21 Recursos

A SLTI possui um time dedicado ao desenvolvimento de accedilotildees focadas em Dados Abertos

que foi responsaacutevel pela gestatildeo e execuccedilatildeo deste projeto Com caraacuteter experimental um dos

principais objetivos para realizaccedilatildeo deste projeto foi absorver e relatar o aprendizado no

desenvolvimento do piloto Para isso o desenvolvimento foi todo realizado nas dependecircncias do

Ministeacuterio do Planejamento

A infraestrutura para o desenvolvimento e manutenccedilatildeo atual da ferramenta eacute uma instacircncia do

servidor virtualizado no Labcluster como parte integrante do projeto Software Puacuteblico Todos os

componentes utilizados satildeo softwares livres O sucesso do projeto confirma o potencial de

desenvolvimento de soluccedilotildees de dados abertos utilizando estritamente software livre

22 Desenvolvimento Aacutegil

O conjunto de requisitos e tecnologias envolvidas caracteriza o projeto como ambicioso e

inovador Juntando um cronograma com prazos apertados agrave falta de modelos especiacuteficos de

implementaccedilatildeo de dados abertos decidimos fazer uso de uma metodologia adequada afim de

minimizar o risco e maximizar o valor agregado ao software decidimos utilizar SCRUM A Ilustraccedilatildeo

1 resume as etapas da utilizaccedilatildeo de SCRUM

Um dos princiacutepios norteadores da metodologia aacutegil eacute a de que o cliente faz parte do time ele

estaacute comprometido com o sucesso do projeto o que demanda fortes interaccedilotildees em ciclos curtos No

paradigma de dados abertos a plataforma de dados provida pelo governo eacute para uso da sociedade

mas defendemos que o proacuteprio governo deve fazer uso desses dados enxergando esta como uma

plataforma de interoperabilidade intragoverno Nesse sentido gestores do Departamento de Logiacutestica

e Serviccedilos Gerais ndash DLSG ndash participaram intensamente no refinamento da aplicaccedilatildeo de acordo com

as cobranccedilas por dados percebidas

Eacute importante pontuar que a configuraccedilatildeo destes recursos com a metodologia aacutegil possibilitou

o desenvolvimento e implantaccedilatildeo da aplicaccedilatildeo em pouco mais de 2 meses

Ilustraccedilatildeo 1

Iteraccedilotildees e produtos no desenvolvimento aacutegil SCRUM

729

23 Gestatildeo do processo de abertura

Apesar de natildeo ser objetivo principal do projeto piloto eacute atribuiccedilatildeo fundamental da SLTI

orientar e apoiar os oacutergatildeos do SISP na gestatildeo com caraacuteter estrateacutegico do processo de abertura dos

dados

Um dos primeiros produtos desenvolvidos pelo time de dados abertos da SLTI foi um Guia

de Abertura de Dados o qual estaacute em consulta puacuteblica no portal de Governo Eletrocircnico

[httpswwwconsultasgovernoeletronicogovbrConsultasPublicasconsultasdoacao=exibirampid=9

3] O guia eacute um manual destinado aos gestores que querem iniciar o processo de abertura de dados

em suas instituiccedilotildees Nele satildeo elencados diversos atores envolvidos no processo de abertura desde o

responsaacutevel maacuteximo da instituiccedilatildeo o qual tem poder de autorizaccedilatildeo legal de abertura dos dados ateacute

o envolvimento com a sociedade considerado no paradigma de dados abertos o principal beneficiado

O manual tambeacutem define um macroprocesso para orquestraccedilatildeo da abertura sempre focando no que

eacute mais importante e agregador ao objetivo Tambeacutem satildeo citadas etapas importantes como processo de

anonimizaccedilatildeo e de classificaccedilatildeo das informaccedilotildees

O manual passou por um processo de amadurecimento com o objetivo de aprofundar os

detalhes de planejamento e operacionalizaccedilatildeo da abertura de dados fornecendo orientaccedilatildeo para que

as aacutereas de TI nos oacutergatildeos possam promover essa accedilatildeo como estrateacutegica em suas instituiccedilotildees Quando

do encaminhamento para consulta puacuteblica em 1ordm de setembro de 2011 ele passou a se chamar Guia

de Abertura de Dados

O Guia de Abertura de Dados eacute um produto previsto do GT1 da INDA Para aqueles que

necessitam de apoio e orientaccedilatildeo mais dedicada o time de dados abertos da SLTI pode ser solicitada

pelo endereccedilo httpc3ssispgovbr ou pelo e-mail sispplanejamentogovbr

24 Licenccedila dos dados

O projeto busca um alinhamento com todos os princiacutepios de dados abertos onde um deles

sugere que o dado deve ser livre de regulaccedilatildeo patente marca e tudo que restrinja seu reuso

Reconhecemos que ainda natildeo foram desenvolvidas licenccedilas especiacuteficas de dados abertos ideais

adaptadas ao contexto do governo brasileiro Dessa forma decidimos utilizar as Licenccedilas de Banco

de Dados Aberto (ODbL) e de Conteuacutedo de Banco de Dados Aberto (DbCL) Essas satildeo licenccedilas

livres escritas especificamente para dados Nessa direccedilatildeo dentro da Infraestrutura Nacional de Dados

Abertos que estaacute sendo construiacuteda estaacute prevista a implementaccedilatildeo de uma licenccedila de dados abertos

governamentais brasileira

A ODbL eacute uma licenccedila aberta segundo os criteacuterios da definiccedilatildeo de conhecimento aberto -

httpopendefinitionorg Isto eacute importante para garantir a interoperabilidade de licenccedilas com outros

dados abertos quando o usuaacuterio dos dados seja a sociedade ou o proacuteprio governo for fazer

cruzamento entre esses dados e outros

Bases de dados e bancos de dados tecircm algumas caracteriacutesticas especiacuteficas que as diferenciam

de conteuacutedo e por isso eacute necessaacuterio utilizar licenccedilas que satildeo especiacuteficas para utilizaccedilatildeo em bases de

dados Assim como haacute alguns anos considerando as diferenccedilas de caracteriacutesticas entre software e

conteuacutedo desenvolveu-se a licenccedila Creative Commons especificamente para licenciar conteuacutedo de

forma livre (considerando-se o sentido de livre em espiacuterito semelhante ao que a licenccedila GPL faz

para tornar o software livre)

A DBCL foi utilizada para o conteuacutedo dos dados pois segundo o OpenDataCommons FAQ

[2] direitos diferentes podem ser aplicaacuteveis agrave baseconjunto de dados como um todo e ao conteuacutedo

dos dados (Trecho da nossa reportagem para Wireless Mundi)

829

25 Definiccedilatildeo da Interface de dados

O principal objetivo do projeto eacute disponibilizar o acesso aos dados atraveacutes da Internet Isso

fica muito claro ao analisar a arquitetura da aplicaccedilatildeo no Capiacutetulo 3 onde a camada superior eacute uma

interface programaacutevel de acesso agrave dados abertos Essa caracteriacutestica inerente agraves arquiteturas de

softwares baseados na nuvem provoca um desenvolvimento orientado agrave dados mais conhecido como

Data Driven Development (DDA) Em outras palavras os recursos disponiacuteveis na interface de dados

foram desenhados pensando-se nas dependecircncias de dados na perspectiva de quem iraacute consumir os

dados

Os meacutetodos para acesso aos dados estatildeo distribuiacutedos em 3 grupos como na Ilustraccedilatildeo 2 O

grupo principal eacute o Consulta ao Cadastro onde eacute possiacutevel combinar filtros e acessar dados das

Unidades Cadastradoras e dados dos Fornecedores O grupo de Informaccedilotildees Baacutesicas possui meacutetodos

para consulta dos dados necessaacuterios para possibilitar a construccedilatildeo dos filtros nas Consultas ao

Cadastro Por exemplo nas informaccedilotildees baacutesicas estatildeo os coacutedigos para filtrar os fornecedores de um

municiacutepio especiacutefico ou de uma linha de fornecimento especiacutefica No grupo de Informaccedilotildees

Detalhadas do Fornecedor da Unidade Cadastradora ou de Municiacutepio

Os detalhes de cada meacutetodo como os campos de retorno foram definidos de acordo com o

propoacutesito do meacutetodo Vaacuterios dados de Fornecedor soacute podem ser acessados pelo meacutetodo no grupo de

Informaccedilotildees Detalhadas assim nas Consultas ao Cadastro estatildeo apenas dados baacutesicos reduzindo-se

o tamanho dos arquivos transmitidos A diversidade de formatos para cada consulta possibilita que o

usuaacuterio utilize o de menor tamanho o mais expressivo semanticamente ou o que se adapta melhor ao

seu sistema Todos os meacutetodos disponiacuteveis estatildeo listados na URL

httpapicomprasnetgovbrsicafdocmetodoshtml

26 Documentaccedilatildeo

Uma documentaccedilatildeo de qualidade e completa eacute extremamente importante Eacute na documentaccedilatildeo

Ilustraccedilatildeo 2 Documentaccedilatildeo da API listando todos os meacutetodos disponiacuteveis para consulta

929

que o usuaacuterio da API encontraraacute os detalhes teacutecnicos sobre os meios possiacuteveis de acessarem os dados

Mais detalhes garantem maior adesatildeo agrave plataforma de dados Na documentaccedilatildeo eacute preciso que se

esclareccedila toda e qualquer informaccedilatildeo que possa influenciar a implementaccedilatildeo da soluccedilatildeo que faraacute uso

dos dados Sugerimos que a documentaccedilatildeo forneccedila detalhes sobre

bull Lista de meacutetodos recursos tipos ou classes dos grupos de dados

bull Descriccedilatildeo textual esclarecendo o significado de cada meacutetodo recurso tipo ou classe de dados

bull Lista de campos que compotildee o resultado de consulta de cada meacutetodo recurso tipo ou classe

de dado

bull Lista de paracircmetros e valores se houver que possibilitam realizar filtros sobre o meacutetodo

recurso tipo ou classe de dados

bull Lista dos diferentes formatos para acesso aos dados

bull Informaccedilotildees sobre frequecircncia de atualizaccedilatildeo dos dados

bull Exemplo de consulta para cada meacutetodo recurso tipo ou classe de dados

bull Licenccedila se houver sob a qual os dados estatildeo publicados

A documentaccedilatildeo da API do SICAF estaacute disponiacutevel em httpapicomprasnetgovbrsicafdoc

trazendo informaccedilotildees gerais da plataforma Para cada meacutetodo ou recurso da API existe uma

documentaccedilatildeo especiacutefica por exemplo em httpapicomprasnetgovbrsicafdocfornecedoreshtml

27 Construccedilatildeo de metadados (RDF)

Foram realizadas uma seacuterie de reuniotildees com pessoas ligadas agrave aacuterea de negoacutecio correspondente

na DLSG nas quais foram coletadas informaccedilotildees que nos levaram a esboccedilar um vocabulaacuterio miacutenimo

para o SICAF que representasse os dados que seriam disponibilizados Nesse processo foi tomado o

cuidado de ligar as classes e propriedades modeladas a outros conceitos externos definidos em

vocabulaacuterios amplamente utilizados na comunidade internacional da web semacircntica

28 Sequecircncia de desenvolvimento

[O que deveria estar aqui]

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 6: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

629

2 Metodologia de desenvolvimento

21 Recursos

A SLTI possui um time dedicado ao desenvolvimento de accedilotildees focadas em Dados Abertos

que foi responsaacutevel pela gestatildeo e execuccedilatildeo deste projeto Com caraacuteter experimental um dos

principais objetivos para realizaccedilatildeo deste projeto foi absorver e relatar o aprendizado no

desenvolvimento do piloto Para isso o desenvolvimento foi todo realizado nas dependecircncias do

Ministeacuterio do Planejamento

A infraestrutura para o desenvolvimento e manutenccedilatildeo atual da ferramenta eacute uma instacircncia do

servidor virtualizado no Labcluster como parte integrante do projeto Software Puacuteblico Todos os

componentes utilizados satildeo softwares livres O sucesso do projeto confirma o potencial de

desenvolvimento de soluccedilotildees de dados abertos utilizando estritamente software livre

22 Desenvolvimento Aacutegil

O conjunto de requisitos e tecnologias envolvidas caracteriza o projeto como ambicioso e

inovador Juntando um cronograma com prazos apertados agrave falta de modelos especiacuteficos de

implementaccedilatildeo de dados abertos decidimos fazer uso de uma metodologia adequada afim de

minimizar o risco e maximizar o valor agregado ao software decidimos utilizar SCRUM A Ilustraccedilatildeo

1 resume as etapas da utilizaccedilatildeo de SCRUM

Um dos princiacutepios norteadores da metodologia aacutegil eacute a de que o cliente faz parte do time ele

estaacute comprometido com o sucesso do projeto o que demanda fortes interaccedilotildees em ciclos curtos No

paradigma de dados abertos a plataforma de dados provida pelo governo eacute para uso da sociedade

mas defendemos que o proacuteprio governo deve fazer uso desses dados enxergando esta como uma

plataforma de interoperabilidade intragoverno Nesse sentido gestores do Departamento de Logiacutestica

e Serviccedilos Gerais ndash DLSG ndash participaram intensamente no refinamento da aplicaccedilatildeo de acordo com

as cobranccedilas por dados percebidas

Eacute importante pontuar que a configuraccedilatildeo destes recursos com a metodologia aacutegil possibilitou

o desenvolvimento e implantaccedilatildeo da aplicaccedilatildeo em pouco mais de 2 meses

Ilustraccedilatildeo 1

Iteraccedilotildees e produtos no desenvolvimento aacutegil SCRUM

729

23 Gestatildeo do processo de abertura

Apesar de natildeo ser objetivo principal do projeto piloto eacute atribuiccedilatildeo fundamental da SLTI

orientar e apoiar os oacutergatildeos do SISP na gestatildeo com caraacuteter estrateacutegico do processo de abertura dos

dados

Um dos primeiros produtos desenvolvidos pelo time de dados abertos da SLTI foi um Guia

de Abertura de Dados o qual estaacute em consulta puacuteblica no portal de Governo Eletrocircnico

[httpswwwconsultasgovernoeletronicogovbrConsultasPublicasconsultasdoacao=exibirampid=9

3] O guia eacute um manual destinado aos gestores que querem iniciar o processo de abertura de dados

em suas instituiccedilotildees Nele satildeo elencados diversos atores envolvidos no processo de abertura desde o

responsaacutevel maacuteximo da instituiccedilatildeo o qual tem poder de autorizaccedilatildeo legal de abertura dos dados ateacute

o envolvimento com a sociedade considerado no paradigma de dados abertos o principal beneficiado

O manual tambeacutem define um macroprocesso para orquestraccedilatildeo da abertura sempre focando no que

eacute mais importante e agregador ao objetivo Tambeacutem satildeo citadas etapas importantes como processo de

anonimizaccedilatildeo e de classificaccedilatildeo das informaccedilotildees

O manual passou por um processo de amadurecimento com o objetivo de aprofundar os

detalhes de planejamento e operacionalizaccedilatildeo da abertura de dados fornecendo orientaccedilatildeo para que

as aacutereas de TI nos oacutergatildeos possam promover essa accedilatildeo como estrateacutegica em suas instituiccedilotildees Quando

do encaminhamento para consulta puacuteblica em 1ordm de setembro de 2011 ele passou a se chamar Guia

de Abertura de Dados

O Guia de Abertura de Dados eacute um produto previsto do GT1 da INDA Para aqueles que

necessitam de apoio e orientaccedilatildeo mais dedicada o time de dados abertos da SLTI pode ser solicitada

pelo endereccedilo httpc3ssispgovbr ou pelo e-mail sispplanejamentogovbr

24 Licenccedila dos dados

O projeto busca um alinhamento com todos os princiacutepios de dados abertos onde um deles

sugere que o dado deve ser livre de regulaccedilatildeo patente marca e tudo que restrinja seu reuso

Reconhecemos que ainda natildeo foram desenvolvidas licenccedilas especiacuteficas de dados abertos ideais

adaptadas ao contexto do governo brasileiro Dessa forma decidimos utilizar as Licenccedilas de Banco

de Dados Aberto (ODbL) e de Conteuacutedo de Banco de Dados Aberto (DbCL) Essas satildeo licenccedilas

livres escritas especificamente para dados Nessa direccedilatildeo dentro da Infraestrutura Nacional de Dados

Abertos que estaacute sendo construiacuteda estaacute prevista a implementaccedilatildeo de uma licenccedila de dados abertos

governamentais brasileira

A ODbL eacute uma licenccedila aberta segundo os criteacuterios da definiccedilatildeo de conhecimento aberto -

httpopendefinitionorg Isto eacute importante para garantir a interoperabilidade de licenccedilas com outros

dados abertos quando o usuaacuterio dos dados seja a sociedade ou o proacuteprio governo for fazer

cruzamento entre esses dados e outros

Bases de dados e bancos de dados tecircm algumas caracteriacutesticas especiacuteficas que as diferenciam

de conteuacutedo e por isso eacute necessaacuterio utilizar licenccedilas que satildeo especiacuteficas para utilizaccedilatildeo em bases de

dados Assim como haacute alguns anos considerando as diferenccedilas de caracteriacutesticas entre software e

conteuacutedo desenvolveu-se a licenccedila Creative Commons especificamente para licenciar conteuacutedo de

forma livre (considerando-se o sentido de livre em espiacuterito semelhante ao que a licenccedila GPL faz

para tornar o software livre)

A DBCL foi utilizada para o conteuacutedo dos dados pois segundo o OpenDataCommons FAQ

[2] direitos diferentes podem ser aplicaacuteveis agrave baseconjunto de dados como um todo e ao conteuacutedo

dos dados (Trecho da nossa reportagem para Wireless Mundi)

829

25 Definiccedilatildeo da Interface de dados

O principal objetivo do projeto eacute disponibilizar o acesso aos dados atraveacutes da Internet Isso

fica muito claro ao analisar a arquitetura da aplicaccedilatildeo no Capiacutetulo 3 onde a camada superior eacute uma

interface programaacutevel de acesso agrave dados abertos Essa caracteriacutestica inerente agraves arquiteturas de

softwares baseados na nuvem provoca um desenvolvimento orientado agrave dados mais conhecido como

Data Driven Development (DDA) Em outras palavras os recursos disponiacuteveis na interface de dados

foram desenhados pensando-se nas dependecircncias de dados na perspectiva de quem iraacute consumir os

dados

Os meacutetodos para acesso aos dados estatildeo distribuiacutedos em 3 grupos como na Ilustraccedilatildeo 2 O

grupo principal eacute o Consulta ao Cadastro onde eacute possiacutevel combinar filtros e acessar dados das

Unidades Cadastradoras e dados dos Fornecedores O grupo de Informaccedilotildees Baacutesicas possui meacutetodos

para consulta dos dados necessaacuterios para possibilitar a construccedilatildeo dos filtros nas Consultas ao

Cadastro Por exemplo nas informaccedilotildees baacutesicas estatildeo os coacutedigos para filtrar os fornecedores de um

municiacutepio especiacutefico ou de uma linha de fornecimento especiacutefica No grupo de Informaccedilotildees

Detalhadas do Fornecedor da Unidade Cadastradora ou de Municiacutepio

Os detalhes de cada meacutetodo como os campos de retorno foram definidos de acordo com o

propoacutesito do meacutetodo Vaacuterios dados de Fornecedor soacute podem ser acessados pelo meacutetodo no grupo de

Informaccedilotildees Detalhadas assim nas Consultas ao Cadastro estatildeo apenas dados baacutesicos reduzindo-se

o tamanho dos arquivos transmitidos A diversidade de formatos para cada consulta possibilita que o

usuaacuterio utilize o de menor tamanho o mais expressivo semanticamente ou o que se adapta melhor ao

seu sistema Todos os meacutetodos disponiacuteveis estatildeo listados na URL

httpapicomprasnetgovbrsicafdocmetodoshtml

26 Documentaccedilatildeo

Uma documentaccedilatildeo de qualidade e completa eacute extremamente importante Eacute na documentaccedilatildeo

Ilustraccedilatildeo 2 Documentaccedilatildeo da API listando todos os meacutetodos disponiacuteveis para consulta

929

que o usuaacuterio da API encontraraacute os detalhes teacutecnicos sobre os meios possiacuteveis de acessarem os dados

Mais detalhes garantem maior adesatildeo agrave plataforma de dados Na documentaccedilatildeo eacute preciso que se

esclareccedila toda e qualquer informaccedilatildeo que possa influenciar a implementaccedilatildeo da soluccedilatildeo que faraacute uso

dos dados Sugerimos que a documentaccedilatildeo forneccedila detalhes sobre

bull Lista de meacutetodos recursos tipos ou classes dos grupos de dados

bull Descriccedilatildeo textual esclarecendo o significado de cada meacutetodo recurso tipo ou classe de dados

bull Lista de campos que compotildee o resultado de consulta de cada meacutetodo recurso tipo ou classe

de dado

bull Lista de paracircmetros e valores se houver que possibilitam realizar filtros sobre o meacutetodo

recurso tipo ou classe de dados

bull Lista dos diferentes formatos para acesso aos dados

bull Informaccedilotildees sobre frequecircncia de atualizaccedilatildeo dos dados

bull Exemplo de consulta para cada meacutetodo recurso tipo ou classe de dados

bull Licenccedila se houver sob a qual os dados estatildeo publicados

A documentaccedilatildeo da API do SICAF estaacute disponiacutevel em httpapicomprasnetgovbrsicafdoc

trazendo informaccedilotildees gerais da plataforma Para cada meacutetodo ou recurso da API existe uma

documentaccedilatildeo especiacutefica por exemplo em httpapicomprasnetgovbrsicafdocfornecedoreshtml

27 Construccedilatildeo de metadados (RDF)

Foram realizadas uma seacuterie de reuniotildees com pessoas ligadas agrave aacuterea de negoacutecio correspondente

na DLSG nas quais foram coletadas informaccedilotildees que nos levaram a esboccedilar um vocabulaacuterio miacutenimo

para o SICAF que representasse os dados que seriam disponibilizados Nesse processo foi tomado o

cuidado de ligar as classes e propriedades modeladas a outros conceitos externos definidos em

vocabulaacuterios amplamente utilizados na comunidade internacional da web semacircntica

28 Sequecircncia de desenvolvimento

[O que deveria estar aqui]

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 7: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

729

23 Gestatildeo do processo de abertura

Apesar de natildeo ser objetivo principal do projeto piloto eacute atribuiccedilatildeo fundamental da SLTI

orientar e apoiar os oacutergatildeos do SISP na gestatildeo com caraacuteter estrateacutegico do processo de abertura dos

dados

Um dos primeiros produtos desenvolvidos pelo time de dados abertos da SLTI foi um Guia

de Abertura de Dados o qual estaacute em consulta puacuteblica no portal de Governo Eletrocircnico

[httpswwwconsultasgovernoeletronicogovbrConsultasPublicasconsultasdoacao=exibirampid=9

3] O guia eacute um manual destinado aos gestores que querem iniciar o processo de abertura de dados

em suas instituiccedilotildees Nele satildeo elencados diversos atores envolvidos no processo de abertura desde o

responsaacutevel maacuteximo da instituiccedilatildeo o qual tem poder de autorizaccedilatildeo legal de abertura dos dados ateacute

o envolvimento com a sociedade considerado no paradigma de dados abertos o principal beneficiado

O manual tambeacutem define um macroprocesso para orquestraccedilatildeo da abertura sempre focando no que

eacute mais importante e agregador ao objetivo Tambeacutem satildeo citadas etapas importantes como processo de

anonimizaccedilatildeo e de classificaccedilatildeo das informaccedilotildees

O manual passou por um processo de amadurecimento com o objetivo de aprofundar os

detalhes de planejamento e operacionalizaccedilatildeo da abertura de dados fornecendo orientaccedilatildeo para que

as aacutereas de TI nos oacutergatildeos possam promover essa accedilatildeo como estrateacutegica em suas instituiccedilotildees Quando

do encaminhamento para consulta puacuteblica em 1ordm de setembro de 2011 ele passou a se chamar Guia

de Abertura de Dados

O Guia de Abertura de Dados eacute um produto previsto do GT1 da INDA Para aqueles que

necessitam de apoio e orientaccedilatildeo mais dedicada o time de dados abertos da SLTI pode ser solicitada

pelo endereccedilo httpc3ssispgovbr ou pelo e-mail sispplanejamentogovbr

24 Licenccedila dos dados

O projeto busca um alinhamento com todos os princiacutepios de dados abertos onde um deles

sugere que o dado deve ser livre de regulaccedilatildeo patente marca e tudo que restrinja seu reuso

Reconhecemos que ainda natildeo foram desenvolvidas licenccedilas especiacuteficas de dados abertos ideais

adaptadas ao contexto do governo brasileiro Dessa forma decidimos utilizar as Licenccedilas de Banco

de Dados Aberto (ODbL) e de Conteuacutedo de Banco de Dados Aberto (DbCL) Essas satildeo licenccedilas

livres escritas especificamente para dados Nessa direccedilatildeo dentro da Infraestrutura Nacional de Dados

Abertos que estaacute sendo construiacuteda estaacute prevista a implementaccedilatildeo de uma licenccedila de dados abertos

governamentais brasileira

A ODbL eacute uma licenccedila aberta segundo os criteacuterios da definiccedilatildeo de conhecimento aberto -

httpopendefinitionorg Isto eacute importante para garantir a interoperabilidade de licenccedilas com outros

dados abertos quando o usuaacuterio dos dados seja a sociedade ou o proacuteprio governo for fazer

cruzamento entre esses dados e outros

Bases de dados e bancos de dados tecircm algumas caracteriacutesticas especiacuteficas que as diferenciam

de conteuacutedo e por isso eacute necessaacuterio utilizar licenccedilas que satildeo especiacuteficas para utilizaccedilatildeo em bases de

dados Assim como haacute alguns anos considerando as diferenccedilas de caracteriacutesticas entre software e

conteuacutedo desenvolveu-se a licenccedila Creative Commons especificamente para licenciar conteuacutedo de

forma livre (considerando-se o sentido de livre em espiacuterito semelhante ao que a licenccedila GPL faz

para tornar o software livre)

A DBCL foi utilizada para o conteuacutedo dos dados pois segundo o OpenDataCommons FAQ

[2] direitos diferentes podem ser aplicaacuteveis agrave baseconjunto de dados como um todo e ao conteuacutedo

dos dados (Trecho da nossa reportagem para Wireless Mundi)

829

25 Definiccedilatildeo da Interface de dados

O principal objetivo do projeto eacute disponibilizar o acesso aos dados atraveacutes da Internet Isso

fica muito claro ao analisar a arquitetura da aplicaccedilatildeo no Capiacutetulo 3 onde a camada superior eacute uma

interface programaacutevel de acesso agrave dados abertos Essa caracteriacutestica inerente agraves arquiteturas de

softwares baseados na nuvem provoca um desenvolvimento orientado agrave dados mais conhecido como

Data Driven Development (DDA) Em outras palavras os recursos disponiacuteveis na interface de dados

foram desenhados pensando-se nas dependecircncias de dados na perspectiva de quem iraacute consumir os

dados

Os meacutetodos para acesso aos dados estatildeo distribuiacutedos em 3 grupos como na Ilustraccedilatildeo 2 O

grupo principal eacute o Consulta ao Cadastro onde eacute possiacutevel combinar filtros e acessar dados das

Unidades Cadastradoras e dados dos Fornecedores O grupo de Informaccedilotildees Baacutesicas possui meacutetodos

para consulta dos dados necessaacuterios para possibilitar a construccedilatildeo dos filtros nas Consultas ao

Cadastro Por exemplo nas informaccedilotildees baacutesicas estatildeo os coacutedigos para filtrar os fornecedores de um

municiacutepio especiacutefico ou de uma linha de fornecimento especiacutefica No grupo de Informaccedilotildees

Detalhadas do Fornecedor da Unidade Cadastradora ou de Municiacutepio

Os detalhes de cada meacutetodo como os campos de retorno foram definidos de acordo com o

propoacutesito do meacutetodo Vaacuterios dados de Fornecedor soacute podem ser acessados pelo meacutetodo no grupo de

Informaccedilotildees Detalhadas assim nas Consultas ao Cadastro estatildeo apenas dados baacutesicos reduzindo-se

o tamanho dos arquivos transmitidos A diversidade de formatos para cada consulta possibilita que o

usuaacuterio utilize o de menor tamanho o mais expressivo semanticamente ou o que se adapta melhor ao

seu sistema Todos os meacutetodos disponiacuteveis estatildeo listados na URL

httpapicomprasnetgovbrsicafdocmetodoshtml

26 Documentaccedilatildeo

Uma documentaccedilatildeo de qualidade e completa eacute extremamente importante Eacute na documentaccedilatildeo

Ilustraccedilatildeo 2 Documentaccedilatildeo da API listando todos os meacutetodos disponiacuteveis para consulta

929

que o usuaacuterio da API encontraraacute os detalhes teacutecnicos sobre os meios possiacuteveis de acessarem os dados

Mais detalhes garantem maior adesatildeo agrave plataforma de dados Na documentaccedilatildeo eacute preciso que se

esclareccedila toda e qualquer informaccedilatildeo que possa influenciar a implementaccedilatildeo da soluccedilatildeo que faraacute uso

dos dados Sugerimos que a documentaccedilatildeo forneccedila detalhes sobre

bull Lista de meacutetodos recursos tipos ou classes dos grupos de dados

bull Descriccedilatildeo textual esclarecendo o significado de cada meacutetodo recurso tipo ou classe de dados

bull Lista de campos que compotildee o resultado de consulta de cada meacutetodo recurso tipo ou classe

de dado

bull Lista de paracircmetros e valores se houver que possibilitam realizar filtros sobre o meacutetodo

recurso tipo ou classe de dados

bull Lista dos diferentes formatos para acesso aos dados

bull Informaccedilotildees sobre frequecircncia de atualizaccedilatildeo dos dados

bull Exemplo de consulta para cada meacutetodo recurso tipo ou classe de dados

bull Licenccedila se houver sob a qual os dados estatildeo publicados

A documentaccedilatildeo da API do SICAF estaacute disponiacutevel em httpapicomprasnetgovbrsicafdoc

trazendo informaccedilotildees gerais da plataforma Para cada meacutetodo ou recurso da API existe uma

documentaccedilatildeo especiacutefica por exemplo em httpapicomprasnetgovbrsicafdocfornecedoreshtml

27 Construccedilatildeo de metadados (RDF)

Foram realizadas uma seacuterie de reuniotildees com pessoas ligadas agrave aacuterea de negoacutecio correspondente

na DLSG nas quais foram coletadas informaccedilotildees que nos levaram a esboccedilar um vocabulaacuterio miacutenimo

para o SICAF que representasse os dados que seriam disponibilizados Nesse processo foi tomado o

cuidado de ligar as classes e propriedades modeladas a outros conceitos externos definidos em

vocabulaacuterios amplamente utilizados na comunidade internacional da web semacircntica

28 Sequecircncia de desenvolvimento

[O que deveria estar aqui]

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 8: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

829

25 Definiccedilatildeo da Interface de dados

O principal objetivo do projeto eacute disponibilizar o acesso aos dados atraveacutes da Internet Isso

fica muito claro ao analisar a arquitetura da aplicaccedilatildeo no Capiacutetulo 3 onde a camada superior eacute uma

interface programaacutevel de acesso agrave dados abertos Essa caracteriacutestica inerente agraves arquiteturas de

softwares baseados na nuvem provoca um desenvolvimento orientado agrave dados mais conhecido como

Data Driven Development (DDA) Em outras palavras os recursos disponiacuteveis na interface de dados

foram desenhados pensando-se nas dependecircncias de dados na perspectiva de quem iraacute consumir os

dados

Os meacutetodos para acesso aos dados estatildeo distribuiacutedos em 3 grupos como na Ilustraccedilatildeo 2 O

grupo principal eacute o Consulta ao Cadastro onde eacute possiacutevel combinar filtros e acessar dados das

Unidades Cadastradoras e dados dos Fornecedores O grupo de Informaccedilotildees Baacutesicas possui meacutetodos

para consulta dos dados necessaacuterios para possibilitar a construccedilatildeo dos filtros nas Consultas ao

Cadastro Por exemplo nas informaccedilotildees baacutesicas estatildeo os coacutedigos para filtrar os fornecedores de um

municiacutepio especiacutefico ou de uma linha de fornecimento especiacutefica No grupo de Informaccedilotildees

Detalhadas do Fornecedor da Unidade Cadastradora ou de Municiacutepio

Os detalhes de cada meacutetodo como os campos de retorno foram definidos de acordo com o

propoacutesito do meacutetodo Vaacuterios dados de Fornecedor soacute podem ser acessados pelo meacutetodo no grupo de

Informaccedilotildees Detalhadas assim nas Consultas ao Cadastro estatildeo apenas dados baacutesicos reduzindo-se

o tamanho dos arquivos transmitidos A diversidade de formatos para cada consulta possibilita que o

usuaacuterio utilize o de menor tamanho o mais expressivo semanticamente ou o que se adapta melhor ao

seu sistema Todos os meacutetodos disponiacuteveis estatildeo listados na URL

httpapicomprasnetgovbrsicafdocmetodoshtml

26 Documentaccedilatildeo

Uma documentaccedilatildeo de qualidade e completa eacute extremamente importante Eacute na documentaccedilatildeo

Ilustraccedilatildeo 2 Documentaccedilatildeo da API listando todos os meacutetodos disponiacuteveis para consulta

929

que o usuaacuterio da API encontraraacute os detalhes teacutecnicos sobre os meios possiacuteveis de acessarem os dados

Mais detalhes garantem maior adesatildeo agrave plataforma de dados Na documentaccedilatildeo eacute preciso que se

esclareccedila toda e qualquer informaccedilatildeo que possa influenciar a implementaccedilatildeo da soluccedilatildeo que faraacute uso

dos dados Sugerimos que a documentaccedilatildeo forneccedila detalhes sobre

bull Lista de meacutetodos recursos tipos ou classes dos grupos de dados

bull Descriccedilatildeo textual esclarecendo o significado de cada meacutetodo recurso tipo ou classe de dados

bull Lista de campos que compotildee o resultado de consulta de cada meacutetodo recurso tipo ou classe

de dado

bull Lista de paracircmetros e valores se houver que possibilitam realizar filtros sobre o meacutetodo

recurso tipo ou classe de dados

bull Lista dos diferentes formatos para acesso aos dados

bull Informaccedilotildees sobre frequecircncia de atualizaccedilatildeo dos dados

bull Exemplo de consulta para cada meacutetodo recurso tipo ou classe de dados

bull Licenccedila se houver sob a qual os dados estatildeo publicados

A documentaccedilatildeo da API do SICAF estaacute disponiacutevel em httpapicomprasnetgovbrsicafdoc

trazendo informaccedilotildees gerais da plataforma Para cada meacutetodo ou recurso da API existe uma

documentaccedilatildeo especiacutefica por exemplo em httpapicomprasnetgovbrsicafdocfornecedoreshtml

27 Construccedilatildeo de metadados (RDF)

Foram realizadas uma seacuterie de reuniotildees com pessoas ligadas agrave aacuterea de negoacutecio correspondente

na DLSG nas quais foram coletadas informaccedilotildees que nos levaram a esboccedilar um vocabulaacuterio miacutenimo

para o SICAF que representasse os dados que seriam disponibilizados Nesse processo foi tomado o

cuidado de ligar as classes e propriedades modeladas a outros conceitos externos definidos em

vocabulaacuterios amplamente utilizados na comunidade internacional da web semacircntica

28 Sequecircncia de desenvolvimento

[O que deveria estar aqui]

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 9: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

929

que o usuaacuterio da API encontraraacute os detalhes teacutecnicos sobre os meios possiacuteveis de acessarem os dados

Mais detalhes garantem maior adesatildeo agrave plataforma de dados Na documentaccedilatildeo eacute preciso que se

esclareccedila toda e qualquer informaccedilatildeo que possa influenciar a implementaccedilatildeo da soluccedilatildeo que faraacute uso

dos dados Sugerimos que a documentaccedilatildeo forneccedila detalhes sobre

bull Lista de meacutetodos recursos tipos ou classes dos grupos de dados

bull Descriccedilatildeo textual esclarecendo o significado de cada meacutetodo recurso tipo ou classe de dados

bull Lista de campos que compotildee o resultado de consulta de cada meacutetodo recurso tipo ou classe

de dado

bull Lista de paracircmetros e valores se houver que possibilitam realizar filtros sobre o meacutetodo

recurso tipo ou classe de dados

bull Lista dos diferentes formatos para acesso aos dados

bull Informaccedilotildees sobre frequecircncia de atualizaccedilatildeo dos dados

bull Exemplo de consulta para cada meacutetodo recurso tipo ou classe de dados

bull Licenccedila se houver sob a qual os dados estatildeo publicados

A documentaccedilatildeo da API do SICAF estaacute disponiacutevel em httpapicomprasnetgovbrsicafdoc

trazendo informaccedilotildees gerais da plataforma Para cada meacutetodo ou recurso da API existe uma

documentaccedilatildeo especiacutefica por exemplo em httpapicomprasnetgovbrsicafdocfornecedoreshtml

27 Construccedilatildeo de metadados (RDF)

Foram realizadas uma seacuterie de reuniotildees com pessoas ligadas agrave aacuterea de negoacutecio correspondente

na DLSG nas quais foram coletadas informaccedilotildees que nos levaram a esboccedilar um vocabulaacuterio miacutenimo

para o SICAF que representasse os dados que seriam disponibilizados Nesse processo foi tomado o

cuidado de ligar as classes e propriedades modeladas a outros conceitos externos definidos em

vocabulaacuterios amplamente utilizados na comunidade internacional da web semacircntica

28 Sequecircncia de desenvolvimento

[O que deveria estar aqui]

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 10: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1029

3 O Sistema

31 Arquitetura do sistema

O sistema Dados Abertos SICAF eacute um serviccedilo de acesso a dados disponiacutevel na Internet A

imagem a seguir descreve o sistema interagindo com outros componentes o SICAF em produccedilatildeo que

manteacutem os dados originais e vaacuterios aplicativos que por sua vez fazem uso dos dados abertos

cruzando-os com outros dados e gerando novas visualizaccedilotildees e serviccedilos

O projeto do sistema segue os princiacutepios REST fazendo uso extenso da arquitetura Web o

que possibilita a incorporaccedilatildeo de diversas tecnologias beneficiadas do amadurecimento dos

servidores web de documentos e conteuacutedos Exemplos desses benefiacutecios satildeo cache no servidor web

compactaccedilatildeo dos arquivos trocados de forma transparante dentre outros

311 Funcionamento independente do sistema de produccedilatildeo

O sistema Dados Abertos SICAF foi projetado para funcionamento independente do sistema

de produccedilatildeo SICAFWeb como visto na Ilustraccedilatildeo 3 Apesar de ambos estarem referenciados pelo

mesmo domiacutenio principal comprasnetgovbr cada um eacute mantido em ambiente isolado e

independente Este desacoplamento traz uma seacuterie de benefiacutecios o Dados Abertos SICAF possui base

de dados proacutepria o que possibilita estrateacutegias de tunning especiacuteficas para as consultas

disponibilizadas a incorporaccedilatildeo de dados geograacuteficos persistentes e evita que o excesso de consultas

aos dados abertos afete o SICAFWeb em produccedilatildeo A integraccedilatildeo entre as bases para atualizaccedilatildeo dos

dados abertos eacute feita por um moacutedulo de replicaccedilatildeo que atua diretamente no banco de dados onde eacute

executada a seleccedilatildeo dos dados detalhado na seccedilatildeo 17

A separaccedilatildeo possibilita que os serviccedilos executem em ambientes de infraestrutura

independentes Com essa separaccedilatildeo regras de seguranccedila podem ser simplificadas no sistema de dados

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 11: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1129

abertos uma vez que a proposta eacute fornecer acesso irrestrito aos dados desta base

312 Arquitetura da Web

No desenvolvimento da API foram seguidos os princiacutepios de Representational State Transfer

ndash REST defendidos na tese de doutorado de Roy Fielding compreendem as caracteriacutesticas essenciais

da web que a tornaram uma plataforma de sucesso O estilo REST de arquitetura para serviccedilos web

utiliza os mesmos protocolos da web (HTTP) e visa uma maior escalabilidade do sistema por uma

seacuterie de medidas

Uma delas eacute armazenar o estado da aplicaccedilatildeo no cliente e natildeo no servidor Isso permite que

mais noacutes seja acrescentados agrave aplicaccedilatildeo caso seja necessaacuterio para comportar um aumento no volume

de solicitaccedilotildees recebidas sem que haja a necessidade de se manter a comunicaccedilatildeo entre os noacutes

servidores acerca do estado da aplicaccedilatildeo para cada cliente No caso de uma aplicaccedilatildeo implantada em

noacutes distribuiacutedos a falta de estado combinada agrave distribuiccedilatildeo dos noacutes em infraestruturas independente

proporciona adicionalmente a vantagem de toleracircncia a falhas

Outro benefiacutecio desse estilo de arquitetura eacute possibilitar o gerenciamento de cache no

servidor em proxies intermediaacuterios e nos clientes visando para otimizar o traacutefego de dados

redundantes na rede O proacuteprio protocolo HTTP provecirc os mecanismos para que sejam informadas as

situaccedilotildees em que o cache pode ser utilizado com seguranccedila bem como as situaccedilotildees em que ele deve

ser renovado com novos dados a partir da origem

Outra caracteriacutestica eacute que as informaccedilotildees necessaacuterias para as proacuteximas requisiccedilotildees encontram-

se representadas dentro do documento recebido em cada solicitaccedilatildeo Este princiacutepio chamado de

Hypermedia as the Engine of Application State (Hipermiacutedia como o Motor do Estado da Aplicaccedilatildeo)

preconiza que seja qual for o formato do documento (ex html xml json) ele deve prover links para

as proacuteximas requisiccedilotildees possiacuteveis que possam interessar ao cliente Esta caracteriacutestica traz a vantagem

de enfraquecer o acomplamento entre o cliente e a versatildeo do serviccedilo uma vez que se o cliente

consome os endereccedilos a ele fornecidos pelo servidor ele natildeo seria quebrado pela possiacutevel alteraccedilatildeo

desses endereccedilos

Haacute ainda a possibilidade de se utilizar a compactaccedilatildeo transparente de dados durante a

transmissatildeo nos casos em que for verificado pelo servidor que essa funcionalidade eacute suportada nos

clientes

O uso de uma arquitetura REST para serviccedilos web visa aproveitar neles os benefiacutecios

proporcionados pela arquitetura Web e pelo protocolo HTTP

32 Estrutura de persistecircncia dos dados (MER)

Esta seccedilatildeo foi intencionalmente descrita separadamente da arquitetura do sistema O objetivo

eacute separar a arquitetura modelo da implementaccedilatildeo especiacutefica do caso Dados Abertos SICAF

O modelo entidade relacional abaixo eacute uma simplificaccedilatildeo do modelo entidade relacional do

SICAF em produccedilatildeo Do modelo inicial foram removidos dados que natildeo satildeo puacuteblicos dados de

controle interno das transaccedilotildees do sistema em produccedilatildeo e dados irrelevantes Nesta etapa do projeto

a simplicidade foi tomada como norma e a incorporaccedilatildeo de novas tabelas foi analisada uma a uma

Em alguns casos houve desnormalizaccedilatildeo considerando a simplicidade sem onerar o desempenho

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 12: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1229

33 Moacutedulos

331 Interface de acesso aos dados

O acesso eacute feito pela internet utilizando o protocolo HTTP a partir de uma requisiccedilatildeo a URLs

especiacuteficas para o tipo de consulta desejado conforme especificadas na documentaccedilatildeo do sistema

Como o acesso utiliza protocolos da web e formatos e padrotildees abertos e amplamente

conhecidos haacute uma ampla gama de ferramentas e bibliotecas em muitas linguagens de programaccedilatildeo

que permitem a utilizaccedilatildeo dos dados de forma simples

3311 Padratildeo de construccedilatildeo de URL de consulta

As URLs do serviccedilo se dividem em dois grupos

bull aquelas que retornam informaccedilotildees sobre algum tipo individual de objeto seguindo os

princiacutepios de Linked Data detalhadas na proacutexima seccedilatildeo e

bull aquelas que chamam uma API que retorna informaccedilotildees sobre um conjunto de objetos do

mesmo tipo filtrados opcionalmente por uma seacuterie de paracircmetros

A praacutetica em que se utiliza uma URI para identificar um objeto fiacutesico ou abstrato que redire-

ciona para uma URL que retorna um documento com informaccedilotildees sobre objeto bem como o uso da

Ilustraccedilatildeo 4 Modelo Entidade Relacional do banco de dados da API

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 13: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1329

negociaccedilatildeo de conteuacutedo HTTP estatildeo condizentes com o que preconiza o W3C no documento ldquoCool

URIs for the Semantic Webrdquo Cabe ainda observar que esse princiacutepio eacute tambeacutem utilizado na iniciativa

de dados abertos ligados do Reino Unido a qual estaacute descrita no documento ldquoDesigning URIs for the

Public Sectorrdquo

As URLs das consultas agrave API seguem a forma httpapicomprasnetgovbrsi-cafversaoconsultametodoformatofiltro-1=valor-1ampfiltro-2=valor-

2amphellipampfiltro-n=valor-n sendo o formato e os filtros opcionais Se o formato natildeo for especi-

ficado o servidor realizaraacute negociaccedilatildeo de conteuacutedo HTTP para escolher um formato Se nenhum

filtro for especificado seratildeo retornados todos os registros respeitado o limite maacuteximo na quantidade

de registros por requisiccedilatildeo A lista de meacutetodos disponiacuteveis na API pode ser consultada na documen-

taccedilatildeo do sistema disponiacutevel no endereccedilo httpapicomprasnetgovbrsicafdoc ou ainda

em forma processaacutevel por maacutequina a partir do endereccedilo httpapicomprasnetgovbrsi-

cafv1consulta

3312 Exemplos de consulta

Abaixo segue uma lista do conteuacutedo resultante de algumas consultas

bull Consulta dos municiacutepios do estado de Pernambuco que contenha ldquoadosrdquo como parte do nome

em formato xml

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PEampnome=ados

ltmunicipiosgt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio23019 id=23019gt

ltcod_ibgegt2600104ltcod_ibgegt

ltnomegtAfogados da Ingazeiraltnomegt

ltgeonameIdgt3408274ltgeonameIdgt

ltgeo_pontogt

ltlatgt-7736764ltlatgt

ltlongt-37619728ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

lt municipio href=httpapicomprasnetgovbrsicafidmunicipio24813 id=24813gt

ltcod_ibgegt2609105ltcod_ibgegt

ltnomegtMachadosltnomegt

ltgeo_pontogt

ltlatgt-7703749ltlatgt

ltlongt-35500524ltlongt

ltgeo_pontogt

ltuf_nomegtPERNAMBUCOltuf_nomegt

ltufgtPEltufgt

ltmunicipiogt

ltmunicipiosgt

bull Consulta das Unidades Cadastradoras do Distrito Federal que contenha ldquoapoiordquo como parte

do nome e em formato csv

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorascsvuf=DFamp

nome=apoio

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 14: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1429

iduricepddddescricao_enderecofaxgeo_pontolatgeo_pontolonmunicipionome

nome_mnemonicoorgaoramalramal2telefonetelefone2total_forntotal_recad

330086httpapicomprasnetgovbrsicafidunidade_cadastradora3300867005990

0ESPLANDA DOS MINISTERIOS BLOCO F 2ordm ANDAR SALA 249 NEXO ALA A-

158081634-478813175ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtPROJETO DE APOIO A

REESTRUT DO SIST PREVIVPROASPMPSltobjeto

httpapicomprasnetgovbrsicafidorgao33000gt00

120006httpapicomprasnetgovbrsicafidunidade_cadastradora1200067004590

061ESPLANADA DOS MINISTERIOS BL M - ED ANEXO - TERREO-

158083615287-478813775145ltobjeto

httpapicomprasnetgovbrsicafidmunicipio97012gtMAER-GAPBR-GRUPAMENTO DE

APOIO DE BRASILIADFGAPBRltobjeto

httpapicomprasnetgovbrsicafidorgao52111gt2023261120232611325

bull Consulta de Fornecedores do municiacutepio Juina ndash MT (id=98310) e que forneccedila equipamentos

de cemiteacuterios (id=702) em formato JSON

httpapicomprasnetgovbrsicafv1consultafornecedoresjsonid_municipio=98

310ampid_linha_fornecimento=702

metadados

total_registros1

fornecedores[

cnpj8562676000180

unidade_cadastradora

UnidadeCadastradora

hrefhttpapicomprasnetgovbrsicafidunidade_cadastradora255022

id255022

nomeC L PAGNUSSATT - ME

cod_cnaenull

porte_empresa

PorteEmpresa

hrefhttpapicomprasnetgovbrsicafidporte_empresa5

id5

ramo_negocio

RamoNegocio

hrefhttpapicomprasnetgovbrsicafidramo_negocio49

id49

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 15: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1529

hrefhttpapicomprasnetgovbrsicafidfornecedor_pj119776

natureza_juridica

NaturezaJuridica

hrefhttpapicomprasnetgovbrsicafidnatureza_juridica1

id1

linhas_fornecimento[

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento1121

id1121

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento645

id645

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento702

id702

LinhaFornecimento

hrefhttpapicomprasnetgovbrsicafidlinha_fornecimento2950

id2950

]

endereco

bairroCENTRO

logradouroAV MATO GROSSO 148

municipio

Municipio

hrefhttpapicomprasnetgovbrsicafidmunicipio98310

id98310

cep78320000

cod_cnae2null

id119776

recadastradofalse

]

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 16: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1629

3313 Padratildeo de URI para recursos

As URIs que identificam recursos individuais seguem o padratildeo httpapicompras-

netgovbrsicafidclasseidentificador para identificarr objetos especiacuteficos Esses

satildeo recursos natildeo-informacionais que quando acessados redirecionam a requisiccedilatildeo pelo coacutedigo HTTP

303 para uma URL de documento (um recurso informacional) da forma httpapicompras-

netgovbrsicafdocclasseidentificador o qual representa um documento que con-

teacutem informaccedilotildees sobre o objeto identificado Quando esse recurso for solicitado por um cliente seraacute

realizada pelo servidor uma negociaccedilatildeo de conteuacutedo HTTP (ver RFC 2616 que define o protocolo

HTTP 11) Dessa negociaccedilatildeo de conteuacutedo baseada no cabeccedilalho Accept da requisiccedilatildeo resultaraacute no

formato preferido pelo cliente dentre os suportados pelo servidor Haveraacute entatildeo mais um redirecio-

namento acrescentando o trecho formato ao final da URL que representa o referido documento

em um formato especiacutefico

3314 Implementaccedilatildeo RESTful

A Interface de Programaccedilatildeo de Aplicaccedilotildees (API) implementada no piloto de Dados Abertos

do SICAF segue o estilo REST (REpresentational State Transfer) de webservices ou seja uma

arquitetura alinhada agrave Web como descrito na Seccedilatildeo 11

Procurou-se seguindo as boas praacuteticas de serviccedilos web RESTful construir as URIs de

consultas e de identificaccedilatildeo dos conceitos a partir de segmentos ldquoamigaacuteveisrdquo Isto eacute visou-se fazer

com que um ser humano ao visualizar a estrutura da URI pudesse tirar conclusotildees antecipadas acerca

da natureza dos dados que seriam retornados

Naturalmente como todos os meacutetodos da API satildeo somente para a consulta e natildeo alteram

estado seguindo as recomendaccedilotildees do protocolo HTTP e ainda para possibilitar o uso de cache na

aplicaccedilatildeo usou-se somente o verbo GET desse protocolo para realizar toda e qualquer consulta

Seguiu-se tambeacutem o princiacutepio da Hipermiacutedia como o Estado da Aplicaccedilatildeo do estilo de

arquitetura REST ao disponibilizar no corpo dos documentos enviados como resposta agraves requisiccedilotildees

HTTP hyperlinks para outros documentos que possam ser relevantes no contexto Por exemplo na

consulta agraves informaccedilotildees de um dado municiacutepio satildeo fornecidos os links para as consultas de

fornecedores naquele municiacutepio e de unidades cadastradoras presentes naquele municiacutepio Outros

links que podem estar presentes satildeo aqueles que apontam para a consulta agrave proacutexima paacutegina no caso

do resultado ser paginado Esses exemplos podem ser conferidos nos coacutedigos exibidos na Seccedilatildeo 13

3315 Funcionamento em poucas palavras

A aplicaccedilatildeo tem seu funcionamento semelhante a qualquer outra aplicaccedilatildeo web As consultas

aos dados satildeo feitas atraveacutes de requisiccedilotildees GET com o protocolo HTTP

A URL submetida carrega informaccedilotildees sobre qual o dado solicitado quais filtros a serem

aplicados no banco de dados e qual o formato do arquivo que seraacute retornado Por exemplo

httpapicomprasnetgovbrsicafv1consultamunicipiosxmluf=PE retorna um arquivo xml

contendo dados de todos os municiacutepios do estado de Pernambuco

O servidor web Apache neste caso avalia em sua estrateacutegia de cache se haacute o recurso pronto

para retornar se natildeo a requisiccedilatildeo eacute transferia para a aplicaccedilatildeo

A aplicaccedilatildeo processa a URL de consulta e extrai os paracircmetros formato de retorno tipo de

dado e conjunto de filtros

A camada superior executa o meacutetodo especiacutefico submetendo os paracircmetros na camada de

negoacutecio responsaacutevel por extrair o conjunto de dados especificado

O acesso aos dados eacute abstraiacutedo por uma biblioteca de mapeamento objeto relacional

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 17: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1729

O conjunto de dados eacute entatildeo serializado no formato solicitado

Sobre esse resultado eacute calculado um resumo criptograacutefico (hash) o qual eacute denominado e-Tag

no protocolo HTTP A aplicaccedilatildeo verifica se a requisiccedilatildeo passada foi um GET condicional e se foi

informado um valor de e-Tag presente no cache do cliente Caso exista esse valor e ele coincida com

o e-Tag calculado o servidor economiza banda de transmissatildeo enviando uma resposta sem corpo

com status 304 (Natildeo modificado) Essa resposta serve para indicar ao cliente que a sua coacutepia de cache

ainda eacute vaacutelida e atual

A aplicaccedilatildeo verifica se o cliente indicou pelos cabeccedilalhos da requisiccedilatildeo HTTP suportar a

compactaccedilatildeo da informaccedilatildeo em formato gzip Em caso afirmativo o corpo da resposta eacute compactado

antes do envio

A resposta eacute repassada para o servidor web

Caso a resposta natildeo apresente qualquer anormalidade isto eacute possua o status 200 (OK) o

servidor web a armazena em cache para consultas posteriores

Por uacuteltimo o cliente recebe o arquivo como retorno da requisiccedilatildeo HTTP Se necessaacuterio o

servidor dispotildee dos coacutedigos de retorno HTTP para expressar comportamentos adversos

332 Replicaccedilatildeo dos dados

O moacutedulo de replicaccedilatildeo eacute responsaacutevel por popular o banco de dados da aplicaccedilatildeo com os

dados devidamente selecionados Este processo eacute executado diretamente no banco de dados

independendo do serviccedilo de consulta aos dados A implementaccedilatildeo foi feita estritamente com scripts

SQL especiacuteficos para o PostgreSQL

Diferentemente do moacutedulo de acesso aos dados este processo eacute extremamente acoplado agrave

tecnologia utilizada ou seja a linguagem de script do PostgreSQL Essa abordagem natildeo eacute

recomendada pois enrijece a arquitetura dificultado a extensibilidade e portabilidade

O procedimento de replicaccedilatildeo eacute semelhante agrave tarefas ETL ou seja extraccedilatildeo transformaccedilatildeo e

carga dos dados Recomendamos a utilizaccedilatildeo de ferramentas de alto niacutevel para este tipo de integraccedilatildeo

de base de dados Um exemplo de ferramenta uacutetil para esse tipo de tarefa eacute o Pentaho Kettle software

livre e compatiacutevel com praticamente todos os tipos de dados

No caso do SICAF em produccedilatildeo diversas poliacuteticas de seguranccedila do Serpro tornam impossiacutevel

conexotildees diretas ao banco de dados A soluccedilatildeo padratildeo eacute a disponibilizaccedilatildeo de um arquivo DUMP

extraiacutedo do banco de dados atraveacutes de uma fila Message Queue (MQ)

Enfatizamos que a alternativa de replicaccedilatildeo que implementamos no Dados Abertos SICAF

demonstrou ser a soluccedilatildeo mais raacutepida naquele momento poreacutem natildeo recomendamos como parte da

arquitetura extensiacutevel e portaacutevel Para fins de conhecimento detalhamos abaixo a soluccedilatildeo

implementada Apesar do serviccedilo estar funcionando perfeitamente para consulta o moacutedulo de

replicaccedilatildeo natildeo foi finalizado ou seja sua execuccedilatildeo eacute semiautomatizada

3321 Funcionamento em poucas palavras

Nesta seccedilatildeo satildeo explicadas as etapas do processo semiautomatizado de replicaccedilatildeo dos dados

Estas etapas tambeacutem estatildeo descritas no arquivo Roteiro para migraccedilatildeotxt localizado na pasta SICAF

scripts migracao que acompanha os arquivos fonte do projeto Todas as etapas satildeo executaacuteveis

utilizando uma aplicaccedilatildeo cliente do banco de dados PostgreSQL No nosso caso utilizamos o

pgAdmin III

Etapas

1 Copiar o arquivo DUMP extraiacutedo do SICAF em produccedilatildeo para o sistema de arquivo do

servidor de banco de dados Restaurar este backup em uma nova instacircncia no banco de dados

chamada SICAF_dump

2 Criar uma nova instacircncia no banco de dados chama sicaf_novo utilizando o sicaf_template

como template Neste momento o sicaf_novo natildeo possui dados

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 18: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1829

3 A sequecircncia de execuccedilatildeo a seguir deve ser executada na oacuterdem especificada Cada script eacute

responsaacutevel por copiar um conjunto de dados do SICAF_dump e carregaacute-los no sicaf_novo

Cada um corresponde a uma sentenccedila SQL combinando um comando SELECT com um

INSERT em seguida

1 Executar o script migra municipiosql Popula a tabela municipio no sicaf_novo com

dados da tabela sicaf_municipio do SICAF_dump

2 Executa o script migra orgaosql

3 Executa o script migra linha_fornecimentosql

4 Executa o script migra unidade_cadastradorasql

5 Executa o script migra tipo_empresasql

6 Executa o script migra ramo_negociosql

7 Executa o script migra codigo_cnaesql

8 Executa o script migra natureza_juridicasql

9 Executa o script migra fornecedor fisicosql

10 Executa o script migra fornecedor juridicosql

11 Executa o script migra linha_fornecimento_fornecedorsql

12 Executa o script update migraccedilatildeo municipiosql Atualiza as colunas geo_ponto cod_ibge

e geonameID a partir da instacircncis de produccedilatildeo de dados abertos sicaf A coluna geo_ponto

foi gerada a partir de uma base de dados do IBGE contendo o poliacutegono de fronteira de

todos os municiacutepios geo_ponto eacute o baricentro desse poliacutegono O cod_ibge foi mapeado

atraveacutes de um batimento semiautomatizado com uma tabela do IBGE O geonameID foi

conseguido atraveacutes de consultas ao web service wwwgeonamesorg Estes procedimentos

devem ser executados novamente apenas nos casos de alteraccedilatildeo na base de municiacutepios do

IBGE

13 Executa script de geraccedilatildeo de iacutendices cria indicessql

14 A instacircncia sicaf_novo estaacute pronta para entrar em produccedilatildeo para isso basta renomeaacute-la

para sicaf necessariamente a instacircncia que estava sendo utilizada precisa ser renomeada

para natildeo conflitar Sugerimos que ela seja guardada por algum tempo possibilitando sua

restauraccedilatildeo em caso de erros

3322 Melhorias futuras

Diversas melhorias estatildeo planejadas para o moacutedulo de replicaccedilatildeo O principal objetivo eacute tornaacute-

lo auto maacutetico possibilitando um agendamento da atividade de replicaccedilatildeo assim os dados podem ser

atualizados com frequecircncia diaacuteria ou semanal Esta melhoria seraacute implementada utilizando python a

linguagem utilizada no moacutedulo de acesso aos dados Atraveacutes de uma biblioteca de integraccedilatildeo com o

postgreSQL (psycopg2) todos os scripts podem ser executados atraveacutes dos comandos especiacuteficos do

banco

Outras alternativas podem ser utilizadas como por exemplo a transcriccedilatildeo de todos os scripts

em procedimentos python fazendo uso do SQLAlchemy para abstraccedilatildeo do banco de dados relacional

Outra alternativa eacute a implementaccedilatildeo dos scripts com uma ferramenta ETL como por exemplo o

Pentaho Kettle jaacute citado anteriormente

34 Tecnologias e frameworks

Esta seccedilatildeo agrega todos frameworks e bibliotecas utilizadas na implementaccedilatildeo da soluccedilatildeo

Dados Abertos SICAF Poreacutem gostariacuteamos de esclarecer que esta combinaccedilatildeo natildeo eacute mandatoacuteria para

implementaccedilatildeo de dados abertos governamentais Este conjunto de ferramentas demonstrou ser a

melhor combinaccedilatildeo considerando as linguagens de programaccedilatildeo dominadas pelo time e as

alternativas existentes Vaacuterias outras combinaccedilotildees de linguagens e frameworks podem alcanccedilar o

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 19: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

1929

mesmo ou melhor resultado O objetivo principal desta documentaccedilatildeo eacute fornecer um conjunto de

padrotildees e arquiteturas de referecircncia para implementaccedilatildeo de soluccedilotildees de abertura de dados

341 Linguagem de programaccedilatildeo

Python versatildeo 25 A linguagem foi escolhida pelo amplo suporte de bibliotecas para

realizar as diversas tarefas necessaacuterias durante o projeto (mapeamento objeto-relacional

serializaccedilatildeo em vaacuterios formatos etc) pela possibilidade de implementaccedilatildeo aacutegil e pelo

conhecimento da equipe de desenvolvimento

Lembramos que outras linguagens tambeacutem podem atender a esses requisitos portanto a

escolha da linguagem deve ser realizada considerando-se a realidade e o contexto presentes no

processo de desenvolvimento de software adotado

342 Framework web

Pyramid versatildeo 10 Esse framework para aplicaccedilotildees web possui raacutepido desempenho e

facilidade para implementar as funcionalidades requeridas para HTTP (ex negociaccedilatildeo de conteuacutedo

compactaccedilatildeo) Aleacutem disso tem ampla documentaccedilatildeo e uma comunidade ativa de desenvolvedores

343 Serializaccedilatildeo

A serializaccedilatildeo eacute o processo que transforma os dados estruturados presentes na memoacuteria em

uma sequecircncia de valores (bytes) seguindo um determinado formato a serem gravados em um

arquivo ou transmitidos pela rede Para a serializaccedilatildeo dos dados foram desenvolvidas classes para

abstrair o formato de serializaccedilatildeo Essas classes serializam apenas os atributos que estiverem na

presentes na lista de atributos expostos para o webservice a qual eacute definida no coacutedigo que mapeia o

modelo de dados (isto eacute nas definiccedilotildees das classes relacionadas ao negoacutecio) Por natildeo depender dos

dados em si esse componente pode ser facilmente reutilizado em outros projetos de aberturas de

dados que utilizem linguagem Python

Para cada formato disponiacutevel foi utilizada uma biblioteca Python especiacutefica para a

serializaccedilatildeo Classes para serializar em formatos JSON e CSV estatildeo presentes na biblioteca padratildeo

do Python Para o formato XML foi usada a biblioteca Amara versatildeo 20 em vez da ElementTree

ou Minidom presentes na biblioteca padratildeo pois a forma de serializaccedilatildeo por geradores suportada

pelo primeiro facilita a geraccedilatildeo de elementos e atributos XML aproveitando automaticamente

estruturas hieraacuterquicas que podem presentes nos objetos (ie dicionaacuterios e listas Python aninhadas)

Jaacute os quatro formatos de arquivos baseados em RDF ndash RDFXML N-Triplas Turtle e

Notaccedilatildeo 3 foram tratados com a biblioteca RDFLib versatildeo 30 O coacutedigo de serializaccedilatildeo transpotildee

os dados expostos do objeto para o modelo de grafo RDF e somente no momento da serializaccedilatildeo o

formato especiacutefico de arquivo eacute repassado ao meacutetodo de serializaccedilatildeo de grafo da RDFlib

344 Banco de dados ndash PostgreSQL

O banco de dados utilizado foi o PostgreSQL [httpwwwpostgresqlorg] versatildeo 84 Ele foi

escolhido por ser um dos bancos de dados em software livre mais utilizados Todos componentes do

time de dados abertos tecircm experiecircncia com banco de dados relacionais e natildeo tiveram barreiras para

aprender as especificidades do PostgreSQL Outro fator que contribuiu para a escolha eacute o suporte aos

tipos geograacuteficos de maneira transparente Para isso eacute preciso instalar o moacutedulo PostGIS Isso

adiciona uma seacuterie de recursos de manipulaccedilatildeo dos dados geograacuteficos

Consideramos a alternativa de utilizar algum banco de dados natildeo relacional conhecidos pela

sigla NoSQL Exemplos satildeo o CouchDB Riak e MongoDB Esse novo paradigma de banco de dados

incorpora uma seacuterie de sofisticaccedilotildees que supre necessidades especiacuteficas dos sistemas atuais como

acesso por chave-valor processamento e replicaccedilatildeo distribuiacutedos orientaccedilatildeo a consultas persistecircncia

e serializaccedilatildeo nativa em JSON e criaccedilatildeo de views para o algoritmo mapreduce em linguagem

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 20: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2029

Javascript

345 Mapeamento objeto relacional ndash SQLAlchemy

Para integrar a aplicaccedilatildeo ao banco de dados PostgreSQL foi utilizado o SQLAlchemy

[httpwwwsqlalchemyorg] Esta ferramenta realiza a integraccedilatildeo atraveacutes de uma camada de

abstraccedilatildeo do modelo relacional do banco de dados permitindo ao programador permanecer no

paradigma orientado a objetos SQLAlchemy realiza todas manipulaccedilotildees no banco de dados de forma

transparente inclusive cria as tabelas e o esquema de dados automaticamente de acordo com as

classes modeladas em Python Esse desacoplamento possibilita a troca posterior do banco de dados

se necessaacuterio O SQLAlchemy eacute compatiacutevel com vaacuterios outros bancos de dados relacionais tanto

softwares livres quanto proprietaacuterios

346 Dados geograacuteficos ndash GeoAlchemy + PostGIS

Para manipulaccedilatildeo dos tipos de dados geograacuteficos foi utilizado o GeoAlchemy

[httpwwwgeoalchemyorg] uma extensatildeo do SQLAlchemy para esse fim Ele fornece abstraccedilatildeo

aos tipos geograacuteficos como se fossem tipos nativos da linguagem Complementando o banco de

dados deve suportar tipos geograacuteficos nesse caso foi instalado o moacutedulo PostGIS

[httppostgisrefractionsnet] no banco de dados PostgreSQL Assim como o SQLAlchemy suporta

diversos bancos de dados o GeoAlchemy suporta vaacuterias das respectivas extensotildees geograacuteficas

existentes para o banco Isso vem corroborar a possibilidade de se substituir com pouco esforccedilo o

banco por outra soluccedilatildeo de banco de dados relacional

Inicialmente foi planejada a possibilidade de uso dos campos geograacuteficos para filtrar consultas

de Unidades Cadastradoras Por exemplo consultar todas as Unidades Cadastradoras num raio de

3000m em torno de um ponto geograacutefico passado como paracircmetro GeoAlchemy possui operadores

para esse propoacutesito poreacutem esse filtro natildeo se mostrou essencial para a versatildeo alpha do projeto e foi

implementada apenas na consulta a unidades cadastradoras Nela o paracircmetro geo_ponto define um

ponto central para busca de unidades cadastradoras e o paracircmetro raio define o raio maacuteximo de

pesquisa

Aleacutem disso foram desenvolvidos scripts para fazer o batimento dos coacutedigos internos de

municiacutepios com os coacutedigos do IBGE e com os coacutedigos do Geonames

347 Scripts SQL

Na Seccedilatildeo 20eacute esclarecida a utilizaccedilatildeo de uma ferramenta de mapeamento objeto relacional

uma estrateacutegia de engenharia de software para desacoplar a aplicaccedilatildeo do banco de dados que dentre

outras facilidades dispensa a utilizaccedilatildeo da linguagem nativa de consulta ao banco de dados o SQL

sendo substituiacuteda por operadores do mundo orientado a objetos Em outras palavras natildeo foram

utilizadas sentenccedilas SQL na interface de consulta aos dados

Na Seccedilatildeo 17[continua aiacute papai tem uma exceccedilatildeo os scripts de replicaccedilatildeo da base]

348 Modelagem do vocabulaacuterio de ontologia ndash Proteacutegeacute

Um dos principais requisitos definidos para o projeto eacute a utilizaccedilatildeo de ontologias que

enriquece semanticamente os dados disponibilizados Para a atividade de modelagem da ontologia

foi utilizado o editor Proteacutegeacute [httpprotegestanfordedu] A ferramenta eacute de coacutedigo livre e aberto e

eacute mantida pela Universidade de Stanford Provecirc um ambiente graacutefico de ediccedilatildeo de ontologias OWL

integrado agrave Internet Nela foram esboccediladas as classes e propriedades necessaacuterias para descrever os

dados de domiacutenio da aplicaccedilatildeo do SICAF Alguns conceitos satildeo de domiacutenio externo ao SICAF (eg

modalidade de licitaccedilatildeo) e foram modelados em arquivos separados

Para as classes e propriedades foram definidos identificadores ndash URIs ndash com o esquema HTTP

e seguindo o princiacutepio de Linked Data os arquivos dos esboccedilos de vocabulaacuterios foram hospedados

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 21: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2129

em um servidor de tal forma que o acesso via HTTP agrave URI de uma classe ou propriedade retorne o

vocabulaacuterio que a define Para mais informaccedilotildees sobre esse vocabulaacuterio veja a Seccedilatildeo 24

Houve ainda a preocupaccedilatildeo de fazer referecircncia a vocabulaacuterios e ontologias externos que satildeo

de ampla utilizaccedilatildeo internacional pela comunidade Linked Data Os vocabulaacuterios externos

referenciados satildeo os seguintes

bull Friend of a Friend (FOAF) a classe correspondente a fornecedor pessoa fiacutesica eacute definida como

sendo subclasse de foafPerson

bull VCARD os endereccedilos de pessoas juriacutedicas e unidades cadastradoras satildeo descritos com o

vocabulaacuterio VCARD (classe vcardAddress propriedades vcardadr vcardpostal-code

vcardstreet-address vcardtel)

bull WGS64 Geo do W3C para expressar coordenadas geograacuteficas (latitude e longitude) em RDF

(propriedades geolat e geolong)

bull DBPedia Ontology e DBPedia properties a propriedade dbontstate liga o municiacutepio ao

estado as propriedades dbontabbreviation e dbpropisocode descrevem atributos do estado

(o qual natildeo estaacute modelado como um objeto e soacute eacute identificado como uma entidade no momento

da serializaccedilatildeo em RDF) os estados brasileiros e o Distrito Federal tambeacutem estatildeo mapeados

para as respectivas instacircncias presentes na DBPedia um municiacutepio eacute descrito como uma

instacircncia da classe dbontSettlement

bull Vocabulary of Interlinked Datasets (VOID) usado para descrever o grafo RDF retornado por

uma consulta como um voidDataset

bull Upper Mapping and Binding Exchange Layer (Umbel) baseada no projeto OpenCyc essa

ontologia conteacutem uma classificaccedilatildeo conceitos gerais alguns dos quais satildeo referenciados na

modelagem dos esboccedilos vocabulaacuterios do SICAF (eg a classe correspondente a fornecedor

pessoa juriacutedica eacute subclasse de umbelCommercialOrganization e oacutergatildeo eacute subclasse de

umbelGovernmentalOrganization)

349 Servidor web ndash Apache

O piloto Dados Abertos SICAF funciona similarmente a qualquer outra aplicaccedilatildeo web ou

seja eacute um serviccedilo que retorna se existir um recurso a cada requisiccedilatildeo HTTP Em nosso ambiente

estaacute sendo utilizado o servidor web Apache v229

A implementaccedilatildeo de uma arquitetura web para acesso a dados possibilita a utilizaccedilatildeo de uma

seacuterie de tecnologias sofisticadas comuns em aplicaccedilotildees web claacutessicas O Apache possibilita o

acoplamento de diversos moacutedulos de maneira transparente agrave aplicaccedilatildeo web que utilizaraacute Na nossa

API estamos utilizando moacutedulos de cache em disco para melhorar o desempenho e natildeo repetir

consultas desnecessariamente

Usamos tambeacutem o moacutedulo mod_wsgi que implementa uma interface WSGI (Web Server

Gateway Interface) padratildeo para a linguagem Python pela qual a nossa aplicaccedilatildeo Pyramid se conecta

ao servidor web Apache

3491 Compactaccedilatildeo Gzip

Para minimizar o fluxo de dados enviados pelo servidor a API possibilita a compactaccedilatildeo dos

arquivos de forma transparente utilizando o protocolo HTTP A compressatildeo eacute feita seguindo a

especificaccedilatildeo GZIP do HTTP Eacute necessaacuterio que o cabeccedilalho da requisiccedilatildeo HTTP informe que a

aplicaccedilatildeo cliente suporta a compactaccedilatildeo e conseguiraacute manipular a resposta

3492 Compartilhamento de Recursos de Origem Cruzada ndash CORS

Por questotildees de seguranccedila um navegador web (browser) normalmente natildeo aceita que uma

paacutegina web receba e processe por Javascript informaccedilotildees dinacircmicas (requisiccedilotildees assiacutencronas tambeacutem

conhecida como AJAX apesar de esta denominaccedilatildeo se restringir agravequelas que utilizem o formato de

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 22: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2229

dados XML) recebidas a partir de uma URL situada em domiacutenio distinto do da paacutegina Essa medida

visa evitar que scripts maliciosos se aproveitem de vulnerabilidades do tipo CSRF (Cross-Site

Request Forgery) que podem estar presentes certas em aplicaccedilotildees web para obter acesso indevido a

dados do usuaacuterio contidos nessas aplicaccedilotildees enquanto o usuaacuterio estiver autenticado nas mesmas Essa

restriccedilatildeo eacute conhecida como a ldquopoliacutetica da mesma origemrdquo

Ela todavia afeta aplicaccedilotildees legiacutetimas que queiram misturar dados de diferentes fontes para

por exemplo apresentar uma visualizaccedilatildeo que interesse ao usuaacuterio ndash os chamados mashups Para

contornaacute-la os desenvolvedores web vinham utilizando uma teacutecnica chamada JSONP (JSON with

padding) que possibilita receber documentos JSON modificados de qualquer domiacutenio Dentre outras

limitaccedilotildees essa teacutecnica natildeo permite o uso de outros formatos de transmissatildeo dos dados tais como

XML ou CSV

A alternativa moderna ao JSONP eacute a teacutecnica CORS (Cross-Origin Resource Sharing) que

estaacute sendo padronizada pelo W3C e eacute suportada por versotildees recentes dos principais navegadores Ela

possibilita que a fonte de dados especifique por uso de cabeccedilalhos especiacuteficos na resposta HTTP

quais domiacutenios estatildeo autorizados a ler os dados Isso possibilita que as aplicaccedilotildees mashup faccedilam

cruzamento dos dados diretamente no navegador utilizando apenas JavaScript dispensando uma

aplicaccedilatildeo de servidor para fazer esse cruzamento

No caso da API de Dados Abertos do SICAF pela natureza puacuteblica dos dados usamos o

CORS para definir que qualquer domiacutenio poderaacute utilizar os dados o que esperamos facilitar a criaccedilatildeo

de mashups e aplicaccedilotildees de visualizaccedilatildeo que utilizem os mesmos

3493 Cache

Foi configurado no servidor Apache um moacutedulo de cache o mod_disk_cache Esse moacutedulo

persiste no disco riacutegido uma coacutepia do resultado para cada requisiccedilatildeo HTTP que retorne dados Ateacute

que o tamanho limite do cache seja atingido a API Dados Abertos SICAF soacute eacute requisitada para gerar

um arquivo para cada URL uma uacutenica vez a cada alteraccedilatildeo que os dados sofrerem Quando houver

uma requisiccedilatildeo repetida o servidor Apache faz a interceptaccedilatildeo da requisiccedilatildeo e retorna o mesmo

arquivo gerado na primeira consulta A API foi desenhada para ser utilizada apenas para consulta o

que permitiu que a cache fosse configurada com um tempo muito grande vaacuterias semanas Cada vez

que os dados satildeo replicados do sistema de produccedilatildeo do SICAF eacute necessaacuterio apagar todos os arquivos

de cache forccedilando a API a gerar novos resultados para cada requisiccedilatildeo

3410 Sistema operacional

Todas as ferramentas descritas nesta seccedilatildeo estatildeo instaladas em um uacutenico servidor

virtualizado rodando uma instacircncia do sistema operacional Debian Lenny 50

[Mais alguma coisa essencial Acho que seria bom colocar o tamanho da memoacuteria RAM disco e

talvez alguma outra caracteriacutestica da VM]

35 Padrotildees

A grande inovaccedilatildeo na proposta de Dados Abertos eacute a possibilidade de acesso a dados de forma

automatizaacutevel ou seja interaccedilatildeo maacutequina-maacutequina Para que isso aconteccedila o conjunto de dados

disponibilizado deve ser fornecido em algum formato estruturado Essa e vaacuterias outras definiccedilotildees

passam pela instituiccedilatildeo de diversos padrotildees

No piloto Dados Abertos SICAF foram implementados vaacuterios formatos de serializaccedilatildeo para

cada consulta aos dados Diversificar os formatos de serializaccedilatildeo facilita para o usuaacuterio que pode

escolher o que melhor supre sua necessidade

Para potencializar o cruzamento dos dados do SICAF os dados referentes aos municiacutepios

carregam vaacuterios coacutedigos de outras bases geograacuteficas

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 23: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2329

351 Formatos qual o melhor

O funcionamento da API eacute muito simples ela retorna um arquivo para cada requisiccedilatildeo

realizada Aleacutem de filtros a API possibilita que o usuaacuterio indique qual o formato que ele deseja

receber tudo atraveacutes da URL Todos os formatos disponiacuteveis satildeo de especificaccedilotildees abertas Eacute

importante enfatizar que essa parte da aplicaccedilatildeo segue vaacuterios padrotildees de projeto que possibilita o

reuso do serializador

Abaixo segue uma lista dos formatos disponiacuteveis e uma breve explicaccedilatildeo

1 JSON

JSON eacute um acrocircnimo para JavaScript Object Notation Eacute um padratildeo aberto de estruturaccedilatildeo de

dados baseado em texto e legiacutevel por humano A especificaccedilatildeo eacute a RFC 4627 JSON ganhou maior

utilizaccedilatildeo com o advento do Ajax A serializaccedilatildeo em JSON eacute muito simples e resulta em uma

estrutura pouco verbosa o que se mostra uma oacutetima alternativa para o XML JSON possibilita

serializaccedilatildeo de estrutura de objetos complexos como listas e subpropriedades JSON estaacute se tornando

o padratildeo mais utilizado para integraccedilatildeo de dados entre repositoacuterios e frameworks Assim como

relatado na seccedilatildeo 19 JSON tambeacutem estaacute se tornando o padratildeo nativo de armazenamento em alguns

bancos de dados modernos

2 XML

XML significa Extensible Markup Language e eacute um conjunto de regras para codificar

documentos em um formato legiacutevel por maacutequina Eacute baseado em texto e tem como principais objetivos

[fontes] simplicidade extensibilidade e usabilidade XML eacute largamente utilizado como formato de

troca de dados nos claacutessicos Web Services SOAP Apesar da larga utilizaccedilatildeo eacute cada vez menos

encorajada a utilizaccedilatildeo desse formato para integraccedilatildeo de aplicaccedilotildees Em substituiccedilatildeo recomenda-se

utilizar JSON por economizar banda e ser de processamento mais leve

3 CSV

CSV significa Comma-Separated Values ou valores separados por viacutergula e eacute um formato

para armazenamento de dados tabulares em texto A codificaccedilatildeo eacute muito simples cada linha do

arquivo representa uma linha na tabela e as colunas satildeo separadas por viacutergula CSV eacute recomendado

para representaccedilatildeo de estrutura de dados mais simples de natureza tabular onde natildeo existem

subpropriedades ou listas gerando um arquivo menor e mais leve para processamento Arquivos CSV

satildeo processaacuteveis diretamente por editores de planilhas como o OpenOffice e o Excel

4 RDFXML

Alguns dos formatos disponiacuteveis para a consulta na API baseiam-se no padratildeo Resource

Description Framework (RDF) do W3C Um deles chamado RDFXML baseia-se na sintaxe do

padratildeo XML e utiliza em geral a extensatildeo rdf

Os formatos baseados em RDF tecircm seus dados descritos em vocabulaacuterios de uso comum na

web semacircntica e tambeacutem em vocabulaacuterios proacuteprios do domiacutenio de dados do SICAF que foram

esboccedilados com esta finalidade Para informaccedilotildees sobre os vocabulaacuterios utilizados e referenciados

veja as Seccedilotildees 20e 24

5 Notaccedilatildeo 3

Formato proposto por Tim Berners-Lee o criador da Web e da Web Semacircntica com o objetivo

de permitir uma leitura facilitada por seres humanos e ao mesmo tempo ser igualmente faacutecil de

processar por maacutequina O conteuacutedo apresentado representa exatamente o mesmo grafo que o formato

RDFXML poreacutem serializado nessa sintaxe A extensatildeo utilizada nesse formato eacute em geral n3

6 Turtle

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 24: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2429

Subformato do Notation 3 poreacutem com algumas restriccedilẽs Para uso desta aplicaccedilatildeo a

serializaccedilatildeo eacute exatamente a mesma do formato Notation 3 A extensatildeo utilizada eacute ttl

7 N-Triplas

Subformato simples do Turtle todavia bastante prolixo com o objetivo de facilitar o

processamento agrave custa do espaccedilo de armazenamento e transmissatildeo As triplas satildeo representadas uma

por linha com sujeito predicado e objeto expressos por extenso A extensatildeo utilizada eacute nt

352 Esboccedilo de Ontologia do SICAF ndash RDF

Um vocabulaacuterio para o SICAF foi esboccedilado em OWL Lite a partir de informaccedilotildees coletadas

com pessoas ligadas agrave aacuterea de negoacutecio correspondente na DLSG Ele foi modelado com as seguintes

classes e encontra-se disponiacutevel no endereccedilo httpvocabegovbrsicaf

bull Fornecedor

bull OrganizacaoComercial (equivalente a umbelCommercialOrganization)

bull UnidadeCadastrador

bull RamoNegocio

O vocabulaacuterio define ainda as seguintes propriedades

bull linhaFornecimento

bull registradoEm (e a inversa responsavelPeloRegistroDe)

bull recadastrado2011

O objetivo desta modelagem natildeo foi representar toda a semacircntica do negoacutecio e sim

possibilitar uma melhor recuperaccedilatildeo da informaccedilatildeo e viabilizar o cruzamento dos dados com outras

fontes Para esse propoiacutesito a expressividade da linguagem OWL Lite mostrou-se ser suficiente

Em julho de 2011 foi realizada uma capacitaccedilatildeo em engenharia de ontologias com

participantes entre outros da DSLG Espera-se subsequentemente que esse esboccedilo de vocabulaacuterio

seja evoluiacutedo com as melhorias de qualidade potencializadas por esse ferramental resultando em

uma nova versatildeo do vocabulaacuterio do SICAF que possa ser considerada estaacutevel

353 Dados geograacuteficos

Por diversos motivos decidimos dar uma atenccedilatildeo especial para dados geograacuteficos Nos uacuteltimos

anos a utilizaccedilatildeo de informaccedilatildeo geolocalizada ganhou maior relevacircncia pela popularizaccedilatildeo de

dispositivos com GPS smartphones e navegadores e o crescente nuacutemero de serviccedilos web que

agregam camadas de informaccedilotildees sobre mapas

Dado geograacutefico carrega nativamente grande poder de reutilizaccedilatildeo e cruzamento isso

acontece porque todo dado geograacutefico depende de um referencial comum o globo terrestre As

ferramentas para cruzamento de dados geograacuteficos potencializam a agregaccedilatildeo da informaccedilatildeo Por

exemplo em um mapa duas informaccedilotildees natildeo precisam possuir exatamente o mesmo ponto

geograacutefico mas apenas estarem proacuteximos para se relacionarem

Para incentivar o uso dos dados do SICAF num caraacuteter geograacutefico a tabela de municiacutepios foi

trabalhada de maneira diferenciada Agrave tabela de municiacutepios estatildeo relacionadas as duas tabelas

principais a de Fornecedores e a das Unidades Cadastradoras Agrave tabela de municiacutepios foi adicionado

o campo geoponto contendo a posiccedilatildeo geograacutefica daquele municiacutepio Esse valor foi calculado como

sendo o baricentro do poliacutegono que delimita o municiacutepio informaccedilatildeo disponiacutevel no portal do IBGE

Agrave tabela de municiacutepios tambeacutem foram incorporados dados do coacutedigo do IBGE do coacutedigo Geonames

e da relaccedilatildeo com a DBPedia Abaixo segue explicaccedilatildeo de cada um deles

3531 IBGE

O IBGE eacute o oacutergatildeo que tem a competecircncia legal para catalogar os municiacutepios Em outras

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 25: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2529

palavras as informaccedilotildees mais fieacuteis sobre identificaccedilatildeo localizaccedilatildeo geograacutefica histoacutericos de

mudanccedilas e fronteiras dos municiacutepios estatildeo em sistema de posse do IBGE Considerando a

importacircncia de se seguir uma nomenclatura comum realizamos uma atividade de cruzamento da

tabela de municiacutepios do SICAF com a tabela do IBGE disponiacutevel em ftpgeoftpibgegovbr Assim

incorporamos ao nosso piloto informaccedilotildees do coacutedigo do IBGE uacutenico para cada municiacutepio que segue

uma loacutegica de composiccedilatildeo deste identificador no IBGE Jaacute explicado na seccedilatildeo anterior a posiccedilatildeo

geograacutefica foi calculada com dados das fronteiras do municiacutepio no IBGE

Eacute importante lembrar que na nossa implementaccedilatildeo da ontologia do SICAF natildeo foi criado o

conceito para o campo cod_ibge uma vez que enxergamos essa competecircncia exclusiva ao IBGE

Esta URL exemplifica o cruzamento de todas esses dados

httpapicomprasnetgovbrsicafdadosmunicipio62138xml

3532 GeoNames

GeoNames eacute um banco de dados geograacutefico disponiacutevel e acessiacutevel atraveacutes de diversos web

services Aleacutem da possibilidade ampla de integraccedilatildeo atraveacutes de APIs cada propriedade dos dados estaacute

definida em uma ontologia Esses diferencias fazem com que o GeoNames se torne referecircncia

internacional para interoperabilidade de dados geograacuteficos Semelhantemente ao coacutedigo IBGE

incorporamos agrave tabela de municiacutepios o coacutedigo do geonames Isso possibilita uma integraccedilatildeo mais

rica podemos assim dizer que os dados do SICAF fazem parte da grande malha da web semacircntica

Esta URL mostra o poder dos relacionamentos das propriedades como recursos web

httpapicomprasnetgovbrsicafdadosmunicipio62138rdf

3533 DBPedia

DBPedia eacute um projeto com o objetivo de extrair conteuacutedo estruturado das informaccedilotildees

contidas nas paacuteginas da Wikipedia A disponibilizaccedilatildeo do conteuacutedo num formato mais estruturado

possibilita que usuaacuterios faccedilam consultas mais complexas relacionando dados de outras fontes Neste

caso apenas informaccedilotildees em niacutevel de unidade federativa foram agregadas ao resultado Como existem

apenas 27 unidades federativas o mapeamento UF ==gt URI na DBPedia foi feito diretamente no

coacutedigo em Python Assim esses dados natildeo estatildeo disponiacuteveis no banco de dados apenas no coacutedigo

Aleacutem disso esse cruzamento estaacute disponiacutevel apenas nas consultas dos municiacutepios em RDF como no

exemplo a seguir httpapicomprasnetgovbrsicafdadosmunicipio62138rdf que conteacutem

informaccedilotildees do municiacutepio de Barueri e uma delas aponta para um recurso sobre o estado de Satildeo

Paulo httpdbpediaorgresourceSC3A3o_Paulo_(state)

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 26: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2629

4 Case - Painel de recadastramento de fornecedores no SICAF

O paradigma de dados abertos faz uma divisatildeo clara entre uma arquitetura de disponibilizaccedilatildeo

de dados e aplicativos que consomem esses dados Ou seja dados abertos se refere agraves tecnologias e

meios sofisticados de disponibilizaccedilatildeo de dados na Internet Nesse paradigma o governo empodera

o cidadatildeo para desenvolver as aplicaccedilotildees dedicando-se a prover uma infraestrutura aos dados mais

geneacuterica e padronizada

Apesar de natildeo ser o objetivo do governo nesse paradigma de dados abertos a implementaccedilatildeo

dos aplicativos que cada usuaacuterio pode solicitar decidimos desenvolver um mashup para exemplificar

o potencial de utilizaccedilatildeo dos dados e provocar a criatividade nos outros

Recentemente o SICAF passou por uma reestruturaccedilatildeo Os cadastros de fornecedores foram

incrementados e receberam novos campos Para levantar essas novas informaccedilotildees todos os

fornecedores estatildeo sendo recadastrados Para apoiar esse recadastramento uma aplicaccedilatildeo web foi

desenvolvida utilizando os dados abertos disponibilizados A aplicaccedilatildeo foi desenvolvida utilizando

apenas HTML e JavaScript

O nome da aplicaccedilatildeo eacute Painel de Acompanhamento do Recadastramento no novo SICAF e

estaacute disponiacutevel na URL httpapicomprasnetgovbrsicafapppainelhtm

O painel eacute um conjunto de ferramentas integradas ao mapa do Google para entender como

andam as taxas de recadastramento em cada regiatildeo do Brasil Graacuteficos de pizza foram incorporados

ao mapa agrupando as Unidades Cadastradoras evitando que a imagem fique poluiacuteda Tambeacutem eacute

gerado um graacutefico de barras e um ranking classificando as Unidades Cadastradoras pela quantidade

de recadastramento

No desenvolvimento deste aplicativo tivemos o apoio teacutecnico da Analista em TI Patricia

Lustosa [patriciaribeiroplanaltogovbr]

Abaixo segue uma lista das tecnologias utilizadas no desenvolvimento deste mashup

Ilustraccedilatildeo 5 Painel de Acompanhamento do Recadastramento no novo SICAF

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 27: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2729

41 Tecnologias do Mashup

Por se tratar de uma simples ferramenta de visualizaccedilatildeo de dados a aplicaccedilatildeo eacute muito simples

funcionando apenas no navegador do cliente Isso quer dizer que dispensa a utilizaccedilatildeo de algum

sistema como servidor desta aplicaccedilatildeo O arquivo HTML eacute fornecido como qualquer outro recurso

web (html estaacutetico) executando apenas no cliente quando renderizado pelo navegador

411 Paacutegina HTML

A aplicaccedilatildeo eacute uma pagina web comum com alguns diferenciais de visualizaccedilatildeo de dados No

servidor web a aplicaccedilatildeo eacute apenas mais um arquivo estaacutetico no sistema de arquivo ou seja natildeo

existem scripts de geraccedilatildeo desse HTML

412 JavaScript

Para a utilizaccedilatildeo do mapa impressatildeo das pizzas do graacutefico de barras e calculo das estatiacutesticas

foi utilizado programaccedilatildeo em JavaScript Eacute uma linguagem muito simples e de faacutecil programaccedilatildeo

Apesar de ser interpretada pelo navegador torna as aplicaccedilotildees web mais raacutepidas uma vez que evita

comunicaccedilatildeo constante com o servidor para tarefas que natildeo envolvem outros dados Note que ao

pressionar o botatildeo ldquoAtualizar graacuteficosrdquo as informaccedilotildees dentro do retacircngulo agrave direita satildeo recalculadas

considerando apenas as Unidades Cadastradoras visiacuteveis no mapa naquele momento Esse eacute um

exemplo de logica de negocio mais complexa que foi implementada em JavaScript

413 Ajax - jQuery

Jaacute foi explicado anteriormente que o aplicativo executa exclusivamente no lado cliente no

navegador Eacute muito comum nas aplicaccedilotildees atuais a realizaccedilatildeo de consulta a dados em resposta a

algum evento do usuaacuterio e que natildeo acarretam o carregamento de uma nova paacutegina HTML Essa

praacutetica eacute conhecida como Ajax chamadas assiacutencronas em JavaScript

Para realizaccedilatildeo das consultas dos dados disponibilizados em nossa API e desserializaccedilatildeo do

mesmo fizemos uso da biblioteca jQuery disponiacutevel em httpjquerycom Para esse fim realizamos

requisiccedilotildees em formato JSON

Em nossa aplicaccedilatildeo essas consultas acontecem exclusivamente em dois momentos Ao iniciar

o carregamento da paacutegina automaticamente eacute feito uma consulta com dados de todas as unidades

cadastradoras atraveacutes da URL

httpapicomprasnetgovbrsicafv1consultaunidades_cadastradorasjson Esses dados satildeo entatildeo

mantidos em uma variaacutevel durante todo o funcionamento da aplicaccedilatildeo utilizada em vaacuterios casos O

segundo caso acontece ao clicar em algum marcador das Unidades Cadastradoras nesse momento a

aplicaccedilatildeo envia uma solicitaccedilatildeo para acessar dados detalhados como esta

httpapicomprasnetgovbrsicafdadosunidade_cadastradora120041json

414 Google Maps

A aplicaccedilatildeo Google Maps possui uma biblioteca em JavaScript desenvolvida e mantida pelo

Google para criaccedilatildeo de aplicativos web que interajam com mapas A utilizaccedilatildeo eacute muito simples e

toda a complexidade para administrar as imagens do mapa ferramentas de zoom e eventos de clique

do usuaacuterio nos marcadores eacute encapsulada pela biblioteca

Em nosso aplicativo utilizamos poucas funcionalidades do mapa Basicamente pintamos

marcadores em posiccedilotildees especiacuteficas do mapa aleacutem disso para cada marcador tratamos o evento de

clique exibindo o balatildeo com dados detalhados da Unidade Cadastradora Por fim acessando

propriedades do mapa podemos filtrar a lista de Unidades Cadastradoras mantendo aquelas que estatildeo

visiacuteveis no mapa em um determinado momento Com isso satildeo calculadas vaacuterias estatiacutesticas e graacuteficos

exibidos no retacircngulo agrave direita

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 28: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2829

Documentaccedilatildeo e tutoriais para utilizaccedilatildeo do Google maps estatildeo disponiacuteveis em

httpcodegooglecomapismapsindexhtml

415 Google Charts

Google Charts eacute um serviccedilo do Google para facilitar desenvolvedores na geraccedilatildeo

visualizaccedilotildees de dados Noacutes fizemos uso do serviccedilo atraveacutes da API disponiacutevel em

httpcodegooglecomintlpt-BRapischartimagedocsgallerypie_chartshtml O serviccedilo gera

imagens customizadas em tempo real com os paracircmetros passados na URL Utilizamos o serviccedilo para

criar as imagens de pizzas e os graacuteficos de barras Um exemplo eacute a URL

httpschartgoogleapiscomchartchxt=xyampcht=bvsampchd=t1003

3901474912443110ampchco=76A4FBampchls=20ampchs=300x120ampchbh=20ampchxl=0||20||

40||60||80||100ampchxr=101003ampchds=01003

Todos os paracircmetros necessaacuterios para compor a imagem estatildeo na URL e o resultante eacute

416 MarkerCluster

MarkerCluster eacute uma biblioteca que gerencia agrupamentos de marcadores para cada niacutevel de

zoom O principal objetivo eacute tornar a navegaccedilatildeo mais leve mais legiacutevel e raacutepida Eacute um projeto

mantido no Google Code no seguinte endereccedilo httpcodegooglecompgmaps-utility-library-dev

A utilizaccedilatildeo eacute simples ele cria uma camada de abstraccedilatildeo agrave biblioteca nativa do Google Maps fazendo

a gerecircncia desta internamente

No nosso caso fizemos uma leve customizaccedilatildeo para possibilitar a utilizaccedilatildeo de marcadores

customizados nos casos de agrupamento No caso praacutetico em um agrupamento de Unidades

Cadastradoras o marcador eacute uma pizza considerando a soma das informaccedilotildees dos marcadores ali

agrupados Lembrando o marcador de pizza eacute do Google Charts

42 Recursos ndash 25h

Destacamos esta seccedilatildeo para que os desenvolvedores de mashups tenham uma noccedilatildeo de

complexidade e custo no desenvolvimento de aplicativos simples e impactantes como este O que

queremos concluir eacute que a complexidade eacute muito baixa para quem jaacute tem alguma experiecircncia com

aplicativos web

No papel de desenvolvedor deve-se considerar que toda a plataforma para disponibilizaccedilatildeo

dos dados a API jaacute existe e eacute acessiacutevel por meio de requisiccedilotildees HTTP

Considerando todo o tempo de desenvolvimento e melhoria da aplicativo foram envolvidas

duas pessoas num total de 25 horas

Ilustraccedilatildeo 6 Imagem gerada em tempo real pelo

Google Charts

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S

Page 29: Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos que é um projeto experimental, no sentido de que estamos testando as tecnologias,

2929

5 Consideraccedilotildees finais

51 Onde estaacute o coacutedigo fonte

511 Portal do SPB

52 Licenccedila de uso

521 GPL versatildeo 2 (SPB)

53 Grupo consultor em Dados Abertos do SISP ndash C3S