gpce 2003, erfurt dynamic generation of xml september 22, 2003 domain specific languages for...

149
GPCE 2003, Erfurt Dynamic Generation of XML GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003 September 22, 2003 Domain Specific Domain Specific Languages Languages for Interactive Web for Interactive Web Services Services Claus Brabrand Claus Brabrand [ Joint work with Anders Møller, Michael Schwartzbach, [ Joint work with Anders Møller, Michael Schwartzbach, BRICS, Denmark ] BRICS, Denmark ] Compose Research Group Compose Research Group INRIA/LaBRI, University of Bordeaux I INRIA/LaBRI, University of Bordeaux I

Post on 21-Dec-2015

215 views

Category:

Documents


1 download

TRANSCRIPT

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific LanguagesDomain Specific Languagesfor Interactive Web for Interactive Web

ServicesServices

Claus BrabrandClaus Brabrand[ Joint work with Anders Møller, Michael Schwartzbach, BRICS, [ Joint work with Anders Møller, Michael Schwartzbach, BRICS,

Denmark ]Denmark ]

Compose Research GroupCompose Research Group

INRIA/LaBRI, University of Bordeaux IINRIA/LaBRI, University of Bordeaux I

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Program FamilyProgram Family

””Web servers on which clients can initiate sessions Web servers on which clients can initiate sessions that involve several exchanges of information that involve several exchanges of information mediated by HTML forms”.mediated by HTML forms”.

serverserverclientclient InternetInternet

Interactive (Form-Based) Web Services:Interactive (Form-Based) Web Services:

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

public class SessionServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = getServletContext(); HttpSession session = request.getSession(true); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><HEAD><TITLE>Servlet Demo</TITLE></HEAD><BODY>"); if (session.isNew()) { out.println("<FORM ACTION=SessionServlet>" + "Enter your name: <INPUT NAME=handle>" + "<INPUT TYPE=SUBMIT></FORM>"); session.putValue("state", "1"); } else { String state = (String) session.getValue("state"); if (state.equals("1")) { String name = (String) request.getParameter("handle"); int users = ((Integer) context.getAttribute("users")).intValue() + 1; context.setAttribute("users", new Integer(users)); session.putValue("name", name); out.println("Hello " + name + ", you are user number " + users); session.putValue("state", "2"); } else /* state.equals("2") */ { String name = (String) session.getValue("name"); out.println("Goodbye " + name); session.invalidate(); } } out.println("</BODY></HTML>"); }}

A Program from the Program A Program from the Program FamilyFamily Java Servlet

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

A Program from the Program A Program from the Program FamilyFamily

WebWebServiceService

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

public class SessionServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = getServletContext(); HttpSession session = request.getSession(true); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><HEAD><TITLE>Servlet Demo</TITLE></HEAD><BODY>"); if (session.isNew()) { out.println("<FORM ACTION=SessionServlet>" + "Enter your name: <INPUT NAME=handle>" + "<INPUT TYPE=SUBMIT></FORM>"); session.putValue("state", "1"); } else { String state = (String) session.getValue("state"); if (state.equals("1")) { String name = (String) request.getParameter("handle"); int users = ((Integer) context.getAttribute("users")).intValue() + 1; context.setAttribute("users", new Integer(users)); session.putValue("name", name); out.println("Hello " + name + ", you are user number " + users); session.putValue("state", "2"); } else /* state.equals("2") */ { String name = (String) session.getValue("name"); out.println("Goodbye " + name); session.invalidate(); } } out.println("</BODY></HTML>"); }}

A Program from the Program A Program from the Program FamilyFamily

session management

Java Servlet

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

public class SessionServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = getServletContext(); HttpSession session = request.getSession(true); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><HEAD><TITLE>Servlet Demo</TITLE></HEAD><BODY>"); if (session.isNew()) { out.println("<FORM ACTION=SessionServlet>" + "Enter your name: <INPUT NAME=handle>" + "<INPUT TYPE=SUBMIT></FORM>"); session.putValue("state", "1"); } else { String state = (String) session.getValue("state"); if (state.equals("1")) { String name = (String) request.getParameter("handle"); int users = ((Integer) context.getAttribute("users")).intValue() + 1; context.setAttribute("users", new Integer(users)); session.putValue("name", name); out.println("Hello " + name + ", you are user number " + users); session.putValue("state", "2"); } else /* state.equals("2") */ { String name = (String) session.getValue("name"); out.println("Goodbye " + name); session.invalidate(); } } out.println("</BODY></HTML>"); }}

A Program from the Program A Program from the Program FamilyFamily

state management

Java Servlet

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

public class SessionServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = getServletContext(); HttpSession session = request.getSession(true); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><HEAD><TITLE>Servlet Demo</TITLE></HEAD><BODY>"); if (session.isNew()) { out.println("<FORM ACTION=SessionServlet>" + "Enter your name: <INPUT NAME=handle>" + "<INPUT TYPE=SUBMIT></FORM>"); session.putValue("state", "1"); } else { String state = (String) session.getValue("state"); if (state.equals("1")) { String name = (String) request.getParameter("handle"); int users = ((Integer) context.getAttribute("users")).intValue() + 1; context.setAttribute("users", new Integer(users)); session.putValue("name", name); out.println("Hello " + name + ", you are user number " + users); session.putValue("state", "2"); } else /* state.equals("2") */ { String name = (String) session.getValue("name"); out.println("Goodbye " + name); session.invalidate(); } } out.println("</BODY></HTML>"); }}

A Program from the Program A Program from the Program FamilyFamily

document construction

Java Servlet

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

public class SessionServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = getServletContext(); HttpSession session = request.getSession(true); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><HEAD><TITLE>Servlet Demo</TITLE></HEAD><BODY>"); if (session.isNew()) { out.println("<FORM ACTION=SessionServlet>" + "Enter your name: <INPUT NAME=handle>" + "<INPUT TYPE=SUBMIT></FORM>"); session.putValue("state", "1"); } else { String state = (String) session.getValue("state"); if (state.equals("1")) { String name = (String) request.getParameter("handle"); int users = ((Integer) context.getAttribute("users")).intValue() + 1; context.setAttribute("users", new Integer(users)); session.putValue("name", name); out.println("Hello " + name + ", you are user number " + users); session.putValue("state", "2"); } else /* state.equals("2") */ { String name = (String) session.getValue("name"); out.println("Goodbye " + name); session.invalidate(); } } out.println("</BODY></HTML>"); }}

