<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Realizing Model Simplifications with QVT Operational Mappings</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Alexander Kraas</string-name>
          <email>alexander.kraas@gmx.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Poppenreuther Str.</institution>
          <addr-line>45, D-90419 Nu ̈rnberg</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <fpage>53</fpage>
      <lpage>62</lpage>
      <abstract>
        <p>After parsing the input of a textual modeling language, further processing steps may be required before the result can be mapped to corresponding elements in a model. For instance, such a processing step can be the simplification of syntactic constructs. An approach for model simplification resting on transformation patterns is presented in this paper. The presented approach rests on the refinement of a derived base transformation with the superimposition of mapping operations. The transformations are specified with the Operational Mappings part of the Query/View/Transformations (QVT) specification.</p>
      </abstract>
      <kwd-group>
        <kwd>QVT-O</kwd>
        <kwd>Transformation</kwd>
        <kwd>Patterns</kwd>
        <kwd>Simplification</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        In general, modeling languages can be classified into textual as well as graphical
modeling languages. However, also hybrid approaches using both kinds of
modeling exist. For instance, the Specification and Description Language (SDL) [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]
can be considered as such a language. Further processing steps (e.g.
simplifications) may be required after the textual input of a hybrid modeling language is
parsed and represented in terms of a Concrete Syntax Tree (CST). According
to the taxonomy given in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], model simplification is an approach where
particular syntactic constructs are transformed into more primitive constructs. Usually,
dedicated frameworks for language transformations, such as Stratego/XT [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ],
can be utilized for this purpose. However, an access to an already existing model
may be required for the simplification of the textual input of a hybrid language.
If a CST is defined in terms of a metamodel, the Query/View/Transformations
(QVT) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] specification supports such an transformation scenario.
      </p>
      <p>
        Since the general realization of transformation patterns by using the
Relational Language of QVT is already discussed in [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], in this paper the
implementation of patterns for model simplification by using the Operational Mappings
of QVT is discussed. The QVT features transformation extension and
superimposition of mapping operations play a key role for the presented approach. Even
if these features are defined in the QVT specification [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], only less information
concerning their combined application can be found in the literature. Hence,
the successful application of the approach for the textual SDL editor of the
SUMoVal framework [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] is used in this paper to illustrate the implementation of
simplification patterns. The transformations within the SU-MoVal framework
are executed by the QVT operational component (QVTo) [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] of Eclipse.
      </p>
      <p>The rest of this paper is structured as follows. The proposed approach and
transformation patterns for model simplification are introduced in section 2.
Related work is discussed in section 3 and a conclusion is given in section 4.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Transformation Patterns for Model Simplification</title>
      <p>An approach to implement patterns for model simplification with QVT
Operational Mappings (QVT-O) is presented in this chapter. After the general
approach is discussed, a transformation example is introduced in section 2.2, which
is used to explain the approach more descriptive in subsequent sections. Finally,
the realization of exemplary patterns for model simplification is discussed in
section 2.4.
2.1</p>
      <sec id="sec-2-1">
        <title>General Approach</title>
        <p>The presented approach to simplify models by using QVT Operational
Mappings (QVT-O) rests upon a common endogenous base transformation (TCB)
that is extended by another transformation (TSP) implementing a particular
simplification pattern.</p>
      </sec>
      <sec id="sec-2-2">
        <title>Derivation of a common base transformation: As shown in part A of</title>
        <p>Fig. 2, the required transformation TCB is derived from a metamodel (MM) and
the input model (MIN) and the output model (MOUT) are instances of MM. The
purpose of TCB is to produce only a one-to-one copy of model MIN and therefore,
a particular mapping operation for each metaclass is contained in TCB. Even if
a higher-order transformation could be applied to derive TCB from a metamodel
MM, transformation TCB is generated with a Model-to-Text (M2T) approach so
that its source code can be partially reused to specify transformation TSP.</p>
        <p>In order to achieve that transformation TCB makes a copy of MIN, all
elements of MIN are mapped to equal elements in MOUT. Hence, TCB implements
an entire rewrite system that consists of contextual mapping operations that
invoke other mapping operations in a nested manner to map the properties of
an input element.</p>
      </sec>
      <sec id="sec-2-3">
        <title>Realizing a simplification pattern: When a model simplification pat</title>
        <p>tern is implemented by transformation TSP, the control flow of TCB has to be
