Você está na página 1de 109

INSTITUTO FEDERAL DE CIÊNCIA E TECNONOLOGIA DE SÃO PAULO

CÂMPUS SÃO JOÃO DA BOA VISTA

WILLIAN CESAR DA SILVA

Ontologia de Sistemas Para Internet: proposta de um catálogo bibliotecário


online baseado em banco de dados orientado a grafos

São João da Boa Vista


2013
WILLIAN CESAR DA SILVA

Ontologia de Sistemas para Internet: proposta de um catálogo bibliotecário


online baseado em banco de dados orientado a grafos

Trabalho de conclusão de curso apresentado ao Instituto Federal


de Educação, Ciência e Tecnologia de São Paulo, como parte
dos requisitos para a obtenção do grau de Tecnólogo em
Sistemas para Internet

Área de Concentração: Linguística Computacional

Orientadora: Profa. Dra. Rosana Ferrareto Lourenço Rodrigues

Coorientadores: Prof. Ms. Gustavo Aurélio Prieto e Ms. Maria


Carolina Gonçalves

São João da Boa Vista


2013
Autorizo a reprodução e divulgação total ou parcial deste trabalho, por qualquer meio
convencional ou eletrônico, para fins de estudo e pesquisa, desde que citada a fonte.

Ficha catalográfica preparada pela Seção de Tratamento


da Informação do Serviço de Biblioteca – IFSP

Silva, Willian Cesar. Ontologia de Sistemas para Internet: proposta


de um catálogo bibliotecário online baseado em banco de dados
orientado a grafos.

Willian César da Silva; orientadora Rosana Ferrareto Lourenço


Rodrigues. São João da Boa Vista, 2013.

Trabalho de Conclusão de Curso, IFSP, 2013.

1. Ontologia. 2. Catálogo Online. 3. Banco de dados. 4. Grafos.

I. Ontologia de Sistemas para Internet: proposta de um


catálogo bibliotecário online baseado em banco de
dados orientado a grafos.

AGRADECIMENTOS
AGRADECIMENTOS

Deixo aqui minha loucura em forma de agradecimentos, pois é o único lugar em que a
citação é desnecessária, a referência é incerta, o entendimento é subjetivo, a explicação não se
deve, e apesar de tudo, a correção passa em silêncio por esta parte das veredas: os sermões.
Começo aqui meu agradecimento a Deus, por permitir minha existência.
A Cristo, pela sua mania de derrubar dogmas milenares, com simples frases que mal
preenchem linhas, mostrando que o conhecimento por vezes é a extensão da loucura humana.
Agradeço a minha orientadora Rosana Ferrareto, pela sua iniciativa, ousadia e esforço
de buscar seu lugar em um espaço totalmente tecnológico. Agradeço pela sua paciência e
calma e o positivismo de “dará certo!”, embora a minha mente estivesse pensando no que
poderia dar errado.
Ao Gustavo Prietro, meu coorientador, por ser prestativo e emprestar seu tempo e
inteligência para a realização do projeto. Agradeço por ter me apresentado os “Grafos”.
Espero utilizá-los em outras ocasiões, nem que for para desenhar árvores de natal.
Agradeço a Maria Carolina Gonçalves da biblioteca, pela sua contribuição no
trabalho, pela sua visão, e sugestões, o que tornou o trabalho altamente profissional. Que pena
não ter conseguido por a imagem do livro junto de uma estante, mas deixa para o próximo.
Ao Erasmo Roberto Marcelino, pesquisador da UNESP e colaborador da pesquisa,
que tive o prazer de conhecer, por ter contribuído com seu tempo e suas ideias que
enriqueceram muito o trabalho. Peço desculpas ao frio que passou esperando uma carona para
o “de volta para minha terra”, quando da visitação no IFSP.
Ao meu pai, por ter ensinado que todo trabalho é digno.
A minha mãe, por ter sempre incentivado meus estudos.
Ao Leo e ao Filipe, por estarem relacionados a esta pesquisa. Tentei fazer o máximo
para facilitar o entendimento de tudo o que fiz e escrevi.
Agradeço aos meus amigos, por estarem sempre à disposição.
A todos os professores que tive o prazer de conhecer. Cada um sempre será uma
inspiração para seguir em frente.
Agradeço pelas tardes filosóficas em que Rosana, Gustavo, Carol, Erasmo, Leo, Filipe
e este pequeno ser que vos escreve, estivemos reunidos, não nesta ordem, nem mesmo sempre
todos juntos.
E estas linhas vão para aqueles que, por ventura, eu tenha esquecido de agradecer, pois
não deixara de ser uma citação indireta indeterminada.
RESUMO
SILVA, W. C. (2013). Ontologia de Sistemas para Internet: proposta de um catálogo
bibliotecário online baseado em banco de dados orientado a grafos. Trabalho de Conclusão de
Curso - Instituto Federal de Educação, Ciência e Tecnologia de São Paulo, São João da Boa
Vista, 2013.

Esta pesquisa tem como objetivo apresentar uma proposta de desenvolvimento de um catálogo
online para a biblioteca baseado em uma ontologia construída a partir da bibliografia básica do
Curso de Tecnologia em Sistemas para Internet. Uma ontologia, de forma concisa, é a relação
de conceitos, neste caso, no âmbito da informática. Ao estabelecer relações entre esses
conceitos, foi criado um mapa conceitual, que auxiliará o bibliotecário a definir o assunto de
uma obra quando da sua catalogação. De fato, a dificuldade dos bibliotecários no momento da
catalogação é saber em qual assunto determinada obra pode ser inserida, pois a área tecnológica
e muitas outras não são de domínio dos bibliotecários. Diante disso, os dados (corpus) para a
constituição da ontologia foram retirados dos sumários, pois esses contêm palavras que
geralmente não são contempladas no título da obra, o que amplia as possibilidades do alcance
das relações entre as palavras e facilita a determinação do assunto. Para o levantamento do
corpus, foi utilizado o software AntConc, que é uma ferramenta de análise lexical que auxilia o
pesquisador a coletar e organizar os dados. A próxima etapa do trabalho consistiu em fazer o
relacionamento entre os conceitos por meio de um vocabulário controlado na área da
informática. Cada conceito da ontologia foi relacionado à obra de que foi retirado. O próximo
passo foi inserir essa ontologia no banco de dados orientado a grafos, Neo4j, o que possibilitou
o armazenamento e também a otimização na recuperação dos dados, por meio da criação de
uma página Web desenvolvida na linguagem de programação Java. Dessa forma, por meio do
catálogo, foi possível percorrer e recuperar os conceitos e as obras inseridas no banco de dados.

Palavras-chaves: Ontologia. Catálogo Online. Banco de dados. Grafos.


ABSTRACT
SILVA, W. C (2013). Internet Systems Ontology: proposal for an online library catalog based
on a graph-oriented database. Monograph – Instituto Federal de Educação, Ciência e
Tecnologia de São Paulo, São João da Boa Vista, 2013.

This research aims at presenting a proposal for developing an online catalog for a library based
on an ontology constructed from the basic bibliography of the Technology Course on Internet
Systems. An ontology, concisely, is the relation of concepts, in this case, about computing. In
order to establish relations among these concepts, a conceptual map was created to help the
librarian to define the subject of a document when cataloging it. In fact, the difficulty of the
librarians at the time of cataloging is to know which subject certain document can be inserted
in because the technology area and many others are not of the librarians’ domain. Therefore,
the data (corpus) to form the ontology were removed from the summaries, as these contain
words that are not usually included in the title of the document, which expands the possibilities
of the relation extents among words and thus helps determine their subject. As a
methodological procedure for collecting the data in the corpus, the AntConc software was used.
It is a lexical analysis tool that helps the researcher to collect and organize data. The next stage
consisted of relating the concepts by means of a controlled vocabulary in Computer Science.
Beside, each concept of the ontology was related to the document it belonged to. The next step
was to insert this ontology in a graph-oriented database, Neo4j, which also enabled the storage
and optimization in data recovery, through the creation of a web page developed in the Java
programming language. Thus, through the catalog, it was possible to review and retrieve the
concepts and the documents entered in the database.

Keywords: Ontology. Online Catalog. Database. Graphs.


LISTA DE FIGURAS
Figura 1: Árvore de Porfírio ............................................................................................ 18
Figura 2: Classificação ontologia .................................................................................... 19
Figura 3: Exemplo hiperônimo Segurança e seus hipônimos.......................................... 26
Figura 4: Exemplo hiperônimo Redes e seus hipônimos ................................................ 26
Figura 5: Exemplo de grafo ............................................................................................. 27
Figura 6: Exemplo ontologia de linguagem de programação .......................................... 28
Figura 7: Exemplo relacionamento semântico WordNet ................................................ 29
Figura 8: Relações de sentido por fenômeno de linguagem ............................................ 29
Figura 9: Fontes dos Dados ............................................................................................. 35
Figura 10: Exemplo de relação de amizades em grafo .................................................... 37
Figura 11: Matriz de adjacência ...................................................................................... 38
Figura 12: Lista de Adjacência ........................................................................................ 39
Figura 13: Exemplo de percurso em profundidade ......................................................... 42
Figura 14: Grafo direcional ............................................................................................. 43
Figura 15: Grafo direcional acíclico ................................................................................ 44
Figura 16: Grafo Ontologia ............................................................................................. 46
Figura 17: Propriedade dos grafos Neo4j ........................................................................ 50
Figura 18: Tela inicial Neo4j Server ............................................................................... 52
Figura 19: Data browser Neo4j ....................................................................................... 54
Figura 20: Exemplo AntConc com um sumário .............................................................. 56
Figura 21: Lista de palavras e suas frequências encontradas no sumário ....................... 57
Figura 22: Exemplo de pesquisa...................................................................................... 59
Figura 23: Relação das palavras com seus sumários ....................................................... 60
Figura 24: Imagem Banco criado no Noe4j..................................................................... 63
Figura 25: Diagrama de classe do catálogo desenvolvido............................................... 64
Figura 26: Tela do catálogo desenvolvido ....................................................................... 65
Figura 27: Exemplo busca por Livro no catálogo. .......................................................... 66
Figura 28: Exemplo de Busca por Relacionamento. ....................................................... 67
LISTA DE SIGLAS
ACID - Atomicidade, Consistência, Isolamento e Durabilidade

API - Application Programming Interface (Interface de Programação de Aplicativos)

BSF - Breadth-first search (busca em largura)

CRUD - Create, Read, Update, Delete (Criar, Ler, Atualizar, Excluir)

DAG - Direct acyclic graph (grafo acíclico dirigido)

DFS - Depht-first search (busca em profundidade)

IDE - Integrated Development Environment (Ambiente de Desenvolvimento Integrado)

IHC - Interação Homem-Computador

MIT - Massachussetts Institute of Technology (Instituto de Tecnologia de Massachussetts)

OPAC - Online Public Access Catalog (Catálogo Online de Acesso Público)

PLN - Processamento automático de língua natural

REST - Representational State Transfer (Transferência do Estado Representativo)

SGBD - Sistema de Gerenciamento de Banco de Dados

SQL - Structured Query Language (Linguagem de Consulta Estruturada)

UML - Unified Modeling Language (Linguagem de Modelagem Unificada)


SUMÁRIO

1 INTRODUÇÃO ................................................................................ 11

1.1 Motivação ................................................................................................................... 11

1.2 Objetivos .................................................................................................................... 12

1.3 Organização deste trabalho........................................................................................ 12

2 PESQUISA BIBLIOGRÁFICA .............................................................. 13

2.1 Linguística Computacional ........................................................................................ 13

2.1.2 Diferença entre Linguística Computacional e Linguística Teórica ......................... 13

2.1.3 Surgimento da Linguística Computacional ............................................................ 14

2.1.4 Avanços da Linguística Computacional .................................................................. 15

2.2 Ontologia ................................................................................................................... 17

2.3 Semântica Lexical ..................................................................................................... 20

2.3.1 Sinonímia e antonímia ............................................................................................ 21

2.3.2 Hiperonímia e a hiponímia ....................................................................................22

2.3.3 Homonímia.............................................................................................................23

2.3.4 Metáfora e metonímia ............................................................................................23

2.3.5 Meronímia e Holonímia.................................................................................. 25

2.4 A utilização de catálogos nas bibliotecas .................................................................. 30

2.5 Estruturas de Dados ..................................................................................................34

2.5.1 Dados ......................................................................................................................34

2.5.2 Introdução a Estruturas de Dados.......................................................................... 35

2.5.3 Introdução a Grafos ................................................................................................36

2.5.4 Grafos ..................................................................................................................... 37

2.5.5 Representação dos grafos ...................................................................................... 38

2.5.6 Matriz de Adjacência ............................................................................................. 38

2.5.7 Lista de Adjacência ................................................................................................ 38

2.5.8 Percurso em Grafos ................................................................................................39


2.5.9 Percurso em Profundidade .................................................................................... 40

2.5.10 Percurso em profundidade em grafos direcionados ............................................ 43

2.5.11 Percurso em largura .............................................................................................. 44

2.6 Banco de dados NoSQL............................................................................................. 46

2.6.1 Neo4j ...................................................................................................................... 48

2.6.2 Trabalhando com as tecnologias Neo4j .................................................................. 51

3 METODOLOGIA .............................................................................. 55

4 RESULTADOS ............................................................................... 69

5 CONCLUSÕES ................................................................................ 71

REFERÊNCIAS .................................................................................... 72

APÊNDICE A – ONTOLOGIA ............................................................... 77

APÊNDICE B – MANEIRAS DE CONEXÃO AO BANCO NEO4J ....................... 89

APÊNDICE C – SCRIPT BANCO DE DADOS ............................................... 92

APÊNDICE D – IMPLEMENTAÇÃO DO CATÁLOGO EM JAVA ....................... 101


Capítulo

11

1 Introdução

Atualmente, com o mundo globalizado, existe um ritmo frenético de transmissão de


informações em nosso meio. Com o advento da internet, a troca de informações tornou-se algo
corriqueiro. Dessa forma, temos que levar em consideração que as fontes de informações como,
por exemplo, livros, CDs, arquivos digitais etc, devam ser confiáveis.
Contudo, ao mesmo tempo em que a informação está presente em nossas vidas, não
temos plena absorção dela, já que o seu grande volume impossibilita esta ação. Faz-se, então,
necessária uma organização bem elaborada da informação que é adquirida e que pode ser
armazenada, possibilitando que, posteriormente, as buscas pelas informações sejam feitas de
maneira rápida e eficiente, principalmente em meios em que isso é indispensável, como nas
bibliotecas.
Nesta pesquisa, foi desenvolvido e implementado um catálogo online baseado em
ontologias. Essa é uma necessidade crescente nas bibliotecas, devido ao grande número de
obras de todos os assuntos que, diariamente, são incluídos no acervo. Dessa forma, busca-se
otimizar a catalogação e a recuperação dessas obras.

1.1 Motivação

Levando em consideração que várias obras são lançadas mensalmente, cada vez mais, o
acervo das bibliotecas aumenta, o que impulsiona a necessidade de uma catalogação eficiente,
de modo que as obras sejam identificadas mais facilmente. Dessa forma, a impossibilidade de
os bibliotecários e os usuários da biblioteca conhecerem a vasta gama de assuntos existentes e,
mesmo conhecendo, não conseguirem visualizar a abrangência da obra a partir do seu título
gera dificuldade de gerenciamento de informação. Buscar uma organização que facilite o
trabalho do bibliotecário consiste na motivação desta pesquisa, baseada em uma ontologia.
Um exemplo desse tipo de trabalho é o BibliOntO, um protótipo de biblioteca digital
baseada em ontologias, desenvolvida por (RAMALHO 2010).
Portanto, neste trabalho, pretendeu-se criar um catálogo online para a biblioteca do
IFSP, campus São João da Boa Vista. Para esse fim, foi utilizado o conceito da ontologia, que
12

vem sendo explorada há tempos por pesquisadores da língua, para assim permitir a otimização
das consultas, sendo utilizados, os sumários dos livros das bibliografias bases do acervo do
curso Sistemas para Internet.

1.2 Objetivos

Este trabalho tem como por objetivo específico criar um catálogo online para a
biblioteca do IFSP campus São João da Boa Vista, a partir de uma ontologia, a fim de
promover a otimização da catalogação e das consultas. Neste trabalho, as buscas serão
delimitadas aos livros da bibliografia básica do curso de Tecnologia em Sistemas para Internet,
mas o trabalho dará possibilidade à expansão em todas as áreas do conhecimento que abrange
todo o acervo da biblioteca.

1.3 Organização deste trabalho

Este trabalho está organizado da seguinte maneira:


No capítulo 1, são apresentados a introdução do trabalho, os objetivos e a organização.
O capítulo 2, expõe-se a pesquisa bibliográfica que fundamenta este trabalho. São
apresentadas considerações sobre a Linguística Computacional, que consiste no elo entre as
duas disciplinas em que se insere esta pesquisa, a Linguística e a Computação. Também
introduz o leitor no conhecimento sobre ontologias. Oferecem-se ainda informações sobre os
catálogos de bibliotecas, versa-se sobre a catalogação e a dificuldade dos bibliotecários em
compreenderem os diversos assuntos do conhecimento humano. Explana-se sobre a modelagem
de conceitos a partir do uso da ontologia e aborda-se o conceito de grafos. Há também
comentários sobre como as duas áreas se valerão da ontologia para a criação do catálogo. Além
disso, há uma explanação sobre bancos de dados NoSQL e uma de suas vertentes, o banco de
dados orientado a grafos Neo4j.
No capítulo 3, apresenta-se a metodologia. Há a descrição dos procedimentos
metodológicos adotados para a construção da ontologia em grafos, bem como a visualização
das etapas de implementação.
No capítulo 4, são apresentados os resultados obtidos.
No capítulo 5, apresentam-se as considerações finais do trabalho e perspectivas futuras
para a continuidade desta pesquisa.
Capítulo

13

2 Pesquisa Bibliográfica

2.1 Linguística Computacional

Imaginar que um dia chegaremos a nossas casas e começaremos a conversar com os


computadores, dando comandos de voz para que essas máquinas façam as coisas para nós e
nos retornem uma resposta em nossa língua nativa, é instigante. Nos dias atuais, estamos em
uma era tecnológica, em que quase todas as coisas são controladas por microprocessadores.
Acionamos esses dispositivos por meio de comandos, seja por botões, ou até mesmo pela voz.
O que ainda está em grande desenvolvimento e engloba uma vasta gama de pesquisa é
a capacidade de os computadores entenderem nosso comando de voz e retornarem sons de
uma língua natural. Seria uma conversa como se estivéssemos falando com alguma outra
pessoa, ou seja, uma interação natural entre homem e máquina. Entre outras questões, é esse
um dos objetos de estudo da Linguística Computacional. Nessa área, já existem diversos
avanços tecnológicos que chegam a despertar a curiosidade de muitos pesquisadores, como os
chatterbots, os tradutores automáticos, os parsers e a linguagem Prolog que serão
apresentados neste capítulo.

2.1.2 Diferença entre Linguística Computacional e Linguística Teórica

As diferenças entre a Linguística Computacional e a Teórica ocorrem quanto ao seu


enfoque. Segundo (SANDOVAL, 1996), a Linguística Teórica é uma disciplina voltada para
a gramática e o entendimento da construção das palavras, enquanto a Computacional busca
trabalhar com desenvolvimentos na área da língua natural ao proceder ao seu processamento
automático.
14

2.1.3 Surgimento da Linguística Computacional

Os primeiros desenvolvimentos envolvendo a Linguística Computacional iniciaram-se


