MAC 499 – Trabalho de Formatura - 2002

Autor: Danilo M. Rubio Conde

Orientadora: Renata Wasserman

 

 

Biblioteca Virtual 1

Introdução. 1

A Biblioteca Virtual 2

Web Semântica. 3

Web Atual 3

Introdução à Web Semântica. 3

Desenvolvimento. 3

Ontologias. 3

Agentes. 3

Desenvolvimento do projeto. 3

Implementando a Biblioteca Virtual 3

Pesquisando Web Semântica. 3

Implementando a busca por publicações. 3

As matérias do IME e o projeto. 3

Bibliografia / Referências. 3

Biblioteca Virtual

 

Introdução

 

            A origem deste trabalho está na necessidade dos professores do LIAMF – Laboratório de Lógica, Inteligência Artificial e Métodos Formais – de uma ferramenta que organizasse seus acervos pessoais.

            Os professores costumam compartilhar livros, artigos e outros itens de seus acervos com outros professores e alunos, porém sem um controle formal sobre os empréstimos. Uma das principais conseqüências dessa falta de controle é que, após um certo tempo e alguns empréstimos, já não se sabe mais onde está determinado livro, por exemplo.

            Atualmente, não há nenhuma forma prática de saber quais livros um determinado professor possui, a não ser perguntando diretamente a ele.  Saber os livros que um professor já possui pode ser útil na hora de se comprar novos livros, evitando assim que mais de um professor do grupo tenha o mesmo livro, o que resulta em um melhor aproveitamento de recursos.

            Para resolver esses problemas foi criada a Biblioteca Virtual, uma aplicação com interface Web, tema deste trabalho, que permite aos usuários cadastrados:

·        Cadastrar os itens de seu acervo pessoal;

·        Procurar itens nos acervos dos outros usuários;

·        Pedir itens emprestados de outros usuários;

·        Emprestar itens a outros usuários;

·        Procurar por publicações nos currículos Lattes dos usuários.

            Além da implementação da aplicação, também foi feita uma pesquisa sobre Web Semântica e Ontologias, que serão explorados mais adiante neste documento. A parte que reflete essa pesquisa na aplicação é a procura por publicações nos currículos Lattes. Esses currículos são arquivos no formato XML que contém, além de outras informações, a produção bibliográfica de cada pesquisador cadastrado no Sistema Lattes do CNPq [1].

 

A Biblioteca Virtual

 

            A Biblioteca Virtual foi escrita na linguagem PHP, usando um banco de dados MySQL. Não requer nada além de um navegador web para ser acessado e é compatível com a maioria dos navegadores atuais.

            A aplicação lida com três tipos de usuários: graduandos, pós-graduandos e professores. Os dois primeiros têm acesso aos mesmos recursos, que são:

·        Cadastrar objetos no sistema;

·        Alterar as informações de seus objetos;

·        Remover objetos de seu acervo do sistema;

·        Pesquisar objetos do acervo;

·        Pegar objetos do acervo emprestados;

·        Emprestar objetos do seu acervo a outros usuários;

·        Consultar seu histórico de empréstimos;

·        Pesquisar publicações nos currículos Lattes dos outros usuários.

            Os professores, além dos recursos acima, também podem consultar o histórico dos alunos.


            Os tipos de objetos que podem ser cadastrados são os mesmos tipos de entradas possíveis em BibTeX[a] [2], ou seja: livros, artigos, manuais, teses etc. Os atributos de cada tipo de objeto também são os mesmos do BibTeX. Um outro recurso da aplicação é que as informações dos objetos cadastrados podem ser visualizadas como entradas no formato BibTeX e o cadastro de objetos pode ser feito através de entradas BibTeX.

            O sistema possui um mecanismo de controle de acesso aos objetos que restringe o acesso aos objetos a determinados tipos de usuários. Cada objeto cadastrado possui um atributo chamado disponibilidade. Esse atributo diz quais tipos de usuários - graduandos, pós-graduandos ou professores – têm acesso ao objeto. Por exemplo, se um objeto está disponível apenas para professores e um graduando fizer uma pesquisa pelo título desse objeto, o mesmo não aparecerá nos resultados da busca.

            Exemplo de cadastro:

1) Fazendo a entrada no formato BibTeX:

