Page 1
Modelagem e Implementação de
Ontologias
Relatório apresentado à Universidade Federal do ABC como parte dos requisitos para aprovação na disciplina de Inteligência Artificial do Curso de Bacharelado em Ciência e Tecnologia – Ciência da Computação.
André Filipe de Moraes Batista
[email protected]
Professor: Jerônimo Pellegrini
Santo André, 30 de Junho de 2008.
Page 2
Índice
1 Introdução ................................................................................................................ 3
2 Modelagem de Ontologias no Protégé ................................................................... 4
2.1 Ontologia para Representação de Artigos – Utilizando Protégé Frames ............. 4
2.2 Ontologia para Representação de Vôos – Utilizando OWL................................ 10
3 Referências Bibliográficas .................................................................................... 15
Page 3
Universidade Federal do ABC MC-3303 Inteligência Artificial
3
1 Introdução
O termo ontologia tem origem na Filosofia, sendo um ramo da Filosofia que lida com
a natureza e a organização do ser. Este termo foi recentemente adotado pelas
comunidades de IA e gestão de conhecimentos para se referir a conceitos e termos
que podem ser usados para descrever alguma área do conhecimento, ou construir
uma representação base.
Várias definições de ontologia podem ser encontradas na literatura, entre estas
encontra-se a definição apresentada por [Fensel 2000] que classifica ontologia como
“uma especificação formal explícita de uma conceitualização compartilhada”. O termo
“conceitualização” refere-se a um modelo abstrato de algum fenômeno que identifique
conceitos relevantes deste fenômeno. O termo “explícita” significa que os tipos de
conceitos usados, e as limitações do uso desses conceitos, devem ser definidos de
forma explícita. O termo “formal” refere-se que a ontologia deve ser passível de ser
processada por uma máquina. Por fim, “compartilhada” reflete a noção de que a
ontologia captura um conhecimento consensual, isto é, esse conhecimento não deve
ser restrito a alguns indivíduos, mas aceito por um grupo de pessoas [Guimarães
2002].
Outra definição para o termo ontologia é dada por Swartout, citado em [Gómez-
Pérez 1999], que define ontologia como “um conjunto de termos ordenados
hierarquicamente para descrever um domínio, que pode ser usado como um esqueleto
para uma base de conhecimento”. Com esta definição é possível afirmar que uma
ontologia deve possuir um conjunto de termos organizados com uma hierarquia
associada, ou seja, uma taxonomia. Por exemplo, pode-se definir uma ontologia para
o domínio de circuitos eletrônicos. A ontologia resultante incluiria conceitos específicos
(tais como circuitos integrados, resistor, transistor, processador, diodo, etc) e também
relações entre esses conceitos. Como, por exemplo, o processador é um tipo de
circuito integrado, etc. A partir desta estrutura é possível criar bases de conhecimento
descrevendo a realidade de um rádio composto por 10 transistores, 20 resistores, 4
diodos, dentre outras informações. O mesmo pode ser feito para incluir na base de
conhecimento dados sobre uma calculadora formada por 4 transistores, 3 resistores e
5 diodos. Pode-se observar que duas realidades diferentes são modeladas em um
domínio por uma mesma ontologia. Isto é, a ontologia é a estrutura básica para que
termos do domínio sejam descritos sob os mesmos conceitos, fornecendo um
vocabulário para representação e compartilhamento do conhecimento.
Page 4
Universidade Federal do ABC MC-3303 Inteligência Artificial
4
Existem diversas ferramentas para criação de ontologias. Dentre todas,
destaca-se a ferramenta Protégé1, desenvolvida pela Universidade de Stanford. Nas
próximas seções tem-se o desenvolvimento de ontologias nesta ferramenta, utilizando
duas de suas principais tecnologias – Desenvolvimento por Frames e
Desenvolvimento via Linguagem OWL.
2 Modelagem de Ontologias no Protégé
A seguir tem-se a criação de duas ontologias na ferramenta Protégé utilizando
duas tecnologias diferentes.
2.1 Ontologia para Representação de Artigos – Utilizando Protégé Frames
A ontologia a ser modelada concentra-se nos conceitos inerentes a
representação de artigos. De uma forma geral, o processo para definição de uma
ontologia é dado da seguinte maneira:
Definir as classes e subclasses presentes na ontologia;
Definir slots e sua faixa de valores permitida;
Criar instâncias para classes e slots.
Para o processo de definição de classes e subclasses é importante conhecer o
domínio da ontologia, ou seja, o mini-mundo que queremos representar com o uso
desta. Para tal conhecimento, o mini-mundo da ontologia é dado por:
Um artigo pode ser de três tipos diferentes, isto é, pode ser publicado em três
meios diferentes: revista, jornal ou site da Internet;
Artigo é um tipo de Obra;
Uma Obra contém um Autor e Editora;
Um Autor é um tipo de Pessoa. (Pessoa refere-se ao grupo de indivíduos que
estão ligados à Editora).
1 Maiores informações: http://protege.stanford.edu
Page 5
Universidade Federal do ABC MC-3303 Inteligência Artificial
5
Com estas informações é possível identificar as classes e subclasses da ontologia,
são elas:
Classe Editora o Subclasse Obra (uma editora possui n obras)
Subclasse Artigo (Um artigo é um tipo de obra de
uma editora)
Subclasse ArtigoJornal
Subclasse ArtigoRevista
Subclasse ArtigoWeb
o Subclasse Pessoa (pessoas envolvidas com a editora)
Subclasse Autor (Um artigo é um tipo de pessoa
envolvida com a editora)
Após a definição das classes e subclasses da ontologia, é preciso definir os
slots de cada classe, ou seja, seus atributos. Estes são assim definidos:
Toda Obra da Editora possui um ou mais Autores. Logo, a classe Obra terá o
slot autor. Este autor é uma instância da classe Autor;
Toda obra possui um idioma, número de páginas e um título. Portanto, os slots
serão: idioma, armazenando uma string de caracteres; num_paginas,
armazenando um valor inteiro de páginas (>1) e titulo, armazenando uma
string de caracteres;
Um artigo é um tipo de obra. Logo, todos os slots definidos anteriormente para
a classe Obra serão herdados pela classe Artigo;
Um artigo publicado em um jornal deve armazenar o nome deste jornal. Para
isto, cria-se um slot nome_jornal para a classe ArtigoJornal,
armazenando uma string de caracteres;
Um artigo publicado em uma revista deve armazenar a edição da revista. Para
isto, cria-se um slot ed_revista para a classe ArtigoRevista,
armazenando valores inteiros;
Um artigo publicado na web deve armazenar o endereço de sua publicação.
Para isto, cria-se um slot disponível_em para a classe ArtigoWeb,
armazenando uma string de caracteres;
Page 6
Universidade Federal do ABC MC-3303 Inteligência Artificial
6
Uma pessoa que está ligada à revista deve possuir CPF, nome e sexo. Para
tal, criam-se os slots para a classe Pessoa: cpf, armazenando valores
inteiros; nome, armazenando uma string de caracteres e sexo, armazenando
dois valores possíveis: “m” ou “f”;
Como Autor é uma subclasse de Pessoa, os slots da classe Pessoa serão
herdados pela classe Autor.
A partir deste ponto é possível implementar a ontologia na ferramenta Protégé.
Após a modelagem tem-se a visualização gráfica das classes e subclasses definidas
nos processos anteriores. A Figura 1 ilustra as classes e subclasses na ontologia.
Figura 1 - Hierarquia das Classes e Subclasses para a Ontologia Modelada
A partir deste ponto é possível criar instâncias para cada classe. Uma instância
será criada. Esta será da seguinte forma:
Godofredo é um Autor, isto é, um tipo de Pessoa;
O Autor do Artigo da Revista Ed. 1 chamado “Uma Introdução a Linguagem
LISP” é Godofredo;
Este artigo possui 25 páginas e foi escrito em português.
Com estas informações é possível criar uma instância para a Ontologia.
Primeiramente vamos cria-se uma instância da classe Autor. As informações para esta
instância estão ilustradas na Figura 2.
Page 7
Universidade Federal do ABC MC-3303 Inteligência Artificial
7
Figura 2 – Criação de uma instância da classe Autor.
Outras instâncias foram criadas e encontram-se nos arquivos fontes da ontologia,
que acompanha este material.
Para testar a ontologia, pode-se criar Queries. De acordo com a modelagem feita,
esta ontologia deve ser capaz de responder as seguintes perguntas:
Quais são os autores que trabalham para a editora?
Page 8
Universidade Federal do ABC MC-3303 Inteligência Artificial
8
Obtemos as respostas:
Godofredo
Simone Franchais
Benerlopolis Silva
Dado um autor, quais são seus artigos?
Obtemos as seguintes respostas para a autora Simone Franchais:
Genetic Algorithms
Minimax: Um Bueno Algoritmo de Busqueda
Várias outras perguntas podem ser feitas. A Figura 3 ilustra a estrutura da
ontologia criada. Nela tem-se as classes e suas instâncias. Esta estrutura foi
visualizada com ajuda do plug-in TGVizTab. Trata-se de um plug-in nativo da
versão full do Protégé. Maiores informações sobre este plugin podem ser
encontradas no site do Protégé.
Page 9
Universidade Federal do ABC MC-3303 Inteligência Artificial
9
Figura 3 – Estrutura da Ontologia Criada.
Page 10
Universidade Federal do ABC MC-3303 Inteligência Artificial
10
2.2 Ontologia para Representação de Vôos – Utilizando OWL
OWL (Ontology Web Language) é uma linguagem de marcação semântica para
publicação e compartilhamento de ontologias, projetada para descrever classes e
relacionamentos entre elas, que é atualmente recomendada pelo W3C.
A OWL foi projetada para prover uma linguagem de ontologia que pudesse ser
usada para descrever, de um modo natural, classes e relacionamentos entre elas em
documentos e aplicações Web.
Esta seção descreve a modelagem de um domínio de representação de vôos
aéreos. O principio de construção da ontologia deu-se de maneira semelhante ao
descrito na Seção 2.1. Portanto, será breve a descrição da ontologia criada nesta
seção.
O domínio da ontologia a ser modelada representa os vôos aéreos. Para tal
representação foram criadas as seguintes classes:
Aeroporto – Representando os aeroportos que um avião freqüenta;
Avião – Representando o avião. Este pode ser de dois tipos: Comercial,
ou Doméstico (Estamos aceitando que um avião é utilizado para apenas
um destes tipos; por isso não é o vôo que está sendo classificado como
comercial ou doméstico);
Trecho – Representa os trechos de cada vôo. Um trecho possui o
Aeroporto_Partida e o Aeroporto_Chegada como parâmetros;
Vôo – Representa os vôos. Um vôo pode ser composto por N Trechos.
Com estas informações é possível modelar a ontologia no Protégé. Com o auxílio do
plug-in TGVizTab é possível visualizar a estrutura geral desta ontologia, ilustrada na
Figura 4.
Page 11
Universidade Federal do ABC MC-3303 Inteligência Artificial
11
Figura 4 – Estrutura Geral da Ontologia Modelada.
Após a criação de algumas instâncias, a ontologia torna-se um pouco mais
complexa. Queries podem ser feitas da mesma maneira que foram feitas na Seção
2.1. A Figura 5 ilustra a estrutura da ontologia após a criação de algumas
instâncias:
4 Ontologia
Figura 5 – Ontologia sobre Vôos: Classes, Instâncias e Relacionamentos.
Page 12
Universidade Federal do ABC MC-3303 Inteligência Artificial
12
O Código XML desta ontologia criada com a linguagem OWL é descrito a seguir:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>
<rdf:RDF xmlns="http://www.owl-ontologies.com/unnamed.owl#"
xml:base="http://www.owl-ontologies.com/unnamed.owl"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Ontology rdf:about=""/>
<Voo rdf:ID="aeroporto_Instance_37">
<CodVoo rdf:datatype="&xsd;int">1</CodVoo>
<Trechos rdf:resource="#aeroporto_Instance_33"/>
<Trechos rdf:resource="#aeroporto_Instance_32"/>
<AeroportoSaida rdf:resource="#aeroporto_Instance_30"/>
<AeroportoChegada rdf:resource="#aeroporto_Instance_31"/>
</Voo>
<owl:DatatypeProperty rdf:ID="AeroCod">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Aeroporto"/>
<rdfs:range rdf:resource="&xsd;int"/>
<rdfs:comment rdf:datatype="&xsd;string"
>Código do Aeroporto</rdfs:comment>
</owl:DatatypeProperty>
<Aeroporto rdf:ID="aeroporto_Instance_31">
<AeroCod rdf:datatype="&xsd;int">24</AeroCod>
<Estado rdf:datatype="&xsd;string">MG</Estado>
<Cidade rdf:datatype="&xsd;string">Belo Horizonte</Cidade>
<Nome rdf:datatype="&xsd;string">AeroMinas</Nome>
</Aeroporto>
<owl:Class rdf:ID="Aeroporto"/>
<Aeroporto rdf:ID="aeroporto_Instance_29">
<AeroCod rdf:datatype="&xsd;int">1</AeroCod>
<Estado rdf:datatype="&xsd;string">SP</Estado>
<Cidade rdf:datatype="&xsd;string">Santo Andre</Cidade>
<Nome rdf:datatype="&xsd;string">Aeroporto UFABC</Nome>
</Aeroporto>
<Aeroporto rdf:ID="aeroporto_Instance_30">
<AeroCod rdf:datatype="&xsd;int">2</AeroCod>
<Estado rdf:datatype="&xsd;string">Sao Paulo</Estado>
<Cidade rdf:datatype="&xsd;string">Sao Paulo</Cidade>
<Nome rdf:datatype="&xsd;string">Aeroporto USP</Nome>
</Aeroporto>
<owl:DatatypeProperty rdf:ID="aeroporto_Slot_17">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="aeroporto_Slot_8">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:ObjectProperty rdf:ID="AeroportoChegada">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Trecho"/>
<owl:Class rdf:about="#Voo"/>
</owl:unionOf>
</owl:Class>
</rdfs:domain>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="AeroportoSaida">
Page 13
Universidade Federal do ABC MC-3303 Inteligência Artificial
13
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Trecho"/>
<owl:Class rdf:about="#Voo"/>
</owl:unionOf>
</owl:Class>
</rdfs:domain>
</owl:ObjectProperty>
<owl:Class rdf:ID="Aviao"/>
<Comercial rdf:ID="aeroporto_Instance_24">
<NomeAviao rdf:datatype="&xsd;string">Bolinha</NomeAviao>
<Empresa rdf:datatype="&xsd;string">GOL</Empresa>
<IdAviao rdf:datatype="&xsd;int">1</IdAviao>
<Total_poltronas rdf:datatype="&xsd;string">20</Total_poltronas>
</Comercial>
<Comercial rdf:ID="aeroporto_Instance_25">
<NomeAviao rdf:datatype="&xsd;string">BRA1</NomeAviao>
<Empresa rdf:datatype="&xsd;string">BRA</Empresa>
<IdAviao rdf:datatype="&xsd;int">2</IdAviao>
<Total_poltronas rdf:datatype="&xsd;string">50</Total_poltronas>
</Comercial>
<Doméstico rdf:ID="aeroporto_Instance_28">
<NomeAviao rdf:datatype="&xsd;string">Bush</NomeAviao>
<Empresa rdf:datatype="&xsd;string"
>AMERICA AIRLINES</Empresa>
<IdAviao rdf:datatype="&xsd;int">34</IdAviao>
<Total_poltronas rdf:datatype="&xsd;string">24</Total_poltronas>
</Doméstico>
<Comercial rdf:ID="aeroporto_Instance_26">
<NomeAviao rdf:datatype="&xsd;string">Caindo</NomeAviao>
<Empresa rdf:datatype="&xsd;string">VARIG</Empresa>
<IdAviao rdf:datatype="&xsd;int">3</IdAviao>
<Total_poltronas rdf:datatype="&xsd;string">60</Total_poltronas>
</Comercial>
<owl:DatatypeProperty rdf:ID="Cidade">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Aeroporto"/>
<rdfs:range rdf:resource="&xsd;string"/>
<rdfs:comment rdf:datatype="&xsd;string"
>Cidada onde está localizado o aeroporto</rdfs:comment>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="Cidade_Chegada">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="Cidade_Saida">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="CodVoo">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Voo"/>
<rdfs:range rdf:resource="&xsd;int"/>
</owl:DatatypeProperty>
<owl:Class rdf:ID="Comercial">
<rdfs:subClassOf rdf:resource="#Aviao"/>
</owl:Class>
<owl:DatatypeProperty rdf:ID="Data">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Trecho"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:Class rdf:ID="Doméstico">
<rdfs:subClassOf rdf:resource="#Aviao"/>
</owl:Class>
<owl:DatatypeProperty rdf:ID="Empresa">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Aviao"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="Estado">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Aeroporto"/>
<rdfs:range rdf:resource="&xsd;string"/>
<rdfs:comment rdf:datatype="&xsd;string"
>Estado onde o aeroporto está localizado</rdfs:comment>
Page 14
Universidade Federal do ABC MC-3303 Inteligência Artificial
14
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="IdAviao">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Aviao"/>
<rdfs:range rdf:resource="&xsd;int"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="Nome">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Aeroporto"/>
<rdfs:range rdf:resource="&xsd;string"/>
<rdfs:comment rdf:datatype="&xsd;string"
>Nome do Aeroporto</rdfs:comment>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="nome_aviao">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="nome_trecho">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Trecho"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="NomeAviao">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Aviao"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="Num_PoltronasDisponiveis">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Trecho"/>
<rdfs:range rdf:resource="&xsd;int"/>
</owl:DatatypeProperty>
<Doméstico rdf:ID="aeroporto_Instance_27">
<NomeAviao rdf:datatype="&xsd;string">TAM_E_VOCE</NomeAviao>
<Empresa rdf:datatype="&xsd;string">TAM</Empresa>
<IdAviao rdf:datatype="&xsd;int">51</IdAviao>
<Total_poltronas rdf:datatype="&xsd;string">30</Total_poltronas>
</Doméstico>
<owl:DatatypeProperty rdf:ID="Total_poltronas">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="#Aviao"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:Class rdf:ID="Trecho"/>
<owl:ObjectProperty rdf:ID="Trechos">
<rdfs:domain rdf:resource="#Voo"/>
</owl:ObjectProperty>
<Trecho rdf:ID="aeroporto_Instance_32">
<Num_PoltronasDisponiveis
rdf:datatype="&xsd;int">20</Num_PoltronasDisponiveis>
<nome_trecho rdf:datatype="&xsd;string"
>UFABC - AeroMinas</nome_trecho>
<Data rdf:datatype="&xsd;string">10/06/2008</Data>
<AeroportoSaida rdf:resource="#aeroporto_Instance_29"/>
<AeroportoChegada rdf:resource="#aeroporto_Instance_31"/>
</Trecho>
<Trecho rdf:ID="aeroporto_Instance_33">
<Num_PoltronasDisponiveis
rdf:datatype="&xsd;int">1</Num_PoltronasDisponiveis>
<nome_trecho rdf:datatype="&xsd;string">USP - UFABC</nome_trecho>
<Data rdf:datatype="&xsd;string">10/06/2008</Data>
<AeroportoSaida rdf:resource="#aeroporto_Instance_30"/>
<AeroportoChegada rdf:resource="#aeroporto_Instance_29"/>
</Trecho>
<owl:Class rdf:ID="Voo"/>
</rdf:RDF>
Page 15
Universidade Federal do ABC MC-3303 Inteligência Artificial
15
3 Referências Bibliográficas
[Fensel 2000] FENSEL, D. The semantic web and its languages. IEEE Intelligent
Systems. v. 15, n. 6, p. 67-73, nov./dec. 2000.
[Gómez-Pérez 1999] GÓMEZ-PÉREZ, A. Ontological Engineering: A state of the art.
Expert Update. British Computer Society. v. 2, n. 3, p. 33-43. 1999
[Guimarães 2002] GUIMARÃES, Francisco José Zamith. Utilização de Ontologias no
Domínio B2C. Dissertação (Mestrado) – Pontifícia Universidade Católica do Rio
de Janeiro, 2002.
[Protege 2008] Site da Ferramenta Protégé – http://protege.stanford.edu, acesso em
06/2008.