por volta de 1950. Embora o marco mais aceito do estudo da Linguística seja a chamada
“Linguística comparativo-histórica”, no começo do século XIX, os estudos iniciaram-se no
Ocidente entre os gramáticos e filósofos gregos e romanos há cerca de 2.400 anos. No
Oriente, especificamente da Índia, o surgimento dos estudos da gramática iniciou-se há 2.500
anos (OTHERO; MENUZZI, 2005).
Por sua vez, quando surgiram os primeiros computadores, estes ocupavam grandes
volumes e não possuíam grandes capacidades de cálculos, mas com o avanço tecnológico, os
computadores começaram a ficar cada vez menores e com uma capacidade de processamento
cada vez maior. De acordo com Hawking (2001, p.167 apud OTHERO; MENUZZI, 2005, p.
25):

Os computadores obedecem àquela que é conhecida como a lei de Moore:


sua velocidade e complexidade dobram a cada 18 meses. Trata-se de um
desses crescimentos exponenciais que, sem dúvida, não podem continuar
para sempre. Entretanto, ele provavelmente continuará, até que os
computadores atinjam uma complexidade semelhante à do cérebro humano.

Como é visto na previsão de Moore, os computadores atingirão a complexidade do


cérebro humano. Dessa forma, grandes avanços serão alcançados e, dentre esses avanços,
estará a capacidade de os computadores se comunicarem de forma natural com os humanos.
Essa interação homem-computador é o objeto de estudo da Linguística Computacional.
A Linguística Computacional estuda a interação homem-computador por meio da
língua natural, como por exemplo, a capacidade de os computadores entenderem a fala
humana e dar respostas na língua nativa do indivíduo e também a de realizar ações por meio
de comandos de voz. Isso seria um grande passo, pois diminuiria a complexidade que ainda
existe na questão de manipulação dos computadores por meio dos usuários, especialmente se
considerarmos os usuários menos experientes e pessoas com algum tipo de deficiência, como
os deficientes visuais ou os portadores deficiências motoras.
Dessa forma, é possível definir a Linguística Computacional como uma ciência que
possibilita que, a partir de sistemas de softwares, sejam processadas estruturas linguísticas
(SANDOVAL, 1996). A Linguística Computacional pode ser dividida em duas subáreas: a
Linguística de Corpus e o Processamento Automático de Língua Natural (PLN).
De acordo com Othero; Menuzzi (2005, p. 22, 23):
15

A Linguística de Corpus preocupa-se basicamente com o trabalho a partir de


“corpora eletrônicos”, isto é, grande banco de dados que contenham
amostras de língua natural. Essas amostras podem ser de diferentes fontes.
Nelas podemos encontrar os mais variados bancos de dados eletrônicos. Há
corpora de linguagem falada, corpora de linguagem escrita literária, corpora
com texto de jornal, corpora composto exclusivamente por falas de crianças
em estágio de desenvolvimento linguístico etc.

Já a área de PLN, conforme explicam Othero & Menuzzi (2005, p. 23, 24), preocupa-
se diretamente com “o estudo da linguagem voltado para a construção de softwares e sistemas
computacionais específicos, como tradutores automáticos, chatterbots, parsers,
reconhecedores automáticos de voz, geradores automáticos de resumo etc”.
Como visto, a Linguística de Corpus busca armazenar nos bancos de dados, os dados
da língua natural, de forma que possa ficar disponível para recuperação. Neste trabalho, o
corpus se constituiu de uma ontologia dos sumários dos livros-base do curso Tecnologia em
Sistemas para Internet. Assim, inserindo esse corpus no banco de dados, ele será reutilizado
para o sistema que será desenvolvido, dando suporte ao compartilhamento de conhecimento
para aqueles que não são da área da informática – os usuários do catálogo da biblioteca do
IFSP, campus São João da Boa Vista.

2.1.4 Avanços da Linguística Computacional

Vários são os avanços da Linguística Computacional voltados para a PLN. Dentre


eles, podemos destacar (cf. OTHERO; MENUZZI, 2005):
Chatterbots: os chatterbots, união de palavras do inglês (chat =conversar; bot =
abreviação de robô), são programas desenvolvidos, capazes de interagir com o ser humano,
em língua natural, na modalidade escrita.
O primeiro chaterbot surgiu em 1966 e foi chamado de ELIZA. Foi criado pelo
pesquisador do MIT (Massachusetts Institute of Technology), Joseph Weinzembaum. Com
alguns testes, ELIZA passou a ser uma espécie de “ouvinte” das pessoas, como algum
psicólogo, embora essa não fosse a intenção de Weinzembaum, que buscava apenas uma
interação homem x máquina. Ultimamente, os chatterbots têm sido utilizados em atendimento
virtual e tutoriais educativos.
Tradutores eletrônicos: os tradutores eletrônicos foram os primeiros objetos de
estudo da Linguística Computacional. Os tradutores têm como por objetivo traduzir textos
16

automaticamente, ou seja, sem a interferência do ser humano. Grandes avanços já foram


feitos, mas o ideal é que se façam tradutores robustos, capazes do reconhecimento da língua
natural em seus níveis léxico, sintático e semântico.
Parsers: para a definição do que são parsers, é necessário o entendimento quanto ao
significado da palavra parsing . Othero; Menuzzi (2005, p. 39) definem parsing:

A palavra parsing em si não remete ao processamento sintático mediado por


computador (ou processamento sintático computacional). O termo vem da
expressão latina pars orationes (partes do discurso) e tem suas raízes na
tradição clássica. De acordo com Mateus & Xavier (1992, p. 886), parsing
pode ser entendido como “processo de atribuição de uma estrutura e de
interpretação a uma sequência linguística”.

“No âmbito da Linguística Computacional, parsing diz respeito à interpretação


automática (ou semi-automáticas) de sentenças de linguagem natural por meio de programas
de computador conhecido como parsers” (OTHERO; MENUZZI, 2005, p. 39). Esses
analisadores buscam ser capazes de analisar um conjunto de palavras, que formam uma frase
ou um texto, e analisá-las gramaticalmente segundo um padrão gramatical já formado. A
grande dificuldade de se desenvolver um parser encontra-se, entretanto, nas complexas
estruturas textuais e ambiguidades linguísticas.
Atualmente, vários parsers já foram desenvolvidos, mas ainda não são capazes de
análises profundas e completas.
Prolog: Prolog é uma linguagem de programação baseada na lógica. O nome deriva
do inglês Programming in Logic (programando em lógica). Esta linguagem surgiu na França
em 1975 e foi desenvolvida por Alain Colmerauer. De acordo com Othero e Menuzzi (2005,
p. 42), “o Prolog foi criado já com a perspectiva de se trabalhar com a PLN e os parsers”.
A linguagem Prolog, ao contrário das outras linguagens procedural ou orientada a
objetos, é uma linguagem “declarativa”. Isso quer dizer que, diferente das outras linguagens a
partir das quais são passados os algoritmos para que o computador interprete os comandos, no
Prolog o programador deve apresentar os dados, no formato pré-estabelecido, para que então
o Prolog retorne uma resposta, que, no caso, será Yes ou No. O Prolog pode também ser usado
para implementar ontologias.
17

2.2 Ontologia

O surgimento do conceito de ontologia remonta os tempos de Aristóteles. Ontologia


deriva do grego e é a junção de ontos+logoi= conhecimento do ser (WELTY; GUARINO,
2001). É a parte da filosofia que trata da natureza do ser, da realidade, da existência vertente
no conceito da ontologia. O conceito de ontologia pode ter significados diversos, embora
parecidos, dependendo de em que área se fizer presente.
Para a Linguística, a ontologia é basicamente um inventário de conceitos e, por meio
da modelagem conceitual de uma ontologia, obtém-se descrição semântica de uma área do
conhecimento. Chandrasekaran et al (1999):

Ontologia é a representação de um vocabulário, frequentemente


especializado em algum domínio ou assunto importante. Mais precisamente,
não é o vocabulário que qualifica uma ontologia, mas os conceitos que os
termos do vocabulário transmitem. Então, transferindo os termos de uma
ontologia de uma linguagem para outra, por exemplo, do Inglês para o
Francês, não muda o conceito ontológico.

Para Sowa (1999 apud ALMEIDA, 2003, p. 165): “uma ontologia é um catálogo de
tipos de coisas, as quais assume-se existir em um domínio de interesse, na perspectiva de uma
pessoa que usa uma linguagem”. Nessa perspectiva, a ontologia apresenta-se como um
catálogo de conceitos de determinada área em particular de que uma pessoa possa se valer,
sendo que, estes conceitos relacionados uns aos outros formam uma estrutura.
O objetivo da ontologia é formar um sistema de categorização para representar o
mundo real (BREITMAN 2005). Segundo a autora, um filósofo grego chamado Porfírio, no
século III DC, criou a primeira estrutura de classificação, que ficou conhecida como “árvore
de Porfírio”, apresentado na Figura 1. Este exemplo trata-se de uma ilustração das categorias
de substância, que representam o supertipo mais comum do conhecimento, em que as
categorias mais abaixo de substânca são relacionadas com suas respectivas subcategorias,
como por exemplo, a categoria corpo, é uma subcategoria de mineral, e tem como
subcategorias, animado, e inanimado.
18

Figura 1: Árvore de Porfírio


Fonte: Breitman (2005, p. 31).

É visível o fato de que a ontologia representa a conceitualização de algo e possibilita


estabelecer relações entre conceitos. Com a ontologia, pode-se representar formalmente o
conhecimento de modo que esteja disponível a todas as áreas, dando a possibilidade do
compartilhamento e reuso das informações. A ontologia tem sido utilizada em várias áreas do
conhecimento, como Inteligência Artificial, PLN, Representação do conhecimento, Web
Semântica. Apesar da grande diversidade de conceitos da ontologia, seu objetivo é o mesmo
em todas as áreas, ou seja, ela busca permitir o compartilhamento e a reutilização de
conhecimentos. Segundo Morais; Ambrósio (2007, p. 2), “na prática, a ontologia define uma
‘linguagem’, conjunto de termos, que será usado para formular consultas”. Nessa perspectiva,
a área da computação se vale da ontologia, tanto para o armazenamento quanto para a
recuperação dos conceitos, em que se destacam subáreas como: Banco de Dados, Web
Semântica, Engenharia de Software e Inteligência Artificial (SMITH; WELTY, 2001).
A ontologia é uma classificação de conceitos, mas ela também pode ser classificada.
Dentre algumas classificações propostas na literatura, pode-se citar a de McGuinnes (2003),
que propôs uma classificação semântica baseada na estrutura e conteúdo da ontologia, como
apresentado na Figura 2:
19

Figura 2: Classificação ontologia


Fonte: McGuinnes (2003). Adaptação do autor.

Para McGuinnes (2003), pode-se conceituar cada tópico da seguinte maneira:


• Vocabulários Controlados/catálogos: representa uma lista finita de termos,
para consultas. Neste trabalho, por exemplo, fez-se a utilização do vocabulário
controlado da USP1, que apresenta a categorização de algumas áreas da
informática, o que possibilitou a classificação dos conceitos da ontologia, que
por sua vez deu subsídios para a criação do catálogo proposto.
• Termos/Glossários: lista de termos e significados em língua natural. Isto
fornece um tipo de semântica ou significado, desde que os seres humanos
podem ler as instruções de linguagem natural e interpretá-las.
• Tesauro: lista de termos e definições, que padroniza a utilização das palavras
para serem indexadas, ou seja, dicionários de sinônimos que fornecem alguma
semântica adicional nas suas relações entre termos.
• Hierarquias é_um informais: hierarquias que utilizam o relacionamento de
generalização (é_um) de maneira informal. Nestes modos de organização, é
tipicamente o caso de que um exemplo de uma classe mais específica é
também uma instância da classe mais geral, mas que não é aplicada a todos os
casos.
• Hierarquias é_um formais: hierarquias que incluem instância de um domínio,
em que o relacionamento de generalização é respeitado, como, por exemplo,
gato é_um mamífero.

1
No capítulo 3 (Metodologia), há considerações sobre esse vocabulário e sua utilização na pesquisa.
20

• Frames: modelos que incluem classes e propriedades. Um modelo de frame


são classes (ou frames), que possuem propriedades chamadas atributos (slots).
Cada frame apresenta o contexto para modelar um aspecto do domínio.
• Restrições de valores: ontologias que exprimem restrições de valores, em que
se valida a utilização dos valores assumidos nas propriedades de suas classes,
como, por exemplo, restringir na propriedade, “data de nascimento”, a inserção
de apenas valores inteiros.
• Restrições lógicas: ontologias que permitem que sejam expressas restrições
em lógica de primeira ordem2.

Neste trabalho, portanto, apropriou-se da ontologia para a criação do catálogo online.


A ontologia foi formada pelos dados retirados dos sumários da bibliografia básica do Curso
de Tecnologia em Sistemas para Internet. A partir da utilização dos sumários das obras como
corpus, relacionaram-se alguns conceitos da área da informática, em específico, linguagens de
programação. Dessa forma, o objetivo é auxiliar os catalogadores de uma biblioteca a melhor
definir o assunto, já que só as palavras nos títulos das obras não levam ao conhecimento de a
qual assunto a obra está relacionada, principalmente se for levado em consideração que
muitos assuntos não são de domínio do conhecimento dos bibliotecários.
Neste trabalho, para proceder-se à modelagem conceitual da ontologia construída, é
necessária uma descrição semântica da área do conhecimento conceituado. Por essa razão, é
essencial buscar conhecimentos de Semântica Lexical.

2.3 Semântica Lexical

Segundo Sá (2011, p.1), o termo semântica foi cunhado pelo filólogo francês Michel
Bréal (1832 - 1915) que estudava o corpo e a forma das palavras. A semântica tem como
objeto de estudo o significado. A semântica lexical é uma de suas vertentes, que estuda o
sentido do léxico, conjunto de palavras de uma língua.
Na semântica lexical, as palavras são definidas de acordo com as relações que
possuem entre si, possibilitando assim significações. Assim, é possível dizer que a construção
do significado ocorre por processos tais como “a sinonímia, a antonímia, a

2
Segundo Smullyan e Raymond (2009), uma lógica de primeira ordem consiste em um conjunto de axiomas e
de sentenças dedutíveis a partir deles.
21

hiperonímia/hiponímia, homonímia, metonímia entre outros” (PIETROFORTE; LOPES,


2007).
A criação de um catálogo não poderia prescindir de uma descrição semântica dos
assuntos que organiza. Em primeira instância, esses assuntos precisam ser categorizados e
definidos. Definir pressupõe delimitar e, para se chegar à definição de uma palavra/conceito,
faz-se necessário negar afirmativas, para que a afirmativa posterior seja de certa forma
inegável. Desse modo, delimita-se um conceito para o campo das palavras e, ao definirmos
uma palavra como representativa de um conceito, precisamos de alguns testes. Por exemplo:
se uma definição para o animal gato for “sm (lat. cattu) 1 Mamífero carnívoro doméstico da
família dos Felídeos, de grande utilidade para a destruição de ratos (Felis cattus)”, Michaelis
(2009), deve-se assim negar gato como um invertebrado, ou uma ave, ou um réptil, ou um
herbívaro. Ou também, para se chegar à definição do conceito “banco de dados”, no contexto
da computação, pode-se negar que banco de dados sirva para sentar ou que seja um banco
feito de dados (objetos de jogo), ou, ainda, que banco de dados seja algo físico. Tantas outras
negações poderiam ser realizadas. Assim, procedendo ao “afunilamento” dos conceitos,
chega-se à definição precisa da palavra usada para denominar algo. É por essa razão que, para
pesquisas deste tipo, faz-se necessário contar com informantes especialistas na área de estudo
– neste caso, a informática – para que seja definida, de maneira mais rápida e precisa os
conceitos.
Para realizar tais testes e definir conceitos por meio de palavras, utilizam-se como
categorização as relações de sentido entre as palavras, que expressam semelhança, oposição,
contiguidade, identidade, uniformidade, hierarquia etc. Algumas delas estão apresentadas a
seguir.

2.3.1 Sinonímia e antonímia

Os termos que se relacionam por sinonímia são denominados sinônimos. “O sinônimo


ocorre quando duas palavras podem ser substituídas uma pela outra em determinado
contexto”, como explicam Pietroforte; Lopes (2007, p.126). Cabe assim a quem se utiliza dos
termos em um contexto saber quando e como usar os sinônimos. Por exemplo, de forma
coerente, verifica-se que “novo” é sinônimo de “jovem” quando nos referimos ao conceito
“pessoa”. Ambas as sentenças “o rapaz ainda é novo” ou “o rapaz ainda é jovem” remetem a
22

um conceito ontológico correto. Se, por outro lado, esses sinônimos forem empregados em
outro contexto, podem não obter coerência. É corretor afirmar que “o carro é novo”, mas não
seria comum afirmar o mesmo em “o carro é jovem”. O adjetivo jovem, neste caso, não se
aplica, já que jovem é correlacionado ao ser humano e não a coisas materiais (cf.
PIETROFORTE ; LOPES, 2007).
Um exemplo de sinônimos na informática seria “programador” e “desenvolvedor”.
Podem-se utilizar essas duas palavras em: “Ele é programador de software” ou ainda “Ele é
desenvolvedor de software”. As duas sentenças corriqueiramente teriam o mesmo sentido.
Contudo, no domínio da informática, as palavras “programador” e “desenvolvedor” são
sempre intercambiáveis, uma vez que a palavra “desenvolvedor” tem um sentido mais amplo,
ou seja, designa alguém que participa mais ativamente do desenvolvimento (análise de
requisitos e testes) de um software e não somente da etapa de “programar”, embora nem
sempre seja assim.
Já a antonímia ocorre quando os termos relacionados são contrários. Por exemplo,
gordo vs. magro, bonito vs. feio, rico vs. pobre são palavras antônimas. Segundo Pietroforte;
Lopes (2007), tanto na sinonímia quanto na antonímia, a relação de sentido entre as palavras
não é absoluta. De acordo com esses autores, tratando-se do conceito de cores de televisão,
“TV preta e branca” pode tornar-se antônimo de “TV em cores”. Do mesmo modo, podemos
considerar como termos opostos, as palavras hacker e cracker, que denominam usuários de
inteligência para utilizar e invadir sistemas de computação. Segundo Kohn (2011, p. 1):

Os hackers utilizam todo o seu conhecimento para melhorar softwares de


forma legal e nunca invadem um sistema com o intuito de causar danos. No
entanto, os crackers têm como prática a quebra da segurança de um software
e usam seu conhecimento de forma ilegal, portanto, são vistos como
criminosos.

Do mesmo modo que “TV em cores” e “TV preta e branca” podem se tornar termos
antônimos, hacker e cracker revelam sentidos opostos – hacker é bom, mas cracker é mau;
enquanto um busca maneiras de proteção, o outro busca a invasão.

2.3.2 Hiperonímia e a hiponímia

A hiperonímia e a hiponímia são termos a partir dos quais se percorre do mais geral
para o mais específico. Para Pietroforte; Lopes (2007, p.128). “[...] são fenômenos derivados
23

das disposições hierárquicas de classificações próprias do sistema lexical”. Na taxionomia


animal, por exemplo, mamífero engloba felino, canídeo, roedor, primata, etc. Assim,
conforme (PIETROFORTE; LOPES, 2007), pode-se dizer que mamífero é hiperônimo de
felino e felino é hipônimo de mamífero. É possível criar tantas categorias quantos forem os
conceitos existentes: gato é hipônimo de felino e felino é hiperônimo de gato.
Neste trabalho, vários hiperônimos e hipônimos foram coletados do corpus para, mais
tarde, estarem relacionados a outros conceitos, construindo assim uma ontologia. Como
exemplo, é válido considerar que “linguagens de programação” seja hiperônimo de Java e
Java seja hipônimo de linguagens de programação; “linguagens de programação” é também
hipônimo de “programação” e “programação” é hiperônimo de “linguagens de programação”.

2.3.3 Homonímia

