JOINT: Java Ontology Integrated Toolkit I Escola de Ontologias UFAL-USP Endhe Elias e Olavo Holanda Núcleo de Excelência em Tecnologias Sociais - NEES Universidade Federal de Alagoas – UFAL 2 Roteiro • Introdução • Ferramentas o Sesame o Alibaba o JOINT • Praticando 3 Introdução • Diversas ferramentas foram desenvolvidas pela comunidade (+ 150): o http://semanticweb.org/wiki/Tools • Desenvolvimento de aplicações semânticas ainda é complicado; • Ausência de ferramentas que suportem as várias etapas do desenvolvimento de sistemas. 4 Modelagem de Ontologias Configuração de Ambiente Desenvolvimento /Manutenção da Aplicação Evolução de Ontologias 5 Ferramentas 6 Sesame • Framework para armazenamento de RDF; 7 Mas porque o Sesame? Existem outras ferramentas? 8 Sesame • Framework para armazenamento de RDF; • Amplamente extensível: o Diversos tipos de armazenamento; o Suporta diferentes tipos de arquivos RDF; o Suporta duas linguagens de consulta (SPARQL e SeRQL); 9 Sesame • Provê uma API e uma interface (servidor); • Suporta transações e acesso concorrente; 10 Sesame • Provê uma API e uma interface (servidor); • Suporta transações e acesso concorrente; • Mas nem tudo são flores... 11 Sesame • Adicionando instância com Sesame: URI alice = f.createURI("http://example.org/people/alice"); URI name = f.createURI("http://example.org/ontology/name"); URI person = f.createURI("http://example.org/ontology/Person"); Literal alicesName = f.createLiteral("Alice"); RepositoryConnection con = myRepository.getConnection(); con.add(alice, RDF.TYPE, person); con.add(alice, name, alicesName); 12 Sesame • Mas existe solução; 13 Sesame • Mas existe solução; • Podemos utilizar a ferramenta Alibaba 14 Alibaba • Criado pelos consultores do Sesame; • Alibaba é uma “java library” para aplicações da Web Semântica; • Alibaba trabalha em conjunto com o Sesame; • Alibaba é a mais nova versão da ferramenta Elmo. 15 Alibaba • Provê uma API; • Torna a implementação da aplicação mais flexível; • Permite que os desenvolvedores programem à nivel de ontologia, ao invés de triplas RDF; 16 Mas será que dá para simplificar ainda mais???? 17 JOINT: Java Ontology Integrated Toolkit 18 JOINT • Plataforma ágil e eficiente para o desenvolvimento de aplicações baseadas em ontologias. • Projeto coordenado pelos professores Ig Ibert (UFAL) e Seiji Isotani (USP). • Financiado pelo Consórcio WWW; • Iniciou em 2013. 19 JOINT • Objetivo: suportar o desenvolvimento de aplicações semânticas de maneira simplificada; • Integrar e reusar ferramentas presentes na comunidade; • Fornecer técnicas, modelos e padrões para o desenvolvimento dessas aplicações. 20 JOINT 21 JOINT • Experimentação: Comunidade Científica PLATAFORMA Indústria de Software 22 JOINT • Visão Geral: • Usa o servidor HTTP do Sesame. 23 JOINT - Arquitetura 24 Praticando... 25 JOINT - Praticando 1. 2. 3. 4. 5. 6. 7. Configurando o JOINT; Criando repositórios; Adicionando ontologias; Gerando código Java a partir de ontologias; O padrão KAO; Manipulando objetos; Fazendo consultas SPARQL. 26 JOINT - Praticando 1. 2. 3. 4. 5. 6. 7. Configurando o JOINT; Criando repositórios; Adicionando ontologias; Gerando código Java a partir de ontologias; O padrão KAO; Manipulando objetos; Fazendo consultas SPARQL. 27 Configurando JOINT • Instalar o Apache Tomcat; • Implantar os arquivos presentes na pasta sesame: o Openrdf-sesame.war o Openrdf-workbench.war 28 Configurando JOINT • Colocar na biblioteca do seu projeto Java a lib JOINT.jar; • Criar um arquivo properties na raiz do projeto: • Repository.properties 29 JOINT - Praticando 1. 2. 3. 4. 5. 6. 7. Configurando o JOINT; Criando repositórios; Adicionando ontologias; Gerando código Java a partir de ontologias; O padrão KAO; Manipulando objetos; Fazendo consultas SPARQL. 30 Criando Repositórios 31 Criando Repositórios 32 Criando Repositórios • Por fim, basta copiar a url do seu repositório; • Criar uma chave do repositório no properties do seu projeto: • Repository_URL = http://.... 33 JOINT - Praticando 1. 2. 3. 4. 5. 6. 7. Configurando o JOINT; Criando repositórios; Adicionando ontologias; Gerando código Java a partir de ontologias; O padrão KAO; Manipulando objetos; Fazendo consultas SPARQL. 34 Adicionando Ontologias 35 Adicionando Ontologias 36 JOINT - Praticando 1. 2. 3. 4. 5. 6. 7. Configurando o JOINT; Criando repositórios; Adicionando ontologias; Gerando código Java a partir de ontologias; O padrão KAO; Manipulando objetos; Fazendo consultas SPARQL. 37 Gerando código Java • Utilizar RepositoryFacade com o método getOntologyCompiler: 38 JOINT - Praticando 1. 2. 3. 4. 5. 6. 7. Configurando o JOINT; Criando repositórios; Adicionando ontologias; Gerando código Java a partir de ontologias; O padrão KAO; Manipulando objetos; Fazendo consultas SPARQL. 39 O padrão KAO • O padrão KAO (Knowledge Access Objects) é um padrão de persistência similar ao DAO; • A classe abstrata AbstractKAO é responsável pela abstração da manipulação de instâncias; • Fornece operações, como criar, recuperar e remover instâncias do repositório; • Métodos para execução de consulta SPARQL, são protegidos; • Para cada ontologia que se deseja manipular instâncias, deve-se criar uma classe KAO que herda da AbstractKAO. 40 O padrão KAO 41 O padrão KAO • Exemplo de criação de KAO para ontologia ProgrammesBBC: • Vamos criar o KAO para a ontologia Viagem. o ViagemKAO 42 JOINT - Praticando 1. 2. 3. 4. 5. 6. 7. Configurando o JOINT; Criando repositórios; Adicionando ontologias; Gerando código Java a partir de ontologias; O padrão KAO; Manipulando objetos; Fazendo consultas SPARQL. 43 Manipulando Objetos (Instâncias) • Com o projeto configurado: o Arquivo Repository.properties conectando ao repositório de destino; o Código da sua ontologia gerado e presente na biblioteca do seu projeto; o Classe KAO (ViagemKAO) devidamente criada. • Podemos, então, manipular instâncias... 44 Manipulando Objetos (Instâncias) • • O KAO criado herda automaticamente os métodos de retrieveInstance, create e delete; Com esses métodos podemos manipular instâncias no repositório através de objetos, veja o exemplo do ProgrammesBBCKAO: 45 Manipulando Objetos (Instâncias) • Lembrar de chamar o método save: o Ele permite que as mudanças feitas no kao sejam salvas no repositório; o Também é responsável por fechar as conexões com o repositório, liberando recursos. 46 Manipulando Objetos (Instâncias) • Vamos criar então uma instância de Avião: String ontologyURI = “http://nees.com.br/tut/Viagem.owl”; //Cria o KAO da ontologia e passa a classe que deseja manipular instâncias ViagemKAO kao = new ViagemKAO(Aviao.class, ontologyURI); Aviao airbus = kao.create(“Airbus_A380”); airbus.setTipo(“Airbus”); airbus.setCodigo(“A380”); kao.save(); 47 JOINT - Praticando 1. 2. 3. 4. 5. 6. 7. Configurando o JOINT; Criando repositórios; Adicionando ontologias; Gerando código Java a partir de ontologias; O padrão KAO; Manipulando objetos; Fazendo consultas SPARQL. 48 Fazendo consultas SPARQL • • Os métodos para executar consulta no KAO são do tipo protected; Portanto, devem ser criados métodos de consulta dentro do KAO que chamam os métodos da classe AbstractKAO 49 Fazendo consultas SPARQL • • Os métodos para executar consulta no KAO são do tipo protected; Portanto, devem ser criados métodos de consulta dentro do KAO que chamam os métodos da classe AbstractKAO import br.ufal.ic.joint.module.kao.AbstractKAO; public class ViagemKAO extends AbstractKAO { public <T> ViagemKAO(Class<T> classe, String ontologyURI){ super(classe, ontologyURI); } public List<Object> recuperarTodasPassagens(){ String query = "PREFIX viagem:<http://nees.com.br/tut/Viagem.owl#>" + " PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> " + "SELECT ?p WHERE { ?p rdf:type viagem:Passagem}"; List<Object> lista = this.executeQueryAsList(query); return lista; } } 50 Fazendo consultas SPARQL • Vamos fazer duas consultas: 1. Selecionar todos os aeroportos 51 Fazendo consultas SPARQL • Vamos fazer duas consultas: 1. Selecionar todos os aeroportos public List<Object> recuperarTodosAeroportos(){ String query = "PREFIX viagem:<http://nees.com.br/tut/Viagem.owl#>" + " PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> " + "SELECT ?a WHERE { ?a rdf:type viagem:Aeroporto}"; List<Object> lista = this.executeQueryAsList(query); return lista; } 52 Fazendo consultas SPARQL • Vamos fazer duas consultas: 1. Selecionar todos os aeroportos 2. Selecionar todos os vôos da Gol 53 Fazendo consultas SPARQL • Vamos fazer duas consultas: 1. Selecionar todos os aeroportos 2. Selecionar todos os vôos da Gol public List<Object> recuperarTodosVoosGol(){ String query = "PREFIX viagem:<http://nees.com.br/tut/Viagem.owl#>" + " PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> " + "SELECT ?a WHERE { ?a rdf:type viagem:Voo.” + “ ?a viagem:gerenciado_por_companhiaAerea viagem:Companhia_Aerea_GOL}"; List<Object> lista = this.executeQueryAsList(query); return lista; } 54 Referência Olavo Holanda, Seiji Isotani, Ig Ibert Bittencourt, Endhe Elias, Thyago Tenório. JOINT: Java ontology integrated toolkit. Expert Systems with Applications, Available online 28 May 2013 http://dx.doi.org/10.1016/j.eswa.2013.05.040 OBRIGADO!!