A Program from the Program A Program from the Program FamilyFamily Java Servlet

session management state management document construction

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

public class SessionServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = getServletContext(); HttpSession session = request.getSession(true); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><HEAD><TITLE>Servlet Demo</TITLE></HEAD><BODY>"); if (session.isNew()) { out.println("<FORM ACTION=SessionServlet>" + "Enter your name: <INPUT NAME=handle>" + "<INPUT TYPE=SUBMIT></FORM>"); session.putValue("state", "1"); } else { String state = (String) session.getValue("state"); if (state.equals("1")) { String name = (String) request.getParameter("handle"); int users = ((Integer) context.getAttribute("users")).intValue() + 1; context.setAttribute("users", new Integer(users)); session.putValue("name", name); out.println("Hello " + name + ", you are user number " + users); session.putValue("state", "2"); } else /* state.equals("2") */ { String name = (String) session.getValue("name"); out.println("Goodbye " + name); session.invalidate(); } } out.println("</BODY></HTML>"); }}

A Program from the Program A Program from the Program FamilyFamily

session management state management document construction

Java Servlet

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

The The <<bigwigbigwig>> Language/SystemLanguage/System

• A high-level domain-specific A high-level domain-specific programming language for programming language for developing interactive Web services.developing interactive Web services.

<<bigwigbigwig>><<bigwigbigwig>>

HTMLHTML

CGI ScriptsCGI Scripts

JavaScriptJavaScript

HTTP Auth.HTTP Auth.

Java AppletsJava Applets

CompleteService

Specification

CompleteService

Specification

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

<<bigwigbigwig>> = = a Collection oa Collection offDomain Specific LanguagesDomain Specific Languages

• C-like core language withC-like core language with•Session-based rSession-based runtime systemuntime system

•Dynamic documentsDynamic documents

•FForm-field orm-field validationvalidation

•Relational dRelational databaseatabase

•Concurrency controlConcurrency control

•Semantic sSemantic securityecurity

•Cryptographic securityCryptographic security

•Syntactic-level macrosSyntactic-level macros

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

<<bigwigbigwig>> = = a Collection oa Collection offDomain Specific LanguagesDomain Specific Languages

• C-like core language withC-like core language with•Session-based rSession-based runtime systemuntime system

•Dynamic documentsDynamic documents

•FForm-field orm-field validationvalidation

•Relational dRelational databaseatabase

•Concurrency controlConcurrency control

•Semantic sSemantic securityecurity

•Cryptographic securityCryptographic security

•Syntactic-level macrosSyntactic-level macros

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Implementation ApproachesImplementation Approaches

• Traditionally 2 approaches:Traditionally 2 approaches:

– Script-centered:Script-centered:•Perl/CGI, Java Servlets, …Perl/CGI, Java Servlets, …

– Page-centered:Page-centered:•ASP, PHP, JSP, ...ASP, PHP, JSP, ...

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Script-Centered:Script-Centered:Perl/CGI, Servlets, ...Perl/CGI, Servlets, ...

e

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

WebWebServiceService

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Script-Centered:Script-Centered:Perl/CGI, Servlets, ...Perl/CGI, Servlets, ...

e

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

WebWebServiceService

requestrequest

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Script-Centered:Script-Centered:Perl/CGI, Servlets, ...Perl/CGI, Servlets, ...

e

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

WebWebServiceService

computecomputereplyreply

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Script-Centered:Script-Centered:Perl/CGI, Servlets, ...Perl/CGI, Servlets, ...

e

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

e

WebWebServiceService

HTMLHTML

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Script-Centered:Script-Centered:Perl/CGI, Servlets, ...Perl/CGI, Servlets, ...

e

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

e

WebWebServiceService

submitsubmit

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Script-Centered:Script-Centered:Perl/CGI, Servlets, ...Perl/CGI, Servlets, ...

e

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

e

WebWebServiceService

computecomputereplyreply

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Script-Centered:Script-Centered:Perl/CGI, Servlets, ...Perl/CGI, Servlets, ...

e

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

e

eWebWebServiceServiceHTMLHTML

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

e

e

e

PagePage-Centered:-Centered:PHP, ASP, JSP, ...PHP, ASP, JSP, ...

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

WebWebServiceService

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Page-CenteredPage-Centered

• Increased level of abstractionIncreased level of abstraction::•CGI protocol details abstracted awayCGI protocol details abstracted away

• Easy to add dynamics to static pagesEasy to add dynamics to static pages::•

• ScalabilityScalability::•SpecializedSpecialized Web server Web server

““Service code embedded in tags andService code embedded in tags and interpreted by specialized Web server”interpreted by specialized Web server”

<html><body>Time: <%= Now() %></body></html><html><body>Time: <%= Now() %></body></html><%= Now() %>

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Script-Centered vs. PageScript-Centered vs. Page--CenteredCentered

• As the service complexity increases:As the service complexity increases:– Page-Page-CCentered entered Script- Script-CCentered entered

•A lot of HTML is generated by script elementsA lot of HTML is generated by script elements

• Interesting dInteresting duality:uality:•Script-centered:Script-centered:

– DDefaultefault:: program programming,ming, EEscapescape:: print printinging ( (printprint))

•Page-centered:Page-centered:– DDefaultefault:: print printing,ing, EEscapescape:: programming programming (<%... (<%...

%>)%>)

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Fundamental DrawbacksFundamental Drawbacks

<input name=”x”>

a_scripta_script another_scriptanother_script

<%= $y %>submitsubmit

WebWebServiceService

• A service A service == a collection of a collection of scripts/pages!scripts/pages!

• Implicit control-flow:Implicit control-flow:

•No interaction correspondenceNo interaction correspondence::

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

SessionSession-Centered:-Centered:Mawl and Mawl and <<bigwigbigwig>>!!

e

CLIENT INTERNET SERVERCLIENT INTERNET SERVER

e

e

Web ServiceWeb Service

showshow x; x;

showshow y; y;

xx

yy

submitsubmit

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

SessionSession-Centered:-Centered:Mawl and Mawl and <<bigwigbigwig>>!!

e

e

Web ServiceWeb Service

showshow x; x;

showshow y; y;

xx

submitsubmit

• Domain specific abstration: Domain specific abstration: showshow

• Explicit control-flowExplicit control-flow