“A homonímia é a coincidência entre significantes de palavras com significados


distintos” (PIETROFORTE; LOPES, 2007, p. 129). Podemos tomar como exemplo, a palavra
“monitor”. Tratando-se de hardware, ou seja, peças que compõem um computador, um
monitor é a tela onde as imagens são apresentadas. Mas também podemos usar “monitor”
para designar alguém que monitora, por exemplo, um grupo de alunos. Dessa forma, vemos
que uma mesma palavra pode ser atribuída a diferentes conceitos, levando as pessoas a inferir,
a partir do contexto, em que sentido a palavra foi empregada.

2.3.4 Metáfora e metonímia

Para Lakoff & Johson (1980), “a essência da metáfora é a compreensão e a


experiência de uma coisa em termos de outra". A metáfora consiste em uma comparação
condensada por meio do uso de uma mesma palavra que veicula conceitos relacionados.
(SANTOS 2009), em sua análise, afirma que as palavras com empregos metafóricos mantêm
uma similaridade entre si em sua significação, mesmo que os conceitos a que se referem
sejam aparentemente diferentes em seus contextos originais. Como exemplo, (SANTOS
2009) cita o um trecho da música intitulada “Sem Açúcar” do cantor e compositor Chico
Buarque:
24

“Sua boca é um cadeado


E meu corpo é uma fogueira”.

Nesse trecho, “cadeado” está relacionado a “boca”, dando o sentido de “boca


fechada”; as palavras “fogueira” traz para “corpo” o traço semântico de “quente”.

Lakoff e Turner (1980, p.36) distinguem o processo metonímico do metafórico. Para


eles “metáfora é, principalmente, uma forma de ver uma coisa em termos de outra” e a
metonímia tem uma função referencial, permitindo “o uso de uma entidade no lugar de outra”.
Segundo eles, a metonímia permite “focar mais especificamente certos aspectos do que está
sendo referido” (p.37). Como exemplo de uma metonímia clássica, a parte pelo todo, citam a
fotografia, onde o rosto é suficiente para representar a pessoa. Nogueira (2007, p. 1) define
metonímia como:

Metonímia é uma palavra de origem grega, formada por “meta” (= mudança)


+ “onímia” (= nome). Ao pé da letra, metonímia é o uso de um nome por
outro. Metonímia é uma figura de retórica que consiste no emprego de uma
palavra fora do seu sentido básico (do seu contexto semântico normal), por
efeito de contiguidade, de associação de idéias.

Estes são alguns exemplos de metonímias, segundo Nogueira (2007):


1. matéria por objeto: “O ouro (=dinheiro) só lhe trouxe infelicidade”; “Os bronzes (=sinos)
repicavam no alto do campanário”;
2. autor por obra: “Seu maior sonho era comprar um Picasso” (=quadro de Picasso);
“Adorava ler Jorge Amado” (=livros de Jorge Amado);
3. proprietário pela propriedade: “Ontem fomos ao Álvaro” (=bar do Álvaro);
4. continente por conteúdo: “Adora macarrão, por isso comeu três pratos” (=o macarrão de
três pratos);
5. consequência pela causa (também chamada Metalepse): “Ele não respeitou seus cabelos
brancos” (= velhice); “Venceu graças ao suor (= trabalho, esforço) do seu rosto”;
6. cor pelo objeto: “O vermelho (= sangue) lhe corria pelas veias”; “As andorinhas voavam
pelo azul (= céu) do Rio de Janeiro”.

Como exemplo de metáfora e metonímia na área de informática, pode-se citar


“desktop” (área de trabalho). O termo é metafórico porque trata-se de área de trabalho virtual,
projetada metaforicamente de uma área de trabalho física. Desk significa “escrivaninha,
mesa” e top significa “topo”, o lugar específico de trabalho – sobre a mesa. Essa projeção é
25

metonímica porque revela apenas uma parte de todo o ambiente de trabalho para se referir à
área de trabalho.

2.3.5 Meronímia e Holonímia

A meronímia (do grego meros: “parte”) descreve a relação “cada parte de um todo”,
em que, por exemplo, a é parte de b, ou a semente é parte da fruta (RIEMER, 2010). Por sua
vez, a holonímia (do grego holo: “todo”) descreve “o todo em relação a cada uma das partes”,
em que o holônimo cozinha tem como merônimos, fogão, geladeira, mesa etc. (HENRIQUES,
2011). Segundo este autor, a hiperonímia e a hiponímia diferem da meronímia e holonímia
pelo fato de que as palavras nesta categoria não partem do princípio X faz parte de Y, ou X é
um tipo de Y porque:

X faz parte de Y, mas X não é um tipo de Y

Dessa forma, pode-se supor que um pneu faça parte de um carro, mas pneu não é um
tipo de carro. Também é importante salientar que a meronímia/holonímia não descrevem
sentido de hierarquia, mas sim se inclusão. Seria como dizer que Redes é um tipo de
Segurança. Não faz sentido algum, pois Redes não é um tipo de Segurança. Dessa forma, o
válido é dizer que Redes (holonímia) tem como parte Segurança (meronímia). Mesmo assim,
a utilização da semântica lexical é por vezes maleável, uma vez que, dependendo do contexto
em que atua, possibilita características diferentes aos relacionamentos entre os conceitos.
Muitos outros sistemas de construção de significados poderiam ser aqui descritos,
mas como esse não é o objetivo deste trabalho, que busca definir e separar conceitos para a
ontologia, o foco será nas categorizações de: definição, hiperonímia/hiponímia e meronímia.
Por exemplo, a palavra “segurança”, considerada hiperônimo, teria como hipônimos:
segurança de redes, segurança de banco de dados e segurança da informação, como ilustra a
Figura 3 a seguir:
26

Figura 3: Exemplo hiperônimo Segurança e seus hipônimos


Fonte: do autor.

Quando se trabalha com relações entre diversos conceitos, deve-se levar em


consideração que hipônimos se comportarão como hiperônimos em outras ocasiões, como
mostra a Figura 4, a partir de um exemplo com a palavra “redes”.

Figura 4: Exemplo hiperônimo Redes e seus hipônimos


Fonte: do autor.

Nessa figura, “redes” comporta-se como hiperônimo em relação aos outros conceitos.
Dessa forma, quando se faz esse tipo de relacionamento hierarquizado, forma-se o que, na
computação, pode-se chamar de árvore. É perceptível que o esquema se parece com uma
árvore de cabeça para baixo, em que o primeiro nó (o hiperônimo “redes”) é chamado de raiz
e os seus hipônimos denominados folhas. A partir do momento em que se começa a cruzar
informações, ou seja, os hiperônimos, tem-se outro tipo de representação de dados: os grafos,
como se pode visualizar na Figura 5:
27

Figura 5: Exemplo de grafo


Fonte: do autor.

Essa representação já não lembra mais uma árvore, mas sim uma teia, em que os
conceitos se ligam entre si. Isso na computação é denominado grafo, onde os nós
(representados pelos conceitos) ligam-se entre si pelos arcos.
Vê-se, dessa forma, que os sentidos/conceitos das palavras não estão hierarquizados, o
que motiva a escolha, neste trabalho, por grafos. Assim, pode-se trabalhar com os dados
coletados de modo organizado.
Deve-se destacar também que, nem sempre, hiperônimos/hipônimos (é um tipo de/
está contido em) darão um entendimento das relações. Por exemplo, na Figura 6: se for
necessário percorrer algum relacionamento, a partir de alguma linguagem de programação,
como por exemplo, PHP, pode-se fazer então:

PHP é um tipo de linguagem_programação

Mas se, por outro lado, o relacionamento se constituir a partir de


linguagem_programação, não se terá um relacionamento coerente:

linguagem_programacao é um tipo de PHP ou


linguagem_programacao está contido em PHP.
28

Figura 6: Exemplo ontologia de linguagem de programação


Fonte: do autor.

Assim sendo, convencionou-se utilizar a holonímia (tem como parte), em que:

linguagem_programacao tem como parte PHP.

Dessa forma, os conceitos e suas relações ganham maior completude, tanto na


formação da ontologia, como no seu entendimento quando da recuperação das informações.
As demais relações de sentido entre as palavras do corpus ficarão à disposição, para
pesquisas futuras, na ontologia sob construção para a presente pesquisa. Além disso, outras
relações podem ser verificadas na WordNet3, que é um banco de dados léxicos que fornece os
possíveis significados de mais de 120.000 palavras da língua inglesa (BREITMAN, 2005). A
imagem apresentado na Figura 7, extraída de Breitman (2005), mostra alguns relacionamentos
previstos na WordNet:

Relacionamento Semântico Categoria Sintática Exemplos


Sinônimo S, Aj, V, Av Cano, tubulações,
(similar) Subir, ascender
Triste, infeliz
Rápido, veloz
Antônimo Aj, Av (S, V) Seco, molhado
(oposto) Forte, fraco
Convidativo, repelente
Rapidamente, vagarosamente

3
Disponível em: <http://www.cogsci.princeton.edu/~wn/>.
29

Hipônimo S Macieira, árvore


(subordinado) Árvore, planta
Merônimo (parte-de) S Aba, chapéu
Barco, frota
Maneira V Marcha, andar
Sussurro, fala
Ligação/Consequência V Dirigir, pegar carona
Divorciar, casar
Legenda: S = substantivo; Aj = advérbio; V = verbo; Av = Advérbio.
Figura 7: Exemplo relacionamento semântico WordNet
Fonte: Breitman (2005, p. 93). Adapação do autor

Além das categorias sintáticas, podem ser visualizadas, na Figura 8, as relações de


sentido por fenômenos linguísticos, segundo Henriques (2011):

Relações de Sentido Por... Fenômeno


Exclusivamente equivalência sinonímia, paráfrase, perífrase,
Semânticas antonomásia, eponímia,
polissemia, tautologia, polissemia
oposição, contraste antonímia, ambigüidade, polissemia
hierarquia hiperonímia, hiponímia, polissemia
inclusão holonímia, meronímia, polissemia
Semânticas & Fono- oposição, contraste homoímia(como homofonia e/ou
Ortográficas homografia)
oposição, contraste paronímia
Figura 8: Relações de sentido por fenômeno de linguagem
Fonte: Henriques (2011, p. 119). Adaptação do autor.

Além da descrição semântica, para a criação de um catálogo, é importante que se


conheçam também os conceitos de catalogação.
30

2.4 A utilização de catálogos nas bibliotecas

Nas bibliotecas, uma maneira rápida de se fazer consultas no acervo é por meio dos
catálogos. Os catálogos são a representação dos acervos em uma biblioteca (PEREA, 2011).
Para se ter um bom catálogo, faz-se necessária uma eficiente catalogação. Dessa forma, a
catalogação pode ser compreendida, segundo Fiúza (1985, p.257), como “a disciplina ou
conjunto de disciplinas que tratam da representação, nos catálogos de bibliotecas, dos
assuntos contidos no acervo”.
Há diversos tipos de catálogos, que são empregados de acordo com o método e
recurso disponível de cada biblioteca. Existem dois tipos de catálogos mais comuns que são:
manuais – em livro, folhas, fichas; e automatizados – em relatórios (já obsoleto) - em linha
(softwares).
Os catálogos em linha permitem um manuseio mais rápido e eficiente, uma vez que
todo processo se torna automatizado pelo software, cabendo ao bibliotecário (ou como neste
trabalho específico, os envolvidos no projeto) a tarefa de cadastrar as informações, e ao
usuário comum recuperá-las. Os catálogos em linha podem ser construídos para consultas
online. Esse tipo de catálogo é denominado OPAC (Online Public Access Catalog) e pode ser
acessado em qualquer momento já que não há limitações físicas ou temporais (FUJITA,
2009).
Dessa forma, mesmo diante de sistemas automatizados, a catalogação ainda se mostra
como uma tarefa dispendiosa, e nem sempre é reconhecida pela comunidade. Segundo
Gusmão et al (2009), o árduo trabalho da catalogação nem sempre é entendido pelos usuários,
que não fazem uso do catálogo por não acharem relevante. Outras vezes, nem sempre a
abordagem do catálogo consegue alcançar a objetividade de ser de fácil manipulação e
eficiente na busca. Litto (1985, apud AMARAL, 1995, p. 222) pondera que “um dos mitos
que fascina a sociedade brasileira é a idéia de que as novas tecnologias são soluções para toda
a nossa inadequação do passado”.
Embora seja uma ajuda considerável, os catálogos, às vezes, tornam-se dispensáveis,
devido a fatores diversos, como a falta de fomento para pesquisa nos catálogos e a sua
ineficiência nas buscas. Gusmão et al (2009), em sua pesquisa, demonstraram que dentre 75
usuários da biblioteca entrevistados:
• 97% conheciam o catálogo;
• Apenas 1% consultava o catálogo mais de três vezes por mês;
31

• 86% receberam treinamento para a utilização do catálogo;


• 67% sabiam manipular o catálogo;
• 65% acessavam o catálogo de suas residências;
• 65% necessitavam de algum auxílio para realizar a busca no catálogo;
• 50% dos usuários conseguiam localizar nas estantes os itens indicados no catálogo,
49 % às vezes e 1% nunca.

É necessário entender que quanto mais o bibliotecário for preciso em sua catalogação,
maior será a chance de resposta correta do software em relação ao seu usuário, e também
maior será a sua satisfação. Assim, essa catalogação só terá logro se o assunto for definido de
maneira correta. Esse ato de definição do assunto é compreendido como a catalogação de
assunto ou indexação. Unisist (1981, p.84 apud FUJITA, et al 2009, p. 23) afirma que indexar
é “a ação de descrever e identificar um documento de acordo com seu assunto”. E ainda para
Chaumier (1988, p.63 apud FUJITA, et al 2009, p. 23):

A indexação é a parte mais importante da análise documentária.


Consequentemente é ela que condiciona o valor de um sistema
documentário. Ainda segundo o autor, uma indexação inadequada ou uma
indexação insuficiente representa 90% das causas essenciais para a aparição
de “ruídos” (os documentos não pertinentes à questão que são recuperados
em uma pesquisa bibliográfica) ou de “silêncios” (os documentos pertinentes
à questão, existentes no acervo, que não são recuperados).

É perceptível a importância da indexação e o prejuízo de suas falhas. Segundo Dias et al


(2001, p.207 apud GONÇALVES 2009, p. 96):

[...] a opção por assunto é o tipo mais solicitado pelos usuários. Na verdade,
a opção de busca por assunto é a mais contraditória, pois tem o maior índice
de fracasso – cerca de 40% de respostas com o registro nulo de recuperação.

As necessidades e dificuldades de um usuário da biblioteca em relação à pesquisa por


assunto vêm ao encontro dos desafios com que os bibliotecários se deparam, já que estes não
possuem domínio em todas as áreas do conhecimento, por isso não conseguem especificar os
assuntos de um livro durante o processo de catalogação. As informações constituintes do
acervo de uma biblioteca, sejam elas de caráter físico (livros, revistas, documentos) ou digital
(CDs, documentos digitais, páginas web), demonstram o grande âmbito do conhecimento que
ela abriga, e também evidenciam a revolução tecnológica, que fez surgir novas áreas do
32

conhecimento. Sendo assim, torna-se mais árdua a tarefa dos bibliotecários organizarem de
maneira mais clara todos os assuntos no acervo já que este se mostra extenso. E, para
organizar as informações de modo que possam ser recuperadas, é preciso seguir sempre os
padrões e métodos já estabelecidos. Segundo Fujita (2003 apud FUJITA et al 2009, p. 21,22):

A organização da informação compreende as atividades e operações do


tratamento da informação, envolvendo para isso o conhecimento teórico e
metodológico disponível tanto para o tratamento descritivo do suporte
material da informação quanto para o tratamento temático de conteúdo da
informação [...]. O tratamento descritivo refere-se propriamente à
catalogação, ou seja, à representação descritiva da forma física do
documento (autor, título, edição, casa publicadora, data, número de páginas
etc).

Dessa forma, a atividade de catalogar, entendida por esses aspectos, recorre às


informações gerais e particulares de cada obra, entendidas como inerentes a ela, como o autor,
título, editora etc, e também os assuntos em que pode estar contida. Vale ressaltar que, se uma
obra aborda algum assunto, mesmo que de maneira concisa e relativamente diferente da
proposta original, esse assunto pode ser cunhado como parte na catalogação. Levando-se em
consideração as obras das áreas tecnológicas, por exemplo, muitas vezes, torna-se difícil
orientar-se quanto ao conteúdo, já que os títulos nem sempre levam ao pleno conhecimento da
abordagem do livro, tornando difícil a organização da informação, pela não definição correta
do assunto da obra. Assim sendo, pode ser difícil para os bibliotecários darem informações de
obras que contenham determinados assuntos por eles desconhecidos, mas que sejam
solicitados pelos usuários. Por isso, conseguir indexar corretamente o assunto de uma obra é
de suma importância.
Por essas razões, espera-se do bibliotecário que ele saiba tratar, de maneira correta, a
indexação dos assuntos. Segundo Fujita et al (2009, p. 36)

Afirmamos que o bibliotecário precisa compreender que deve atuar como


um indexador, realizando a análise de assunto para compreender o
documento, identificando e selecionando os conceitos que melhor
representem seu conteúdo durante o tratamento temático da informação com
a finalidade de preencher o campo de assunto nos formatos catalográficos.

Esses aspectos devem orientar os bibliotecários na busca por mecanismos que os


auxiliem na indexação dos assuntos das obras.
Diante de todo o exposto, para que se tenha mais êxito na completude de uma
catalogação e de uma indexação em biblioteca, faz-se necessário a união de esforços
33

interdisciplinares de diferentes áreas. Por isso, neste trabalho, buscaram-se subsídios


operacionais e conceituais, para que com a união de esforços entre os bibliotecários e os
especialistas na área, consigam indexar e buscar, de maneira eficaz, os assuntos específicos.
Um desses mecanismos que foi desenvolvido neste trabalho é a ontologia, que possibilita por
meio de mapa conceitual, visualizar como estão dispostos os conceitos e as relações dos
assuntos. Esta ontologia se valeu dos sumários dos livros, já que estes abordam algumas
palavras que geralmente não são apresentados no título, dando maiores possibilidades de
relacionamento entre estes conceitos, e maior recuperação de informações a partir da
ontologia, pois como diz (CHANDRASEKARAN, 1999), a ontologia é um vocabulário
frequentemente especializado em algum domínio, então dessa forma, não conseguiríamos
formar um vocabulário somente com os títulos, já que estes às vezes apresentam palavras
altamente técnicas.
Partindo dessa última observação, pode-se imaginar um processo de catalogação de
um bibliotecário: suponha-se que ele tenha em mãos o livro DEITEL, Paul; DEITEL, Harvey.
Java: como programar. 8.ed. São Paulo: Pearson Prentice Hall, 2010 para ser catalogado.
Pelo nome da obra, sem nenhum conhecimento em programação fica difícil orientar-se quanto
ao assunto em que esta pode ser inserida. Pode-se inferir que programar seja programação,
mas não há garantias de que Java possa ser um “software programável”. Dessa forma, quando
for inserido na catalogação, sem que se tenha um conhecimento prévio da abordagem do
livro, o assunto desta obra ficará restrito a poucas palavras ou apenas uma, no caso a que está
no título: Java. Assim sendo, se na busca por assunto for cunhada outra palavra que não seja
Java, a obra não será listada. Se, por outro lado, tivermos na catalogação um mapa conceitual,
poderemos ampliar o campo das possibilidades ao mesmo tempo em que afunilamos a busca.
Se for Java a palavra presente no título, teríamos o seguinte mapa conceitual:

Programação Linguagens de Programação Orientada a Objetos Java.

