Nesta seção será explicado como configurar o JOINT na sua aplicação NetBeans para desenvolvimento baseado em ontologias. Inicialmente, vamos entender melhor como funciona o JOINT e seus componentes. Construído em cima das duas APIs mais populares na área de ontologias: Jena e Sesame. O uso da primeira ferramenta é muito particular, apenas para verificação de consistência de ontologias, enquanto que o Sesame é vital para o funcionamento de todo o JOINT.
O JOINT usa o servidor HTTP do Sesame, o qual consiste em um número de servlets JAVA que implementam um protocolo para acessar os repositórios do Sesame através de HTTP. A figura a seguir ilustra bem este conceito:

Então para configurar o JOINT, primeiro precisamos configurar o servidor HTTP do Sesame. Para isso é necessário ter instalado no seu computador um servidor de aplicação Java, como o Apache Tomcat: http://tomcat.apache.org/download-70.cgi. Uma vez, o Tomcat instalado no seu computador, pegue os dois arquivos presentes na pasta sesame (openrdf-sesame.war e openrdf-workbench.war) e coloque na pasta webapps do seu Tomcat. Inicie o Tomcat na pasta bin, se for Windows pelo startup.bat, se for Linux pelo startup.sh. Acesse pelo navegador a aplicação, se tiver com as configurações padrões: http://localhost:8080/openrdf-workbench/.

Uma vez configurado o servidor do Sesame, basta configurar a lib do JOINT no seu projeto Java, adicionando o arquivo JOINT.jar a biblioteca do projeto. O arquivo JOINT.jar encontra-se na pasta lib desta distribuição.
Por fim, deve ser criado na raiz do projeto Java um arquivo de propriedades nomeado “Repository.properties”. Neste arquivo deve ser colocada uma linha com a url do repositório que você deseja operar. Existem duas maneiras de criar um repositório no servidor do Sesame. A primeira é pela interface, clicando em New Repository, escolha OWLIM lite como tipo e defina um id e um título para o repositório:

Clique em next, na próxima página os únicos campos que você precisa alterar são o Storage Folder coloque o mesmo id e o campo Base URL deixe em branco:

A outra forma de criar um repositório é via código pelo JOINT. Na seção JOINT API, explicaremos como faz via Java. Depois de clicado em create, seu repositório estará criado, copie a url do repositório para colocar no Repository.properties do seu projeto:


Pronto, seu projeto Java já está configurado para o desenvolvimento de aplicações baseadas em ontologias no repositório que você criou.
API do JOINT
1. OPERAÇÕES EM REPOSITÓRIOS
Para operações em repositórios no servidor HTTP do Sesame, bem como as outras operações exceto o KAO, é utilizado a classe RepositoryFacade.
1.1. CRIANDO E REMOVENDO REPOSITÓRIOSPara criar e remover repositórios, basta utilizar os métodos da fachada: createRepository e removeRepository.

Note que ambos os métodos necessitam de três parâmetros, o primeiro e o segundo são respectivamente o id e o título do repositório que você deseja criar ou remover. O último parâmetro é a URL do servidor HTTP do Sesame, na interface do servidor tem a url.
O método createRepository acima vai criar um repositório com a configuração default do OWLIM-Lite. Existe outro método onde você pode passar a configuração do repositório que você deseja criar, o método remover independe da configuração do repositório.
1.2. LIMPANDO REPOSITÓRIOVocê pode também querer limpar todos os dados presentes no repositório, “limpando” ele, usando o método clearRepository.

O parâmetro que o método recebe é a URL com a localização do repositório que você deseja limpar.
1.3. CRIANDO BACKUPS DE REPOSITÓRIOSPresentes em sistemas gerenciadores de banco de dados, o JOINT também disponibiliza o armazenamento de backups do repositório. Para criar um arquivo de backup de um repositório é só usar o método backupRepository com dois parâmetros a URL do repositório e o caminho do arquivo de backup (com extensão .jnt). Para recuperar esse arquivo de backup colocando ele em um repositório vazio, usa o método restoreBackup com os mesmos parâmetros.

2. OPERAÇÕES COM ONTOLOGIAS
2.1. GERANDO CÓDIGO JAVA A PARTIR DE ONTOLOGIAS
O JOINT usa por baixo o Alibaba para geração de código Java a partir de ontologias, por isso esse processo é um pouco mais complexo que os outros, veja o exemplo:

O primeiro parâmetro do método getOntoloyCompiler (Classe que compila a ontologia em Java) é o caminho do arquivo jar que você quer gerar com as classes da ontologia. O segundo parâmetro é uma lista de strings com a URL de cada ontologia. Se a ontologia tiver na web você coloca o “http://...”, se for um arquivo local do seu computador coloca “file://...”, mas tem que ser somente URLs. Depois é só chamar o método compile para gerar o arquivo Jar.
2.2. ADICIONAR, REMOVER E ATUALIZAR ONTOLOGIASA fachada do JOINT também serve para fazer operações com ontologias no repositório definido no arquivo Repository.properties. Para adicionar uma ontologia é utilizado o método addOntology , onde o primeiro parâmetro é o caminho da ontologia e o segundo é a URI da ontologia. Para atualizar uma ontologia no repositório pré-definido, chama-se o método updateOntology com os mesmos parâmetros do método anterior. Por fim, para remover uma ontologia do repositório, basta usar o método deleteOntology passando apenas um parâmetro que é a URI da ontologia. Veja o exemplo abaixo:

3. OPERAÇÕES COM INSTÂNCIAS
3.1. O CONCEITO KAO
O JOINT trabalha com o conceito do Knowledge Acess Object (KAO), o qual é um padrão de persistência similar ao Data Acess Object (DAO), com a diferença de que o KAO não trabalha somente com dados, mas com informação e conhecimento. Dessa forma, esse padrão pode separar a camada de negócios da aplicação da camada de acesso ao repositório semântico. Além disso, o KAO tem o objetivo de desacoplar os métodos de criação, remoção e recuperação de instâncias dos métodos de consulta em SPARQL. Portanto, foi criado uma classe abstrata (AbstractKAO) que inclui a implementação dos métodos citados. Então, para cada ontologia é criada uma classe concreta que extende a classe AbstractKAO, nessa classe concreta é implementado apenas métodos que envolvem consultas em SPARQL referente a ontologia em questão. Possibilitando a evolução do código da aplicação. A Figura a seguir ilustra o padrão.

Como explicado na subseção anterior pra cada ontologia que se deseja manipular instâncias e executar consultas SPARQL é necessário a criação de um KAO respectivo a essa ontologia. Nas próximas subseções vamos utilizar a ontologia programmes da BBC por motivos de exemplificação. Já que queremos manipular instâncias ou até mesmo consultar a ontologia, cria-se uma classe concreta que extenda a classe AbstractKAO representando a ontologia BBC.

Ao extender a classe AbstractKAO será necessário criar o construtor, esse construtor deve ser genérico (
O KAO serve principalmente para adicionar, remover e recuperar instâncias de uma ontologia em um repositório. Lembrando que para isso é necessário gerar o código JAVA da ontologia antes (seção 2.1). Veja o exemplo abaixo de manipulação de instâncias com a ontologia da BBC:

Sempre que terminar de manipular as instâncias chame o método save(), ele salva as mudanças feitas no repositório e fecha conexões com o repositório liberando recursos. Depois de chamado o método save() qualquer manipulação que fizer com a ontologia sem instanciar um novo kao lançará uma exceção pois a conexão já foi fechada.
3.4. EXECUTANDO CONSULTAS SPARQL
Para executar consultas SPARQL no JOINT, você terá que criar métodos dentro do KAO que façam essas consultas, veja:

Apesar dessa consulta retornar todas as instâncias da classe Episodes, você pode fazer isso também usando o método retrieveAllInstances. Você pode também criar o método para receber uma string com a consulta e então executá-la, retornando o resultado.

Existem vários métodos de consulta em SPARQL que você pode realizar, consulte o JAVADOC do JOINT para entender melhor.
4. EXECUTANDO REGRAS SWRL
Para rodar regras SWRL com o JOINT é necessário que as regras estejam presentes em uma ontologia e essa ontologia esteja no repositório. O JOINT executa apenas regras presentes no repositório. Uma vez que a ontologia com as regras SWRL foi adicionada no repositório. Para executá-las basta chamar o método da fachada performRules.

Observe que você pode chamar o método tanto passando a URL do repositório, como você pode não passar nenhum parâmetro e o JOINT vai usar a url definida no Repository.properties.