Domain Specific Language generation based on a XML Schema.
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
Author: Luís Duarte Nº 39378
Adviser: Fernando Miguel Gamboa de Carvalho
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 2
• What are they?
• External DSLs.
• XSD.
Domain Specific Languages
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 3
• What are they?
• External DSLs.
• XSD.
• Regular expressions.
Domain Specific Languages
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 4
• What are they?
• External DSLs.
• XSD.
• Regular expressions.
• Internal.
• LINQ.
Domain Specific Languages
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 5
External Domain Specific Language - HTML
Static Component
Dynamic Component
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 6
Template Engines
Apache Velocity
ASP.NE
T
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
vlibTemplat
e
WebMarc
o
Twi
g
Handlebars
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 7
• Security.
• Well formed documents.
• HTML language rule validation.
• Context object validation.
Template Engines - Issues
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 8
• Security.
• Well formed documents.
• HTML language rule validation.
• Context object validation.
• Performance.
Template Engines - Issues
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 9
• Security.
• Well formed documents.
• HTML language rule validation.
• Context object validation.
• Performance.
• Flexibility.
Template Engines - Issues
If/Else:
For:
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 10
• Security.
• Well formed documents.
• HTML language rule validation.
• Context object validation.
• Performance.
• Flexibility.
• Complexity.
Template Engines - Issues
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 11
Template Engines – The Breakthroughs
J2Html
KotlinHtml HtmlFlow1
Rocke
r
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 12
Template Engines – The Breakthroughs – J2Html
Java templates.
Well formed documents.
HTML rule validation.
Performance.
Incomplete.
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 13
Template Engines – The Breakthroughs - Rocker
Performance.
Context object validation.
Complete.
Uses text templates.
Well formed documents.
HTML rule validation.
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 14
Template Engines – The Breakthroughs - KotlinHtml
Security.
HTML rule validation.
Kotlin Templates.
Well formed documents.
Performance.
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 15
Template Engines – The Breakthroughs – HtmlFlow1
First approach at a HTML DSL.
Some HTML rule validation.
Java Templates.
Well formed documents.
Performance.
Only validates some HTML rules.
Incomplete.
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 16
Template Engines – The Breakthroughs - Summary
Functional Templates
Element Validation
Attribute Validation
Full HTML support
Well formed documents
Performance
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 17
xmlet Approach
HtmlApiFaster
XsdAsmFaster
XsdParser
1) XSD file, DSL name
2) XSD file
3) XSD element list
4) Generated classes
• Generation of a Java DSL.
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 19
• Complete support to the HTML language.
• Performance.
• Maintenance.
• Templates defined as functions.
New HtmlFlow – HtmlFlow + xmlet
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 20
• Introduction.
• The motivation.
• “(...) That's about a thousand times faster than Apache Velocity.”
• Used Benchmarks.
• Spring Benchmark.
• Template Benchmark.
Benchmarks
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 28
Versatility – Regular Expressions
String toMatch = "regulares";
Challenge: Find all characters between ‘a’ and ‘d’ or between ‘r’ and ‘z’.
Regular Expression:
[a-d]|[r-z]
Results:
r
u
a
r
s
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 30
• What is it?
• Element mapping.
• XSD rule validation.
Versatility – XsdParser
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 31
• HtmlFlow v3.0.
• Multiple published DSLs.
• Sub-projects with multiple usages.
Conclusions
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 32
Conclusions - Article
Article Part 1
Article Part 2
13/12/2018 ADEETC – MEIC - DISSERTAÇÃO 33
Questions
“Template engines are a great way to build dynamic HTML pages,
but are you using the best template engine for your purposes?” - DZone