A partir desse mapa, torna-se mais fácil orientar-se quanto ao assunto Java, uma vez
que fica claro que Java está relacionado à programação, linguagens de programação,
orientado a objetos. É verdade que outros assuntos sobre Java poderiam ser apresentados no
mapa, como áreas de aplicação, mas neste trabalho buscamos apenas inventariar os conceitos
essenciais que definam a rede de significação dos assuntos mais recorrentes em sistemas para
web.
34

Além disso, a elaboração de mapa conceitual é uma tarefa dispendiosa, especialmente,


se levarmos em conta que sempre estão surgindo novos conceitos, e podemos considerar os
mapas conceituais, se não infinitos, de extensões inimagináveis.
Dessa forma, percebe-se a necessidade de mecanismos de auxílio quanto à inserção
dos dados nos softwares e de ferramentas de busca bem elaboradas, bem como de treinamento
e estímulo dos usuários. Isso é mais facilmente viabilizado quando se trabalha sob as diversas
óticas, a partir da união de esforços de diversas áreas do conhecimento – biblioteconomia,
ciência da informação, informática e linguística. Com o auxílio dessas áreas, neste trabalho,
buscou-se, por meio da ontologia, uma melhor catalogação, de forma que a organização de
conceitos viabilize a pesquisa por assunto.

2.5 Estruturas de Dados

2.5.1 Dados

Os dados, de forma simplista, representam observações ou medições documentadas.


São abstrações extraídas pelo agente em que, fazendo-se o tratamento desses dados,
possibilitam a criação do que denominamos informações, ou seja, informações são dados
tratados. Segundo Setzer (1999), “definimos dado como uma sequência de símbolos
quantificados ou quantificáveis”. Setzer (1999) descreve que textos são dados, já que as letras
do alfabeto são constituídas por uma base numérica. Na computação, os dados são
trabalhados em diversos aspectos, como estruturas de dados, banco de dados, gerência de
dados, etc. Os bancos de dados, especificamente, são coleções de dados armazenados,
geralmente em discos rígidos, em que se apresentam todas as informações de uma empresa,
governo, informações pessoais. Os cruzamentos desses dados possibilitam que grandes fontes
de informações sejam trabalhadas em estudos de data mining (mineração de dados), a partir
de profundas análises de ocorrências similares, levantando-se assim números, estatísticas,
probabilidades, dando grande suporte a outras áreas do conhecimento, como marketing
(determinar comportamentos do consumidor), saúde (ocorrência de determinada doença em
determinada população), estudos temporais (probabilidade de catástrofes em diferentes
regiões) etc.
35

Os dados podem ser obtidos pela percepção através dos sentidos (por exemplo,
observação) ou pela execução de um processo de medição. A Figura 9 a seguir ilustra as
fontes dos dados.

Figura 9: Fontes dos Dados


Fonte: http://www.ime.unicamp.br/~hildete/dados.pdf.

Neste trabalho, consideram-se como dados, as palavras que formaram a ontologia.


Esses dados foram retirados dos sumários das obras que constituem a bibliografia básica do
Curso de Tecnologia em Sistemas para Internet. Desse modo, tratando-se os dados, obtive-se
as informações que foram utilizadas no catálogo implementado, o resultado desta pesquisa.

2.5.2 Introdução a Estruturas de Dados

As estruturas de dados compõem a organização, métodos de acesso e opções de


processamento para as informações manipuladas por um determinado processo, em um
sistema (IVAN, 2003). Dessa forma, consegue-se maior eficiência e otimização na
manipulação dos dados, tornando, por vezes, problemas complexos, facilmente solucionáveis,
por meio de técnicas de estruturas de dados.
É da função do programador decidir como os dados serão manipulados, devendo
escolher os métodos com que irá realizar as tarefas.
Há diversos tipos de estrutura de dados, dentre eles podemos citar:
36

• Pilha
• Fila
• Lista
• Grafos
• Árvores
• Tabela de hashing

Cada método de estruturação de dados é aplicável a determinados tipos de problema.


Neste trabalho, é apresentado um estrutura de dados recomendada para percorrer
relacionamentos entre os dados: grafos. Pretende-se utilizar os grafos, já que a ontologia será
implantada no banco de dados para que permita a recuperação das informações. E, tratando-se
de ontologias, os conceitos que a constituem estão ligados de forma não hierárquica. Nas
próximas seções deste capítulo, serão descritos os conceitos de grafos, que ajudará no
entendimento da proposta do trabalho.

2.5.3 Introdução a Grafos

Há tempos, o homem tenta desvendar os mistérios do surgimento do planeta Terra. De


fato, para que se chegue a alguma conclusão, faz-se necessário o estudo de todos os objetos e
reações envolvidos no processo do surgimento da matéria. A partir disso, começamos a
pensar nas relações que têm que haver entre os envolvidos no processo de desenvolvimento,
para chegarmos aos resultados atuais, ou seja, o planeta Terra, como se conhece hoje. Estas
relações, uma vez que, entrado em seu nível mais profundo, ficam por vezes mais complexas.
Algumas reações finais no processo do surgimento do planeta estão ligadas diretamente a
reações iniciais de milhões ou bilhões de anos atrás. Dessa forma, para se ilustrar toda essa
redes de relacionamento, necessitariam de um espaço físico muito grande, pois a rede que se
formaria para essa representação seria enorme.
Para um melhor entendimento, que caiba em pouco espaço, dessas relações
complexas, podemos abstrair de maneira mais simples levando em conta a relação de uma
pessoa com algumas outras. Ao considerarmos a Figura 10, temos as pessoas A, B, C, D.
Como podemos ver, A tem relação de amizade com B e D. B tem relação de amizade com A,
C e D. C tem relação com B e D relação com B e A. Neste caso, embora todos as pessoas
37

estejam ligadas, nem todas se conhecem. De fato, C pode não saber da existência de D. Mas
se levamos em conta que estas representações podem ser expandidas, em um futuro, pode ser
que C tenha conhecimento de D por meio de B ou diretamente, ligando assim C em D.

Figura 10: Exemplo de relação de amizades em grafo


Fonte: do autor.

Como podemos ver, a representação facilita muito o entendimento das relações entre
as pessoas. A Figura 10 representa o conceito de grafos que será apresentado a seguir.

2.5.4 Grafos

Grafos são objetos de estudo em matemática e ciência da computação. Os grafos são


representados por vértices (V) e arestas (E), como pode ser visto na Figura 9. As letras A, B,
C, D são os vértices, também denominados nós. As linhas que ligam os nós são as arestas.
Essas ligações de nós representam a relação entre os objetos, seja de maneira direta, ou
hierárquica, como no caso de árvores. As ligações são simétricas, pois A tem relação com B e
vice-versa. Podemos dizer então que são representações não direcionadas, fazendo parte de
grafos não-direcionados, onde e = {A, B}, onde A tem relação com B, mas também pode ser
representada por e = {B, A}.
De maneira mais aprofundada, segundo Netto (2006, p. 6), “um grafo é uma estrutura
G = (V, E), onde V é um conjunto discreto e E é uma família cujos elementos (não vazios)
são definidos em função dos elementos de V, em duas formas possíveis.”
38

2.5.5 Representação dos grafos

Os grafos podem ser representados de várias maneiras. Neste trabalho, serão


apresentadas as duas maneiras mais comuns: Matriz de Adjacência e Lista de Adjacência.

2.5.6 Matriz de Adjacência

É possível representar os grafos por meio de uma matriz: se há n |V| vértices v1, v2,...,
vn, então ela é uma matriz n x n cuja (i, j)-enésima célula é: (DASGUPTA et al, 2009).

aij = 1 se existe uma aresta de vi para vj;


aij = 0 caso contrário;

Pode-se visualizar esse conceito na Figura 11 a seguir:

Figura 11: Matriz de adjacência


Fonte: Jorge (2003, p.1).

Na matriz de adjacência, as arestas ligadas entre si recebem o número 1, ou seja,


qualquer número que for adjacente ao outro, caso contrário receberá o número 0. Então se
quiser encontrar relações entre os nós de algum grafo representado em uma matriz de
adjacência, basta procurar a posição (i, j) da matriz.

2.5.7 Lista de Adjacência

Como representado na Figura 12, na lista de adjacência, a linha i da matriz contém os


vértices adjacentes ao i em grafos não direcionados.
39

Figura 12: Lista de Adjacência


Fonte: Jorge (2003, p.1).

Nesta representação, as n fileiras da matriz é representada como n listas interligadas.


Existe uma lista para cada vértice em G. Os nós na relação i representam os vértices que são
adjacentes a i. Cada nó da lista possui dois índices: o vértice, que armazena o índice do
vértice e o next que aponta para o próximo vértice adjacente (DASGUPTA et al, 2009).
A partir dessas duas representações de grafos, pode-se perguntar: qual é a mais
indicada para se trabalhar? É necessário ver este problema pela dimensão que o grafo
apresenta. A relação da dimensão do grafo se dá em função |V|, vértices e |E|, número de
arestas. |E| pode se tornar pequeno, assim o grafo se degenera, como o caso de vértices
isolados, ou tão grandes como |V|2, quando todas as possíveis arestas estão presentes. Quando
|E| está perto do limite superior desse intervalo, chamamos de grafo denso, caso contrário o
grafo é esparso (DASGUPTA et al, 2009). Dessa forma, para (CORMEN et al, 2002), a lista
de adjacência é melhor para representar os grafos em geral, porque ela fornece uma maneira
compacta de representar grafos esparsos, os quais |E| são muito menores que |V|2 , enquanto a
matriz de adjacência pode ser preferível, quando o grafo é denso - |E| este próximo de |V|2 .

2.5.8 Percurso em Grafos

Vários problemas representados pelos grafos podem ser resolvidos com buscas
realizadas nessas estruturas. Às vezes, será necessário percorrer todo o grafo, ou parte dele.
Mas tudo depende do tipo do algorítimo que será utilizado. Serão apresentados a seguir dois
algorítimos de percurso: percurso4 em profundidade e percurso em largura.

4
Algumas referências tratam os algorítimos como busca e não percurso. Mas, na realidade, os algorítimos são de
percurso. Por isso, neste trabalho, foram tratados como percurso.
40

2.5.9 Percurso em Profundidade

O percurso em profundidade é um procedimento linear que mostra toda a estrutura de


um grafo. A questão básica a que esse percurso responde é: quais partes do grafo são
alcançáveis, a partir de determinado vértice? Portanto, esse tipo de algorítimo identifica todos
os vértices de um grafo que podem ser alcançados a partir de um determinado ponto de
partida. (DASGUPTA et al, 2009). Segundo (CORMEN et al, 2002), no percurso em
profundidade, as arestas são exploradas a partir do vértice v mais recentemente descoberto,
que tem ainda arestas inexploradas saindo dele. Quando as arestas de v são exploradas, o
algorítimo regressa para explorar as arestas que deixam o vértice a partir do qual v foi
descoberto. Se existir algum vértice não descoberto, a exploração iniciará novamente,
marcando v, como nova origem.
Pode-se comparar esse tipo de percurso com uma exploração em um labirinto. Quando
se começa a explorar o grafo, chegando-se na junção (vértice), os caminhos (arestas) podem
tornar-se múltiplos. Sendo assim, escolhas podem fazer com que você fique andando em
círculos, ou também, deixe de explorar uma parte do labirinto. Para não se perder em
labirintos, recorrer-se a estratégias de marcações, como marcar os pontos que já passamos, e
termos um direcionamento do início do labirinto. De fato, não adiantaria marcar por onde
passou se não se conhece a saída, tanto para sair do labirinto, como para começar uma nova
exploração a partir do começo. Como isso poderia ser implementado computacionalmente?
São necessárias duas técnicas. Pode-se utilizar, nos vértices já passados, uma lógica
booleana5, em que os lugares visitados receberão true, e não visitados é nativo false. Nas
arestas, podemos implementar o conceito de pilha, em que, explorando mais a fundo no
labirinto, fazemos o empilhamento, e, caso contrário, retrocedendo ao labirinto, faz-se o
desempilhamento.
Para (DASGUPTA et al, 2009), é possível fazer isso implicitamente, não
implementando uma pilha literal, mas por meio de uma recursão (implementada usando uma
pilha de registro de ativação).

5
A lógica booleana consiste em duas afirmações: true e false. É utilizada na computação para representar os bits
1 true ou 0 false
41

Listagem 1:
Procedimento explorar ( G, v )
Entrada: G = ( V, E ) é um grafo; v ϵ V
Saída: visitado (u) é tornado verdadeiro para todos os nós
u, alcançáveis partindo de v.
visitado ( v ) = verdadeiro
pré-visita ( v )
para cada aresta ( v, u ) ϵ E;
se não visitado ( u ): explorar
pós-visita ( v )

Os procedimentos pré-visita e pós-visita são opcionais, mas ajudam a manter uma


maior organização na exploração do grafo, sendo pré-visita quando da primeira descoberta do
vértice, e pós-visita quando deixa o vértice pela última vez. Nesse tipo de percurso, o
explorador visita somente a porção do grafo alcançável. Para que o grafo inteiro seja
explorado, é necessário recomeçar de outro ponto que não foi visitado. Para isso, existe o
percurso em profundidade, DFS (do inglês depht-first search), ou percurso em profundidade
primeiro, fazendo isso repetidamente até que o grafo em seu total seja percorrido. Na Figura
13, apresenta-se um exemplo de um percurso feito em profundidade em um grafo.
O grafo é percorrido marcando os pontos brancos (não visitados) quando da primeira
visita (pré-visita) de cinza. O grafo vai sendo percorrido como e um labirinto, e as escolhas
que são feitas, são marcadas com cinza, até que se chegue a um nó que não apresenta nenhum
caminho novo. As arestas são exploradas a partir do vértice mais recentemente descoberto que
ainda possui arestas não exploradas saindo dele. No caso da Figura 13, o grafo foi percorrido
em: 1 - 2 - 4 - 6 -7 - 5. Ao chegar ao nó 5, o algorítimo não tinha mais caminhos novos a
percorrer a partir desse nó , marcando em preto (pós-visita), pois o grafo não mais irá explorar
aquele caminho. Assim, o algorítimo inicia novamente de um nó que ainda não foi explorado,
no caso o nó 3, e já marca como pós-vista (preto), seguindo o mesmo raciocínio. Dessa forma,
o algorítimo percorrerá cada nó, agora marcando como pós-visita, pois todos já foram
visitados uma vez.
42

Figura 13: Exemplo de percurso em profundidade


Fonte: http://www.lia.ufc.br/~pargo/index.php/Manuscritos/Profundidade.
43

2.5.10 Percurso em profundidade em grafos direcionados

Até agora, abordou-se percurso em grafos não-direcionados. Os grafos direcionados


ou dígrafos, são grafos que apresentam direções prescritas, não podendo assim o algorítimo
percorrer em qualquer direção as arestas, (DASGUPTA et al 2009). Na Figura 14, as arestas
são representadas pelas setas, mostrando em qual direção deve ser percorrido o grafo. Pode-se
tomar como exemplo de grafos direcionais árvores que possuem hierarquias que devem ser
percorridas a partir da raiz indo para as folhas.

Figura 14: Grafo direcional


Fonte: do autor.

Pode-se definir esse grafo como grafo direcionado cíclico, pois ele forma um caminho
circular onde v0 → v2 → v3 → vx → v0. Pode-se notar no grafo um exemplo, A → D → B → C
→ E → A.
Sua propriedade: “um grafo direcionado possui um ciclo se e somente se a sua busca
em profundidade revela uma aresta de retorno” (DASGUPTA et al, 2009, p. 89).
44

Figura 15: Grafo direcional acíclico


Fonte:6

Se observada a Figura 15, pode-se perceber que, ao se fazer o caminho 3 → 5, não se


encontra um vértice de retorno, ou seja, um grafo acíclico. Esse tipo de grafo é denominado
dag (do inglês direct acyclic graph) ou grafo direto acíclico. Eles são bons para modelar
relações de casualidade, hierarquias e dependências temporais.

2.5.11 Percurso em largura

O percurso em largura, também conhecido como BSF (do inglês breadth-first search),
trabalha com a junção dos vértices, contando cada vértice como se fosse uma camada. A
contagem inicia-se a partir da fonte do grafo, ou raiz no caso de uma árvore, e adiciona no
contador 1 cada vez que encontra uma nova aresta mais próxima a partir de uma grafo,
(DASGUPTA et al 2009). Dessa forma, a distância d entre os nós é de d + 1, sendo d=0 caso
ainda se esteja na aresta inicial. Diferentemente do percurso em profundidade, a percurso em
largura é implementada em uma fila para garantir a ordem de chegada dos vértices. Para cada
distância subsequente d = 1, 2, 3 é adicionado na fila. À medida que estes nós são
processados, são tirados da fila para que os vizinhos sejam adicionados. Este tipo de percurso

6
http://pt.wikibooks.org/wiki/Processamento_de_Dados_Massivos/Projeto_e_implementa%C3%A7%C3%A3o_
de_aplica%C3%A7%C3%B5es_Big_Data/Identifica%C3%A7%C3%A3o_de_ciclos_em_grafos.
45

tem a propriedade de que todos os seus caminhos são os mais curtos, sendo, portanto, um
algorítimo, para encontrar caminhos mínimos.
Pode-se então escrever o seguinte algorítimo, segundo Dasgupta et al (2009):

Listagem 2:
procedimento bfs (G, s)
Entrada: Grafo G = (V, E), direcionado ou não-
direcionado;
Vértice s ϵ V

Saída: Para todos os vértices u alcançáveis partindo


de s, à dist(u) é atribuída a
distância de s até u.
para todo u ϵ V :
dist(u) = ∞:
dist(s) = 0
Q = [inicio] (fila contando apenas o início)
enquanto Q não está vazia:
u = ejetar(Q)
para todas as arestas (u,v) ϵ E;
se dist(v) = ∞;
injetar(Q, v)
dist(v) = distji(u)

Durante o curso de operações, o loop visualiza cada aresta uma vez (em grafos
direcionados) ou duas vezes (em grafos não direcionados) (DASGUPTA et al 2009).
Diante destas descrições dos grafos, neste trabalho, pode ser utilizado7 o conceito de
percurso em profundidade em grafos direcionados. Parte-se da seguinte questão: quais
conceitos estão relacionados a partir de um conceito x, ou seja, quais partes do grafo
direcionado são alcançáveis, a partir de determinado vértice? Dessa questão, consegue-se

7
Pode ser utilizado pelo fato de que o banco de dados orientado a grafos (seção 2.6.1), utilizado neste trabalho,
torna transparente ao usuário a implementação e manipulação dos algorítimos. Dessa forma, não foi necessário o
desenvolvimento de nenhum algorítimo de busca em grafos.
46

extrair o que será preciso: partindo-se de um determinado conceito, que outros conceitos da
ontologia vão estar relacionados com o primeiro?

Figura 16: Grafo Ontologia


Fonte: do autor

No grafo representado na Figura 16, se o objetivo for encontrar os relacionamentos do


conceito Redes, pode-se, a partir do nó Redes, percorrer o grafo em profundidade,
direcionado em uma dag, para que se chegue aos nós que estão relacionados, quando da
exploração do grafo. Dessa forma, serão apresentados os resultados: Servidores,
Banco_de_Dados, Web8.

2.6 Banco de dados NoSQL

Banco de dados NoSQL (Not only SQL), em português “Não apenas SQL”, foi
concebido para resolver problemas de escalabilidade e armazenamento de grandes volumes de
dados na Web 2.0, (DIANA; GEROSA, 2010), conhecidos como Big Data, que
conceitualmente se referem às grandes quantidades de dados complexos, o que torna
extremamente difícil realizar alguma operação (e.g, ordenação, remoção, sumarização) sem
perda de desempenho, utilizando Sistemas Gerenciadores de Banco de Dados (SGBD)
relacionais (VIEIRA et al 2012). Com esses problemas, as comunidades de softwares livres e

