lecture-y - websrv0a.sdu.dkwebsrv0a.sdu.dk/ups/swc/slides/lecture-xx-slides.pdf · • pim:...

4
6/13/16 1 TEMPLATES, XML & XSLT SSE02 U lrik Sc hultz , MMMI 1 Dynamically generated HTML (driven by host language) Context: dynamically generated html Key point: programs that “print” html are hard to read, embed code inside html instead Concrete technologies: JSP, ASP.NET <html> <ul> <li>Coffee,10 kr</li> <li>Tea,5kr</li> <li>Chocolate,7 kr</li> </ul> </html> void printPric es(L ist<I tem> all) { print(“ <html>\n<ul>\n”); for(Item i: all) print(“ <li>” +i. name()+”, “ +i. price() +” kr</li>\n”); print(“ </ul>\n</html>\n”); } Coffe,10 kr Tea,5kr Chocolate,7 kr SSE02 U lrik Sc hultz , MMMI 2 Dynamically generated HTML (driven by host language) Context: dynamically generated html Key point: programs that “print” html are hard to read, embed code inside html instead Concrete technologies: JSP, ASP.NET <html> <ul> <li>Coffee,10 kr</li> <li>Tea,5kr</li> <li>Chocolate,7 kr</li> </ul> </html> <html> <ul> <li>Apple, 2 kr</li> <li>Orange,3 kr</li> <li>Kiwi, 2 kr</li> <li>Melon,30 kr</li> <li>Banana,5 kr</li> </ul> </html> <html> <ul> <li>Croissant, 12 kr</li> <li>Baguette,17 kr</li> </ul> </html> Coffe,10 kr Tea,5kr Chocolate,7 kr void printPric es(L ist<I tem> all) { print(“ <html>\n<ul>\n”); for(Item i: all) print(“ <li>” +i. name()+”, “ +i. price() +” kr</li>\n”); print(“ </ul>\n</html>\n”); } SSE02 U lrik Sc hultz , MMMI 3 Context: dynamically generated html Key point: programs that “print” html are hard to read, embed code inside html instead Concrete technologies: JSP, ASP.NET <html> <ul> <li>Coffee,10 kr</li> <li>Tea,5kr</li> <li>Chocolate,7 kr</li> </ul> </html> <html> <ul> FOR i: all > <li>i.name(), i.price()kr</li> ENDFOR</ul> </html> Dynamically generated HTML (driven by host language) <html> <ul> <li>Apple, 2 kr</li> <li>Orange,3 kr</li> <li>Kiwi, 2 kr</li> <li>Melon,30 kr</li> <li>Banana,5 kr</li> </ul> </html> <html> <ul> <li>Croissant, 12 kr</li> <li>Baguette,17 kr</li> </ul> </html> Coffe,10 kr Tea,5kr Chocolate,7 kr SSE02 U lrik Sc hultz , MMMI 4 Context: dynamically generated html Key point: programs that “print” html are hard to read, embed code inside html instead Concrete technologies: JSP, ASP.NET <html> <ul> <li>Coffee,10 kr</li> <li>Tea,5kr</li> <li>Chocolate,7 kr</li> </ul> </html> Dynamically generated HTML (driven by host language) Coffe,10 kr Tea,5kr Chocolate,7 kr <html> <ul> FOR i: all > <li>i.name(), i.price()kr</li> ENDFOR</ul> </html> SSE02 U lrik Sc hultz , MMMI 5 Context: generated of code in some language Key point: programs that “print” code are hard to read, embed generator inside code instead Concrete technologies: JET, Velocity, xtend (xpand), … void print_output() { printf(“Coffee,10 kr\n”); printf(“Tea,5 kr\n”); printf(“Chocolate,7 kr”); } void print_output() { FOR i: all printf(“ i. name(), i.price()kr\n”); ENDFOR} Generated code (driven by host language) SSE02 U lrik Sc hultz , MMMI 6

Upload: hoanghuong

Post on 24-Jan-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: lecture-y - websrv0a.sdu.dkwebsrv0a.sdu.dk/ups/SWC/slides/lecture-xx-slides.pdf · • PIM: Platform -Independent Model • PSM: Platform -Specific Model – generated from PIM via

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

Page 2: lecture-y - websrv0a.sdu.dkwebsrv0a.sdu.dk/ups/SWC/slides/lecture-xx-slides.pdf · • PIM: Platform -Independent Model • PSM: Platform -Specific Model – generated from PIM via

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

Page 3: lecture-y - websrv0a.sdu.dkwebsrv0a.sdu.dk/ups/SWC/slides/lecture-xx-slides.pdf · • PIM: Platform -Independent Model • PSM: Platform -Specific Model – generated from PIM via

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

Page 4: lecture-y - websrv0a.sdu.dkwebsrv0a.sdu.dk/ups/SWC/slides/lecture-xx-slides.pdf · • PIM: Platform -Independent Model • PSM: Platform -Specific Model – generated from PIM via

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