2) Editando os dados

            Há duas formas de se realizar empréstimos: 1) A pessoa que deseja pegar o objeto emprestado faz a procura pelo objeto no sistema e na página da descrição do objeto tem a opção de pedir o objeto emprestado a seu dono. Ao pedir emprestado, seu dono recebe um email dizendo que seu objeto foi pedido emprestado. Esse email contém um apontador para uma página que realiza formalmente o empréstimo, enviando uma mensagem de confirmação para a pessoa que pediu o objeto. O empréstimo fica registrado no sistema e agora resta apenas realizar o empréstimo “físico” do objeto; 2) A segunda forma trata o caso em que o dono do objeto realiza o empréstimo sem uma solicitação formal da pessoa que o leva emprestado. É útil quando um aluno visita a sala do professor e pega um livro emprestado, por exemplo.

            O cadastro de usuários se dá da seguinte forma: a pessoa que deseja se cadastrar preenche um formulário, acessível a partir da página inicial da aplicação, onde fornece seus dados (nome, email, senha e tipo) e escolhe um professor para o qual será enviada sua solicitação de cadastro no sistema. O professor, então, recebe um email avisando que uma pessoa solicitou a ele cadastro na Biblioteca. A mensagem também contém um apontador para uma página de ativação do usuário, onde basta o professor apertar um botão para que o novo usuário seja ativado. Caso o professor não ative o novo usuário, ele não terá acesso ao sistema.

           

 

Web Semântica

 

Web Atual

 

            Uma característica evidente da web que existe atualmente é que os dados são para consumo exclusivamente humano. A linguagem HTML, base da web atual, fornece às máquinas, tanto do lado servidor quanto cliente, apenas informações relativas à apresentação das páginas. Por exemplo, quando uma tag HTML <strong> é aberta, o navegador web sabe apenas que os dados entre <strong> e </strong> devem ser apresentados em um fonte destacada; não sabe nada a respeito do conteúdo ou significado dos dados, apenas como apresentá-los ao usuário. Quem é responsável por interpretar os dados e tirar seu significado (semântica) são os humanos. Nenhuma máquina sabe, por exemplo, que a página situada em www.linux.ime.usp.br/~danconde é a página pessoal de Danilo Conde, apenas consegue apresentá-la ao usuário com fontes coloridas, imagens etc. Porém qualquer pessoa ao ler o título “Esta é a página pessoal de Danilo Conde” interpreta essa frase e consegue responder a pergunta: “Qual é a página pessoal de Danilo Conde?”.

            Os mecanismos atuais de busca na web atual, como Google [4] e Altavista [5], costumam devolver muitas respostas além das esperadas. A busca consiste basicamente em procurar por padrões de caracteres em meio às páginas, que são tratadas apenas como grandes seqüências de caracteres. Esses mecanismos, porém, evoluíram bastante nos últimos anos, com desenvolvimento de algoritmos bastante eficientes para buscas na web.  Eles conseguem, por exemplo, classificar os resultados e mostrar primeiro os resultados que acham mais relevantes, de acordo com as palavras colocados no campo da busca. Esse método mostra-se bastante eficaz.

            Um bom exemplo para mostrar como as buscas na web atual podem conter algumas armadilhas é pesquisar por um site que contenha músicas da banda de rock Live. Procurando apenas por “live” no Google, são mostradas milhões de páginas, todas contendo a palavra live, que é uma palavra relativamente comum no vocabulário inglês. Refinamos a busca procurando por “live songs”. Agora a busca retorna, novamente, muitas respostas, de todas as páginas que contém referências de músicas ao vivo de qualquer banda. E se procurarmos pelo site oficial da banda ? Vamos tentar “live official web site”. Mais uma vez, não aparece o site da banda. Aparecem todos os sites oficiais de instituições, bandas, etc. que contenham a palavra live em algum lugar.

            O exemplo acima mostra que seria muito útil se as máquinas pudessem responder à perguntas simples, como: “Qual é o site oficial da banda de rock Live?”. Essa foi uma das motivações para a criação da Web Semântica.

 

