No fim, os alunos deverão ter: capacidade para desenvolver especificações da sintaxe/semântica de linguagens e problemas em geral com gramáticas; capacidade para gerar programas (protótipos) usando ferramentas automáticas baseadas em gramáticas; capacidade de construir front-ends poderosos para a análise de linguagens de programação; capacidade para conceber e implementar estruturas de dados complexas para representação intermédia da informação extraída da análise do código; capacidade para criar representações visuais adequadas à compreensão clara do conhecimento complexo detido; capacidade para desenvolver software como uma tarefa de transformação de programas e/ou especificações em implementações eficientes; capacidade para utilizar técnicas de transformação de programas para otimizar programas (e.g. cálculo parcial, deteção de código morto), efetuar debugging de programase melhorar a estrutura dos programas; capacidade de desenvolver ferramentas para ajuda à compreensão de código.
Compreensão de Programas, modelos cognitivos, abordagens, conceitos e domínio do saber; Linguagens e Gramáticas, caracterização destes conceitos e domínios do saber; Conceitos sobre Gramáticas de Atributos (GA): definição formal, desenvolvimento; Processamento de Linguagens baseado em Gramáticas: notações gramaticais, gramáticas tradutoras (GT) e gramáticas de atributos (GA); Tradução Dirigida pela Sintaxe versus Tradução Dirigida pela Semântica; Geração de Programas (processadores de Linguagens, protótipos rápidos) a partir de GT/GAs; Análise de programas; Transformação de programas; Paradigmas para visualização de programas.
Todas as aulas têm um cariz teórico-prático. No início de cada aula é feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos (briefing); a seguir dedica-se algum tempo a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos. Continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e a fazer uma síntese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algoritmos. A avaliação é feita com base em 2 testes escritos (ou 1 exame de recurso final) e através de vários trabalhos (quinzenais) entregues pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos: monografias, com sínteses dos temas pesquisados; trabalhos de implementação.
Aho, Sethi and Ullman, ``Compiler Principles, Techniques and Tools'', Addison-Wesley, 1986; Pierre Deransart, M. Jourdan, and B. Lorho, "Attribute grammars: Main results, existing systems and bibliography''. In LNCS 341. Springer-Verlag, 1988; A. van Deursen and Paul Klint, "Little languages: Little maintenance?''. Journal of Software Maintenance, 10:75-92, 1998; Pedro Rangel Henriques, "Atributos e Modularidade na Especificação de Linguagens Formais''. PhD thesis, Universidade do Minho, Dec. 1992; C. A. R. Hoare, "Hints on programming language design''. Technical Report CS-TR-73-403, Stanford University, CA, USA, 1973; John E. Hopcroft, Rajeev Motwani, and Jeffrey Ullman, "Introduction to Automata Theory, Languages, and Computation''. Addison-Wesley, 3rd ed. edition, 2006.
No fim, os alunos deverão: conhecer o ciclo de vida documental, saber identificar as várias fases e as tecnologias a utilizar em cada uma; ser capazes de especificar uma linguagem de anotação para um conjunto de requisitos; ser capazes de implementar transformações de documentos para diversos fins: extração de conhecimento, publicação na Web, intercâmbio de informação; conhecer e utilizar soluções de armazenamento para documentos anotados; ser capazes de definir as camadas necessárias para integrar e realizar o intercâmbio de informação entre sistemas de informação distintos; ser capazes de implementar um projeto de publicação eletrónica recorrendo a normas internacionais abertas: XML, XSLFO e XSL; ser capazes de programar a geração automática de sítios Web a partir de um repositório de documentos XML; ser capazes de utilizar linguagens de anotação e respetivas ferramentas desenvolvidas por outrem.
Representação da informação: evolução histórica, ASCII, Unicode; Texto como a forma fundamental de representar informação; Linguagens de anotação descritivas: introdução e um pouco de história, SGML, HTML, XML, JSON; Documentação estruturada e anotação; Algumas linguagens de anotação para a Web: XML, HTML, WML, WSDL, SVG; Documentos XML: estrutura e conceitos, ciclo de vida documental, desenvolvimento de DTDs e Schemas; Processamento de linguagens de anotação: árvore documental abstrata (ADA), navegação e pesquisa na ADA: o XPath, modelos de processamento: DOM e SAX; XSL: XML Stylesheet Language; XQuery: XML Query Language; XML e Bases de Dados: armazenamento de dados estruturados e semi-estruturados; Integração e intercâmbio de informação entre sistemas: Limpeza de dados, Construção de validadores, ferramentas de e migradores, Protocolo OAI-PMH; Publicação Eletrónica: a norma XSL-FO; Processamento de documentos -- HTML, CGIs, XML.
Será seguida uma metodologia de ensino teórico-prática orientada ao projeto. No início de cada aula é feita uma introdução teórica, que os alunos deverão depois aprofundar em casa, à qual se segue a resolução de uma bateria de pequenos projetos que visam trabalhar a temática da aula. A avaliação será feita por projetos. Nas primeiras semanas serão disponibilizados aos alunos enunciados de projetos que deverão realizar como trabalho de casa e entregar para avaliação. Haverá um conjunto de 3 a 5 pequenos projetos cuja resolução não excederá as 2 horas. Este conjunto de pequenos projetos corresponderá a 40% da nota. Os restantes 60% serão obtidos através de um projeto de média dimensão que iniciará a meio do semestre e será acompanhado nas aulas até ao fim do semestre.
Para a maior parte dos temas abordados a informação que se consegue encontrar na Internet é mais do que suficiente. No entanto, ficam aqui referências que demonstraram no passado ter sido de grande ajuda: Harold, Elliotte Rusty. ``XML in a Nutshell: a desktop quick reference''. 3rd ed . Sebastopol: O'Reilly, cop. 2005; Ramalho, J.C. e Henriques, P. R. "XML \& XSL : da teoria à prática''. Lisboa : FCA - Editora de Informática, 2002 (Tecnologias de informação). ISBN 972-722-347-8; Carlos Serrão / Joaquim Marques. "Programação com PHP 5.3''. Lisboa : FCA - Editora de Informática, 2010. ISBN: 978-972-722-341-1.
No fim, os alunos deverão: ser capazes de especificar formalmente conhecimento usando várias metodologias: taxonomias, thesaurus e ontologias; ser capazes de adicionar semântica descritiva a objetos digitais; ser capazes de especificar taxonomias em SKOS; ser capazes de espeficicar ontologias em OWL; ser capazes de processar ontologias; ser capazes de adicionar semântica a sítios web usando as normas RDFa e "Open Linked Data".
Origem e evolução da representação formal de conhecimento; Especificação formal de conhecimento: taxonomias, thesaurus e ontologias; Semântica descritiva em objetos digitais: RDF - Resource Description Framework; SKOS - Simple Knowledge Organization System: especificação de taxonomias, thesaurus e sistemas classificativos; Especificação de ontologias: Entidades principais - Classes/Conceitos, Propriedades e Indivíduos; Hierarquias de Classes; Reasoning: Inferência de Conhecimento - Lógica de 1ª ordem e Lógica Descritiva; OWL - Ontology Web Language: OWL-Lite e OWL-DL; Editores e navegadores de/em OWL; Processamento de ontologias e construção de ferramentas: reasoners, editores e navegadores; Web 2.0 e o software social; Web 3.0: a web semântica (OWL, RDF); Transformação de Sistemas de Informação em Sistemas de Conhecimento: RDFa - Resource Description Framework in Attributes, Open Linked Data.
Será seguida uma metodologia de ensino teórico-prática orientada ao projeto. No início de cada aula é feita uma introdução teórica, que os alunos deverão depois aprofundar em casa, à qual se segue a resolução de uma bateria de pequenos projetos que visam trabalhar a temática da aula. A avaliação será feita por projetos. Nas primeiras semanas serão disponibilizados aos alunos enunciados de projetos que deverão realizar como trabalho de casa e entregar para avaliação. Haverá um conjunto de 3 a 5 pequenos projetos cuja resolução não excederá as 2 horas. Este conjunto de pequenos projetos corresponderá a 40% da nota. Os restantes 60% serão obtidos através de um projeto de média dimensão que iniciará a meio do semestre e será acompanhado nas aulas até ao fim do semestre.
Santos, Cláudia da Silva Amaral, "Terminologia e ontologias: metodologias para representação do conhecimento'', Doutoramento em Linguística, 2010, U. Aveiro; Geroimenko, Vladimir. "Dictionary of XML technologies and the semantic web''. London : Springer, cop. 2004. (Springer professional computing). ISBN 1-85233-768-0; Natalya F. Noy and Deborah L. McGuinness. "Ontology Development 101'': A Guide to Creating Your First Ontology. In Development, vol. 32, Nr. 1, pp. 1-25. 2001; S. Grimm. `"Knowledge Representation and Ontologies''. In Scientic Data Mining and Knowledge Discovery: Principles and Foundations, 2009; Ivo Serra and Rosario Girardi. "A Process for Extracting Non-Taxonomic Relations of Ontologies from Text''. In Intelligent Information Management, vol. 3, Nr. 4, pp. 119-124. July, 2009;
No fim, os alunos deverão: ser capazes de escrever scripts para automatização de uma variedade de tarefas e transformações; ser capazes de resolver problemas usando transformações via expressões regulares; compreender as vantagens e o funcionamento de sistemas guiados por regras de produção (condição-reação); ter a capacidade para construir DSLs concretas; ter a capacidade de construir e usar corpora; ter a capacidade de extrair informação diversa a partir de corpora; ter a capacidade de construir dicionários eletrónicos; ter a capacidade de construir pequenos protótipos para modelar linguagem natural.
Linguagens de scripting: características, objetivos e conceitos, introdução a uma linguagem de scripting (e.g. Perl); Processadores de linguagens regulares e programação orientada à expressão regular; Design Patterns no processamento de linguagens; Linguagens baseadas em regras: reescrita textual e linguagens de domínio específico (DSL) baseadas em regras de reescrita, sistemas de produção; Processamento estrutural de árvores e DSLs baseadas nestes processadores (e.g. XML::DT, Lingua::Treebank); Processamento de Linguagem Natural: Análise Morfossintática de textos em língua natural: Modelos morfológicos, Gramáticas lógicas e Definite Clause Grammars, Parsing robusto; Processamento de Linguagem Natural: semântica e pragmática; Dicionários multifonte e Thesaurus; Extração de Conhecimento a partir de Textos; Sumarização e Classificação; Introdução à Tradução automática.
Esta unidade curricular é essencialmente prática. Os alunos serão convidados a resolver problemas específicos usando uma linguagem de scripting em colaboração com o docente. Serão propostas tarefas para os alunos realizarem entre aulas para aprofundar os seus conhecimentos. A avaliação é feita com base num teste (ou exame) e pequenos trabalhos práticos a serem resolvidos fora das aulas.
Jeffrey E. F. Friedl, "Mastering Regular Expressions, Powerful Techniques for Perl and Other Tools'', O'Reilly Media, 2006; Mark Jason Dominus, "Higher-Order Perl'', Morgan Kaufmann, 2005; Daniel Jurafsky and James H. Martin. "Speech and Language Processing: An introduction to natural language processing, computational linguistics, and speech recognition''. Pearson Prentice Hall, 2008; Igor A. Bolshakov and Alexander Gelbukh, "Computational Linguistics: Models, Resources, Applications''. Steven Bird, Ewan Klein, and Edward Loper, "Natural Language Processing with Python'', O'Reilly Media, 2009; Jon Loeliger, Matthew McCullough, ``Version Control with Git, 2nd Edition'', O'Reilly Media, 2012.