redirected at points where the relevant elements to be simplified occur. Usually,
such points are mapping operations that are defined in the context of the
relevant metaclasses. After the mapping operations in TCB are identified, they have
to be overridden by corresponding mapping operations (see part B of Fig. 2) in
TSP, which implement the desired simplification pattern.
2.2</p>
      </sec>
      <sec id="sec-2-4">
        <title>Transformation Example and Required Metaclasses.</title>
        <p>
          In order to make the approach discussed in the following sections more
descriptive, a transformation example resting on a metamodel for representing
parsetrees of the concrete syntax (CS) of the Specification and Description Language
(SDL) [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] is used. This example is taken from the SDL-UML Modeling and
Validation framework (SU-MoVal) [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ].
        </p>
        <p>Since the concrete syntax of SDL makes use of so-called short hand notations
that have to be transformed to equivalent language constructs, this is considered
to be a good case study for model simplification. In particular, the
transformation example consists of the transformation of a mathematical or logical in-line
operator to a corresponding operation application. For instance, the concrete
syntax expression 1 + 1 is transformed to "+"(1, 1).</p>
        <p>As shown in Fig. 2, the BinaryExpressionsCS metaclass is a sub-type of
ExpressionCS and it is used to represent mathematical or logical inline
operators (e.g. + operator) within SDL expressions. After application of the
transformations patterns discussed in the subsequent sections, an instance of
BinaryExpressionCS is transformed to an OperatorApplicationCS.</p>
      </sec>
      <sec id="sec-2-5">
        <title>2.3 Derivation of a Common Base Transformation</title>
        <p>
          The derivation of a transformation from a metamodel by using a
Model-toText (M2T) transformation is out of scope of this paper. Hence, the derivation
approach is only discussed on a high-level of abstraction. For instance, the M2T
tool Acceleo [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] is used for the derivation task during the implementation of
SU-MoVal [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ].
        </p>
        <p>Transformation Main Part. As shown in the code example below, the
