JOSIANE MELCHIORI PINHEIRO FERREIRA O USO DE LINGUAGEM NATURAL CONTROLADA COMO INTERFACE PARA CONSTRUÇÃO DE ONTOLOGIAS MARINGÁ 2005 JOSIANE MELCHIORI PINHEIRO FERREIRA O USO DE LINGUAGEM NATURAL CONTROLADA COMO INTERFACE PARA CONSTRUÇÃO DE ONTOLOGIAS Dissertação apresentada ao Programa de PósGraduação em Ciência da Computação da Universidade Estadual de Maringá, como requisito parcial para obtenção do grau de Mestre em Ciência da Computação. Orientador: Prof. Dr. Sérgio R. P. da Silva MARINGÁ 2005 DEDICATÓRIA Dedico este trabalho Aos meus pais, Oraci e Regina e ao meu marido Heitor, com todo amor do mundo. AGRADECIMENTOS Ao professor Sérgio R. P. da Silva, meu orientador, por ter acreditado em meu trabalho, me incentivado e ajudado quando necessário. Aos meus colegas graduandos e mestrandos do nosso grupo de pesquisa, pela paciência de ver minhas apresentações e sempre contribuir com algo relevante em nossas discussões. Aos meus colegas do Departamento de Informática da UEM, que entenderam que eu não poderia contribuir o quanto era necessário durante o desenvolvimento deste trabalho. Ao CNPQ, pela ajuda financeira recebida durante a execução deste trabalho. À minha família, principalmente meus pais Oraci e Regina, que lutaram o quanto puderam para que eu tivesse a oportunidade de hoje defender o grau de mestre. Pelo amor, carinho, educação e respeito que me proporcionaram durante toda a vida. Ao meu esposo Heitor, por ter compreendido a minha ausência e o meu cansaço. Pelo amor, carinho, paciência e incentivo que me proporcionou durante o desenvolvimento deste trabalho. [...] talvez não tenhamos conseguido fazer o melhor, mas lutamos para que o melhor fosse feito [...] Não somos o que deveríamos ser, mas somos o que iremos ser. Mas graças a Deus, não somos o que éramos (Martin Luther King). RESUMO Neste trabalho, desenvolvemos uma linguagem de especificação de ontologias baseada em uma linguagem natural controlada com o intuito de permitir que um especialista em um domínio seja capaz de, ele próprio, construir uma base de conhecimento contendo uma ontologia para o domínio. Com o uso desta linguagem, procuramos evitar que problemas comuns de comunicação entre o engenheiro de conhecimento e o especialista afetem a qualidade da base de conhecimento gerada. Procuramos evitar também que o especialista tenha que expressar seu conhecimento por meio de uma tecnologia de representação de conhecimento que ele não domina. Neste escopo, foram desenvolvidos um parser e um algoritmo de mapeamento para traduzir a linguagem de especificação, automaticamente, para a linguagem OWL. Estes elementos foram incorporados em um protótipo de um editor de ontologias dirigido por processo, que visa restringir a linguagem empregada pelo especialista, auxiliando-o durante o processo de desenvolvimento da ontologia do domínio. Deste modo, somente as sentenças que podem ser utilizadas em cada passo do processo de construção de ontologias, estarão disponíveis para escolha do especialista, facilitando, assim, seu trabalho e, possivelmente, ampliando seu desempenho. Palavras-chave: Representação de Conhecimento, Ontologia, Linguagem Natural Controlada e OWL. ABSTRAT In this work, we have developed an ontology specification language based on controlled natural language aiming to allow a domain expert to build a knowledge base, containing an ontology of the domain, by her/himself. Using this approach, we try to avoid common communications problems between knowledge engineers and domain experts that can result in a low quality knowledge base. Additionally, we will also trying to avoid that the domain expert has to express his/her knowledge through a knowledge representation language that he/she does not dominate. In this scope, we developed a parser and a mapping algorithm to automatically translate the specification language, to the OWL language. These elements were added to a prototype of a process driver ontology editor, with the aim to limit the language used by the domain expert, supporting him/her in the ontology development process. In this way, only the sentences that can be used in each step of the ontology building process, will be available for the expert to choose, making the expert’s work easy, and, possibly, improving his/her performance. Keywords: Knowledge Representation, Ontology, Controlled Natural Language, OWL. LISTA DE TABELAS E ILUSTRAÇÕES Figura 1: Composição de um SBC. Adaptado de Stefik [STEFIK, 1995, pág 297].................................. 7 Figura 2: Um exemplo simples de uma rede semântica. .................................. ................................. 14 Figura 3: Exemplo de uma rede semântica com vários significados. Baseada em Woods, 1975....... 15 Figura 4: Estrutura de uma rede semântica baseada em atributo e valor. ......................................... 16 Figura 5: Uma rede semântica com dois tipos de arcos diferentes. Baseada em Woods, 1975 ........ 17 Figura 6: A representação de um conceito de acordo com as idéias de Brachman. Adaptado de Brachman, 1976, pág. 137. .................................. .................................. ........................................... 19 Figura 7: Exemplo dos vinhos agora representado por uma estrutura de frames. ............................. 21 Tabela 1: Tipos de referências válidas na sublinguagem de referenciação …................................... 44 Figura 8: Um fragmento de uma ontologia utilizando as sentenças da metalinguagem. ................... 56 Figura 9: Os principais módulos do parser implementado por Blackburn. ......................................... 60 Tabela 2: Mapeamento das sentenças da metalinguagem para DRS….........................................… 62 Tabela 3: A relação entre os construtores da linguagem OWL DL e a metalinguagem. .................... 65 Tabela 4: mapeamento das sentenças para OWL/DL…..................................................................... 68 Figura 10: Mapeamento de uma sentença do tipo 1 para OWL. .................................. ..................... 75 Figura 11: Mapeamento de uma sentença do tipo 7 para OWL. .................................. ..................... 76 Figura 12: Mapeamento de uma sentença do tipo 8 pra OWL............................................................ 77 Figura 13: Mapeamento de uma sentença do tipo 9 pra OWL............................................................ 78 Figura 14: A interface do editor de ontologias proposto. .................................. ................................. 80 Figura 15: As templates das sentenças que podem ser utilizadas pelo usuário para a construção da ontologia. .................................. .................................. .................................. ................................... 82 Figura 16: Os menus pop-up disponíveis para a definição de um valor para uma propriedade......... 85 Figura 17: A escolha de uma propriedade para a definição de seu tipo. ........................................... 85 Figura 18: A escolha de um tipo para a propriedade. .................................. ..................................... 86 Figura 19: O processo global de construção de uma ontologia utilizando o editor............................. 88 Figura 20: O subprocesso 1 do processo de criação de ontologias. .................................. ............... 90 Figura 21: O subprocesso 2 do processo de criação de ontologias. .................................. ............... 91 Figura 22: O subprocesso 3 do processo de construção de ontologias. .................................. ......... 91 Figura 23: O subprocesso 4 do processo de construção de ontologias.. ........................................... 92 Figura 24: O subprocesso 5 do processo de construção de ontologias. ............................................ 92 Figura 25: O subprocesso 6 do processo de construção de ontologias. ............................................ 93 Figura 26: O subprocesso 7 do processo de construção de ontologias. ............................................ 93 LISTA DE ABREVIATURAS E SIGLAS BC Base de Conhecimento DL Description Logics DRS Discourse Representation Structure DRT Discourse Representation Theory EC Engenheiro de Conhecimento LN Linguagem Natural LNC Linguagem Natural Controlada LPO Lógica de Primeira Ordem OWL Ontology Web Language RC Representação de Conhecimento SBC Sistema Baseado em Conhecimento TRC Tecnologia de Representação de Conhecimento SUMÁRIO 1 Introdução .............................................................................................................................. 1 2 Sistemas Baseados em Conhecimento.................................................................................. 6 1 O Problema da Representação de Conhecimento............................................................. 8 2 Tecnologias de Representação de Conhecimento .......................................................... 13 3 Modelagem de Conhecimento, Ontologias e a Linguagem OWL................................. 25 4 O Processo de Aquisição de Conhecimento ................................................................... 30 3 O Uso da Linguagem Natural Controlada ........................................................................ 38 1 Porque Utilizar Linguagem Natural Controlada............................................................. 38 2 A Origem da Linguagem Natural Controlada Proposta ................................................. 41 3 A Linguagem Natural Controlada Proposta ................................................................... 43 4 O Mapeamento da Linguagem Natural Controlada para a Linguagem OWL ............. 58 1 A Implementação de um Parser para a Linguagem Proposta ........................................ 58 2 O Mapeamento das DRSs Resultantes do Parser para a Linguagem OWL .................. 64 2.1 Exemplos de Aplicação do Algoritmo de Mapeamento........................................ 75 5 O Editor de Ontologias ....................................................................................................... 79 6 Conclusão ............................................................................................................................. 95 Referências ............................................................................................................................ 102 Anexo I - Algoritmo de Mapeamento de DRS para OWL............................................... 109 1 Capítulo 1 Introdução A tualmente o processo construção de bases de conhecimento (BC) é, geralmente, realizado por um engenheiro de conhecimento (EC) [PÉREZ, 2002]. Sua função é estudar o domínio em questão por meio de algumas fontes de conhecimento e representar este conhecimento na BC. Na maioria dos domínios a fonte mais rica de conhecimento é um especialista no domínio. Sendo assim, o engenheiro de conhecimento deve procurar adquirir o conhecimento do especialista no domínio e codificá-lo na BC. No entanto, este processo apresenta algumas desvantagens como, por exemplo, a dificuldade do especialista para descrever seu conhecimento; a dificuldade do engenheiro para entender o que o especialista descreve e para representar este conhecimento por meio de uma tecnologia de representação de conhecimento (TRC) que, muitas vezes, não permite expressar o que o engenheiro deseja; a grande quantidade de tempo e, conseqüentemente, o alto custo deste processo; entre outras. Uma desvantagem bastante relevante é que a passagem de conhecimento de um especialista em um domínio para a BC é feita de forma indireta, ou seja, 2 por não conhecer a TRC, o especialista tem de passar seu conhecimento do domínio para o EC que por sua vez o introduz na BC. Este processo indireto pode gerar diferentes interpretações do especialista e do engenheiro quanto ao conhecimento do domínio. Isso ocorrerá pelo fato de que, conforme nos mostra a semiótica [PIERCE, 1931] [ECO, 1976], é comum duas pessoas, ao se comunicarem, gerarem interpretações diferentes para uma mesma sentença. No contexto da construção de BCs este problema de interpretação freqüentemente ocorre porque o especialista tem conhecimento pleno do domínio, mas geralmente não tem conhecimento da TRC empregada na construção das BCs. Já o EC, por sua vez, tem pleno conhecimento da TRC, mas não necessariamente tem conhecimento do domínio da aplicação. Sendo assim, o resultado desta passagem indireta de conhecimento pode ser uma BC de baixa qualidade, que não corresponde às expectativas do usuário do sistema. Se pudermos fazer com que o próprio especialista no domínio construa a BC diretamente, resolveríamos tanto o problema de comunicação entre o especialista e o EC, quanto o problema do alto custo dos serviços de um EC. Assim, temos duas alternativas: 1) podemos fazer com que o especialista no domínio aprenda a codificar seu conhecimento na forma de uma TRC, ou 2) podemos permitir que ele expresse seu conhecimento por meio de uma linguagem para representação de conhecimento que ele possa utilizar mais facilmente e fazermos, então, o mapeamento desta linguagem para uma TRC. A primeira alternativa é uma tarefa um tanto quanto difícil, pois ele terá que aprender uma linguagem totalmente nova para se expressar — considerando que o especialista, normalmente, é leigo no assunto de representação de conhecimento, ou seja, ele pode não ter nenhum conhecimento de linguagens formais. Já a segunda alternativa, pode ser uma solução viável, contanto que três fatores sejam levados em consideração, são eles: 1) que a linguagem para representação de conhecimento utilizada seja semelhante com alguma que o especialista já conheça como, por exemplo, a linguagem natural; 2) que esta linguagem tenha expressividade suficiente para 3 representar o domínio em questão; e 3) que seja possível obter um mapeamento eficiente dela para uma TRC. A proposta deste trabalho é estudar a viabilidade de aplicação da segunda alternativa discutida acima. Para tal, propomos disponibilizar uma linguagem de especificação de ontologias baseada em uma linguagem natural controlada (LNC) [ALTWARG, 2000] para que o especialista possa expressar seu conhecimento e, também, automatizar o mapeamento desta linguagem para uma TRC. Desta forma, estaremos tentando melhorar o processo de construção de BCs, trazendo o especialista no domínio para o primeiro plano desta tarefa. O uso de linguagem natural na forma controlada, ou seja, o emprego de um subconjunto de sentenças válidas na linguagem natural, porém não ambíguas para os especialistas e para o parser que faz seu mapeamento, é necessário para manter o tratamento computacional da linguagem de especificação dentro de uma faixa de eficiência razoável, de forma a não inviabilizar sua implementação. A questão da expressividade da linguagem de representação é uma questão complexa sendo dependente, principalmente, da TRC para a qual ela será mapeada, pois, em última instância, é esta quem define quais propriedades poderão ser modeladas no domínio. A TRC escolhida para este trabalho foi a linguagem OWL (Web Ontology Language) [MCGUINESS e HARMELEN, 2003]. A escolha pela linguagem OWL se deve ao fato de ela ser um padrão proposto pelo W3C (World Web Wide Consortium) para ser a linguagem de representação da Web Semântica, que é o domínio de aplicação que pretendemos atingir. A LNC proposta neste trabalho é um subconjunto da linguagem usada pelas pessoas leigas (não-programadores) para expressar planos no seu dia-a-dia, como a linguagem usada nas receitas de bolo e nos manuais de faça-você-mesmo. A linguagem utilizada como base para a criação da LNC proposta neste trabalho, foi proposta por Da Silva [2001], permitindo o emprego de mecanismos lingüísticos naturais, como o uso de anáforas e elipses. Este tipo de 4 linguagem deve facilitar o entendimento do usuário na tarefa de construir a BC, pois ele necessitará apenas de aprender a restringir um conhecimento que já dispõe. Para fazer o mapeamento da LNC para a TRC utilizada na BC, propomos adaptar a implementação de um parser construído por Blackburn e Bos [1999], baseado na teoria de representação de discurso (Discourse Representation Theory - DRT) [KAMP, 1981]. Este parser tem como entrada um texto que representa as sentenças que estarão presentes na BC e gera como saída uma representação em DRT — muito próxima à lógica de primeira ordem. Esta representação será, então, processada para construir uma BC representada na linguagem OWL. A opção de se utilizar o parser já implementado por Blackburn e Bos foi feita pelo fato de a gramática coberta por ele ser bastante ampla, o que possibilita uma futura expansão da LNC, inicialmente proposta, de forma muito rápida e eficiente. Além disso, a representação baseada em DRT nos disponibiliza muito mais recursos para resolver anáforas e elipses mais elaboradas (bastante comuns em linguagem natural) se no futuro assim o desejarmos. A linguagem empregada no presente trabalho é um subconjunto da língua inglesa. Esta escolha reflete simplesmente o fato de já partirmos de uma linguagem e de um parser já existentes [DA SILVA, 2001]. No entanto, é possível desenvolver o mesmo tipo de proposta para outras línguas. É importante salientar que a simples definição de uma LNC que o especialista no domínio possa utilizar, de forma mais natural, para representar seu conhecimento, em geral, não resolve o problema de construção de BCs. Deste modo, propomos também neste trabalho a utilização de um ambiente de edição que auxilie o especialista na tarefa de expressar seu conhecimento, visto que isto também não é uma tarefa comum para um especialista no domínio. Este editor deverá ter incorporado um agente, no formato de agenda, que conheça o processo de construção de ontologias e que guie o especialista do domínio na sua tarefa de especificação da BC. 5 Com o desenvolvimento desta LNC, do seu mapeamento para a TRC utilizada, e a sua integração com o ambiente de construção de BCs, pretendemos, tornar a tarefa de construir BCs mais eficiente e menos custosa. No capítulo 2 deste trabalho, discutimos o que é um sistema baseado em conhecimento, quais os problemas envolvidos na representação de conhecimento, as principais tecnologias de representação de conhecimento utilizadas para codificar bases de conhecimento, e a principal fase do desenvolvimento de um sistema baseado em conhecimento — a fase de aquisição de conhecimento. Ainda no capítulo 2, apresentamos uma breve discussão sobre o tipo de conhecimento que a linguagem proposta por este trabalho pretende focar (as ontologias) e porque mapeamos a linguagem proposta para a linguagem OWL DL. No capítulo 3, discutimos o emprego de LNCs em diversas tarefas, a origem da linguagem por nós proposta e, finalmente, apresentamos a LNC que utilizaremos como interface entre um especialista no domínio e a BC por ele construída. No capítulo 4, apresentamos a implementação de um parser para a LNC proposta e o mapeamento desta para a linguagem OWL DL. No capítulo 5, propomos algumas facilidades que um editor deveria prover para auxiliar o especialista no domínio em sua tarefa. Finalmente, no capítulo 6, apresentamos uma discussão dos resultados obtidos e os possíveis trabalhos futuros desta dissertação. 6 Capítulo 2 Sistemas baseados em conhecimento U m sistema baseado em conhecimento (SBC)1 é um sistema de computador que é guiado pelo conhecimento específico de um domínio para resolver problemas sobre este domínio. Ou ainda, segundo Stefik [1995, p. 297], “um sistema [baseado em] de conhecimento é um sistema de computador que representa e usa conhecimento para cumprir uma tarefa”. Na década de 70 quando estes sistemas começaram a ser desenvolvidos acreditava-se que se eles tivessem o conhecimento necessário, poderiam superar ou equiparar o desempenho de especialistas humanos em tarefas bem definidas [RUSSEL e NORVING, 2004, p. 352]. Um dos primeiros SBCs desenvolvidos foi o MYCIN criado para diagnosticar infecções sangüíneas [FEIGENBAUM, BUCHANAN e LEDERBERG, 1971]. Com cerca de 450 regras, o MYCIN foi capaz de fazer diagnósticos tão bem quanto alguns especialistas 1 e até melhor de que alguns médicos em início de carreira Também chamado de sistema inteligente ou sistema especialista. Mark Stefik [1995, p. 297] faz uma breve discussão sobre os termos sistema especialista e sistema baseado em conhecimento. 7 [RUSSEL e NORVING, 2004, p. 24]. Esta e outras aplicações impulsionaram a criação dos SBCs que hoje são desenvolvidos para desempenhar as mais diversas tarefas, a saber: interpretação de dados, simulação, diagnóstico, projeto, planejamento, monitoramento, depuração, reparo, instrução e controle [WATERMAN, 1986]. Um SBC é composto geralmente por uma interface com o usuário — que permite ao usuário utilizar o sistema; uma interface de aquisição de conhecimento — que permite que o conhecimento necessário seja colocado no sistema; uma BC e um motor de inferência (ou raciocinador), como mostrado na Figura 1 a seguir. A BC e o motor de inferência são as duas partes essenciais de um SBC. A BC contém a representação de conhecimento do domínio sobre a qual o motor de inferência irá trabalhar para encontrar soluções para um problema de um domínio em particular. Usuário Especialista e EC Interface com o usuário Interface de aquisição Fatos e questões Resultados Conhecimento Sistema de inferência Conhecimento Base de Conhecimento Sistema Baseado em Conhecimento Figura 1: Composição de um SBC. Adaptado de Stefik [1995, p. 297]. Na próxima seção, vamos levantar os principais pontos que devem ser considerados durante o processo de representação de conhecimento. Em seguida, vamos apresentar algumas tecnologias utilizadas para representar conhecimento, e seus problemas inerentes. Ainda neste 8 capítulo apresentamos o tipo de conhecimento que estamos interessados em representar e os problemas envolvidos na fase de aquisição deste conhecimento. 1 O problema da representação de conhecimento A área de representação de conhecimento (RC), na ciência da computação, é uma subárea da inteligência artificial que estuda como o conhecimento pode ser representado e quais os tipos de raciocínio podem ser feitos com este conhecimento [GINSEBERG, 1994]. Apesar de parecer uma tarefa fácil, os problemas começam quando nos perguntamos: o que exatamente é conhecimento? Qual é a diferença entre dados, informações e conhecimento? Segundo Sattler [2005], dado é o termo sempre utilizado para se referir as informações armazenadas no computador, são fatos representados em linguagem legível (números, caracteres, imagens ou outros métodos de gravação), não carregando, por si só, nenhum significado. Informação é um dado que foi interpretado, traduzido, ou transformado para revelar o seu significado, é uma coleção de fatos dos quais podemos tirar conclusões. Conhecimento, por sua vez, pode ser visto como o resultado psicológico da percepção, da aprendizagem e do raciocínio; o corpo da verdade, informação, e princípios adquiridos pela humanidade; informação avaliada e organizada na mente humana que pode ser usada intencionalmente. Talvez por esta definição de conhecimento ser de certa forma filosófica é que a representação de conhecimento é um campo da inteligência artificial que vem sendo amplamente discutido. Davis, Shrobe e Szolovitis [1993], em um dos principais artigos sobre o assunto intitulado “What is knowledge representation” (“O que é representação de conhecimento”), enumera cinco importantes papéis que uma representação de conhecimento deve assumir, reforçando a afirmação de que representar conhecimento não é uma tarefa fácil. De fato, de nossos estudos podemos dizer que muito é discutido sobre o assunto, porém não existe uma linearidade sobre como proceder para representar conhecimento. O que 9 observamos é que as diversas publicações levantam aspectos que uma representação deve ter, ou que não deve ter [WOODS, 1987], papéis que uma representação deve assumir [DAVIS, SHROBE e SZOLOVITIS, 1993], como a representação deve ser utilizada pelo raciocinador, e como as tecnologias de representação de conhecimento2 influenciam a RC [DAVIS, SHROBE e SZOLOVITIS, 1993] [WOODS, 1987], mas isto ainda está muito longe de ser algo linear e fácil de reproduzir. Podemos entender a representação de conhecimento como uma estrutura simbólica que representa o conhecimento sobre algo. Esta estrutura deve ter algumas características importantes para que o conhecimento por ela representado possa ser utilizado e interpretado de forma correta. Davis, Shrobe e Szolovitis [1993] destacam que, primeiramente, devemos entender que nenhuma representação é precisa. De fato, os elementos do mundo real, sejam objetos ou fatos, tem relacionamentos e detalhes que muitas vezes nem mesmo nos damos conta. Por exemplo, quando representamos as entidades envolvidas no sistema de uma empresa, temos clientes, funcionários, proprietários e etc. Alguns atributos destas entidades, que são importantes para o sistema, podem ser representados como: nome, endereço, telefone e etc. Mas, na maioria das vezes, ignoramos que estas entidades são pessoas e que também fazem parte de outros grupos sociais. Isto acontece porque as outras informações não são relevantes para o nosso sistema e, portanto, não precisam ser representadas naquele escopo. Segundo Davis, Shrobe e Szolovitis [1993], uma representação pode ser vista como um substituto (que nunca é preciso) dos elementos do mundo real que podem ser utilizados em simulações do mundo real3, as quais muitas vezes não podem ser feitas na realidade. Para os autores, somente representações para elementos formais, como entidades matemáticas, podem ser capturadas exatamente. Este ponto de vista também é compartilhado por Woods 2 3 Também conhecidas como linguagens de representação de conhecimento. Visto desta forma o próprio fato de raciocinar sobre uma representação (fazer uma simulação) é em parte um substituto para as ações no mundo, quando não podemos ou não queremos (ainda) executar uma ação. 10 [WOODS, 1987], que diz que “uma característica inevitável do modelo interno de mundo é que ele é na melhor das hipóteses um modelo incompleto do mundo externo real”. Para Woods estas diferenças entre o mundo interno (modelo do mundo) e o mundo real podem acontecer por que: a) O mundo está em constante mudança, e as representações podem não acompanhá-las; b) Existe uma enorme quantidade de coisas que devem ser modeladas, e a representação pode não ser completa; c) As limitações que a própria tecnologia de representação impõe — a expressividade das linguagens empregadas na representação de conhecimento muitas vezes não é suficiente para que possamos representar tudo o que desejamos. De fato, o mundo real é cheio de detalhes, sua complexidade é imensa, e modelar tudo isso fielmente parece realmente impossível, não sendo, na maioria das vezes, necessário (pois se está interessado em aspectos mais simples do problema) e nem desejável (devido à complexidade que isto poderia acarretar). Desta forma, devemos ter ciência de que o modelo de mundo representado em um sistema baseado em conhecimento geralmente não corresponde exatamente ao mundo real. Como não podemos representar o mundo real de forma precisa, devemos então selecionar quais as propriedades que são mais importantes de serem destacadas em cada representação. Para Davis, Shrobe e Szolovitis “é como se víssemos o mundo através de uma lente que determina o que podemos ver, trazendo alguma parte do mundo para o foco e deixando as outras partes com um efeito distorcido”. Isto é o que os autores chamam de conjunto de compromissos ontológicos que estamos assumindo ao representar conhecimento — ao escolher uma representação estamos decidindo quais são os aspectos importantes do 11 mundo que devem fazer parte da representação. Eles ainda comentam que os primeiros compromissos ontológicos são assumidos quando escolhemos uma tecnologia de representação de conhecimento, pois toda tecnologia4 tem limites em sua expressividade, não nos permitindo representar alguma coisa sobre o domínio em questão. Um outro aspecto que não podemos deixar de destacar é que uma RC será a fonte de conhecimento para um raciocinador que, mecanicamente falando, nada mais é do que um processo computacional. Desta forma, também temos que nos preocupar com a eficiência deste raciocinador. As tecnologias de representação de conhecimento tipicamente especificam dois conjuntos de inferências que são úteis para melhorar a eficiência do raciocinador: o conjunto das inferências sancionadas e o das inferências recomendadas. As inferências sancionadas são aquelas consideradas possíveis de serem realizadas para tirar conclusões sobre o conhecimento disponível na representação. O conjunto das inferências recomendadas é um subconjunto das inferências sancionadas que guia o raciocinador para fazer inferências eficientes. Como o conjunto de inferências sancionadas é muito grande, qualquer sistema automatizado que tentar raciocinar guiado somente por elas brevemente se encontrará perdido em suas próprias escolhas [CERCONE e MCCALLA, 1987, p.5]. Um outro problema em relação à eficiência do raciocinador é que existe um balanceamento implícito entre o poder de expressividade de uma representação e a eficiência computacional do raciocinador que a processa. Woods [WOODS, 1987, p. 52] sustenta que “quanto maior a fidelidade do modelo menor é a simplicidade e a eficiência de seu uso”. Uma opinião também compartilhada por Stefik [1995]: “tipicamente, um aumento na precisão requer um decréscimo na eficiência”. Por isso, sempre devem ser observados os objetivos de cada representação de forma a maximizar sua precisão ou sua eficiência. 4 Algumas tecnologias de RC serão apresentadas na seção 2.3. 12 Ainda quanto a este assunto, Woods [1987, p. 65] destaca dois aspectos que devem ser considerados ao representar conhecimento: a eficácia notacional, que “se preocupa com a forma atual e a estrutura da representação, assim como o impacto desta estrutura nas operações do sistema”; e a adequação expressiva (expressive adequacy), que diz respeito ao “poder expressivo da representação”, ou seja, o que pode ser representado. Ele ainda subdivide a eficácia notacional em alguns pontos: eficiência computacional, clareza conceitual, concisão da representação e facilidade de modificação; e sustenta que as pesquisas na área de RC deveriam se dedicar simultaneamente à eficácia notacional e à adequação expressiva. Um outro ponto importante de ser destacado é que a tecnologia de representação de conhecimento utilizada influencia diretamente a qualidade da RC. Segundo Davis, Shrobe e Szolovitis [1993] uma TRC “é um meio de comunicação e expressão pelo qual contamos às máquinas (e talvez a outras pessoas) coisas sobre um domínio”. Assim, se uma tecnologia de representação de conhecimento torna possível expressar algo, mas não de forma fácil, então, nós como usuários reais, podemos nunca saber se interpretamos mal a representação resultante do uso da tecnologia e somente não sabemos como usá-la, ou se a tecnologia empregada verdadeiramente não pode expressar alguma coisa que gostaríamos de dizer. A representação resultante deve ser legível e redigível não só para a máquina, mas também para nós humanos. Além disso, os autores destacam que uma tecnologia de representação é uma linguagem na qual nos comunicamos, e, desta forma, devemos ser capazes de nos expressar com ela sem nenhum esforço heróico. Após levantar alguns aspectos que devemos ter em mente enquanto representamos conhecimento, discutiremos na próxima seção as principais tecnologias empregadas para representar conhecimento. 13 2 Tecnologias de representação de conhecimento A maioria das tecnologias de representação de conhecimento conhecidas atualmente tem algum fundamento na lógica. O poder expressivo da lógica de primeira ordem5 (LPO) fez com que ela fosse muito utilizada para representar conhecimento nos primeiros SBC. Segundo Cercone e McCalla [1987] “... não existe nenhuma dúvida de que a precisão formal e a interpretabilidade da lógica são úteis e fornecem certos tipos de expressividade na qual os outros esquemas de representação de conhecimento falham”. Porém, quanto à eficiência a LPO deixa a desejar. A este respeito Cercone e McCalla discute que, para representar restrições de tempo e espaço, a LPO necessitaria de uma quantidade enorme de predicados e que a tentativa de tornar estas representações consistentes seria quase impossível. Bittencourt [2001, p. 258] ainda discute que existem problemas com respeito à facilidade de uso da LPO. Segundo ele, quando modelamos um domínio é muito comum termos a necessidade de expressar conhecimento incerto e incompleto, o qual a LPO não consegue representar diretamente. Por isso, novas abordagens à representação de conhecimento surgiram com o intuito de suprir estas necessidades. As redes semânticas são uma destas abordagens. Elas foram introduzidas por Quillian [1968] e representam conhecimento por meio de grafos, sendo que os nós representam conceitos e os arcos entre eles representam os relacionamentos semânticos entre os conceitos. Existem vários tipos de redes semânticas, cada uma enfatizando diferentes tipos de relacionamentos entre as informações representadas na rede [CERCONE e MCCALLA, 1987, p. 9]. Em termos de poder expressivo as redes semânticas são similares a LPO. Além disso, a facilidade de se representar herança de características fez com que o interesse pelas redes semânticas se tornasse ainda maior. Nestas redes, as características descritas em uma 5 Também chamada de cálculo de predicados de primeira ordem [RUSSEL e NORVING, 2004, p. 232]. 14 categoria superior de elementos são herdadas por todas as categorias inferiores, desta forma, o raciocínio sobre herança tornou-se muito simples, pois basta caminhar através dos arcos para descobrir se uma característica de um objeto é “herdada” de uma categoria de objetos superior. Segundo Russel e Norvig [2004, p. 339] “a simplicidade e a eficiência deste mecanismo de inferência, comparado à prova de teoremas lógicos, foram os principais fatores de atração das redes semânticas”. A Figura 2 representa uma rede semântica simples para um pequeno domínio sobre vinhos. Todos os vinhos (Wine) são subclasses de uma classe de líquidos potáveis (PotableLiquid). A classe superior de vinhos (Wine) tem um descritor de vinhos (WineDescriptor), associado a ela por meio da relação has, e é especificada por três subclasses de vinhos: tinto (RedWine), rosé (RoseWine) e branco (WhiteWine). As classes vinho branco, vinho rosé e vinho tinto herdam a relação has da classe mãe. Assim, toda classe de vinhos terá um descritor associado a ela. A classe cor de vinhos (WineColor) tem três instâncias: vermelho (Red), rosé e branco (White) ligadas a ela por meio de um arco is-a. As linhas pontilhadas ligando estas instâncias às classes vinho tinto (RedWine), vinho rosé (RoseWine) e vinho branco (WhiteWine), indicam que vinhos que pertencem a estas classes têm as cores ligadas a ela como padrão. Figura 2: Um exemplo simples de uma rede semântica. 15 Dois trabalhos influenciaram fortemente as pesquisas sobre redes semânticas na década de 70. O artigo de Woods [1975] que discute o que a estrutura e a notação utilizadas nas redes semânticas podem significar, e o artigo de Brachman [1977] que discute como se faz a representação de conceitos, mostrando que ela está um nível acima da representação de nós e arcos das redes semânticas. Woods se preocupou com o significado da “semântica” das redes semânticas e sustenta que as redes que estavam sendo construídas, não estavam sendo interpretadas de forma adequada. O significado das redes parecia depender da intuição do leitor, que poderia não ser a mesma intuição do autor da rede. Ele ainda destaca que as especificações semânticas (transformações de sentenças de entrada para uma representação “semântica”), também necessitam especificar o seu significado. Para Woods, “muitas técnicas usadas nas redes semânticas existentes são inadequadas para representar conhecimento em geral”. Ele também fala que uma representação semântica deve ter uma adequação lógica — deve ser formal, precisa e não ambígua — e que, além disso, deve existir um algoritmo que traduz uma sentença nesta representação e um outro algoritmo capaz de utilizar esta representação resultante para fazer inferências e deduções. A Figura 3 é um exemplo utilizado por Woods para falar sobre o problema da “semântica” das redes semânticas. O que esta rede representa? “o conceito de ‘telefone preto’, ou talvez o relacionamento dos conceitos telefone e negritude — isto é, que telefones são pretos (todos os telefones? Alguns telefones?)” [WOODS, 1975, p. 49]. Figura 3: Exemplo de uma rede semântica com vários significados. Baseada em Woods, 1975. 16 Woods chama a atenção para o fato de que, além de especificar os tipos de nós e arcos que podem ser usados em uma rede semântica, também é importante especificar o que cada um destes tipos de arcos significam (representam). Ele utiliza diferentes estruturas de nós e arcos para tentar representar os conceitos e as especificações sobre o que elas significam. Segundo ele, as estruturas podem ser baseadas na noção de atributo e valor como na Figura 4 a seguir, na qual os arcos ou ponteiros são atributos (heigth, hairColor e Occupation) que “apontam” para os valores (6 feet, Brown e scientist). Figura 4: Estrutura de uma rede semântica baseada em atributo e valor. Baseada em Woods, 1975. Mas se tivéssemos que representar a sentença de entrada “John’s height is greater than 6 feet”, uma estrutura baseada em atributo e valor não seria mais adequada, pois o nó John estaria ligado por meio de um arco height a um nó greaterThan 6 feet que não é mais um valor para um atributo (height), mas um predicado que deve ser verdade para um valor (a altura real de John). Desta forma, teríamos duas especificações de significado para a estrutura de arcos e nós, sendo que alguns arcos apontariam para valores e outros para predicados. Um outro problema da estrutura de arcos seria a sentença de entrada “John hit Mary”, que poderia se representada de forma que o verbo hit se tornaria um arco de ligação entre John e Mary, sendo que este arco não representaria mais um valor, ou um predicado, como nos exemplos acima, mas sim uma relação entre os nós, como mostra a Figura 5 a seguir. Então teríamos mais uma especificação para uma estrutura entre nós e arcos onde os arcos agora representam relações arbitrárias entre os nós. Em uma rede, como a representada na 17 Figura 5, deveríamos indicar que os arcos height, hairColor e occupation são diferentes do arco hit, para que a máquina de inferência tratasse os arcos da forma adequada. Figura 5: Uma rede semântica com dois tipos de arcos diferentes. Baseada em Woods, 1975. A importância de distinguir entre nós que representam asserções ou fatos e nós que representam a estrutura da rede é um assunto enfatizado tanto por Woods quanto por Brachman [1977]. Porém, Brachman enfatiza mais a representação dos conceitos — “no sentido do que os autores pensam que eles são e como os nós das redes [semânticas] podem representá-los”. Ele chama a atenção para o fato de que um conceito é muito mais do que um nó e sugere que um conceito seja representado como um conjunto de propriedades e que estes nós de definição de propriedades sejam diferenciados dos nós de instanciação presentes na rede. Brachman fala sobre a representação de classes por meio de nós, considerados nós conceitos, e o que isso implica, pois os nós que representam classes terão suas propriedades herdadas pelos nós que serão instâncias dessas classes. Ele também levanta alguns problemas quanto à maneira que as propriedades dos nós conceitos estavam sendo representadas. O primeiro problema está no fato de que as propriedades são ligadas aos conceitos por meio de arcos semelhantes àqueles que representam o fato de que uma classe participa de um relacionamento com outra classe. O segundo problema está no fato de que a asserção de que um atributo tem um valor particular para toda instância parece exatamente igual à asserção de que um indivíduo em particular tem aquele valor. Por exemplo, a asserção <telefone cor preto> (onde telefone é um conceito — representado por um nó; cor é uma propriedade — representado por um arco-propriedade; e preto é o valor do atributo — também representado 18 por um nó) representa que todos os indivíduos da classe “telefone” devem ter o valor “preto” para a propriedade “cor”. Já a asserção <T1 cor preto>, semelhante à anterior, significa explicitamente que somente o indivíduo “T1” tem como valor da propriedade “cor” o valor “preto”. Brachman defende a idéia de um conceito ser representado por um conjunto estruturado de propriedades, que seriam ligadas ao conceito por meio de um tipo de arco primitivo que ele chamou de DATTRS (define as attributive parts – defina como parte atributiva). Estes arcos ligariam um nó conceito a um tipo especial de nó que representa uma descrição de um atributo ou parte. Este nó especial seria associado com vários outros nós que juntos representariam a definição da parte ou do conceito, e poderiam incluir os seguintes arcos: value/restriction — que será ligado a um conceito que representa o tipo dos valores daquela propriedade; role — que representa a inter-relação entre o arco DATTRS e o nó conceito; number — que aponta para um predicado e representa um numero dessas partes que são esperadas para uma instância do nó conceito; modality — que indica se esse atributo é opcional ou não para o conceito; e o arco default — que aponta para um valor que pode ser usado durante o processo de inferência, quando nenhum valor é especificado na instância. Brachman sustenta que este conjunto de arcos é apenas uma sugestão e que nada impede que outros arcos sejam criados. Além da idéia dos arcos DATTRS para um nó de descrição, Brachman também sugere um novo arco chamado ATTRS que representa a instância de um atributo de um conceito (atributo este ligado ao nó conceito por meio de um arco DATTRS). Desta forma, os arcos DATTRS associam descrições com conceitos, e os arcos ATTRS introduzem a existência de um valor particular para uma instância de um atributo. Para entendermos melhor estes arcos vamos analisar a Figura 6 a seguir. O conceito pessoa (person) é representado com dois atributos altura (heigth) e peso (weight). As descrições destes atributos estão ligadas ao 19 conceito por meio de arcos DATTRS. Outros arcos, além dos arcos role, como os arcos value/restriction, number, modality e default sugeridos por Brachman, poderiam estar ligados aos nós de descrição (DATTRS). O nó “John” é representado como uma instância do conceito pessoa. Por meio dos arcos ATTRS são feitas asserções que representam instâncias dos atributos peso e altura de John, que estão ligados aos seus valores correspondentes por meio dos arcos VAL. Figura 6: A representação de um conceito de acordo com as idéias de Brachman. Adaptado de Brachman, 1976, pág. 137. O objetivo de Brachman com esta estrutura de conceito é permitir que as redes semânticas sejam melhor entendidas e, principalmente, utilizadas de forma correta pelas máquinas de inferência, que desta forma poderão distinguir entre nós de descrição e nós de instanciação e asserção. Esta abordagem de definir um conceito como um conjunto de propriedades influenciou muito a concepção de outras tecnologias de RC, entre elas a idéia de frames introduzidas por Minsky [1975]. O mecanismo de frames é uma outra abordagem para representar conhecimento. Segundo Cercone e McCalla [1987], a idéia por traz do conceito de frames é “agrupar 20 pedaços de conhecimento, os quais podem se úteis para o entendimento de um conceito ou situação em particular” (p. 29). Um frame é uma descrição de um conceito. Ele é identificado por um nome e consiste de um conjunto de atributos, muitas vezes chamados de slots. Os valores dos slots descrevem as características do conceito que está sendo representado pelo frame, e podem inclusive referenciar outros frames. O slot mais comum a um frame é o slot “is-a” cujo valor é o nome do frame hierarquicamente superior. Cada frame possui um frame hierarquicamente superior, fornecendo assim a base do mecanismo de herança6. Um slot possui um nome único ao frame em que está definido. Os slots consistem de um conjunto de atributos de valores particulares — denominados facets. As facets contêm informações que descrevem características dos slots. Estas informações podem definir explicitamente os valores que o slot pode assumir ou indicar de que forma calcular ou deduzir o seu valor. As facets têm um papel fundamental na expressividade dos frames, por permitirem expressar restrições semânticas sobre os slots, assim como definir mecanismos de instanciação complexos e diversificados [ÁVILA e MONARD, 1992]. A Figura 7 a seguir mapeia o exemplo dos vinhos agora para a abordagem de frames. Os frames têm slots que referenciam outros frames. Por exemplo, o frame Wine tem três valores para o slot subclasses: WhiteWine, RedWine e RoseWine, que referenciam os frames de mesmo nome. A idéia da representação é a mesma descrita para o exemplo da Figura 2. 6 Característica herdada das redes semânticas. 21 Figura 7: Exemplo dos vinhos agora representado por uma estrutura de frames. O conceito de deamons, também coopera para que a representação de conhecimento por frames se torne muito flexível. Um deamon é uma função associada a um slot que é disparada quando alguma condição é satisfeita, assim como um trigger em um banco de dados. Podemos, por exemplo, ter um deamon que acrescenta uma determinada facet no slot, caso o valor inserido em uma outra facet seja aquele determinado pelo deamon. Os deamons também são úteis para manter a coerência no mecanismo de herança múltipla, e são responsáveis pelos mecanismos de inferência específicos de cada frame. Segundo Brachman e Nardi [2003], “devido às suas origens centradas no ser humano, tanto os frames quanto as redes semânticas foram consideradas mais atraentes e mais eficientes, do ponto de vista prático, do que as abordagens lógicas”, mas falharam no que diz respeito à caracterização da precisão semântica, levantando a questão de como fornecer semântica para estas estruturas de representação. Estudos neste sentido originaram um novo 22 formalismo chamado “redes de herança estruturada” (strutured inheritance networks), implementado no sistema KL-ONE [BRACHMAN, 1979] [BRACHMAN e SCHMOLZE, 1985]. Além de destacar a computação sobre uma taxonomia como o principal serviço do sistema, este formalismo também implementa vários construtores de conceitos como: conjunção, disjunção, negação, restrições universais de valor, hierarquias de papéis (role hierarchies), mapeamentos papéis-valores, entre outros. Depois disso, o KL-ONE foi incrementado com uma semântica ‘Tarski-style’ bem definida que fixou o significado das estruturas baseadas em rede7 e conduziu à definição das Lógicas Descritivas (do inglês Descriptions Logics – DL). Estas lógicas foram, inicialmente, chamadas de linguagens terminológicas “para enfatizar que a linguagem de representação foi utilizada para estabelecer a terminologia básica adotada em um domínio modelado”, e de linguagens de conceitos “para enfatizar o conjunto de construtores de conceito admitidos na linguagem” [BRACHMAN e NARDI, 2003]. Resumidamente uma lógica descritiva é um fragmento estruturado da lógica de primeira ordem. Um dos grandes ganhos das lógicas descritivas, em relação à lógica de primeira ordem, é que os sistemas que utilizam esta abordagem tomam cuidados para que a linguagem seja simples, de forma que toda inferência possa ser feita em tempo polinomial (em relação ao número de objetos), assegurando, assim, a tratabilidade da representação de conhecimento. Além disso, os sistemas de inferência que trabalham com DL permitem dois tipos especiais de inferência [FRANCONI, 2002]: eles permitem verificar se uma categoria C1 é um subconjunto de uma categoria C2 — um processo de inferência chamado de subsumption; e também permitem verificar se um objeto O pertence a uma categoria C — um processo de inferência chamado de “classificação”. Devido às suas características, a representação em DL não requer o uso de variáveis, sendo feita no nível de predicados. Assim, a sentença em lógica de primeira ordem 7 As redes semânticas e os frames, às vezes são assim chamados — estruturas baseadas em rede. Também são conhecidas como abordagens frames-like [BRACHMAN e NARDI, 2003] . 23 {x | Student(x) ∧ ∃y.friend(x,y) ∧ Married(y)} se torna em lógica descritiva Student ⊓ ∃friend.Married onde predicados como “Married” e “Student” denotam classes (ou conceitos — predicados unários); e predicados como “friend” denotam propriedades (ou papéis — predicados binários ou relações) [FRANCONI, 1994]. Segundo Brachman e Nardi [2003, p. 11], um conceito é interpretado como um conjunto de indivíduos, e um papel é interpretado como um conjunto de pares de indivíduos. Como exemplo, considere os conceitos atômicos Feminino, Pessoa, Mulher e os papéis atômicos temFilhos e temParentesFeminino. Utilizando os operadores de intersecção ⊓ (ou conjunção), união ⊔ (ou disjunção) e complemento ⌐ (ou negação) podemos descrever os conceitos: • “pessoas que não são femininas” Î Pessoa ⊓ ⌐Feminino • “indivíduos que são masculinos ou femininos” Î Feminino ⊔ Masculino Também podemos utilizar os quantificadores universal (∀) e existencial (∃) para definir restrições sobre os papéis. Por exemplo: • “indivíduos que têm filhos do sexo feminino” Î ∃temFilhos.Feminino • “indivíduos cujos filhos são todos do sexo feminino” Î ∀temFilhos.Feminino • “indivíduos que são pais” Î ∃temFilho.Pessoa ⊓ ∀temFilho.Pessoa. Outros tipos de restrições de papéis são as restrições de número, as quais restringem a cardinalidade do conjunto de valores para os papéis. Por exemplo: • “indivíduos que têm no máximo 3 filhos e no máximo 2 parentes do sexo feminino” Î (≤ 3 temFilhos) ⊓ (≤ 2 temParente.Feminino) • “uma mulher tendo no máximo duas filhas” Î Mulher ⊓ (≤ 2 temFilhos.Feminino) 24 Segundo Brachman e Nardi [2003, p.16] em uma base de conhecimento em DL existe a distinção clara entre o conhecimento intensional — conhecimento geral sobre o domínio do problema, e conhecimento extensional — conhecimento específico para um problema em particular. O conhecimento intensional, na forma de uma terminologia ou taxonomia, é chamado de TBox e traz declarações sobre as propriedades gerais dos conceitos; enquanto o conhecimento extensional, na forma de asserções, é chamado de ABox e traz declarações sobre indivíduos do domínio. A declaração mais básica em um TBox é a definição de um novo conceito em termos de outros previamente definidos. Podemos definir, por exemplo, o conceito “Mulher” como “uma pessoa do sexo feminino”: Mulher ≡ Pessoa ⊓ Feminino. Esta declaração é, normalmente, interpretada como uma equivalência lógica e quantifica condições necessárias e suficientes para classificar um indivíduo como uma mulher. A este tipo de definição chamamos de conceitos definidos. Quando não somos capazes de especificar todas as condições suficientes e necessárias para que um indivíduo seja classificado em um conceito, podemos definir um conceito primitivo, dizendo que um conceito deriva de outro: Pássaro ⊑ Animal, representando que pássaro é um tipo de animal. Este tipo de declaração, normalmente, é interpretado como implicação lógica e quantifica apenas condições necessárias para classificar que todo pássaro é um animal, mas não quantifica condições necessárias para classificar que todo animal é um pássaro. Em um ABox podemos fazer, por exemplo, uma asserção sobre um conceito, definindo um indivíduo chamado “Ana” que é uma pessoa do sexo feminino: Feminino ⊓ Pessoa(ANA). Esta definição nos permite derivar que “Ana” é uma mulher. Também podemos fazer uma asserção de um papel (propriedade): temFilhos(ANA, JOHN), especificando que “Ana” tem “John” como filho. 25 Vários outros sistemas que implementaram a lógica descritiva, além do KL-ONE, contribuíram com alguma característica relevante para a DL que conhecemos hoje. Entre eles podemos citar: Krypton [BRACHMAN, 1983], Classic [COHEN, 1993], Loom [BRILL, 1993] e GRAIL [RECTOR, 1997]. Nesta seção apresentamos as principais tecnologias de representação de conhecimento e suas particularidades. Na próxima seção vamos mostrar, especificamente, qual é o tipo de conhecimento no qual estamos interessados em representar — as ontologias — e a tecnologia de representação de conhecimento que escolhemos para isso. 3 Modelagem de conhecimento, ontologias e a linguagem OWL Segundo Guarino [1995], as pesquisa atuais em modelagem de conhecimento tendem a focar mais a natureza do raciocínio sobre o conhecimento do que a natureza do mundo real. Desta forma, as representações de conhecimento atuais ficam fortemente dependentes das tarefas para as quais elas são modeladas. De fato, Clancey [1993] já havia sugerido esta mudança de perspectiva, argumentando que “o objetivo primário da engenharia de conhecimento é modelar sistemas no mundo e não replicar como as pessoas pensam”, ou seja, a modelagem de um domínio deve ser feita de forma independente da tarefa a qual será realizada sobre ela. Realmente, segundo Guarino, existe uma forte tendência em valorizar as bases de conhecimento independentes de tarefa — chamadas de ontologias. A palavra ontologia vem do grego e significa “o estudo do ser”. Na filosofia, ontologia é uma área da metafísica que “estuda o ser ou a existência, assim como as categorias básicas existentes, tentando encontrar quais entidades e quais tipos de entidades existem” [ONTOLOGY, 2005]. Em ciência da computação, o sentido da palavra ontologia é um pouco diferente e vários autores tentam descrever seu sentido. Segundo Gruber [1996], uma ontologia é “uma especificação explícita de uma conceitualização”. Por conceitualização podemos entender um conjunto de objetos, conceitos e outras entidades de um domínio e o 26 relacionamento entre eles. Para Guarino e Giaretta [1995] o problema com a definição de Gruber é o termo ‘conceitualização’. Pois segundo os autores, uma ontologia deve trazer o aspecto intensional das coisas — as características de um conceito, “uma rede conceitual a qual se superpõe a vários possíveis ‘estados das coisas’” —, enquanto uma conceitualização “é um grupo de relações extensionais descrevendo um ‘estado particular das coisas’”. Para Borst [1997, p. 12] “uma ontologia é uma especificação formal e explícita de uma conceitualização compartilhada”, onde o termo “especificação explícita” diz respeito a conceitos, propriedades, relações, funções, restrições, axiomas, explicitamente definidos; o termo “formal” diz respeito a ser legível para computadores; e “compartilhado” quer dizer que existe um conhecimento consensual. Neste trabalho vamos utilizar a palavra ontologia como “um modelo conceitual sobre determinado domínio, onde podemos representar conceitos e os relacionamentos entre eles” [KNUBLAUCH, 2004], além de axiomas que regem estes relacionamentos. Mas quais são as razões que nos levam a desenvolver uma ontologia? Noy e McGuiness [2001] levantam as seguintes razões: • Para compartilhar entendimento comum de uma estrutura de informações entre pessoas ou agentes de software: este é um dos objetivos mais comuns ao se desenvolver uma ontologia. Como exemplo, podemos pensar em vários sites da web que utilizam termos de uma mesma ontologia como base. Desta forma, agentes de software serão capazes de extrair e agregar informações a estes diferentes sites. • Para permitir reuso do conhecimento de um domínio: se um grupo de pesquisa desenvolve uma ontologia detalhada sobre um domínio, outros pesquisadores poderão reutilizá-la em seus domínios. Assim, se precisarmos de uma grande ontologia, podemos agregar várias ontologias já existentes, ou se precisarmos de 27 uma ontologia mais completa podemos apenas estender uma ontologia já existente para os nossos propósitos. • Para tornar explícitas as suposições do domínio: especificações explícitas sobre o conhecimento do domínio são úteis para novos usuários que precisam aprender o que os termos significam no domínio. • Para separar o conhecimento do domínio do conhecimento operacional: o mesmo conhecimento do domínio pode ser utilizado para implementar várias operações necessárias no domínio. • Para analisar o conhecimento do domínio: quando uma especificação declarativa dos termos está disponível, a análise formal dos termos é extremamente valiosa na tentativa de reusar e estender as ontologias existentes. Apesar das ontologias representarem elementos diferentes para cada domínio, normalmente, elas possuem alguns componentes básicos que, segundo Gruber [1996] são: • Conceitos (ou classes) — são entidades organizadas taxonomicamente; • Relações (ou propriedades) — representam a interação entre os conceitos de um domínio; • Axiomas — são usados para modelar sentenças sempre verdadeiras; e • Instâncias — representam elementos específicos, ou seja, os próprios dados. Uma ontologia, em ciência da computação, é desenvolvida utilizando-se uma linguagem de construção de ontologias, ou seja, uma TRC. Existem inúmeras TRCs empregadas para esta tarefa, dentre as quais podemos citar [ALMEIDA, 2005]: • LOOM: que é descendente da KL-ONE e utiliza lógica descritiva e regras de produção para representar conceitos, taxonomias, relações, funções e axiomas [BRILL, 1993]. 28 • Ontolíngua: que combina características de frames e lógica de primeira ordem para representar conceitos, taxonomias, relações, funções, axiomas, instâncias e procedimentos [CHAUDHRI, 1998]. • OML (Ontology Markup Language): que é baseada em lógica descritiva e grafos conceituais, representando conceitos organizados em taxonomias, relações e axiomas [KENT, 1999]. • RDF (Resource Description Framework) e RDFS (RDF Schema): estes padrões são baseadas em grafos direcionados e apresentam uma sintaxe sobre XML. Eles foram desenvolvidos pelo W3 Consortium e utilizam um formalismo semelhante às redes semânticas para representar conceitos, taxonomias de conceitos e relações binárias [LASSILA e SWICK, 1999]. • OIL (Ontology Interchange Language): que combina linguagens baseadas em frames com a semântica formal e serviços de inferência de lógica descritiva [FENSEL, 2001], tendo como objetivo se tornar uma linguagem para Web Semântica. • DAML (DARPA Agent Markup Language) + OIL: que é uma linguagem de marcação semântica para a Web baseada em DAML, RDF e RDFS, tendo e características de linguagens lógicas [HORROCKS, 2001]. Devido ao crescente interesse em colocar semântica nos documentos da Web, segundo Antoniou e van Harmelen [2004], “pesquisadores dos Estados Unidos e da Europa identificaram a necessidade de linguagem mais poderosa [do que RDF e RDFS] para modelar ontologias”. Esta necessidade fez com que um projeto conjunto surgisse entre a linguagem DAML, proposta pelos Estados Unidos, e a linguagem OIL, proposta pelos europeus, nascendo, assim, uma linguagem mais rica, chamada de DAML+OIL. Esta linguagem foi o ponto de partida para que o grupo de trabalho em ontologias para Web da W3 Consortium 29 definisse a linguagem OWL, uma linguagem que tem por objetivo tornar-se um padrão amplamente aceito como uma linguagem para ontologias na Web. A linguagem OWL possui maiores facilidades para representar a semântica sobre um domínio e tem como objetivo modelar a semântica dos documentos na Web e tornar possível o processamento destes documentos por aplicações de software [MCGUINESS e HARMELEN, 2003]. A linguagem OWL compreende três sublinguagens que combinam um balanceamento entre expressividade e raciocínio eficiente, são elas: • OWL Full: é a sublinguagem que tem maior expressividade. Sua vantagem é a completa compatibilidade com RDF, tanto sintática como semanticamente. Sua desvantagem é que ela se torna tão poderosa quanto indecidível, tirando qualquer possibilidade de suportar raciocínio completo e eficiente; • OWL DL: com o intuito de manter a eficiência computacional, esta linguagem é uma sublinguagem de OWL Full que restringe como os construtores de OWL e RDF podem ser utilizados, assegurando que a linguagem corresponda a uma lógica descritiva (DL) bem estudada. Sua vantagem é suportar raciocínio eficiente e sua desvantagem está no fato de perder a compatibilidade com RDF. Desta forma todo documento em OWL DL é um documento em RDF, mas nem todo documento em RDF é um documento em OWL DL. • OWL Lite: é uma sublinguagem de OWL DL que restringe ainda mais o subconjunto dos construtores da linguagem. Sua vantagem é que o raciocínio sobre ela fica ainda mais simples. Sua desvantagem é, obviamente, a expressividade limitada. Neste trabalho, não pretendemos permitir que um especialista em um domínio seja capaz de representar qualquer tipo de conhecimento. Estamos interessados em dar apoio para que o especialista construa uma ontologia inicial de um domínio, suficiente para que o 30 engenheiro de conhecimento possa, mais tarde, refiná-la. Sendo assim, a linguagem por nós proposta deve ser mapeada para uma linguagem de construção de ontologias (ou TRC). Escolhemos a linguagem OWL DL para este mapeamento, (veja seção 4.2 para maiores detalhes sobre o mapeamento) primeiramente porque existem ótimos raciocinadores sobre ela, que com certeza facilitarão o nosso trabalho, como o RACER [HAARSLEV, 2005] e o PELLET [PARCIA e SIRIN, 2003]. Além disso, a linguagem OWL está se tornando uma linguagem padrão da W3 Consortium para Web Semântica, o que também nos possibilita utilizar a linguagem por nós proposta para que usuários leigos construam páginas com semântica na Web. Nesta seção apresentamos o conceito de ontologia, as principais linguagens utilizadas para a construção de ontologias e nossas razões para a escolha da linguagem OWL como a TRC para qual a linguagem por nós proposta será mapeada. Na próxima seção, vamos falar sobre como adquirir o conhecimento que é representado por meio de uma TRC. 4 O processo de aquisição de conhecimento Uma das fases mais importantes no desenvolvimento de um SBC é a fase em que o conhecimento do domínio é colocado na BC. Segundo Bittencourt [2001, p. 255], o desempenho de um SBC está diretamente ligado ao conhecimento armazenado em sua BC. Isto é bastante pertinente, pois é por meio do conhecimento armazenado na BC que o motor de inferência trabalha para resolver os problemas do domínio. Este conhecimento normalmente é adquirido de um especialista no domínio8 para o qual a aplicação está sendo desenvolvida. A este processo de passar o conhecimento de um especialista para um SBC, se dá o nome de aquisição de conhecimento. Ainda segundo Bittencourt [2001, p. 257], “a 8 Na verdade pode existir a necessidade de se adquirir conhecimento de mais de um especialista do domínio, como apresentado por Liou [1990, p. 216-219]. No entanto, para a discussão abordada aqui, não nos fará mal algum se nos referirmos a estes especialistas do domínio somente como um especialista. Será o que faremos de agora em diante. Além disso, estamos considerando que o especialista e o usuário do SBC sejam a mesma pessoa. Porém, se o sistema contemplar algum usuário que não é o especialista (o que é comum), este também deve fazer parte do processo de aquisição de conhecimento. 31 parte mais sensível no desenvolvimento de um SE [sistema especialista, ou SBC] é, certamente, a aquisição de conhecimento”. Ela é a parte mais problemática do desenvolvimento de um SBC porque o conhecimento adquirido é o elemento central do sistema e envolve a passagem de conhecimento de uma entidade humana (o especialista) para uma entidade “mecânica” (o computador). Segundo Stefik [1995, p. 295], “dentro da inteligência artificial e da engenharia de conhecimento, o termo aquisição de conhecimento refere-se a qualquer técnica pela qual sistemas de computadores podem obter o conhecimento que eles necessitam para executar suas tarefas”. Porém, o próprio Stefik observa que conhecimento não é como uma substância que pode ser adquirida ou transportada de um lugar para outro (como sugere o termo aquisição de conhecimento), ou seja, adquirir conhecimento é muito mais complexo do que simplesmente passar conhecimento de um especialista para um SBC. Como os especialistas normalmente não têm conhecimento sobre como construir um SBC (mais especificamente como representar conhecimento), o processo de aquisição de conhecimento envolve um profissional qualificado, o engenheiro de conhecimento (EC), que desempenha o papel de intermediário entre os especialistas e a BC. Segundo Russel e Norving [2004, p. 252], “um engenheiro de conhecimento é alguém que investiga um domínio específico, aprende quais conceitos são importantes nesse domínio e cria uma representação formal dos objetos e relações no domínio”. O processo de investigação de um domínio pode ser feito por meio de várias fontes de conhecimento, mas com certeza a fonte mais rica sobre o domínio é o especialista, pois ele já tem conhecimento sobre os procedimentos, estratégias e regras práticas sobre o domínio e qual é o conhecimento necessário para executá-los. Sendo assim, o engenheiro de conhecimento deve poder adquirir o conhecimento do especialista no domínio e codificá-lo na BC. No entanto, este processo apresenta algumas desvantagens como, por exemplo: 32 • A dificuldade do especialista em expressar seu próprio conhecimento — muitos dos procedimentos realizados pelos especialistas envolvem raciocínio implícito que eles não conseguem descrever. Isto ocorre porque a maioria do conhecimento na cabeça do especialista está “compilado” (como um programa compilado – rápido e eficiente, mas ilegível); • A dificuldade do EC em entender o que o especialista descreve – o EC tem acesso ao conhecimento do domínio por um ponto de vista diferente do especialista, o que complica o entendimento preciso deste conhecimento. Além disso, muitas áreas de especialidade são altamente técnicas, e o EC pode ter dificuldades em entendê-las e representá-las corretamente; • A participação de vários especialistas com diferentes experiências pode ser vantajosa, mas ela pode criar conflitos de opiniões e ainda mais problemas de comunicação [SEE, 1997]; • A personalidade do especialista também pode trazer dificuldades, pois este pode: (i) pensar que o sistema irá substituí-lo e, então, não cooperar; (ii) não gostar do seu trabalho e, então, fornecer informações incorretas; (iii) nunca estar disponível para as reuniões; (iv) não falar sobre assuntos pertinentes durante a reunião; (v) não gostar de se comunicar; (vii) concordar com tudo o que o EC diz por simples falta de interesse; (vii) pensar que sabe tudo sobre SBC e não deixar que o EC faça a sua parte [SEE, 1997]. • O custo do processo — esta forma de aquisição de conhecimento é um processo lento e consequentemente caro, e o tempo do EC (e também do especialista) é precioso; 33 • As limitações impostas pela TRC — as limitações de expressividade inerentes às TRCs muitas vezes não permitem ao EC expressar o conhecimento adquirido de forma adequada; Existem basicamente duas formas de um engenheiro de conhecimento obter conhecimento de um especialista: manualmente ou com a ajuda de computadores. Os métodos manuais utilizam técnicas emprestadas da engenharia de software, como entrevistas (estruturadas ou não), análise de protocolo (o especialista resolve alguns problemas enquanto narra o seu raciocínio em voz alta), análise de discurso (as expressões obtidas nas entrevistas são analisadas), observação do comportamento do especialista, entre outras. McGraw e Harbison-Briggs [1989] citam as duas fraquezas mais comuns destas abordagens manuais: o tempo e o custo necessário para que o EC tenha conhecimento suficiente do domínio para adquirir conhecimento do especialista e traduzi-lo em código de forma eficiente; e a variedade de habilidades (técnicas, abordagens e especialidades) que podem ser exigidas do EC durante o processo de aquisição. Mas a principal limitação destes métodos é que eles são lentos, caros, e à vezes podem não ter BRIGGS, podem um resultado [TURBAN e FRENZEL, 1992] preciso [MCGRAW e HARBISON- 1989]. Isto acontece, principalmente, por causa dos problemas de comunicação que ocorrer entre o EC e o especialista (como citado anteriormente) [TURBAN e FRENZEL, 1992], pois eles estão em contextos diferentes do problema. O especialista tem conhecimento pleno sobre o domínio, mas não tem conhecimento sobre como um SBC é construído. Já o EC, tem pleno conhecimento de como construir um SBC, mas muitas vezes não tem conhecimento nenhum sobre como o domínio da aplicação funciona. Segundo a semiótica [PEIRCE, 1931] [ECO, 1976], duas pessoas sempre geram interpretações diferentes sobre o mesmo objeto (neste caso o conhecimento do domínio), o mesmo podendo ocorrer com uma só pessoa em situações diferentes. Este fato pode ocasionar diferentes 34 interpretações sobre o mesmo assunto (entre o EC e o especialista), ocasionando um processo de aquisição de conhecimento ainda mais longo e custoso do que ele já se apresenta [TURBAN e FRENZEL, 1992], [MCGRAW e HARBISON-BRIGGS, 1989]. Pelas razões discutidas acima, o papel do EC como intermediário começou a ser questionado [ADELLI, 1990]. Surgiu então o interesse na possibilidade de fornecer ferramentas para aquisição de conhecimento, tornando este um processo direto entre o especialista e o computador. Segundo Turban e Frenzel [1992] estas ferramentas podem ser subdivididas em semi-automáticas — ferramentas de software que ajudam o especialista a construir a BC sem depender (muito ou quase nada) do EC9; e totalmente automáticas — ferramentas que permitem que a BC seja construída com pouca ou nenhuma necessidade de um EC e de um especialista10. Apesar destes tipos de ferramentas reduzirem muito a necessidade do EC como um intermediário, a maioria delas ainda precisa do EC para algumas tarefas como [ADELI, 1990]: • Assessorar o especialista no processo interativo de aquisição de conhecimento; • Gerenciar interativamente a ferramenta, configurando-a apropriadamente; • Editar as partes mais complexas da BC em colaboração com o especialista; • Validar a aplicação da BC em colaboração com o especialista; • Implementar a interface do sistema em colaboração com especialista e usuários; • Treinar os usuários para uso efetivo do SBC. Adeli ainda chama a atenção da necessidade do EC estar presente validando o que foi feito pelo especialista: “a atenção para o controle de qualidade através da validação de cada 9 McGraw e Harbison-Briggs [1989] diz que o especialista pode ser treinado para agir como o EC, mas isto pode não ser adequado em todos os casos. Desta forma, MacGraw e Harbison-Briggs defendem que deve ser permitido ao especialista colocar informações sobre o domínio do sistema diretamente, poupando, assim, tempo do EC que ficará livre para refinar o conhecimento e implementar o SBC. 10 Pesquisas no campo da aprendizagem de máquina permitem que o conhecimento seja induzido por meio da entrada de exemplos dos especialistas. A ferramenta permite a indução de uma lei através dos exemplos, mas a aquisição de conhecimento pode não ser de alta qualidade [MCGRAW e HARBISON-BRIGGS, 1989]. 35 passo do processo de aquisição de conhecimento é a chave para o desenvolvimento efetivo do sistema”. McGraw e Harbison-Briggs [1989] também enumeram algumas vantagens de se utilizar ferramentas de aquisição de conhecimento: • O EC gasta menos tempo aprendendo o domínio, sua linguagem e seus conceitos; • O SBC reflete a visão do especialista do domínio ao invés de uma visão intermediária; • A qualidade do conhecimento pode ser melhorada porque o especialista interage diretamente com a ferramenta que traduz conhecimento em código; As principais ferramentas de aquisição de conhecimento têm como objetivo construir um modelo para o domínio da aplicação. Vamos citar algumas destas ferramentas [MCGRAW e HARBISON-BRIGGS, 1989]: • Teiresias: foi projetada para permitir aquisição automática de conhecimento novo para o sistema MYCIN [BUCHANAN e SHORTLIFE, 1984]. A ferramenta faz uso das regras de encadeamento-para-frente do MYCIN para adquirir, refinar e editar conhecimento novo; • Ferramentas baseadas em repertory grids: ajudam o EC a determinar a conceitualização expressada pelo especialista para o seu campo de conhecimento. São úteis para trabalhar com análises que envolvem classificação, interpretação ou diagnóstico de problemas. Consistem de uma tabela em que as linhas contêm problemas do domínio, e as colunas contêm algumas soluções para estes problemas. O especialista examina as soluções e determina uma nota (valor) para cada uma delas. A ferramenta, então, ajudará o especialista a melhorar o conhecimento colocado na tabela. Entre este tipo de ferramenta podemos citar o 36 sistema de transferência de especialidade (Expertise Transfer System – ETS), a BDM-KAT, a KNACK, e a MORE. • Ambientes de aquisição de conhecimento: o AQUINAS — baseada em repertory grids oferece representação hierárquica permitindo ao especialista decompor problemas em conjunto menores; o KRITON — ferramenta de aquisição de conhecimento híbrida, que combina vários métodos para capturar conhecimento, inclusive automatizando os métodos de entrevista; e o TDE — (TEST Development Environment) permite ao EC ou especialista treinado construir um SBC para TEST (Troubleshooting Expert System Tool), por meio de entrevistas automáticas com o especialista. O problema é que estas ferramentas de aquisição de conhecimento ainda são voltadas para a pesquisa e específicas para um certo tipo de aplicação. Desta forma, para que elas sejam utilizadas para outras aplicações, elas necessitam de mudanças, que normalmente não são simples de serem feitas. Em conseqüência disso, estas ferramentas tornam-se caras e bastante limitadas [MCGRAW e HARBISON-BRIGGS, 1989] e, assim, o processo de aquisição de conhecimento automatizado fica limitado à existência de ferramentas adequadas para o SBC que está sendo desenvolvido. Ainda sobre o processo de aquisição de conhecimento (facilitado ou não por uma ferramenta), é importante dizer que este é um processo interativo e incremental. Um SBC é desenvolvido e testado usando um grande conjunto de casos. Os resultados obtidos são discutidos entre o EC e o especialista para determinar se o sistema necessita de ajustes. Em caso afirmativo, o sistema continua o seu processo de desenvolvimento e aquisição de conhecimento. Após a conclusão do sistema, Stefik [1995, p. 298] destaca que “a BC é mudada periodicamente para refletir mudanças ou extensões para o domínio de conhecimento” e “... em situações de mudanças os sistemas [baseados em] de conhecimento 37 necessitam acomodar novo comportamento sempre baseado em um novo conhecimento”. Desta forma, a BC do SBC estará sempre em constante atualização. Neste capítulo mostramos o contexto para o qual estamos desenvolvendo este trabalho. Apresentamos o que é um sistema baseado em conhecimento, o problema de representar conhecimento e as principais tecnologias utilizadas para representar conhecimento. Além disso, apresentamos o conceito de ontologia — o tipo de conhecimento no qual estamos interessados neste trabalho —, as principais linguagens utilizadas pra construir ontologias e os motivos que nos levaram a escolher a linguagem OWL DL como a TRC a ser utilizada neste trabalho. No próximo capítulo vamos falar sobre o uso da linguagem natural controlada e a origem da linguagem por nós proposta, além de apresentarmos a linguagem natural controlada que é o objetivo deste trabalho. 38 Capítulo 3 O uso da linguagem natural controlada N este capítulo vamos discutir as razões porque a linguagem proposta por este trabalho é baseada em linguagem natural. Vamos apresentar, também, a origem da linguagem proposta e os detalhes de seu desenvolvimento, assim como a sua expressividade. 1 Porque utilizar linguagem natural controlada Como discutido anteriormente, a proposta deste trabalho é fornecer um ambiente para aquisição de conhecimento no qual o especialista poderá interagir com o computador, de forma direta, para criar um modelo do conhecimento que dispõem sobre o domínio, o qual poderá ser utilizado em um sistema baseado em conhecimento. Em geral, o especialista tem conhecimento sobre o domínio do sistema, mas não tem conhecimento sobre a tecnologia de representação de conhecimento que é utilizada para codificar a base de conhecimento. Sendo assim, temos duas opções: ou fazemos com que o especialista aprenda a expressar seu 39 conhecimento por meio da TRC utilizada no sistema; ou fornecemos um meio para que o especialista expresse seu conhecimento de forma mais natural, utilizando uma linguagem que facilite o seu trabalho. O processo de aprendizagem de uma tecnologia de representação de conhecimento é uma tarefa árdua e demorada, pois a maioria destas tecnologias é projetada visando a melhor forma de representar conhecimento e mantendo sua eficiência computacional, sem se preocupar com o seu processo de aprendizagem ou sua forma de comunicação com as pessoas [FUCHS, SCHWERTEL e SCHWITTER, 1999] [HALL, 1990]. Assim, seus usuários têm que aprender uma forma de expressar seu conhecimento ao sistema por meio de uma linguagem totalmente diferente daquela a que estão acostumados a usar no dia-a-dia. Uma outra forma de fazer com que o especialista coloque seu conhecimento no sistema é disponibilizar uma linguagem parecida com alguma que ele já conheça como meio para expressar o seu conhecimento. Deste ponto de vista, a linguagem mais adequada seria a linguagem natural (LN), a qual é de conhecimento de todos e tem aspectos comunicativos bastante apropriados. Entretanto, além da ambigüidade inerente a tal linguagem, o processamento de sua forma irrestrita ainda não é viável, apesar dos enormes avanços alcançados [INTERNATIONAL..., 2003]. No entanto, podemos utilizar apenas um subconjunto da LN, de forma que este subconjunto não contenha ambigüidade, do ponto de vista do especialista e do parser que vai processá-lo, e mantenha, assim, seu processamento viável e seus aspectos comunicativos adequados às necessidades do problema. A utilização da linguagem natural controlada (LNC) tem sido explorada, com relativo sucesso, em tarefas como a especificação de requisitos [FUCHS, SCHWERTEL e SCHWITTER, 1999], a aquisição e representação de conhecimento [HOEFLER, 2004] [SCHWITTER, 2004] [PULMAN, 1996], entre outras. A eliminação da ambigüidade e a facilidade de aprendizado e uso fazem com que as LNCs também sejam amplamente utilizadas para a especificação de procedimentos nos quais 40 não pode existir nenhum tipo de ambigüidade como, por exemplo, em manuais de usuário [ALTWARG, 2000]. Alguns exemplos de uso das LNCs em empresas são: a LNC utilizada pela Boeing para manutenção do espaço aéreo [BOEING, 2005] e a LNC utilizada pela Scania para manutenção de caminhões [ALMQVIST e HEIN, 1996], entre outros. Um outro exemplo de sucesso de uma LNC é a linguagem ACE — Attempt Controlled English — que foi inicialmente projetada para especificação de requisitos [FUCHS, SCHWERTEL e SCHWITTER, 1999]. O sucesso de seu emprego nesta tarefa, e as pesquisas decorrentes de sua melhoria fizeram com que ela evoluísse para uma linguagem que pode ser utilizada na aquisição e representação de conhecimento [HOEFLER, 2004]. Em termos de conhecimento prévio, ela exige somente conhecimento básico da gramática inglesa para que um usuário possa utilizá-la. No capítulo 6 examinaremos as diferenças entre a linguagem ACE e a linguagem por nós proposta. Utilizar uma LNC significa dizer que todas as sentenças da LNC são corretas na LN, mas nem todas as sentenças da LN são permitidas na LNC, já que esta é um subconjunto daquela. Desta forma, o especialista somente terá que aprender quais são os tipos de sentenças que ele pode e quais ele não pode utilizar para expressar o seu conhecimento do domínio, o que é bem mais simples do que aprender a expressar seu conhecimento de uma forma totalmente nova, ou seja, por meio de uma tecnologia de representação de conhecimento. A LNC permite que o especialista utilize mecanismos comunicativos (como quantificadores, qualificadores e figuras de linguagem) para expressar o seu conhecimento de forma muito mais natural. No entanto, é extremamente importante que o conjunto de mecanismos comunicativos permitidos na LNC com intuito de facilitar a expressão do especialista mantenha o processamento computacional da LNC dentro de uma faixa de eficiência razoável, de forma a não inviabilizar sua implementação. 41 2 A origem da linguagem natural controlada proposta A linguagem natural controlada por nós proposta tem sua origem no trabalho de Da Silva [2001]. Em sua tese Da Silva apresenta uma análise da linguagem utilizada por usuários finais para expressar planos no dia-a-dia como, por exemplo, receitas e manuais de faça-vocêmesmo. Naquele trabalho, Da Silva visava, dentre outras coisas, a obtenção de uma linguagem-tipo na forma de uma LNC para programação por usuários finais. Contudo, a função final desta linguagem era a de atualizar uma base de conhecimento construída pelo designer da aplicação, contendo a ontologia e as extensões criadas pelos usuários. Um ponto relevante ressaltado naquele trabalho é que a estrutura dos planos descritos pelas pessoas no dia-a-dia permite expressar dois tipos de conhecimento: o procedimental, quando especificam o processo a ser executado sobre as entidades de um domínio; e o declarativo, quando introduzem as entidades a serem usadas no processo (que é semelhante ao tipo de declaração feita na definição da ontologia de um domínio). A diferença entre as linguagens comumente empregadas pelos usuários finais para a especificação de entidades e processos e as linguagens formais (linguagens de programação, tecnologias de representação de conhecimento, entre outras) está, principalmente, no mecanismo empregado para a referenciação a objetos. A linguagem normalmente empregada por estes usuários apresenta uma forma muito natural de operar sobre objetos estruturados, usando conhecimento de senso comum do domínio e mecanismos lingüísticos como quantificadores (do tipo “all”, “every” e “each” e plurais), qualificadores, seletores e figuras de linguagem (anáforas e elipses) para facilitar a referenciação a estes objetos. Tais mecanismos ajudam as pessoas a fazerem referência às características de objetos complexos de uma forma direta e simples, uma vez que eles ocultam muitos detalhes sobre a estrutura usada na implementação do objeto. Além disso, é importante observar que os substantivos, que descrevem objetos no domínio, geralmente são substituídos por pronomes nas referências 42 subseqüentes a sua introdução no texto, um caso de anáfora. Também é comum o uso de elipses, limitadas às formas básicas, para ocultar objetos e verbos das sentenças. Neste caso, os nomes ocultados sempre se referem a objetos já mencionados no contexto formado pelas sentenças anteriores, podendo ser omitidos sem prejuízo à sua interpretação. Estes tipos de mecanismos comunicativos são muito importantes, pois tornam o processo de descrever algo por meio de uma linguagem muito mais natural para os usuários. Além disso, eles previnem a necessidade de escrever e, portanto, interpretar sentenças muito longas, o que é particularmente difícil para as pessoas. Por outro lado, devido às suas características, estas referências são de simples resolução, facilitando em muito sua implementação. Deste modo, o custo computacional exigido para a resolução destes mecanismos se torna baixo, quando comparado aos lucros obtidos na comunicação com o emprego dos mesmos. A linguagem de planos analisada por Da Silva [2001] deu origem a uma linguagemtipo na forma de uma LNC para programação por usuários finais. Esta linguagem-tipo está dividida em três sublinguagens, que são as sublinguagens de: • Referenciação a objetos, que incorpora os mecanismos comunicativos anteriormente citados, atuando de forma ortogonal às outras sublinguagens, visando aumentar a coesão textual e, portanto, facilitar a interpretação por parte do usuário final; • Metalinguagem, que permite a criação e extensão da ontologia de um domínio por meio da definição de conhecimento declarativo, fazendo amplo uso da sublinguagem de referenciação a objetos; • Controle, que permite a criação e definição do conhecimento procedimental e/ou do controle inferencial em alguns casos, também utilizando a sublinguagem de referenciação. 43 É importante ressaltar que, apesar do corpus empregado na análise de Da Silva referirse à língua inglesa, os comentários lá realizados também são válidos para outras línguas (feitos os devidos ajustes), uma vez que foram analisados elementos que pertencem aos “mecanismos lingüísticos universais” [LYONS, 1981] como, por exemplo, a estrutura frasal das diferentes formas de se referenciar um objeto nas linguagens naturais. Para a linguagem proposta neste trabalho faremos uso somente da sublinguagem de referenciação e da metalinguagem. Na próxima seção vamos apresentar a linguagem natural controlada por nós proposta para criações de ontologias, obtida a partir da linguagem-tipo de Da Silva. 3 A linguagem natural controlada proposta A linguagem-tipo proposta por Da Silva [2001] foi inicialmente projetada para a programação por usuários finais. Como o nosso objetivo é auxiliar o especialista a escrever sua visão do domínio e este especialista pode ser considerado, na maioria das vezes, um usuário final, podemos fazer uso da linguagem-tipo proposta por Da Silva com alguns ajustes. Desta forma, podemos aproveitar os ganhos comunicativos e os estudos quanto à facilidade de uso desta linguagem. Porém, como o objetivo da linguagem-tipo é um pouco diferente do nosso, fizemos algumas adaptações na mesma para que atendesse as nossas necessidades. Estas adaptações foram necessárias para aproveitar os recursos disponibilizados pela linguagem OWL/DL e aumentar, assim, a expressividade da linguagem proposta em relação a TRC adotada neste trabalho. A linguagem resultante desta adaptação conserva a divisão entre a sublinguagem de referenciação a objetos e a metalinguagem. Um exemplo dos elementos presentes na sublinguagem de referenciação proposta é mostrado na Tabela 1 a seguir: 44 Tabela 1: Tipos de referências válidas na sublinguagem de referenciação Tipo da referência noun [a/an] noun noun(s) cardinal noun(s) the/this noun the noun of [the] noun pronouns all [the] noun(s) each/every noun Reference and reference Exemplo wine a wine wines three grapes the wine the sender of the message It has … all [the] wines each message a color and a body Esta sublinguagem de referenciação é o diferencial da linguagem proposta em relação às linguagens citadas por Pulman [1996]. Ele destaca que as sentenças que ele chamou de “notações no estilo de macro” (parecidas com as sentenças da metalinguagem proposta) não têm flexibilidade. Pulman utiliza exemplos do tipo: A <subtype> is_a <type>, onde os elementos entre <...> somente podem ser objetos. A metalinguagem por nós proposta é formada por sentenças semelhantes, porém, permitimos a utilização de referências mais ricas ao invés de somente nomear objetos simples. Estas referências permitem que os usuários trabalhem com objetos complexos de forma natural, inclusive com a utilização de anáforas, o que nos traz um ganho de usabilidade da linguagem, pois ela ficará mais próxima daquela com a qual o usuário está acostumado a se expressar. Por exemplo, se o especialista introduziu o elemento “book” no discurso em uma sentença anterior, digamos, “Book is a publication”, ele poderá referenciá-lo em outras sentenças posteriores utilizando somente o pronome “it”, por exemplo, “It has chapters and sections”. A metalinguagem proposta faz grande uso da sublinguagem de referenciação e será empregada para definir a ontologia do domínio propriamente dita. Cada sentença permitida na metalinguagem tem um propósito na definição da ontologia do domínio. As sentenças e seus propósitos são apresentados no final desta seção. 45 Antes de mostrarmos as sentenças permitidas na metalinguagem é necessário explicar alguns conceitos importantes sobre a TRC que será utilizada. Em OWL DL uma classe é vista como se fosse um conjunto de indivíduos com características similares. Elas são representadas por meio de descrições de classe, que podem ser combinadas com axiomas de classes para representá-las. Segundo Bechhofer et al [2004], uma descrição de classe pode ser: • Um identificador de uma classe, que descreve a classe por meio apenas de um nome (sem especificar nenhum detalhe sobre a classe). Exemplo: a definição de uma classe “wine”. <owl:Class rdf:ID="Wine"/>; • Uma enumeração exaustiva dos indivíduos, que juntos formam as instâncias da classe. Exemplo: a definição de uma classe com todas as cores de vinhos. <owl:Class> <owl:oneOf rdf:parseType="Collection"> <owl:Thing rdf:about="#Red"/> <owl:Thing rdf:about="#Rose"/> <owl:Thing rdf:about="#White"/> </owl:oneOf> </owl:Class> • Uma restrição de propriedade, que descreve a classe de todos os indivíduos que satisfazem uma restrição de propriedade particular. As restrições de propriedade podem ser restrições de valores ou de cardinalidade. Por exemplo, a restrição de valor constituída pela definição de uma classe na qual todos os valores da propriedade “hasParent” são da classe “Human”. <owl:Restriction> <owl:onProperty rdf:resource="#hasParent" /> <owl:allValuesFrom rdf:resource="#Human" /> </owl:Restriction> Ou a restrição de cardinalidade constituída pela definição de uma classe na qual todos os indivíduos têm no máximo dois valores para a propriedade “hasParent”. 46 <owl:Restriction> <owl:onProperty rdf:resource="#hasParent" /> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">2 </owl:maxCardinality> </owl:Restriction> • A interseção ou união de duas ou mais descrições de classes como, por exemplo, a definição uma classe “Woman”, que é a intersecção de uma classe “Person” com uma classe “Female”. <owl:Class rdf:ID="Woman"> <owl:intersectionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Person" /> <owl:Class rdf:about="#Female" /> </owl:intersectionOf> </owl:Class> • O complemento da descrição de uma classe como, por exemplo, a definição de uma classe “NotMeat”, a qual é o complemento de uma classe “Meat”. <owl:Class rdf:ID="NotMeat"> <owl:complementOf> <owl:Class rdf:about="#Meat"/> </owl:complementOf> </owl:Class> Um axioma de classe, por sua vez, contém tipicamente componentes adicionais que declaram condições necessárias e/ou suficientes para que um indivíduo pertença a esta classe. A linguagem OWL DL contém três construtores da linguagem que combinam descrições de classes com axiomas de classes: • subClassesOf: que nos permite definir uma descrição de classe a qual é um subconjunto de outra descrição de classe como, por exemplo, a definição de uma classe “Bird” que é uma subclasse de uma classe “Animal”. <owl:Class rdf:ID="Bird"> <rdfs:subClassOf rdf:resource="#Animal"/> </owl:Class> Na definição de uma classe utilizando o axioma subClassOf, o objeto da declaração subClassOf deve ser um identificador de classe (como no exemplo acima) ou uma restrição de propriedade (que também representa uma classe). 47 Axiomas de subclasse nos fornecem uma definição parcial para uma classe, ou seja, eles estabelecem condições necessárias mas não suficiente para classificarmos um indivíduo como membro de uma determinada classe; • equivalentClass: que nos permite definir uma descrição de classe que é exatamente igual à outra definição de classe como, por exemplo, a definição de uma classe “Automobile” que é equivalente a descrição de uma classe “Car”. <owl:Class rdf:about="#Automobile"> <equivalentClass rdf:resource="#Car"/> </owl:Class> • disjointWith: que nos permite definir que uma descrição de classe não tem nenhum membro em comum com uma outra definição de classe como, por exemplo, a definição de uma classe “Man” que não tem nenhum indivíduo em comum com a classe “Woman”. <owl:Class rdf:about="#Man"> <owl:disjointWith rdf:resource="#Woman"/> </owl:Class> Alguns destes construtores de classes não são contemplados em nossa linguagem. Alguns, como intersectionOf, unionOf, complementOf, simplesmente porque ainda não conseguimos uma sentença em linguagem natural que seja simples e intuitiva para que o usuário leigo (como o especialista) não tenha dificuldades em entendê-la e usá-la. Outros, como class e disjointWith, são utilizados implicitamente para o mapeamento de uma sentença em LNC para OWL DL, mas a linguagem não contempla sentenças que podem ser mapeadas diretamente para eles. Os construtores que são contemplados ou não na linguagem proposta são apresentados na Tabela 3 da seção 4.2. A linguagem proposta, além da definição de classes, ainda permite a definição de propriedades para as classes. Uma propriedade em OWL DL é uma relação que pode ligar uma classe a uma outra classe, ou uma classe a um valor. Na seção 4.2 mostraremos os 48 construtores da linguagem OWL DL e explicaremos quais foram ou não utilizados e o porquê da não utilização. A seguir vamos apresentar os tipos de sentenças da metalinguagem, explicitando seu propósito, um exemplo de uso e sua sintaxe na metalinguagem. É interessante explicar a notação utilizada nesta parte. Elementos sublinhados são entidades que estão sendo inseridas na ontologia e, portanto, não fazem parte do léxico; elementos ‘em negrito e aspas simples’ são elementos fixos da linguagem e a abreviação “Ref” significa a presença de uma referência como as mostradas na Tabela 1 (a qual pode ser composta). As referências marcadas com * poderão ser qualquer uma das classes já definidas na ontologia. As referências marcadas com # poderão ser, além de qualquer uma das classes da ontologia, qualquer um dos tipos de dados permitidos pela TRC empregada. As referências marcadas com + poderão ser qualquer uma das propriedades já definidas na ontologia para a classe especificada na sentença. E as referências marcadas com & poderão ser qualquer uma das propriedades já definidas na ontologia, mas que ainda não tiveram seu domínio especificado. Sentenças para construção de classes: 1) Propósito: definir uma classe (Ref1) que é uma subclasse de uma outra classe (Ref2). Exemplo: a) Wine is a kind of drink. b) A book is a kind of publication. c) Wine is a drink. d) A book is a publication. Metalinguagem: a) Ref1 ‘is a kind of’ Ref2* ‘.’ b) Ref1 ‘is a’ Ref2* ‘.’ 49 — Nos exemplos “a” e “c”, Ref1 contempla substantivos não contáveis (e.g. wine), que não admitem o artigo indefinido (“a”). Enquanto, nos exemplos “b” e “d”, Ref1 contempla substantivos contáveis (e.g. book), que exigem o artigo indefinido (como em “a book”). Para os propósitos da linguagem, atualmente, não existe muita diferença se o substantivo é contável ou não contável. Sendo assim, por enquanto, estamos permitimos que os usuários escolham a forma que julgarem mais natural de se escrever (com ou sem o artigo indefinido). Porém, gramaticalmente falando, seria errado escrever “a wine”, em uma sentença com o sentido de referenciar vinhos em geral. Como trabalhos futuros, pretendemos fazer a verificação de quais substantivos são contáveis ou não e, conseqüentemente, permitir somente a forma gramaticalmente correta. 2) Propósito: definir uma classe (Ref1) que é uma subclasse de uma outra classe (Ref2) e que também tem propriedades (Ref3). Exemplo: a) Wine is a kind of drink that has color. b) A book is a kind of publication that has an ISBN. c) Wine is a drink that has color. d) A book is a publication that has an ISBN. Metalinguagem: a) Ref1 ‘is a kind of’ Ref2* ‘that has’ Ref3 ‘.’ b) Ref1 ‘is a’ Ref2* ‘that has’ Ref3 ‘.’ — Nos exemplos “a” e “c”, Ref1 e Ref3 contêm substantivos não contáveis que não admitem o uso do artigo indefinido (como “wine” e “color”). Enquanto, os exemplos “b” e “d”, contêm substantivos contáveis que admitem o uso do artigo indefinido (como em “a book” e “an ISBN”). 50 3) Propósito: definir classes que são partes (Ref1) de uma classe já definida (Ref2). Exemplo: A motor is part of an automobile. Metalinguagem: Ref1 (‘is part of’ | ‘are parts of’) Ref2* ‘.’ 4) Propósito: definir uma classe por meio de uma restrição de valor para uma propriedade. A restrição determina que todos os indivíduos de uma classe (Ref1) que têm, no mínimo, um indivíduo de outra classe (Ref3) como valor para uma propriedade (Ref2) fazem parte desta classe. Ou seja, esta restrição requer que pelo menos um valor para a propriedade (Ref2) seja um indivíduo de uma classe determinada (Ref3) para que ele faça parte da classe que está sendo definida (Ref1). Podem existir outros valores para a propriedade que não são indivíduos da classe determinada (em Ref3). Exemplos: a) A wine has at least one maker that must be a winery. b) All wines have at least one maker that must be a winery. Metalinguagem: Ref1 (‘has’|‘have’) at least one’ Ref2 ‘that must be’ Ref3* ‘.’ — No exemplo “a”, Ref1 contêm um substantivo considerado não contável (e.g. wine) com o artigo indefinido (“a wine”). Isto é possível porque neste tipo de sentença Ref1 está referenciando uma instância da classe (um indivíduo da classe wine). Sendo assim, dependendo do significado da sentença, substantivos não contáveis podem admitir o artigo indefinido. 5) Propósito: definir uma classe por meio de uma restrição de valor para uma propriedade. A restrição determina que todos os indivíduos de uma classe (Ref1) que têm como valor, para uma propriedade (Ref2), somente indivíduos de uma outra classe (Ref3) fazem parte desta classe. Ou seja, esta restrição requer que todos os valores para a propriedade (Ref2) sejam indivíduos de uma classe determinada (Ref3) para que ele faça parte da classe que está sendo definida (Ref1). Esta restrição não requer que o indivíduo da classe que está sendo 51 definida (Ref1) tenha um valor para a propriedade (Ref2), mas se houver um valor, ou mais, estes devem ser do tipo da classe determinada (em Ref3). Exemplo: a) All the wine makers must be wineries. b) All the makers of wines are wineries. Metalinguagem: a) Ref1 Ref2 ‘must be’ Ref3* ‘.’ b) Ref2 Ref1 ‘are’ Ref3* ‘.’ — Ref1 será uma referência quantificada universalmente (“all”), neste caso, o uso do artigo definido “the” é opcional. — Ref2 será uma referência que qualifica a propriedade de uma classe (e.g. “makers of wine” ou “wine makers”). 6) Propósito: definir uma classe por meio de uma restrição de valor para a propriedade. A restrição determina que todos os indivíduos de uma classe (Ref2) que têm um valor determinado (Ref3) como valor para uma propriedade (Ref1) fazem parte desta classe. Ou seja, todo indivíduo que tiver pelo menos uma instância da propriedade (Ref1) com um valor determinado (Ref3) será um indivíduo desta classe (Ref2). Exemplo: The color of a redWine must be red. Metalinguagem: Ref1 ‘of’ Ref2 ‘must be’ Ref3 ‘.’ — Ref1 será uma referência definida, pois qualifica a propriedade de uma classe. O pronome definido “the” é utilizado na função de um determinante catafórico [QUIRK et al, 1972, p.155]. — Ref3 poderá ser qualquer um dos valores possíveis para a propriedade definida em Ref1. 52 7) Propósito: definir uma classe por meio de uma restrição de cardinalidade para uma propriedade. A restrição determina que todos os indivíduos de uma classe (Ref1) que têm exatamente uma quantidade de valores determinada para a propriedade (Ref2) fazem parte desta classe. Exemplo: A wine must have exactly one maker. Metalinguagem: Ref1 ‘must have exactly’ Ref2 ‘.’ — Ref2 será uma referência do tipo “cardinal noun”. — Novamente, Ref1 está referenciando uma instância de uma classe (um indivíduo da classe “wine”). Por isso, o uso do artigo indefinido é admitido com um substantivo não contável. 8) Propósito: definir uma classe por meio de uma restrição de cardinalidade para uma propriedade. A restrição determina que todos os indivíduos de uma classe (Ref1) que têm no mínimo uma quantidade de valores determinada para a propriedade (Ref2) fazem parte desta classe. Exemplo: A wine must have at least one maker. Metalinguagem: Ref1 ‘must have at least’ Ref2 ‘.’ — Ref2 será uma referência do tipo “cardinal noun”. — Novamente, Ref1 está referenciando uma instância de uma classe (um indivíduo da classe wine). Por isso, o uso do artigo indefinido é admitido com um substantivo não contável. 9) Propósito: Definir uma classe por meio de uma restrição de cardinalidade para a propriedade. A restrição determina que todos os indivíduos de uma classe (Ref1) que têm no máximo uma quantidade de valores determinada para a propriedade (Ref2), fazem parte desta classe. 53 Exemplos: A wine must have at most one maker. Metalinguagem: Ref1 ‘must have at most’ Ref2 ‘.’ — Ref2 será uma referência do tipo “cardinal noun”. 10) Propósito: definir uma classe (Ref1) por meio da enumeração exaustiva de seus indivíduos (Ref2). Exemplo: A wine can only be a redWine, a roseWine and a whiteWine. Metalinguagem: Ref1 ‘can only be’ Ref2 ‘.’ — Ref2, normalmente, será uma referência composta. — Novamente, Ref1 está referenciando uma instância de uma classe (um indivíduo da classe wine). Por isso, o uso do artigo indefinido é admitido com um substantivo não contável. 11) A sentença a seguir pode ser utilizada para três propósitos: a) Definir uma classe (Ref1) que é exatamente igual uma outra classe que já foi definida (Ref2). b) Definir uma propriedade (Ref1) que é exatamente igual a uma outra propriedade já definida (Ref2). c) Definir um indivíduo de uma classe (Ref1) que é exatamente igual a um outro indivíduo já definido (Ref2). Exemplo: A car is also known as an automobile. Metalinguagem: Ref1 ‘is also known as’ Ref2*+ ‘.’ — A diferenciação entre cada um dos propósitos será feita mediante uma consulta na base de conhecimento para verificar se Ref2 é uma classe, uma instância ou uma propriedade já definida. 54 Sentenças para definição de propriedades e valores para as propriedades : 12) Propósito: definir propriedade(s) (Ref2) para uma classe já definida (Ref1). Exemplo: a) A wine has a maker. b) A book has an edition. Metalinguagem: Ref1* (‘has’ | ‘have’) Ref2 ‘.’ 13) A sentença a seguir pode ser utilizada para dois propósitos: a) Definir um tipo (Ref2) para uma propriedade (Ref1) já definida anteriormente. b) Definir uma instância (Ref1) de uma classe (Ref2). Exemplos: a) The maker is a winery. b) W1 is a wine. Metalinguagem: Ref1& (‘is’ | ‘are’) Ref2# ‘.’ — A diferenciação entre os dois propósitos é feita utilizando a estrutura da referência Ref1. Para o propósito de sentenças do tipo “a” o artigo definido “the” é utilizado na função de um determinante anafórico [QUIRK et al, 1972, p.155]. Ou seja, com o propósito de referenciar uma entidade do discurso que já foi previamente definida. Desta forma, toda vez que Ref1 for uma referência definida, estamos definindo um tipo para uma propriedade já existente na ontologia (e, neste caso, Ref2 será uma referência indefinida), caso contrário, estaremos introduzindo uma nova instância de uma classe na ontologia. Sentenças do tipo “a” normalmente são utilizadas após a definição de uma propriedade, empregando-se sentenças do tipo 2, 4, 5, 6, 7, 8, 9 ou 12. 14) Propósito: definir os valores possíveis (Ref2) para uma propriedade já definida anteriormente (Ref1). 55 Exemplo: The color has possible values red, white and rosé. Metalinguagem: Ref1& ‘has possible values’ Ref2 ‘.’ — Este tipo de sentença é, normalmente, utilizado após a definição de uma propriedade, utilizando sentenças do tipo 2, 4, 5, 6, 7, 8, 9 ou 10. — Novamente o artigo “the” é utilizado na função de um determinante anafórico, pois faz referência à propriedade definida anteriormente, e Ref2, normalmente, é uma referência composta. 15) Propósito: definir propriedades (Ref2) para uma classe já definida (Ref1) e a faixa de valores possíveis (Ref3) para estas propriedades (enumeração). Exemplo: A wine has a body, with possible values full, medium and light. Metalinguagem: Ref1* ‘has’ Ref2 ‘, with possible’ (‘value’ | ‘values’) Ref3 ‘.’ — Ref3, normalmente, é uma referência composta. 16) Propósito: definir propriedades (Ref2) para uma classe já definida (Ref1) e o tipo dos valores possíveis para estas propriedades (Ref3) — que podem ser classes ou tipos. Exemplo: A wine has a grape, which is a wineGrape. Metalinguagem: Ref1* ‘has’ Ref2 ‘, which is’ Ref3# ‘.’ 17) Propósito: definir um valor default (Ref2) para uma propriedade já definida de uma classe (Ref1). Exemplo: The color has default value rosé. Metalinguagem: Ref1 ‘has default value’ Ref2 ‘.’ — Ref1 poderá ser qualquer propriedade de qualquer classe, já definida na ontologia, que já teve seus valores possíveis especificados, e será uma referência definida (com o uso do 56 artigo “the” como determinante anafórico), pois estará referenciando uma propriedade já definida na ontologia. 18) Propósito: definir um valor (Ref3) para uma propriedade (Ref1) de uma instância (Ref2). Exemplo: The color of wine1 is rosé. Metalinguagem: Ref1+ ‘of’ Ref2 ‘is’ Ref3 ‘.’ — Ref1 poderá ser qualquer propriedade de qualquer classe, já definida na ontologia, que já teve seus valores possíveis especificados, e será uma referência definida, pois estará qualificando a propriedade de uma instância já definida na ontologia (atuando como um determinante catafórico) — Ref2 poderá ser qualquer instância de uma classe que tenha a propriedade Ref1. Na Figura 08, a seguir, mostramos um exemplo de uso das sentenças da metalinguagem, no qual definimos um fragmento de uma ontologia. Os números à esquerda das sentenças correspondem ao número da sentença na metalinguagem. 1) A winery is a kind of industry. 2) Wine is a kind of drink that has a maker. 13a) The maker is a winery. 12) A wine has a color. 14) The color has possible values red, white and rosé. 6) The color of a redWine must be red. 6) The color of a roseWine must be rose. 6) The color of a whiteWine must be white. 15) A wine has a body, with possible values full, medium and light. 17) The maker has default value Ventana. 13b) FormanCabernetSauvignon is a wine 18) The color of FormanCabernetSauvignon is red. 18) The maker of FormanCabernetSauvignon is Forman. Figura 8: Um fragmento de uma ontologia utilizando as sentenças da metalinguagem. 57 Nesta seção, apresentamos a linguagem por nós proposta para a definição de ontologias, e um exemplo de seu uso. No próximo capítulo, vamos mostrar como um parser para esta linguagem foi desenvolvido e o mapeamento da linguagem proposta para a linguagem OWL DL. 58 Capítulo 4 O mapeamento da linguagem natural controlada para a linguagem OWL O mapeamento da LNC proposta neste trabalho para uma tecnologia de representação de conhecimento começa pela implementação de um parser para esta linguagem. O parser por nós implementado é apresentado na próxima seção. A seguir apresentamos o mapeamento propriamente dito da LNC proposta para a linguagem OWL. 1 A implementação de um parser para a linguagem proposta Um dos principais pontos de destaque na implementação de um parser para a linguagem proposta é o processo de resolução de anáforas. Para que as anáforas sejam resolvidas de forma correta, temos que considerar o texto gerado por meio da linguagem como um discurso, no qual as sentenças possam referenciar entidades que foram introduzidas em sentenças anteriores. Neste sentido, uma forma de representação de discurso chamada DRT (do inglês, Discourse Representation Theory) tem fornecido métodos para a resolução de anáforas e pressuposições de uma forma bastante atraente. 59 Introduzida por Kamp [1981], a DRT é facilmente mapeada para lógica de primeira ordem, o que sustenta a sua expressividade. Ela representa discursos por meio de DRSs (Discourse Representation Structures), estruturas que permitem codificar a informação contida em um discurso e, de uma forma bastante natural, tratar pronomes anafóricos e pressuposições. Segundo Blackburn e Bos [1999], “a DRT é hoje em dia amplamente aceita como notação padrão em lingüística e lingüística computacional”. Um exemplo de uso da DRT é a linguagem ACE [FUCHS, SCHWERTEL e SCHWITTER, 1999] utilizada para especificação de requisitos. As especificações em ACE são mapeadas para DRSs que são utilizadas como a representação lógica interna da base de conhecimento, as quais, por meio de um processo de inferência, podem mais tarde responder perguntas sobre elas. Outros exemplos de uso que podemos [SCHWITTER e TILBROOK, 2004], destacar são [SCHWITTER, 2004] os trabalhos de Schwitter e Nelken e Francez [NELKEN e FRANCEZ, 1996], entre outros. A representação que será empregada para DRS será drs([R],[C]), na qual R é um conjunto de referências do discurso e C é um conjunto de condições a respeito dos elementos de R. Inicialmente a DRS está vazia (drs([],[])). Conforme o parser recebe as sentenças em linguagem natural, esta DRS vazia será preenchida com outras DRSs que representam as sentenças do discurso. Blackburn e Bos apresenta técnicas de semântica computacional que representam a linguagem natural por meio da lógica de primeira ordem [BLACKBURN e BOS, 2005] e DRT [BLACKBURN e BOS, 1999]. Estas representações podem perfeitamente ser utilizadas para futuras inferências. Segundo Blackburn e Bos, a DRT “é uma das mais influentes (e certamente uma das mais interessantes) abordagens nos dias de hoje para a [representação] semântica da linguagem natural”. Blackburn e Bos [1999] apresenta a implementação de um parser (em linguagem Prolog) para uma gramática do inglês bastante ampla. O parser mapeia 60 linguagem natural em DRSs, resolve as anáforas por meio do conceito de DRS acessíveis e não acessíveis e também trata pressuposições de forma bastante natural. Analisando a gramática utilizada por Blackburn e Bos [1999] para a implementação do parser concluímos que ela cobre grande parte da linguagem proposta neste trabalho e que, portanto, seu parser poderia ser utilizado (após alguns ajustes) para mapear as sentenças de nossa gramática para DRSs e, assim, resolver as anáforas e elipses nela presentes. Além disso, como a gramática de Blackburn e Bos é bastante genérica, isso nos possibilita melhorar a nossa linguagem e acrescentar cada vez mais flexibilidade a ela no futuro, sem muitas mudanças no parser. Um outro ponto relevante é que, utilizando esta abordagem de mapear as sentenças em linguagem natural para uma forma intermediária no nível de discurso (as DRSs), podemos mapeá-las para diferentes tipos de tecnologias de representação de conhecimento, bastando, para isso, mapear uma estrutura formal, como as DRSs, para uma outra estrutura formal (as TRCs), o que se torna bem mais simples do que trabalhar com linguagem natural controlada. A Figura 9 mostra os principais módulos que compõe o parser apresentado por Blackburn e Bos [1999] e como eles interagem entre si. Figura 9: Os principais módulos do parser implementado por Blackburn e Bos. 1. ReadLine: um módulo que lê o discurso e devolve uma lista de palavras que representam o discurso lido; 61 2. PresupDRT: este módulo recebe a lista de palavras que representa o discurso e devolve as DRSs resultantes. Ele inicialmente chama o módulo que contém a gramática (englishGrammar) passando a lista de palavras que representa o discurso como parâmetro. EnglishGrammar: este módulo tentará casar o discurso (representada por uma lista de palavras) à gramática prevista. Internamente este módulo chama outro módulo que contém o léxico previsto (englishLexicon), sendo este um dos pontos que foram mudados para atender as nossas necessidades. Cada regra gramatical e léxica tem uma regra semântica correspondente em DRS, que utiliza marcações de lambda calculus para orientar a montagem das sentenças corretamente e outra marcação (alfa) para assinalar as referências do discurso que ainda não foram resolvidas (como as anáforas). O módulo englishGrammar ainda faz uso, internamente, de um outro módulo chamado combine, onde as DRSs de cada regra gramatical e léxica são combinadas e em seguida são passadas para um outro módulo chamado betaConvert, que irá resolver as marcações lambda. ResolveDrs: este módulo recebe as DRSs, após a execução do betaconvert, e, após resolver todas as marcações alfa e montar a DRS resultante do discurso, termina a execução do módulo PresupDRT; 3. PrintRepresentations: este módulo recebe como entrada as DRSs resultantes de PresupDRT e, simplesmente, imprime os DRSs. Um dos pontos que tiveram que ser adaptados para a nossa linguagem é que, no parser original, todas as palavras do discurso deveriam estar presentes no léxico. Para o nosso caso isto não é correto, pois, por exemplo, o nome de uma classe ou propriedade pode aparecer pela primeira vez em sua definição, e não teria sentido exigir que este nome pertencesse ao 62 léxico. Desta forma, modificamos o parser para que nas sentenças que definem novos elementos aceitasse elementos do discurso que não estivessem no léxico. Assim que o parser aceitar a sentença que define o novo elemento (ainda fora do léxico), este elemento fará parte da base de conhecimento. Então, tivemos que acrescentar uma interação da base de conhecimento com o léxico, de forma que todo elemento acrescentado à base também fosse acrescentado ao léxico. Além disso, outras mudanças na estrutura da gramática foram necessárias como, por exemplo, o acréscimo de alguns tipos especiais de cópula: o “is a kind of”, utilizado para definir uma subclasse; e o “is part of” utilizado para definir uma classe que é parte de uma outra classe. Feitas estas considerações, as sentenças da metalinguagem mapeadas para as DRSs resultantes são apresentadas na Tabela 2 a seguir. Preferimos utilizar sentenças-exemplo ao invés de sentenças genéricas para facilitar o entendimento. Os elementos sublinhados são elementos que estão sendo inseridos na ontologia e, portanto, não fazem parte do léxico. Tabela 2: Mapeamento das sentenças da metalinguagem para DRS. 1) a) Wine is a kind of drink. drs([A, B], [wine(A), drink(B), ako(A, B)]) b) Wine is a drink. 2) a) Wine is a kind of drink that has a color. b) Wine is a drink that has a color. 3) A motor is part of an automobile. drs([A, B, C], [wine(A), color(C), has(A, C), drink(B), ako(A, B)]) drs([A, B], [motor(A), automobile(B), partof(A,B)]) 63 4) a) A wine has at least one maker that must be a winery. b) All wines have at least one maker that must be a winery. 5) a) All the wine makers must be wineries. drs([A, B, C], [wine(A), maker(B), winery(C), atleast(B, 1), mustbe(B, C)]) drs([], [imp(drs([A], [wine(A)]), drs([B, C], [maker(B),winery(C), mustbe(B,C), has(A, B), atleast(B, 1)]))]) b) All the makers of wines are wineries. drs([], [imp( drs([A, B], [wine(B), of(A, B), maker(A)]), drs([C], [winery(C), mustbe(A, C)]) )]) 6) The color of a redWine must be red. drs([A, B, C], [color(A), redwine(B), of(A, B), red(C), mustbe(A, C)]) 7) A wine must have exactly one maker. drs([A, B], [wine(A), maker(B), musthave(A, B), exactly(1, B)]) 8) A wine must have at least one maker. drs([A, B], [wine(A), maker(B), musthave(A, B), atleast(1, B)]) 9) A wine must have at most one maker. drs([A, B], [wine(A), maker(B), musthave(A, B), atmost(1, B)]) 10) A wine can only be a redWine, a roseWine or a whiteWine. drs([A, B, C, [wine(A), canbe(A, canbe(A, canbe(A, 11) A car is also known as an automobile. drs([A, B], [car(A), automobile(B), alsoknown(A, B)]) 12) drs([A, B], [wine(A), maker(B), has(A, B)]) A wine has a maker. D], redwine(B), B), rosewine(C), C), whitewine(D), D)]) 64 13) a) The maker is a winery. drs([A, B], [maker(A), winery(B), range(A, B)]) b) W1 is a wine. drs([A, B], [eq(A,w1), wine(B), isa(A, B)]) 14) The color has possible values red, white and rosé. drs([A, B], [color(A), red(B), white(B), rose(B), possibleValues (A, B)]) 15) A wine has a body, with possible values full, medium and light. drs([A, B, C], [wine(A), body(B), has(A, B), full(C), medium(C), light(C), possibleValues(B, C)]) 16) A wine has a grape, which is a wineGrape. drs([A, B, C], [wine(A), grape(B), has(A, B), winegrape(C), range(B, C)]) 17) The color has default value rosé. drs([A, B], [color(A), rose(B), defaultValue(A, B)]) 18) The color of wine1 is rosé. drs([A, B, C], [wine1(B), color(A), of(A, B), rose(C), value(A, C)]) O mapeamento das sentenças da metalinguagem para DRS nos permite processar as DRSs e alimentar uma base de conhecimento para uma vasta gama de TRCs. Na próxima seção, apresentamos a linguagem OWL DL destacando o subconjunto que a LNC proposta neste trabalho cobre e o mapeamento das DRSs para a linguagem OWL. 2 O mapeamento das DRSs resultantes do parser para a linguagem OWL Após o texto em LNC ser processado pelo parser, as DRSs resultantes passam por um algoritmo (vide anexo I) que vai mapeá-las para a linguagem OWL. Das três sublinguagens de OWL, nossa linguagem cobre parte da OWL DL [MCGUINESS e HARMELEN, 2003]. 65 Tabela 3: A relação entre os construtores da linguagem OWL DL e a metalinguagem. Construtores da linguagem OWL DL Sentenças da metalinguagem ou o porquê não cobrirmos. As características de RDF Shema: Class: permite definir classes de indivíduos sem definir seus detalhes. rdfs:subClassOf: permite definir classes por meio de uma hierarquia de classes. rdfs:Property: permite definir relacionamentos entre indivíduos de uma ontologia. Não contemplamos este construtor por entendermos que para se definir uma classe, alguma característica a respeito de seus indivíduos deve ser importante. 1e2 2, 4, 5, 6, 7, 8, 9, 11, 12, 15, e 16 Apesar de não existir uma sentença direta rdfs:subPropertyOf: permite definir hierarquias que defina uma subpropriedade, este elemento é utilizado implicitamente para de propriedades. definir uma propriedade default. Apesar de não existir uma sentença direta rdfs:domain: permite definir os indivíduos para que defina o domínio de uma propriedade, este construtor é utilizado implicitamente os quais a propriedade será aplicada. para a definição de uma propriedade. rdfs:range: permite definir quais indivíduos 13a, 14, 15 e 16 uma propriedade pode ter como seu valor. Individual: permite definir instâncias 13b (indivíduos) de classes definidas na ontologia. Igualdade e diferença: equivalentClass: permite definir que uma classe é exatamente igual à outra classe da 11 ontologia. equivalentProperty: permite definir que uma propriedade é exatamente igual à outra 11 propriedade da ontologia. sameAs: permite definir que uma instância é 11 exatamente igual à outra instância da ontologia. Apesar de não existir uma sentença direta que defina que um indivíduo é diferente de outro, este construtor é utilizado implicitamente para definir que todas as instâncias que foram definidas na ontologia são diferentes umas das outras por default, DifferentFrom: permite definir que um (salvo aquelas que são explicitamente indivíduo (instância) é diferente de um outro declaradas como iguais). Para poupar indivíduo. código e facilitar o entendimento, vamos utilizar o construtor AllDifferent para fazer isso, pois ele tem o mesmo efeito de utilizar o construtor DifferentFrom para cada um dos elementos. 66 AllDifferent: permite definir que vários indivíduos são diferentes entre si. Apesar de não existir uma sentença direta que defina que vários elementos são todos diferentes entre si, este construtor é utilizado implicitamente para a definição de uma classe enumerada. Característica das propriedades ObjectProperty: permite definir propriedades 2, 4, 5, 6, 7, 8, 9, 11, 12, 15, e 16 que tem instâncias de classes como valores. DatatypeProperty: permite definir propriedades que tem elementos (que são datatypes) como 2, 4, 5, 6, 7, 8, 9, 11, 12, 15, e 16 valores. InverseOf: permite definir uma propriedade que é o inverso de uma outra propriedade TransitiveProperty: permite definir propriedades que são transitivas. SymmetricProperty: permite definir propriedades que são simétricas. FunctionalProperty: permite definir propriedades que são funcionais, ou seja, tem apenas um valor. InverseFunctionalProperty: permite definir que o inverso da propriedade é funcional, ou seja, tem apenas um valor. Por enquanto a LNC proposta não cobre estes construtores porque não conseguimos uma sentença em linguagem natural que fosse de fácil entendimento para o usuário leigo. Restrições de valor para as propriedades: allValuesFrom: equivalente ao quantificador “para todo” (∀) da lógica, permite definir que todo valor para uma propriedade P de uma 5a e 5b classe X deve ser um indivíduo de uma outra classe Y, para que um indivíduo faça parte da classe X. someValuesFrom: equivalente ao quantificador “existencial” (∃) da lógica, permite definir que pelo menos um valor da propriedade P de uma 4a e 4b classe X deve ser um indivíduo de uma outra classe Y, para que um indivíduo faça parte da classe X. hasValue: permite definir um valor requerido para uma propriedade P para que um indivíduo 6 faça parte de uma classe X. Restrições de cardinalidade para a propriedade: minCardinality: permite definir o mínimo de vezes que qualquer indivíduo de uma classe X deve estar relacionado com um outro indivíduo por meio de uma propriedade P. 8 67 maxCardinality: permite definir o máximo de vezes que qualquer indivíduo de uma classe X deve estar relacionado com um outro indivíduo por meio de uma propriedade P. cardinality: permite definir uma quantidade exata de vezes que qualquer indivíduo de uma classe X deve estar relacionado com um outro indivíduo por meio de uma propriedade P. 9 7 Datatypes: xsd datatypes 13a e 16 Axiomas de classe: oneOf: permite definir classes enumeradas. disjointWith: permite definir que os indivíduos de uma classe são disjuntos dos indivíduos de uma outra classe. 10 e implicitamente nas sentenças 14 e 15 Apesar de não existir uma sentença direta que defina que os indivíduos de uma classe são disjuntos dos indivíduos de uma outra classe, este construtor é utilizado implicitamente para definir que todas as classes que foram definidas na ontologia são disjuntas por default. Combinações booleanas de descrições de classes: unionOf: permite definir uma classe como a união de outras classes já definidas. complementOf: permite definir uma classe como o complemento de outra classe já definida. intersectionOf: permite definir uma classe como a interseção de outras classes já definidas. Por enquanto a LNC proposta não cobre estes construtores porque não conseguimos uma sentença em linguagem natural que fosse de fácil entendimento para o usuário leigo. Informações de Cabeçalho: Ontology Imports Definições de versionamento: versionInfo priorVersion backwardCompatibleWith incompatibleWith DeprecatedClass DeprecatedProperty Anotações sobre as propriedades: rdfs:label rdfs:comment rdfs:seeAlso rdfs:isDefinedBy Estes construtores não foram contemplados por enquanto na linguagem proposta, mas poderão ser incorporados como propriedades do documento que especifica a BC, por meio de um quadro de propriedades no editor proposto na seção 5. 68 Após descrevermos os construtores utilizados pela linguagem OWL DL para representar conhecimento e a relação destes construtores com a linguagem por nós proposta, mostraremos na Tabela 4 abaixo (novamente por meio de exemplos) o mapeamento de cada uma das sentenças em linguagem natural controlada para a linguagem OWL DL. Tabela 4: mapeamento das sentenças para OWL/DL. 1) a) Wine is a <owl:Class rdf:ID=”Wine”> <rdfs:subclassof rdf:resourse=”#Drink”/> kind of drink. <owl:disjointWith rdf:resourse=”#X”/>** </owl:Class> b) Wine is a drink. 2) a) Wine is a kind of drink that has a color. <owl:Class rdf:ID=”Wine”> <rdfs:subclassof rdf:resourse=”#Drink”/> <owl:disjointWith rdf:resourse=”#X”/>** </owl:Class> <owl:ObjectProperty rdf:ID=”hasColor”11 > b) Wine is a <rdfs:domain rdf:resource=”#Wine”> drink that has </owl:ObjectProperty> a color. 3) A motor is part of an automobile. ** 11 <owl:Class rdf:ID=”Automobile”> <rdfs:subclassof rdf:resourse=”#Automobile_or_part of_Automobile”/> <owl:disjointWith rdf:resourse=”#X”/>** </owl:Class> <owl:Class rdf:ID=”Partof_Automobile”> <rdfs:subclassof rdf:resourse=”#Automobile_or_part of_Automobile”/> <owl:disjointWith rdf:resourse=”#X”/>** </owl:class> <owl:Class rdf:ID=”Motor”> <rdfs:subclassof rdf:resourse=”#Partof_Automobile”/> <owl:disjointWith rdf:resourse=”#X”/>** </owl:Class> Este tipo de cláusula será repetido para cada uma das classes presentes na ontologia. Aqui estamos considerando que os valores possíveis para esta propriedade (range em OWL) são classes, e por isso uma ObjectProperty foi definida. Se os valores possíveis para esta propriedade fossem datatypes, então a propriedade deveria ser definida como uma DatatypeProperty. 69 4) a) A wine has at least one maker that must be a winery. <owl:Class rdf:ID="Wine"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#hasMaker"/> <owl:someValuesFrom rdf:resource="#Winery"/> </owl:Restriction> </rdfs:subClassOf> </owl:Class> b) All wines have at least one maker that <owl:ObjectProperty rdf:ID=”hasMaker”> must be a <rdfs:domain rdf:resource=”#Wine”> winery. <rdfs:range rdf:resource=”#Winery”> </owl:ObjectProperty> 5) <owl:Class rdf:ID="Wine"> a) All the wine makers must be <rdfs:subClassOf> <owl:Restriction> wineries. <owl:onProperty rdf:resource="#hasMaker"/> <owl:allValuesFrom rdf:resource="#Winery"/> b) All the </owl:Restriction> makers of </rdfs:subClassOf> wines are </owl:Class> wineries. <owl:ObjectProperty rdf:ID=”hasMaker”> <rdfs:domain rdf:resource=”#Wine”> <rdfs:range rdf:resource=”#Winery” > </owl:ObjectProperty> 6) The color of <owl:Class rdf:ID="RedWine"> a redWine must <owl:Restriction> be red. <owl:onProperty rdf:resource="#hasColor"/> <owl:hasValue rdf:resource="#Red"/> </owl:Restriction> </owl:Class> <owl:ObjectProperty rdf:ID=”hasColor” > <rdfs:domain rdf:resource=”#RedWine”> </owl:ObjectProperty> 7) A wine must have exactly one maker. <owl:Class rdf:ID="Wine"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#hasMaker" /> <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1 </owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <owl:ObjectProperty rdf:ID=”hasMaker> <rdfs:domain rdf:resource=”#Wine”> </owl:ObjectProperty> 70 8) A wine must have at least one maker. <owl:Class rdf:ID="Wine"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#hasMaker" /> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1 </owl:minCardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class> <owl:ObjectProperty rdf:ID=”hasMaker> <rdfs:domain rdf:resource=”#Wine”> </owl:ObjectProperty> 9) A wine must have at most one maker. <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#hasMaker" /> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">1 </owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> <owl:ObjectProperty rdf:ID=”hasMaker > <rdfs:domain rdf:resource=”#Wine”> </owl:ObjectProperty> 10) A wine can only be a redWine, a roseWine or a whiteWine. <owl:Class rdf:ID="Wine"> <owl:oneOf rdf:parseType="Collection"> <owl:Thing rdf:about="#RedWine"/> <owl:Thing rdf:about="#RoseWine"/> <owl:Thing rdf:about="#WhiteWine"/> </owl:oneOf> </owl:Class> <Wine rdf:ID="RedWine"/> <Wine rdf:ID="RoseWine"/> <Wine rdf:ID="WhiteWine"/> <owl:AllDifferent> <owl:distinctMembers rdf:parseType="Collection"> <Wine rdf:about="#RedWine"/> <Wine rdf:about="#RoseWine"/> <Wine rdf:about="#WhiteWine"/> </owl:distinctMembers> </owl:AllDifferent> 71 11) a) A car is also known as an automobile. <owl:Class rdf:about="#Car"> <equivalentClass rdf:resource="#Automobile"/> </owl:Class> b) A maker is also known as a manufacturer. <owl:Property rdf:about="#hasManufacturer"> <equivalentProperty rdf:resource="#hasMaker"/> </owl:Property> c) Wine2 is also known as wine1. <rdf:Description rdf:about="#Wine2"> <owl:sameAs rdf:resource="#Wine1"/> </rdf:Description> 12) A wine has a maker. <owl:ObjectProperty rdf:ID=”hasMaker” > <rdfs:domain rdf:resource=”#Wine”> </owl:ObjectProperty> 13) a) The maker is a winery. <owl:ObjectProperty rdf:ID=”hasMaker”> <rdfs:range rdf:resource=”#Winery”12> </owl:ObjectProperty> b) W1 is a wine. <Wine rdf:ID=”W1” /> <owl:AllDifferent> <owl:distinctMembers rdf:parseType="Collection"> <Class rdf:about="#Instance"/>◊ </owl:distinctMembers> </owl:AllDifferent> 12 Se este nome fosse um datatype, então a propriedade seria definida como uma DatatypeProperty. Mas como estamos considerando que este é o nome de uma classe previamente definida na ontologia, definimos uma ObjectProperty. ◊ Esta cláusula será repetida para cada instância definida na ontologia. 72 14) The color has possible values red, white and rosé. Definição da classe enumerada13: <owl:Class rdf:ID="WineColor"> <owl:oneOf rdf:parseType="Collection"> <owl:Thing rdf:about="#White"/> <owl:Thing rdf:about="#Rose"/> <owl:Thing rdf:about="#Red"/> </owl:oneOf> </owl:Class> <WineColor rdf:ID="Red" /> <WineColor rdf:ID="Rose" /> <WineColor rdf:ID="White" /> <owl:AllDifferent> <owl:distinctMembers rdf:parseType="Collection"> <WineColor rdf:about="#Red" /> <WineColor rdf:about="#White" /> <WineColor rdf:about="#Rose" /> </owl:distinctMembers> </owl:AllDifferent> Definição do domínio da propriedade: <owl:ObjectProperty rdf:ID=”hasColor”> <rdfs:domain rdf:resource=”#Wine”> <rdfs:range rdf:resource=”#WineColor”> </owl:ObjectProperty> 15) A wine has a body, with possible values full, medium and light. Definição da classe enumerada: <owl:Class rdf:ID="WineBody"> <owl:oneOf rdf:parseType="Collection"> <owl:Thing rdf:about="#Full"/> <owl:Thing rdf:about="#Médium"/> <owl:Thing rdf:about="#Ligth"/> </owl:oneOf> </owl:Class> <WineBody rdf:ID="Full" /> <WineBody rdf:ID="Médium" /> <WineBody rdf:ID="Ligth" /> <owl:AllDifferent> <owl:distinctMembers rdf:parseType="Collection"> <WineBody rdf:about="#Full" /> <WineBody rdf:about="#Médium" /> <WineBody rdf:about="#Ligth" /> </owl:distinctMembers> </owl:AllDifferent> Definição do domínio da propriedade: <owl:ObjectProperty rdf:ID=”hasBody”> <rdfs:domain rdf:resource=”#Wine”> <rdfs:range rdf:resource=”#WineBody”> </owl:ObjectProperty> 13 Este tipo de sentença, normalmente, vem após a definição da propriedade por outra sentença (dos tipos 2, 6, 7, 8 e 12), que especifica também o nome da classe domínio da propriedade. O nome da classe enumerada será a concatenação do nome da classe domínio e do nome da propriedade para qual a faixa de valores está sendo definida. 73 16) a) A wine has a grape, which is a wineGrape. b) A wine has a yearOfMaking, which is integer. 17) “wineGrape” é uma classe: <owl:ObjectProperty rdf:ID=”hasGrape”> <rdfs:domain rdf:resource=”#Wine”> <rdfs:range rdf:resource=”#WineGrape” > </owl:ObjectProperty> “integer” é um datatype: <owl:DatatypeProperty rdf:ID=”hasYearOfMaking <rdfs:domain rdf:resource=”#Wine”> <rdfs:range rdf:resource ="&xsd;nonNegativeInteger”> </owl:DatatypeProperty> “hasColor” é uma ObjectProperty: a) The color has default value rosé. b) The yearOfMaking has default value 1990. 18) The color of wine1 is rosé. <owl:ObjectProperty rdf:ID="ColorDefaultValue"> <rdfs:subPropertyOf rdf:resource="#hasColor"/> <owl:Restriction> <owl:hasValue rdf:resource="#Rosé" /> </owl:Restriction> </owl:ObjectProperty> “yearOfMaking” é uma DatatypeProperty: <owl:DatatypeProperty rdf:ID="YearOfMakingDefaultValue"> <rdfs:subPropertyOf rdf:resource="#hasYearOfMaking"/> <owl:Restriction> <owl:hasValue rdf:datatype="&xsd;nonNegativeInteger">1990 </owl:hasValue> </owl:Restriction> </owl: DatatypeProperty> <Wine rdf:ID="Wine1"> <hasColor rdf:resource="#Rosé" /> </Wine> As sentenças do tipo 2, 4, 5, 6, 7, 8, 9 e 12 são armazenadas, em uma lista de propriedades não definidas, até que os valores possíveis da propriedade sejam especificados (utilizando as sentenças do tipo 13a, 14, 15 e 16) para, então, serem de fato colocadas na base de conhecimento. Isto é necessário devido ao fato de que, para definir uma propriedade OWL, necessitamos saber se seus valores possíveis são datatypes ou instâncias de uma classe da ontologia. Se forem datatypes, então uma DatatypeProperty será definida. Se forem instâncias de uma classe, então uma ObjectProperty é definida. As sentenças do tipo 3 seguem a abordagem sugerida por Rector [2004] para a modelagem de classes que são partes de outras classes (relação todo-parte), visto que a 74 linguagem OWL não contempla este tipo de relação diretamente. Nesta abordagem, estamos construindo uma superclasse (Automobile_or_partof_automobile) que será especificada pela classe que representa o todo (Automobile) e por uma outra classe que representa as partes do todo (Partof_automobile). Depois disso é que realmente construímos a classe-parte que está sendo definida (motor), que é uma subclasse da classe que representa as partes do todo (Partof_automobile). Este tipo de modelagem evita erros de interpretação do tipo “a motor is a kind of autobile”, que seria a interpretação correta no caso de definirmos a classe “motor” como uma subclasse de “automobile”. Para processar as sentenças do tipo 13a, 14, 15 e 16, primeiramente verificamos se a faixa de valores possíveis declarada é um datatype, para que uma DatatypeProperty seja definida. Se a faixa não for um datatype, então uma verificação é feita na base de conhecimento para encontrar a classe declarada como a faixa de valores e somente então é definida uma ObjectProperty. Se a classe procurada não for encontrada, o usuário deverá ser avisado de que esta sentença poderá ocasionar um erro, porque a classe declarada ainda não existe na base. Depois que a DatatypeProperty ou a ObjectProperty for devidamente colocada na base, as sentenças do tipo 2, 4, 5, 6, 7, 8, 9 e 12 podem ser recuperadas e processadas. As sentenças do tipo 17 também necessitam verificar o tipo da propriedade para a qual o valor default está sendo declarado. A subpropriedade default declarada deverá ser do mesmo tipo (DatatypeProperty ou ObjectProperty) da propriedade. Além disso, o valor default declarado deve estar dentro dos valores permitidos para a propriedade. O algoritmo responsável por todas estas checagens e, por conseguinte, pelo mapeamento como um todo, está apresentado no Anexo I. Na próxima seção apresentamos alguns exemplos de aplicação deste algoritmo. 75 2.1 Exemplos de aplicação do algoritmo de mapeamento As Figuras 10 a 13 abaixo mostram, por meio de associações, a aplicação do algoritmo sobre algumas DRSs e o conseqüente mapeamento para a linguagem OWL. As setas das associações estão enumeradas para facilitar o entendimento da explicação. Figura 10: Mapeamento de uma sentença do tipo 1 para OWL. A Figura 10 mostra o mapeamento de uma sentença do tipo 1 (A wine is a drink.) para a linguagem OWL. Por meio da condição “ako”, o algoritmo identifica que está sendo definida uma subclasse (associação 1). Mas a relação “ako” traz somente os referentes do discurso que participam da relação “(A, B)”, então o algoritmo procura pelo nome da subclasse (“wine(A)” — associação 2), e depois procura pelo nome da classe mãe (“drink(B)” — associação 3). De posse dos nomes que fazem parte da relação, o algoritmo verifica se a classe mãe já existe na ontologia e se a subclasse não pertence à ontologia. Se os dois casos forem positivos, então o texto em OWL é montado, com as associações mostradas na Figura 10, fazendo sempre com que a classe que está sendo definida seja disjunta de todas as demais da ontologia. Caso contrário, um erro é reportado para o especialista, dizendo que a classe mãe não está definida, ou que já existe uma classe com o nome da subclasse na ontologia. 76 Figura 11: Mapeamento de uma sentença do tipo 7 para OWL. A Figura 11 mostra o mapeamento de uma sentença do tipo 7 (A wine must have exactly one maker.) para a linguagem OWL. Por meio da condição “musthave” o algoritmo detecta que se trata da definição de uma classe por meio de uma restrição de cardinalidade. Então ele procura pelo nome da propriedade (“maker(B)” — associação 2) e em seguida pelo nome da classe que está sendo definida (“wine(A)” — associação 3). De posse do nome da classe, o algoritmo verifica se esta classe já existe na ontologia, caso contrário um erro é reportado. Em seguida o tipo da cardinalidade (exactly ou atleast ou atmost) e o número correspondente é procurado (“exactly(1, B)” — associação 4). E, por último, a restrição de cardinalidade é definida em OWL, seguindo as associações da Figura 11. Além disso, o nome da propriedade e da classe correspondente são armazenadas em uma lista de propriedades a serem definidas, até que o tipo da propriedade seja estabelecido. 77 Figura 12: Mapeamento de uma sentença do tipo 8 para OWL. A Figura 12 mostra o mapeamento de uma sentença do tipo 16 (A wine has a maker which is a winery.) para a linguagem OWL. Por meio das condições “isa” e “has” o algoritmo detecta que se trata da definição de propriedade para uma classe e da sua faixa de valores (associações 1 e 2). Então ele procura pelo nome da propriedade (“maker(B)” — associação 3) e depois pelo nome da classe (“wine(A)” — associação 4). De posse do nome da classe, o algoritmo verifica se a classe já existe, senão retorna erro. Em seguida procura pelo nome da faixa de valores (“winery(C)” — associação 5) e verifica se esta faixa de valores é um Datatype ou uma classe da ontologia. Se for um Datatype, uma DatatypeProperty é definida, senão o algoritmo procura se a faixa de valores é uma classe da ontologia. Se for, uma ObjectProperty é definida, seguindo as associações da Figura 12. Se a faixa de valores não for nem um Datatype, nem uma classe da ontologia, um erro é reportado dizendo que a faixa não é válida. 78 Figura 13: Mapeamento de uma sentença do tipo 9 para OWL. A Figura 13 mostra o mapeamento de uma sentença do tipo 17 (The color has default value rosé.) para a linguagem OWL. Por meio da condição “defaultvalue” o algoritmo detecta que se trata da definição de um valor default para uma propriedade (associação 1). Então ele procura pelo nome da propriedade (“color(A)” — associação 2) e em seguida pelo valor default que está sendo definido (“rose(B)” — associação 3). De posse do nome da propriedade, o algoritmo verifica se esta propriedade foi definida como uma DatatypeProperty ou uma ObjectProperty, pois o valor default será definido como uma subpropriedade que deve ser do mesmo tipo. Em seguida ele verifica se o valor default definido é um valor válido para a propriedade. Se for, uma subpropriedade com uma restrição de valor é definida seguindo as associações da Figura 13. Outros mapeamentos podem ser verificados no algoritmo presente no Anexo I. Até agora estamos levando em conta que o usuário da linguagem (o especialista) escreverá cada uma das sentenças. Por isso, todas as verificações acima são necessárias, além da verificação de existência das classes utilizadas nas sentenças. Mas podemos melhorar muito a interação do especialista com a linguagem, disponibilizando um editor que o auxilie durante a tarefa de construção da ontologia. No próximo capítulo, vamos descrever o editor de ontologias proposto e suas principais funcionalidades que, esperamos, devem facilitar a tarefa do especialista. 79 Capítulo 5 O editor de ontologias C omo mencionamos nos capítulos anteriores, acreditamos que o especialista terá menos dificuldades em expressar seu conhecimento por meio de uma linguagem natural controlada, do que se ele tivesse que expressá-lo por meio de uma TRC. Tentando auxiliar ainda mais a interação do especialista com a base de conhecimento, propomos a utilização de um editor dirigido por processo, que sugere uma ordem para a construção de ontologias, ao mesmo tempo em que filtra as sentenças da metalinguagem e os elementos das sentenças que devem ser utilizados em cada passo do processo. Este editor é uma adaptação dos trabalhos de Godoi [2004] e Oliveira [2004], que implementam o ambiente proposto por Da Silva [2001] para auxiliar um usuário final no processo de estender uma aplicação de software. A interface do editor pode ser visualizada na Figura 14 apresentada na próxima página. O editor proposto é formado basicamente por uma área de edição — na qual o texto que representa a ontologia será composto; uma área que representa o processo de construção 80 da ontologia e sinaliza em qual fase do processo o usuário se encontra; e uma área de explicação que pode, por exemplo, mostrar ao usuário qual é o significado da sentença que está sendo composta para a ontologia. Na área de texto o usuário poderá clicar com o botão direito do mouse e terá a sua disposição uma lista de templates, que representam as sentenças possíveis de serem utilizadas para editar a ontologia, naquele momento. Figura 14: A interface do editor de ontologias proposto. A principal vantagem de utilizar templates é que o usuário não necessita aprender a linguagem de especificação. O editor disponibiliza as templates das sentenças permitidas na linguagem e o usuário escolhe aquela que lhe for de interesse. A partir deste ponto, as referências da sentença podem ser completadas para que ela seja de fato processada pelo parser. Nesta fase da edição, o editor tem uma intensa interação com a base de conhecimento, pois, de acordo com a sentença escolhida pelo usuário, a base deverá ser consultada e os elementos que podem ser usados pelo usuário, para preencher as referências, devem ser 81 disponibilizados por meio de menus pop-up. Esta abordagem evita que o usuário cometa erros comuns, como, por exemplo, uso do nome de uma classe que não existe, ou o uso do nome de uma classe onde deveria estar o nome de uma propriedade. Além disso, podemos ter as DRSs correspondentes a cada uma das templates já pré-processadas, diminuindo assim, o processamento exigido para mapear as sentenças para a linguagem OWL. Desta forma, as DRS seriam utilizadas somente para a resolução de anáforas e pressuposições. Uma abordagem semelhante para edição de textos utilizando LNC é proposta por Schwitter, primeiramente em um editor para especificações formais [SCHWITTER et al, 2003] e mais tarde em uma abordagem para representação de conhecimento [SCHWITTER, 2004] e [SCHWITTER, 2005]. Na abordagem proposta por Schwitter, o usuário começa a digitar o texto e o editor o auxilia, sugerindo quais classes gramaticais são esperadas nas próximas palavras das sentenças, forçando, assim, o usuário a utilizar a LNC especificada. No capítulo 6, vamos discutir as semelhanças e diferenças entre a abordagem proposta por Schwitter e a abordagem por nós proposta. As templates disponibilizadas no editor proposto correspondem às sentenças que compõe a metalinguagem de especificação proposta (apresentadas na seção 3.3). Porém, ao invés de utilizarmos os elementos “Ref” como apresentamos na seção 3.3, estamos utilizando, como nome para as referências, os elementos da ontologia esperados em cada uma delas, para facilitar o entendimento do usuário. As templates estão resumidas na Figura 15, mostrada na próxima página: 82 1) a) Class1 is a kind of Class2 *. b) Class1 is a Class2 *. 2) a) Class1 is a kind of Class2 * that has Property. b) Class1 is a Class2 * that has Property. 3) Class1 (is part of | are parts of) Class2*. 4) Class1 (has | have) at least one Property that must be Class2*. 5) a) Class1 Property must be Class2*. b) Property Class1 are Class2*. 6) Property of Class1 must be Class2. 7) Class1 must have exactly number Property. 8) Class1 must have at least number Property. 9) Class1 must have at most number Property. 10) Class1 can only be Instances. 11) Class1 is also known as Class2 *+. 12) Class1 * (has | have) Property. 13) Property& | Instance (is | are) Class | Type#. 14) Property & has possible values Values. 15) Class1 * has Property, with possible (value | values) Values. 16) Class1 * has Property, which is Class | Type#. 17) Property has default value Value. 18) Property + of Instance is Value. Figura 15: As templates das sentenças que podem ser utilizadas pelo usuário para a construção da ontologia. Os elementos em negrito são fixos da linguagem, os demais elementos são referências (dos tipos mostrados na Tabela 1 — seção 3.3) que serão preenchidas pelo usuário com a ajuda das indicações feitas pelo editor. Para as referências marcadas com * um menu pop-up deve disponibilizar (após uma consulta na base de conhecimento) todas as classes que já existem na ontologia, para que o especialista possa escolher uma delas. Nas referências marcadas com # devem ser são mostradas todas as classes existentes na ontologia e também 83 os tipos de dados permitidos pela TRC. Nas referências marcadas com + devem ser disponibilizadas todas as propriedades já definidas na ontologia para a classe especificada na sentença. Nas referências marcadas com & o editor deverá disponibilizar todas as propriedades já definidas na ontologia, mas que ainda não tiveram seu domínio especificado. Somente as referências que estão sublinhadas serão realmente escritas pelo usuário, pois se tratam da definição de elementos da ontologia. O elemento definido somente ficará disponível para uma possível escolha do usuário, nos menus pop-up das templates, depois que a sentença que o definiu for processada. É interessante ressaltar a semelhança sintática entre as templates do tipo “1b” “Class1 is a Class2.” e as templates “Property&|Instance (is|are) Class|Type.” do depois tipo que estas “13” forem instanciadas. A instanciação da template “1b” — definição de uma classe — poderia ser, por exemplo: “A car is a automobile.” e a instanciação da template “13” poderia ser, por exemplo, a definição dos valores possíveis para uma propriedade já definida: “The maker is winery”, ou a definição da instância de uma classe predefinida: “C1 is a car”. Mas, de qualquer forma, a parte fixa da template é muito semelhante. Neste caso, a diferenciação entre uma sentença e outra é feita basicamente pelo passo do processo, ou seja, se o usuário estiver na fase de definição de classes, o processo permitirá que ele utilize a template “1b”. Se o usuário estiver na fase de definição de propriedades ou tipo para as propriedades, o processo permitirá que ele utilize a template “13” porém ele somente poderá instânciá-la com propriedades (na primeira referência) e classes ou tipos (na segunda referência). Se o usuário estiver na fase de definição de instâncias, o processo permitirá que ele utilize templates do tipo “13”, porém ele somente poderá instânciá-la com o nome da instância (na primeira referência) e das classes (na segunda referência). 84 Existe uma outra forma de fazer a diferenciação entre uma sentença e outra, sem fazer uso do passo do processo. As templates do tipo “13”, instanciadas com a primeira referência contendo o determinante anafórico “the”, são fáceis de serem identificadas pois o uso do artigo definido “the” permite ao editor inferir que a sentença referencia uma entidade que já existe na ontologia, e, portanto, esta definindo a faixa de valores permitidos para uma propriedade já existente na ontologia. Para diferenciar os outros dois propósitos (definir uma classe ou definir a instância de uma classe), podemos utilizar uma abordagem chamada de avaliação tardia (late evaluation). Desta forma, ao processar uma sentença que pode ter vários propósitos, o editor pode guardar informações sobre ela e esperar mais informações sobre elementos da sentença para então, processá-la. Por exemplo, se tivéssemos a sentença “A car is a automobile”, o editor poderia guardar as informações sobre a sentença, esperando pela definição de mais algum detalhe sobre “a car” como, por exemplo, a definição de uma propriedade ou a definição de uma subclasse. Quando alguma definição deste tipo acontecer, o editor pode processar a sentença anterior como a definição de uma classe. Caso contrário, se nenhuma destas definições acontecerem até a fase de checagem de consistência, o editor pode concluir que se trata da definição de uma instância de uma classe. Com esta abordagem poderíamos até mesmo abolir as restrições de ordem dos passos que o processo necessita como, por exemplo, exigir sempre que uma propriedade seja definida previamente ou juntamente com a classe à qual a propriedade pertence. Como um exemplo de uso das templates, vamos supor que o usuário queira definir um tipo para uma propriedade previamente definida na ontologia de vinhos. Então ele utilizará a template “13”: Property& | Instance (is | are) Class | Type#. 85 No momento que o usuário escolhe uma template as referências serão transformadas em menus pop-up, um para a escolha do determinante e um para a escolha do substantivo correspondente aos elementos da ontologia. Como esta template tem dois propósitos diferentes, e, portanto, duas opções na primeira referência (Property | Instance), o usuário terá que escolher uma delas antes do editor disponibilizar os menus pop-up. Como nosso propósito é definir um tipo para uma propriedade, então escolhemos a opção “Property”. Desta forma, o elemento “Property | Instance” será transformado em dois menus: um com os determinantes permitidos para a linguagem e outro com todas as propriedades definidas na ontologia. O cursor será deslocado automaticamente para o campo do determinante, como mostra a Figura 16 abaixo. Se a intenção do usuário fosse definir uma instância para uma classe, então um campo de edição normal seria disponibilizado para que o usuário digitasse o nome da instância que ele estivesse definindo. Figura 16: Os menus pop-up disponíveis para a definição de um valor para uma propriedade. Assim que o usuário escolher um dos determinantes, o editor habilitará o menu das propriedades e seleciona todas as propriedades que já foram definidas na ontologia, mas ainda não tiveram seu tipo especificado, como mostra a Figura 17 abaixo: Figura 17: A escolha de uma propriedade para a definição de seu tipo. 86 Assim que o usuário escolher uma das propriedades, os elementos correspondentes a “Class | Type” serão habilitados e o cursor será automaticamente deslocado para o determinante desta referência. O substantivo esperado nesta referência é o nome de uma classe previamente definida na ontologia, ou o nome de um datatype permitido na TRC e, por isso, o editor já os seleciona para o usuário, como mostra a Figura 18 abaixo: Figura 18: A escolha de um tipo para a propriedade. Após todos os elementos terem sido preenchidos, a sentença é aceita pelo editor como parte da definição da ontologia: The maker is a winery. Esta forma de ativar um elemento da interface de acordo com a sentença, guiando o especialista, é controlada por um processo de construção da ontologia que, além disso, também sinaliza ao usuário quais tarefas ele já realizou e o que deve ser feito em seguida. Para isso, foi definido um processo de construção de ontologias, que guiará o usuário durante seu trabalho com o editor. Para a implementação do processo de construção de ontologias utilizamos uma adaptação da máquina de estados implementada por Oliveira [2004]. A Figura 19, na página seguinte, mostra o processo global de construção de ontologias utilizando o editor proposto. Os estados sombreados apresentam subprocessos e serão descritos a seguir. 87 O estabelecimento de uma ordem para a definição da ontologia permite auxiliar o usuário de forma que este cometa menos erros durante a definição da ontologia. Ao invés de deixamos que o usuário escreva qualquer coisa para preencher as templates, o processo permite que o usuário utilize apenas classes, propriedades e valores que já foram definidos na ontologia14. Desta forma, o usuário não corre o risco de utilizar uma classe, propriedade ou um valor durante a construção da ontologia e esquecer de defini-los, o que ocasionaria um erro de consistência, que somente seria detectado durante a fase de checagem de consistência ao final da especificação. Um outro ponto importante é que a carga cognitiva de escolher uma das templates sugeridas provavelmente deve diminuir, uma vez que o editor utiliza o processo para restringir as templates que podem ser utilizadas em cada etapa (subprocesso). O processo apresentado na Figura 19 tenta mostrar ao usuário como o processo geral de construção da ontologia foi modelado. A priori, as atividades (subprocessos) podem ser realizadas em qualquer ordem, bastando, para isso, que as pré-condições de cada atividade sejam válidas. Algumas pré-condições são apresentadas a seguir: • Para definir uma classe baseada em uma outra classe, a segunda deve ser previamente definida; • Para definir uma propriedade a classe que terá esta propriedade precisa ser definida previamente ou juntamente com a propriedade; • Para definir um tipo, ou valores enumerados para uma propriedade, é necessário que a propriedade seja definida anteriormente; • Para definir um valor default para uma propriedade é necessário que o tipo ou os valores possíveis para propriedade sejam definidos anteriormente; 14 Esta restrição de utilizar somente os elementos já definidos na ontologia pode ser relaxada se utilizarmos avaliação tardia. Esta é uma abordagem que devemos investigar no futuro, pois, provavelmente, existe um balanceamento entre utilizar somente os elementos já definidos na ontologia e a carga cognitiva exigida do usuário para definir a ontologia sem se esquecer de definir nenhum elemento utilizado nela. 88 • Para definir um valor para uma propriedade de uma instância é necessário que a instância já tenha sido definida e, para definir uma instância de uma classe é necessário que a classe já tenha sido definida. Figura 19: O processo global de construção de uma ontologia utilizando o editor Como pode ser visto na figura acima, em qualquer parte do processo de construção da ontologia o usuário poderá verificar a consistência da ontologia que está criando. A Figura 20, na página seguinte, destaca o subprocesso 1 que permite definir novas classes para a ontologia das seguintes formas: A) por meio de uma hierarquia de classes (utilizando templates do tipo 1) e, opcionalmente, também definir o nome de uma propriedade 89 que esta classe contém (utilizando templates do tipo 2); B) por meio da definição de uma classe que é parte de uma classe todo (utilizando templates do tipo 3); C) por meio de uma restrição de valor (utilizando templates dos tipos 4, 5 e 6) ou cardinalidade (utilizando templates dos tipos 7, 8 e 9) de uma propriedade; D) por meio da enumeração de seus indivíduos (utilizando templates do tipo 10); e E) por meio da igualdade de classes já definidas (utilizando templates do tipo 11). As templates utilizadas estão destacadas abaixo: 1) a) Class1 is a kind of Class2*. b) Class1 is a Class2*. 2) a) Class1 is a kind of Class2* that has Property. b) Class1 is a Class2* that has Property. 3) Class1 (is part of | are parts of) Class2*. 4) Class1 (has | have) at least one Property that must be Class2*. 5) a) Class1 Property must be Class2*. b) Property Class1 are Class2*. 6) Property of Class1 must be Class2. 7) Class1 must have exactly number Property. 8) Class1 must have at least number Property. 9) Class1 must have at most number Property. 10) Class1 can only be Instances. 11) Class1 is also known as Class2*+. 90 Figura 20: O subprocesso 1 do processo de criação de ontologias. A Figura 21 destaca o subprocesso 2 que permite definir propriedades e associá-las a uma classe (utilizando templates do tipo 12) e, opcionalmente, definir seu tipo (utilizando templates do tipo 16) ou enumerar seus valores possíveis (utilizando templates do tipo 15). As templates utilizadas para o subprocesso 3 são: 12) Class1* (has | have) Property. 15) Class1* has Property, with possible (value | values) Values. 16) Class1* has Property, which is Class | Type#. 91 Figura 21: O subprocesso 2 do processo de criação de ontologias. A Figura 22 mostra o subprocesso 3 que permite definir um tipo para uma propriedade já definida na ontologia, utilizando templates do tipo 13: 13) Property& | Instance (is | are) Class | Type#. Figura 22: O subprocesso 3 do processo de construção de ontologias. 92 A Figura 23 mostra o subprocesso 4 que permite enumerar os valores que uma propriedade pode assumir, utilizando templates do tipo 14: 14) Property & has possible values Values. Figura 23: O subprocesso 4 do processo de construção de ontologias. A Figura 24 apresenta o subprocesso 5 que permite a definição de valores default para uma propriedade que já teve seu tipo, ou a enumeração dos valores possíveis, definido(s). Para isso, são utilizadas templates do tipo 17: 17) Property has default value Value. Figura 24: O subprocesso 5 do processo de construção de ontologias. 93 A Figura 25 mostra o subprocesso 6 que permite definir instâncias de uma classe previamente definida na ontologia, utilizando templates do tipo 13: 13) Property& | Instance (is | are) Class | Type#. Figura 25: O subprocesso 6 do processo de construção de ontologias. A Figura 26 mostra o subprocesso 7 que permite definir valores para as propriedades de uma instância previamente definida na ontologia, utilizando templates do tipo 18: 18) Property + of Instance is Value. Figura 26: O subprocesso 7 do processo de construção de ontologias. 94 O processo apresentado impõe uma ordem parcial que deverá ser seguida pelo usuário para a definição de uma ontologia. Alguns dos benefícios esperados para esta abordagem foram observados no início desta seção como, por exemplo, a pretensão de diminuir os erros de consistência e a carga cognitiva para o usuário. Neste capítulo apresentamos uma proposta para a construção de um editor de ontologias, os mecanismos nele acrescidos para facilitar a interação do usuário com a BC, e o processo de construção de ontologias proposto. No próximo capítulo discutiremos as limitações desta abordagem e as diferenças e semelhanças com outras abordagens encontradas na literatura. 95 Capítulo 6 Conclusão O s editores de ontologias que temos conhecimento, em sua maioria, são voltados para uso do engenheiro de conhecimento, ou de profissionais com alguma experiência na área de construção de ontologias. Como mostrado por Pérez [PÉREZ, 2002], eles, geralmente, utilizam a própria tecnologia de representação de conhecimento (TRC) na qual a ontologia será codificada, além de recursos gráficos disponibilizados pelo editor, como meio de comunicação entre a ferramenta e seu usuário. Este tipo de comunicação não é eficiente para o nosso propósito, uma vez que nossa idéia é permitir que o especialista do domínio consiga utilizar a ferramenta para colocar seu conhecimento diretamente no sistema e, na maioria das vezes, ele não tem conhecimento nenhum sobre uma TRC. Deste modo, pelos motivos já descritos nas seções anteriores, propomos a adoção de uma linguagem natural controlada como meio de comunicação entre o especialista e a codificação da ontologia em uma TRC. Visando dar sustentação a este objetivo, no capítulo 3 96 apresentamos uma linguagem de especificação que se baseia em uma LNC; no capítulo 4 discutimos seu mapeamento para uma TRC, a OWL, a qual está sendo adotada como padrão na Web semântica; e no capítulo 5 apresentamos um editor de ontologias que incorpora estes recursos e utiliza um processo de construção de ontologias visando auxiliar o especialista na construção de sua ontologia, conforme havíamos proposto. Outros trabalhos podem ser encontrados na literatura atual que têm o mesmo objetivo, ou objetivo semelhante o nosso. Entre eles, alguns merecem ser analisados. O projeto Attempto [FUCHS, SCHWERTEL e SCHWITTER, 1999], do qual se originou a linguagem ACE, apresenta uma abordagem semelhante à nossa, fazendo uso de LNC como interface para representação de conhecimento. O projeto Attempto é um projeto incremental e tem publicações sobre o uso da LNC a pelo menos dez anos [FUCHS e SCHWITTER, 1995]. A linguagem ACE, definida em seu âmbito inicialmente para a criação de especificações de requisitos de software, evoluiu a ponto de ser aplicada também para representação de conhecimento em geral. Em sua abordagem, o usuário tem a liberdade de digitar as sentenças que descrevem as especificações, as quais são analisadas pelo processador da linguagem e mapeadas para as DRSs. Sentenças ambíguas são reportadas para o usuário para que este possa decidir sobre a semântica de cada uma delas. O usuário também pode acrescentar uma palavra ou modificar o conteúdo do léxico por meio de uma interface que exige o mínimo de conhecimento lingüístico. As DRSs geradas a partir das especificações em ACE formam a base de conhecimento que representam estas especificações. Esta representação pode ser utilizada para futuras consultas sobre as especificações ou para raciocínio sobre o conhecimento gerado [FUCHS e SCHWERTEL, 2003]. Originada do projeto Attempto, a proposta de Schwitter [2005] também reside na utilização de LNC como interface entre o usuário e uma TRC. Nesta abordagem, o usuário começa digitando o texto e o editor sugere as estruturas sintáticas que devem vir em seguida, 97 mantendo, assim, o aspecto controlado da linguagem. Um processador é chamado toda vez que uma palavra é digitada. Este processador compõe uma DRS, que representa o discurso digitado, procura pelas categorias gramaticais seguintes, compõe informações para uma paráfrase e resolve referências anafóricas definidas dinamicamente. Caso uma palavra não faça parte do léxico, o usuário tem a opção de estendê-lo por meio de um editor do léxico. O editor de especificações relaciona as sentenças em LNC com um fragmento de lógica de primeira ordem, normalmente alguma linguagem baseada em lógica descritiva (como RDF ou OWL), a qual pode ser utilizada por construtores de modelos e raciocinadores para responder questões sobre o seu conteúdo. Apesar da LNC proposta neste trabalho ser limitada em comparação com o projeto Attempto [FUCHS, SCHWERTEL e SCHWITTER, 1999], podemos, com certa facilidade, ampliar sua expressividade em trabalhos futuros. Isso será possível por ela ter sido implementada de forma modular, utilizando o parser proposto por Blackburn e Bos [1999], o qual é um parser para uma linguagem bem mais expressiva do que a inicialmente considerada neste trabalho. A priori, as restrições feitas à linguagem proposta neste trabalho se devem, principalmente, a questão do tempo disponível para a realização do mapeamento para a linguagem OWL, no entanto, não é descartável a hipótese de que tecnicamente não seja possível identificar sentenças não ambíguas para alguns dos elementos não mapeados. Em comparação com o trabalho de Schwitter [2005], o qual constrói as sentenças de forma semelhante à nossa abordagem, podemos dizer que a expressividade da LNC proposta por ele é semelhante à nossa. Apesar de ele cobrir alguns construtores da linguagem OWL DL que não cobrimos como, por exemplo, sentenças que permitem a representação de uma característica de uma propriedade (e.g., o fato de a propriedade ser transitiva, inversa ou simétrica), ele não cobre outros construtores que nós cobrimos como, por exemplo, a representação do quantificador existencial (someValuesFrom), da equivalência de instâncias, 98 da enumeração de membros de uma classe e das restrições de cardinalidade. Além disso, algumas sentenças propostas por Schwitter não são muito naturais para um usuário leigo como, por exemplo, a sentença “’ObjectProperty’ as the range ‘class’”, que pode ser instanciada para “A maker has the range winery”. Quanto ao problema de extensão do léxico, o editor por nós proposto apresenta vantagens em relação às propostas acima, pois ele permite a inclusão de substantivos de forma automática, visto que a declaração de uma nova entidade da ontologia se traduz automaticamente na inclusão de um novo substantivo no léxico. A inclusão de elementos de outras classes gramaticais como verbos, adjetivos, etc., não foi considerada neste trabalho por questões de tempo, mas estes elementos poderão ser tratados de forma semelhante. É interessante lembrar que o editor de ontologias dirigido por processo proposto limita, parcialmente, a expressão do usuário, quando da especificação da base de conhecimento, obrigando-o a seguir uma ordem parcial para definir os elementos da ontologia. Esta abordagem tem o benefício de evitar que o especialista cometa erros de consistência muito comuns como, por exemplo, a referenciação de um elemento que ainda não existe na ontologia. Além disso, os menus pop-up utilizados na área de edição evitam que o especialista referencie um elemento da ontologia de forma incorreta como, por exemplo, fazer referência a uma classe ao invés de referenciar uma propriedade — o que ocasionará um erro na fase de mapeamento da linguagem. A introdução destes menus nas templates ajuda o especialista a lembrar dos elementos que foram previamente definidos na ontologia, diminuindo, assim, a carga cognitiva sobre ele. Outro fato interessante é que o uso de templates possibilita, como efeito secundário, que as sentenças sejam pré-processadas (isto é, pré-parseadas), eliminando a necessidade de um parser explicito, o qual será substituído por um agente de software que possa resolver as anáforas e elipses presentes na árvore sintática do discurso. 99 Existem outras formas de implementação do editor. Uma delas seria permitir que o usuário digitasse qualquer sentença dentro da linguagem, e completasse as referências com qualquer elemento que julgasse necessário, estivesse ele definido ou não na ontologia (utilizando avaliação tardia para o processamento do texto). Desta forma, os erros de consistência da ontologia como, por exemplo, o uso de elementos desconhecidos (não presentes na ontologia) somente seriam detectados durante o processo de checagem de consistência. Além disso, o usuário poderia utilizar nomes de classes nas referências nas quais são esperados nomes de propriedades, ou nomes de propriedades onde são esperados nomes de valores, ou qualquer outra confusão deste tipo, que são evitadas com a abordagem que adotamos. Esta segunda abordagem somente teria interação com a base de conhecimento durante o processo de checagem de consistência da ontologia e teria que adiar muitas das avaliações das sentenças, visto que, a permissão de que o usuário defina a ontologia em qualquer ordem aceita que ele referencie elementos da ontologia que serão definidos após a sua referenciação. Uma outra forma de implementação do editor seria combinar as duas abordagens anteriores e, sem estabelecer uma ordem para que o especialista construa a ontologia, também sugerir as classes, propriedades e valores que podem ser utilizados para o preenchimento das templates, mas sem obrigar que estes elementos sejam utilizados. Isto permitiria que o especialista completasse as sentenças com qualquer referência que desejar mesmo que esta não referencie um elemento já presente na ontologia. Esta abordagem mantém o auxilio ao usuário, procurando diminuir os erros mais comuns de coerência que seriam cometidos na abordagem anterior sem, no entanto, estabelecer uma ordem fixa para o processo de definição da ontologia. Esta abordagem também necessitaria de avaliação tardia para a sua implementação. 100 Somente uma avaliação de usabilidade do editor de ontologias poderá identificar o ponto de balanceamento ideal entre o custo de implementação e o potencial de liberdade de expressão do usuário que pode ser atingido, esclarecendo qual das abordagens é a mais interessante. É importante ressaltar que a proposta de um processo de construção de ontologias, associado à linguagem de especificação, representa um ganho em relação ao projeto Attempto e ao trabalho de Schwitter, pois estes não se preocupam em sugerir um processo deste tipo para guiar o especialista nesta tarefa. Um outro editor de ontologias, chamado DOE (Differential Ontology Editor) [DOE, 2005], mais voltado para engenheiros de conhecimento, sugere alguns passos que devem ser seguidos para o processo de especificação de uma ontologia. No primeiro passo, o usuário deve construir uma taxonomia de conceitos e relações e depois deve justificar porque cada classe filha é diferente da classe mãe e porque classes do mesmo nível são diferentes umas das outras. No segundo passo, o usuário pode definir restrições aos domínios das relações. E no terceiro passo, a ontologia pode ser traduzida para uma TRC específica. Nosso processo é mais flexível, não obrigando o usuário a definir uma taxonomia completa para depois definir suas restrições. Se o usuário achar necessário definir uma subclasse e, em seguida, definir suas propriedades, faixa de valores possíveis para ela e também suas restrições, ele pode fazer isso. Por outro lado, o editor DOE é voltado para profissionais acostumados a definir ontologias, enquanto nosso trabalho tem o foco voltado para o especialista do domínio, que pode não ter experiência no ramo. Deste modo, nosso trabalho procurou por meio da definição de uma linguagem natural controlada, de um mapeamento para uma tecnologia de representação de conhecimento e da proposta de um editor dirigido por processo tornar possível a um especialista de um domínio construir uma base de conhecimento. Para afirmar que a LNC proposta neste trabalho será facilmente utilizada e aprendida pelo especialista é necessário que sejam realizados testes de 101 usabilidade tanto da linguagem quanto do conjunto editor-linguagem, os quais serão metas futuras deste trabalho. Além disso, se considerarmos a possibilidade de expressar conhecimento procedimental, uma outra possível aplicação desta linguagem seria como uma linguagem de extensão em aplicações extensíveis por usuários finais, visto que os usuários destas aplicações não têm conhecimento de programação. Para isto é necessário ampliar o conjunto de templates disponíveis aos usuários e definir um mapeamento para uma linguagem de regras. É interessante observar que este mesmo tipo de linguagem também poderá ser utilizado na especificação de regras de negócio na Web semântica, tornando este tipo de tarefa acessível aos usuários leigos. 102 Referências ADELI, H. Knowledge engineering. New York: Ohio State University: McGraw Hill, 1990. 368 p. ISBN: 0-07-000355-6. ALLEN, J. Natural language understanding. 2nd. ed. Redwood City: Addison Wesley, 1995. 654 p. ISBN 0-8053-0334-0. ALMEIDA, M. B. Linguagens utilizadas na construção de ontologias. Disponível em:<http://www.eci.ufmg.br/mba/p1_2_2.html>. Acesso em: 25 abr. 2005. ALTWARG, R. Controlled languages: an introduction. Macquarie University, Graduate Program in Speech and Language Processing. Macquarie, 2000. Disponível em: <http://www.shlrc.mq.edu.au/masters/students/raltwarg/clwhatisa.htm>. Acesso em: 22 jun. 2004. ALMQVIST, I.; HEIN, A. S. Defining ScaniaSwedich – a controlled language for truck maintenance. In: INTERNATIONAL WORKSHOP ON CONTROLLED LANGUAGE APPLICATIONS, 1., 1996, Proceedings… Leuven, Belgium: Katholieke Universiteit Leuven, Centre for computational Linguistics, 1996. pp. 159164. ANTONIOU, G.; VAN HARMELEN, F. A semantic Web primer. Massachusetts: Massachusetts Institute of Tecnology: MIT Press, 2004. 237 p. ISBN 0-262-01210-3. ÁVILA, B. C.; MONARD, M. C., SEMARF: um sistema para manipular frames. Ponta Grossa: UEPG(ITI), Setor de Ciências Agrárias e de Tecnologia, Departamento de Informática, 1992. BECHHOFER, S.; et al. OWL Web Ontology Language Reference. 2004. Disponível em: <http://www.w3.org/TR/owl-ref>. Acesso em: 12 jul. 2004. BITTENCOURT, G. Inteligência artificial: ferramentas e teorias, 2. ed.; Florianópolis, SC: Ed. da UFSC, 2001. BLACKBURN, P.; BOS, J. Representation and inference for natural language: a first course in computational semantics. [s.l.]:CSLI Publications, 2005. ISBN 1575864959. BLACKBURN, P.; BOS, J. Computational semantics for natural language: course notes, Indiana University, jun. 2003. Disponível em: <www.iccs.informatics.ed.ac.uk/~jbos/comsem/download/nasslli.pdf>. Acesso em: 24 nov. 2004. BLACKBURN, P.; BOS, J. Representation and inference for natural language: a first course in computational semantics. Universität dês Saarlandes, Sep. 1999. V.2 – Working with discourse representation structure. Disponível em: <http://www.cogsci.ed.ac.uk/~jbos/comsem/book2.html>. Acesso em: 21 jul. 2004. 103 BOEING. Checker for ASD Simplified Technical English Now Available From Boeing. 2005. Disponível em:<www.boeing.com/phantom/sechecker/se.html>. Acesso em: 05 maio 2005. BORST, W.N. Construction of engineering ontologies for knowledge sharing and reuse. Thesis.( Phd ) - University of Twente, The Netherlands. 1997. Disponível em: <http://www.ub.utwente.nl/webdocs/inf/1/t0000004.pdf>. Acesso em: 12 jul. 2005. BRACHMAN, R. J., et al. Krypton: a functional approach to knowledge representation. IEEE Computer, v. 16, n. 10, p. 67-73, 1983. BRACHMAN, R. J. 1979. On the epistemological status of semantic networks. In ASSOCIATIVE NETWORKS. Representation and use of knowledge by computers. Findler, N.V: Academic Press, New York, 1979, pp. 3-50. BRACHMAN, R. J. What’s a concept: structural foundations for semantic networks. International Journal of Man-Machine Studies, v. 9, p. 127-152, 1977. BRACHMAN R. J.; NARDI, D. An introduction to description logic. In: BAAD, F. et al. (Ed.). The description logic handbook: theory, implementation, and applications. (S.l.): Cambridge University Press, 2003. ISBN0521781760. BRACHMAN, R. J.; SCHMOLZE J. G. An overview of the KL-ONE knowledge representation system. Cognitive Science, v. 9, n. 2, p.171-216, 1985. BRILL, D. Loom reference manual. California: Information Sciences Institute, University of Southern California, Dec., 1993. Disponível em: <http://www.isi.edu/isd/LOOM/LOOM-HOME.html>. Acesso em: 25 maio 2005. BUCHANAN, B. G.; SHORTLIFE, E. H. Rule-based expert systems: the MYCIN experiments of the stanford heuristic programming project. Massachusetts: AddisonWesley, 1984. 748 p. ISBN: 0201101726. CERCONE, N.; MCCALLA, G. What is knowledge representation? In: CERCONE, N.; MCCALLA, G. (Ed).. The Knowledge Frontier: essays in the Representation of Knowledge, New York: Springer-Verlag, 1987. p. 1-43. CLANCEY, W. J. The knowledge level reinterpreted: modeling socio-technical system. International Journal of Intelligent Systems, v. 8, p. 33-49, 1993. CHAUDHRI V. K. et al. Open knowledge base connectivity 2.0. 1998. Disponível em: <http://www-ksl-svc.stanford.edu:5915/doc/release/okbc/okbc-spec/okbc-2-0-3.pdf> Acesso em: 25 maio 2005. COHEN, W.W. Learnability of restricted logic programs. In: INTERNATIONAL WORKSHOP ON INDUCTIVE LOGIC PROGRAMMING, 3.,1993. Proceedings… New Jersey: Muggleton S., 1993. p. 41-72. Disponível em: <citeseer.ist.psu.edu/article/cohen93learnability.html>. Acesso em 10 jul. 2005. DA SILVA, S. R. P. Um modelo semiótico para programação por usuários finais. Tese (Doutorado) - Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro, Rio de Janeiro, maio 2001. 104 DA SILVA, S. R. P.; PINHEIRO, J. M. Um framework para criação de linguagens de domínio específico, In: SIMPÓSIO BRASILEIRO DE LINGUAGENS DE PROGRAMAÇÃO, 8., 26-28 maio 2004, Niterói, Rio de Janeiro. Anais... Niterói: [s. n.], 2004. DAVIS, R.; SHROBE, H.; SZOLOVITIS, P. What is Knowledge Representation? AI Magazine, vol 14, nº1, pp. 17-33. 1993. Disponível em:<http://medg.lcs.mit.edu/ftp/psz/k-rep.html> Acesso em: 25 jul. 2005. DESCRIPTION LOGICS. Disponível em: <http://dl.kr.org/>. Acesso em: 07 jul. 2004. DOE. Differential ontology editor. Disponível em: <http://opales.ina.fr/public/>. Acesso em: 21 jun. 2005. ECO, U. Theory of semiotics. Bloomington: Indiana: University Press. 1976. FEIGENBAUM, E. A.; BUCHANAN, B. G.; LEDERBERG, J. On generality and problem solving: A case study using DENDRAL program. In: NELTZER, B; NICHIE, D. (Ed.). Machine Intelligence. Edinburg: Edinburgh University Press, Scotland, 1971. p.165-190. FENSEL, D. et al. OIL: ontology infrastructure to enable the semantic web. IEEE Inteligent Systems, v. 16, n. 2, p. 38-45, 2001. FRANCONI, E. Description logic course. Department of Computer Science, University of Manchester, p.165-190. 2002. Disponível em: <http://www.cs.man.ac.uk/_franconi/dl/course/2002/>. Acesso em: 02 abr. 2004. FRANCONI, E. Description logic for natural language processing. In: AAAI FALL SYMPOSIUM ON KNOWLEDGE REPRESENTATION FOR NATURAL LANGUAGE PROCESSING IN IMPLEMENTED SYSTEMS, 1994, New Orleans. Proceedings... New Orleans: [s. n.], 1994. FUCHS, N. E.; SCHWERTEL U. Reasoning in attempto controlled English. In: F. BRY, F.; HENZE, N. Henze; MALUSZYNSKI, J. Maluszynski (Ed.). Principles and Practice of Semantic Web Reasoning: International Workshop PPSWR 2003, Mumbai, India, Dec. 2003. Lecture Notes in Computer Science 2901, Springer Verlag, 2003. FUCHS, N. E.; SCHWERTEL, U.; SCHWITTER, R. Attempto controlled english – not just another logic specification language. In: LNCS 1559. Título, Springer (1999), p. 1–20. FUCHS, N.E.; SCHWITTER, R.; SCHWERTEL, U. Attempto controlled english (ACE):Language manual. Zürich: Institut für Informatik der Universität of Zürich, 1999. FUCHS, N. E.; SCHWITTER, R. Specifying Logic Programs in Controlled Natural Language. In: WORKSHOP ON COMPUTATIONAL LOGIC FOR NATURAL LANGUAGE PROCESSING, 1995, University of Edinburgh, Proceedings… University of Edinburgh: [s.n.], Apr. 1995. GINSEBERG, M. Essentials of Artificial Intelligence. San Francisco: University of Oregon, Eugene. Morgan Kaufmann Publishers, 1994. 430 p. ISBN:1-55860-221-6. Disponível 105 em: <http://www.cirl.uoregon.edu/research/kr.html>. Acesso em: 09 mar. 2005. Computational Intelligence Research Laboratory (CIRL). GODOI, M. S. Implementação de Uma Interface para o Ambiente de Extensões para Aplicações Extensíveis. Relatório Técnico. Maringá:Departamento de Informática, Universidade Estadual de Maringá, Brasil, ago. 2004. 22 p. GRUBER, TOM. What is an ontology? 1996. Disponível em: <http://www.ksl.stanford.edu/kst/what-isan-ontology.html>. Acesso em: 15 set. 2004. GUARINO, N. Formal ontology, conceptual analysis and knowledge representation. International Journal of human and Computer Studies, v. 43 n. 5/6, 1995. Special issue. GUARINO, N.; GIARETTA, P. Ontologies and knowledge bases, towards a terminological clarification. 1995. Disponível em: <http://www.ladseb.pd.cnr.it/infor/Ontology/Papers/KBKS95.pdf>. Acesso em: 13 jul. 2005. HAARSLEV, V. Racer – An Inference Engine for Semantic Web. Concordia: Department of computer science and software engineering, University of Concordia, 2005. Disponível em: <http://www.franz.com/products/racer/Racer_presentation.pdf>. Acesso em: 28 jul. 2005. HALL, A. Seven myths of formal methods. IEEE Software, v. 48, n. 1, (1990), p. 67–79 HESS, M. Recent developments in discourse representation theory. Switzerland, In: COMMUNICATION WITH MEN AND MACHINES, 1991, Geneva. Working Notes… Geneva: M. King, 1991. HOEFLER, S. The syntax of attempto controlled English: an abstract grammar for ACE 4.0. Technical report. Zürich: Department of informatics, University of Zurich, Switzerland, mar. 2004. HORROCKS, I. et al. Reference description of the DAML+OIL ontology markup language. Technical Report. Jan. 2001. Disponível em: <http://www.daml.org/2000/12/reference.html> Acesso em: 12 jun. 2005. INTERNATIONAL CONTROLLED LANGUAGE APPLICATIONS WORKSHOP, 4., 15 – 17 May. 2003, Dublin, Ireland. Proceedings… Dublin: [s.n.], 2003. KAMP, H. A theory of truth and semantic representation. In: GROENENDIJK, J. et al. (Ed.). Formal methods in the study of languages Foris, Amsterdam: Mathematisch Centrum, 1981. KENT, R.E. Conceptual knowledge markup language: the central core . In: WORKSHOP ON KNOWLEDGE ACQUISITION, MODELING AND MANAGEMENT, 12., Banff, 1999. Proceedings ... Disponível em: <http://sern.ucalgary.ca/KSI/KAW/KAW99/papers.html>. Acesso em: 23 maio 2005. 106 KNUMBLAUCH, H. Editing OWL ontologies with protégé. Stanford University, jan. 2004. Disponível em: <http://protege.stanford.edu/plugins/owl/publications/2004-07-06OWL-Tutorial.ppt> Acesso em: 24 fev. 2005. LASSILA, O.; SWICK, R. R. Resource description framework (RDF): model and syntax specification, 22 Feb. 1999. Disponível em: <http://www.w3.org/TR/1999/REC-rdfsyntax-19990222>. Acesso em: 12 jun. 2005. LIOU, Y. I. Knowledge acquisition: issues, techniques, and methodology. In: of the 1990 ACM SIGBDP: conference on Trends and directions in expert systems. Proceedings… ACM Press: New York, 1990. p.. 212 – 236. ISBN:0-89791-416-3. LYONS, J. Language and Linguistics: an introduction. Cambridge, UK: Cambridge University Press, 1981. ISBN 0521297753. MCGRAW, K.L.; HARBISON-BRIGGS, K. Knowledge acquisition: principles and guidelines. Prentice-Hall: NJ, 1989. 376 p. ISBN:0-13-516436-2. MCGUINESS, D. L.; HARMELEN, F. OWL web ontology language - overview, 2003. Disponível em:<http:www.w3.org/TR/2003/PR-owl-features-20031215>, Acesso em: 10 jan. 2004. MINSKY, M.L. A framework to represent knowledge. In: WINSTON, P. J. (Ed.). The Psychology of Computer Vision. New York: McGraw Hill, 1975. . pp 211-277. NELKEN, R.; FRANCEZ, N. Translating natural language system specifications into temporal logical via DRT. Technical report. Laboratory for Computational Linguistics, Israel Institute of Technology: Computer Science Department, 1996. NOY, F. N.; McGUINESS, D. L. Ontology development 101: a guide to creating your first ontology. Stanford Knowledge Systems Laboratory Technical Report KSL-01-05, Mar. 2001 Disponível em: <http://protégé.stanford.edu/publications/ontology_development/ontology101-noymcguiness.html>. Acesso em: 23 mar. 2005. OLIVEIRA, E. M. Integração e Implementação de um Ambiente de Extensão para Aplicações Extensíveis. 2004. 51 f. Monografia (Graduação em Ciência da Computação) – Departamento de Informática, Universidade Estadual de Maringá, Maringá, jan. 2004. ONTOLOGY. Disponível em <http://en.wikipedia.org/wiki/Ontology>. Acesso em: 12 jul. 2005. PARCIA, B; SIRIN, E. Pellet: An OWL DL Reasoner, MINDSWAP Research Group, Maryland: University of Maryland, 2003. Disponível em: <http://iswc2004.semanticweb.org/posters/PID-ZWSCSLQK-1090286232.pdf>. Acesso em: 28 jul. 2005. PÉREZ, A. G. et al. A survey on ontology tools. OntoWeb. May, 2002. Disponível em:< http://ontoweb.aifb.uni-karlsruhe.de/About/Deliverables/D13_v1-0.zip>. Acesso em: 23 jun. 2005. PEIRCE, C.S. Collected papers. Cambridge: Ma. Harvard University Press, 1931. (Excerpted in BUCHLER, J., ed., Philosophical Writings of Peirce. New York: Dover, 1955). 107 PINHEIRO, J. M. Atualização de bases de conhecimento pelo usuário final. 2003. 63 f. Monografia (Graduação em Ciência da Computação) – Departamento de Informática, Universidade Estadual de Maringá, Maringá, 2003. PULMAN, S.G. Controlled Language and Knowledge Representation. In: INTERNATIONAL WORKSHOP ON CONTROLLED LANGUAGE APPLICATIONS, 1., Belgium, Mar. 1996. Proceedings… Belgium: Katholieke Universiteit Leuven, 1996. p. 233-242. QUILLIAN, M. R. Semantic memory. In: MINSKY, M.(Ed). Semantic information processing. Cambrige: M.I.T. Press, 1968. p. 227-270. QUIRK, R. et al. A grammar of contemporary English. 1st ed. Essex, UK: Longman Group, 1972. ISBN 0 582 52444 x. RECTOR, A. et al. Ontology design patterns and problems: practical ontology engineering using Protege-OWL. In: THIRD INTERNATIONAL SEMANTIC WEB CONFERENCE, (ISWC), 2004. Tutorial. Hiroshima, Japan: Springer-Verlag, 2004. RECTOR, A. L. et al. The grail concept modeling language for medical terminology. Artificial Intelligence in Medicine, Kluwer Publishing, v. 9, p. 139-171, 1997. RUSSEL, S; NORVING, P. Inteligência artificial. 2. ed. Tradução da Ed. Elsevier. Rio de Janeiro: Ed. Campus, 2004. ISBN 85-352-1177-2. SATTLER, U. Early Knowledge Representation Formalisms. Lecture Notes, mar. 2005.. Disponível em: <www.cs.man.ac.uk/~sattler/teaching/Section1+2.pdf> Acesso em: 20 maio 2005. SCHWITTER R. Controlled natural language as interface language to the semantic web. Sydney, Australia: Centre for Language Technology Macquarie Universit, 2005. SCHWITTER, R.; TILBROOK, M. Controlled Natural Language meets the Semantic Web. In: ASUDEH, A. C.; PARIS, S. Wan (Ed.). Proceedings of the Australasian Language Technology Workshop. 8th. Macquarie University, December 2004, pp. 55-62, 2004. SCHWITTER, R. Representing knowledge in controlled natural language: a case study. In: NEGOITA, M. G.; HOWLETT, R. J.; JAIN, L. C. (Ed.). Knowledge-based intelligent information and engineering systems. INTERNATIONAL CONFERENCE, KES, 8., 2004, Wellington. Proceedings… Wellington, New Zealand, p. 711-717, Sep. 2004, Part I, Springer LNAI 3213. SCHWITTER, R.; LJUNGBERG, A.; HOOD, D. ECOLE: a look-ahead editor for a controlled language. Proceedings of EAMT-CLAW03, controlled language translation, Dublin City University, p. 141–150, May 15-17, 2003. SEE, D. C; SLACKS , N.; STANLEY, C.; TECLLAB , M.; TOBUN , A.; WILLIAMS, N. Questions on Knowledge Acquisition. Computing course at South Bank University, 1997. Disponível em: <http://www.scism.sbu.ac.uk/inmandw/tutorials/kaqu/g1.htm> Acesso em: 15 jan. 2005. 108 SOWA, J. F. Knowledge representation: logical, philosophical and computational foundations. Pacific Grove, California: Brooks Cole Publishing Co., 1999. 512 p. ISBN 0534949657. STEFIK, M. Introduction to knowledge systems. San Francisco, Califórnia: Morgan Kaufmann Publishers, 1995. ISBN 1-55860-166-X. TURBAN, E.; FRENZEL, J. L. E. Expert systems and applied artificial intelligence. Englewood Cliffs, NJ: Prentice Hall, 1992. ISBN 0024216658. WATERMAN, D. A. A guide to expert systems. Boston, MA: Addison-Wesley Longman Publishing, 1986. WEB ONTOLOGY LANGUAGE. Disponível em: <http://www.w3.org/2004/OWL/>. Acesso em: 12 fev. 2004. WOODS, A. W. Knowledge Representation: What’s Important About It? In: CERCONE, N.; MCCALLA, G. (Ed.). The knowledge Frontier: Essays in the representation of knowledge. New York: Springer-Verlag, 1987. WOODS, A. W. What’s a link? Foundations for semantic networks. Ed. Bobrow, D. G., & Collins, A. M. Representations and Understanding: Studies in cognitive Science. New York: Academic Press, 1975. p. 35-82. 109 ANEXO I Algoritmo de mapeamento de DRS para OWL Observações importantes para o entendimento do algoritmo: 1) Variáveis estão destacadas no estilo VARIÁVEL 2) UNIFY é um procedimento que unifica uma condição com algum elemento de uma lista de condições. Por exemplo: se quisermos saber se existe uma condição com o argumento A na lista de condições, chamamos UNIFY(CON, A, COND). Se existir uma condição como, por exemplo, wine(A), a variável CON será instanciada com wine. Se quisermos saber se existe uma condição isa(A, B), chamamos UNIFY(isa, [A, B], COND). Se não conseguir unificar devolve false, se conseguir, devolve true; 3) A entrada do algoritmo será uma drs da forma drs([R],[COND]), onde R é uma lista de referentes do discurso e COND é uma lista de condições sobre estes referentes. Exemplo: Na drs([A, B], [wine(A), drink(B), ako(A, B)]), A e B são elementos que o discurso referencia e wine(A), drink(B) e ako(A, B) são condições para os referentes A e B. 4) Todas as chamadas de funções estão em letras MAIÚSCULAS e as funções estão descritas no fim do algoritmo. Input: drs([R],[COND]), onde R é uma lista de referentes do discurso e COND é uma lista de condições sobre estes referentes. Output: TOWL, uma representação em OWL da DRS de entrada ou erro. Variáveis globais: LCLASS: um conjunto das classes definidas na ontologia; LNOTDEF: um conjunto das propriedades que foram definidas nas sentenças mas aguardam a definição da faixa para serem definidas na ontologia; LVALUES: um conjunto de valores enumerados para uma propriedade; LISNT: um conjunto das instâncias definidas na ontologia; /************ Sentenças cobertas no próximo trecho do algoritmo************** 1 - A wine is a drink. drs([A, B], [wine(A), drink(B), ako(A, B)]) 2 - A wine is a drink that has a color. drs([A, B, C], [wine(A), color(C), has(A, C), drink(B), ako(A, B)]) ********************************************************************/ Case UNIFY(ako,[A, B],COND) then UNIFY(SUB, [A], COND); {onde SUB é a subclasse que está sendo definida} UNIFY(CLASS, [B], COND); {onde CLASS é a classe mãe de SUB} if CLASS ∉ LCLASS then return error(‘The Class ’,CLASS,’ is not defined’); else if SUB ∈ LCLASS then return error(‘The class ‘,SUB,’ has been already defined’); else begin DEFINE_CLASS(CLASS, SUB, LCLASS, TOWL); LCLASS <= LCLASS + SUB; end; 110 if UNIFY(has, [A, C], COND) then begin UNIFY(PROPER, [C],COND); {PROPER é a propriedade que está sendo definida} LNOTDEF <= LNOTDEF + prop(SUB, PROPER); end; return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 3 - A motor is part of an automobile. drs([A, B],[motor(A), automobile(B), partof(A,B)])} ********************************************************************/ Case UNIFY(part of, [A, B],COND) then UNIFY(PART(A) ∈ COND; {PART é a parte que está sendo definida para a classe} if PART ∈ LCLASS then return error(‘The class ‘,PART,’ has been already defined’); UNIFY(CLASS, [B], COND); {CLASS é a classe para qual a PART está sendo definida} if CLASS ∈ LCLASS then begin SUPERCLASS <= CONSULT_SUPER_CLASS(BC, CLASS); RETIRE_DEFINITION(BC, CLASS); DEFINE_PARTOF(SUPERCLASS, CLASS, PART, TOWL); end; else return error(‘The Class ’,CLASS,’ is not defined’); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 4a – A wine has at least one maker that must be a winery. drs([A, B, C], [wine(A), winery(C), mustbe(B, C), maker(B), has(A, B), atleast(B,1)]) ********************************************************************/ Case (UNIFY(atleast, [B,1], COND )) and (UNIFY(mustbe, [B,C], COND )) then UNIFY(PROPER, [B], COND); {PROPER é a propriedade para a qual está sendo definida a restrição} UNIFY(RANGE, [C], COND); {RANGE é faixa de valores de PROPER} UNIFY(CLASS, [A], COND); {CLASS é a classe domínio de PROPER} if CLASS ∈ LCLASS then return error(‘The class ‘,CLASS,’ has been already defined’); if RANGE ∉ LCLASS then return error(‘The class ‘,RANGE,’ is not defined); DEFINE_RESTRICTION(CLASS, PROPER, RANGE, ‘someValuesFrom’, TOWL); DEFINE_OBJECTPROPERTY(PROPER, CLASS, RANGE, TOWL); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 4b – All wine has at least one maker that must be a winery. drs([],[imp( drs([A],[wine(A)]), drs([B, C],[maker(B), winery(C), mustbe(B,C), has(A,B), atleast(B,1)]) 111 )]) 5a - All the wine makers must be wineries. 5b - All the wine makers must be wineries. drs([], [imp( drs([A, B], [wine(B), of(A, B), maker(A)]), drs([C], [winery(C), mustbe(A, C)]) )]) ********************************************************************/ case UNIFY(imp, [DRS1, DRS2] COND) then case (UNIFY(drs, [[RA], [CONDA]], DRS1)) and (UNIFY(drs, [[RC], [CONDC]], DRS2)) then case (UNIFY(atleast, [B,1], CONDC)) and (UNIFY(mustbe, [B,C], CONDC )) then {4B} UNIFY(PROPER, [B], CONDC); {PROPER é a propriedade para a qual está sendo definida a restrição} UNIFY(RANGE, [C],CONDC);RANGE é faixa de valores de PROPER} UNIFY(CLASS, [A], CONDA); {CLASS é a classe domínio de PROPER} if RANGE ∉ LCLASS then return error(‘The class ‘,RANGE,’ is not defined); DEFINE_RESTRICTION(CLASS, PROPER, RANGE, ‘someValuesFrom’, TOWL); DEFINE_OBJECTPROPERTY(PROPER, CLASS, RANGE, TOWL); return TOWL; case UNIFY(mustbe, [A,C], CONDC) then {5A e 5B} UNIFY(PROPER, [A], CONDA); {PROPER é a propriedade para a qual está sendo definida a restrição} UNIFY(RANGE, [C], CONDC); {RANGE é faixa de valores de PROPER} UNIFY(CLASS, [B], CONDA); {CLASS é a classe domínio de PROPER} if RANGE ∉ LCLASS then return error(‘The class ‘,RANGE,’ is not defined); DEFINE_RESTRICTION(CLASS, PROPER, RANGE, ‘allValuesFrom’, TOWL); DEFINE_OBJECTPROPERTY(PROPER, CLASS, RANGE, TOWL); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 6- The color of a redWine must be red. drs([A, B, C], [color(A), redwine(B), of(A, B), red(C), mustbe(A, C)]) ********************************************************************/ Case UNIFY(mustbe, [A,C] COND) then {6} UNIFY(PROPER, [A], COND); {PROPER é a propriedade para a qual está sendo definida a restrição} UNIFY(VALUE, [C], COND){VALUE é o valor que PROPER deverá ter} UNIFY(CLASS, [B], COND); {CLASS é a classe domínio de PROPER} DEFINE_RESTRICTION(CLASS, PROPER, RANGE, ‘hasValue’, TOWL); LNOTDEF <= LNOTDEF + prop(CLASS, PROPER); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 7 - A wine must have exactly one maker. drs([A, B], [wine(A), maker(B), musthave(A, B), exactly(1, B)]) 8 - A wine must have at least one grape. drs([A, B], [wine(A), grape(B), musthave(A, B), atleast(1, B)]) 9 - A wine must have at most one grape. 112 drs([A, B], [wine(A), grape(B), musthave(A, B), atmost(1, B)]) ********************************************************************/ Case UNIFY(musthave, [A,B], COND) then {7, 8, 9} UNIFY(PROPER, [B], COND); {PROPER é a propriedade para a qual está sendo definida a restrição} UNIFY(CLASS, [A], COND); {CLASS é a classe domínio de PROPER} if CLASS ∈ LCLASS then return error(‘The class ‘,CLASS,’ has been already defined’); UNIFY(CARD, [NUMBER, B], COND){VALUE é o valor que PROPER deverá ter} DEFINE_CARDINALITY(CLASS, PROPER, CARD, NUMBER, TOWL); LNOTDEF <= LNOTDEF + prop(CLASS, PROPER); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 10 – A wine can only be a redwine, a rosewine or a whitewine. drs([A, B, C, D], [wine(A), redwine(B), rosewine(C), whitewine(C), canbe(A, B), canbe(A, C), canbe(A, D)]) ********************************************************************/ Case UNIFY(canbe, [A, C], COND) then UNIFY(CLASS, [A], COND); {CLASS é a classe enumerada que está sendo definida} if CLASS ∈ LCLASS then return error(‘The class ‘,CLASS,’ has been already defined’); for all UNIFY(canbe, [A, Y], COND) do begin UNIFY(X, [Y], COND); LVALUES <= LVALUES + X; end; NAMECLASS <= CONCATENA(CLASS, PROPER); ENUMCLASS <= DEFINE_ENUMERATEDCLASS(NAMECLASS, LVALUES, TOWL); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 11 – A car is also known as automobile. drs([A, B], [car(A), automobile(B), isequal(A, B)]) ********************************************************************/ Case UNIFY(isequal,[A, B],COND) then UNIFY(DEF, [A], COND); {onde DEF é a classe que está sendo definida} UNIFY(EQUAL, [B], COND); {onde EQUAL é a classe que já existe} case EQUAL ∈ LCLASS then if DEF ∈ LCLASS then return error(‘The class ‘,DEF,’ has been already defined’); else begin DEFINE_CLASS_EQUAL(EQUAL, DEF, LCLASS, TOWL); LCLASS <= LCLASS + CLASS; end; case EQUAL ∈ LINST then if DEF ∈ LINST then return error(‘The instance ‘,DEF,’ has been already defined’); else begin 113 DEFINE_INST_EQUAL(EQUAL, DEF, LINST, TOWL); LINST <= LINST + instance(EQUAL, INST); end; case CONSULT_PROPER (EQUAL, BC) then if CONSULT_PROPER (DEF, BC) then return error(‘The proper ‘,DEF,’ has been already defined’); else begin DEFINE_PROPER_EQUAL(EQUAL, DEF, TOWL); end; return TOWL; /* Sentença 12 será o último case porque várias outras sentenças tem has(A,B). se não casar com as sentenças 4, 14, 15, 16 e 17 , então será a sentença 4 */ /************ Sentenças cobertas no próximo trecho do algoritmo************** 13a – The maker is a winery. drs([A, B], [maker(A), winery(B), range(A, B)]) 16 – A wine has a grape, which is a wineGrape. drs([A, B, C], [wine(A), grape(B), has(A, B), winegrape(C), range(B, C)]) ********************************************************************/ Case UNIFY(range, [A, B], COND) then UNIFY(range, [A, B], COND) UNIFY(PROPER, [A], COND); {PROPER é a propriedade que está sendo definida} UNIFY(RANGE, [B], COND); { RANGE é a faixa que está sendo definida para PROPER } if has(C,A) ∈ COND {sent 13a} then begin if not UNIFY(prop, [CLASSDOM, PROPER], LNOTDEF) then return error(‘The property ’, PROPER,’ is not defined’); LNOTDEF <= LNOTDEF - prop(CLASSDOM, PROPER); end; else begin {sent 16} UNIFY(CLASSDOM, [C], COND); if CLASSDOM ∉ LCLASS then return error(‘The class ’, CLASS,’ is not defined’); end; if RANGE for um datatype then DEFINE_DATATYPEPROPERTY(PROPER, CLASSDOM, RANGE, TOWL); else if RANGE ∈ LCLASS then DEFINE_OBJECTPROPERTY(PROPER, CLASSDOM, RANGE, TOWL); else error(‘The range ’, RANGE,’ is not valid’); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 13b – w1 is a winery. drs([A, B], [eq(A,w1), wine(B), isa(A, B)]) ********************************************************************/ Case UNIFY(eq, [A, INST], COND) then UNIFY(CLASS, [B],COND); {CLASS é a classe para qual a instância Inst está sendo definida} if CLASS ∈ LCLASS 114 then return error(‘The class ’,CLASS,’ not defined’); DEFINE_INTANCE(CLASS, INST, TOWL); LINST <= LINST + instance(CLASS ,INST); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 14 – The color has possible values red, white and rose. drs([A, B], [color(A), possibleValues(A, B), red(B), white(B), rose(B)]) 15 – A wine has a color with possible values red, white and rose. drs([A, B, C], [wine(A), body(B), has(A, B), possibleValues(B, C), full(C), medium(C), light(C)]) ********************************************************************/ Case UNIFY(possibleValues, [B,C], COND) then UNIFY(PROPER, [B], COND); { PROPER é a propriedade para a qual a faixa está sendo definida} for all UNIFY(X, [C], COND) do LVALUES <= LVALUES + X; if not UNIFY(prop, [CLASSDOM, PROPER], LNOTDEF) then begin UNIFY(has, [A, B], COND); UNIFY(CLASSDOM, [A] COND); if CLASSDOM ∉ LCLASS then return error(‘The class ’, CLASS,’ is not defined’); end; else LNOTDEF <= LNOTDEF - prop(CLASSDOM, PROPER); {Se pertence a LnotDef, a classe existe} ENUMCLASS <= DEFINE_ENUMERATEDCLASS(CLASSDOM, PROPER, LVALUES, TOWL); DEFINE_OBJECTPROPERTY(PROPER, CLASSDOM, ENUMCLASS, TOWL); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 17- The color has default value rose. drs([A, B], [color(A), defaultValue(A, B), rose(B)]) ********************************************************************/ Case UNIFY(defaultValue, [A, B], COND) then UNIFY(PROPER, [A], COND);{PROPER é a propriedade para a qual está sendo definido o valor default} UNIFY(VALUE, [B], COND); {VALUE é o valor default para PROPER} CONSULT_PROPERTY_TYPE(BC, PROPER, TYPEPROPER); ALLOWEDVALUE <= CONSULT_PROPERTY_VALUE(BC, PROPER, VALUE); If not ALLOWEDVALUE { VALUE não é um valor permitido} then return error(VALUE, ‘is an invalid value to ’, PROPER) DEFINE_DEFAULTVALUE(PROPER, TYPEPROPER, VALUE, TOWL); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 115 12 - A wine has a color. drs([A, B], [wine(A), color(B), has(A,B)]) ********************************************************************/ Case UNIFY(has, [A,B], COND) then UNIFY(PROPER, [B], COND); {PROPER é a propriedade que está sendo definida} UNIFY(CLASS, [A, COND); {CLASS é a classe domínio de PROPER} if CLASS ∉ LCLASS then return error(‘The Class ’,CLASS,’ not defined’) LNOTDEF <= LNOTDEF + prop(CLASS, PROPER); return TOWL; /************ Sentenças cobertas no próximo trecho do algoritmo************** 18 – The color of wine 1 is rosé. drs([A, B, C], [wine1(B), color(A), of (A, B), rose(C), value(A, C)]) ********************************************************************/ Case UNIFY(of, [A, B], COND) and UNIFY(value, [A, C], COND) then UNIFY(PROPER, [A], COND); {PROPER é a propriedade que está sendo definido o valor} UNIFY(INST, [B], COND); {INST é a instância que está sendo definido o valor} UNIFY(VALUE, [C], COND); if instance(CLASS ,INST) ∉ LINST then return error(‘The instance ’,INST,’ not defined’) ALLOWEDVALUE <= CONSULT_PROPERTY_VALUE(BC, PROPER, VALUE); if not ALLOWEDVALUE then return error(‘The value ’,VALUE,’ is not valid to proper ‘,PROPER) DEFINE_INSTANCE_VALUE(CLASS, INST, PROPER, VALUE, TOWL) return TOWL; /**************** Descrição das Funções utilizadas *******************/ INST(REL, ARGS, LIST) {onde REL, ARGS e LIST são variáveis em Prolog} begin if existe uma condição C ∈ LIST que tem ARGS como argumentos then begin Compõe C em RELACAO e ARGUMENTOS; {em Prolog (C =.. [RELAÇÃO | ARGUMENTOS ].)} REL <= RELACAO; return true; end; else return false; end; DEFINE_CLASS(CLASS: Class, SUB: Class, LCLASS: SetClass, var TOWL: Text); begin TOWL <= TOWL + <owl:Class rdf:ID=”SUB”> <rdfs:subclassof rdf:resourse=”#CLASS”/> for all X ∈ LCLASS do TOWL <= TOWL + <owl:disjointWith rdf:resourse=”#X”/> 116 TOWL <= TOWL + </owl:class> end; DEFINE_PARTOF(SUPERCLASS: Class, CLASS: Class, PART: Class, TOWL: Text); begin CLASS_PARTOF_CLASS <= CONCATENA(CLASS, ‘_or_part of_’, CLASS); PART OF_CLASS <= CONCATENA(‘Partof_’, CLASS); DEFINE_CLASS(SUPERCLASS, CLASS_PARTOF_CLASS, LCLASS, TOWL); DEFINE_CLASS(CLASS_PARTOF_CLASS, CLASS, LCLASS, TOWL); DEFINE_CLASS(CLASS_PARTOF_CLASS, PARTOF_CLASS, LCLASS, TOWL); DEFINE_CLASS(PARTOF_CLASS, PART, LCLASS, TOWL); end; DEFINE_CLASS_EQUAL(EQUAL, DEF, LCLASS, TOWL); begin TOWL <= TOWL + <owl:Class rdf:about="#DEF "> <equivalentClass rdf:resource="#EQUAL "/> for all X ∈ LCLASS do TOWL <= TOWL + <owl:disjointWith rdf:resourse=”#X”/> TOWL <= TOWL + </owl:Class> end. DEFINE_INST_EQUAL(EQUAL, DEF, LINST, TOWL); begin TOWL <= TOWL + <rdf:Description rdf:about="#DEF "> <owl:sameAs rdf:resource="#EQUAL "/> TOWL <= TOWL + </rdf:Description> TOWL <= TOWL + <owl:AllDifferent> <owl:distinctMembers rdf:parseType="Collection"> for all X ∈ LINST do TOWL <= TOWL + <CLASS rdf:about="#INSTX"/> TOWL <= TOWL + </owl:distinctMembers> </owl:AllDifferent> end. DEFINE_PROPER_EQUAL(EQUAL, DEF, TOWL); begin TOWL <= TOWL + <owl:Property rdf:about="#hasManufacturer"> <equivalentProperty rdf:resource="#hasMaker"/> </owl:Property> end. DEFINE_INTANCE(CLASS: Class, INST: Text, var TOWL: Text) begin TOWL <= TOWL + <Class rdf:ID=”INST”/> <owl:AllDifferent> <owl:distinctMembers rdf:parseType="Collection"> for all X ∈ LINST do TOWL <= TOWL + <CLASS rdf:about="#INSTX"/> TOWL <= TOWL + </owl:distinctMembers> </owl:AllDifferent> end; 117 DEFINE_OBJECTPROPERTY(PROPER: Property, CLASSDOM: Class, RANGE: Class, var TOWL: Text); begin NAMEPROPER <= CONCATENA(‘has’, PROPER); TOWL <= TOWL + <owl:ObjectProperty rdf:ID=”NAMEPROPER”> <rdfs:domain rdf:resource=”#CLASSDOM”> <rdfs:range rdf:resource=”#RANGE”> </owl:ObjectProperty> end; DEFINE_DATATYPEPROPERTY(PROPER: Proprety, CLASSDOM: Class, RANGE: Datatype, var TOWL: Text); begin NAMEPROPER <= CONCATENA(‘has’, PROPER); NAMERANGE <= CONCATENA(‘&xsd;’, RANGE); TOWL <= TOWL + <owl:DatatypeProperty rdf:ID=”NAMEPROPER”> <rdfs:domain rdf:resource=”#CLASSDOM”> <rdfs:range rdf:resource=”NAMERANGE”> </owl: DatatypeProperty> end; DEFINE_ENUMERATEDCLASS(NAMECLASS: :Text, LVALUES: SetValues, var TOWL: Text); begin TOWL <= TOWL + <owl:Class rdf:ID=”NAMECLASS”> <owl:oneOf rdf:parseType=”Collection”> for all X ∈ LVALUES do TOWL <= TOWL + <owl:Thing rdf:about=”#X”/> TOWL <= TOWL + </owl:oneOf> </owl:Class> for all X ∈ LVALUES do TOWL <= TOWL + <NAMECLASS rdf:ID=”X”/> TOWL <= TOWL + <owl:AllDifferent> <owl:distinctMembers rdf:parseType=”Collection”> for all X ∈ LVALUES do TOWL <= TOWL + <NAMECLASS rdf:about=”#X”/> TOWL <= TOWL + </owl:distinctMembers> </owl:AllDifferent> return NAMECLASS; end; DEFINE_DEFAULTVALUE(PROPER: Property, TYPEPROPER: Text, VALUE: Text, var TOWL: Text); begin NAMEPROPER <= CONCATENA(‘has’, PROPER); NAMESUBPROPERTY <= CONCATENA(PROPER ,‘DefaultValue’,); TOWL <= TOWL + <owl:TYPEPROPER rdf:ID=”NAMESUBPROPERTY”> <rdfs:subPropertyOf rdf:resource=”#NAMEPROPER”/> <owl:Restriction> <owl:hasValue rdf:resource=”#VALUE”/> </owl:Restriction> </owl:TYPEPROPER> end; 118 DEFINE_RESTRICTION(CLASS: Class, PROPER: Propety, RANGE: Class, TYPE:Text; TOWL: Text); begin NAMEPROPER <= CONCATENA(‘has’, PROPER); TOWL <= TOWL + <owl:Class rdf:ID="CLASS"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource=”#NAMEPROPER”/> <owl: TYPE rdf:resource=”#RANGE”/> </owl:Restriction> </rdfs:subClassOf> </owl:Class> end; DEFINE_CARDINALITY(CLASS, PROPER, CARD, NUMBER, TOWL); begin NAMEPROPER <= CONCATENA(‘has’, PROPER); TOWL <= TOWL + <owl:Class rdf:ID=”CLASS”> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource=”#NAMEPROPER”/> <owl:CARD rdf:datatype="&xsd;nonNegativeInteger">NUMBER </owl:CARD> </owl:Restriction> </rdfs:subClassOf> </owl:Class> end; DEFINE_INSTANCE_VALUE(CLASS, INST, PROPER, VALUE, TOWL) begin NAMEPROPER <= CONCATENA(‘has’, PROPER); TOWL <= TOWL + < CLASS rdf:ID="INST"> < NAMEPROPER rdf:resource="#VALUE" /> </ CLASS > end; /***************** Funções de Consulta à Base ***********/ CONSULT_PROPERTY_TYPE(BC, PROPER, var TYPEPROPER); begin {procura o na BC se a propriedade PROPER é um datatypeProperty, ou um objectProperty} { TYPEPROPER <= datatypeProperty ou objectProperty } end; CONSULT_PROPERTY_VALUE(BC, PROPER, VALUE); begin {verifica na BC se VALUE é um valor permitido pela RANGE de PROPER} {Se VALUE for um valor permitido then return true else return false } end; 119 CONSULT_SUPER_CLASS(BC, CLASS); begin {procura na BC a CLASSEMÃE de CLASS } {return CLASSEMÃE} end; RETIRE_DEFINITION(var BC, CLASS); begin {procura na BC a definição de CLASS e revoga esta definição} end; CONSULT_PROPER (PROPER, BC) begin {procura na BC a definição de PROPER se achou then return true else return false } end;