HyperDEHyperDEFramework e Ambiente de Framework e Ambiente de
Desenvolvimento dirigido por Ontologias Desenvolvimento dirigido por Ontologias para Aplicações Hipermídiapara Aplicações Hipermídia
Demetrius Arraes NunesDemetrius Arraes NunesDissertação de MestradoDissertação de Mestrado
Orientador: Daniel SchwabeOrientador: Daniel SchwabeDepartamento de Informática – PUC-RioDepartamento de Informática – PUC-Rio
Rio de Janeiro, 30 de março de 2005Rio de Janeiro, 30 de março de 2005
TópicosTópicos
MotivaçãoMotivaçãoObjetivosObjetivosO que é o HyperDE?O que é o HyperDE?Criando uma aplicação com o HyperDECriando uma aplicação com o HyperDETrabalhos relacionadosTrabalhos relacionadosTrabalhos futurosTrabalhos futurosContribuiçõesContribuições
A Web atualA Web atual
Páginas em código HTML com objetivo de Páginas em código HTML com objetivo de orientar o navegador a gerar uma orientar o navegador a gerar uma apresentação das informaçõesapresentação das informações
Texto, Imagens, etc, compreensível Texto, Imagens, etc, compreensível apenas por pessoasapenas por pessoas
Conteúdo + Apresentação misturadosConteúdo + Apresentação misturados ““No separation of concerns”No separation of concerns”Mecanismos de busca se utilizam de Mecanismos de busca se utilizam de
algoritmos basicamente estatísticosalgoritmos basicamente estatísticos
A Web SemânticaA Web Semântica
Extensão da Web atualExtensão da Web atualObjetivo principal é adicionar significado Objetivo principal é adicionar significado
às informações disponíveis na Web de às informações disponíveis na Web de forma a ser processável por máquinasforma a ser processável por máquinas
Interoperabilidade: possibilitará a Interoperabilidade: possibilitará a integração entre aplicaçõesintegração entre aplicações
Automação: agentes de software serão Automação: agentes de software serão capazes de executar muitas tarefas que capazes de executar muitas tarefas que necessitam de cognição e que hoje só necessitam de cognição e que hoje só podem ser executadas por pessoaspodem ser executadas por pessoas
Web SemânticaWeb Semântica
HTML, CSS, XUL, XAML e outras linguagens HTML, CSS, XUL, XAML e outras linguagens serão usadas para guiar diversos tipos de serão usadas para guiar diversos tipos de navegadores a gerarem apresentações navegadores a gerarem apresentações diferenciadasdiferenciadas
RDF/RDF(s)/OWL (todos com representação RDF/RDF(s)/OWL (todos com representação em XML) serão usados para descrever o em XML) serão usados para descrever o conteúdo de forma semântica, i.e., com conteúdo de forma semântica, i.e., com significado para humanos E máquinassignificado para humanos E máquinas
Possibilitará mecanismos de busca semântica Possibilitará mecanismos de busca semântica com inferências e uso de inteligência artificialcom inferências e uso de inteligência artificial
A Onda da Web Semântica A Onda da Web Semântica (na visão de Tim Berners-Lee)(na visão de Tim Berners-Lee)
MDA – Model Driven ArchitectureMDA – Model Driven Architecture
Produção de software através apenas de Produção de software através apenas de modelagemmodelagem
Toda fase de implementação é feita de forma Toda fase de implementação é feita de forma automatizada, processando o modeloautomatizada, processando o modelo
Por isso, os sistemas são construídos Por isso, os sistemas são construídos independente de plataformaindependente de plataforma
A idéia é antiga: OOHDM (1995) é um exemplo A idéia é antiga: OOHDM (1995) é um exemplo de MDA para aplicação hipermídiade MDA para aplicação hipermídia
Agora a OMG está “padronizando” e muitas Agora a OMG está “padronizando” e muitas empresas (IBM, Microsoft, Sun, ...) estão empresas (IBM, Microsoft, Sun, ...) estão apoiandoapoiando
Domain Specific Languages (DSL)Domain Specific Languages (DSL)
““Little languages”: linguagens de Little languages”: linguagens de programação criadas para utilização programação criadas para utilização dentro de um domínio de problema dentro de um domínio de problema específicoespecífico
É, de certa forma, um conceito É, de certa forma, um conceito antagônico a MDA, porque é “code-antagônico a MDA, porque é “code-oriented”: oriented”:
1.1. Cria-se uma linguagem de programação e Cria-se uma linguagem de programação e
2.2. Implementa-se o sistema usando essa Implementa-se o sistema usando essa linguagemlinguagem
Ruby/DSLRuby/DSL
Ruby: linguagem dinamicamente tipada, Ruby: linguagem dinamicamente tipada, interpretada, orientada a objetosinterpretada, orientada a objetos
Pouca ou nenhuma distinção entre tempo Pouca ou nenhuma distinção entre tempo de “compilação” e de execuçãode “compilação” e de execução
Sintaxe tolerante e concisaSintaxe tolerante e concisa Indicada para gerar DSLs baseadas em Indicada para gerar DSLs baseadas em
modelos OOmodelos OO
10.times do print “Hello HyperDE!”end
SHDMSHDM
Versão semântica do OOHDM originalVersão semântica do OOHDM original Define processo e arquiteturaDefine processo e arquitetura Orientada a modelos:Orientada a modelos:
ConceitualConceitualNavegacionalNavegacional Interface AbstrataInterface Abstrata
Metamodelos e Modelos são definidos através Metamodelos e Modelos são definidos através de ontologiasde ontologias
Implementação pode ser feita artesanalmente Implementação pode ser feita artesanalmente ou automatizada por ferramentas/ambientesou automatizada por ferramentas/ambientes
HyperDEHyperDE
O que é o HyperDE? (I)O que é o HyperDE? (I)
Uma arquitetura de software, um ambiente Uma arquitetura de software, um ambiente de desenvolvimento e ferramentas de de desenvolvimento e ferramentas de apoioapoio
PermitePermiteDesenvolvimento através de uma Interface Desenvolvimento através de uma Interface
WebWebDesenvolvimento interativoDesenvolvimento interativoPrototipação rápida de uma aplicação SHDM, Prototipação rápida de uma aplicação SHDM,
sem necessidade de programação (ou quase)sem necessidade de programação (ou quase)
O que é o HyperDE? (II)O que é o HyperDE? (II)Um framework Um framework MVCMVC
Camada de (Camada de (MM)odelo fornece primitivas )odelo fornece primitivas baseadas no SHDM (classes navegacionais, baseadas no SHDM (classes navegacionais, contextos, índices, nós, elos, ...)contextos, índices, nós, elos, ...)Metamodelo e Modelo é persistido em RDF(S)Metamodelo e Modelo é persistido em RDF(S)Geração dinâmica de DSL para manipulação do Geração dinâmica de DSL para manipulação do
modelo e codificação de lógica de negóciosmodelo e codificação de lógica de negócios
Camada de (Camada de (CC)ontrole implementa a lógica )ontrole implementa a lógica definida pelo modelo navegacionaldefinida pelo modelo navegacional
Camada de (Camada de (VV)isão fornece funções de )isão fornece funções de auxílio para uma implementação “quasi-auxílio para uma implementação “quasi-abstrata”abstrata”
HyperDEHyperDE
DemonstraçãoDemonstração
Pessoa
por Publicação
Professor
Alfa
por Área
Aluno
por Área
Alfa
por Professor
Publicação
por Pessoa
Área de Pesquisa
Alfa
por Pessoa
Alunos
Alunos por Professor
Professores
Alunos
Áreas de Pesquisa
Alunos
Professores
Áreas de Pesquisa
HyperDEHyperDEArquitetura de ImplementaçãoArquitetura de Implementação
Visão
Modelo
Usuário /Desenvolvedor
MetamodeloSHDM
ModeloNavegacional
ModelGenerator
View TemplatesView Helpers &
Components
Controle
NavigationController
CRUDControllers
Interface Web
Interface de Console
Database Backend
SemanticRecord Mapper
tool Importação/Exportaçãode Modelos
SeRQLSeRQLLinguagem de Consulta para RDFLinguagem de Consulta para RDF
Nome: MariaE-mail: [email protected]ção: Mestre
Professor
Nome
Titulação
Nome: JoséE-mail: [email protected]ção: Doutor
Nome: MariaE-mail: [email protected]ção: Mestre
Nome: JoãoE-mail: [email protected]ção: Mestre
SeRQL - exemploSeRQL - exemplo
SELECT node FROM SELECT node FROM
{node} rdf:type {<sr:Professor>},{node} rdf:type {<sr:Professor>},
{link} sr:source_node {node};{link} sr:source_node {node}; rdf:type {<sr:Trabalha>}; rdf:type {<sr:Trabalha>}; sr:target_node {?} sr:target_node {?} rdf:type {AreaDePesquisa} rdf:type {AreaDePesquisa}
variáveis que irão aparecer no
resultado
1º caminho:Nó do tipo
“Professor”
2º caminho (I):Elo com origem no nóe do tipo “Trabalha”
2º caminho (II):Elo com destino em um nó X cujo tipo é “AreaDePesquisa”
Nó sr:Professor
rdf:type
Elo
Sr:Trabalha
rdf:typesr:source_node
sr:target_node
Nó X sr:AreaDePesquisardf:type
SQL?SQL?SELECT n.*SELECT n.*
FROM nodes n, node_links l, nodes n2FROM nodes n, node_links l, nodes n2
WHERE n.all_types LIKE “%Professor%"WHERE n.all_types LIKE “%Professor%"
AND n.id = l.node_idAND n.id = l.node_id
AND l.type = “Trabalha"AND l.type = “Trabalha"
AND l.target_node_id = n2.idAND l.target_node_id = n2.id
AND n2.all_types LIKE “%AreaDePesquisa%"AND n2.all_types LIKE “%AreaDePesquisa%"
AND n2.id = ?AND n2.id = ?
SeRQL – exemplo 2SeRQL – exemplo 2
SELECT subclassSELECT subclass
FROM FROM
{subclass} {subclass}
rdfs:subClassOfrdfs:subClassOf
{<sr:Pessoa>}{<sr:Pessoa>}
Ruby / HyperDE-DSLRuby / HyperDE-DSL
schwabe = Professor.find_by_nome schwabe = Professor.find_by_nome “Daniel Schwabe” “Daniel Schwabe”
hipermidia = AreaDePesquisa.find_by_nomehipermidia = AreaDePesquisa.find_by_nome “Hipermidia” “Hipermidia”
schwabe.orienta.each do |aluno|schwabe.orienta.each do |aluno|
unless aluno.trabalha.include?(hipermidia)unless aluno.trabalha.include?(hipermidia)
aluno.trabalha << hipermidiaaluno.trabalha << hipermidia
endend
endend
Java/Jena? Java/Jena? DAMLModel model = … // code that loads the VCARD ontologyDAMLModel model = … // code that loads the VCARD ontology
// and some data based on that ontology// and some data based on that ontology
DAMLClass vcardClass =DAMLClass vcardClass =
(DAMLClass) model.getDAMLValue(vcardBaseURI+"#VCARD");(DAMLClass) model.getDAMLValue(vcardBaseURI+"#VCARD");
DAMLProperty fnProp =DAMLProperty fnProp =
(DAMLProperty) model.getDAMLValue(vcardBaseURI+"#FN");(DAMLProperty) model.getDAMLValue(vcardBaseURI+"#FN");
DAMLProperty emailProp = DAMLProperty emailProp =
(DAMLProperty) model.getDAMLValue(vcardBaseURI+"#EMAIL");(DAMLProperty) model.getDAMLValue(vcardBaseURI+"#EMAIL");
Iterator i = vcardClass.getInstances();Iterator i = vcardClass.getInstances();
while (i.hasNext()) {while (i.hasNext()) {
DAMLInstance vcard = (DAMLInstance) i.next();DAMLInstance vcard = (DAMLInstance) i.next();
Iterator i2 =Iterator i2 =
vcard.accessProperty(emailProp).getAll(true);vcard.accessProperty(emailProp).getAll(true);
while (i2.hasNext()) {while (i2.hasNext()) {
DAMLInstance email = (DAMLInstance) i2.next();DAMLInstance email = (DAMLInstance) i2.next();
if (email.getProperty(RDF.value).getString().equals(if (email.getProperty(RDF.value).getString().equals(
"[email protected]" ) ) {"[email protected]" ) ) {
DAMLDataInstance fullname =DAMLDataInstance fullname =
(DAMLDataInstance) vcard.accessProperty(fnProp).getDAMLValue();(DAMLDataInstance) vcard.accessProperty(fnProp).getDAMLValue();
if ( fullname != null )if ( fullname != null )
System.out.println("Name: "+ fullname.getValue().getString());System.out.println("Name: "+ fullname.getValue().getString());
}}
}}
}}
Ruby / HyperDE-DSLRuby / HyperDE-DSL
VCard.find_all.each do |vc| VCard.find_all.each do |vc|
vc.emails.each do |email| vc.emails.each do |email|
if email.value == “[email protected]” if email.value == “[email protected]”
and vc.fn? thenand vc.fn? then
print vc.fnprint vc.fn
end end
end end
end end
Ruby / HyperDE-DSLRuby / HyperDE-DSL
schwabe = Professor.find_by_nome schwabe = Professor.find_by_nome “Daniel Schwabe” “Daniel Schwabe”
hipermidia = AreaDePesquisa.find_by_nomehipermidia = AreaDePesquisa.find_by_nome “Hipermidia” “Hipermidia”
schwabe.orienta.each do |aluno|schwabe.orienta.each do |aluno|
unless aluno.trabalha.include?(hipermidia)unless aluno.trabalha.include?(hipermidia)
aluno.trabalha << hipermidiaaluno.trabalha << hipermidia
endend
endend
Classes nativasMétodos de persistência:
• find, find_all, find_by_*• create, save, destroy
Métodos de acesso aos elos
Métodos de acesso aos elos
Métodos de atribuição de valor
de elos
Ruby / HyperDE-DSLRuby / HyperDE-DSL
VCard.find_all.each do |vc| VCard.find_all.each do |vc|
vc.emails.each do |email| vc.emails.each do |email|
print vc.fn if email == “[email protected]” print vc.fn if email == “[email protected]”
and vc.fn?and vc.fn?
end end
end end Métodos de acesso de leitura e escrita para
os valores das propriedades dos nós
Métodos de verificação de
existência de valor em propriedade
Exemplo: Mini-OrkutExemplo: Mini-Orkut
nome: Stringemail: Emailfoto: Imagehumor: Computedamigos: Index(Amigos(_THIS))
Pessoa
AmigoDe
Pessoa
PorAmigo
AlfaPessoas
Pessoas
Desenvolvendo uma aplicação Desenvolvendo uma aplicação SHDM com HyperDE (I)SHDM com HyperDE (I)
Definição de classes navegacionais e elosDefinição de classes navegacionais e elos
NavClass
NavAttribute
NavOperation
Link renovar_matriculacancelar_matricula
nome: Stringhomepage: Urlfoto: Image
Pessoa
instância
instâncias
instâncias
MatriculadoEm
TemDepartamento
instâncias
Desenvolvendo uma aplicação Desenvolvendo uma aplicação SHDM com HyperDE (II)SHDM com HyperDE (II)
Definição de contextos navegacionaisDefinição de contextos navegacionais
Context
ContextParameter
NavClassParameter
Desenvolvendo uma aplicação Desenvolvendo uma aplicação SHDM com HyperDE (III)SHDM com HyperDE (III)
Definição de estruturas de acessoDefinição de estruturas de acesso
Departamento Alunos Professores
Engenheria 242 VerInformática 199 Ver
Letras 121 Ver... ... ...
Ano deFundação
192019601945
...
IndexAttribute
Index
IndexEntry
IndexEntryAttribute
Desenvolvendo uma aplicação Desenvolvendo uma aplicação SHDM com HyperDE (IV)SHDM com HyperDE (IV)
Definição de LandmarksDefinição de Landmarks
Landmark
ContextLandmark IndexLandmark
Context Index
target target
Desenvolvendo uma aplicação Desenvolvendo uma aplicação SHDM com HyperDE (V)SHDM com HyperDE (V)
Definiçao de NósDefiniçao de Nós
Node
NodeLink
Pessoa
Aluno
Professor
Orienta
OrientadoPor
target
inverse
NavClass
Link
generate
generate
generate
generate
generate
inverse
Metaclasses
Desenvolvendo uma aplicação Desenvolvendo uma aplicação SHDM com HyperDE (VI)SHDM com HyperDE (VI)
Definição de templates customizadosDefinição de templates customizados
View
ContextViewIndexViewGenericView
Context
NavClass
Index
layout
layout
NavigationController
action: context
action: show_index
Pessoa
por Publicação
Professor
Alfa
por Área
Aluno
por Área
Alfa
por Professor
Publicação
por Pessoa
Área de Pesquisa
Alfa
por Pessoa
Alunos
Alunos por Professor
Professores
Alunos
Áreas de Pesquisa
Alunos
Professores
Áreas de Pesquisa
Template – exemploTemplate – exemplo<B>Titulacao:</B><br><B>Titulacao:</B><br>
<%= attr(“titulacao”) %><BR><%= attr(“titulacao”) %><BR>
<%= attr(“ano_titulacao”) %> - <%= <%= attr(“ano_titulacao”) %> - <%= attr(“origem_titulacao”) %><BR><BR>attr(“origem_titulacao”) %><BR><BR>
<B>Areas de Atuacao Tecnologica:</B><BR><B>Areas de Atuacao Tecnologica:</B><BR>
<TABLE><TABLE>
<% index(@node.areas) do |template| %><% index(@node.areas) do |template| %>
<% template.entry do |entry| %><% template.entry do |entry| %>
<TR VALIGN=TOP><TD><IMG SRC='…'></TD><TR VALIGN=TOP><TD><IMG SRC='…'></TD>
<TD><%= entry.nome.ahref %></TD></TR><TD><%= entry.nome.ahref %></TD></TR>
<% end %><% end %>
<% end %><% end %>
</TABLE></TABLE>
Desenvolvendo uma aplicação Desenvolvendo uma aplicação SHDM com HyperDE (VII)SHDM com HyperDE (VII)
Definição e execução de OperaçõesDefinição e execução de Operações
<%= op "mudar_nome", <%= op "mudar_nome",
{ :label => "Alterar Nome", { :label => "Alterar Nome",
:view => "attributes", :view => "attributes",
:update => "node_attributes", :update => "node_attributes",
:label_loading => "Aguarde..." }, :label_loading => "Aguarde..." },
[ '<input type=button value="%s" [ '<input type=button value="%s"
onclick="%s">', :label, :onclick ] %>onclick="%s">', :label, :onclick ] %>
Trabalhos RelacionadosTrabalhos Relacionados
Toda a série de linguagens, ambientes e Toda a série de linguagens, ambientes e frameworks destinados ao suporte dos frameworks destinados ao suporte dos métodos OOHDM e SHDMmétodos OOHDM e SHDMOOHDM-Web (1 e 2) e OOHDM-Java (1 e 2)OOHDM-Web (1 e 2) e OOHDM-Java (1 e 2)OOHDM-ML, OOHDM-XwebOOHDM-ML, OOHDM-XwebLima, 2003; Szundy, 2004; Moura, 2004Lima, 2003; Szundy, 2004; Moura, 2004
OutrosOutrosHera, VisualWADE (OOH-Method), ArgoUWE Hera, VisualWADE (OOH-Method), ArgoUWE
e WebMLe WebML
Trabalhos FuturosTrabalhos Futuros
Melhorias de implementação do HyperDEMelhorias de implementação do HyperDE Aplicação compilada => PerformanceAplicação compilada => Performance Mecanismos de SegurançaMecanismos de Segurança Suporte a Regras de inferênciaSuporte a Regras de inferência
Extensões ao modelo do ambienteExtensões ao modelo do ambiente Inclusão de facetas e outras primitivas e recursos do Inclusão de facetas e outras primitivas e recursos do
método SHDM que foram deixadas de foramétodo SHDM que foram deixadas de fora Mapeamento de modelo conceitual/navegacional Mapeamento de modelo conceitual/navegacional
como em Szundy, 2004.como em Szundy, 2004. Mapeamento de interfaces abstratas e interfaces Mapeamento de interfaces abstratas e interfaces
concretas como em Moura, 2004.concretas como em Moura, 2004. Capacidades de navegação adaptativaCapacidades de navegação adaptativa Possibilitar o uso de ontologias pré-definidasPossibilitar o uso de ontologias pré-definidas
ContribuiçõesContribuições
Ambiente de desenvolvimento e framework Ambiente de desenvolvimento e framework MVC integrados (de ponta-a-ponta) para MVC integrados (de ponta-a-ponta) para prototipação de aplicações OOHDM e SHDMprototipação de aplicações OOHDM e SHDM
Enriquecimento do SHDM através de modelo Enriquecimento do SHDM através de modelo para implementação e execução de operações e para implementação e execução de operações e atributos computados atributos computados
Harmonização de MDA e DSLHarmonização de MDA e DSL Geração dinâmica de DSL para manipulação de Geração dinâmica de DSL para manipulação de
ontologiasontologias Possibilita processo ágil e incrementalPossibilita processo ágil e incremental