# Ontologia (ciência da computação)

Em Ciência da Computação, Sistemas de Informação e Ciência da Informação, uma ontologia é um modelo de dados que representa um conjunto de conceitos dentro de um domínio e os relacionamentos entre estes. Uma ontologia é utilizada para realizar inferência sobre os objetos do domínio.
Ontologias são utilizadas em inteligência artificial, web semântica, engenharia de software e arquitetura da informação, como uma forma de representação de conhecimento sobre o mundo ou alguma parte deste. Ontologias geralmente descrevem:
* Indivíduos: os objetos básicos;
* Classes: conjuntos, coleções ou tipos de objetos;
* Atributos: propriedades, características ou parâmetros que os objetos podem ter e compartilhar;
* Relacionamentos: as formas como os objetos podem se relacionar com outros objetos.

## Diferença de ontologia na Filosofia

O termo ontologia tem origem na Filosofia, onde é o nome de um ramo da metafísica ocupado da existência. De acordo com Tom Gruber da Stanford University, no entanto, o significado de ontologia para a ciência da computação é "uma descrição de conceitos e relacionamentos que devem ser considerados por um agente ou por uma comunidade de agentes." Ele especifica ainda que uma ontologia é geralmente escrita "como um conjunto de definições de um vocabulário formal."

## Elementos de uma ontologia

Os modelos e implementações correntes de ontologias em ciência de computação compartilham muitas semelhanças estruturais, independentemente do contexto e da linguagem em que são expressas. Como mencionado acima, a maioria das ontologias descreve indivíduos (exemplares), classes (conceitos), atributos e relacionamentos. Esta seção descreve cada um desses componentes.

### Indivíduos (exemplares)

Indivíduos (exemplares) são os componentes básicos de uma ontologia. Os indivíduos em uma ontologia podem incluir objetos concretos como pessoas, animais, mesas, automóveis, moléculas, planetas, assim como indivíduos abstratos como números e palavras. Para ser exata, uma ontologia não precisa necessariamente incluir indivíduos, porém um dos propósitos gerais de uma ontologia é apresentar um meio de classificação de indivíduos, mesmo que estes não sejam explicitamente parte da ontologia.

### Classes (conceitos)

Classes (conceitos) são grupos abstratos, conjuntos ou coleções de objetos. Eles podem conter indivíduos, outras classes, ou uma combinação de ambos. Alguns exemplos de classes:
* Pessoa, a classe de todas as pessoas;
* Molécula, a classe de todas as moléculas;
* Número, a classe de todos os números;
* Veículo, a classe de todos os veículos;
* Carro, a classe de todos os carros;
* Indivíduo, representando a classe de todos os indivíduos;
* Classe, representando a classe de todas as classes;
* Coisa, representando a classe de todas as coisas.
Ontologias se diferenciam nos seguintes aspectos: se classes podem conter outras classes, se uma classe pode pertencer a si mesma, se existe uma classe universal (isto é, uma classe contendo tudo), etc. Algumas vezes estas restrições são feitas para evitar alguns paradoxos conhecidos.
Uma classe pode incluir ou estar incluída em outras classes. Por exemplo, Veículo inclui Carro, já que (necessariamente) qualquer coisa que é membro de Carro é também membro de Veículo. A relação de inclusão é utilizada para criar uma hierarquia de classes, geralmente com uma classe geral como Coisa no topo, e classes específicas como GM Celta 2008 na base.

### Atributos

Objetos em uma ontologia podem ser descritos através de atributos. Cada atributo tem pelo menos um nome e um valor, e é utilizado para armazenar informação que é específica para o objeto ligado a ele. Por exemplo, o objeto "GM Celta" tem atributos como:
* Nome: GM Celta
* Número_de_portas: 4
* Motor: {1.0, 1.3}
* Câmbio: 5-marchas
O valor de um atributo pode ser um tipo de dados completo; neste exemplo, o valor do atributo chamado Motor é uma lista de valores, não um valor simples.

### Relacionamentos

Um uso importante dos atributos é a descrição de relacionamentos (também conhecidos como relações) entre objetos na ontologia. Geralmente, uma relação é um atributo cujo valor é outro objeto na ontologia. Muito do poder das ontologias vem da habilidade de descrever estas relações. O conjunto de todas as relações descreve a semântica do domínio.
O tipo mais importante de relação é a relação de inclusão (é-superclasse-de, é-um, é-subtipo-de ou é-subclasse-de), que define quais objetos são membros de quais classes de objetos. Por exemplo, podemos notar que o "GM Celta" é-um "Carro", que, por sua vez, é-um "Automóvel".
A adição de relacionamentos é-um cria uma taxonomia hierárquica, uma estrutura de árvore que descreve que objetos se relacionam com quais outros. Nesta estrutura, cada objeto é um "filho" de uma "classe pai".
Outro tipo comum de relação é a do tipo parte-de que representa como objetos se combinam para formar objetos compostos. Por exemplo, se estender o exemplo de ontologia para incluir objetos como Rodas, diríamos que "Roda é-parte-de GM Celta" já que uma roda é um dos componentes de um GM Celta.
Além das relações comuns como é-um e parte-de, as ontologias geralmente incluem outros tipos de relações que refinam ainda mais a semântica do modelo. Estas relações geralmente são específicas do domínio e são utilizadas para responder tipos particulares de questões.