• Check interaction correspondenceCheck interaction correspondence

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

e

e

e

General Purpose General Purpose ManuallyManually

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

WebWebServiceService

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

e

e

e

savesave

General Purpose General Purpose ManuallyManually

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

WebWebServiceService

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

e

e

e

savesave

restorerestore

General Purpose General Purpose ManuallyManually

CLIENCLIENTT INTERNET SERVER INTERNET SERVER

WebWebServiceService

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

General Purpose General Purpose ManuallyManually

• Private (to each session thread):Private (to each session thread):ServletContext context = getServletContext();int p ((Integer) context.getAttribute("p")).intValue();p++;context.setAttribute("p", new Integer(var));

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

General Purpose General Purpose ManuallyManually

• Private (to each session thread):Private (to each session thread):

• Shared (among all session threads):Shared (among all session threads):HttpSession session = request.getSession(true);int s ((Integer) session.getValue("s")).intValue();s++;session.setValue("s", new Integer(var));

ServletContext context = getServletContext();int p ((Integer) context.getAttribute("p")).intValue();p++;context.setAttribute("p", new Integer(var));

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific: Domain Specific: sharedshared modifiermodifier

• Private (to each session thread):Private (to each session thread):int p;

...p++;...

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific: Domain Specific: sharedshared modifiermodifier

• Private (to each session thread):Private (to each session thread):

• Shared (among all session threads):Shared (among all session threads):shared int s;

...s++;...

int p;

...p++;...

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific AutomaticallyAutomatically

e

CLIENT INTERNET SERVERCLIENT INTERNET SERVER

e

e

Web ServiceWeb Service

[ save ][ save ][ restore ][ restore ]

showshow x; x;

showshow y; y;

xx

yy

submitsubmit

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Dynamically Generated Dynamically Generated XMXML:L:Current ProblemsCurrent Problems

• Traditionally:Traditionally:• print(...)print(...) in Perl/CGI, ...in Perl/CGI, ...• <% print(...) %><% print(...) %> in PHP, ASP, JSP, ...in PHP, ASP, JSP, ...

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Our Solution:Our Solution:HTML documents in HTML documents in <<bigwigbigwig>>• Templates (1Templates (1stst class, class, higherhigher--orderorder

valuesvalues):):•XML fragments with XML fragments with named gapsnamed gaps::

• OperationsOperations::•plug:plug: for document constructionfor document construction

•show:show: for client interactionfor client interaction

[[[[ Hello Hello <[<[whatwhat]>]>!!]]]]

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

PlugPlug

• Plug:Plug: expexp <[<[ idid == expexp ]]

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

PlugPlug

• Plug:Plug: expexp <[<[ idid == expexp ]]

• Example:Example:htmlhtml hello = hello = [[ Hello [[ Hello <[<[whatwhat]>]>! ]]! ]];;htmlhtml world = world = [[ <b>World</b> ]][[ <b>World</b> ]];;

htmlhtml h = hello <[ h = hello <[whatwhat = world]; = world];...;...;

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

ShowShow

• Show:Show: showshow expexp ;;

xx

CLIENT CLIENT INTERNET INTERNET SERVER SERVER

eshowshow xx;;

submitsubmitsuspendsuspendresumeresume

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

ShowShow

• Show:Show: showshow expexp ;;

• Example:Example:

xx

CLIENT CLIENT INTERNET INTERNET SERVER SERVER

eshowshow xx;;

submitsubmitsuspendsuspendresumeresume

htmlhtml hello = hello = [[ Hello [[ Hello <[<[whatwhat]>]>! ]]! ]];;htmlhtml world = world = [[ <b>World</b> ]][[ <b>World</b> ]];;

htmlhtml hh = hello <[ = hello <[whatwhat = world]; = world];showshow h h;;

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Show-ReceiveShow-Receive

• SShowhow:: showshow expexp receivereceive[[vv

==ff, ..., ...];]; xx

CLIENT CLIENT INTERNET INTERNET SERVER SERVER

e

ff, ..., ...submitsubmitshowshow x x receivereceive[v=f,..][v=f,..];;

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Show-ReceiveShow-Receive

• SShowhow:: showshow expexp receivereceive[[vv

==ff, ..., ...];];

• Example:Example:stringstring s; s;htmlhtml inputinput = = [[[[ Enter email: Enter email: <input type=”text” name=”<input type=”text” name=”emailemail”>”>]]]];;

showshow input input receivereceive[s = [s = emailemail];];

xx

CLIENT CLIENT INTERNET INTERNET SERVER SERVER

eshowshow x x receivereceive[v=f,..][v=f,..];;

ff, ..., ...submitsubmit

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Example: ”Welcome”Example: ”Welcome”

htmlhtml greeting = greeting = [[[[ Hello Hello <[<[whowho]>]>, welcome to , welcome to <[<[whatwhat]>]>..]]]];;

htmlhtml cover = cover = [[[[ <head><title>Welcome</title></head><head><title>Welcome</title></head> <body><body><[<[contentscontents]>]></body></body>]]]];;

htmlhtml h; h;h = greeting <[h = greeting <[whowho = = ”Stranger””Stranger”];];h = h <[h = h <[whatwhat = = [[ <b>GPCE</b> ]][[ <b>GPCE</b> ]]];];showshow cover <[ cover <[contentscontents = h]; = h];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Flexibility: PHP/ASP/JSPFlexibility: PHP/ASP/JSP

• List of results (e.g. “List of results (e.g. “search enginesearch engine”)”)::•One template with 10,20,30, One template with 10,20,30,

or 40 or 40 hardwiredhardwired server-sideserver-sidescript elements: script elements:

•One template with one big One template with one big ””generate-allgenerate-all”” server-side server-side script element:script element:

script-centeredscript-centered

<% ..1.. %><% ..1.. %>

...or......or...

<% ..2.. %><% ..2.. %>

<% ..20.. %><% ..20.. %> :

<% <% for for i=1 to N doi=1 to N do { ..i.. } { ..i.. } %>%>

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Flexibility:Flexibility: <<bigwigbigwig>>

• List of results (e.g. “List of results (e.g. “search enginesearch engine”)”)::

<ul> <li>1 <li>2 : <li>N</ul>

<ul> <li>1 <li>2 : <li>N</ul>

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Flexibility:Flexibility: <<bigwigbigwig>>