Introdução à Web Semântica

 

            O principal objetivo da web semântica fazer com que os dados contidos nas páginas sejam compreensíveis para as máquinas, estendendo a web atual, ou seja, sem precisar trocar tudo o que já existe atualmente por uma tecnologia totalmente diferente.

            Com a web semântica, as páginas poderão conter várias informações que serão compreendidas por máquinas. Por exemplo, uma página pessoal poderá conter todas as publicações acadêmicas feita pelo dono da página, além da informação que aquela página é realmente a página pessoal de uma determinada pessoa; tudo isso de uma forma que as máquinas consigam entender.

            Suponha que exista uma empresa e que em seu site haja a lista de seus funcionários e você queira saber todas as publicações acadêmicas feitas por funcionários dessa empresa. Na web atual, fazer essa pesquisa seria muito trabalhosa. Um agente da web semântica resolveria essa consulta vendo quais são os funcionários dessa empresa e depois procurando na página pessoal de cada funcionário por publicações, ou talvez na página das universidades onde estudaram. Uma conseqüência da web semântica é que a web se tornará um grande banco de dados distribuído, com informações espalhadas em cada página da web.

            Para dar significado – semântica – aos dados, também é preciso estabelecer regras de lógica entre eles. Essa lógica, porém, deve ser suficientemente poderosa para expressar a maioria das regras que sejam necessárias, porém não tão poderosa a ponto de lidar com paradoxos. As regras esperadas são do tipo: “sejam indivíduos X, Y e W, se Y é pai de X e W é pai de Y, então W é avô de X”, “todo professor doutor tem direito à assistência médica” etc. Com essas regras, as máquinas podem raciocinar sobre os dados.

 

Desenvolvimento

 

            A primeira pergunta após ser introduzido à web semântica é: “Como fazer com que as máquinas compreendam informações?”. Há basicamente duas respostas: a) ensiná-las a comportarem-se como humanos – essa solução é extremamente complexa, isso se não for impossível; b) criar uma linguagem que represente tanto dados quanto regras para raciocínio sobre dados que permita que qualquer representação do conhecimento possa ser exportada para web.

            Os pesquisadores do W3C (World Wide Web Consortium) [6], entidade que cria tecnologias e padrões para a web e está desenvolvendo a web semântica, escolheram a segunda opção e estão atualmente trabalhando para desenvolver essa linguagem.

            Para colocar os dados nas páginas sem prejudicar a visualização das mesmas podemos usar XML [13], que tem uma sintaxe muito parecida com HTML. Como XML permite criar tags com quaisquer nomes e os navegadores web simplesmente ignoram as tags que não estão especificadas na especificação do HTML, XML parece bastante apropriada para colocar dados de forma bem estruturada. Porém, apenas XML não expressa significado. XML permite estruturar os dados porém não diz nada a respeito do significado da estrutura.

            Para expressar significado foi desenvolvido o RDF (Resource Description Framework) [7], que usa a sintaxe do XML. O RDF expressa relações através de trincas de dados, onde cada uma das informações representa, como sentenças em linguagem natural, sujeito, verbo ou objeto. Documentos em RDF fazem afirmações (ou estabelecem relações através de uma propriedade) entre duas entidades; afirmações do tipo: “é o criador de”, “é o pai de”, “é a página pessoal de” etc. Sujeitos, verbos e objetos são identificados por um URI (Universal Resource Identifier). Isso permite que qualquer um crie um novo conceito apenas criando um novo URI e o definindo em algum lugar da web.

            Exemplo:

            Queremos armazenar a seguinte frase em uma página, usando RDF:

            “A página http://www.w3.org/Home/Lassila foi criada pelo indivíduo de código 85740, cujo nome é Ora Lassila e email é lassila@w3.org.”

Structured value with identifier

            Como a forma de relacionar entidades em RDF é bastante simples, pode-se criar uma grafo que representa graficamente a relação desejada. O grafo acima representa como informações da frase acima são armazenadas usando a estrutura do RDF. Abaixo está o código RDF correspondente.

 
<rdf:RDF>
  <rdf:Description about="http://www.w3.org/Home/Lassila">
    <s:Creator rdf:resource="http://www.w3.org/staffId/85740"/>
  </rdf:Description>
 
  <rdf:Description about="http://www.w3.org/staffId/85740">
    <v:Name>Ora Lassila</v:Name>
    <v:Email>lassila@w3.org</v:Email>
  </rdf:Description>