8
Esse grafo é só um exemplo de relacionamento de conceitos, não sendo ele a representação real da ontologia
desenvolvida, pois os relacionamentos podem não apresentar esses resultados.
47

empresas como Amazon, Google, Linkedln, Twitter, (ORACLE, 2012) começaram a buscar
alternativas próprias e publicaram seus artigos científicos (CHANG et al, 2006), como, por
exemplo, a Google, que publicou um artigo sobre Big Tables, sobre a busca da grande
escalabilidade em um novo tipo de banco de dados, fugindo do conceito relacional. Até então,
esses tipos de banco de dados não eram denominados NoSQL, embora já existissem antes
mesmo dos banco de dados relacionais, só sendo reconhecidos como tal em 2009 pela
comunidade de software livre e código aberto.
O termo NoSQL, apesar de ter um significado, não traz claramente o que esses tipos
de banco de dados são realmente. De fato, a linguagem SQL não é sinônimo de banco
relacional, nem representa suas limitações (DIANA; GEROSA, 2010), sendo assim os bancos
NoSQL, em sua maioria, apresentam as seguintes características: não-relacional, distribuído,
de código aberto e escalável horizontalmente, ausência de esquema ou esquema flexível,
suporte à replicação nativo e acesso via APIs simples (NOSQL, 2010). É importante ressaltar
que os bancos de dados NoSQL não se aplicam a todos os cenários, sendo relativos e
específicos nas áreas de atuação, pois cada uma supera e faz ajuste de escala para alguns
subconjuntos de casos de uso (PERERA, 2012).
Existem vários tipos de banco de dados NoSQL, entre os quais, os mais comuns são:
bancos de dados orientados a documentos, armazéns de chave-valor, bancos de dados de
famílias de colunas e bancos de dados de grafos (DIANA; GEROSA, 2010).

• Banco de dados orientado a documentos: são coleções de atributos e valores, em


que o atributo pode ser multivalorado. Geralmente não possuem esquema, o
documento armazenado não precisará possuir uma estrutura em comum,
(NEOTECHNOLOGY, 2012). Exemplos de bancos nesta categoria9: MongoDB,
CouchDB, BigCouch, RavenDB, Clusterpoint Server, ThruDB, TerraStore, RaptorDB,
JasDB, SisoDB SDB, SchemaFreeDB, djondb.
• Armazéns de chave-valor: Sistemas distribuídos nessa categoria, também conhecidas
como tabelas de hash distribuídas, armazenam objetos indexados por chaves,
permitindo que se façam buscas por chave/valores. (NEOTECHNOLOGY 2012).
Exemplos de bancos nesta categoria: Dynamo, Azure Table Storage, Couchbase
Server, Riak, Redis, LevelDB, Chordless, GenieDB, Scalaris, Tokyo Cabinet/Tyrant,

9
Os exemplos de banco de dados NoSql foram retirados do site <nosql-database.org>.
48

GT.M, Scalien, Berkeley DB, Voldemort, Dynomite, KAI, MemcacheDB, Faircom C-


Tree, HamsterDB, STSdb, Tarantool/Box.
• Famílias de colunas: Em um banco de dados relacional, em que se queira ler poucas
colunas de muitos registros, torna a operação pouco eficiente, pois muitos blocos do
disco terão de ser lidos. Para esses casos em que se quer otimizar a leitura de dados
estruturados, bancos de dados de famílias de colunas são mais interessantes, pois eles
guardam os dados contiguamente por coluna (NEOTECHNOLOGY 2012). Exemplos
de bancos nesta categoria: Hbase, Cassandra, Hypertable, Accumulo, Amazon
SimpleDB, Cloudata, Cloudera, SciDB, HPCC, Stratosphere.
• Banco de dados de grafos: A ideia dos bancos de grafos está ligada diretamente a um
modelo de dados estabelecido, o modelo de grafos. A ideia desse modelo é representar
os dados em esquemas de grafos dirigidos, ou estruturas que representem os conceitos
de grafo. Segundo Robinson et al (2013, p.75) “banco de dado de grafo é em
mecanismo que suporta um modelo de dados de grafo apoiado por persistência de
grafo nativa, para a realização de consultas”. Dessa forma, o modelo de grafos é mais
interessante que outros quando “informações sobre a interconectividade ou a topologia
dos dados são mais importantes, ou tão importantes quantos os dados propriamente
ditos” (NEOTECHNOLOGY 2012). Exemplos de bancos nesta categoria: Neo4J,
Infinite Graph, Sones, InfoGrid, HyperGraphDB, DEX, Trinity, AllegroGraph,
BrightStarDB, BigData, Meronymy, OpenLink Virtuoso, VertexDB, FlockDB.

Há diversos bancos NoSQL que podem ser utilizados, mas tudo depende da
necessidade e de cada caso. Diante disso, é perceptível que banco de dados orientado a grafos
são bons para armazenar dados por meio de relacionamentos, ou seja, a interconectividade
entre os dados. Neste trabalho, como já foi dito, utiliza-se o relacionamento entre conceitos
(ontologia). Dessa forma, a ontologia, para permitir seu reuso e a fácil manipulação, foi
transferida para um banco de dados orientado a grafos. O banco utilizado foi o Neo4j, onde
foi possível o armazenamento da ontologia em grafos.

2.6.1 Neo4j

Neo4j é um banco NoSQL orientado a grafos implementado em Java. Neo4j foi


desenvolvido pela Neo Technology, Inc., com sede na área de San Francisco Bay, EUA e
Malmö, na Suécia. A versão 1.0 foi lançada em fevereiro de 2010, passou por diversas
49

versões, e atualmente se encontra na versão 2.0. Neo4j está em desenvolvimento há mais 10


anos. Há três edições do banco: Enterprise, Advanced e a Community. A edição Community
do banco de dados está licenciado sob a GNU General Public License (GPL) v310 (NEO4J,
2013). Segundo Hunger (2011), podem-se destacar sobre o Neo4j os seguintes aspectos:

• Possui um modelo de grafo orientado intuitivo, rico para a representação de dados.


Em vez de tabelas, linhas e colunas, trabalha-se com um grafos, composto por nós, relações e
propriedades;
• Possui um gestor de armazenamento nativo baseado em disco otimizado para
armazenar estruturas de grafo com o máximo de desempenho e escalabilidade.
• Confiável, com transações ACID11 completo;
• É escalável. Neo4j pode manipular grafos com muitos bilhões de nós / relações /
propriedades em um único máquina, mas também pode ser escalado externamente em várias
máquinas para alta disponibilidade;
• Possui uma estrutura transversal poderosa e linguagens de consulta para atravessar o
gráfico;
• Simples, acessível através de uma interface REST12 conveniente ou um orientado a
objeto Java API13;
• Pode ser implementado como um servidor independente ou um banco de dados
integrado;

Segundo o manual do Neo4j (2013, p. 513), “atualmente ele suporta cerca de 34.4
bilhões de nós, 34.4 bilhões de relacionamentos e no mínimo 68.7 bilhões de propriedades”.

10
Mais informações sobre as licenças do Neo4j estão disponíveis em < http://www.neo4j.org/learn/licensing>.
11
ACID acrônimo de Atomicidade, Consistência, Isolamento e Durabilidade. Propiedades em um banco que
busca garantir a consistência da base de dados (SILBERSCHATZ; KORTH 2006).

12
Representational State Transfer (Transferência do Estado Representativo). Para o criador do conceito,
Fielding (2000), “REST é um estilo de abstração dos elementos arquitetônicos dentro de um sistema hipermídia
distribuído. REST ignora os detalhes de implementação do componente e sintaxe do protocolo, a fim de
concentrar-se nos papéis de componentes, as restrições sobre sua interação com outros componentes[...]”.
13
Acrônimo de Application Programming Interface (Interface de Programação de Aplicativos). Bibliotecas
disponibilizadas por uma tecnologia que serverm para automatizar, padronizar e tornar transparentes as tarefas
na programação (DEITEL, 2010).
50

A maneira de se trabalhar no Neo4j é a partir do conceito de grafos. Mas como já


mencionado, não é necessário ter conhecimentos profundos sobre grafos. É necessário
somente ter o entendimento do que são os grafos, pois a forma de construir e percorrer um
grafo por meio dos algorítimos é totalmente transparente para os usuários, ou seja, o Neo4j
faz tudo de maneira automática.
Para esse novo paradigma de banco de dados, alguns conceitos mudam em relação aos
bancos de dados relacionais. Enquanto os bancos de dados relacionais trabalham com o
conceito de inserção dos dados em tabelas e relacionam-se essas tabelas por meio de chaves
estrangeiras, o Neo4j trabalha com o conceito de que cada nó tenha suas propriedades e cada
nó represente uma entidade. Esses nós podem ter relações com outros nós por meio de
relacionamentos, que são representados por arestas. Os relacionamentos possuem uma direção
e um nome. Dessa forma, a aresta representa o tipo de relacionamento, como pode observado
na Figura 17:

Figura 17: Propriedade dos grafos Neo4j


Fonte: http://www.neo4j.org/learn/graphdatabase.
51

2.6.2 Trabalhando com as tecnologias Neo4j

O Neo4j apresenta duas maneiras de se trabalhar14 com banco de dados: o embedded


(“embarcado” em português) e o banco Server. O embedded é um banco de dados que é
criado junto com o projeto Java com o qual se estiver trabalhando, mas, apesar de ser
facilmente configurado, não apresenta uma interface nativa onde se possa ver os nós e
relações. Já o banco Server é um banco de dados que, ao ser instalado, roda no localhost15 da
máquina, podendo ser conectado com o Java, com a API REST. O banco Server apresenta
uma interface amigável, onde pode-se visualizar toda a estrutura do grafo.
Para utilizar o Neo4j, é necessário fazer o download16 e executá-lo na máquina que
será o servidor. Há várias versões disponíveis, e neste trabalho, foi utilizada a versão 2.0.0 -
M02 , pois essa traz a nova funcionalidade Label (rótulo), onde pode-se definir, como por
exemplo, utilizado neste trabalho, um nó com label Livro, ou label Categoria, podendo assim
definir um conjunto de nós dentro de uma categoria. Essa funcionalidade não estava presente
em versões anteriores.
Após fazer o download e extrair o arquivo, é necessário iniciar o serviço do banco
(não é necessário instalar, mas apenas rodar o banco na máquina). Para isso, basta ir à pasta
do download feito. Ex: PastaNeo4j/bin e clicar duas vezes em Neo4j.bat. Em seguida, acessa-
se o endereço http://localhost:7474/webadmin/, em qualquer navegador web. A tela inicial do
Neo4j pode ser visualizada na Figura 18.

14
Este tópico não pretende mostrar-se como um manual, mas sim explanar sobre as tecnologias relacionadas ao
Neo4j utilizadas neste trabalho, justificando assim seu uso. Para o download do manual basta fazer o cadastro no
endereço <http://info.neotechnology.com/download-pdf.html?document=milestone>, que será enviado um link
para download no email cadastrado. Para tirar qualquer dúvida sobre o Neo4j e suas tecnologias, pode-se acessar
as comunidades: O Neo4j Stackoverflow: <http://stackoverflow.com/questions/tagged/neo4j> e Neo4j
Comunidade de discussões: <https://groups.google.com/forum/#!forum/neo4j>.
15
localhost representa do servidor local, ou seja, o servidor representado pelo próprio computador em uso.
16
Disponível em: <http://www.neo4j.org/download>.
52

Figura 18: Tela inicial Neo4j Server


Fonte: do autor.

Na tela inicial do Neo4j, é demonstrado a quantidade de nós, propriedades,


relacionamentos e tipos de relacionamentos contidos no banco, no além do gráfico dos nós,
propriedades, relacionamentos e tipos de relacionamentos criados em um determinado
período de tempo. As opções contidas no Neo4j Server são:

• Dashboard: A dashboard é a tela inicial mostrada na Figura 18.


• Data browser: Nesta aba, podem-se criar nós, relacionamentos e tipos de
relacionamentos, em uma tela intuitiva, onde não é necessário código para inserção
dos nós ou relacionamentos, pois há opções que fazem isso automaticamente. Além
disso, é possível inserir atributos nos nós, e fazer buscas no grafo, onde serão exibidos
os resultados na parte central da tela. Possui também a opção de formatar a saída,
colocando diferentes ícones e cores nos nós, para facilitar a visualização dos dados
contidos no banco, como mostrado na Figura 19.
• Console: é onde se utilizam as linguagens query específicas para se criar
manualmente os grafos, atributos e relacionamentos. É possível, como em qualquer
outro console, gerenciar todo o banco por linhas de comando
• Indexes: Local para criação de índices que possibilitam a procura mais rápida de um
registro. Por meio das linguagens query do Neo4j, é possível criar índices quando da
criação dos nós.
53

• Server info: informações sobre o servidor.

Para se trabalhar com o Neo4j, faz-se necessário o conhecimento das linguagens query
suportada e os tipos de conexão com o banco. A linguagem query Cypher é a linguagem
oficial Neo4j. Com ela, é possível trabalhar tanto em banco de dados embarcado como no
Server. Pelo fato de ser uma linguagem nova, ela está em constante desenvolvimento e
aprimoramento (NEO4J, 2013). A linguagem Cypher procura focar na expressão “diga o que
quer e não como quer”, o que a torna a mais clara possível. Algumas expressões são
inspiradas em SQL como WHERE e ORDER BY, CREATE, DELETE.
Os modos de conexões17 com o banco são basicamente os seguintes:

• Neo4j embedded: referente ao banco embarcado Neo4j. Trabalha com os objetos de


acesso nativo.
• Neo4j REST referente ao banco Server, mas trabalha com os métodos nativos de
acesso via REST FUL web services.
• Neo4j Cypher embedded: referente ao banco embarcado, trabalhando por meio da
linguagem query Cypher.
• Neo4j Cypher REST: referente ao banco Server, trabalhando por meio da linguagem
query Cypher com a API REST.
• Neo4j Gremlin18 Rest: referente ao banco Server, trabalhando por meio da linguagem
query Gremlin com a API REST.

Cabe assim o estudo de caso para cada necessidade. O Neo4j e suas linguagens de
trabalho apresentam seus prós e contras, tanto pela facilidade de uso, como pelo desempenho.
O desempenho pode ser verificado nos trabalhos de Barmpis; Kolovos (2012) e Holzschuher;
Peinl (2013). Neste trabalho, não se prima pelo desempenho, mas, mesmo assim, foi
escolhida a linguagem Cypher já que é de fácil manuseio e apresenta resultados satisfatórios.
O banco de dados utilizado neste trabalho foi o Server, pois apresenta a interface gráfica
nativa, sendo mais fácil de visualizar a estrutura do grafo em desenvolvimento. Para

17
Há, no apêndice B, alguns exemplos de como conectar no banco do Neo4j.
18
A linguagem Gremlin não será abordada aqui, pois não é o foco deste trabalho e, segundo informações no
manual do Neo4j, traz alguns riscos de segurança. Além disso, a linguagem oficial Neo4j é o Cypher. Para saber
mais sobre o Gremlin, pode-se acessar < http://gremlindocs.com/> e <http://markorodriguez.com/>.
54

visualizar o grafo no modo embarcado, é possível utilizar o Neoclipse19, que é um ambiente


eclipse para o gerenciamento do banco, dando opções de CRUD20, inclusive no modo Server.

Figura 19: Data browser Neo4j


Fonte: do autor.

19
O Neoclipse 1.8 (última versão até o momento da redação deste trabalho) não foi utilizado neste trabalho pelo
fato de não suportar a versão 2.0 do Neo4j.
20
CRUD (Create, Read, Update, Delete): Operações básicas para Criar, Ler, Atualizar e Deletar dados do banco.
Capítulo

55

3 Metodologia
A proposta deste trabalho foi desenvolver uma seção sobre o assunto Sistemas para
Internet no catálogo online para a biblioteca. Para tanto, no domínio da Linguística
Computacional, utilizou-se ontologia, que é o relacionamento entre conceitos, entrelaçados a
diversos outros sem uma ordem específica, que formam uma rede. Por essa razão, optou-se
por utilizar sistemas de busca em grafos. Parte da ontologia foi inserida no banco de dados
orientado a grafos. Fez-se uso da linguagem de programação Java para desenvolver o
catálogo.
Além disso, para se criar uma ontologia, foi necessário definir um corpus, conjunto de
dados linguísticos coletados. Neste trabalho, esse corpus constituiu-se de palavras existentes
nos sumários dos livros da bibliografia básica do Curso de Tecnologia em Sistemas para
Internet. A limitação na escolha do escopo dos sumários ficou assim definida, pois, além de
ser um trabalho inicial no campus, a coleta e o relacionamento dos dados de um corpus muito
extenso consiste em tarefa árdua.
Foram coletados os sumários de 58 livros. Esses sumários foram digitados ou
coletados na internet por meio de pesquisa no Google ou nos sites das editoras dos livros.
Alguns sumários que estavam em formato de imagem precisaram ser convertidos em textos
com software de conversão OCR.
A partir do corpus coletado, utilizou-se o software AntConc21, que é uma ferramenta
livre de uso multiplataforma para a realização de pesquisa em Linguística de Corpus. Com o
auxílio desse software, todos os sumários podem ser analisados em termos de relevância de
ocorrência de palavras. Para isso, basta inserir no software um ou mais sumários, a partir da
opção File – Open File. A Figura 20 a seguir mostra um exemplo do sumário do livro

21
O freeware Laurence Anthony’s AntConc 3.2.4w é um concordanciador disponível gratuitamente na internet
em <http://www.antlab.sci.waseda.ac.jp/software.html>. Acesso em 10.Nov.2012. O concordanciador é uma
ferramenta de análise lexical que auxilia o pesquisador a coletar e tratar os dados para descrição. Apresenta,
entre outras, as seguintes ferramentas, utilitários, instrumentos e funções: lista de palavras, identificação de
palavras-chave, etiquetador, organização de dados em clusters, etc. Para executar suas tarefas, esse
concordanciador somente aceita receber textos em extensão.txt.
56

DEITEL, Paul; DEITEL, Harvey. Java: como programar. 8.ed. São Paulo: Pearson Prentice
Hall, 2010 inserido no software.

Figura 20: Exemplo AntConc com um sumário


Fonte: do autor.

O próximo passo é encontrar as palavras que mais aparecem no sumário, ou seja,


palavras-chaves que remetem a um maior número de obras. Nessa primeira etapa de
construção da ontologia, foram obtidos os types (tipos) e tokens (ocorrências) de todos os
sumários. Chama-se tipo/ocorrência a relação de número de palavras diferentes (tipo) com o
número total de formas de um texto (amostragem). Nessa relação, o tipo, por exemplo, é
“linguagem” e as ocorrências são todos os empregos de “linguagem” (e às vezes também os
do plural, linguagens). A relação tipo/ocorrência mede a riqueza do vocabulário e sempre que
um elemento linguístico (type) figura num texto, fala-se de ocorrência (token) (DUBOIS,
1973, p. 441). O software AnConc auxilia a verificação dessa relevância de ocorrências, uma
vez que, basta clicar na aba Word List e depois em Start, para que sejam listadas todas as
57

palavras e a frequência com que são encontradas nos sumários, como ilustra a Figura 21 a
seguir.

Figura 21: Lista de palavras e suas frequências encontradas no sumário


Fonte: do autor.

A pesquisa do software com todos os sumários extraiu 6.839 palavras. Nota-se que
algumas palavras são irrelevantes para a pesquisa, como, por exemplo, as palavras “é”, “das”,
“e”, “o”, “as”, “os”. Essas palavras foram descartadas por não apresentarem relações de
conceitos.
Após essa primeira triagem, foi escolhida aleatoriamente22 uma lista de dezenove
palavras recorrentes com frequencia nos sumários, para assim constituir a ontologia. As
palavras escolhidas foram:

22
Essa decisão foi tomada devido ao fato de se ter um conjunto muito extenso de palavras para se trabalhar em
um tempo escasso, e também, a extensão que os conceitos pode apresentar é por vezes inimaginável.
58

• Dados
• C
• SQL
• Banco de dados
• Marketing
• Sistemas
• Internet
• IP
• Protocolo
• UML
• Redes
• WEB
• Java
• Programação
• Linguagem
• Assembly
• Administração
• IHC
• Segurança

O próximo passo foi identificar de que sumário faz parte cada palavra escolhida. No
exemplo da figura anterior, apresenta-se apenas um sumário, e, naturalmente, todas as
palavras buscadas pertencem à mesma obra. Mas, quando se trabalha com vários sumários, é
indispensável a ajuda dessa ferramenta. A aba Concordance do software AntConc permite
verificar onde a palavra ocorre em cada sumário. Para proceder a essa verificação, como
ilustra a Figura 22, a palavra é escrita no campo destacado por um círculo e, em seguida,
clica-se no botão Start. No centro das frases dispostas no concordanciador, vê-se que a
palavra pesquisada Java está destacada pelo retângulo.
59

Figura 22: Exemplo de pesquisa


Fonte: do autor.

No exemplo ilustrado pela Figura 22, pesquisou-se a palavra “Java”. Clicando sobre a
palavra “Java” em cada linha, o software remete ao sumário em que a palavra se encontra,
como mostra a Figura 23 a seguir. Ao clicar na primeira linha, a ferramenta remete o
pesquisador ao livro DEITEL, Paul; DEITEL, Harvey. Java: como programar. 8.ed. São
Paulo: Pearson Prentice Hall, 2010, que está referenciado acima de cada sumário. Nos
cabeçalhos de cada sumário, foi colocada a referência da obra. Dessa forma, pode-se
relacionar a palavra às obras em que aparecem. Para identificação, a cada obra foi atribuído
um número de identificação (id). No caso da Figura 23, o id está representado pelo número
17.
60

Figura 23: Relação das palavras com seus sumários


Fonte: do autor.

Até essa etapa, consegue-se obter as palavras, mas ainda não fica claro com qual
conceito elas se relacionam. Por isso, o próximo procedimento foi fazer um levantamento de
vocabulário controlado da área da computação. O vocabulário controlado é uma ferramenta
criada para auxiliar os profissionais da informação, que trabalham com a descrição de
assuntos e representação das informações contidas em documentos referentes a uma
determinada área de conhecimento. Segundo Maculan (2010),

Um vocabulário controlado é uma lista de termos elaborada para identificar o


assunto ou os assuntos de um documento com especificidade bastante para permitir
sua recuperação rápida e eficaz, pois permite controlar a terminologia de um
domínio, instituindo regras para seu uso, compartilhamento, e sua expansão. Esse
controle permite organizar e recuperar informações de forma consistente,
acarretando confiança no sistema de recuperação de informação (SRI). A norma
ANSI/NISO Z39.19 (2005) indica que um vocabulário controlado é uma lista
controlada de termos explicitamente listados, que devem ter uma definição clara e
inequívoca, dentro do propósito para o qual foi criado, com o objetivo de organizar a
informação. A norma apresenta como tipos de vocabulário controlado: a lista de
assuntos, o anel de sinônimos (um grupo de termos que são considerados sinônimos
com o propósito de recuperação), o tesauro e a taxonomia.
61

Com um vocabulário controlado, pode-se relacionar as palavras a conceitos. O


vocabulário controlado de computação utilizado para esta pesquisa foi extraído da USP23. As
categorias ficaram assim divididas, em uma lista de dezenove itens:

• PROFISSIONAIS DA INFORMÁTICA
• ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
• GESTÃO DA SEGURANÇA EM SISTEMAS COMPUTACIONAIS
• MATEMÁTICA DA COMPUTAÇÃO
• REDES E COMUNICAÇÃO DE DADOS
• BANCO DE DADOS
• SOFTWARES
• TEORIA DA COMPUTAÇÃO
• LINGUAGEM DE PROGRAMAÇÃO
• SISTEMAS OPERACIONAIS
• INTERAÇÃO USUÁRIO-COMPUTADOR
• SISTEMAS MULTIMÍDIA
• WORLD WIDE WEB
• LINGUÍSTICA
• MARKETING
• ADMINISTRAÇÃO
• ENGENHARIA DE SOFTWARE
• DISPOSITIVOS MÓVEIS
• PROGRAMAÇÃO

As categorias “linguística”, “marketing”, “administração” e “dispositivos móveis” não


foram encontradas no vocabulário controlado da USP, mas foram acrescentadas por estarem
presentes na bibliografia básica do Curso Tecnologia em Sistemas para Internet. Apesar disso,
nem todas as categorias foram utilizadas, pelo fato de que nem todos os conceitos foram
catalogados.

23
Disponível em <http://143.107.73.99/Vocab/Sibix652.dll/ARV?Hier=CE610>. Acesso em 29 Out. 2012.
62

Após essa etapa, as palavras foram agrupadas em conceitos, tarefa para a qual foi
necessária a ajuda de profissionais da área, denominados informantes da pesquisa. Esses
profissionais são os professores que estão ligados diretamente ao curso, no caso os
orientadores. Com os dados já levantados, foi necessário categorizá-los por assunto, pois os
conceitos têm relação direta a um assunto. Para isso, fez-se uso da semântica lexical. Da
semântica lexical, foram utilizados os conceitos de definição (é um(a)), hiponímia e
hiperonímia (é um tipo de / está contido em) e holonímia (tem como parte). Estes são alguns
exemplos da utilização da semântica lexical no conceito “linguagem de programação”:

• definição: C++ é uma linguagem de programação.


• hiponímia/hiperonímia: orientado a objetos é um tipo de paradigma de
programação / sintaxe de programação está contido em linguagem de
programação.
• holonímia : linguagem de programação tem como parte SQL.

Com essas categorizações da semântica lexical, foi possível classificar as palavras


levantadas em uma ou mais categorias específicas24. A partir da categorização por assunto,
formou-se a ontologia, em que foram obtidas as relações dos conceitos. Em seguida, foi
implantada a ontologia no banco de dados orientado a grafos (Neo4j). Como já mencionado,
no Neo4j, foi utilizado o banco de dados Server, em que é possível visualizar os nós e
relacionamentos criados. Os scripts (código)25 para a criação dos dados no banco foram
redigidos no bloco de notas e depois copiados para o console do Neo4j. Fazendo dessa forma,
garante-se que o banco possa ser recriado posteriormente, pois, como de praxe, os scripts não
são guardados no software. Na Figura 23, pode-se ver o banco criado. Vale ressaltar que o
banco Server possibilita a formatação da apresentação dos dados. Na Figura 24, por exemplo,
os “balões” representam os conceitos, a “etiqueta” representa a categoria e o “código de
barras” representa os livros. Esses ícones são nativos do Neo4j26.

24
Essa classificação por categorias está no apêndice A.

25
Os scripts estão no apêndice C.
26
Este trabalho não obteve êxito em obter informações da possibilidade da personificação dos ícones, como por
exemplo, inserir imagens próprias, pois nada é referenciado na documentação ou nos fóruns de ajuda.
63

Figura 24: Imagem Banco criado no Noe4j


Fonte: do autor.
64

Com os dados armazenados, foi feita uma aplicação web (o catálogo), na linguagem
de programação Java, que possibilitou a recuperação das informações no banco. Na figura 25,
mostra-se o diagrama de classes do desenvolvimento do catálogo.

Figura 25: Diagrama de classe do catálogo desenvolvido.


Fonte: do autor.

Para a criação do catálogo27, foi utilizada a IDE28 NetBeans 7.1.2, conceitos de JSP e
Servlet. Para a visualização da página do catálogo, foi utilizado o navegador Mozilla Firefox
21.0.
A aplicação desenvolvida é uma página Web (Figura 26), em que se apresenta um
campo para a inserção do conceito a ser buscado e dois modos de fazer buscas no banco:
Busca por Livro e Busca por Relacionamento.

27
O código da implementação pode ser visualizado no apêndice D.
28
IDE (Integrated Development Environment) é um ambiente integrado para desenvolvimento de software, em
que cada IDE dá suporte ao desenvolvimento em uma ou mais linguagens de programação.
65

Figura 26: Tela do catálogo desenvolvido


Fonte: do autor.

A Busca por Livro recupera os livros relacionados ao conceito inserido no campo


buscar. No exemplo da Figura 27, o conceito “java”29 é buscado, e o livros são retornados
pelo banco. É importante perceber que nem sempre o livro retornado está diretamente ligado a
“java”. No exemplo mostrado, DEITEL, H. M. et. al. XML: como programar. Porto Alegre:
Bookman, 2003, é um livro de linguagem de marcação, ou seja, uma linguagem para se
trabalhar com páginas da Web, e não uma linguagem de programação Java. Mas, de fato, há
um momento no sumário da obra em que Java é mencionado, que por sua vez dá a
possibilidade de inserir Java como constituinte do assunto da obra. Essa é a funcionalidade da
ontologia e o principal objetivo deste trabalho. Já a Busca por Relacionamento retorna tudo o
que estiver relacionado ao conceito inserido no campo, como visto na Figura 28, o exemplo
com o mesmo conceito “java”. O retorno são os livros relacionados, bem como todo tipo de
relacionamento. Os resultados diversos da Busca por Livro são: Java é uma Linguagem de
programação e também Java é Orientado a Objetos. Dessa forma, o resultado obtido pela
Busca por Relacionamento possibilita a consulta dos relacionamentos de assuntos, que é o
que caracteriza uma ontologia, bem como as obras relacionadas às palavras buscadas, que são
exemplos dos livros já catalogados. Assim sendo, pelo fato de o catálogo ser online, fica à
disposição de todos, inclusive de outros bibliotecários que necessitarem de consultar o
catálogo para definir os assuntos de uma obra, enquanto a Busca por Livro fica à disposição
daqueles que precisarem consultar o acervo da biblioteca.

29
O sistema não faz diferenciação entre letras maiúsculas e minúsculas (conhecido como case insensitivity na
informática).
66

Figura 27: Exemplo busca por Livro no catálogo.


Fonte: do autor
67

Figura 28: Exemplo de Busca por Relacionamento.


Fonte: do autor.
68

Finalmente, é importante salientar que nem todas as obras coletadas foram


contempladas nesta etapa de implementação, ou seja, não estarão disponíveis para consulta no
catálogo resultante deste trabalho. O tempo para relacionar as palavras, que constituirão a
ontologia, com as obras é escasso para apenas um trabalho de pesquisa. Por isso, optou-se por
trabalhar dentro de Sistemas para Internet com os conceitos da categoria “linguagens de
programação”, uma vez que esta é a necessidade primordial no momento para a biblioteca do
campus.
Em outras pesquisas vindouras serão refinadas semanticamente e implementadas
computacionalmente as demais categorias do corpus construído nesta pesquisa.
Capítulo

69

4 Resultados

Este trabalho, fundamentado na Línguistica, na Informática e na Biblioteconomia,


atingiu seu objetivo principal: a criação de um catálogo online para a biblioteca do IFSP,
campus São João da Boa Vista.
O primeiro resultado obtido foi a ontologia: depois de inventariados e relacionados os
conceitos dos sumários dos livros-base do Curso de Tecnologia em Sistemas para Internet,
construiu-se uma seção da ontologia, a categoria “linguagens de programação”, que constituiu
a base do banco de dados para a criação do catálogo.
O segundo resultado obtido foi o armazenamento da ontologia em um software de
banco de dados: a ontologia, armazenada em um banco de dados orientado a grafos, otimiza
tanto a armazenagem quanto a consulta dos dados. De fato, a ontologia, ainda que de maneira
modesta, pode tomar grandes proporções, e um banco de dados NoSQL, no caso o Neo4j,
usado neste trabalho, tem a capacidade de escalabilidade que a ontologia demandar, pois,
como já citado, esse tipo banco foi concebido para armazenar grandes quantidades de dados.
O terceiro resultado obtido foi o catálogo: no catálogo desenvolvido, foi possível fazer
consultas dos livros e dos conceitos da ontologia que estava armazenada no banco. Dessa
forma, constatou-se que a ontologia armazenada auxiliará os bibliotecários a definir o assunto
de uma obra por meio de consultas no banco e também dará possibilidade de consulta do
acervo da biblioteca a partir de conceitos desejados.
70
Capítulo

71

5 Conclusões

Ao atingir o objetivo proposto, esta pesquisa contribuiu para que a ontologia


implementada em banco de dados viabilizasse a criação e funcionamento de um catálogo
online para a biblioteca, que será de grande serventia para o trabalho dos bibliotecários para
que haja “compartilhamento” e reuso do conhecimento na área de Sistemas para Internet,
especificamente, a linguagem de programação (seção já implementada).
Este trabalho possibilita que novos estudos e melhorias sejam feitas no catálogo, tanto
na parte de buscas (filtros) como na de visualização. Um exemplo seria mostrar os resultados
da busca em forma de grafo. Isso melhoraria a usabilidade, pois as informações poderiam ser
assimiladas com mais agilidade, em uma interface amigável. Também abre a possibilidade de
que os sumários possam ser mostrados juntos da obra retornada pelo sistema, para que assim
o usuário consulte por completo toda a sua abordagem.
Além do mais, abrem-se perspectivas para que outras ontologias possam ser
construídas a partir de todas as áreas do conhecimento que o acervo de uma biblioteca possa
abranger, não sendo assim necessário que o bibliotecário encontre dificuldades em recuperar
informações de áreas de conhecimento sobre as quais não tenha domínio.
Diante de tudo isso, esta pesquisa buscou alternativas que auxiliassem os
bibliotecários e, consequentemente, os alunos usuários da biblioteca. Ainda que não seja algo
tão expressivo no momento, no futuro poderá tornar-se um mecanismo de grande valia.
72

Referências
ALMEIDA, M. B. Roteiro para construção de uma ontologia bibliográfica através de
ferramenta automatizada. Belo Horizonte. 2003. v. 8, n.2, p. 164-179, jul/.dez 2003.

AMARAL, Sueli Angélica do. Serviços bibliotecários e desenvolvimento social: um desafio


profissional. Ciência da Informação, Brasília, v. 24, n. 2, p. 221-227, 1995.

ANTHONY L. AntConc: A freeware corpus analysis tool. Disponível em


<http://www.antlab.sci.waseda.ac.jp/software.html>. Acesso em: 11 Dez. 2012.

BARMPIS K; KOLOVOS D. S. Comparative Analysis of Data Persistence Technologies


for Large-Scale Models. Austria. 2012. Disponível em: <
http://lscits.cs.bris.ac.uk/models12.pdf>. Acesso: 22. Maio. 2013.

BREITMAN, K. Web Semântica: a internet do futuro. Rio de Janeiro. LTC. 2005.

CHANG, F; DEAN, J; GHEMAWAT, S; HSIEH, W.; WALLACH, D; BURROWS M;


CHANDRA, T; FIKES, A; GRUBER, R. (2006). Bigtable: A Distributed Storage System for
Structured Data. In Proceedings of the 7th USENIX Symposium on Operating Systems
Designand Implementation (OSDI’06), volume 26, pages 1–26.

CHANDRASEKARAN, B.; JOSEPHSON, R.; BENJANMINS, V. What are ontologies, and


why do we need them? IEEE Intelligent Systems. V. 14, n. 1, p. 20-25, Jan. 1999.

CHAUMIER, J. Indexação: conceito, etapas e instrumentos. Trad. José Augusto Chaves


Guimarães. Revista Brasileira de Biblioteconomia e Documentação. São Paulo, v.21, n.1/2,
p.63-79, jan./jun. 1988.

CORMEN, T. H.; LEISERSON C E. RIVESTR L. & STEIN C. Algorítimos: Teoria e


Prática 2ª. Rio de Janeiro. Campus. 2002.

DASGUPTA S., PAPADIMITRIOU C., VAZIRANI U. Algorítimos. São Paulo.


McGrawHill. 2009.

DEITEL P; DEITEL H. Java: como programar.São Paulo. Pearson. 2010.

DIANA M. de; GEROSA M. A; NOSQL na Web 2.0: Um Estudo Comparativo de Bancos


Não-Relacionais para Armazenamento de Dados na Web 2.0. IX Workshop de Teses e
Dissertações em Banco de Dados. São Paulo. 2010.

DIAS, E. W. Análise de assunto: percepção do usuário quanto ao conteúdo de documentos.


Perspectivas em Ciência da Informação, Belo Horizonte, v.9, n.2, p.146-57, jul./dez.
2004. Disponível em:
< http://portaldeperiodicos.eci.ufmg.br/index.php/pci/article/viewFile/356/165>. Acesso em:
10. Jan. 2012.

DUBOIS, J. et ali. (trad) Dicionário de linguística. São Paulo: Cultrix, 1973.


73

FIELDING R. T. Architectural Styles and the Design of Network-based Software


Archtictures. Tese (Doutorado). University of California, Irvaine. 2000. Disponível em:
<http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm>. Acesso: 04. Jun. 2013.

FIORIN, J. L. (org.) Introdução à linguística. II. Princípios de análise. São Paulo: Contexto,
2007.

FIÚZA, M. M. O ensino da “Catalogação de assunto”. Revista da Escola de


Biblioteconomia da UFMG. Belo Horizonte, v.14, n.2, p.257-269, set. 1985.

FUJITA, M. S. L.O contexto da indexação para a catalogação de livros: uma introdução. In:
FUJITA M. S. L (org.) Indexação de livros: a percepção de catalogadores e usuários de
bibliotecas universitárias. São Paulo: Cultura Acadêmica, 2009. p. 11-16.Disponível em:
<http://www.culturaacademica.com.br/catalogo-detalhe.asp?ctl_id=56>. Acesso em: 24 jan.
2013.

FUJITA M. S. L.; RUBI M. P.; BOCCATO V. R. C. As diferentes perspectivas teóricas e


metodológicas sobre indexação e catalogação de assuntos. In: FUJITA M. S. L (org.)
Indexação de livros: a percepção de catalogadores e usuários de bibliotecas universitárias.
São Paulo: Cultura Acadêmica, 2009. p. 19-39.Disponível em:
<http://www.culturaacademica.com.br/catalogo-detalhe.asp?ctl_id=56>. Acesso em: 24 jan.
2013.

GONÇALVES, M. C. A percepção de usuários sobre a indexação na análise de assuntos para


catalogação. In: FUJITA, M. S. L. (org.). Indexação de livros: a percepção de catalogadores
e usuários de bibliotecas universitárias. . São Paulo: Cultura Acadêmica, 2009. p. 95-114.
Disponível em: <http://www.culturaacademica.com.br/catalogo-detalhe.asp?ctl_id=56>.
Acesso em: 24 jan. 2013.

GUSMÃO, A. O. M; SANTOS O. N; SILVA K. F; DEUS T. L. Avaliação do catálogo em


linha da biblioteca do CESUR. Revista ACB: Biblioteconomia em Santa Catarina,
Florianópolis, v.14, n.1, p.279-292, jan./jun. 2009. Disponível em:
<http://revista.acbsc.org.br/index.php/racb/article/viewArticle/654>. Acesso: 24 jan. 2013.

HAWKING, S. Nosso futuro: jornada nas estrelas? – como a vida biológica e eletrônica
continuarão evoluindo em complexidade a um ritmo sempre crescente. In: HAWKING, S. O
universo numa casca de noz. São Paulo: Mandarin, 2001.

HENRIQUES C. C. Lêxico e semântico: estudos produtivos sobre a palavra e significação.


Rio de Janeiro. Elsevier. 2011.

HOLZSCHUER Florian; PEINL René. Performance of Graph Query Languages:


Comparison of Cypher, Gremlin and Native Access in Neo4j. Italy. 2013. Disponível em: <
www.edbt.org/Proceedings/2013-Genova/papers/workshops/a29-holzschuher.pdf>. Acesso:
20. Maio. 2013.

HUNGER M. Good Relationships: The Spring Data Neo4j guide book version 2.0. Neo
Technology. 2011. Disponível para download em: < http://static.springsource.org/spring-
74

data/data-graph/snapshot-site/reference/pdf/spring-data-neo4j-reference.pdf>. Acesso: 02.


Fev. 2013.

IVAN, L. M. R. Estruturas de dados. 2003. Disponível em:


<http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node10.html>. Acesso 22.
Jan. 2013.

JORGE C. A de Figueredo 2003-05-18. Teoria dos Grafos. 2003. p.1. Disponível em:
www.google.com.br/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&docid=S2OpphAXm
KRrdM&tbnid=zJLgiS-
SHqwcJM:&ved=0CAEQjxw&url=http%3A%2F%2Fwww.dsc.ufcg.edu.br%2F~abrantes%2
FCursosAnteriores%2FTG031%2FRepresentacao%2FRepresentacao.html&ei=Il4MUdnpIZO
o8QSavIHoAQ&bvm=bv.41867550,d.dmQ&psig=AFQjCNGuL6QXIFbLVoZsXQuorgkbkA
IhnA&ust=1359851263643015. Acesso 01. Fev. 2013.

KOHN, S. Hackers e Crackers: as diferenças. 2011. Disponível em:


<http://olhardigital.uol.com.br/produtos/digital_news/noticias/hackers_e_crackers_saiba_as_d
iferencas>. Acesso 21. Jan. 2013.

LAKOFF, G.; JOHNSON, M. Metaphors we live by. University of Chicago Press,


1980/2003 LAKOFF, G. Women, fire, and dangerous things: what categories reveal about the
mind University of Chicago Press, 1987.

LAKOFF, G.; TURNER, M. More than cool reason: a field guide to poetic metaphor.
University of Chicago Press, 1989.

LITTO, Frederico M. Difusão científica e desafios tecnológicos: mitos e realidades.


Comunicação e Sociedade, n.13, jun. 1985, p.131-6.

MACULAN, B. C. Guia de software para tratamento de informação. 2010. Disponível em


< http://glima.eci.ufmg.br/guiasoftware/pages/vocabulE1rio-controlado.php>. Acesso em 01.
Fev. 2013.

MATEUS, M. H. M.; XAVIER, M. F. Dicionário de termos linguísticos. Lisboa. Edições


Cosmos, 1992.

MCGUINNES. D. L; Ontologies come of age. Universidade Stanford. 2003. Disponível em:


<http://www-ksl.stanford.edu/people/dlm/papers/ontologies-come-of-age-mit-press-%28with-
citation%29.htm>. Acesso: 04. Jun. 2013.

MICHAELIS Dicionário. 2009. Disponível em


<http://michaelis.uol.com.br/moderno/portugues/index.php?lingua=portugues-
portugues&palavra=gato>. Acesso em: 10/01/2013.

MORAIS, E. A. M.; AMBRÓSIO, A. P. L. Ontologias: conceitos, usos, tipos,


metodologias, ferramentas e linguagens. Relatório Técnico, Dezembro, 2007. Disponível
em < http://www.inf.ufg.br/sites/default/files/uploads/relatorios-tecnicos/RT-INF_001-
07.pdf>. Acesso em 01 Fev. 2013.
75

NEO4J. The Neo4j Manual v2.0.0-M01. Neo Technology. 2013. Disponível para download
em: < http://info.neotechnology.com/download-pdf.html?document=milestone>. Acesso: 15.
Abr. 2013.

NEOTECHNOLOGY. Introdução aos bancos de dados NoSQL. 2012. Disponível em: <
http://www.neotechnology.com/2012/10/introducao-aos-bancos-de-dados-nosql/>. Acesso:
21. Maio. 2013.

NETTO P. O. B. Grafos: Teoria, Modelos, Algoritimos. 4ª. São Paulo. E.Blucher, 2006.

NOGUEIRA, S. Dicas de Português. 2007. Disponível em:


<http://g1.globo.com/platb/portugues/2007/05/>. Acesso 22/01/2013.

NOSQL. List of NoSQL Databases. 2010. Disponível em: <http://nosql-database.org/>.


Acesso 21. Maio. 2013.

ORACLE. Oracle NoSql Database. 2012. Disponível em:


<http://www.oracle.com/technetwork/products/nosqldb/learnmore/nosql-wp-
1436762.pdf?ssSourceSiteId=ocomen>. Acesso: 21. Maio. 2013.

OTHERO, G. A.; MENUZZI S. M. Linguística Computacional: teoria e prática. São Paulo.


Parábola, 2005.

PEREA, A. A. Catálogo da biblioteca: o objeto orientado ao usuário. Revista Brasileira de


Biblioteconomia e Documentação, São Paulo, v. 16, n. 2, p.20-36, jan./jun. 2010. Disponível
em: <http://rbbd.febab.org.br/rbbd/article/view/133/166>. Acesso em: 24 jan. 2013.

PERERA S. Considerações sobre o banco de dados Cassandra. 2012. Disponível em: <
http://www.ibm.com/developerworks/br/library/os-apache-cassandra/>. Acesso: 21. Maio.
2013.

PIETROFORTE, A. V. S e LOPES, I. C. Semântica lexical. Em: FIORIN, J. L. (org.)


Introdução à linguística. II. Princípios de análise. São Paulo: Contexto, 2007. p. 111-136.

RAMALHO, R. A. S. Desenvolvimento e utilização de ontologias em bibliotecas digitais:


uma proposta de aplicação. Marília, 2010, 145p. Tese (Doutorado em Ciência da Informação)
– Universidade Estadual Paulista “Júlio de Mesquisa Filho”.

RIEMER N. Introducing Semantics. New York. Cambridge University Press. 2010.

ROBINSON I; WEBBER J; EIFREM E. Graph Databases. O’Reilly Media. 2013.


Disponível para download em: < http://graphdatabases.com/>.

SÁ, E. J. Semântica: Entre (linhas) entre palavras. Revista Conhecimento Prático Língua
Portuguesa. 2011. Disponível em:
<http://linguaportuguesa.uol.com.br/linguaportuguesa/gramatica-ortografia/25/artigo185930-
1.asp>. Acesso em: 10. Jan. 2013.

SANDOVAL, A. M. Linguística Computacional. Madrid: Editorial Sintesis, 1996.


76

SANTOS P. P. Metáfora. 2009. Disponível em:


<http://www.infoescola.com/literatura/metafora/>. Acesso: 23. Jan. 2013.

SETZER V. W. Dado, Informação, Conhecimento e Competência. Revista


DataGramaZero. 1999. Disponívem em: <http://www.ime.usp.br/~vwsetzer/datagrama.html>.
Acesso 22. Jan. 2013.

SILBERSCHATZ, A.; KORTH, H. F., Sudarshan, S. Sistema de banco de dados. Rio de


Janeiro. Elsevier, 2006.

SMITH, B.; WELTY, C. Ontology: towards a new synthesis. In: International Conference
on Formal Ontology in Information Systems, Ogunquit, Maine, 2001. Disponível em:
<http://www.cs.vassar.edu/~weltyc/papers/fois-intro.pdf> Acesso: 19. Maio. 2013.

SMULLYAN, RAYMOND M. Lógica em primeira ordem. São Paulo. UNESP. 2009.

SOWA, J. F. (1999). Building, sharing and merging onlologies. Tutorial.


<http://users.bestweb.net/~sowa/ontology/ontoshar.htm >. Acesso: 15. Jan. 2013.

UNISIST. Princípios de indexação. Revista da Escola de Bi-blioteconomia da UFMG. Belo


Horizonte, v.10, n.1, p.83-94, mar. 198.

VIEIRA M. R; FIGUEIREDO J. M; LIBERATTI G; VIEBRANTZ A. F. M. Bancos de


Dados NoSQL: Conceitos, Ferramentas, Linguagens e Estudos de Casos no Contexto
de Big Data. Minicurso. Mato Grosso do Sul, 2012.

WELTY, C. e GUARINO, N. Supporting ontological analysis of taxonomic Relationships.


Data and Knowledge Engineering, vol. 39, 2001, p. 51–74.
77

APÊNDICE A – Ontologia

1. ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES


(holonímia) tem como parte
(definição) É um (hiponímia e hiperonímia) É um
tipo de / está contido em

desempenho de sistemas decomputação 1


sistemas de numeração 1
sistemas de arquivo 2
sistemas operacionais multimídia 2, 22
sistemas com multiplos processadores 2
projetos de sistemas operacionais 2

2. GESTÃO DA SEGURANÇA EM SISTEMAS COMPUTACIONAIS


(holonímia) tem como parte
(definição) É um (hiponímia e hiperonímia) É um
tipo de / está contido em

segurança 48, 39, 42, 60, 61, 44, 57, 22 segurança física 48, 41
protocolos de segurança 48
segurança da informação 41
segurança de redes 42, 60, 61
segurança da comunicação 60
segurança sem fio 60
segurança na web 61, 44
segurança de banco de dados 44
78

3. REDES E COMUNICAÇÃO DE DADOS


(holonímia) tem como parte
(definição) É um (hiponímia e hiperonímia) É um
tipo de / está contido em

Internet 48, 42, 60, 44, 7 transferência de dados 42, 48


redes 48, 33, 42, 60, 61, 43, 44 acesso e representação de dados 48
redes de acesso múltiplo 48 gerenciamento de dados 48
redes de comutação 48, 42, 61 data mining 48
redes de valor 38 transmissão de dados 27, 61
redes sociais 51 acesso e representação de dados 48
redes TCP 27 gerenciamento de dados 48
rede de computadores 10, 42, 60 data mining 48
redes de comunicação por circuitos 61 comunicação dos dados 31, 61
redes de datagramas 42 criptografia de dados (31)
redes locais Lans 42, 60, 61 dados distribuídos 61
redes sem fio 42, 60 processamento de dados distribuídos 61
redes móveis 42 enlace de dados 61
redes de celulares 42, 61 sistemas autônomos 48
redes de multimídia 42 Internet 48, 42, 60, 44, 7
redes virtuais privadas 42 protocolos 48, 42, 60
redes metropolitanas 60 internet control message protocol 48
redes domésticas 60 world wide web 27
inter-redes 60 intranet 23
redes remotas 61 rede de computadores 42
redes Bayesianas 44 ISP 42
backbones 42
roteamento na internet 42
camada de enlace da internet 60
camada de rede da internet 60
multidifusão na internet 60
protocolos de transporte da internet 60
rádios da iternet 60
79

aplicações distribuídas 61
domínios na internet 61
aplicativos internet 44
ICMP 48
Internet group management protocol 48
IGMP 48
Internet route acess protocol 48, 61
protocolo Farrel 48
serviços de busca na internet 3
comunicação multimídia na internet 27
arquitetura internet 27, 61
modelos de comunicação da internet 27
IP 48, 42, 60, 61
comutação 48
roteamento 48
IPV6 48
versão seis 48
transporte sobre IP 48
engenharia de tráfego IP 48
segurança IP 48
encapsulamento IP 48
IP móvel 48, 42
ATM 48
protocolo da internet 48
TCP/IP 48, 60, 61
datagrama 48
OSI 61
camada TCP/IP 60
protocolo 48, 42
protocolo de roteamento multicast 48
protocolo de transporte 48, 60
protocolo de sinalização 48
protocolo DNS 48
80

protocolo dial-up 48
protocolo UDP 27
protocolo TCP 27, 60
protocolo SCTP 27
protocolo MIDI 27
protocolo da internet IP 27
protocolo de mensagens de controle
dainternet (ICMP) 27
protocolo de acesso múltiplo da
EthernetCSMA/CD 27
protocolo de ponto a ponto PPP 27
protocolo de tempo real RTP 27
protocolo de controle RTP (RTCP) 27
protocolo SNMP 27
protocolo simplex 60
protocolo IP 60
arquitetura de protocolo de LAN 61
protocolo de trasnferência de
hipertexto(HTTP) 44
segurança em redes 42, 60
sub-redes 48, 60
81

4. BANCO DE DADOS
(holonímia) tem como parte
(definição) É um (hiponímia e hiperonímia) É um
tipo de / está contido em

banco de dados de clientes 38 dados 61, 36, 2, 48, 38, 53, 31, 43, 36, 44,
database marketing 38 37, 5, 6, 17, 19, 28
banco de dados de voos 28 banco de dados 2, 48, 38, 53, 31, 43, 36, 44,
37
tipos de dados 28, 36, 44, 37
data mining 48
comunicação dos dados 31, 61
transmissão de dados 27, 61
criptografia de dados 31
mineração de dados 31, 36, 44
persistência de dados 54
modelo de dados 43
armazenamento de dados 44, 36
gerenciamento de banco de dados 31
banco de dados relacional 43, 36
banco de dados multidimensional 44
sistemas paralelos 12, 36
sistemas distribuídos 12, 36, 39, 31
sistemas centralizados 12
sistemas de banco de dados 31, 43, 36, 44
sistemas relacionais 31
sistemas baseado em lógica 31
sistemas paralelos 12, 36
sistemas distribuídos 12, 36, 56
sistemas de gerenciamento em banco de
dados 37
82

5. SOFTWARES (não foi catalogado)


(holonímia) tem como parte
(definição) É um (hiponímia e hiperonímia) É um
tipo de / está contido em

6. TEORIA DA COMPUTAÇÃO (não foi catalogado)


(holonímia) tem como parte
(definição) É um (hiponímia e hiperonímia) É um
tipo de / está contido em

7. LINGUAGEM DE PROGRAMAÇÃO
(holonímia) tem como parte

(definição) É um (hiponímia e hiperonímia) É um


tipo de / está contido em

SQL 52, 31, 43, 36 linguagem estruturada 6, 12


C 6, 21, 19, 4 SQL embutida 31, 36, 44
C++ 6, 19, 28, 4 SQL dinâmica 31, 36, 44
Java 27, 4, 17, 7 linguagens de banco de dados 43, 36
PHP 52 programação 6, 21
Assembly 6, 1 transação em SQL 44
Pascal 4 linguagem 27, 4, 17, 6, 21
orientado a objetos 39, 27, 17, 37
83

8. SISTEMAS OPERACIONAIS
(holonímia) tem como parte

(definição) É um (hiponímia e hiperonímia) É um


tipo de / está contido em

sistemas operacionais em tempo real 39 sistemas operacionais em tempo real 39


sistemas operacionais multimídia 2, 22 projetos de sistemas operacionais 2
sistemas operacionais multimídia 2, 22
sistemas operacionais modernos 22

9. INTERAÇÃO USUÁRIO-COMPUTADOR (não catalogado)


(holonímia) tem como parte

(definição) É um (hiponímia e hiperonímia) É um


tipo de / está contido em

10. SISTEMAS MULTIMÍDIA


(holonímia) tem como parte

(definição) É um (hiponímia e hiperonímia) É um


tipo de / está contido em

sistemas gráficos 33 transmissão de dados 27, 61


sistemas MIDI 33 sistemas gráficos 33
sistemas analógicos de vídeo 33 sistemas MIDI 33
sistemas de televisão 33 sistemas analógicos de vídeo 33
sistemas de gravação e repr. de vídeo 33 sistemas de televisão 33
sistemas digitais de vídeo 33 sistemas de gravação e repr. de vídeo 33
sistemas digitais de vídeo 33
84

11. WORLD WIDE WEB


(holonímia) tem como parte

(definição) É um (hiponímia e hiperonímia) É um


tipo de / está contido em

web 19, 9, 10, 31 internet 19, 10


Worl Wide Web 10, 31, 60, 43, 7 servidor web 11, 42
aplicativos web JavaServer 17
serviços web 17, 57
web sem fio 17
segurança na web 60
interface web 36
mecanismos de busca 36

12. LINGUÍSTICA
(holonímia) tem como parte

(definição) É um (hiponímia e hiperonímia) É um


tipo de / está contido em

linguagem científica 21
documentação dos dados 16
representação dos dados 16
defeitos de linguagem 12
sistemas de chamadas 12
sistemas paralelos 12, 36
sistemas distribuidos 12, 36, 56
sistemas centralizados 12
85

13. MARKETING
(holonímia) tem como parte

(definição) É um (hiponímia e hiperonímia) É um


tipo de / está contido em

administração de marketing 38
marketing heloístico 38
marketing de segmento 38
marketing de nicho 38
sistemas informação de venda 38
marketing local 38
marketing e-commerce 38
comunicação de marketing 38
relações públicas de marketing 38
marketing de catálogo 38
marketing de resposta 38
marketing interativo 38
sistemas informação de venda 38
sistemas inteligência de marketing 38
compra e venda de sistemas 38
sistemas verticais de marketing 38
sistemas horizontais de marketing 38
sistemas logísticos integrados 38
pesquisa de marketing 38
database marketing 38
estratégias de marketing 38
86

14. ADMINISTRAÇÃO
(holonímia) tem como parte

(definição) É um (hiponímia e hiperonímia) É um


tipo de / está contido em

administração 38, 49, 25, 23, 3, 36, 46 sistema de informação 49


administração de marketing 38
administração de projetos 49
administração prática do Linux 23
administração florestal 3
administração de memória 43
administração de banco de dados 36
administração de cache 46

15. ENGENHARIA DE SOFTWARE


(holonímia) tem como parte

(definição) É um (hiponímia e hiperonímia) É um


tipo de / está contido em

gerenciamento de sistemas 39
sistemas sociotecnicos 39
sistemas complexos 39
engenharia de sistemas 39
aquisição de sistemas 39
desenvolvimento de sistemas 39
arquitetura de sistemas 39
sistemas distribuídos 12, 36, 39, 31
sistemas embutidos 39
sistemas operacionais em tempo real 39
construção de sistemas 39, 15
87

UML 53, 17, 36, 45, 18, 46


linguagem de modelagem unificada 44
Unified Modeling Language 36
RUP 53
diagramas 46
diagrama de interação 46, 18
projeto de classe 46, 18
diagrama de atividade 46, 18
diagrama de implantação e componentes 46,
18
diagrama de casos de uso 46, 18
diagramas de máquina de estado 46, 18
diagramas de sequência 46, 18
diagramas de pacotes 46, 18
diagrama de interação 46, 18
ferramentas UML 46
software 6, 39, 28, 53, 23, 45
desenvolvimento de software 6, 53, 45
engenharia de software 6
engenharia de software 39
processos de softwares 39
teste de software 39
manutenção de software 39
modelagem de sofware 53
software livre 23
arquitetura de software 45
88

16. DISPOSITIVOS MÓVEIS


(holonímia) tem como parte
(definição) É um (hiponímia e hiperonímia) É um
tipo de / está contido em

sistemas distribuidos 12, 36, 56


programação para android 54

17. PROGRAMAÇÃO
(holonímia) tem como parte
(definição) É um (hiponímia e hiperonímia) É um
tipo de / está contido em

programação linear geométrica 3


programação 3, 51, 6, 19, 39, 28, 4, 10, 17, 5, programação de jogos isométricos 51
42, 43, 46, 7 programação windows 95 – 6
programação em C 19
programação orientada a objetos 19, 17
programação confiável 39
programação de projeto 39
programação em Java 28, 7
programação dinâmica 28, 33
linguagens de programação 28
programação de computadores 4
programação modularizada 10
programação sequencial 10
programação para android 54
programação shell scripting 23
programação estruturada 5
linguagens de programação persistentes 43
programação em Pearl 7
89

Apêndice B – Maneiras de Conexão ao banco Neo4j

Neo4j com objetos de acesso nativo em banco embarcado e Server