• List of results (e.g. “List of results (e.g. “search enginesearch engine”)”)::•Two templates: “Two templates: “layoutlayout” and “” and “entryentry”...”...

<ul> <li>1 <li>2 : <li>N</ul>

<ul> <li>1 <li>2 : <li>N</ul>

htmlhtml layoutlayout = = [[ <ul>[[ <ul><[<[itemsitems]>]></ul> ]]</ul> ]];;htmlhtml entry = entry = [[ <li>[[ <li><[<[numnum]><[]><[itemsitems]>]> ]] ]];;

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Flexibility:Flexibility: <<bigwigbigwig>>

• List of results (e.g. “List of results (e.g. “search enginesearch engine”)”)::•Two templates: “Two templates: “layoutlayout” and “” and “entryentry”...”...

•...and o...and one recursive function: ne recursive function: ““ff””htmlhtml f( f(intint n) { n) { ifif (n (n === 0) = 0) returnreturn layoutlayout;; returnreturn f(n-1) <[ f(n-1) <[itemitemss = entry <[ = entry <[numnum = n]]; = n]];}}

htmlhtml layoutlayout = = [[ <ul>[[ <ul><[<[itemsitems]>]></ul> ]]</ul> ]];;htmlhtml entry = entry = [[ <li>[[ <li><[<[numnum]><[]><[itemsitems]>]> ]] ]];;

<ul> <li>1 <li>2 : <li>N</ul>

<ul> <li>1 <li>2 : <li>N</ul>

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Flexibility:Flexibility: <<bigwigbigwig>>

• List of results (e.g. “List of results (e.g. “search enginesearch engine”)”)::•Two templates: “Two templates: “layoutlayout” and “” and “entryentry”...”...

•...and o...and one recursive function: ne recursive function: ““ff””

•Example usage:Example usage:

htmlhtml f( f(intint n) { n) { ifif (n (n === 0) = 0) returnreturn layoutlayout;; returnreturn f(n-1) <[ f(n-1) <[itemitemss = entry <[ = entry <[numnum = n]]; = n]];}}

<ul> <li>1 <li>2 : <li>27</ul>

<ul> <li>1 <li>2 : <li>27</ul>

htmlhtml layoutlayout = = [[ <ul>[[ <ul><[<[itemsitems]>]></ul> ]]</ul> ]];;htmlhtml entry = entry = [[ <li>[[ <li><[<[numnum]><[]><[itemsitems]>]> ]] ]];;

showshow f(27);f(27);

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

htmlhtml f( f(intint n) { n) { ifif (n (n === 0) = 0) returnreturn layoutlayout;; returnreturn f(n-1) <[ f(n-1) <[itemitemss = entry <[ = entry <[numnum = n]]; = n]];}}

htmlhtml layoutlayout = = [[ <ul>[[ <ul><[<[itemsitems]>]></ul> ]]</ul> ]];;htmlhtml entry = entry = [[ <li>[[ <li><[<[numnum]><[]><[itemsitems]>]> ]] ]];;

Flexibility: Separates Flexibility: Separates Designer / Programmer Designer / Programmer AspectsAspects

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

htmlhtml f( f(intint n) { n) { ifif (n (n === 0) = 0) returnreturn layoutlayout;; returnreturn f(n-1) <[ f(n-1) <[itemitemss = entry <[ = entry <[numnum = n]]; = n]];}}

htmlhtml layoutlayout = = [[ <table>[[ <table><[<[itemsitems]>]></table> ]]</table> ]];;htmlhtml entry = entry = [[[[ <tr><td><tr><td><[<[numnum]>]></td></tr></td></tr> <[<[itemsitems]>]>]]]];;

htmlhtml layoutlayout = = [[ <ul>[[ <ul><[<[itemsitems]>]></ul> ]]</ul> ]];;htmlhtml entry = entry = [[ <li>[[ <li><[<[numnum]><[]><[itemsitems]>]> ]] ]];;

Flexibility: Separates Flexibility: Separates Designer / Programmer Designer / Programmer AspectsAspects

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

<input name=”x”>

a_scripta_script another_scriptanother_script

<%= $y %>submitsubmit

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Type SafetyType Safety(in terms of (in terms of <<bigwigbigwig>>))

• Show/Receive correspondenceShow/Receive correspondence::

• Gap presenGap presencece::

htmlhtml dd = = [[[[ Enter email: Enter email: <<input type=“text” name=“input type=“text” name=“emailemail”>”>]]]];;

showshow d d receivereceive[s = [s = ageage];];

htmlhtml hellohello = = [[ [[ Hello Hello <[<[whatwhat]>]>!! ]] ]];;htmlhtml world = world = [[ <b>World</b> ]][[ <b>World</b> ]];;htmlhtml h; h;

h = hello <[h = hello <[contentscontents = world]; = world];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Static Analysis!Static Analysis!

Apply standard, Apply standard, data-flow analysisdata-flow analysis techniques, techniques,but with highly but with highly domain-specific latticesdomain-specific lattices

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Static Analysis!Static Analysis!

• Conservatively approximateConservatively approximatefor all HTML variables & program for all HTML variables & program points:points:

• Their Their gaps and fields (and their kinds)gaps and fields (and their kinds) all possible runtime values all possible runtime values

• Forward data-flow analysis:Forward data-flow analysis:1.1. Control-flow graph (trivial for Control-flow graph (trivial for <<bigwigbigwig>>))

2.2. Finite lattice: Finite lattice: Gap-and-FieldGap-and-Field

3.3. Monotone transfer functions: plug, assign, ...Monotone transfer functions: plug, assign, ...

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Gap-and-Field LatticeGap-and-Field LatticeGKindGKind

nogap

string

html

error

FKindFKind

error

text

nofield

checkboxradio

tup(F1)

rel(F1) rel(Fn)

tup(Fn)

..

..

• An An abstract documentabstract document is: is:

((GNameGName GKindGKind) x () x (FNameFName FKindFKind))

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer Monotone Transfer FunctionsFunctions

• Plug:Plug: xx11 <[ <[gg = = xx22]]

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer Monotone Transfer FunctionsFunctions

• Plug:Plug: xx11 <[ <[gg = = xx22]]

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa nogapnogap

gg nogapnogap

nn htmlhtml

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer Monotone Transfer FunctionsFunctions

• Plug:Plug: xx11 <[ <[gg = = xx22]]