</rdf:RDF>

 

Ontologias

 

            Um mesmo conceito pode ser expressado de formas diferentes, como ocorre em linguagem natural. Pode-se usar verbos diferentes para uma mesma relação. Porém, pode acontecer de uma página definir uma estrutura de dados que tenha o mesmo significado de uma estrutura de dados em outra página, mas estruturá-la de forma diferente. Isso pode ser verificado comparando-se os grafos, que provavelmente terão topologias diferentes. Para que um agente da web semântica possa usar os dados das duas fontes, com o mesmo significado, é preciso que ele saiba o que cada relação e propriedade de cada modelo significa. Para isso, existem as ontologias.

            Mas o que é uma ontologia ? Resposta direta:

                        Uma ontologia é uma especificação de uma conceituação.” [8]

            Ontologias são descrições de conceitos e relacionamentos que existem entre os conceitos de um domínio específico. Definem, por exemplo, que “todo professor com dedicação integral tem direito a assistência médica” e que professor assistente e professor doutor são subclasses de professor e, dessa forma, herdam as propriedades de professor. Professor, por sua vez, é subclasse de funcionário, herdando assim também as propriedades de qualquer funcionário, como a que diz que “todo funcionário tem um salário associado a ele”.

            As ontologias costumam conter um vocabulário com sinônimos para uma mesmo conceito. Mas só isso não resolve o problema citado no primeiro parágrafo desta seção. Ontologias também podem ter relações de equivalência de conceitos com outras ontologias, para que um agente faça buscas em várias páginas diferentes mas saiba exatamente quais conceitos são equivalentes, de forma transparente para o usuário. Ainda assim, o problema ainda não está totalmente resolvido. Se não houver essas relações de equivalência previamente estabelecidas, o agente, a princípio, não terá como saber quais conceitos são equivalentes.

            Com as informações passadas até agora, as buscas já podem ser feitas por conceitos, ao invés de por palavra-chave, como é feito atualmente. Buscas por conceitos podem ser mais produtivas. Num exemplo anterior, quando se desejava encontrar por um site com as músicas da banda Live ou mesmo a página oficial da banda, a busca por palavra-chave mostrou-se muito ineficiente. A busca por conceito – página oficial da banda Live – tende a devolver os resultados mais relevantes (teoricamente, deveria ser retornada apenas uma página, se a banda tiver apenas um site oficial).

           

Agentes

 

            Só teremos uma real noção do poder da web semântica quando houver programas que coletem informações de várias fontes diferentes, processem esses dados e façam intercâmbio com outros programas. Isso só será possível quando tivermos uma boa quantidade de informações disponíveis nos formatos da web semântica.     

            As possibilidades de agentes que podem ser desenvolvidos são imensas. A cada dia alguém encontra uma nova. Uma das mais interessantes é o organizador pessoal. Imagine que um homem de negócios tem uma consulta marcada num fisioterapeuta que encontrou no catálogo do seu convênio médico. A consulta é às 15h e o consultório é perto de seu escritório. Às 12h, um cliente liga e marca uma reunião para às 16h em seu escritório, que fica do outro lado da cidade. Não há tempo para ir à consulta e chegar lá às 16h. O homem de negócios, então, pega seu handheld, acessa o software organizador pessoal e pede ao organizador para tentar remarcar a consulta. Esta é a parte interessante. O organizador consulta o site do convênio médico e pega a lista de todos as clínicas de fisioterapia. Visita o site de cada um deles e procura por clínicas que tenham horários para consulta mais cedo e sejam perto de seu escritório ou por clínicas que tenham horários mais próximos ao horário da reunião, mas que sejam próximos ao escritório de seu cliente. Após a pesquisa, mostra ao usuário uma lista com clínicas e horários de consulta para ele escolher, todos de forma a conseguir ir à consulta e à reunião com o cliente. Esse tipo de busca, “pulando” de página em página – chamado de chaining – criará inúmeras possibilidades de agentes.

            O futuro das buscas com a web semântica é um tanto quanto incerto. Lembrando da evolução das buscas da web atual, espera-se também que as buscas na web semântica evoluam com o tempo e de acordo com as necessidades dos usuários. É possível também que haja aproveitamento dos algoritmos atuais, ou talvez até um aprimoramento deles para que funcionem junto com a web semântica.

 

