HyperDE Framework e Ambiente de Desenvolvimento dirigido por Ontologias para Aplicações Hipermídia Demetrius Arraes Nunes Dissertação de Mestrado Orientador: Daniel Schwabe Departamento de Informática – PUC-Rio Rio de Janeiro, 30 de março de 2005 Tópicos Motivação Objetivos O que é o HyperDE? Criando uma aplicação com o HyperDE Trabalhos relacionados Trabalhos futuros Contribuições A Web atual Páginas em código HTML com objetivo de orientar o navegador a gerar uma apresentação das informações Texto, Imagens, etc, compreensível apenas por pessoas Conteúdo + Apresentação misturados “No separation of concerns” Mecanismos de busca se utilizam de algoritmos basicamente estatísticos A Web Semântica Extensão da Web atual Objetivo principal é adicionar significado às informações disponíveis na Web de forma a ser processável por máquinas Interoperabilidade: possibilitará a integração entre aplicações Automação: agentes de software serão capazes de executar muitas tarefas que necessitam de cognição e que hoje só podem ser executadas por pessoas Web Semântica HTML, CSS, XUL, XAML e outras linguagens serão usadas para guiar diversos tipos de navegadores a gerarem apresentações diferenciadas RDF/RDF(s)/OWL (todos com representação em XML) serão usados para descrever o conteúdo de forma semântica, i.e., com significado para humanos E máquinas Possibilitará mecanismos de busca semântica com inferências e uso de inteligência artificial A Onda da Web Semântica (na visão de Tim Berners-Lee) MDA – Model Driven Architecture Produção de software através apenas de modelagem Toda fase de implementação é feita de forma automatizada, processando o modelo Por isso, os sistemas são construídos independente de plataforma A idéia é antiga: OOHDM (1995) é um exemplo de MDA para aplicação hipermídia Agora a OMG está “padronizando” e muitas empresas (IBM, Microsoft, Sun, ...) estão apoiando Domain Specific Languages (DSL) “Little languages”: linguagens de programação criadas para utilização dentro de um domínio de problema específico É, de certa forma, um conceito antagônico a MDA, porque é “codeoriented”: 1. 2. Cria-se uma linguagem de programação e Implementa-se o sistema usando essa linguagem Ruby/DSL Ruby: linguagem dinamicamente tipada, interpretada, orientada a objetos Pouca ou nenhuma distinção entre tempo de “compilação” e de execução Sintaxe tolerante e concisa Indicada para gerar DSLs baseadas em modelos OO 10.times do print “Hello HyperDE!” end SHDM Versão semântica do OOHDM original Define processo e arquitetura Orientada a modelos: Conceitual Navegacional Interface Abstrata Metamodelos e Modelos são definidos através de ontologias Implementação pode ser feita artesanalmente ou automatizada por ferramentas/ambientes HyperDE O que é o HyperDE? (I) Uma arquitetura de software, um ambiente de desenvolvimento e ferramentas de apoio Permite Desenvolvimento através de uma Interface Web Desenvolvimento interativo Prototipação rápida de uma aplicação SHDM, sem necessidade de programação (ou quase) O que é o HyperDE? (II) Um framework MVC Camada de (M)odelo fornece primitivas baseadas no SHDM (classes navegacionais, contextos, índices, nós, elos, ...) Metamodelo e Modelo é persistido em RDF(S) Geração dinâmica de DSL para manipulação do modelo e codificação de lógica de negócios Camada de (C)ontrole implementa a lógica definida pelo modelo navegacional Camada de (V)isão fornece funções de auxílio para uma implementação “quasiabstrata” HyperDE Demonstração Pessoa Aluno por Área Alunos Alunos Alfa Alunos por Professor Alunos Professores por Professor Professor Professores Alfa por Área por Publicação Publicação por Pessoa Áreas de Pesquisa Área de Pesquisa Áreas de Pesquisa Alfa por Pessoa HyperDE Arquitetura de Implementação Interface Web Usuário / Desenvolvedor Visão View Helpers & Components View Templates Controle Navigation Controller Interface de Console Modelo tool Importação/Exportação de Modelos Metamodelo SHDM Model Generator Modelo Navegacional SemanticRecord Mapper Database Backend CRUD Controllers SeRQL Linguagem de Consulta para RDF Professor E-mail Nome Titulação Nome: José E-mail: [email protected] Titulação: Doutor Nome: Maria E-mail: [email protected] Titulação: Mestre Nome: João E-mail: [email protected] Titulação: Mestre SeRQL - exemplo 1º caminho: Nó do tipo “Professor” SELECT node FROM variáveis que irão aparecer no resultado 2º caminho (I): Elo com origem no nó e do tipo “Trabalha” {node} rdf:type {<sr:Professor>}, 2º caminho (II): {link} sr:source_node {node}; Elo com destino em um nó X cujo rdf:type {<sr:Trabalha>}; tipo é “AreaDePesquisa” sr:target_node {?} rdf:type {AreaDePesquisa} rdf:type sr:Professor Nó sr:source_node Elo rdf:type Sr:Trabalha sr:target_node Nó X rdf:type sr:AreaDePesquisa SQL? SELECT n.* FROM nodes n, node_links l, nodes n2 WHERE n.all_types LIKE “%Professor%" AND n.id = l.node_id AND l.type = “Trabalha" AND l.target_node_id = n2.id AND n2.all_types LIKE “%AreaDePesquisa%" AND n2.id = ? SeRQL – exemplo 2 SELECT subclass FROM {subclass} rdfs:subClassOf {<sr:Pessoa>} Ruby / HyperDE-DSL schwabe = Professor.find_by_nome “Daniel Schwabe” hipermidia = AreaDePesquisa.find_by_nome “Hipermidia” schwabe.orienta.each do |aluno| unless aluno.trabalha.include?(hipermidia) aluno.trabalha << hipermidia end end Java/Jena? DAMLModel model = … // code that loads the VCARD ontology // and some data based on that ontology DAMLClass vcardClass = (DAMLClass) model.getDAMLValue(vcardBaseURI+"#VCARD"); DAMLProperty fnProp = (DAMLProperty) model.getDAMLValue(vcardBaseURI+"#FN"); DAMLProperty emailProp = (DAMLProperty) model.getDAMLValue(vcardBaseURI+"#EMAIL"); Iterator i = vcardClass.getInstances(); while (i.hasNext()) { DAMLInstance vcard = (DAMLInstance) i.next(); Iterator i2 = vcard.accessProperty(emailProp).getAll(true); while (i2.hasNext()) { DAMLInstance email = (DAMLInstance) i2.next(); if (email.getProperty(RDF.value).getString().equals( "[email protected]" ) ) { DAMLDataInstance fullname = (DAMLDataInstance) vcard.accessProperty(fnProp).getDAMLValue(); if ( fullname != null ) System.out.println("Name: "+ fullname.getValue().getString()); } } } Ruby / HyperDE-DSL VCard.find_all.each do |vc| vc.emails.each do |email| if email.value == “[email protected]” and vc.fn? then print vc.fn end end end Métodos de persistência: RubyClasses / HyperDE-DSL nativas • find, find_all, find_by_* • create, save, destroy schwabe = Professor.find_by_nome “Daniel Schwabe” Métodos de hipermidia = elos AreaDePesquisa.find_by_nome acesso aos Métodos de “Hipermidia” acesso aos elos schwabe.orienta.each do |aluno| unless aluno.trabalha.include?(hipermidia) aluno.trabalha << hipermidia end Métodos de end atribuição de valor de elos Ruby / HyperDE-DSL VCard.find_all.each do |vc| vc.emails.each do |email| print vc.fn if email == “[email protected]” and vc.fn? 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-Orkut Pessoas Pessoa nome: String email: Email foto: Image humor: Computed amigos: Index(Amigos(_THIS)) AmigoDe Pessoa Pessoas Alfa PorAmigo Desenvolvendo uma aplicação SHDM com HyperDE (I) Definição de classes navegacionais e elos instância NavClass Pessoa instâncias NavAttribute Link nome: String homepage: Url foto: Image MatriculadoEm renovar_matricula cancelar_matricula TemDepartamento NavOperation instâncias instâncias Desenvolvendo uma aplicação SHDM com HyperDE (II) Definição de contextos navegacionais Context ContextParameter Parameter NavClass Desenvolvendo uma aplicação SHDM com HyperDE (III) Definição de estruturas de acesso Index IndexAttribute Departamento Engenheria Informática Letras ... Ano de Fundação 1920 1960 1945 ... Alunos Professores 242 199 121 ... Ver Ver Ver ... IndexEntryAttribute IndexEntry Desenvolvendo uma aplicação SHDM com HyperDE (IV) Definição de Landmarks Landmark ContextLandmark target Context IndexLandmark target Index Desenvolvendo uma aplicação SHDM com HyperDE (V) Definiçao de Nós Metaclasses generate Professor generate generate NavClass Pessoa inverse Node Link Aluno target NodeLink Orienta generate inverse OrientadoPor generate Desenvolvendo uma aplicação SHDM com HyperDE (VI) Definição de templates customizados View NavClass GenericView IndexView ContextView layout Context Index action: show_index action: context layout NavigationController Pessoa Aluno por Área Alunos Alunos Alfa Alunos por Professor Alunos Professores por Professor Professor Professores Alfa por Área por Publicação Publicação por Pessoa Áreas de Pesquisa Área de Pesquisa Áreas de Pesquisa Alfa por Pessoa Template – exemplo <B>Titulacao:</B><br> <%= attr(“titulacao”) %><BR> <%= attr(“ano_titulacao”) %> - <%= attr(“origem_titulacao”) %><BR><BR> <B>Areas de Atuacao Tecnologica:</B><BR> <TABLE> <% index(@node.areas) do |template| %> <% template.entry do |entry| %> <TR VALIGN=TOP><TD><IMG SRC='…'></TD> <TD><%= entry.nome.ahref %></TD></TR> <% end %> <% end %> </TABLE> Desenvolvendo uma aplicação SHDM com HyperDE (VII) Definição e execução de Operações <%= op "mudar_nome", { :label => "Alterar Nome", :view => "attributes", :update => "node_attributes", :label_loading => "Aguarde..." }, [ '<input type=button value="%s" onclick="%s">', :label, :onclick ] %> Trabalhos Relacionados Toda a série de linguagens, ambientes e frameworks destinados ao suporte dos métodos OOHDM e SHDM OOHDM-Web (1 e 2) e OOHDM-Java (1 e 2) OOHDM-ML, OOHDM-Xweb Lima, 2003; Szundy, 2004; Moura, 2004 Outros Hera, VisualWADE (OOH-Method), ArgoUWE e WebML Trabalhos Futuros Melhorias de implementação do HyperDE Aplicação compilada => Performance Mecanismos de Segurança Suporte a Regras de inferência Extensões ao modelo do ambiente Inclusão de facetas e outras primitivas e recursos do método SHDM que foram deixadas de fora Mapeamento de modelo conceitual/navegacional como em Szundy, 2004. Mapeamento de interfaces abstratas e interfaces concretas como em Moura, 2004. Capacidades de navegação adaptativa Possibilitar o uso de ontologias pré-definidas Contribuições Ambiente de desenvolvimento e framework MVC integrados (de ponta-a-ponta) para prototipação de aplicações OOHDM e SHDM Enriquecimento do SHDM através de modelo para implementação e execução de operações e atributos computados Harmonização de MDA e DSL Geração dinâmica de DSL para manipulação de ontologias Possibilita processo ágil e incremental