<[g = ]

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa nogapnogap

gg nogapnogap

nn htmlhtml

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa

gg

nn

GG : : GKindGKind x x GKindGKind GKindGKind

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer Monotone Transfer FunctionsFunctions

• Plug:Plug: xx11 <[ <[gg = = xx22]]

<[g = ]

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa nogapnogap

gg nogapnogap

nn htmlhtml

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg

nn

GG : : GKindGKind x x GKindGKind GKindGKind

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer Monotone Transfer FunctionsFunctions

• Plug:Plug: xx11 <[ <[gg = = xx22]]

<[g = ]

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa nogapnogap

gg nogapnogap

nn htmlhtml

GNameGName GKindGKind

aa htmlhtml

gg nogapnogap

nn

GG : : GKindGKind x x GKindGKind GKindGKind

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer Monotone Transfer FunctionsFunctions

• Plug:Plug: xx11 <[ <[gg = = xx22]]

<[g = ]

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa nogapnogap

gg nogapnogap

nn htmlhtml

GNameGName GKindGKind

aa htmlhtml

gg nogapnogap

nn htmlhtml

GG : : GKindGKind x x GKindGKind GKindGKind

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer Monotone Transfer FunctionsFunctions

• Plug:Plug: xx11 <[ <[gg = = xx22]]

<[g = ]

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa nogapnogap

gg nogapnogap

nn htmlhtml

GNameGName GKindGKind

aa htmlhtml

gg nogapnogap

nn htmlhtml

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Then: Check SolutionThen: Check Solution

• Traverse solution: intercept Traverse solution: intercept errorerrorss

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Then: Check SolutionThen: Check Solution

• Traverse solution: intercept Traverse solution: intercept errorerrorss

gap presentgap present

EE11 <[ <[gg = E = E22]]FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Then: Check SolutionThen: Check Solution

• Traverse solution: intercept Traverse solution: intercept errorerrorss

gap presentgap present

field presentfield present

type check:type check: v ~ v ~ texttext

EE11 <[ <[gg = E = E22]]

showshow E E receivereceive[v=[v=ff, , ......];];

FNameFName FKindFKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

GNameGName GKindGKind

aa htmlhtml

gg htmlhtml

nn nogapnogap

FNameFName FKindFKind

ee radioradio

ff texttext

tt texttext

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Type SafetyType Safety??

• Show/Receive interaction Show/Receive interaction correspondencecorrespondence::

• Gap presenGap presencece::

htmlhtml dd = = [[[[ Enter email: Enter email: <<input type=“text” name=“input type=“text” name=“emailemail”>”>]]]];;

showshow d d receivereceive[s = [s = ageage];];

htmlhtml hellohello = = [[ [[ Hello Hello <[<[whatwhat]>]>!! ]] ]];;htmlhtml world = world = [[ <b>World</b> ]][[ <b>World</b> ]];;htmlhtml h; h;

h = hello <[h = hello <[contentscontents = world]; = world];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Type SafetyType Safety!!

• Show/Receive interaction Show/Receive interaction correspondencecorrespondence::

• Gap presenGap presencece::

htmlhtml dd = = [[[[ Enter email: Enter email: <<input type=“text” name=“input type=“text” name=“emailemail”>”>]]]];;

showshow d d receivereceive[s = [s = ageage];];

htmlhtml hellohello = = [[ [[ Hello Hello <[<[whatwhat]>]>!! ]] ]];;htmlhtml world = world = [[ <b>World</b> ]][[ <b>World</b> ]];;htmlhtml h; h;

h = hello <[h = hello <[contentscontents = world]; = world];

*** receive.wig:5: input field ‘email’ not received no such input field ‘age’

*** receive.wig:5: input field ‘email’ not received no such input field ‘age’

*** plug.wig:5: no such gap ‘contents’*** plug.wig:5: no such gap ‘contents’

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectaspectss•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Example: ”Welcome”Example: ”Welcome”

htmlhtml greeting = greeting = [[[[ Hello Hello <[<[whowho]>]>, welcome to , welcome to <[<[whatwhat]>]>..]]]];;

htmlhtml cover = cover = [[[[ <head><title>Welcome</title></head><head><title>Welcome</title></head> <body><body><[<[contentscontents]>]></body></body>]]]];;

htmlhtml h; h;h = greeting <[h = greeting <[whowho = = ”Stranger””Stranger”];];h = h <[h = h <[whatwhat = = [[ <b>GPCE</b> ]][[ <b>GPCE</b> ]]];];showshow cover <[ cover <[contentscontents = h]; = h];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Example: ”Welcome”Example: ”Welcome”

htmlhtml greeting = greeting = [[[[ Hello Hello <[<[whowho]>]>, welcome to , welcome to <[<[whatwhat]>]>..]]]];;

htmlhtml cover = cover = [[[[ <head><title>Welcome</title></head><head><title>Welcome</title></head> <body><body><[<[contentscontents]>]></body></body>]]]];;

htmlhtml h; h;h = greeting <[h = greeting <[whowho = = ”Stranger””Stranger”];];h = h <[h = h <[whatwhat = = [[ <b>GPCE</b> ]][[ <b>GPCE</b> ]]];];showshow cover <[ cover <[contentscontents = h]; = h];

Valid HTML !?Valid HTML !?

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Static AnalysisStatic Analysis (again)! (again)!

• Conservatively approximateConservatively approximatefor allfor all HTML variables & program points HTML variables & program points::

• A A summary graphsummary graph all possible runtime values all possible runtime values

• Forward data-flow analysis:Forward data-flow analysis:1.1. Control-flow graph: (Control-flow graph: (trivial for trivial for <<bigwigbigwig>>))

2.2. Finite lattice: Finite lattice: summary graphssummary graphs

3.3. Monotone transfer functions: plug, assign, ...Monotone transfer functions: plug, assign, ...

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Summary GraphSummary Graph

htmlhtml greeting = greeting = ...;...;

htmlhtml cover = ...; cover = ...;

htmlhtml h; h;h = greeting <[h = greeting <[whowho = = ”Stranger””Stranger”];];h = h <[h = h <[whatwhat = = [[ <b>GPCE</b> ]][[ <b>GPCE</b> ]]];];showshow cover <[ cover <[contentscontents = h]; = h];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Summary GraphSummary Graph

””Stranger”Stranger”greetinggreeting

whowho

