Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Domain Specific Language generation based on a XML Schema.

25 views

Published on

An overview of the process used to generate fluent Java interfaces to use a domain specific language previously defined in the XSD language.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Domain Specific Language generation based on a XML Schema.

  1. 1. Domain Specific Language generation based on a XML Schema 13/12/2018 ÁREA DEPARTAMENTAL DE ENGENHARIA DE ELETRÓNICA E TELECOMUNICAÇÕES E DE COMPUTADORES MESTRADO EM ENGENHARIA INFORMÁTICA E DE COMPUTADORES 1 Autor : Luís Duarte Nº 39378 Orientador: Fernando Miguel Gamboa de Carvalho
  2. 2. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 2 • O que são? • Externas. • XSD. Domain Specific Languages
  3. 3. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 3 • O que são? • Externas. • XSD. • Expressões regulares. Domain Specific Languages
  4. 4. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 4 • O que são? • Externas. • XSD. • Expressões regulares. • Internas. • LINQ. Domain Specific Languages
  5. 5. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 5 Domain Specific Language Externa - HTML Componente Estática Componente Dinâmica
  6. 6. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 6 Template Engines Apache Velocity ASP.NET Laravel Blade CodeCharge Studio ColdFusion CTPP Django FreeMarker eRuby Genshi Go Templates Haml Hamlets Thymeleaf Smarty Razor PHP Open Power Template Mustache Kid Jinja JSP vlibTemplate WebMarco Twig Handlebars
  7. 7. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 7 • Segurança. • Documentos bem formados. • Validação das regras do HTML. • Validação de objectos de contexto. Template Engines - Problemas
  8. 8. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 8 • Segurança. • Documentos bem formados. • Validação das regras do HTML. • Validação de objectos de contexto. • Desempenho. Template Engines - Problemas
  9. 9. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 9 • Segurança. • Documentos bem formados. • Validação das regras do HTML. • Validação de objectos de contexto. • Desempenho. • Flexibilidade. Template Engines - Problemas If/Else: For:
  10. 10. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 10 • Segurança. • Documentos bem formados. • Validação das regras do HTML. • Validação de objectos de contexto. • Desempenho. • Flexibilidade. • Complexidade. Template Engines - Problemas
  11. 11. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 11 Template Engines – Os Inovadores J2Html KotlinHtml HtmlFlow1 Rocker
  12. 12. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 12 Template Engines – As Inovações – J2Html Templates em Java. Documentos bem formados. Regras de HTML. Desempenho. Incompleto.
  13. 13. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 13 Template Engines – As Inovações - Rocker Desempenho. Valida objectos de contexto. Completo. Usa templates textuais. Documentos bem formados. Regras de HTML.
  14. 14. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 14 Template Engines – As Inovações - KotlinHtml Segurança. Garante regras do HTML. Templates em Kotlin. Documentos bem formados. Desempenho.
  15. 15. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 15 Template Engines – As Inovações – HtmlFlow1 Tentativa de DSL de HTML. Garante algumas regras do HTML. Templates em Java. Documentos bem formados. Desempenho. Garante apenas algumas regras. Incompleto.
  16. 16. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 16 Template Engines – As Inovações - Resumo
  17. 17. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 17 Abordagem - xmlet HtmlApiFaster XsdAsmFaster XsdParser 1) Ficheiro XSD, Nome DSL 2) Ficheiro XSD 3) Lista de elementos XSD 4) Classes geradas • Geração de uma DSL Java.
  18. 18. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 18 • Segurança. • Regras da linguagem. • Automatização + Reutilização. • Rapidez. • Evitar erro humano. • Intuitivo. • Transparente. Objectivos - xmlet
  19. 19. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 19 • Suporte completo à linguagem HTML. • Desempenho. • Manutenção. • Templates definidos como funções. Novo HtmlFlow – HtmlFlow + xmlet
  20. 20. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 20 • Introdução. • A motivação. • “(...) That's about a thousand times faster than Apache Velocity.” • Benchmarks utilizados. • Spring Benchmark. • Template Benchmark. Benchmarks
  21. 21. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 21 • Abordagem. • Fiabilidade. • Resultados. Benchmarks – Spring Benchmark - Resultados
  22. 22. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 22 Benchmarks – Spring Benchmark - Resultados
  23. 23. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 23 • Abordagem. • JMH. • Resultados. Benchmarks – Template Benchmark - Resultados
  24. 24. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 24 Benchmarks – Template Benchmark - Resultados
  25. 25. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 25 Benchmarks – Template Benchmark - Resultados
  26. 26. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 26 Versatilidade – Android Visual Layouts
  27. 27. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 27 Versatilidade – Android Visual Layouts Android android = new Android(androidObj -> androidObj.layout() .linearLayout() .attrLayoutWidth("wrap_content") .attrLayoutHeight("wrap_content") .attrGravity(EnumGravityLinearLayout.CENTER) .textView() .attrText("Hello MEIC!") .attrLayoutWidth("wrap_content") .attrLayoutHeight("wrap_content") .attrTextSize("36sp") .attrTextColor("@android:color/black") .attrBackground("#ccddff") .attrPadding("20dp") .__() .__()); String layout = android.getLayout();
  28. 28. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 28 Versatilidade – Expressões Regulares String toMatch = "regulares"; Desafio: Obter todos os caracteres no intervalo de ‘a’ a ‘d’ ou no intervalo de ‘r’ a ‘z’. Expressão regular: [a-d]|[r-z] Resultados: r u a r s
  29. 29. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 29 Versatilidade – Expressões Regulares String toMatch = "regulares"; Regex regex = new Regex(expr -> expr.matchRegex() .fromFirstUntilLast().attrFirst("a").attrLast("d") .or() .fromFirstUntilLast().attrFirst("r").attrLast("z")); List<String> result = regex.match(toMatch);
  30. 30. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 30 • O que é? • Mapeamento de elementos. • Validação das regras do XSD. Versatilidade – XsdParser
  31. 31. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 31 • HtmlFlow v3.0. • Várias DSLs publicadas. • Sub-projectos com utilizações variadas. Conclusões
  32. 32. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 32 Conclusões - Artigo
  33. 33. 13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 33 Questões “Template engines are a great way to build dynamic HTML pages, but are you using the best template engine for your purposes?” - DZone

×