Documente Academic
Documente Profesional
Documente Cultură
Compartilhamento de Genealogia e
Importação/Exportação de Arquivos
Gedcom
Monografia (2004)
dct ufms
Malaquias 4:5-6
Aos nossos maridos e filhos.
Agradecimentos
Ao nosso orientador que mesmo sobrecarregado encontrou tempo para nos guiar e ajudar
nos momentos cruciais.
A nossos maridos e familiares por terem nos apoiado durante todo o curso e desenvol-
vimento do projeto.
Aos genealogistas que, através dos questionários ou de qualquer outra forma, ajudaram
em muito na conclusão deste trabalho.
Enfim, a todos que se dispuseram a ajudar dispensando algum tempo em nosso be-
nefı́cio.
Resumo
Souza, J. O; Góes, S. M. S; Marin, T. Radici: Aplicação Web para Compartilhamento
Genealogia e Importação/Exportação de arquivos Gedcom. Campo Grande, 2004. Mono-
grafia (Especialização) - Universidade Federal de Mato Grosso do Sul.
Este trabalho tem como propósito o desenvolvimento de uma aplicação web destinada
a comunidade genealógica, a fim de que seus usuários tenham a oportunidade de publicar
e compartilhar seus dados genealógicos. Há dezenas de sı́tios pessoais na Internet e vários
softwares (gratuitos e não gratuitos) que são dedicados a este tema. Porém, não existe
uma aplicação web dinâmica, gratuita e em Português, que ofereça tais recursos. Um
questionário foi aplicado a genealogistas profissionais e amadores no intuito de conhecer
suas necessidades. Há muitos esforços no sentido de centralizar e compartilhar dados
genealógicos em que este trabalho pode se espelhar. Os objetivos são desenvolver meios
para gerenciamento e consulta dos dados armazenados no site. As tecnologias usadas para
isso são a linguagem script PHP e o banco de dados PostgreSQL. A aplicação reconhece
o formato de arquivos Gedcom com o propósito de possibilitar a importação e/ou ex-
portação dos dados através de tais arquivos. O modelo de dados foi baseado no Gentech
Genealogical Data Model, que utiliza o conceito entidade-relacionamento.
1 Introdução 1
1.1 Justificativas e Motivações . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Dados Empı́ricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Questionário com Genealogistas . . . . . . . . . . . . . . . . . . . . 2
1.1.3 Outros Trabalhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Organização do Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Fundamentos 8
2.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1 Fundamentos Iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.2 Modelo Conceitual da UML . . . . . . . . . . . . . . . . . . . . . . 9
2.3 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.1 Caracterı́sticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.2 Funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5 Gedcom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6 Gentech Genealogical Data Model . . . . . . . . . . . . . . . . . . . . . . . 22
2.6.1 O Modelo de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6.2 Considerações sobre o Modelo . . . . . . . . . . . . . . . . . . . . . 29
2.7 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3 A Aplicação 31
3.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3 Decisões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1 Linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.2 Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4 Uso dos Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.1 Modelos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.2 O Uso do Gedcom . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.5 Modelo Navegacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6 Particularidades da Aplicação . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6.1 Descendência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
v
CONTEÚDO vi
3.6.2 Ascendência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6.3 Importação de Arquivos Gedcom . . . . . . . . . . . . . . . . . . . 40
3.6.4 Exportação de Arquivos Gedcom . . . . . . . . . . . . . . . . . . . 43
3.7 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4 Conclusão 45
4.1 Análise Crı́tica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2 Comparações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
A Questionário 48
Referências Bibliográficas 53
Lista de Figuras
vii
Lista de Tabelas
viii
Capı́tulo 1
Introdução
1
1.1. JUSTIFICATIVAS E MOTIVAÇÕES 2
“Este livro foi preparado com grande custo de tempo, esforço e dinheiro
por minha esposa e por mim. Por que o fizemos não o sabemos, mas confiamos
na providência o Altı́ssimo que ele servirá para um fim proveitoso”.
O presidente da junta da Biblioteca de Los Angeles de certa época relatou que gene-
alogia era seu passatempo e, com isso, havia gasto milhares de dólares com registros e
manuscritos. Segundo ele, realmente não sabia que bem isso poderia trazer, mas não con-
seguia deixar de fazê-lo [4]. É bem provável que, através deste trabalho, algumas pessoas
venham a apreciar a genealogia. Certamente este tema cativou todas as integrantes deste
grupo de trabalho.
Nı́vel Tempo
Avançado 3,61% Mais de 10 anos 100%
Intermediário 56,33% Mais de 10 anos 31,91%
De 6 a 10 anos 29,79%
De 2 a 5 anos 39,30%
Iniciante 39,76% Mais de 10 anos 3,03%
De 6 a 10 anos 12,12%
De 2 a 5 anos 63,64%
1 ano 21,21%
Foram aplicadas duas questões de respostas múltiplas: “Onde normalmente você pro-
cura e/ou obtém informações?” para conhecer suas fontes e “De que forma você arma-
zena/publica suas informações?”. O resultado destas questões estão nas tabelas 1.2 e
1.3.
Os entrevistados responderam a questões quanto ao uso ou não de softwares ge-
nealógicos e se tal software exporta ou não arquivos Gedcom2 . 83,13% responderam
que usam softwares genealógicos, enquanto que 16,87% disseram que não. A tabela 1.4
2
Gedcom é um formato de arquivo reconhecido pelos softwares genealógicos, usado para troca e com-
partilhamento de informações entre genealogistas. O formato será explicado adiante na seção 2.5 do
capı́tulo 2, à página 8.
1.1. JUSTIFICATIVAS E MOTIVAÇÕES 3
refere-se somente aos questionários que tiveram a resposta “Sim” dadas a pergunta: “Este
software possui a capacidade de importar/exportar arquivos Gedcom?”.
Sim 82,61%
Não 15,94%
Não Sei 1,45%
“(...) acho que [faltam] sites com informações. Bem como formulário cor-
reto para que possamos [postar] toda a árvore (...).”
1.1. JUSTIFICATIVAS E MOTIVAÇÕES 4
A outra parte clama por um sı́tio que disponibilize, de alguma forma, registros de
fontes primárias, tais como registros civis e religiosos, publicações e outras fontes.
Embora seja maior o número de genealogistas que digam não haver carência de uma
ferramenta de compartilhamento e publicação de dados genealógicos na Internet, a grande
maioria concorda em publicar suas informações em um sı́tio nestas caracterı́sticas. Sim,
foi a resposta de 79,52%, 13,24% disseram que não, enquanto que os 2,24% restantes afir-
maram não saber ou que publicariam somente com certas condições. Um dos questionados
opinou:
Esta opinião é semelhante à maioria das registradas nas respostas positivas. Os entre-
vistados que responderam negativamente afirmaram que não publicariam suas informações
genealógicas por desejarem comercializar seus dados.
Através destes resultados, pode-se concluir que um sı́tio com as caracterı́sticas que
estão sendo utilizadas no trabalho que é objeto desta monografia é realmente bem vindo.
Embora não se sinta uma necessidade tão grande quanto se esperava no inı́cio, vê-se que
as pessoas ligadas à genealogia provavelmente utilizariam da ferramenta elaborada.
É sabido que o compartilhamento de genealogia pode ser feito através de arquivos
Gedcom. Entretanto após distribuir-se um arquivo para familiares, a fim de que eles
possam ajudar na tarefa de inserirem seus próprios troncos, mesmo que haja um grande
cuidado, é muito difı́cil controlar todas as versões que o arquivo poderá ter no final.
Através da aplicação web proposta neste trabalho isto é feito mais facilmente, bas-
tando informar a senha de sua área restrita a quem desejar e assim cada um adiciona a
informação que lhe convém, mantendo a base de dados atualizada. Através da exportação
dos dados do sı́tio para um arquivo Gedcom, as informações locais também podem ser
atualizadas.
1.2 Objetivos
Este trabalho tem como objetivo geral desenvolver mecanismos de uma aplicação web que
torne possı́vel o compartilhamento e a publicação de dados genealógicos utilizando-se das
tecnologias e software livre existente no mercado atualmente.
Os objetivos especı́ficos são:
Capı́tulo 2 - Fundamentos
O capı́tulo 2 mostra um resumo das tecnologias empregadas no desenvolvimento da
aplicação web: a linguagem UML, utilizada para a confecção do modelo navegacional,
a linguagem PHP e o banco de dados PostgreSQL. Além destas tecnologias, uma ex-
planação é feita sobre o Gedcom e o Gentech Genealogical Data Model, ambos recursos
utilizados no trabalho.
Capı́tulo 3 - A Aplicação
O capı́tulo 3 apresenta as decisões tomadas sobre as tecnologias empregadas — a lingua-
gem script PHP e o banco de dados PostGreSQL — no desenvolvimento da aplicação
web, bem como recursos utilizados: o arquivo Gedcom e o modelo de dados genealógico
da Gentech, além de uma breve explanação sobre a arquitetura utilizada. O modelo na-
vegacional da aplicação foi desenvolvido através da linguagem UML. O trabalho objeto
desta monografia possui algumas particularidades que são as rotinas para retornar des-
cendência e ascendência a partir de um determinado indivı́duo e importação e exportação
de arquivos Gedcom. Tais particularidades são descritas e é explicado o funcionamento
de cada uma delas.
Capı́tulo 4 - Conclusão
Finalizando, o capı́tulo 4 apresenta a conclusão deste trabalho, apontando as dificuldades
e algumas considerações relevantes. Uma análise é feita, salientando-se o que poderia ter
sido empregado e feito de maneira diferente. Comparações com ferramentas existentes e
uma abordagem quanto à extensões da aplicação são descritas neste capı́tulo.
Capı́tulo 2
Fundamentos
2.1 Introdução
Neste capı́tulo apresenta-se um resumo das tecnologias e recursos utilizados no desen-
volvimento da aplicação web proposta neste trabalho. No modelo navegacional, que será
apresentado no capı́tulo 3, foram usados os conceitos da UML (Unified Modeling Language
— Linguagem Unificada de Modelagem), uma linguagem gráfica para documentação de
artefatos de sistemas complexos de software. Por isso a seção 2.2 deste capı́tulo define
resumidamente os artifı́cios que a linguagem usa.
Na seção 2.3 é introduzida a linguagem script PHP [11], de uso livre e que por suas
caracterı́sticas, caiu no agrado dos desenvolvedores para web. Uma dessas caracterı́sticas
é seu código-fonte aberto, o que já não é visto como fator negativo. Além disso, é fácil de
usar, mesmo com recursos avançados de programação. O PHP é executado em servidor
Apache, que atualmente é considerado o mais estável. Sua estabilidade com outras tec-
nologias é também um ponto positivo e possui suporte para os mais populares bancos de
dados. São demonstradas também as funcionalidades do PHP, como sintaxe da linguagem,
variáveis, tipos de dados, estrutura de controle, saı́da de dados, como utilizar as funções e
chamadas de funções, como passar informações entre páginas utilizando os métodos GET
ou POST e finalmente sobre criação de sessões e suas utilidades em uma aplicação.
A seção 2.4 faz uma breve explanação sobre o banco de dados utilizado na aplicação
web. O PostgreSql [12] foi escolhido por ser um banco mais robusto, sendo também livre,
como o MySQL [13]. Ele é um sistema de gerenciamento de banco de dados com todas as
funcionalidades de um banco comercial, tais como: visões, restrições, seqüências, tipos,
etc.
Conforme descrito na seção 2.5, o Gedcom é um formato de arquivo que tem como
propósito a troca e compartilhamento de informações genealógicas. Sobre o conteúdo de
um arquivo Gedcom pode se dizer que nada mais é do que um banco de dados com forma
seqüencial de registros. O Gedcom adiciona sintaxe às informação através de marcações
e numeração de nı́veis da informação.
O modelo de dados utilizado neste trabalho, apresentado na seção 2.6, foi inspirado
no GDM da Gentech que é um modelo de dados genealógico. O grupo de trabalho
idealizou um conceito de modelo de dados detalhista, classificando as informações em
sentenças genealógicas. O modelo de dados é divido em três sub-modelos: Sub-modelo de
Administração Sub-modelo de Evidências e Sub-modelo de Conclusões.
8
2.2. UML 9
2.2 UML
2.2.1 Fundamentos Iniciais
UML (Unified Modeling Language) é uma linguagem padrão para elaborar projetos de
softwares. É adequada para a modelagem de sistemas complexos, sistema de informação
corporativo e até mesmo aplicações web. Segundo Booch, Rumbaugh e Jacobson [14] a
UML pode ser usada na visualização, especificação, construção e documentação de um
sistema de software. A modelagem permite a compreensão de um sistema e a UML
indica como criar e ler modelos bem-formados, mas não apontam quais modelos deverão
ser criados, nem quando é necessário criá-los. Em cada sı́mbolo empregado na notação
da UML existe uma semântica bem definida; assim, um desenvolvedor poderá usar a
UML para escrever seu modelo e qualquer outro desenvolvedor ou outra ferramenta, será
capaz de interpretá-lo. A UML não é uma linguagem visual de programação, mas seus
modelos podem ser diretamente conectados a várias linguagens de programação, como
Java, C++, Visual Basic, tabelas de bancos de dados relacionais ou armazenamentos de
dados persistentes de um banco de dados orientado a objetos [14].
Itens Anotacionais. São as partes explicativas dos modelos de UML. São comentários,
incluı́dos para descrever, esclarecer e fazer alguma observação sobre qualquer ele-
mento do modelo. Existe um único tipo deste item, chamado nota. É graficamente
representado por um retângulo com um dos cantos como uma dobra de página,
acompanhado por texto ou comentário gráfico.
2.3 PHP
2.3.1 Caracterı́sticas
O Que É
O PHP (acrônimo recursivo para PHP: Hypertext Preprocessor ) é uma linguagem script
livre, baseada em marcações, largamente usada, destinada especialmente para o desenvol-
vimento de aplicações para web. Não é necessário compilá-la, basta interpretá-la. O PHP
é um módulo oficial do servidor HTTP Apache. É compatı́vel com várias plataformas,
executando em seu formato original em várias versões do UNIX e Windows[15].
Código-Fonte Aberto
Acreditava-se que softwares que não tinham nenhum custo geralmente caiam em catego-
rias como de “programas preenchendo pequenos nichos não-comerciais” ou “programas
fazendo trabalhos sujos, de baixo nı́vel”. Hoje, muitos — senão a maioria — dos mais
importantes softwares são distribuı́dos sem custo. O software para consumidor é visto,
cada vez mais, como uma maneira para se vender mais hardware de servidor, sistemas
operacionais, conectividade, anúncios publicitários, etc. Portanto, o preço total de um
software não é mais uma medida confiável de sua qualidade. Quanto ao servidor, produtos
de código-fonte aberto tornaram-se mais fortes, competindo com os melhores materiais
comerciais.
O que separa os conjuntos de softwares de fonte aberta dos seus competidores, não
é só o preço, mas o controle. Diversos softwares são distribuı́dos sobre várias condições,
sem limitar os propósitos para os quais foi criado[11].
Licença do PHP
A liberdade de código fonte aberto e software gratuito é garantida por um grupo chamado
GPL (GNU General Public License) ou copyleft. O PHP costumava ser liberado tanto
sob a licença GPL como por sua própria licença, com cada usuário livre para escolher
entre eles. Segundo Converse e Park[11], isso mudou recentemente. Agora o programa
como um todo é distribuı́do sob sua própria licença. A maioria das pessoas obtém o PHP
via downloads gratuitos, ou “pagando por ele”, por exemplo, em uma distribuição de
Linux. Usuários de código-fonte aberto podem escolher livremente a melhor equação entre
custo/benefı́cio para cada situação, ou seja, pode-se escolher nenhum custo e nenhuma
garantia, ou algo caro, mas com bom suporte, ou um meio termo.
Facilidade de Uso
“A melhor coisa em se usar PHP é que é extremamente simples para um iniciante, mas
oferece muitas caracterı́sticas avançadas para um programador profissional” [15]. Com
PHP é possı́vel executar qualquer rotina que poderia ser feita com qualquer programa
2.3. PHP 12
CGI, tais como colher informações de formulários, gerar páginas dinâmicas e enviar e
receber cookies, entre outros. Muitas das mais úteis funções especı́ficas, como abrir uma
conexão com um banco de dados ou buscar um correio eletrônico a partir de um servidor
são predefinidas[15].
PHP é Embutido
É uma linguagem usada em conjunto com HTML, ou seja, escreve-se programas PHP no
mesmo arquivo onde o HTML é colocado. O PHP tem pouca relação com leiaute, eventos
ou algo relacionado à aparência de uma página da web.
A linguagem é executada no servidor. Isso significa que o programa não fica disponı́vel
para o usuário que, ao examinar o código fonte da aplicação no navegador, verá somente
as marcações HTML, como mostra o Exemplo 2.3.1.
Exemplo 2.3.1.
<html>
<head>
<title>Meu script PHP</title>
</head>
<body>
<h1>Script em PHP</h1>
<? // Escape para o modo PHP
$texto = "Linha escrita em PHP";
echo"<p>".$texto."</p>";
// retorno para a html
?>
</body>
</html>
Estabilidade
A palavra estabilidade neste contexto significa que o servidor não precisa ser reinicializado
freqüentemente e que o software não sofre alterações e incompatibilidades radicais entre
uma versão e outra. O servidor Apache é considerado o mais estável, embora não seja
o mais rápido e o mais fácil de administrar. O PHP herdou essa confiabilidade e a
implementação é sólida, mas leve. Segundo uma pesquisa feita pelos laboratórios da
Networking Computing em 1999, por um perı́odo de dois meses e meio em um confronto
direto, o servidor Apache com PHP ganhou do IIS/Visual Studio e do Netscape Enterprise
Server/Java no quesito estabilidade de ambiente[11].
2.3.2 Funcionalidades
Sintaxe, Variáveis e Saı́da
Um script em PHP segue um conjunto básico de regras sintáticas, a maioria emprestada de
linguagens de programação como C e Perl. Os requisitos sintáticos do PHP são mı́nimos
e, quando possı́vel, tentam exibir resultados em vez de gerar um erro. Quando houver um
erro de tais regras, será visualizada na janela do browser a mensagem parse error, que
significa “erro de análise sintática”.
O código PHP não reconhece mais de um espaço em branco. Nomes de variáveis são
sensı́veis ao caso, exceto para construções básicas de linguagem (if, then, else, while e
outras) e nomes de funções. Variáveis são indicadas pelo caractere $ inicial, são atribuı́das
utilizando o operador =, não necessitam de nenhuma declaração de tipo. A variável é
global, exceto quando criada dentro de funções, a menos que seja declarado o contrário.
A saı́da para o usuário é através de echo e print. O Exemplo 2.3.2 demonstra esta
funcionalidade.
Exemplo 2.3.2.
<?php
$pais = Brasil;
A saı́da será:
Tipos no PHP
São seis os tipos: inteiros, números de dupla precisão, booleanos, string, array e objeto.
Inteiros são números não-fracionários, números de dupla precisão (doubles) são números
de ponto flutuante, booleanos são os valores verdadeiro ou falso e strings são seqüências
de caracteres. Array é um tipo composto que armazenam outros valores do PHP, inde-
xados tanto por inteiros ou por strings. Objetos são instâncias de classes definidas pelo
programador, que podem ter tanto variáveis membros como funções membro e podem
herdar funções e tipos de dados de outras classes. Somente valores têm tipos no PHP,
variáveis não tem nenhum outro tipo inerente além da atribuição mais recente. Os tipos
de valores são convertidos automaticamente de acordo com a demanda do contexto[11].
Estruturas de Controle
O PHP tem uma estrutura de controle semelhante à linguagem C, que desvia ou faz loop
dependendo dos valores das expressões booleanas, que podem ser combinadas utilizando
operadores booleanos (and, or, !, &&, ||). As estruturas if e switch são utilizadas para
desvio simples enquanto que while, do-while e for são utilizada para loop e exit e die
terminam a execução do script[11].
Funções
PHP possui um grande número de funções predefinidas fornecidas por desenvolvedores de
código-fonte aberto do PHP. “Cada uma dessas funções deve ser documentada (mesmo que
brevemente) no manual on-line em http://www.php.net.” [11]. É possı́vel escrever funções
próprias que serão utilizadas exatamente da mesma forma que as funções predefinidas com
uma sintaxe simples como mostra o Exemplo 2.3.3.
Exemplo 2.3.3.
Funções definidas pelo usuário podem utilizar argumentos de qualquer tipo e também
podem retornar quaisquer tipos de valores. Os tipos de argumentos e o valor de re-
torno não precisam ser declarados. A ordem da definição e chamadas de funções não
faz nenhuma diferença, contanto que toda função chamada seja definida apenas uma vez.
Variáveis atribuı́das dentro de uma função são locais a essa função, a menos que especifi-
cadas com uma declaração global. O comportamento padrão para funções definidas pelo
usuário é “chamada por valor”, ou seja, funções trabalham com cópias de seus argumen-
tos e assim não podem modificar as variáveis originais na chamada de função. Caso seja
necessário forçar o comportamento de chamada por referência precede-se os parâmetros
com o caracter &, tanto no lado da definição como no lado da chamada[11].
2.3. PHP 15
Sessões
As sessões são úteis para monitorar o comportamento do usuário ao longo de interações que
duram mais que a execução de um script ou download de página. Se um resultado depende
de quais páginas o usuário passou ou interagiu, o código precisará armazenar ou propagar
essas informações em uma maneira que distingua um usuário de outro. Como já foi dito
anteriormente, o HTTP é do tipo sem informações de estado, isso requer algum tipo de
técnica para contornar o problema. Podem ser utilizadas variáveis ocultas que funcionam
como uma maneira de manter sessões diferentes e associar variáveis a essa sessão, ou
cookies que não são universalmente suportados pelos navegadores clientes. A primeira
etapa em um script que utiliza o recurso sessão é deixar o PHP saber que uma sessão
já pode estar em progresso, para que ele possa se conectar a ela e recuperar quaisquer
informações associadas. Isso é feito chamando a função session start(). Essa função
importa quaisquer variáveis do contexto de sessão para o script. Entretanto para exportar
para páginas posteriores utiliza-se a função session register(). Essa função coloca o
mecanismo de sessão em aviso de que a variável deve ser exportada para todas as sessões
e que páginas posteriores na mesma sessão devem receber a variável vinculada à esta. As
variáveis de sessão são registradas como superglobais. A função session unregister()
recebe um nome de variável de string como argumento e libera a variável correspondente
da sessão como demonstrado no Exemplo 2.3.4.
Exemplo 2.3.4.
<?
session_start();
session_register(’username’)
?>
<HTML>
<HEAD>
<TITLE>Teste de Sessao</TITLE>
2.4. POSTGRESQL 16
</HEAD>
<BODY>
<H3>Teste de sessao</H3>
ID de sua sessao:
<?
print(session_id());
?>
<BR>
<?
if (IsSet($posted_username))
$username = $posted_username;
if (IsSet($username))
{
print ("<P> Seu nome: \$username<BR>");
}
?>
<P>
<FORM METHOD="POST" ACTION="<? Echo \$PHP_SELF; ?>">
Nome: <INPUT TYPE="TEXT" NAME="posted_username"><BR>
<INPUT TYPE="SUBMIT" NAME="Enviar" Value="Lembre-me!">
</FORM>
</BODY>
</HTML>
2.4 PostgreSQL
Normalmente o banco de dados escolhido para ser usado em conjunto com PHP é o
popular MySQL. Porém para este trabalho optou-se por usar o PostgreSQL, um banco
de dados mais robusto e também de uso livre, o qual tem todas as funcionalidades de um
banco de dados comercial.
O PostgreSQL é um SGBDOR (sistema de gerenciamento de banco de dados objeto-
relacional) baseado na versão 4.2 do POSTGRES, que foi desenvolvido pelo Departamento
de Ciência da Computação da Universidade da Califórnia. Oferece suporte às linguagens
SQL92/SQL99 e outras funcionalidades que serão descritas adiante.
de Berkeley” [12], que passou a ser comercializado pela Illustra Information Technologies
(empresa atualmente pertencente a IBM).
O nome Postgres95 já não era adequado quando o ano de 1996 se iniciou, então o nome
PostgreSQL foi escolhido “para refletir o relacionamento entre o POSTGRES original e
as versões mais recentes com funcionalidade SQL” [12]. Além disso algumas melhorias
foram incluidas nesta versão, principalmente com relação à funcionalidade e recursos.
Segundo The PostgreSQL Global Development Group [12], a simplicidade o modelo
relacional tornou a implementação de certas aplicações muito difı́cil. Porém recursos
adicionais incorporados ao PostgreSQl, fazem com que a extensão de sistemas seja mais
fácil. Tais recursos são: herança, tipos de dados, e funções. Restrições, gatilhos, regras e
integridade de transação dão flexibilidade e poder adicionais.
Além dos tradicionais tipos (inteiro, ponto flutuante, caracter, data/hora, etc) o Post-
greSQL tem outros tipo, dentre eles os quais:
Para fazer atualização nos registros da tabela, usa-se o comando update, como mos-
trado no Exemplo 2.4.6.
Exemplo 2.4.6.
Exemplo 2.4.7.
Para ter acesso ao banco de dados gerenciado pelo PostgreSQL, executa-se o programa
de terminal interativo do PostgreSQL chamado psql, que permite a entrada, edição e
execução de comandos SQL interativos. Pode-se também utilizar uma ferramenta cliente
gráfica disponı́vel ou a ferramenta de um pacote de automação de escritórios com suporte
a ODBC para criar e manusear bancos de dados ou ainda usar aplicativos personalizados.
No caso do presente trabalho foi usada a última opção, utilizando-se a linguagem script
PHP no desenvolvimento da aplicação web. A conexão com o banco de dados é feita
através da função pg connect(), reconhecida pelo PHP. O Exemplo 2.4.8 mostra como
isso é feito.
Exemplo 2.4.8.
<?
pg_connect("host=xxx.xxx.xxx.xxx dbname=<nome_do_bd>
user=<usuario> password=senha")
?>
Exemplo 2.4.9.
Exemplo 2.4.10.
2.5 Gedcom
O Gedcom (GEnealogical Data COMunicator ) é um formato de arquivo para troca de
informações genealógicas. Ele foi desenvolvido pelo Departamento de História da Famı́lia
e da Igreja de A Igreja de Jesus Cristo dos Santos dos Últimos Dias. A última versão do
arquivo, que é a 5.5.1, foi distribuı́da em 2 de outubro de 1999 e é a versão que a maioria
dos softwares genealógicos lê e escreve.
O propósito do Gedcom “é promover o compartilhamento de informações genealógicas
e o desenvolvimento em larga escala de software inter-operáveis para ajudar a genealogis-
tas, historiadores, e a outros investigadores” [16]. Tanto é verdade que, entre dezenas de
softwares destinados ao gerenciamento de árvores genealógicas, a grande maioria exporta
informações para e importa informações contidas em arquivos Gedcom, além de ter seu
próprio formato de arquivo.
Este formato de arquivo foi criado para troca de informações genealógicas, entretanto
ele pode ser usado para outros fins. Considere-se a informação do Exemplo 2.5.1.
Exemplo 2.5.1.
Jose Antonio Pereira, 19 de marco de 1825, Monte Alegre, MG.
O dado acima pode ser referente a uma pessoa de nome José Antônio Pereira e sua
data e local de nascimento ou qualquer outro evento que tenha acontecido na vida deste
indivı́duo. A informação pode se referir também a um livro de tı́tulo “José Antônio
Pereira” e sua data e local de publicação.
A tarefa do Gedcom é adicionar semântica às informações. Através de nı́veis e marcas
os dados da sentença acima ganham significado. A sentença ficaria como no Exemplo
2.5.2
Exemplo 2.5.2.
0 INDI
1 NAME Jose Antonio Pereira
1 BIRT
2 DATE 19 de marco de 1825
2 PLACE Monte Alegre, MG
O código acima não é um Gedcom válido, entretanto é desta maneira que as in-
formações, marcações e nı́veis ficam dispostos no arquivo. Pelo trecho de código acima,
pode-se perceber que o conteúdo de um arquivo Gedcom nada mais é que um banco de
dados em forma seqüencial de um conjunto de registros. Estes registros são representados
através de uma seqüência de linhas hierarquicamente dispostas, seguindo um padrão de
marcação.
2.5. GEDCOM 21
Cada linha contém um número hierárquico do nı́vel (0, 1, 2, ...), uma marca (INDI,
NAME, BIRT, ...) e um valor opcional (José Antônio Pereira, 19 de março de 1825,
...). Uma linha pode ter também um identificador de referência cruzada e um apontador.
Levando-se em consideração o contexto hierárquico, a marcação de uma linha identifica a
informação nela contida, da mesma forma que o nome de um campo identifica um campo
em um banco de dados.
O código do Exemplo 2.5.3 é um Gedcom válido.
Exemplo 2.5.3.
1 0 @I321@ INDI
2 1 NAME Jose Antonio /Pereira/
3 1 SEX M
4 1 BIRT
5 2 DATE 19/03/1825
6 2 PLAC Monte Alegre, Minas Gerais, Brasil
7 1 DEAT
8 2 DATE 11/01/1900
9 2 PLAC Campo Grande, Mato Grosso do Sul, Brasil
O código foi indentado para uma melhor visualização e entendimento da estrutura
do arquivo. A linha 1 traz o nı́vel hierárquico 0, onde @I321@ é o identificador de um
indivı́duo, INDI. O próximo nı́vel, 1, na linha 2, traz a marca NAME com o valor José
Antônio /Pereira/. O sobrenome vem separado por barras (/). Na linha 3 há outra
linha com nı́vel 1, que informa o sexo do indivı́duo em questão. Nas linhas 4, 5 e 6 são
apresentadas as informações do nascimento. As linhas 5 e 6 tem o nı́vel hierárquico 2, o
que quer dizer que as informações nela contidas dizem respeito à linha de nı́vel hierárquico
1 imediatamente anterior a elas. As linhas 7, 8 e 9 mostram as informações de óbito do
indivı́duo em questão.
Algumas adições foram feitas ao código do exemplo 2.5.3, resultando no código do
exemplo 2.5.4, para mostrar outras marcações e alguns relacionamentos. Nesta segunda
versão do código, o indivı́duo de identificador @I321@ recebeu outra informação, que está
na linha 10. A marca FAMS significa que o indivı́duo participa da famı́lia de identificador
@F56@ como esposo (FAMS = Family Spouse).
Exemplo 2.5.4.
1 0 @I321@ INDI
2 1 NAME Jose Antonio /Pereira/
3 1 SEX M
4 1 BIRT
5 2 DATE 19/03/1825
6 2 PLAC Barbacena, Minas Gerais, Brasil
7 1 DEAT
8 2 DATE 11/01/1900
9 2 PLAC Campo Grande, Mato Grosso do Sul, Brasil
10 1 FAMS @F56@
11 0 @I322@ INDI
12 1 NAME Maria Carolina de /Oliveira/
13 1 SEX F
2.6. GENTECH GENEALOGICAL DATA MODEL 22
14 1 BIRT
15 2 DATE After 1825
16 2 PLAC Minas Gerais, Brasil
17 1 DEAT
18 2 PLAC Campo Grande, Mato Grosso do Sul, Brasil
19 1 FAMS @F56@
20 0 @I323@ INDI
21 1 NAME Antonio Luiz /Pereira/
22 1 SEX M
23 1 BIRT
24 2 DATE About 1845
25 2 PLAC Minas Gerais, Brasil
26 1 FAMC @F56@
27 0 @F56@ FAM
28 1 HUSB @I321@
29 1 WIFE @I322@
30 1 CHIL @I323@
31 1 MARR
32 2 PLAC Sao Joao Del-Rey, Minas Gerais, Brasil
é uma organização sem fins lucrativos fundada em 1903. Enquanto a missão da NGS
situa-se somente no âmbito da genealogia, o objetivo da Gentech é conectar genealogia e
tecnologia.
Além de organizar conferências anuais, a Gentech desenvolve projetos, dos quais um
deles é o GDM. A versão 1.1 foi distribuı́da em 29 de maio de 2000. Os membros do grupo
que desenvolveram o modelo de dados concluı́ram que “é difı́cil definir dados genealógicos
fora de um contexto por causa das várias maneiras que as pessoas interpretam os termos
genealógicos”. Partindo deste pensamento, o grupo decidiu construir o modelo de dados
dentro do contexto de um modelo de dados lógico.
Sub-modelo de Administração
Como o modelo de dados sugerido pela Gentech propõe uma modelagem sofisticada e
detalhista, prevendo que os genealogistas tenham projetos de pesquisa, este sub-modelo
refere-se às entidades primariamente usadas para manter-se a par do projeto. O diagrama
mostrando parte do sub-modelo de administração está na figura 2.1.
2.6. GENTECH GENEALOGICAL DATA MODEL 24
Sub-modelo de Evidências
Este sub-modelo é destinado às informações evidenciais dentro do universo dos dados
genealógicos. Para isso o modelo possui entidades, presentes no diagrama da figura 2.4,
que completam as informações que são representadas pelas entidades do Sub-modelo de
Conclusões discutido a seguir na subseção 2.6.1.
Como mostra o diagrama da figura 2.4, a entidade SEARCH, do Sub-modelo de Admi-
2.6. GENTECH GENEALOGICAL DATA MODEL 25
Sub-modelo de Conclusões
O Sub-modelo de Conclusões é o coração do modelo de dados da Gentech.
2.6. GENTECH GENEALOGICAL DATA MODEL 27
“Uma vez que um pedaço de evidência foi isolado para o nı́vel atômico
de uma simples extração de SOURCE, o RESEARCHER então usa aquela
sentença para fazer uma ASSERTION. Perceba que a extração atual está
armazenada em REPRESENTATION, mas está disponı́vel para a entidade
ASSERTION através de um registro SOURCE, (...)” [17].
Agora é necessário entender como todas as sentenças genealógicas são capturadas por
ASSERTION. Tais sentenças são fragmentadas em tipos de assuntos que são as entidades
PERSONA, EVENT, GROUP e CHARACTERISTIC. Cada ASSERTION contem uma
sentença, como descrito abaixo. Na sentença, ID aponta para uma ocorrência daquele
tipo.
Porém o sentimento que os integrantes do Lexicon Group nutrem pelo modelo por eles
criado não fez com que ele fosse um fracasso. O GDM é citado em dezenas de artigos e
trabalhos apresentados em eventos de genealogia. Pode-se dizer que talvez eles tenham
sido muito crı́ticos consigo mesmos.
Foi encontrada somente a versão 1.0 do diagrama completo da Gentech, o qual está
presente no Apêndice B à página 50.
A Aplicação
3.1 Introdução
Ainda tendo em mente as tecnologias e recursos citados no capı́tulo 2, são demonstradas,
neste capı́tulo, as decisões que levaram a tais escolhas e algumas particularidades da
aplicação desenvolvida, disponı́vel para acesso através da URL www.radici.com.br. A
aplicação usa a arquitetura cliente/servidor, discutida na seção 3.2.
A seção 3.3 explica o motivo da escolha da linguagem script PHP. Discorre ligeiramente
sobre o por quê de não haver sido utilizada a linguagem Java. É comentada também a
decisão pelo PostgreSQL e não pelo MySQL. Como a razão pela escolha de um pelo outro
é muito forte e ao mesmo tempo simples, isso foi tratado rapidamente.
A utilização dos recursos são abordadas na seção 3.4. É explicado o que foi usado
do modelo da Gentech e apresenta o modelo de dados desenvolvido para a aplicação
web. O uso do Gedcom na ferramenta desenvolvida é abordado somente fazendo-se uma
explicação de quais marcações do Gedcom serão reconhecidas pela aplicação.
A navegabilidade da aplicação web está definida na seção 3.5, onde é mostrado um
modelo navegacional que utiliza uma extensão do diagrama de classes da UML, no qual
são determinadas e explicadas a ligação entre as páginas e a função de cada uma delas.
A seção 3.6 discorre sobre as particularidades do sistema, ou seja, rotinas que não
são comuns à maioria dos sı́tios existentes. O script que extrai a Descendência de um
indivı́duo é feito através de uma pequena função recursiva. O retorno da Ascendência,
dado determinado indivı́duo, também é feito através de uma função recursiva, esta utiliza
conceito de árvore binária. A tarefa para importar um arquivo Gedcom não é simples e
é feita através de muitas funções. O reconhecimento das marcações e nı́veis hierárquicos
precisa ser feito, para então, extrair-se os dados. A exportação dos dados para Gedcom é
simples. As informações colhidas do banco de dados são impressas na página já mescladas
com as marcações e nı́veis através da função PHP echo().
3.2 Arquitetura
Para a aplicação web desenvolvida foi adotada uma arquitetura bastante usual: a cli-
ente/servidor [18]. No caso especı́fico da aplicação web, a camada de negócios e o banco
de dados estão localizados no lado servidor e a porção cliente é a interface visualizada
através do navegador. O cliente solicita serviços ao servidor, que atende ao pedido. A
figura 3.1 demonstra o processo.
31
3.3. DECISÕES 32
3.3 Decisões
3.3.1 Linguagem
No inı́cio dos trabalhos de desenvolvimento e implementação da aplicação web havia mui-
tas possibilidades de tecnologias e recursos a serem usados. No que tange a linguagens de
programação para web, indiscutivelmente Java seria a opção mais elegante a ser usada,
onde seriam utilizados os conceitos de orientação a objetos e persistência de objetos apren-
didos durante o curso de especialiação de Engenharia de Websites.
Porém não foram detectadas necessidades da utilização dos recursos de tal linguagem.
Foi concluı́do que as funcionalidades poderiam ser implementadas utilizando-se de uma
linguagem mais fácil e, portanto, despenderia menor tempo de desenvolvimento.
Foi decidido, portanto, que a linguagem script PHP seria usada por causa de sua
portabilidade, por também ser de código-fonte aberto e muitas outras caracterı́sticas,
as quais foram abordadas na seção 2.3 do capı́tulo 2 à página 11. PHP também foi
uma linguagem aprendida durante o curso. Outro motivo relevante é que, devido sua
popularidade, há mais opções de servidores para hospedagem.
cadastrado, ele poderá fazer o login. Se esta operação for sucedida, será redirecionado
para a já mencionada área reservada da aplicação.
Se o usuário desejar fazer uma pesquisa, preencherá o campo do formulário de pes-
quisa com um nome e/ou um sobrenome (a pesquisa pode ser feita através de qualquer
página da aplicação, porém, por motivos de clareza, este relacionamento não foi colo-
cado nos diagramas). O diagrama da figura 3.4 esclarece navegação a partir da pesquisa.
HTMLResultado mostrará uma relação de nomes se a busca retornar algum resultado.
Associadas a cada nome da relação há três opções a serem escolhidas:
Na linha 4, a variável $filho é inicializada. Esta variável terá seu valor incremen-
tado em “1” na linha 21 e concatenada com $n, um dos parâmetros passados pela
função. O código HTML é escrito na linha 7 criando uma lista. Nesta mesma li-
nha a função PegaNome() retorna o nome do indivı́duo através do identificador passado
como parâmetro. O identificador do cônjuge é retornado em um vetor através da função
PegaIdConjuge(). Mais uma vez a função PegaNome() é usada para trazer o nome do
3.6. PARTICULARIDADES DA APLICAÇÃO 38
cônjuge na linha 16. O identificador dos filhos do indivı́duo e seu cônjuge são retorna-
dos através da função PegaFilho() na linha 18 e finalmente na linha 24 há a chamada
recursiva da função Desc(). A figura 3.6 é o resultado do uso desta função.
3.6.2 Ascendência
Para retornar a Ascendência a partir de um indivı́duo também foi criada uma função.
Tal função usa o conceito de árvores binárias. Isso quer dizer que se um indivı́duo ocupa
a posição n em uma árvore genealógica, seu pai ocupará a posição 2n e sua mãe, 2n+1.
3.6. PARTICULARIDADES DA APLICAÇÃO 39
Gráfico Ahnentafel:
Primeira Geração
1. Filho
Segunda Geração
2. Pai
3. Mãe
Terceira Geração
4. Avô paterno
5. Avó paterna
6. Avô materno
7. Avó materna
Quarta Geração
8. ...
9. ...
10. ...
Na linha 3, a variável $ids é declarada como global para que não perca seu valor
a cada chamada da função. As variáveis $pai e $mae recebem o valor 0 nas linhas 4 e
5. Na linha 7 a função PegaPais() retorna para um vetor os identificadores dos pais do
indivı́duo. O vetor $ids[] recebe o valor do identificador indexado pelo seu número de
posição na árvore genealógica. A verificação feita nas linhas 13 e 16 ($i < 8) asseguram
que somente serão retornados os indivı́duos até a quarta geração. Nas linhas 14 e 17 são
feitas as chamadas recursivas para o pai e a mãe do indivı́duo. A função retorna o vetor
$ids. O resultado aparece na página da maneira como mostra a figura 3.7.
indivı́duo já é conhecido. Isto não é feito porque o modelo de dados do arquivo Gedcom
é diferente do modelo de dados desenvolvido para a aplicação web. No Gedcom há a
marcação FAM, de onde são tiradas as informações do evento do tipo casamento. Em um
arquivo onde conheça-se somente um dos pais de determinado indivı́duo irá existir uma
entrada para a marcação FAM da maneira como figura o exemplo 3.6.1, a famı́lia contem
3.6. PARTICULARIDADES DA APLICAÇÃO 42
Exemplo 3.6.1.
0 @F1@ FAM
1 HUSB @I1@
1 CHIL @I2@
1 CHIL @I3@
Se a entrada do casamento fosse feita na primeira etapa, onde não seria verificada a
existência de um cônjuge, seria inserido no banco de dados um evento do tipo casamento,
mesmo sem dado algum, para o indivı́duo que leva o identificador @I1@. Como na verdade
não existe um casamento, pois não há cônjuge, isso geraria inconsistência no modelo de
dados empregado para a aplicação.
3.7. CONSIDERAÇÕES FINAIS 43
header(’Content-type: text/gedcom’);
header(’Content-Disposition: attachment; filename="info.ged"’);
perceber, cada ferramenta está acessı́vel a partir de vários pontos da navegação para dar
mais agilidade à navegabilidade.
A seção 3.4 discorreu sobre o emprego do Gedcom e do Gentech Genealogical Data
Model (GDM). Somente parte da especificação do Gedcom é reconhecida pela aplicação.
Apenas as informações referentes ao indivı́duo e os eventos do tipo nascimento, casamento
e óbito. Como o GDM é realmente detalhista somente foi usado um sub-conjunto deste,
adequando-se as entidades e relacionamentos para os objetivos da aplicação.
As particularidades da aplicação web foram descritas na seção 3.6. As funções que
retornam a Descendência e a Ascendência de determinados indivı́duos foram descritas
nesta seção. São funções recursivas simples. As rotinas para a importação de e exportação
para arquivos Gedcom foram também discutidas.
Capı́tulo 4
Conclusão
45
4.2. COMPARAÇÕES 46
local e data do(s) casamento(s) (se for o caso); nome do(s) filho(s) gerado pelo(s)
casamento(s).
A conclusão desta forma de apresentação da genealogia é a que apresenta o maior
número de informações, o que é considerado ideal. Para a disponibilização do sı́tio
a usuários a única mudança que poderia ser feita seria no leiaute da página.
Para facilitar a navegação e acesso às informações, foi adotado um padrão na aplicação.
Sempre que o nome de um indivı́duo for citado, ele conterá uma ligação para a página
que mostra seu Relatório. E tal página possui ligação para a Ascendência, Descendência
a obtenção do arquivo Gedcom. Com isso, acredita-se que o quesito acessibilidade pode
ser considerado como satisfatório.
Enfim, pode-se afirmar que todas as funcionalidades satisfazem seu propósito. Desde
o gerenciamento, à consulta e à apresentação dos resultados, todas foram concluı́das.
Lembrando que os objetivos são apresentar as funcionalidades necessárias para um sı́tio
genealógico e não um sı́tio completo, com todos os requisitos que deveria ter.
4.2 Comparações
A aplicação web desenvolvida, que originará um sı́tio para a comunidade genealógica, é
incomparável no que diz respeito a gratuidade do uso e na existência de algo semelhante
em Português.
Há vários sı́tios dedicados à construção de árvores genealógicas, inclusive com a opção
de importação de arquivos Gedcom, porém todos eles são usados mediante pagamento
de taxas (One Great Family [19] e My Family [20]) ou permitem a inserção de algumas
gerações e, para que mais indivı́duos possam ser incluı́dos, a compra de um software
1
Formato de arquivo genealógico, descrito na seção 2.5 do capı́tulo 2 à página 20.
4.3. TRABALHOS FUTUROS 47
genealógico é necessária. Sendo estes sı́tios em Inglês e desenvolvidos nos Estados Unidos,
a maioria das informações neles contidas dizem respeito ao próprio Paı́s.
O sı́tio Family Search [21] de A Igreja de Jesus Cristo dos Santos dos Últimos Dias
pode ser comparado ao propósito desta aplicação. Este sı́tio também tem o objetivo
de compartilhar genealogia e o faz disponibilizando vários bancos de dados contendo in-
formações genealógicas: censos realizados em vários paı́ses, informações da própria igreja,
dados enviados através de arquivos Gedcom por usuários do sı́tio, entre outros.
Como o objetivo do Family Search é, por conta dos preceitos da Igreja, ajudar aos
membros a construirem sua história familiar, não existem funcionalidades de gerencia-
mento. Somente a consulta é possı́vel. Considerando-se que genealogia é um trabalho que
não tem fim, tal gerenciamento torna-se necessário, é neste ponto que a aplicação web
desenvolvida distingue-se com mais intensidade do sı́tio em questão.
Outro ponto importante a ser relevado é que no Family Search somente ficam dis-
ponı́veis as informações de indivı́duos já falecidos. Não será discutido o mérito disso, pois
tais informações são suficientes para os objetivos do sı́tio. Ou seja, o Family Search é uma
grande fonte de informações para os futuros usuários da aplicação web.
Questionário
3. Há quanto tempo se dedica à genealogia? (por favor, marque somente uma alterna-
tiva)
() 1 ano
() De 2 anos a 5 anos
() De 6 anos a 10 anos
() Mais de 10 anos
4. Onde normalmente você procura e/ou obtém informações? (marque mais de uma
opção se necessário)
() Livros
() Registros Religiosos
() Registros Civis
() Outros registros
() Publicações de outros genealogistas
() Informações verbais
() Sites pessoais e/ou portais de genealogia
() Periódicos antigos
() Outros
48
APÊNDICE A. QUESTIONÁRIO 49
50
APÊNDICE B. DIAGRAMA - GENTECH GENEALOGICAL DATA MODEL 51
52
REFERÊNCIAS BIBLIOGRÁFICAS 53
[21] A Igreja de Jesus Cristo dos Santos dos ltimos Dias. Familysearch internet genealogy
service. http://www.familysearch.org. Data do acesso: 13 de abril de 2004.