htmlhtml greeting = greeting = ...;...;

htmlhtml cover = ...; cover = ...;

htmlhtml h; h;h = greeting <[h = greeting <[whowho = = ”Stranger””Stranger”];];h = h <[h = h <[whatwhat = = [[ <b>GPCE</b> ]][[ <b>GPCE</b> ]]];];showshow cover <[ cover <[contentscontents = h]; = h];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Summary GraphSummary Graph

””Stranger”Stranger”greetinggreeting

gpcegpce

whowho

whatwhat

htmlhtml greeting = greeting = ...;...;

htmlhtml cover = ...; cover = ...;

htmlhtml h; h;h = greeting <[h = greeting <[whowho = = ”Stranger””Stranger”];];h = h <[h = h <[whatwhat = = [[ <b>GPCE</b> ]][[ <b>GPCE</b> ]]];];showshow cover <[ cover <[contentscontents = h]; = h];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Summary GraphSummary Graph

””Stranger”Stranger”

covercover

greetinggreeting

gpcegpce

contentscontents whowho

whatwhat

htmlhtml greeting = greeting = ...;...;

htmlhtml cover = ...; cover = ...;

htmlhtml h; h;h = greeting <[h = greeting <[whowho = = ”Stranger””Stranger”];];h = h <[h = h <[whatwhat = = [[ <b>GPCE</b> ]][[ <b>GPCE</b> ]]];];showshow cover <[ cover <[contentscontents = h]; = h];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer FunctionMonotone Transfer Function

• Plug:Plug: xx11 <[ <[gg = = xx22]]

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer FunctionMonotone Transfer Function

• Plug:Plug:

gg

gg

gggg

xx11 <[ <[gg = = xx22]]

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer FunctionMonotone Transfer Function

• Plug:Plug:

<[<[gg = ]= ]

xx11 <[ <[gg = = xx22]]

gg

gg

gggg

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer FunctionMonotone Transfer Function

• Plug:Plug:

<[<[gg = ]= ]

xx11 <[ <[gg = = xx22]]

gg

gg

gggg

gg

gg

gggg

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer FunctionMonotone Transfer Function

• Plug:Plug:

<[<[gg = ]= ]

xx11 <[ <[gg = = xx22]]

gg

gg

gggg

gg

gg

gggg

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer FunctionMonotone Transfer Function

• Plug:Plug:

<[<[gg = ]= ]

xx11 <[ <[gg = = xx22]]

gg

gg

gggg

gg

gg

gggg

However, too imprecise...!However, too imprecise...!

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer FunctionMonotone Transfer Function

<[<[gg = ]= ]

• Plug:Plug:

open gapsopen gaps

xx11 <[ <[gg = = xx22]]

gg

gg

gggg

gg

gg

gggg

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Monotone Transfer FunctionMonotone Transfer Function

• Plug:Plug: xx11 <[ <[gg = = xx22]]

<[<[gg = ]= ]

open gapsopen gaps

gg

gg

gggg

gg

gg

gggg

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

GapTrack AnalysisGapTrack Analysis

• GapTrack data-flow analysis:GapTrack data-flow analysis:– program points compute:program points compute:

•““Tracks the origins (templates) of open Tracks the origins (templates) of open gaps”gaps”

((gg )) ’’

: : GNameGName 22TEMPLATESTEMPLATES

<[<[gg = ]= ]

gg

gg

gggg

gg

gg

gggg

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

...;...;h = greeting <[h = greeting <[who who = = ”Stranger””Stranger”];];h = h <[h = h <[what what = = [[ <b>GPCE</b> ]][[ <b>GPCE</b> ]]];];showshow cover <[ cover <[contentscontents = h]; = h];

• Now: Now: summary graphsummary graph show show statementsstatements

•Then what...?Then what...?

Validation?Validation?

””Stranger”Stranger”

covercover

greetinggreeting

bricsbrics

contentscontents whowho

whatwhat

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Validation?Validation?

a set of a set of hopefulhopeful

XML docs XML docs

a set of a set of hopefulhopeful

XML docs XML docs

A A summary graphsummary graphdescribes:describes:

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Validation?Validation?

a set of a set of hopefulhopeful

XML docs XML docs

a set of a set of hopefulhopeful

XML docs XML docs

a set of a set of validvalid

XML docs XML docs

a set of a set of validvalid

XML docs XML docs

A A summary graphsummary graphdescribes:describes:

A DTD describesA DTD describes(e.g. XHTML 1.0):(e.g. XHTML 1.0):

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Validation!Validation!

a set of a set of hopefulhopeful

XML docs XML docs

a set of a set of hopefulhopeful

XML docs XML docs

a set of a set of validvalid

XML docs XML docs

a set of a set of validvalid

XML docs XML docs

validation!validation!

A A summary graphsummary graphdescribes:describes:

A DTD describesA DTD describes(e.g. XHTML 1.0):(e.g. XHTML 1.0):

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Validation!Validation!

a set of a set of hopefulhopeful

XML docs XML docs

a set of a set of hopefulhopeful

XML docs XML docs

a set of a set of validvalid

XML docs XML docs

a set of a set of validvalid

XML docs XML docs

validationvalidation!

• Decidable!:• Summary graph traversal (parsing vs. DTD)• Memoization termination• Sound and complete!

• Decidable!:• Summary graph traversal (parsing vs. DTD)• Memoization termination• Sound and complete!

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Compiler Compiler VValalidation Recipeidation Recipe

• Step-by-Step:Step-by-Step:1. 1. Extract control-flow graphExtract control-flow graph2. 2. Gap-and-FieldGap-and-Field data-flow analysisdata-flow analysis3. 3. GapGapTrackTrack data-flow analysisdata-flow analysis4. 4. Summary GraphSummary Graph data-flow data-flow analysisanalysis55. . ValidationValidation ((shows)shows) graphgraph analysi analysiss

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Experiments Experiments 800MHz Pentium III / Linux800MHz Pentium III / Linux

Program # Lines # Templates

Time (sec.)

chat 65 3 0.1guess 75 6 0.1calendar 77 5 0.1xbiff 561 18 0.1webboard 1132 37 0.6cdshop 1709 36 0.5jaoo 1941 73 2.4bachelor 2535 137 8.2courses 4465 57 1.3eatcs 5345 133 6.7

Many validation errors found, Many validation errors found, no spurious errorsno spurious errors

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

