Composition of XML Dialects
A ModelicaXML case study
Adrian Pop, Ilie S avga, Uwe Aßmann, Peter Fritzson Programming Environments Laboratory Linköping University
Composition of XML Dialects A ModelicaXML case study Adrian Pop, - - PowerPoint PPT Presentation
Composition of XML Dialects A ModelicaXML case study Adrian Pop, Ilie S avga, Uwe Amann, Peter Fritzson Programming Environments Laboratory Linkping University Outline Introduction Modelica ModelicaXML Compost
Adrian Pop, Ilie S avga, Uwe Aßmann, Peter Fritzson Programming Environments Laboratory Linköping University
2
April 03, 2004
3
April 03, 2004
4
April 03, 2004
5
April 03, 2004
planetary1=110/50 C4=0.12 C5=0.12 planetary2=110/50 C 6 = . 1 2 bearing2 C 8 = . 1 2 d e m u l t i p l e x shaftS=2e-3 S planetary3=120/44 C11=0.12 shaftS1=2e-3 S C 1 2 = . 1 2 bearing1 bearing4
6
April 03, 2004
class Test "comment" Real x; Real xdot; equation xdot = der(x); end Test; <modelicaxml> <definition ident= "Test" comment="comment"> <component ident="x" type="Real" visibility="public" /> <component ident="xdot" type="Real" visibility="public" /> <equation>...</equation> </definition> </modelicaxml> modelicaxml definition component component equation
7
April 03, 2004
Java Fragment Box XML Fragment Box Fragment Boxes Run Time Boxes Components (Boxes) (Core) UNICOMP Components .... Transformation Engine Layer Abstract Composition Layer Interface layer Language specific Composition Layer Time specific Composition Layer Lazy Runtime Component UNICOMP Abstract Semantics Time specific rules Java Fragment Values X-HTML Fragment Values Runtime Objects Java Semantics ModelicaXML X-HTML rules Modelica Semantics Runtime rules SVG XMI etc. XML Dialects 5 4 3 2 1
8
April 03, 2004
Modelica Code ModelicaXML Modelica Parser Modelica UnParser Compost + XML Recoder Composition programs
Modelica Modelica Box Hierarchy Modelica Hook Hierarchy Composition,Transformation, and Refactoring
Modelica Component Model
9
April 03, 2004
XMLBox ModelicaXMLBox ModelicaContainer ModelicaElement ModelicaClass ModelicaModel ModelicaConnector ModelicaBlock ModelicaRecord ModelicaType ModelicaPackage ModelicaFunction ModelicaComponent ModelicaEquationSection ModelicaAlgorithmSection 0..*
10
April 03, 2004
<definition ident="Engine" restriction="class"> <component visibility="public” variability="parameter" type="Integer" ident="cylinders"> <modification_equals> <integer_literal value="4"/> </modification_equals> </component> <component visibility="public" type="Cylinder" ident="c"> <array_subscripts> <component_reference ident="cylinders"/> </array_subscripts> </component> </definition>
class Engine parameter Integer cylinders = 4; Cylinder c[cylinders]; end Engine;
11
April 03, 2004
Hook DeclaredHook ImplicitHook XMLDeclaredHook ModelicaModifierHook XMLImplicitHook ModelicaParameterHook ModelicaRealHook ModelicaIntegerHook ModelicaStringHook Other Modelica Hooks
12
April 03, 2004
<component visibility="public” variability="parameter" type="Integer" ident="cylinders"> <modification_equals> <integer_literal value="4"/> </modification_equals> </component>
parameter Integer cylinders = 4;
<definition ident=”NewEngine" restriction="class"> <extends type=”Engine”> .... </definition>
class NewEngine extends Engine; .... end NewEngine;
<definition ident=”Engine” restriction="class"> <extract> <component>..</component> ... </extract> </definition>
13
April 03, 2004
ModelicaCompositionSystem cs = new ModelicaCompositionSystem(); ModelicaClass resultBox = cs.createModelicaClass(”Class1.mo.xml”); ModelicaClass firstMixin = cs.createModelicaClass(”Class2.mo.xml”); ModelicaClass secondBox = cs.createModelicaClass(”Result.mo.xml”); resultBox.mixin(firstMixin); resultBox.mixin(secondMixin); resultBox.print();
14
April 03, 2004
class CelestialBody ``Celestial Body'' Real mass; String name; constant Real g = 6.672e-11; parameter Real radius; end CelestialBody;
15
April 03, 2004
ModelicaCompositionSystem cs = new ModelicaCompositionSystem(); ModelicaClass bodyBox = cs.createModelicaClass(``Body.mo.xml''); ModelicaClass celestialBodyBox = cs.createModelicaClass(``Celestial.mo.xml''); ModelicaElement extractedPart = celestialBody.findHook(``extract'').getValue(); celestialBody.findHook(``extract'').bind(null); bodyBox.append(extractedPart); bodyBox.print(); celestialBody.findHook(``superclass'').bind(``Body''); celestialBody.print();
16
April 03, 2004
class Body ``Generic Body'' Real mass; String name; end Body; class CelestialBody ``Celestial Body'' extends Body; constant Real g = 6.672e-11; parameter Real radius; end CelestialBody;
17
April 03, 2004
18
April 03, 2004
19
April 03, 2004
20
April 03, 2004