Apresentação do PowerPoint

Propaganda
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!!
Download