required main operation of TCB is empty, because the concrete behavior is
specified by a transformation that extends TCB. Furthermore, the input and output
parameters of TCB have the same type because TCB is an endogenous
transformation.
modeltype CS uses ConcreteSyntax ("http://...");
transformation TCB(in inp:CS, out outp:CS)
main() { // Nothing to do here !}</p>
      </sec>
      <sec id="sec-2-6">
        <title>Mapping Operations for Metaclasses. For each metaclass of the example</title>
        <p>metamodel CS, a corresponding mapping operation for TCB is derived.
Depending on the kind of a metaclass (abstract or non-abstract), two different kind
of mapping operations are generated. In addition, the context (self) and the
result type of a mapping operation correspond to the currently processed
metaclass.</p>
        <p>For each abstract metaclasses, a disjunctive mapping operation is introduced
consisting of an ordered list of mapping operations for all subclasses of that
metaclass (e.g. ExpressionCS). An important fact is that attributes, if any,
of an abstract metaclass cannot taken into account by a disjunctive mapping
operation. Instead, these attributes are processed by each mapping operation
listed as disjunctive alternative.
mapping CS::ExpressionCS::mapExpressionCS() : CS::ExpressionCS
disjuncts</p>
        <p>CS::EqualityExpressionCS::mapEqualityExpressionCS,
CS::PrimaryCS::mapPrimaryCS,
CS::TypeCoercionCS::mapTypeCoercionCS,
CS::MonadicExpressionCS::mapMonadicExpressionCS,
CS::CreateExpressionCS::mapCreateExpressionCS,
CS::RangeCheckExpressionCS::mapRangeCheckExpressionCS,
CS::BinaryExpressionCS::mapBinaryExpressionCS {}</p>
        <p>In contrast to abstract metaclasses, all owned and inherited attributes of a
non-abstract metaclass (e.g. BinaryExpressionCS) are processed for the
derivation of the body of a corresponding mapping operation.
mappingCS::BinaryExpressionCS::mapBinaryExpressionCS()
: CS::BinaryExpressionCS {
result.resolvedOperation := self.resolvedOperation;
result.operationIdentifier := self.operationIdentifier.map
mapIdentifierCS();
result.leftOperand := self.leftOperand.map mapExpressionCS();
result.rightOperand := self.rightOperand.map mapExpressionCS();
result.resolvedType := self.resolvedType;
}
Processing of Metaclass Attributes. In general, the mapping operation for
a non-abstract metaclass assigns each owned or inherited attribute of an input
object (self) to a corresponding attribute of the result object (result). Since
QVT-O distinguish between assignments to mono- or multi-valued properties
or variables, this has also to be considered during the processing of attributes.
Hence, a simple assignment (’:=’ operator) is used for the mapping of an
attribute with an upper multiplicity of 1. In contrast, attributes with an upper
multiplicity of &gt;1 are assigned with a composite assignment (’+=’ operator).
result.myProperty := self.myProperty.map mapMySubclassA();
result.myProperty += self.myProperty-&gt;map mapMySubclassA();
The attribute type is another property that is taken into account during the
derivation process. Usually, a type dependent mapping operation is invoked,
before the value is assigned to the output object. This is not the case for attributes
with a primitive (e.g. String) or an enumerated type for which the input value
is just copied to the corresponding attribute of the output object.
result.myProperty := self.myProperty;
result.myProperty += self.myProperty;</p>
      </sec>
      <sec id="sec-2-7">
        <title>Design Principles and Used Features of QVT-O. Apart from the discussed</title>
        <p>extension mechanism also the access mechanism of QVT-O could be considered
to access mapping operations of TCB. However, this mechanism does not support
transformation inheritance so that the transformation control flow cannot be
redirected through superimposition of mapping operations of TSP.</p>
        <p>Furthermore, QVT-O supports the inheritance and the merge of mapping
operations. These features where not taken into account for the presented approach,
because they induce a combined execution of all involved mapping operations.
If these features would be used, the mapping rules for a particular metaclass
had to be specified in different mapping operations. Instead, the discussed
approach recommends to process all inherited and owned attributes of a metaclass
within one mapping operation of TCB. The advantage for the implementation
of transformation patterns is a better maintainability and a lower complexity,
because required mapping rules can be specified within one overriding mapping
operation of TSP.</p>
        <p>Since the inheritance and the merge of mapping operations are not used,
also the QVT-O feature of abstract mapping operations is not required in order
to process abstract metaclasses of MM. Instead, disjunctive mapping operations
are used for this purpose, because they make a fine grained manipulation of the
transformation’s control flow possible.
2.4</p>
      </sec>
      <sec id="sec-2-8">
        <title>Exemplary Transformation Patterns for Model Simplification</title>
        <p>Resting on the already introduced approach (see Sec. 2.1), exemplary
transformation patterns for model simplification are discussed in more detail in this
section. For this purpose, the transformation example of section 2.2 is used in
the following paragraphs.</p>
        <p>Top-level Simplification. A model can be represented as a tree structure of
nested model elements, which are instances of different metaclasses of a
metamodel. The most simple use case for model simplification is the
transformation of top-level elements only. If this pattern is applied to the
transformation example (see Sec. 2.2), only the top-level instances of BinaryExpressionCS
will be transformed to a corresponding OperatorApplicationCS and nested
BinaryExpressionsCS will be preserved (see example output O1 shown in Fig. 3).</p>
        <p>In order to realize this pattern for the given transformation example with
QVT, the transformation TCB is extended by transformation
InfixOperationToOperator. Within the main() method of this transformation, the root element
of the model is selected and an appropriate mapping operation of the TCB
transformation is invoked. According to the presented approach, the control flow of
the transformation remains in TCB, as long as one of its mapping operations
is overridden by another operation specified in the InfixOperationToOperator
transformation.
transformation InfixOperationToOperator</p>
        <p>(in input : CS, out output : CS) extends TCB;
main() {
input.rootObjects()[CS::StatementCS]-&gt;map mapStatmentCS(); }
In order to transform each occurrence of BinaryExpressionsCS, the control
flow within TCB is redirected at points where associated mapping operations are
invoked. Therefore, the operation mapExpressionCS() is overridden as follows:
mapping CS::ExpressionCS::mapExpressionCS() : CS::ExpressionCS
disjuncts</p>
        <p>CS::EqualityExpressionCS::mapEqualityExpressionCS,
CS::PrimaryCS::mapPrimaryCS,
CS::TypeCoercionCS::mapTypeCoercionCS,
CS::MonadicExpressionCS::toOperatorApplication,
CS::CreateExpressionCS::mapCreateExpressionCS,
CS::RangeCheckExpressionCS::mapRangeCheckExpressionCS,
CS::BinaryExpressionCS::toOperatorApplication {}</p>
        <p>The last line (bold printed) of mapExpressionCS() is modified in
comparison to the overridden operation in TCB. That is because the control flow shall
be redirected to the toOperatorApplication() operation that implements the
mapping of a BinaryExpressionCS to an OperatorApplicationCS.
mappingCS::BinaryExpressionCS::toOperatorApplication()
: CS::OperatorApplicationCS {
result.resolvedType := self.resolvedType;
result.resolvedOperation := self.resolvedOperation;
result.operationIdentifier := self.operationIdentifier;
result.actualParameters := OrderedSet {
object ActualParameterCS { expression := self.leftOperand },
object ActualParameterCS { expression := self.rightOperand }};
}</p>
        <p>Since only top-level instances of BinaryExpressionCS shall be transformed
by the toOperatorApplication() operation, all attributes of an input element
are assigned directly to the created output element (without invoking any other
mapping operation).
Recursive Simplification. The objective of the pattern for recursive
simplification is to transform all model elements of a particular kind. This is realized
with a recursive call of the mapping operation, if required. After applying a
recursive simplification pattern for the given transformation example, the input
model I (shown in Fig. 3) is transformed to the output model O2 (see Fig. 4).
As expected, all instances of BinaryExpressionCS in the output model O2 are
transformed to instances of OperatorApplicationCS.</p>
        <p>In order to implement the recursive transformation pattern for the given
transformation example, a slightly modified variant of the already discussed
InfixOperationToOperator transformation is used. Hence, the
toOperatorApplication() mapping operation is modified in a way so that also for nested
elements dedicated mapping operations are invoked instead of copying them.
result.actualParameters := OrderedSet {
object ActualParameterCS { expression :=</p>
        <p>self.leftOperand.map mapExpressionCS() },
object ActualParameterCS { expression :=</p>
        <p>self.rightOperand.map mapExpressionCS() } }</p>
        <p>The additional map operation calls (bold printed) in the code snippet shown
above realize the recursive call to the toOperatorApplication() mapping
operation. When one of the mapExpressionCS() operations is invoked,
appropriate mapping operations defined in TCB are processed as long as an instance of
BinaryExpressionCS shall be mapped. If this is the case, the control flow of the
transformation is redirected to the toOperatorApplication() operation once
again.
Simplification of Leaf Elements. The transformation pattern for
simplification of leaf elements can be considered as opposite of the already presented
top-level simplification pattern. A simplification of leaf elements applied to the
transformation example causes a mapping of leaf BinaryExpressionCS elements
to corresponding OperatorApplicationCS elements, whereas top-level elements
of that kind are only copied to the output model (see output model O3 in Fig. 4).</p>
        <p>A modified variant of the InfixOperationToOperator transformation can be
used to implement the simplification of leaf elements. Therefore, the
mapBinaryExpressionCS() operation, which just makes a copy of the input element, is
added as an additional mapping alternative to the disjunctive mapping operation
mapExpressionCS(). It is important to add mapBinaryExpressionCS() after
toOperationApplication(), because the disjunctive alternatives are processed
in sequential order.
mapping CS::ExpressionCS::mapExpressionCS() : CS::ExpressionCS
disjuncts
...</p>
        <p>CS::BinaryExpressionCS::toOperatorApplication,
CS::BinaryExpressionCS::mapBinaryExpressionCS {}</p>
        <p>A when clause is added to the toOperatorApplication() operation,
because it shall only be invoked for input elements that have no further nested
BinaryExpressionCS elements. If the condition of the when clause is not
fulfilled, the mapping operation is not invoked.
mappingCS::BinaryExpressionCS::toOperatorApplication()
: CS::OperatorApplicationCS
when { self.allSubobjectsOfType</p>
        <p>(CS::BinaryExpressionCS)-&gt;size() = 0 }
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Related Work</title>
      <p>
        Many works [
        <xref ref-type="bibr" rid="ref2 ref3 ref6">2, 3, 6</xref>
        ] concerning the refinement of endogenous transformations
and the implementation of transformation patterns with the QVT Relational
Language (QVT-R) exist. In addition, the usage of the AtlanMod
Transformation Language (ATL) for this purpose is analysed in [
        <xref ref-type="bibr" rid="ref4 ref6">4, 6</xref>
        ]. Even if the mentioned
works discuss possible approaches, the analysis of the ATL Transformation Zoo
in [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] comes to the conclusion that transformation superimposition is rarely used
in practice.
      </p>
      <p>
        In contrast to before mentioned works, the approach presented in this paper
rests on the QVT Operational Mappings (QVT-O) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], which is an imperative
transformation language and not a relational language as used by the mentioned
works. Furthermore, instead of introducing only a copy pattern for QVT-O
transformations, the presented work discuss the refinement of generated copy patterns
towards essential patterns for model simplification.
      </p>
    </sec>
    <sec id="sec-4">
      <title>Conclusion</title>
      <p>
        The approach for model simplification by using the QVT Operational Mappings