Os objetos nativos Neo4j são uma maneira de se trabalhar com Neo4j. Não é
necessário utilizar uma linguagem query. Dessa forma, pode-se trabalhar diretamente com a
linguagem Java para criar os nós e relacionamentos30.

//Cria um banco de dados embarcado


graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(
“caminho_banco” );
registerShutdownHook( graphDb );

//Cria os nós e atributos


firstNode = graphDb.createNode();
firstNode.setProperty( "message", "Hello, " );
secondNode = graphDb.createNode();
secondNode.setProperty( "message", "World!" );

//Cria o relacionamento entre o nó 1 e 2 e atribui um nome ao


relacionamento
relationship = firstNode.createRelationshipTo( secondNode,
RelTypes.KNOWS );
relationship.setProperty( "message", "brave Neo4j " );

Com a API Rest para conectar-se direto ao banco Server sem linguagens query
trabalhando com HTTP e JSON:

//Verifica a conexão com o banco


WebResource resource
=Client.create().resource(http://localhost:7474/db/data );
ClientResponse response = resource.get( ClientResponse.class);

30
Códigos retirados do manual Neo4j.
90

System.out.println( String.format( "GET on [%s], status code


[%d]",
SERVER_ROOT_URI, response.getStatus() ) );
response.close();

//Retorna a conexão com o banco


final URI location = response.getLocation();
System.out.println( String.format(
"POST to [%s], status code [%d], location header [%s]",
nodeEntryPointUri, response.getStatus(), location.toString());
response.close();
return location;

//cria os nós
URI firstNode = createNode();
addProperty( firstNode, "name", "Joe Strummer" );
URI secondNode = createNode();
addProperty( secondNode, "band", "The Clash" );

Neo4j com a linguagem query Cypher.

Para trabalhar com a linguagem Cypher basta escolher o tipo de banco31.

//Cria um banco de dados embarcado


db = new GraphDatabaseFactory().newEmbeddedDatabase(
“caminho_banco” );

//Cria uma engine para executar a query em Cypher dentro do


Java
ExecutionEngine engine = new ExecutionEngine( db );

31
Códigos retirados do repositório colaborativo de software <https://github.com/neo4j/neo4j> e também do
desenvolvimento da aplicação.
91

//Executa a query Cypher criando um nó com valores e passando


para uma String result
String resultengine.execute ("CREATE n VALUES {name :
'Andres', title : 'Developer'}").toString();

Ou pode-se criar um nó com um Label.

//Cria um nó com um Label do tipo Person


CREATE n :Person VALUES {name : 'Andres', title :
'Developer'};

//Conecta no banco Server


RestAPI bd = new
RestAPIFacade("http://localhost:7474/db/data");

//Cria uma engine para executar a query Cypher no banco


Server
RestCypherQueryEngine engine = new
RestCypherQueryEngine(ConexaoBanco.getConnection());

//passa como parâmetro o conceito a ser buscado


params.put( "conceito", "(?i)" + conceito);

//Executa a query recebendo o valor em um Map.


final QueryResult<Map<String,Object>> result =
engine.query("START n = node(*)"
+ "MATCH (n)-[r]->(x)"
+ "WHERE"
+ " has(n.nome) and n.nome=~{conceito} or"
+ " has(n.tipo) and n.tipo=~{conceito}"
+ "return n, type(r), x", params);
92

Apêndice C – Script Banco de dados

***************************************
* Script Criação Livros em relação ao conceito *
***************************************

********
* SQL *
********
52 - SOARES, Bruno Augusto Lobo. Aprendendo a linguagem PHP. São Paulo: Ciência
Moderna, 2007.
CREATE n:Livro VALUES {autor: 'SOARES Bruno Augusto Lobo', titulo:'Aprendendo a
linguagem PHP', edicao:'1ª', cidade:'Sao Paulo', editora:'Ciência Moderna', ano: '2007',
p:'182'};

31 - DATE, C. J. Introdução a sistemas de bancos de dados. Rio de Janeiro: Elsevier:


Campus, 2003.
CREATE n:Livro VALUES {autor: 'DANTE C. J', titulo: 'Introdução a sistemas de banco de
dados', edicao: '1ª', cidade: 'Rio de Janeiro', editora: 'Elsevier: Campus', ano:'2003', p: '851'};

43 - SILBERSCHARTZ, Abraham; KORTH, Henry F.; SUDARSHAN, S. Sistema de banco


de dados. 3.ed. São Paulo : Pearson Makron Books , 1999.
CREATE n:Livro VALUES {autor: 'SILBERSCHARTZ. Abraham/ KORTH. Henry F./
SUDARSHAN. S', titulo: 'Sistemas de banco de dados', edicao: '3ª', cidade: 'São Paulo',
editora: 'Pearson Makron Books', ano:'1999', p: '756'};

37 - DAMAS, Luis. SQL: structured query language. 6.ed. Rio de Janeiro: LTC, 2007.
CREATE n:Livro VALUES {autor: 'DAMAS Luis', titulo: 'SQL: structure query language',
edicao: '6ª', cidade: 'Rio de Janeiro', editora: 'LTC', ano:'2007', p: '381'};

*****
*C*
*****
6 - SCHILDT, Herbert. C: completo e total. 3.ed. Sao Paulo: Pearson Makron Books, 1997.
CREATE n:Livro VALUES {autor: 'SCHILDT. Herbert', titulo: 'C: Completo e total', edicao:
'3.ed', cidade: 'Sao Paulo', editora: 'Pearon Makron Books', ano:'1997', p: '811'};

21 - KING, K. N. C: programing a modern aproach. 2.ed. New York: W.W. Norton &
Company, 2008.
CREATE n:Livro VALUES {autor: 'King. K. N', titulo: 'C: programing a modern aproach',
edicao: '2.ed', cidade: 'New York', editora: 'Norton & Company', ano:'2008', p: '832'};

19 - DEITEL, Harvey M.; DEITEL, Paul J. C++: como programar. São Paulo: Pearson
Prentice Hall, 2006.
CREATE n:Livro VALUES {autor: 'DEITEL. Harvey M./ DEITEL .Paul J. ', titulo: 'C++:
como programar', edicao: '1.ed', cidade: 'Sao Paulo', editora: 'Pearson Prentice Hall',
ano:'2006', p: '1152'};
93

4 - ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Veneruchi de.


Fundamentos da programação de computadores: algoritmos, Pascal, C/C++ e Java. 2.ed. São
Paulo: Pearson
CREATE n:Livro VALUES {autor: 'ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene
Aparecida Veneruchi de', titulo: 'Fundamentos da programação de computadores: algoritmos,
Pascal, C/C++ e Java', edicao: '2.ed', cidade: 'Sao Paulo', editora: 'Pearson Prentice Hall',
ano:'2010', p: '569'};

*******
* C++ *
*******

6 - SCHILDT, Herbert. C: completo e total. 3.ed. Sao Paulo: Pearson Makron Books, 1997.
\\Já inserido em "C". Apenas foi feito a relação entre o conceito C++ e o livro.//

19 - DEITEL, Harvey M.; DEITEL, Paul J. C++: como programar. São Paulo: Pearson
Prentice Hall, 2006.
\\Já inserido em "C". Apenas foi feito a relação entre o conceito C++ e o livro.//

28 -TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe J. Estrutura


de dados usando C. São Paulo: Pearson Makron Books, 1995.
CREATE n:Livro VALUES {autor: 'TENENBAUM, Aaron M.; LANGSAM, Yedidyah;
AUGENSTEIN, Moshe J.', titulo: 'Estrutura de dados usando C', edicao: '1.ed', cidade: 'Sao
Paulo', editora: 'Pearson Makron Books', ano:'1995', p: '865'};

4 - ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Veneruchi de.


Fundamentos da programação de computadores: algoritmos, Pascal, C/C++ e Java. 2.ed. São
Paulo: Pearson
\\Já inserido em "C". Apenas foi feito a relação entre o conceito C++ e o livro.//

*******
* Java *
*******
27 - GOODRICH, Michael T; TAMASSIA, Roberto. Estruturas de dados e algoritmos em
Java. 4.ed. Porto Alegre: Bookman, 2007.
CREATE n:Livro VALUES {autor: 'GOODRICH, Michael T; TAMASSIA, Roberto', titulo:
'Estruturas de dados e algoritmos em Java', edicao: '4.ed', cidade: 'Porto Alegre', editora:
'Bookman', ano:'2007', p: '597'};

4 - ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Veneruchi de.


Fundamentos da programação de computadores: algoritmos, Pascal, C/C++ e Java. 2.ed. São
Paulo: Pearson Prentice Hall, 2010 .
\\Já inserido em "C". Apenas foi feito a relação entre o conceito Java e o livro.//

17 - DEITEL, Paul; DEITEL, Harvey. Java: como programar. 8.ed. São Paulo: Pearson
Prentice Hall, 2010.
CREATE n:Livro VALUES {autor: 'DEITEL, Paul; DEITEL, Harvey', titulo: 'Java: como
programar', edicao: '8.ed', cidade: 'Sao Paulo', editora: 'Pearson Prentice Hall', ano:'2010', p:
'1114'};
94

7 - DEITEL, H. M. et. al. XML: como programar. Porto Alegre: Bookman, 2003.
CREATE n:Livro VALUES {autor: 'DEITEL, H. M. et. al', titulo: 'XML: como programar',
edicao: '1.ed', cidade: 'Porto Alegre', editora: 'Bookman', ano:'2003', p: '972'};

*******
* PHP *
*******
52 - SOARES, Bruno Augusto Lobo. Aprendendo a linguagem PHP. São Paulo: Ciência
Moderna, 2007.
\\Já inserido em "SQL". Apenas foi feito a relação entre o conceito PHP e o livro.//

***********
* Assembly *
***********
6 - SCHILDT, Herbert. C: completo e total. 3.ed. Sao Paulo: Pearson Makron Books, 1997.
\\Já inserido em "C". Apenas foi feito a relação entre o conceito Assembly e o livro.//

1 - MONTEIRO, Mário Antonio. Introdução à organização de computadores. 5.ed. Rio de


Janeiro: LTC, 2007.
CREATE n:Livro VALUES {autor: 'MONTEIRO, Mário Antonio', titulo: 'Introdução à
organização de computadores', edicao: '5.ed', cidade: 'Rio de Janeiro', editora: 'LTC',
ano:'2007', p: '720'};

********
* Pascal *
********
4 - ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Veneruchi de.
Fundamentos da programação de computadores: algoritmos, Pascal, C/C++ e Java. 2.ed. São
Paulo: Pearson
\\Já inserido em "C". Apenas foi feito a relação entre o conceito Pascal e o livro.//

*******************
* Orientado a objetos *
*******************
17-DEITEL, Paul; DEITEL, Harvey. Java: como programar. 8.ed. São Paulo: Pearson
Prentice Hall, 2010.
\\já inserido em "JAva". Apenas foi feito a relação entro o conceito Orientado a objetos e o
livro

39 - SOMMERVILLE, Ian. Engenharia de software. 9.ed. São Paulo: Pearson Prentice Hall,
2011.
CREATE n:Livro VALUES {autor: 'SOMMERVILLE, Ian', titulo: 'Engenharia de software',
edicao: '9.ed', cidade: 'São Paulo', editora: 'Pearson Prentice Hall', ano:'2011', p: '567'};

27 - GOODRICH, Michael T; TAMASSIA, Roberto. Estruturas de dados e algoritmos em


Java. 4.ed. Porto Alegre: Bookman, 2007.
\\já inserido em "JAva". Apenas foi feito a relação entro o conceito Orientado a objetos e o
livro
95

37 - DAMAS, Luis. SQL: structured query language. 6.ed. Rio de Janeiro: LTC, 2007.
\\já inserido em "SQL". Apenas foi feito a relação entro o conceito Orientado a objetos e o
livro

***********************
* Script criação Categoria *
***********************

CREATE n:Categoria VALUES {tipo: 'Linguagem de programacao'};

**********************
* Script criação Conceito *
**********************

CREATE n:Conceito VALUES {nome: 'SQL'};

CREATE n:Conceito VALUES {nome: 'C'};

CREATE n:Conceito VALUES {nome: 'C++'};

CREATE n:Conceito VALUES {nome: 'Java'};

CREATE n:Conceito VALUES {nome: 'PHP'};

CREATE n:Conceito VALUES {nome: 'Assembly'};

CREATE n:Conceito VALUES {nome: 'Pascal'};

CREATE n:Conceito VALUES {nome: 'Orientado a Objetos'};

***********************************************
* Script criação Relacionamento Conceito - > Categoria *
***********************************************

(SQL -> Linguagem de programação)

MATCH a:Conceito, b:Categoria


WHERE a.nome = 'SQL' and b.tipo='Linguagem de programacao'
CREATE a-[r:e_uma]->b
return r;

(C -> Linguagem de programação)

MATCH a:Conceito, b:Categoria


WHERE a.nome = 'C' and b.tipo='Linguagem de programacao'
CREATE a-[r:e_uma]->b
return r;

(C++ -> Linguagem de programação)


96

MATCH a:Conceito, b:Categoria


WHERE a.nome = 'C++' and b.tipo='Linguagem de programacao'
CREATE a-[r:e_uma]->b
return r;

(Java -> Linguagem de programação)

MATCH a:Conceito, b:Categoria


WHERE a.nome = 'Java' and b.tipo='Linguagem de programacao'
CREATE a-[r:e_uma]->b
return r;

(PHP -> Linguagem de programação)

MATCH a:Conceito, b:Categoria


WHERE a.nome = 'PHP' and b.tipo='Linguagem de programacao'
CREATE a-[r:e_uma]->b
return r;

(Assembly -> Linguagem de programação)

MATCH a:Conceito, b:Categoria


WHERE a.nome = 'Assembly' and b.tipo='Linguagem de programacao'
CREATE a-[r:e_uma]->b
return r;

(Pascal -> Linguagem de programação)

MATCH a:Conceito, b:Categoria


WHERE a.nome = 'Pascal' and b.tipo='Linguagem de programacao'
CREATE a-[r:e_uma]->b
return r;

(Orientado e Objetos -> Linguagem de programação)

MATCH a:Conceito, b:Categoria


WHERE a.nome = 'Orientado a Objetos' and b.tipo='Linguagem de programacao'
CREATE a-[r:esta_contido]->b
return r;

*******************************************
* Script criação Relacionamento Conceito -> Livro *
*******************************************

(SQL -> Titulo Livro)

MATCH a:Conceito, b:Livro


WHERE a.nome = 'SQL' and b.titulo = 'Aprendendo a linguagem PHP'
CREATE a-[r:esta_contido]->b
return r;
97

MATCH a:Conceito, b:Livro


WHERE a.nome = 'SQL' and b.titulo = 'Introdução a sistemas de banco de dador'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'SQL' and b.titulo = 'Sistemas de banco de dados'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'SQL' and b.titulo = 'SQL: structure query language'
CREATE a-[r:esta_contido]->b
return r;

(C -> Titulo Livro)

MATCH a:Conceito, b:Livro


WHERE a.nome = 'C' and b.titulo = 'C: Completo e total'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'C' and b.titulo = 'C: programing a modern aproach'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'C' and b.titulo = 'C++: como programar'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'C' and b.titulo = 'Fundamentos da programação de computadores:
algoritmos, Pascal, C/C++ e Java'
CREATE a-[r:esta_contido]->b
return r;

( C++ -> Livro )


MATCH a:Conceito, b:Livro
WHERE a.nome = 'C++' and b.titulo = 'C: Completo e total'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'C++' and b.titulo = 'C++: como programar'
CREATE a-[r:esta_contido]->b
return r;
98

MATCH a:Conceito, b:Livro


WHERE a.nome = 'C++' and b.titulo = 'Estrutura de dados usando C'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'C++' and b.titulo = 'Fundamentos da programação de computadores:
algoritmos, Pascal, C/C++ e Java'
CREATE a-[r:esta_contido]->b
return r;

( Java -> Livro)

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Java' and b.titulo = 'Estruturas de dados e algoritmos em Java'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Java' and b.titulo = 'Fundamentos da programação de computadores:
algoritmos, Pascal, C/C++ e Java'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Java' and b.titulo = 'Java: como programar'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Java' and b.titulo = 'XML: como programar'
CREATE a-[r:esta_contido]->b
return r;

( PHP -> Livro )

MATCH a:Conceito, b:Livro


WHERE a.nome = 'PHP' and b.titulo = 'Aprendendo a linguagem PHP'
CREATE a-[r:esta_contido]->b
return r;

( Assembly -> Livro )

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Assembly' and b.titulo = 'C: Completo e total'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


99

WHERE a.nome = 'Assembly' and b.titulo = 'Introdução à organização de computadores'


CREATE a-[r:esta_contido]->b
return r;

( Pascal -> Livro )

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Pascal' and b.titulo = 'Fundamentos da programação de computadores:
algoritmos, Pascal, C/C++ e Java'
CREATE a-[r:esta_contido]->b
return r;

(Orientado a Objetos -> Livro )

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Orientado a Objetos' and b.titulo = 'Java: como programar'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Orientado a Objetos' and b.titulo = 'Engenharia de software'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Orientado a Objetos' and b.titulo = 'Estruturas de dados e algoritmos em
Java'
CREATE a-[r:esta_contido]->b
return r;

MATCH a:Conceito, b:Livro


WHERE a.nome = 'Orientado a Objetos' and b.titulo = 'SQL: structure query language'
CREATE a-[r:esta_contido]->b
return r;

*********************************************
* Script criação Relacionamento Conceito -> Conceito *
*********************************************

MATCH a:Conceito, b:Conceito


WHERE a.nome = 'Java' and b.nome = 'Orientado a Objetos'
CREATE a-[r:e]->b
return r;

MATCH a:Conceito, b:Conceito


WHERE a.nome = 'C++' and b.nome = 'Orientado a Objetos'
CREATE a-[r:e]->b
return r;
100

**********************************************
* Script criação Relacionamento Categoria -> Conceito *
**********************************************

MATCH a:Categoria, b:Conceito


WHERE a.tipo = 'Linguagem de programacao' and b.nome = 'Java'
CREATE a-[r:tem_como_parte]->b
return r;

MATCH a:Categoria, b:Conceito


WHERE a.tipo = 'Linguagem de programacao' and b.nome = 'PHP'
CREATE a-[r:tem_como_parte]->b
return r;

MATCH a:Categoria, b:Conceito


WHERE a.tipo = 'Linguagem de programacao' and b.nome = 'C'
CREATE a-[r:tem_como_parte]->b
return r;

MATCH a:Categoria, b:Conceito


WHERE a.tipo = 'Linguagem de programacao' and b.nome = 'C++'
CREATE a-[r:tem_como_parte]->b
return r;

MATCH a:Categoria, b:Conceito


WHERE a.tipo = 'Linguagem de programacao' and b.nome = 'SQL'
CREATE a-[r:tem_como_parte]->b
return r;

MATCH a:Categoria, b:Conceito


WHERE a.tipo = 'Linguagem de programacao' and b.nome = 'Assembly'
CREATE a-[r:tem_como_parte]->b
return r;

MATCH a:Categoria, b:Conceito


WHERE a.tipo = 'Linguagem de programacao' and b.nome = 'Pascal'
CREATE a-[r:tem_como_parte]->b
return r;

MATCH a:Categoria, b:Conceito


WHERE a.tipo = 'Linguagem de programacao' and b.nome = 'Orientado a Objetos'
CREATE a-[r:tem_como_parte]->b
return r;
101

Apêndice D – Implementação do catálogo em Java 32

Index.jsp

32
Códigos retirados da implementação do catálogo.
102
103
104

Classe BuscarConceito
105
106
107

Classe Livro
108

Classe PercorreConceito

Classe conexão com o banco


109

Classe Servlet

Você também pode gostar