Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos...
Transcript of Arquitetura Técnica Referencial para Abertura de Dados · Usamos o termo piloto para esclarecermos...
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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