ExampleExample Revisited Revisited

html greeting = [[ Hello <[who]>, welcome to <[what]>.]];

html cover = [[ <head><title>Welcome</title></head> <body><[contents]></body>]];

html h;h = greeting <[who = ”Stranger”];h = h <[what = [[ <b>GPCE</b> ]]];show cover <[contents = h];

html greeting = [[ Hello <[who]>, welcome to <[what]>.]];

html cover = [[ <head><title>Welcome</title></head> <body><[contents]></body>]];

html h;h = greeting <[who = ”Stranger”];h = h <[what = [[ <b>GPCE</b> ]]];show cover <[contents = h];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Planting an ErrorPlanting an Error

html greeting = [[ <td>Hello <[who]>, welcome to <[what]>.</td>]];

html cover = [[ <head><title>Welcome</title></head> <body><table><[contents]></table></body>]];

html h;h = greeting <[who = ”Stranger”];h = h <[what = [[ <b>GPCE</b> ]]];show cover <[contents = h];

html greeting = [[ <td>Hello <[who]>, welcome to <[what]>.</td>]];

html cover = [[ <head><title>Welcome</title></head> <body><table><[contents]></table></body>]];

html h;h = greeting <[who = ”Stranger”];h = h <[what = [[ <b>GPCE</b> ]]];show cover <[contents = h];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

ExampleExample Revisited Revisited--- welcome.wig:13 HTML Validation:welcome.wig:7 warning: possible illegal subelement ‘td’ of ‘table’ template: <table><[contents]></table> contents: td plugs: contents:{welcome.wig:13}

--- welcome.wig:13 HTML Validation:welcome.wig:7 warning: possible illegal subelement ‘td’ of ‘table’ template: <table><[contents]></table> contents: td plugs: contents:{welcome.wig:13}

112233445566778899

1010111112121313

html greeting = [[ <td>Hello <[who]>, welcome to <[what]>.</td>]];

html cover = [[ <head><title>Welcome</title></head> <body><table><[contents]></table></body>]];

html h;h = greeting <[who = ”Stranger”];h = h <[what = [[ <b>GPCE</b> ]]];show cover <[contents = h];

html greeting = [[ <td>Hello <[who]>, welcome to <[what]>.</td>]];

html cover = [[ <head><title>Welcome</title></head> <body><table><[contents]></table></body>]];

html h;h = greeting <[who = ”Stranger”];h = h <[what = [[ <b>GPCE</b> ]]];show cover <[contents = h];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific RepresentationRepresentation

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific RepresentationRepresentation

• Constant:Constant:• O O (1)(1)

• Plug:Plug:• O O (1)(1)

• Show:Show:• OO (|d|) (|d|)

[[ hello <[what]>! ]]

x <[g = y]

show d;

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific RepresentationRepresentation

document structure

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific RepresentationRepresentation

document structure

string

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific RepresentationRepresentation

document structure

string templates

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific RepresentationRepresentation

dynamic

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific RepresentationRepresentation

static

dynamic

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific RepresentationRepresentation

static

dynamic“Transmit JavaScript recipe for client-side doc. reconstruction”

“Transmit JavaScript recipe for client-side doc. reconstruction”

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Domain Specific RepresentationRepresentation

static

dynamic“Transmit JavaScript recipe for client-side doc. reconstruction”

“Transmit JavaScript recipe for client-side doc. reconstruction”

“Write each template to a separate file so that it can be cached”

“Write each template to a separate file so that it can be cached”

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

ExperimentsExperiments

• Size of HTML:Size of HTML: original HTML

JavaScript reconstruction

...all templates cached

Cut to 2.6% – 25% sizeCut to 2.6% – 25% size

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Experiments Experiments (700MHz, 28.8 Modem)(700MHz, 28.8 Modem)

• TimeTime (download+render):(download+render): original HTML

...all templates cached

2.2x – 10x faster2.2x – 10x faster

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Problems?Problems?

• ““DynDoc”:DynDoc”:•Templates with Templates with named gapsnamed gaps•Plug and showPlug and show

• ProblemsProblems::•ForcesForces linear linear document document constructionconstruction• Intermixes pIntermixes programmerrogrammer // d designer esigner aspectsaspects•No interaction cNo interaction correspondenceorrespondence•No static XML validationNo static XML validation•No common fragments cachingNo common fragments caching

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Example: ”EnterEmail”Example: ”EnterEmail”

htmlhtml input = input = [[[[ Please enter your email:<br>Please enter your email:<br> <input type=”text” name=”<input type=”text” name=”emailemail”>”>]]]];;

htmlhtml output = output = [[ Your email is: [[ Your email is: <[<[emailemail]>]> ]] ]];;

stringstring s; s; showshow input input receivereceive[s = [s = emailemail];];showshow output <[ output <[emailemail = s];= s];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Example: ”EnterEmail”Example: ”EnterEmail”

formatformat EmailEmail = = regexpregexp(”<(”<wordword>@<>@<wordword>(>(\\.<.<wordword>)+”);>)+”);

htmlhtml input = input = [[[[ Please enter your email:<br>Please enter your email:<br> <input type=”text” name=”<input type=”text” name=”emailemail”>”>]]]];;

htmlhtml output = output = [[ Your email is: [[ Your email is: <[<[emailemail]>]> ]] ]];;

stringstring s; s; showshow input input receivereceive[s = [s = emailemail];];showshow output <[ output <[emailemail = s];= s];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Example: ”EnterEmail”Example: ”EnterEmail”

formatformat EmailEmail = = regexpregexp(”<(”<wordword>@<>@<wordword>(>(\\.<.<wordword>)+”);>)+”);

htmlhtml input = input = [[[[ Please enter your email:<br>Please enter your email:<br> <input type=”text” name=”<input type=”text” name=”emailemail” ” format=”format=”EmailEmail””>>]]]];;

htmlhtml output = output = [[ Your email is: [[ Your email is: <[<[emailemail]>]> ]] ]];;

stringstring s; s; showshow input input receivereceive[s = [s = emailemail];];showshow output <[ output <[emailemail = s];= s];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Example: ”EnterEmail”Example: ”EnterEmail”

formatformat EmailEmail = = regexpregexp(”<(”<wordword>@<>@<wordword>(>(\\.<.<wordword>)+”);>)+”);