## Tipos de Ontologias
### Ontologia de Domínio

Uma ontologia de domínio (domain ontology ou domain-specific ontology) modela um domínio específico, ou parte do mundo. Ela representa os significados dos termos aplicados ao domínio em questão. Por exemplo, a palavra “carta” pode ter distintos significados. Uma ontologia sobre o domínio do jogo de pôquer poderia modelar seu significado como uma “carta de um jogo”, enquanto uma ontologia de um serviço postal poderia modelar seu significado como um “texto a ser entregue a um destinatário”, e uma ontologia no domínio do hardware de computador poderia modelar com os significados de cartão perfurado e placa de vídeo.
Desde que ontologias representam conceitos de maneiras muito específicas, e frequentemente ecléticas, elas são frequentemente incompatíveis. À medida que sistemas que dependem de ontologias de domínio expandem, eles frequentemente precisam mesclar ontologias de domínio para uma representação mais geral. Isso apresenta um desafio para o designer de ontologias. Diferentes ontologias no mesmo domínio surgem devido a diferentes idiomas, diferentes intenções de uso de ontologias, e diferentes percepções do domínio (baseadas no contexto da cultura, educação, ideologia, etc.).
Já que as ontologias de domínio representam conceitos muito específicos, geralmente são incompatíveis entre si. À medida em que os sistemas dependem de ontologias de domínio, eles precisam mesclar ontologias em representações mais gerais. Isto representa um desafio para o engenheiro de ontologias. Atualmente, mesclar ontologias é um processo manual e que consome muito tempo e recursos. O uso de uma ontologia superior que forneça uma definição comum para termos chave pode tornar este processo menos custoso. Existem estudos a respeito de técnicas para mesclar ontologias, porém esta área de pesquisa ainda é muito teórica.

### Ontologia superior

Uma ontologia superior ou geral (upper ontology ou foundation ontology) é um modelo dos objetos comuns que são geralmente aplicáveis a uma grande variedade de ontologias de domínio. Classifica diferentes categorias existentes no mundo. Ela contém um glossário central que permite descrever termos em vários domínios, que contém noções gerais independentes para o problema ou domínio. Existem várias ontologias superiores padronizadas para uso, como: Dublin Core, GFO, OpenCyc/ResearchCyc, SUMO e DOLCE.

### Ontologia de representação

Uma ontologia de representação ou meta-ontologia (representation ontology ou meta-ontology) capturam as representações das primitivas usadas para formalizar o conhecimento numa dada família ou sistema.

## Bibliotecas de ontologias

O desenvolvimento de ontologias para a Internet levou ao surgimento de serviços que disponibilizam listas ou diretórios de ontologias com mecanismos de buscas. Estes mecanismos foram chamados de bibliotecas de ontologias.
Os serviços abaixo são bibliotecas estáticas ou gerenciadas por pessoas:
* A Wikidata, com 40 milhões de itens, se tornou a mais ampla e completa. Com apoios Wikimedia, DBpedia, Allen Foundation, e Google, é também a que mais investimentos recebeu.
* A DAML Ontology Library mantém um legado de ontologias em DAML.
* O SchemaWeb é um diretório de esquemas RDF expressos em RDFS, OWL e DAML+OIL.
Os serviços abaixo são diretórios e mecanismos de busca. Eles incluem crawlers que vasculham a Web procurando por ontologias bem formadas.
* O Swoogle é um diretório e mecanismo de busca para todos os recursos RDF disponíveis na Web, incluindo ontologias.
* A biblioteca OntoSelect oferece um serviço similar para ontologias em RDF/S, DAML e OWL.
* O Ontaria é um "diretório pesquisável e navegável de dados da web semântica", que foca em vocabulários RDF com ontologias OWL.

## Armazenamento de Ontologias em Banco de Dados

Campo de pesquisa bastante ativo da Web Semântica atualmente, pois viabiliza aplicações utilizando ontologias. Existem os seguintes frameworks para isso:
* JENA
* SESAME
* 3 Store