presented in this paper is not only restricted to the used metamodel of the
textual notation of SU-MoVal [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. That is because the rules for the derivation
of a common base transformation, which is the starting point for all discussed
simplification patterns, are also applicable to each other kind of metamodel.
      </p>
      <p>
        In addition, the applicability of the approach is not limited to the patterns
discussed in the section before, because further patterns for simplification can
be realized in a similar manner. As a matter of principle, also other kind of
endogenous model transformations could be implemented in the same manner,
because the area of model simplification is only used as an exemplarily use-case
in order to demonstrate the overall approach. A running transformation example
and further information can be obtained from the SU-MoVal homepage [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Mens</surname>
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Van Gorp P.:</surname>
          </string-name>
          <article-title>A Taxonomy of Model Transformation</article-title>
          .
          <source>In: Electronic Notes in Theoretical Computer Science</source>
          , vol.
          <volume>152</volume>
          , pp.
          <fpage>125</fpage>
          -
          <lpage>142</lpage>
          . Elsevier, Amsterdam (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Goldschmidt</surname>
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wachsmuth</surname>
            <given-names>G.</given-names>
          </string-name>
          :
          <article-title>Refinement transformation support for QVT Relational transformations</article-title>
          .
          <source>In: 3rd Workshop on Model Driven Software Engineering</source>
          ,
          <string-name>
            <surname>MDSE</surname>
          </string-name>
          <year>2008</year>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Iacob</surname>
            <given-names>M-E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Steen</surname>
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Heerink</surname>
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Reusable model transformation patterns</article-title>
          .
          <source>Enterprise Distributed Object Computing Conference Workshops</source>
          ,
          <year>2008</year>
          12th., pp.
          <fpage>1</fpage>
          -
          <lpage>12</lpage>
          . IEEE Press, New York (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Tisi</surname>
            <given-names>M.</given-names>
          </string-name>
          , et. al.:
          <article-title>Refining Models with Rule-based Model Transformations</article-title>
          . INRIA, Rennes, France (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Kusel</surname>
            <given-names>A.</given-names>
          </string-name>
          , et. al.:
          <article-title>Reality Check for Model Transformation Reuse: The ATL Transformation Zoo Case Study</article-title>
          .
          <source>In: 2nd Workshop on the Analysis of Model Transformations, AMT@Models'13</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>10</lpage>
          .
          <string-name>
            <surname>Miami</surname>
          </string-name>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Wagelaar</surname>
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Van Der Straeten R.</given-names>
            ,
            <surname>Deridder</surname>
          </string-name>
          <string-name>
            <surname>D.</surname>
          </string-name>
          :
          <article-title>Module superimposition: a composition technique for rule-based model transformation languages</article-title>
          .
          <source>In: Software &amp; Systems Modeling</source>
          , vol.
          <volume>9</volume>
          , issue 3, pp.
          <fpage>285</fpage>
          -
          <lpage>309</lpage>
          , Springer, Heidelberg (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Bravenboer</surname>
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kalleberg</surname>
            <given-names>K. T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vermaas</surname>
            <given-names>R.</given-names>
          </string-name>
          , Visser E.: Stratego/XT 0.17.
          <article-title>A language and toolset for program transformation</article-title>
          .
          <source>In: Science of Computer Programming</source>
          , vol.
          <volume>72</volume>
          , issue 1, pp.
          <fpage>52</fpage>
          -
          <lpage>70</lpage>
          ,
          <string-name>
            <surname>Elsevier</surname>
          </string-name>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. Object Management Group:
          <article-title>Meta Object Facility (MOF) 2</article-title>
          .0 Query/View/Transformation Specification.
          <source>Version 1</source>
          .1. OMG Document Number: formal/2011-01-01. http://www.omg.org/spec/QVT/1.1/PDF/
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9. International Telecommunication Union: Recommendation Z.
          <volume>101</volume>
          (
          <issue>12</issue>
          /
          <year>2011</year>
          ), Specification and
          <string-name>
            <given-names>Description</given-names>
            <surname>Language - Basic</surname>
          </string-name>
          <string-name>
            <surname>SDL</surname>
          </string-name>
          -
          <year>2010</year>
          . https://www.itu.int/rec/TREC-Z.
          <volume>101</volume>
          /en
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <article-title>SDL-UML Modeling and Validation (SU-MoVal) framework</article-title>
          , Open source software, http://www.su-moval.org/
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <article-title>Acceleo Model-to-Text transformation framework, Open source software</article-title>
          , http://www.eclipse.org/acceleo/
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>QVT</surname>
          </string-name>
          <article-title>Operational component of Eclipse, Open source software</article-title>
          , http://projects.eclipse.org/projects/modeling.mmt.qvt-oml
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>