Desenvolvimento do projeto

 

Implementando a Biblioteca Virtual

 

            A implementação da Biblioteca Virtual foi um bom exercício de programação. A aplicação é, de certa forma, simples, não apresentando grandes desafios de programação. Seu desenvolvimento começou a partir do zero. As únicas coisas concreta que existiam eram a necessidade dos professores do LIAMF de controlar seus acervos pessoais e algumas idéias iniciais de como fazê-lo.

            Após aceitar a proposta da professora Renata para fazer o projeto, os professores reuniram-se para entrarem em acordo sobre os requisitos da aplicação. Passaram a mim os requisitos e, então, a próxima etapa foi a modelagem. Fiz a modelagem do banco de dados e, após algumas alterações sugeridas, a “oficializei” e passei para a implementação da aplicação. O diagrama entidade-relacionamento do banco de dados é o seguinte:

 

 

            Como já foi mencionado, a implementação foi feita usando a linguagem PHP [21], que é uma linguagem de programação para web bastante fácil de usar, porém muito poderosa. PHP já conta com uma vasta coleção de bibliotecas que facilitam muito o trabalho e faz dessa linguagem uma das minhas preferidas, especialmente para web. 

            Uma das maiores dificuldades foi implementar a seção da biblioteca que aceita entradas no formato BibTeX. O problema é simples: apenas aceitar entrada num determinado formato e processá-la. O formato BibTeX até que é simples e se aproveita dos caracteres especiais e coisas do tipo do LaTeX. PHP, apesar de todas suas funções, não possui bibliotecas nem para BibTeX, nem para LaTeX. Então parti para a implementação do interpretador de BibTeX. O reconhecimento do arquivo foi feito, como é de se esperar, fazendo uso de expressões regulares. O que mais gerou problemas e algumas dores de cabeça foram alguns detalhes do LaTeX, que foram superados lendo e relendo alguns manuais de LaTeX.

            O banco de dados usado foi MySQL [24]. Eu já tinha alguma experiência no uso desse banco de dados, então não tive dificuldades com relação a ele na aplicação.

 

Pesquisando Web Semântica

 

            A pesquisa sobre web semântica foi um tipo de pesquisa que nunca havia feito, pois trata-se de um tema que ainda está em desenvolvimento. Esse fato faz com não haja um lugar onde se encontra tudo o que se precisa saber. A maioria dos documentos encontrados são artigos ou publicações do gênero. Todas as linguagens e técnicas que a web semântica fará uso ainda não estão completamente definidas, apenas algumas delas. Isso faz que cada novo conceito lido (e compreendido...)  incentive a reflexão sobre como resolver os problemas que envolvem tal conceito.

           

Implementando a busca por publicações

 

            A idéia inicial do projeto era efetivamente colocar informações da web semântica sobre as publicações na biblioteca ou mesmo na página dos professores. Em um determinado momento, percebemos que não daria tempo para concluirmos tal objetivo. Porém, resolvemos implementar um sistema de busca nos currículos Lattes dos usuários do sistema.

            Essa nova tarefa se relaciona com a web semântica no sentido de implementar uma busca em arquivos no formato XML. O W3C tem uma iniciativa para criar linguagens de consulta que facilitem a extração de dados de arquivos XML, o XML Query [14]. Algumas linguagens que implementam o XML Query se assemelham muito a SQL. Porém, não há nenhuma implementação para PHP. Assim, a busca teve que ser feita “no braço”.

            A busca foi implementada usando a biblioteca para acesso ao XML  que usa SAX[b] (Simple API for XML), nativa do PHP. Para quem já está acostumado a fazer consultas em bases de dados através de linguagens de consulta como SQL, fazer a busca acessando o arquivo apenas através do SAX é muito desconfortável, pois é preciso verificar registro por registro para encontrar quais são os que devem ser devolvidos. Essa tarefa geralmente é delegada para o banco de dados.

            Há também uma biblioteca instável para usar DOM[c] (Document Object Model) no PHP e também uma biblioteca [15] com vários utilitários para XML, inclusive uma linguagem XML Query. Essas bibliotecas não foram usadas por serem todas experimentais e também pelo fato da versão do PHP instalada na rede IME não contê-las.

            Com isso, acho que PHP não é a linguagem mais indicada para buscas em XML no momento.  Mas quando a biblioteca DOM chegar a uma versão estável, a história deve mudar.

 