htmlhtml input = input = [[[[ Please enter your email:<br>Please enter your email:<br> <input type=”text” name=”<input type=”text” name=”emailemail” ” format=”format=”EmailEmail””>>]]]];;

htmlhtml output = output = [[ Your email is: [[ Your email is: <[<[emailemail]>]> ]] ]];;

stringstring s; s;show input input receivereceive[s = [s = emailemail];];showshow output <[ output <[emailemail = s];= s];

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Form Field Validation: Form Field Validation: ““PowerForms”PowerForms”• Domain specific languageDomain specific language::

•uniquely for uniquely for form-fieldform-field validation validation

• Declarative Declarative specification (regexps)specification (regexps)::•AAbstracts away operational detailsbstracts away operational details

• PowerForms also available as PowerForms also available as stand-alone toolstand-alone tool

PowerFormsPowerFormsPowerFormsPowerFormsHTMLHTML

JavaScript

(subset)

JavaScript

(subset)

HTMLHTML

RegexpsRegexps

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Form-Form-Field InterdependencyField Interdependency

• ““Favorite LetterFavorite Letter””•Select filteringSelect filtering

• ““NYC OfficeNYC Office””•Complex interdependencyComplex interdependency

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

OutlineOutline

• Introduction (Program Family)Introduction (Program Family)

• Session ManagementSession Management•State ManagementState Management

• Document ConstructionDocument Construction•Domain Specific VerificationsDomain Specific Verifications

•Domain Specific OptimizationDomain Specific Optimization

• Form-Field ValidationForm-Field Validation

• ConclusionConclusion

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Language Domain Specific Language Design and Analyses:Design and Analyses:

• Yield:Yield:Flexible, Safe, and EfficientFlexible, Safe, and EfficientDynamic Generation of XMLDynamic Generation of XML

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Domain Specific Language Domain Specific Language Design and Analyses:Design and Analyses:

• Yield:Yield:

• AND:AND:•Non-linear Non-linear document document constructionconstruction

•SeparatesSeparates p programmerrogrammer // d designer esigner aspectsaspects

•Guaranteed Guaranteed interaction cinteraction correspondenceorrespondence

•SStatic XML validationtatic XML validation

•CCommon fragments cachingommon fragments caching

Flexible, Safe, and EfficientFlexible, Safe, and EfficientDynamic Generation of XMLDynamic Generation of XML

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Objective AssessmentsObjective Assessments

• Robustness:Robustness:•Session integritySession integrity

•State integrityState integrity

• Interaction correspondenceInteraction correspondence

•XML validityXML validity

• PerformancePerformance•Well...Well...

• ConcisenessConciseness•1/5 code (compared to Java Servlets)1/5 code (compared to Java Servlets)

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

public class SessionServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = getServletContext(); HttpSession session = request.getSession(true); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><HEAD><TITLE>Servlet Demo</TITLE></HEAD><BODY>"); if (session.isNew()) { out.println("<FORM ACTION=SessionServlet>" + "Enter your name: <INPUT NAME=handle>" + "<INPUT TYPE=SUBMIT></FORM>"); session.putValue("state", "1"); } else { String state = (String) session.getValue("state"); if (state.equals("1")) { String name = (String) request.getParameter("handle"); int users = ((Integer) context.getAttribute("users")).intValue() + 1; context.setAttribute("users", new Integer(users)); session.putValue("name", name); out.println("Hello " + name + ", you are user number " + users); session.putValue("state", "2"); } else /* state.equals("2") */ { String name = (String) session.getValue("name"); out.println("Goodbye " + name); session.invalidate(); } } out.println("</BODY></HTML>"); }}

session management state management document construction

Conciseness (Servlets)Conciseness (Servlets)

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Conciseness (Conciseness (<<bigwigbigwig>>))service { shared int users = 0;

session Hello() { string name; show [[Enter your name: <input name=handle>]] receive[name=handle]; users++; show [[Hello <[who]>, you are user number <[count]>]] <[who=name,count=users]; show [[Goodbye <[who]>]] <[who=name]; }}

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

0

100

200

300

400

Servlets <bigwig>

Conciseness (Conciseness (<<bigwigbigwig>>))service { shared int users = 0;

session Hello() { string name; show [[Enter your name: <input name=handle>]] receive[name=handle]; users++; show [[Hello <[who]>, you are user number <[count]>]] <[who=name,count=users]; show [[Goodbye <[who]>]] <[who=name]; }}

session management state management document construction misc.

Overall: 1/5 code

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

The The <<bigwigbigwig>> Compiler Compiler

• Version 2.0:Version 2.0:• Implemented in CImplemented in C (f (for or UNIXUNIX // Linux)Linux)

•Complete source code availableComplete source code available– Approximately 2.5 MB sourceApproximately 2.5 MB source

• LicenLicenssee:: GPL (GPL (Gnu Public LicenGnu Public Licenssee))

<<bigwigbigwig>><<bigwigbigwig>>

HTMLHTML

CGI ScriptsCGI Scripts

JavaScriptJavaScript

HTTP Auth.HTTP Auth.

Java AppletsJava Applets

CompleteService

Specification

CompleteService

Specification

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

• Homepage:Homepage:– IntroductionIntroduction– ExamplesExamples– Ref. manualRef. manual– TutorialsTutorials– PapersPapers– PresentationsPresentations– Downloads:Downloads:

•src / binsrc / bin

– 2 Recorded Presentations (MS & IBM 2 Recorded Presentations (MS & IBM Research)Research)

http://www.brics.dk/bigwig/http://www.brics.dk/bigwig/

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

<<bigwigbigwig>> Publications Publications

• Concurrency ControlConcurrency Control ETAPS/FASE,ETAPS/FASE, 19981998• Runtime SystemRuntime System Computer Networks J.Computer Networks J., , 19991999• Dynamic DocumentsDynamic Documents POPL, POPL, 20002000• Form-Field ValidationForm-Field Validation WWW Journal, WWW Journal, 20002000• HTML ValidationHTML Validation PASTE, PASTE, 20012001• The The <<bigwigbigwig>> Project Project TOIT Journal,TOIT Journal, 20022002• Syntax MacrosSyntax Macros PEPM, PEPM, 20022002• Document CachingDocument Caching WWW Journal, WWW Journal, 20022002

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

<<bigwigbigwig>> JWIG (Java) JWIG (Java)

http://www.brics.dk/JWIG/

GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003

Thank you!Thank you!