6/13/16
1
TEMPLATES,XML&XSLT
SSE02 UlrikSchultz ,MMMI 1
DynamicallygeneratedHTML (drivenbyhostlanguage)
• Context:dynamicallygeneratedhtml
• Keypoint:programsthat“print”htmlarehardtoread,embedcodeinsidehtmlinstead
• Concretetechnologies:JSP,ASP.NET
<html><ul><li>Coffee,10kr</li><li>Tea,5kr</li><li>Chocolate,7kr</li></ul></html>
voidprintPrices(List<Item>all){print(“<html>\n<ul>\n”);for(Itemi:all)print(“<li>”+i.name()+”,“+i.price()
+”kr</li>\n”);print(“</ul>\n</html>\n”);}
• Coffe,10kr• Tea,5kr• Chocolate,7kr
SSE02 UlrikSchultz ,MMMI 2
DynamicallygeneratedHTML (drivenbyhostlanguage)
• Context:dynamicallygeneratedhtml
• Keypoint:programsthat“print”htmlarehardtoread,embedcodeinsidehtmlinstead
• Concretetechnologies:JSP,ASP.NET
<html><ul><li>Coffee,10kr</li><li>Tea,5kr</li><li>Chocolate,7kr</li></ul></html>
<html><ul><li>Apple,2kr</li><li>Orange,3 kr</li><li>Kiwi,2 kr</li><li>Melon,30kr</li><li>Banana,5kr</li></ul></html>
<html><ul><li>Croissant,12kr</li><li>Baguette,17kr</li></ul></html>
• Coffe,10kr• Tea,5kr• Chocolate,7kr
voidprintPrices(List<Item>all){print(“<html>\n<ul>\n”);for(Itemi:all)print(“<li>”+i.name()+”,“+i.price()
+”kr</li>\n”);print(“</ul>\n</html>\n”);}
SSE02 UlrikSchultz ,MMMI 3
• Context:dynamicallygeneratedhtml
• Keypoint:programsthat“print”htmlarehardtoread,embedcodeinsidehtmlinstead
• Concretetechnologies:JSP,ASP.NET
<html><ul><li>Coffee,10kr</li><li>Tea,5kr</li><li>Chocolate,7kr</li></ul></html>
<html><ul>≪FORi:all≫><li>≪i.name()≫,≪i.price()≫ kr</li>
≪ENDFOR≫</ul></html>
DynamicallygeneratedHTML (drivenbyhostlanguage)<html>
<ul><li>Apple,2kr</li><li>Orange,3 kr</li><li>Kiwi,2 kr</li><li>Melon,30kr</li><li>Banana,5kr</li></ul></html>
<html><ul><li>Croissant,12kr</li><li>Baguette,17kr</li></ul></html>
• Coffe,10kr• Tea,5kr• Chocolate,7kr
SSE02 UlrikSchultz ,MMMI 4
• Context:dynamicallygeneratedhtml
• Keypoint:programsthat“print”htmlarehardtoread,embedcodeinsidehtmlinstead
• Concretetechnologies:JSP,ASP.NET
<html><ul><li>Coffee,10kr</li><li>Tea,5kr</li><li>Chocolate,7kr</li></ul></html>
DynamicallygeneratedHTML (drivenbyhostlanguage) • Coffe,10kr
• Tea,5kr• Chocolate,7kr
<html><ul>≪FORi:all≫><li>≪i.name()≫,≪i.price()≫ kr</li>
≪ENDFOR≫</ul></html>
SSE02 UlrikSchultz ,MMMI 5
• Context:generatedofcodeinsomelanguage
• Keypoint:programsthat“print”codearehardtoread,embedgeneratorinsidecodeinstead
• Concretetechnologies:JET,Velocity,xtend(xpand),…
voidprint_output(){printf(“Coffee,10kr\n”);printf(“Tea,5kr\n”);printf(“Chocolate,7kr”);}
voidprint_output(){≪FORi:all≫printf(“≪i.name()≫,≪i.price()≫ kr\n”);≪ENDFOR≫}
Generatedcode (drivenbyhostlanguage)
SSE02 UlrikSchultz ,MMMI 6
6/13/16
2
• Context:generatedofcodeinsomelanguage
• Keypoint:programsthat“print”codearehardtoread,embedgeneratorinsidecodeinstead
• Concretetechnology:XSLT,generatesarbitraryoutputgivenXMLdocumentasinput
voidprint_output(){printf(“Coffee,10kr\n”);printf(“Tea,5kr\n”);printf(“Chocolate,7kr”);}
voidprint_output(){<xsl:for-eachselect=“item”>printf(“<xsl:value-of select=“name”/>,<xsl:value-of select=“price”/>kr\n”);
</xsl:for-each>}
Generatedcode(drivenbyXSLT)
SSE02 UlrikSchultz ,MMMI 7
<itemname=“Coffee”price=“10”/><itemname=“Tea”price=”5”/><itemname=“Chocolate”price=”7”/>
Assessment• Template-based programming (JET)suitable for“quick-and-dirty”codegenerators– easytostart,modify,evolve– maintenancecanbetricky– limitedpowercomparedtofullcompiler
• Languageworkbench:powerful, complex• Templates builtintohostlanguage (xtend):fairlyflexible,mustunderstandframeworkandlanguage
• XML/XSLT:easy fortheright tasks,relativelysimple
SSE02 UlrikSchultz ,MMMI 8
MDSDModel-Driven SoftwareDevelopment
SWC UlrikSchultz ,MMMI 9
Goal:“SoftwareFactories”• Automation =>
– increased development speed– enhanced software quality
• Separationof concerns =>– maintainabilitythroughredundancy avoidance andmanageability oftechnologicalchanges
• Softwareproduct line=>– reusability– expert knowledge insoftware form
• Programming abstraction=>– manageability ofcomplexity– productive environment
SWC UlrikSchultz ,MMMI 10
MDSD• MDSD=Model-Driven SoftwareDevelopment
– modelsare abstract andformalat the sametime– modelsare part ofthesoftware (notjustdocumentation)
• Keyconcepts:– Domain-Specific Language (definedbymetamodel)– Domain-specificplatform
• Approach:– FormalmodelspecifiedusingDSL– Automatically transformed tocodeusingdomain-specificplatform
– Supplemented bymanuallywritten codeasappropriate
SWC UlrikSchultz ,MMMI 11
MDSD
SWC UlrikSchultz ,MMMI 12
6/13/16
3
MDSDusingxtextxtext
grammarDSLprogram(statemachine,guispec,…)
plugincode(e.g.,actions)
generatedcodeSWC UlrikSchultz ,MMMI 13
xtendgenerator
library,framework
MDSDusingXSLTXMLXML
documents
hand-writtenCcode
generatedcodefromXSLT
SWC UlrikSchultz ,MMMI 14
Saxon
Clibrary(pluse.g.fsm.hand
fsm.c)
BasicConcepts• MDA:Standard forMDSD,reuseofarchitecture, toolsandgenerators
– metamodelspecifiedusingUMLprofile– genericgeneratorsforeachplatform(J2EE,CORBA,…)
• PIM:Platform-Independent Model• PSM:Platform-SpecificModel
– generatedfromPIMviamodel-to-modeltransform– precursortogeneratedcode
SWC UlrikSchultz ,MMMI 15
Architecture-CentricMDSD
SWC UlrikSchultz ,MMMI 16
Modeling
SWC UlrikSchultz ,MMMI 17
Modelingwithxtext
DSLprogram(e.g.,specificGUIorstatemachine)
xtext grammar(ormaybeBNF)
anything,e.g.statemachines
xtext grammar(orEMF)
xtextgrammar
xtextlanguage
namereferences[…],stuffchecked
byxtend,…
whatthegeneratedcodedoes
SWC UlrikSchultz ,MMMI 18
anything
6/13/16
4
Modelingstatemachines withXML+XSLT
XMLdocuments(cookinghood,…)
Statemachinegrammarschema
event-basedreactivesystems
Statemachine XMLschema
XML
XMLSchema
“onlyonehandlerperstateforeach
event”,…
whatthestatechart doeswhenaneventarrives
SWC UlrikSchultz ,MMMI 19
Statemachinespecificationlanguage
Transformations
SWC UlrikSchultz ,MMMI 20
Transformationsforstatemachineswithxtext
Machine.javaState.java
“howtogeneratecodeforstatetransition”,. . .
Javacodeimplementingmain
hood.sm2statemachine.xtext
gen_machine.xtend
hood_machine.java,…statemachine
implementedinJava whatthestatemachine doesSWC UlrikSchultz ,MMMI 21
(doable,butnotreallysupported)
TransformationsforstatemachineswithXML+XSLT
fsm.hfsm.c
“howtogeneratecodeforentryandexitactions
Ccodeimplementingactions
hood.xml,…machine.xsd
gen_machine.xsl,…
hood_machine.c,…statemachine
implementedinC whatthestatechart partofthestatemachine doesSWC UlrikSchultz ,MMMI 22
machine2enum.xsl,…
MDSDversusDSLsetc?
• MDSD:industry-approachtoDSLs– heavyontools,focusonUML-basedmodelsandgraphical(UML-like)syntax
–model-centricapproachusefulforlong-livingartifacts
• Case-in-point(s):– eclipseecore,Matlab/Simulink,Esterel SCADE,...– Robotics:DSLRobworkshop,largenumberofMDSD-basedcontributionsatICRASDIRworkshop
SWC UlrikSchultz ,MMMI 23
Top Related