Automated Model Transformation in MDA © Mikhail Kuznetsov Computational Mathematics and Cybernetics Faculty, Moscow M.V.Lomonosov State University mikle.kuz@mtu-net.ru Ph.D. Advisor S.D. Kuznetsov Abstract First during development a PIM is created. PIM is a model of a system that contains its business-logic, Model Driven Architecture is a new and usecases and view of a system from end user’s point of promising approach to software development. view without details of its actual implementation. The But its spread is hindered by the fact that one fact that PIM is not bind to any platform or technology of its parts - automated transformation of is most innovative and most important. When using software models – is not sufficiently MDA it is recommended to develop platform- developed. In this paper a language is independent model with a relatively high level of presented that can be used to define such details, up to using a high-level platform-independent transformations and a tool to automatically programming language to code system’s functionality execute them. and creating an executable prototype. Once PIM has sufficient details, a transition to 1 Introduction Platform-Specific Model is performed. This model describes not only user-level system functionality, but Programmers use many different middleware platforms also details of implementation of the system on the and technologies, and in the future their number will middleware platform chosen for a current project. More only increase because new technologies are being details are being added to the model by developers, and developed constantly but old ones become obsolete very necessary changes are performed, until the model is slowly. All attempts to create a universal platform that ready to be passed to the stage of code generation. Just could replace all existing ones resulted only in as in a common development process, a code can be increased variety of technologies. The problem of partially generated automatically from the model, and choosing a platform for a particular project becomes then finalized manually and compiled. more and more important, as well as problems of Of course, actual development process is not so interaction and integration of heterogeneous systems straightforward. It is nearly impossible for a complex and migration of existing systems to a new platform project to make a platform-independent model that when old platform becomes outdated and no longer would not require any modifications on later stages of satisfies customer’s needs. The solution may be usage development. During development of platform-specific of a new methodology of software development. model and even of code changes can be made in any Object Management Group (OMG) offers a new higher-level models. It does not contradict MDA approach to software development called Model Driven development process, but when making such changes Architecture (MDA) [9]. MDA offers several one should keep correspondence between models: a advantages compared to existing methodologies: change to one model should be properly reflected in all simplification of development of multi-platform others. So, when using MDA three models of the systems, ease of switching of a middleware platform, systems are being developed simultaneously: PIM, increased speed of development and quality of products PSM and code, each reflecting its own level of and much more. But all of it is possible only when abstraction. development tools will support the MDA technology The idea that is placed in the core of MDA is and help to fully realize its potential. Unfortunately independent from modeling language and tools. But the currently most of commercial products, even those that developer of technology, OMG consortium, assumes claim to support MDA, do not offer proper tools and that modeling will be done with UML (Unified technologies, thus efficiency of MDA in real projects is Modeling Language) [6]. Last changes and additions to limited. UML standard made this language much more MDA is based on concepts of Platform-Independent convenient for use with MDA. UML Action Semantics and Platform-Specific Models (PIMs and PSMs) [12]. [13] allows to describe system’s functionality on platform-independent level, and UML Profiles make Proceedings of the Spring Young Researcher's creation of PSMs for specific middleware platforms Colloquium on Database and Information Systems easier. SYRCoDIS, St.-Petersburg, Russia, 2005 Separation of platform-independent and platform- model using a pre-defined transformation definition specific models offers major benefits for developers. (that contains formal description of details of a specific First of all, the process of transition between technology or platform) [8]. This paper is dedicated to middleware platforms and technologies becomes easier, development of a language and tool for defining and because PIM can be reused and only PSM has to be executing such transformations. created anew. A risk of early development mistakes There are several requirements that a transformation decreases, because it is much easier to find and correct language has to satisfy to be efficient when used in such mistakes on relatively simple model that is fully MDA: based on customer’s requirements, then on sophisticated - Formalism of transformation description. low-level model that contains huge number of Transformation should be defined in a formal implementation-specific details. Separation of the language that has a good grammatical model, so models is also useful for fast creation of documentation, that the transformation tool could interpret this integration, creation of heterogeneous systems and so language and automatically execute it. on. - Universality. Transformation language should But the main advantage of MDA is its ability to permit creation of a wide range of transformations increase development speed, despite the fact that two that can cover a variety of middleware platform, models are being made instead of one. This is achieved including those that will appear in the future. Then by using automated generation of platform-specific it will always be possible to pick a standard model by platform-independent one. The process of transformation definition and transform a PIM of a transition from PIM to PSM that is based on a certain project to a modern platform, even if the PIM was technological platform is highly formalized. UML made 10 years ago and the platform was developed Profiles that are developed for all popular middleware recently. It is desirable that the language contains platforms contain recommendations about mapping means for model parameterisation and tuning, so various UML elements to forms that are specific to a that a single transformation definition can be used chosen technology – but those are recommendations for in many different projects. a developer and not instructions for automated - Integrity preservation. During development all execution. With a bit more efforts and more models can be changed, even after transition from formalization it is possible to convert loose form of PIM to PSM, meaning that there should be a way to Profiles into exact instructions. Then it is no longer automatically keep conformity between needed to manually create PSMs, and development transformed models that has been achieved during speed will increase significantly, because many details transformation. This means that information should required by a certain technology will be added to the be kept about a course of transformation and about model automatically. Besides, the number of mistakes mapping that was established between different that are inevitable with manual modeling will decrease elements of the models. Then UML editing tool can as well. Description of automatic transition to a PSM use this information to automatically map changes can be made once and thoroughly tested, and then used done to one model to another one, or at least to in all projects that use this technology. So, when using notify a programmer what elements are no longer MDA and automatic transition to platform-specific consistent. model, the development process consists of the - Intelligibility for a human reader. One following stages: transformation definition can be used in many - creation of the task, usecases, requirements and projects, but all projects are different. This means other initial documents; that it should be relatively easy to understand and - creation of platform-independent model; modify it to suit specific needs. The transformation - automatic transition from PIM to platform-specific should be clear not only to the person who wrote it, model, using a standard transformation definition but also to other people who may have to alter it. It developed earlier (and probably by other company) is also desirable that the transformation is well- for a chosen middleware platform and/or structured, so that it is easier to understand what implementation technologies; effect a particular change will have on - manual modification of both PIM and PSM, transformation globally. addition of various details; - Interconnected transformations. It is possible that - automated code generation; during MDA-based development multiple models - manual coding of parts that could not be generated of one type exist in a project. In particular, if the automatically, compilation. project uses multiple platforms, a separate PSM is Transition from PSM to code is fairly well generated for each of them. Transformation developed. Before MDA it was called “code language should be able to operate with more then generation” and to a certain degree can be performed by one source and generated model, it should be almost any modeling tool for majority of programming possible to transform multiple models within a languages and technologies. But automated transition to single transformation definition. It is much more PSM is a new concept. Since PIM and PSM are both convenient than usage of a separate transformation models written on UML (at least with classic MDA for each pair of models, since such approach allows approach), transition is just a transformation of a UML- to easily track relation between model elements and to define transformations (not UML model generate any necessary mediators and bridges. transformations, but transformations in general). In particular CWM (Common Warehouse Metamodel) 2 Various approaches to model standard has such functionality [2]. The idea to use transformation UML language to define UML transformations, just as UML defines it’s own syntax, looks promising, but not There are multiple approaches to definition and very practical. Unfortunately UML is just a modeling execution of transformation of UML models [3]. The language, it can be used to show the fact that there is a simplest solution is to imperatively define the procedure mapping between certain model elements, but not to of transformation using any algorithmic language. A define details of such a mapping in general with enough UML modeling toolset may contain modules that precision to allow automated execution. Another contain predefined transformations that can later be standard from UML family – QVT (Query, View, used when necessary. Unfortunately such an approach Transformation) [7] – is meant to fill this niche and is badly suited for MDA-style development. First of all, looks much more promising for use in MDA. users cannot add their own transformation definitions or Unfortunately, currently this standard is in early stages modify those provided by creators of a toolset. Also of development, and it is not possible to say when it each toolset will handle transformations differently will be ready or what exactly it will contain. The even for the same middleware platforms, meaning that standard should do several big tasks at the same time, models created by different toolsets will likely be and is mostly targeted not on practical use but on incompatible with each other. Instead of being restricted development of theoretical concept of by choice of a middleware platform, a programmer will metametamodeling as part of MOF (Meta Object be restricted by choice of a modeling toolset. Finally, Facility, the standard for representation of metamodels) such an approach means that for each toolset a full [11]. It is likely that this standard will be inefficient in number of transformations should be developed for practice, and will not satisfy requirements of MDA. each middleware technology. This is a huge work One more solution is development of a specialized compared to using a single set of transformation created high-level language for defining model transformations and thoroughly tested by a third party. and a tool for execution of such a language that would Another approach to transformation is usage of be efficient for application in MDA. Probably such a well-developed concepts and ideas from other areas of tool will be more convenient then an adaptation of a science. In particular, it is possible to present a UML certain generic standard. Below we’ll review one of model as a graph and use graph transformation such languages that is developed by the author. technologies. The main disadvantage of this approach is the fact that it uses its own terms and definitions that are 3 Fundamental scheme of the not related to modeling. User of such transformation transformation tool tool will have to know not only UML modeling, but also graph theory. And every time he wants to make a Transformation tool can be a separate program or a part change in transformation definition he will have to of a larger software development toolkit. During MDA make mental transition to graphs, and then back to development it is used for partial automation of UML. generation of a platform-specific model [4]. It receives Another solution is to use transformations of XML the following input data: and XMI standard. XMI [10] (XML Metadata - one or more source models; Interchange) is a standard that allows to present UML - metamodel for each model that takes part in the as an XML document, its main purpose is storage of transformation; UML models and exchange of models between different - transformation definition on a special tools. There are several reliable technologies for XML transformation definition language; the definition transformation, such as XSLT [14] and XQuery [1]. A depends on the metamodels and on number of UML model can be converted to XML using XMI, then models that participate in the transformation, but is this XML document can be transformed and converted independent from specific models. back to UML. But such double conversion makes the The output data is: transformation definition unclear for a human reader. - a set of source models with modifications added Also since we need to convert transformed XML during transformation; document back to UML, it has to comply with XMI. On - one or more (depending on transformation practice this means that nearly 90% of definition of definition, possibly zero) newly generated models XML transformation is targeted not at actual model that were created during a transformation; each transformation, but at ensuring that the result is a valid generated model has to comply to one of the XMI representation of a model. Of course it is very hard metamodels supplied as input data; to make and understand such transformations. Even a - information about dependencies and mappings relatively simple model transformation is defined by a between elements of models that was established very large and bulky XML transformation. during transformation; it is needed to preserve UML language is considered to be a universal conformity of models after the transformation. modeling tool, and of course it contains its own means For the transformation tool there is no major Computation of a navigation expression consists of difference between source and generated models: both a sequential transition from one model element to can be modified during transformation, the difference is another using specified directions, starting from the only that generated model starts as empty model. So in element that the base variable points at. If a cardinality the future we’ll talk about set of models meaning source of a direction is greater then one, all corresponding and generated models combined. model elements are considered to be the result. This means that the result of execution of a navigation 4 Transformation definition language expression is a list of all model elements that can be reached from the element indicated by base variable by Transformation definition consists of one or more the specified set of directions. Navigation expression modules. Each module has a unique name and consists has the following properties: of a set of transformation rules. Header of the module - Type: metamodel element that corresponds to can also specify the sequence of execution of rules in elements contained in the result. Since navigation is the module; this option will be explained later. Below performed via metamodel, all elements of the result we can see a part of formal definition of the language will always have the same type. Type can be using extended Backus-Naur form (eBNF). determined statically, it depends on the metamodel but not to the actual model. transformation::= *; - Cardinality: maximum number of elements in the stage::= stage [] result. Cardinality is determined statically. { * }; - Value: a set of elements that were received as a sequence::= [reversed] result during computation of the expression. Value (linear | loop | rollback | rulebyrule); of an expression is calculated during its execution at an actual model. Each rule has a unique (in the scope of the module) Navigation expression can begin with any local or name and consists of select section that defines when global variable declared earlier. Local variable is a the rule can be applied, and generation section, that variable that is declared in one of operators of the same specifies actions to execute when applying the rule. rule. Global variables are names of models that participate in the transformation. Obviosly navigation transformation_rule::= rule expression of the first select operator of a rule always { }; begins with a global variable, since no local variables are initialized yet. Select section contains a sequence of selection Generation section is a sequence of operators that operators. Each operator defines a new variable that is modify models. Create operator allows to add a new called “selection variable”. The name of this variable model element where a set of elements is possible should be unique in the scope of the current rule, and (where multiplicity of a corresponding metamodel domain is a set of elements of a model specified by association is greater then one). Navigation expression navigation expression. Besides, select section can in this operator should point at the set, and its type contain qualifying conditions - logical expressions that determines the type of created element. Delete operator can contain selection variables declared by operators excludes a model element from a set. Modification that stand earlier in the rule. operator allows changing value of element’s attribute. Two more operators allow adding existing element to a select_section::= (|)*; set of elements or removing it from a set without select_operator::=forall deleting it from the model; those operators are from ; necessary if metamodel contains loops or if the same constraint::= where ; element is accessible via multiple associations. Navigation expression is a sequence of directions generate_section::=( that begins with a name of an existing variable (we’ll | call it a base variable of the expression), symbol ‘/’ is | used as a separator. Direction is a name of association | on a metamodel that corresponds to the model that is | being transformed (if more then one model participates )*; in the transformation, the metamodel can be determined create_operator::=make by a type of the base variable). Cardinality of a in ; ; direction is multiplicity of the corresponding update_operator::= = metamodel association. ; ; delete_operator::= delete ; ; nav_expression::= include_operator::=include iteration_pair(/, ); in ; ; exclude_operator::=exclude in ; ; keep it in mind when defining and executing a transformation. 5 Execution of a transformation 6 Transformation bond and its usage in Once a transformation tool receives a source model (or models) and transformation definition, as well as transformation definition description of used metamodels, it can execute the Every time a rule is applied a special data structure transformation. It consists of a sequential execution of called ‘transformation bond’ is created in addition to modules from the definition. Execution of a module is any actions contained in the generation section. A name sequential repetition of two steps: finding a rule that can of this structure is the same as rule’s name, and its be applied and applying this rule. attributes have the same names and types as rule’s local Application of a rule is determined by its select variables. Values of those attributes are equal to values section. Each operator of that section declares a new of corresponding variables calculated during application variable and defines a set of its possible values. The rule of the rule. can be applied to a set of model elements, where each Transformation bonds are stored during entire element is in the appropriate value set, and where all process of a transformation, and possibly even after the conditions of the select section are true. This means that transformation is finished. They contain information if a select section has three selection operators and no about a course of the transformation, about application conditions, and the operators define variables v1,v2 and of any rule and about relations between model elements v3 that can take on N1,N2 and N3 different values, then established by the transformation. This information can the rule can be applied to N1*N2*N3 different value be used to maintain consistency between models in the sets; if the rule has any conditions then it can be applied process of transformation and after it. Besides, only to those value sets where all conditions are true. A transformation bonds may be used by a transformation rule can be applied only to the same value set only tool so that it can warrant that any rule is applied only once. once to any set of values of selection variables. Application of a rule to a value set is execution of It is possible to use transformation bonds explicitly all operators in the generation section. in the transformation definition to establish The order of application of rules is determined by a dependencies between rules. Just as navigation special parameter in the module’s header. If its value is expressions are used to select elements from models, ‘linear’ then rules are applied sequentially from first in they can be used to select bonds created by rules that module’s definition to the last; search for the next rule were applied before the current rule. Such special to apply starts from the last applied rule. The module is navigation expressions begin not with a local variable considered to be finished once the last rule in the or a name of a model, but with a name of a module is executed for all possible value sets. If the transformation module, followed by a name of a rule value of the parameter is ‘loop’, the transformation and then a name of a variable in that rule. Since any rule works in the same way, but upon reaching the last rule can be applied more then one time during a the search for applicable rules continues from the first transformation, creating more then one instance of a rule. The module is finished if no more rules can be corresponding bond, cardinality of such navigation applied. If the value of parameter is expression is always ‘many’. Just as with an ordinary ‘rollback’, then after each application of a rule the navigation expression, it returns a set of model elements search starts from the first rule in the module; the as a result – a set of elements that were values of a transformation is over if no more rules can be applied. specified variable in all applications of a specified rule. If the value is ‘rulebyrule’, then search is also performed from the first rule in the module, but once an ::=/ applicable rule Is found it is applied to all possible /; value sets – and only then the search starts anew from the top. All values of parameters mentioned above can Instead of the name of a module a keyword ‘rules’ also be used with a keyword ‘reversed’, meaning that may be used that is equal to the name of a current the order of rules in the module is reversed and all module. searches are performed from the last element from Explicit use of transformation bonds in module definition to the first. If no value of transformation definition gives a powerful tool for a parameter is specified, it is considered to be ‘rulebyrule’ programmer. It allows to define very complex rules in a by default, since it allows fastest execution of the short and easy to understand way. transformation. Transformation is over once the last module is finished. 7 Rule extension and templates It should be noted that it is not possible to warrant that a transformation will ever be finished for any It is possible to define a new rule as an extension of model. In some transformations infinite loops may existing rule. To do so one has to write a name of the appear, especially when using ‘create element’ operator. rule that is being extended after the name of extending Users of the transformation definition language should rule in that rule’s header. It is possible to extend extensions and to make several extensions of the same base rule, creating multi-layer hierarchy. Operators in Association Model the extending rule can use all variables from base rule name : Name 1 +associations name : Name stereotype : Stereotype along with their own variables (select operators can use 0..n Association_type 1 variables only from select section and not from +classes0..n 1 +base generation section). Class name : Name +ends 2 stereotype : Stereotype+class AssociationEnd transformation_rule::= rule [ : ] { 1 1 0..n name : Name 1 ; }; +associations cardinality : Cardinality 1 Association_end_type +attributes +operations visibility : Visibility 0..n 0..n Extension rule is applicable to a certain value set if: Attribute Operation 1 1 - base rule is applicable to this value set (actually for name : Name name : Name 0..n Parameter +otherEnd type : Type type : Type name : Name its corresponding subset); type : Type - value set satisfies the select section of extending +parameters rule; Simplified metamodel of UML class diagram. - the extending rule was not applied to this value set before. block example_transform { Execution of an extending rule is execution of its generation section. But unlike an ordinary rule it does rule class_mapping { not create a new transformation bond; instead it extends forall src from source/classes the bond created by application of the base rule with make trgt in target/classes; variables declared in the extension. It works similarly to trgt/name=src/name; inheritance in common programming languages: old } attributes remain intact and new ones are added. Such bonds will be shown as results of calculation of This is module’s header and its first rule. The rule navigation expressions that scan for applications of the ‘class_mapping’ for each class of source model creates base rule as well as applications of extending rule. a class in the target model with the same name. Each The concept of rule extension allows to structure the application of this rule creates an instance of a set of rules as well as the set of transformation bonds transformation bond with name ‘class_mapping’ and created by those rules. It allows easier development, attributes ‘src’ and ‘trgt’ that point to a class in source modification and understanding of complex model and newly generated class correspondingly. transformations. Template is a special rule that begins with a key rule private_to_private { word ‘abstract’. Such rule is never applicable, no matter forall a from source/classes the select section. But it can be used as a base rule to forall b from a/attributes create extensions that can be applied as normal rules. A where b/visibility="private" template can extend another template but not an forall c from target/classes ordinary rule. Just as normal extensions, templates forall d from rules/class_mapping allow to structure transformation bonds and then use where (d.src=a) and (d.trg=c) navigation expressions that query those bonds to define make e in c/attributes; complex transformations. e/name=b/name; e/type=b/type; 8 Example of transformation definition e/visibility="private";} A simple transformation module with several rules is shown below. This transformation definition is meant to This rule copies private attributes from source to be used for transformation of a pair of models (‘source’ target model. The select section of this rule uses and ‘target’), both of which use UML class diagram transformation bond created by application of previous metamodel. First model is a source data, and second is rule. Because of this bond an attribute is copied exactly generated during the transformation. A simplified to the class that is generated by the class that contains metamodel of UML class diagram used in this this attribute, without the bond we would not know transformation definition is shown on the scheme: what class of target model to choose. rule public_to_private { forall a from source/classes forall b from a/attributes where b/visibility="public" forall c from target/classes forall d from rules/class_mapping where (d.src=a) and (d.trgt=c) make e in c/operations; // "get_elt()" e/name="get_"+b/name; e/type=b/type; e/visibility="public"; c/base=assoc; make f in c/operations; // "set_elt(type)" } f/name="set_"+b/name; } //example_transform f/type="void"; f/visibility="public"; The last brace marks an end of the module make g in f/parameters; “example_transform”. g/name=make_unique_name(b/name); g/type=b/type; 9 Conclusion. make h in c/attributes; // "private elt" h/name=b/name; MDA technology has a potential to become a new h/type=b/type; stage in evolution of software development toolkits and h/visibility="private"; methods. But it is possible only if tools are created that } are specially developed to support this technology and utilize its full potential. Existing tools that claim to This rule maps public attributes to private and support MDA are mostly minor modification of old creates corresponding ‘get’ and ‘set’ pairs of operations. tools that do not provide necessary functionality. One of A function “make_unique_name” that is used in this the main problems that slow down appearance of new rule is a built-in function with a relatively simple generation of tools is automated model transformation. functionality: it returns a string-name that is warranted Existing approaches from other areas of mathematics to be unique in the scope of a model. Exact and informatics are inefficient for practical tasks of implementation of this function may differ in different MDA-based development. That’s why development of a transformation tools. new system and language is important. This work offers a transformation definition abstract rule all_inherited { language that is mostly meant to be used for automated forall inherit_trgt from source/classes transformation of UML models. During development of forall inherit_src from source/classes; this language a special attention was paid to make it } suitable for MDA tasks, and to make it easier to rule directly_inherited:all_inherited { understand for a human. A prototype tool is being forall assoc from inherit_trgt/associations developed that supports this language and executes where ((assoc/stereotype=”generalization”) and model transformations. (assoc/otherend=inherit_src)) } References: rule indirectly_inherited:all_inherited { [1] D. Chamberlin. XQuery: An XML query language. forall r1 from rules/directly_inherited IBM systems journal, no 4, 2002. where r1/inherit_trgt=inherit_trgt [2] Common Warehouse Metamodel (CWM) forall r from rules/all_inherited Specification. OMG Documents, Feb. 2001. where ((r/inherit_trgt=r1/inherit_src) and http://www.omg.org/cgi-bin/apps/doc?formal/03- (r/inherit_src=inherit_src)) 03-02.pdf } [3] Krzysztof Czarnecki, Simon Helsen. Classification of Model Transformation Approaches. University This set of a template and two rules defines the of Waterloo, Canada, 2003. concept of “indirect inheritance” (if by inheritance we [4] Keith Duddy, Anna Gerber. Declarative mean generalization association). The rules themselves Transformation for Object-Oriented Models. do not modify the model, but they create transformation Transformation of Knowledge, Information, and bonds that can be used by other rules. For example, here Data: Theory and Applications, 2003. is a rule that generates a generalization association [5] M. Kuznetsov. Model Driven Architecture and between a class and all its direct and indirect ancestors: Transformation of UML Models. In SYRCoDIS, pages 82-86. May 2004. rule inheritance { [6] Martin Flower. UML Distilled: A Brief Guide to forall a from rules/indirectly_inherited the Standard Object Modeling Language, Third make b in a/inherit_src/associations; Edition. Addison Wesley, 2003. b/cardinality=”1”; [7] Tracy Gardner, Catherine Griffin A review of make c in a/inherit_trgt/associations; OMG MOF 2.0 Query / Views / Transformations c/cardinality=”1”; Submissions and Recommendations towards the c/stereotype=”generalization”; final Standard. http://www.omg.org/docs/ad/03-08- b/other_end=c; 02.pdf c/other_end=b; [8] Anna Gerber, Michael Lawley, Kerry Raymond, make assoc in target/associations; Jim Steel, Andrew Wood. Transformation: The include b in assoc/ends; Missing Link of MDA. Proceedings 1st include c in assoc/ends; b/base=assoc; International Conference on Graph Transformation (ICGT 2002), 2002. [9] Anneke Kleppe, Jos Warmer, Wim Bast. MDA Explained. The Model Driven Architecture: Practice and Promise. Pearson Education, 2003. [10] Jernej Kovse, Theo Härder. Generic XMI-Based UML Model Transformations. ZDNet UK Whitepapers, 2002. [11] Meta-Object Facility (MOF) specification, version 1.4 . OMG Documents, Apr. 2002. http://www.omg.org/cgi-bin/apps/doc?formal/02- 04-03.pdf [12] Joaquin Miller and Jishnu Mukerji(eds.). MDA Guide Version 1.0. OMG document, 2003. http://www.omg.org/mda/mda_files/MDA_Guide_ Version1-0.pdf [13] Daniel Varro, Andras Pataricza. UML Action Semantics For Model Transformation Systems. Periodica Polytechnica, no. 3-4, 2003. [14] XSL Transformations (XSLT) v1.0. W3C Recommendation, Nov. 1999. http://www.w3.org/TR/xslt