As matérias do IME e o projeto

 

            Listarei algumas disciplinas que foram de fundamental importância para este projeto e como elas influenciaram no desenvolvimento:

      Essas são as matérias que considero mais básicas, que são a base para todo resto do curso. Com elas tomei contato com programação, aprendendo desde as técnicas básicas da programação até criar estruturas de dados e o valor da construção de algoritmos eficientes. Como esse projeto é, acima de tudo, um projeto de implementação, não há com não mencionar essas matérias. Em especial, MAC 110 foi muito importante para minha formação pois a forma como o professor Yoshi, que lecionou essa disciplina em 1999, a conduziu foi bastante motivante. Isso foi muito importante tratando-se do primeiro contato com programação.

 

      Em Laboratório de Programação foi onde tive contato com linguagens script e expressões regulares. PHP é, na verdade, uma linguagem script que é um meio termo entre C e Perl – esta última foi explorada em Labprog.

      As expressões regulares são usadas no projeto na validação de campos de formulários, para verificar, por exemplo, se no campo de email está realmente escrito um endereço de email, e não uma string qualquer. Além, é claro, do interpretador de BibTeX.

 

      Essa matéria foi de suma importância para a implementação da biblioteca. Tanto a modelagem quanto o uso da linguagem SQL foram exploradas nessa disciplina. Tive a sorte de, quando fiz essa disciplina, estar trabalhando com banco de dados. Pude aproveitar bastante a parte mais teórica da disciplina, sabendo sua relação com a prática, que às vezes não é muito clara em nossas matérias.

 

      O estudo da web semântica é um estudo da área da Inteligência Artificial. Essa disciplina, que faço no mesmo semestre em que escrevo este texto, me ajudou bastante na compreensão dos objetivos e como deverão funcionar os agentes da web semântica.

 

 

 

Bibliografia / Referências

 

[1] Plataforma Lattes (CNPq)  - http://lattes.cnpq.br:8888/plataformalattes/

[2] BibTeXing, Oren Patashnik, 1988.

[3] http://www.w3.org/2001/sw/ - Página de web semântica do W3C

[4] http://www.google.com

[5] http://www.altavista.com

[6] http://www.w3.org – Site do W3C (World Wide Web Consortium)

[7] http://www.w3.org/RDF/ - Página do RDF

[8] http://www-ksl.stanford.edu/kst/what-is-an-ontology.html

[9] http://ksl-web.stanford.edu/KSL_Abstracts/KSL-92-71.html

[10] http://www.w3.org/XML/1999/XML-in-10-points.html

[11] http://www.cs.umd.edu/users/hendler/AgentWeb.html

[12] http://www.semanticweb.org/knowmarkup.html

[13] http://www.w3.org/XML/

[14] http://www.w3.org/XML/Query

[15] http://sourceforge.net/projects/phpxmlclasses/

[16] http://www.ecst.csuchico.edu/~jacobsd/bib/formats/bibtex.html

[17] http://www.xml.com/lpt/a/2001/05/02/semanticwebsite.html

[18] http://citeseer.nj.nec.com/bonifati00comparative.html

[19] http://www.swi.psy.uva.nl/usr/richard/pdf/kais.pdf

[20] http://www.cs.umd.edu/~hendler/

[21] http://www.php.net

[22] http://www.xml.com/pub/rg/SAX_vs_DOM

[23] http://developerlife.com/saxvsdom/default.htm

[24] http://www.mysql.com

 

 

 



[a] BibTeX é um programa e um formato de arquivos para geração de bibliografias que funciona com o LaTeX.

[b] SAX (Simple API for XML) e DOM (Document Object Model) são formas de acessar arquivos XML. Pode-se implementar bibliotecas SAX ou DOM para quaisquer linguagens. A forma que SAX acessa arquivos XML é baseada em eventos (abre tag, fecha tag etc.)

[c] DOM transforma o arquivo XML em uma árvore de objetos, hierarquicamente distribuídos.