<!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>A text model - Use your favourite M2M for M2T</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Edward D. Willink</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Is M2T necessarily distinct?</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Willink Transformations Ltd</institution>
          ,
          <addr-line>Reading, England, ed_at_willink.me.uk</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>Models provide a disciplined representation of information. Model-to-Model (M2M) transformations convert between model structures. When a more readable representation is required, Model-to-Text (M2T) transformations convert a model structure to a concatenation of character sequences. We ignore the obvious conversion dierences and demonstrate that an unmodied M2M tool can be used for M2T. We achieve this with a standard Text model that post-processes the M2M model output to yield formatted text.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>reaction was to fall back on orthodoxy; OMG provide distinct specications and
anyway M2M and M2T are obviously dierent. However after some reection,
it is clear that the "M2" facilities such as metamodels, loading, navigation,
expressions, queries and rules are the same for both M2M and M2T. Only the nal
"2M" or "2T" need be dierent. Requiring the use of distinct M2M and M2T
tools is not justiable.</p>
      <p>How might an M2M support text? Only one change and one enhancement
appear to be necessary:
change: output to a text le rather than model le
enhancement: better facilities for creating strings / character sequences
2.1</p>
      <sec id="sec-1-1">
        <title>Text Output</title>
        <p>
          In MOFM2T, the rules (templates) conspire to concatenate and return Strings.
M2M tools can already do this since the underlying language, typically OCL
[
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], has a String type and String operations. It is just necessary to amend
the output model declaration to identify that the overall String result is to be
emitted directly as a text File, rather than encoded as an XML le.
2.2
        </p>
      </sec>
      <sec id="sec-1-2">
        <title>Text Facilities</title>
      </sec>
      <sec id="sec-1-3">
        <title>Considering the following example output text:</title>
      </sec>
      <sec id="sec-1-4">
        <title>The name is "computedName".</title>
        <p>Typical M2T tools such as Acceleo or Xtend provide a forward escape to
embed a control expression within literal text.</p>
        <p>The name is "[self.name/]". -- MOFM2T/Acceleo with escaped OCL
The name is "this.name". -- Xtend with escaped Java</p>
        <p>A backwards escape may dene a multi-line text expression that concatenates
with its siblings and may have nested forward escapes.
’The name is "[self.name/]". ’
’’’The name is "this.name".</p>
        <p>’’’
-- MOFM2T
-- Xtend</p>
        <p>An OCL-based M2M without escapes may only concatenate explicitly.
’The name is "’+ self.name +’".’
-- OCL</p>
        <p>OCL provides a fairly modest String library and an overall expression
evaluation capability that allows complex String results to be computed. No change
is therefore mandated to enable an OCL-based M2M to be used as an M2T
although enhanced String capabilities could well be helpful for applications with
a high proportion of literal text.</p>
        <p>Considering the following example output with a repeated computation:
{ "firstComputedName", "secondComputedName" }</p>
        <p>A for loop facility with optional before/prex, separator and after/sux texts
is helpful. The examples below show Acceleo and then Xtend.
{ [for (p : P | somePs) separator( ’, ’)]"[p.name/]"[/for] }
{ FOR p : somePs SEPARATOR ’, ’"p.name"ENDFOR }</p>
        <p>An OCL-based M2M may use collect() for the content iteration, but the
separator splicing is verbose.
’{ ’+ somePs-&gt;collect(p | ’"’+ p.name +’"’)
-&gt;iterate(s; acc : String = ’’ |</p>
        <p>if acc = ’’ then s else acc +’, ’+ s endif
) +’ }’
3</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>M2M solution</title>
      <p>The need for an XML2XML transformation arises when there is a need to
manipulate some aspect of the XMI serialization of a model in a way that is not
accessible to a regular M2M. Typically there may be a need to impose some
policy on the xmi:ids that are a serialization rather than model artefact. There
is no xmi:id within the model technology space and so any solution that tries to
expose an xmi:id is messy.</p>
      <p>
        BØzevin [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] identied distinct model, grammar and XSD technology spaces
and the early versions of ATL [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] supported XML2XML transformation through
the use of custom injectors and extractors as shown in Figure 2. ATL’s weak
metamodel typing allowed the XML metamodel to remain a little vague.
Unfortunately these custom load and save functionalities have suered from bit rot
and are no longer available; XML2XML is no longer supported by ATL.
      </p>
      <p>The proprietary ATL injector and extractor are not necessary when using
EMF since the variant loading and saving functionality can be encapsulated
by a custom XML Resource allowing it to be used by any M2M tool. We may
therefore use the structure shown in Figure 3.</p>
      <p>
        The main diculty in implementing this approach lies in the absence of
a good metamodel for XML. After examining a few candidates, it was clear
that none was suitable as a standard against which users could write their
XML transformations. The SAX parser [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] is the de facto standard and so the
http://www.eclipse.org/qvt/2018/XML metamodel was dened to closely
correspond to the familiar SAX parsing events; startElement() creates an Element
and starts to populate it; endElement() completes population. The model
vocabulary of the XML metamodel is therefore obvious to anyone familiar with
the vocabulary of the SAX parser events.
      </p>
      <p>Migrating the functionality from proprietary ATL injector/extractor to EMF
Resources enables the XML technology space to be used whenever *.xmlmodel
is used as the le extension of an input/output model. No modication to tools
is required.
The same approach can be used to provide a much simpler and tool-independent
solution for using M2M for M2T. This is shown in Figure 4. The M2M transforms
to a Text output model which the Text save serializes as a conventional text le.</p>
      <p>The main challenge is to design a suitable Text metamodel.
3.3</p>
      <sec id="sec-2-1">
        <title>Text Structure</title>
        <p>
          Language parsers such as lex and yacc [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] and their many successors discover the
structure of source text by successively aggregating to more powerful concepts:
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>8 bit bytes in a source le/stream Multi-byte characters corresponding to Unicode ‘letters’ Multi-character tokens corresponding to ‘words’ Multi-token rules/productions corresponding to ‘clauses’ and ‘sentences’</title>
        <p>This conversion sequence is very successful for Text-to-Model conversion but
the rules/productions are not appropriate for Model-to-Text conversion since
the details of the whitespace formatting are typically discarded once the tokens
have been identied. For Model-to-Text purposes, some form of pretty printing
is necessary to make the result acceptable to a human reader. We would also like
to avoid the language-specic limitations of a typical Text-to-Model grammar.</p>
        <p>Traditional M2T tools just concatenate Character Sequences and so we might
consider that their text metamodel is just a Sequence of Character. Reifying
such a metamodel for M2M usage is easy but the need to assign each character
as a distinct model element is pretty unacceptable. Perhaps in QVTo:
... -- ’The name is’
characters += object text::Character { value := ’ ’; };
characters += object text::Character { value := ’"’; };
forEach (c : self.name.characters()) {</p>
        <p>characters += object text::Character { value := c; };
}
characters += object text::Character { value := ’"’; };
We should therefore look to some form of multi-Character model.</p>
        <p>A signicant challenge for practical M2T tools is providing satisfactory
indentation and inter-element separation for hierarchical and iterated text structures.
The challenge arises because indentation is used within string templates both to
indent the output text and to make the control expressions readable.</p>
        <p>For Acceleo, the conict between template and control characters can require
empirical iteration to get a satisfactory result. The documentation recommends
use of a separate pretty formatting pass if non-trivial formatting is needed.</p>
        <p>The Xtend UI uses a grey background to distinguish template characters.
This is helpful but not always perfect since the grey background is omitted from
new-line characters. Empirical programming cannot always solve the problem.
3.4</p>
      </sec>
      <sec id="sec-2-3">
        <title>Text Metamodel</title>
      </sec>
      <sec id="sec-2-4">
        <title>With a Text metamodel, we can separate the concerns.</title>
        <p>The M2M transformation language statements provide a readable exposition.
The Text Model declarations control pretty printing.</p>
        <p>The Text metamodel shown in Figure 5 compromises a tree of StringNode
elements organized by the ordered parent/children relationship. Additional
attributes control the pretty printing performed by the Text Saver.
The result text is formed as the concatenation of a depth-rst traversal of the
value of the text property of each StringNode.</p>
        <p>The detailed formatting of groups of children is facilitated by a prefix before
the rst, a separator between each child and a suffix after the last child.
Additionally an endText may follow the children even if there are no children.</p>
        <p>The indent species an indentation increment for this node. The cumulative
indentation of a node and its parents starts every non-empty line.</p>
        <p>An M2M transforms to create the StringNode tree comprising the important
text segments and formatting declarations that inuence the nal serialization.
No characters are provided that are not directed by the StringNode.</p>
        <p>The Text Saver is implemented by a custom EMF TextResource that replaces
the conventional XML serialization by the pretty printed text resulting from the
depth rst tree traversal and formatting declarations.</p>
        <p>
          A corresponding Text Loader is also implemented, mainly for test purposes.
The serialization during a Text Save is not fully reversible and so the
corresponding replacement functionality when loading is limited to identifying whitespace
indentation hierarchies and punctuation separators for matching indentations.
Any serious Text-to-Model application probably needs a more powerful approach
such as an Xtext parser [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ].
4
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Evaluation</title>
      <p>The Text Model has been used in conjunction with Eclipse QVTo to generate
C, H, Lex (Flex) and Y (Bison) les from an Ecore le for an auto-generated
XMI loader.</p>
      <p>No changes were required to Eclipse QVTo and only a couple of minor bug
reports were raised. Problems were easily circumvented. Overall there seemed to
be fewer problems than when using Acceleo or Xtend. All approaches share the
pleasant characteristic of M2T development that problems are clearly visualized
in the textual output. Additional debug output can provide helpful insights.
Development time was focussed on the correct content of the Flex and Bison
declarations to be generated rather than struggling with their formatting.</p>
      <p>Execution of the M2M for text is fast. The 2000 lines of the four XMI loader
les are generated in less than a second.
4.1</p>
      <sec id="sec-3-1">
        <title>Example</title>
        <p>The utility of this approach can be assessed by examining a very simple example
that is articially elaborated to demonstrate important facilities. The target
output is the textile snippet shown in Figure 6. The snippet comprises a heading,
a blank line then a list of separated formatted elements.</p>
        <p>The Acceleo solution in Figure 7 formats the heading and blank line as
literal text at the start of emitPrecedences2. The [for...]...[/for] construct
supports the formatting of p.name using a [.../] escape to access the name.
The additional separator argument denes the inter-text separation.</p>
        <p>The redundant emitPrecedences1 demonstrates that declarations occur as
escapes within the surrounding text literal and the need to re-escape in order to
make a nested call.</p>
        <p>The Xtend solution in Figure 8 is very similar except for the guillemet rather
than square bracket escapes.</p>
        <p>The redundant emitPreferences1 demonstrates that declarations occur as
functions within an outer control ow allowing a direct call to a nested function.
The inner emitPrecedences2 uses the ’’’...’’’ backward escape from the outer
control to the inner text template formatting. This allows the inner template to
be indented for readability.</p>
        <p>The new QVTo and Text Model solution is shown in Figure 9. It is a little
more verbose (or a little more modular). The inner formatting is factored out
as emitPrecedence3 that constructs a StringNode comprising just the formatted
precedence element. Since there is no string template capability, the self.name
expression needs no elaboration, but the text needs quoting and concatenation.
emitPrecedences2 provides the heading as its text, and iterates
emitPrecedences3 to dene the children. The separator and children StringNode elements
provide very similar capability to the for construct of Acceleo or Xtend.</p>
        <p>
          The redundant emitPrecedences1 demonstrates use of the init section to
bypass creation of a nested StringNode. The intermediate Text model instances
created by QVTo are shown in Figure 10.
The OMG issued the MOF Model to Text Transformation Language Request For
Proposal (MOFM2T RFP) in April 2007 as a follow on to the MOF 2.0 Query
/ Views / Transformations RFP (QVT RFP) which addressed only
Model-toModel transformation. The MOFM2T RFP [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] is very clear in its intent:
This RFP calls for a language and semantics for transforming models
into text. The goal is not to create yet another language, but to use
or extend existing OMG language(s). Justication must be provided for
creating yet another language.
        </p>
        <p>
          The nal MOFM2T submission [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] re-uses the MOF metamodel, OCL
expressions and QVT query syntax. However the orthodoxy of the traditional text
templates already in use by the submitters’ candidates prevailed. The
submission fails to re-use any of the transformation facilities of QVT. It is hard to claim
that MOFM2T is not ‘yet another language’. No justication is provided.
        </p>
        <p>In contrast, in this paper we re-use QVTo (or QVTr or ATL or ...) unchanged
to support M2T. This was possible with just one day of development for the
oneclass metamodel and its associated support.</p>
        <p>It might seem that a fully declarative transformation language such as QVTr
for M2T could result in the output paragraphs appearing in unpredictable
orders? But no, if all collections are ordered, a declarative transformation result
should also be ordered; only unordered collections may yield shued results.
5</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Future Work</title>
      <p>The http://www.eclipse.org/qvt/2018/TextModel metamodel and its
support was made available in June 2018 as part of the Eclipse Photon release once
the Eclipse QVTd support is also installed. It may be bundled with ATL and/or
QVTo in future releases.</p>
      <p>The current support is usable. The text model is powerful, but could be
extended. More signicant is the opportunity for syntax sugar to make that
power more accessible.
5.1
The inelegance of the splicing at the end of Section 2.2 may be mitigated by
adding a splice() iterator to the OCL Standard Library for ordered collections
of toString()-able elements. This could support:
’{ ’+ somePs-&gt;splice(p; separator= ’,’ | ’"’+ p.name +’"’) +’ }’
5.2</p>
      <sec id="sec-4-1">
        <title>Line Wrapping</title>
        <p>Line wrapping is not conventionally available for M2T. Separation of information
and rendering concerns enables the Text Model saver to respect a prevailing
indentation and line-breaking policy and wrap lines accordingly. Figure 5 shows
a nonBreakingSpace property that is intended to provide a facility to control
automatic wrapping of too-long lines. Long lines are rst broken at spaces or
tabs, then non-breaking space characters are replaced by space characters.
5.3</p>
      </sec>
      <sec id="sec-4-2">
        <title>Declarative Pretty Printing</title>
        <p>
          Tools such as Xtext have demonstrated how the addition of model assignment
annotations to an EBNF grammar can synthesize a useful parser/editor rather
than just a partial parser. No equivalent extension is available to add
prettyprinting annotations, rather Xtext supports manual programming of an
independent declarative class. TCS [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] has demonstrated that the required
linewrap/space-before/... declarations can be added to an annotated EBNF
grammar. The serializer can then be autogenerated as an M2M text transformation.
A friendly editor could oer show-assignment-annotations, and
show-formattingannotations options to avoid redundant clutter.
5.4
        </p>
      </sec>
      <sec id="sec-4-3">
        <title>String Templates</title>
        <p>In the introduction we identied a need to facilitate text synthesis. The
evaluation in Section 4 observed that String Templates are not essential, although
they may be useful, particularly for output comprising mostly boilerplate.</p>
        <p>A string template expression could be added to OCL, in much the same way
as it has been to Xtend, but learning from Xtend, Acceleo and MOFM2T, four
escape tokens are needed for the start and end of a forward or backward escape.
Acceleo has only 2, Xtend and MOFM2T just 3 which inhibits arbitrary nesting.
Again learning from Xtend, guillemets are very readable and so we might use:
ocl-expression
’string-template ’
forwards escape within literal text</p>
        <p>backwards escape - an ocl-expression</p>
        <p>An OCL expression starting or ending with a ’ can be disambiguated with
a space. Literal guillemets may be escaped.</p>
        <p>’literal-text’</p>
        <p>disambiguated ocl expression
escaped literal guillemets</p>
        <p>These escapes enable the core of our evaluation example from Section 4 to
nest an ocl-expression within a string-template within an ocl-expression within
a string-template within a QVTo statement.
map Pivot::ModelemitPrecedences2() : Text::StringNode {
’
h2(#Precedences). *Precedences*
getPrecedences(m)-&gt;splice(separator =
’
}</p>
        <p>An OCL evaluation of string-templates should compute the appropriate string
result. An M2M compilation may recognize that string-templates and splice()
are syntax sugar for Text Model capabilities.</p>
      </sec>
      <sec id="sec-4-4">
        <title>5.5 Incremental and Parallel M2T</title>
        <p>Incremental or parallel execution is dicult in an M2M with imperative
characteristics such as QVTo, but very practical in a purely declarative language such
as QVTr. Therefore if QVTr is used as the M2M, an incremental execution can
mark dirty StringNode elements in the tree that can then be selectively
reserialized. Unfortunately incremental QVTr execution is not yet available. A parallel
execution can distribute parts of the StringNode tree to multiple proocessors
and bring the results together at the end.
6</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Related Work</title>
      <p>Dening a really simple text model to allow an M2M transformation language
to be used for an M2T seems like a rather obvious idea. However string
template orthodoxy is so entrenched that this simple tree model seems to have been
overlooked. Consequently many tools and researchers use naive Strings and then
struggle to recover lost structure.</p>
      <p>
        Ogunyomi [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] introduces user-dened signatures to facilitate identifying text
segments that need updating. These should be available automatically as a
consequence of dependency analysis in a declarative M2M.
      </p>
      <p>
        Figure 11 shows a Feature Model for our use of M2M for M2T in the style
proposed by Rose [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
      </p>
      <p>This highlights that the mandatory forwards escaping is missing; we have
proposed an OCL extension to remedy this. In other respects, the M2M facilities
provide good feature coverage and additional features regarding model output.
The external text model provides for extensibility.</p>
      <p>
        Tisi et all [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] add Higher Order capabilities to ATL that include an ability to
embed concrete syntax within output patterns using |[...]| reverse escaping.
7
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusions</title>
      <p>We have introduced a very simple one-class metamodel that models text as a
tree of attributed character sequences.</p>
      <p>We have shown that this metamodel separates the content and pretty printing
concerns and enables any M2M to be used without modication as an M2T.</p>
      <p>We have demonstrated the usability of this approach by using Eclipse QVTo
to generate c, h, lex and y les from an Ecore metamodel.</p>
      <p>We have outlined minor extensions to OCL to improve OCL-based M2M
usability for M2T.</p>
      <p>We can therefore argue that this simple approach to M2T is more compliant
with the OMG MOFM2T RFP than the MOFM2T specication.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Aho</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sethi</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ullman</surname>
          </string-name>
          , J.: Compilers, Principles, Techniques and Tools, Addison Wesley,
          <year>1986</year>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Brownell</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          : SAX2, 'Reilly,
          <year>2002</year>
          , ISBN 0-596-00237-8.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Ivanov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          , BØzivin, J.,
          <string-name>
            <surname>Aksit</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <source>Technological Spaces: An Initial Appraisal. 1-6</source>
          . (
          <year>2002</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Jouault</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>BØzivin</surname>
          </string-name>
          , J.,
          <string-name>
            <surname>Kurtev</surname>
          </string-name>
          . I.:
          <article-title>TCS: A DSL for the specication of textual concrete syntaxes in model engineering</article-title>
          .
          <source>Model-Driven Engineering Languages and Systems: 17th International Conference, MODELS</source>
          <year>2014</year>
          , ,
          <source>September 28 October 3</source>
          ,
          <year>2014</year>
          , Valencia, Spain. https://research.utwente.nl/en/publications/tcsa
          <article-title>-dsl-for-thespecication-of-textual-concrete-syntaxes-in-mo</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Ogunyomi</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rose</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kolovos</surname>
            ,
            <given-names>D.:</given-names>
          </string-name>
          <article-title>User-dened Signatures for Source Incremental Model-to-text Transformation</article-title>
          . 5th International Conference, GPCE 2006, Portland, Oregon, USA, October
          <volume>22</volume>
          -
          <issue>26</issue>
          ,
          <year>2006</year>
          . http://ceur-ws.
          <source>org/</source>
          Vol-
          <volume>1331</volume>
          /p4.pdf
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Rose</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Matragkas</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kolovos</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Paige</surname>
            ,
            <given-names>R.:</given-names>
          </string-name>
          <article-title>A feature model for model-to-text transformation languages</article-title>
          .
          <source>In Modeling in Software Engineering (MISE)</source>
          ,
          <source>2012 ICSE Workshop on</source>
          (pp.
          <fpage>57</fpage>
          -
          <lpage>63</lpage>
          ). IEEE. DOI:
          <volume>10</volume>
          .1109/MISE.
          <year>2012</year>
          .6226015
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Siljamaki</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Additional M2T capability in QVTO. Eclipse QVTo project Bugzilla 396543</article-title>
          .
          <string-name>
            <surname>December</surname>
          </string-name>
          ,
          <year>2012</year>
          . https://bugs.eclipse.
          <source>org/396543</source>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Tisi</surname>
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cabot</surname>
            <given-names>J.</given-names>
          </string-name>
          , Jouault F.:
          <article-title>Improving Higher-Order Transformations Support in ATL</article-title>
          . In: Tratt L.,
          <string-name>
            <surname>Gogolla</surname>
            <given-names>M</given-names>
          </string-name>
          .
          <article-title>(eds) Theory and Practice of Model Transformations</article-title>
          .
          <source>ICMT 2010. Lecture Notes in Computer Science</source>
          , vol
          <volume>6142</volume>
          . Springer, Berlin, Heidelberg
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>MOF</surname>
          </string-name>
          <article-title>Model to Text Transformation Language Request For Proposal</article-title>
          .
          <source>OMG Document: ad/04-04-07</source>
          ,
          <year>April 2004</year>
          . https://www.omg.org/cgi-bin/doc?ad/04-04-07.pdf
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <article-title>Revised submission for MOF Model to Text Transformation Language RFP</article-title>
          . OMG Document: ad/06-09-
          <fpage>03</fpage>
          .
          <year>September 2006</year>
          . https://www.omg.org/cgi-bin/doc?ad/06- 09-03.pdf
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11. MOF Model to Text Transformation Language,
          <year>v1</year>
          .0,
          <string-name>
            <given-names>OMG</given-names>
            <surname>Document</surname>
          </string-name>
          Number: formal/2008-01-16, Object Management Group (
          <year>2008</year>
          ), http://www.omg.org/spec/MOFM2T/1.0
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Object</surname>
          </string-name>
          <article-title>Constraint Language</article-title>
          .
          <source>Version 2</source>
          .
          <fpage>4</fpage>
          ., OMG Document Number: formal/2014- 02-03, Object Management Group (
          <year>2009</year>
          ), http://www.omg.org/spec/OCL/2.4
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13. OMG.
          <source>Meta Object Facility (MOF) 2</source>
          .0 Query/View/Transformation Specication,
          <source>Version 1.3. OMG Document Number: ptc/16-06-03</source>
          ,
          <year>June 2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>14. Eclipse Acceleo Project. https://projects.eclipse.org/projects/modeling.m2t.acceleo</mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Eclipse ATL</surname>
          </string-name>
          <article-title>Project</article-title>
          . https://projects.eclipse.org/projects/modeling.mmt.atl
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Eclipse QVT Declarative</surname>
          </string-name>
          <article-title>Project</article-title>
          . https://projects.eclipse.org/projects/modeling.mmt.qvtd
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Eclipse QVT Operational Mappings</surname>
          </string-name>
          <article-title>Project</article-title>
          . https://projects.eclipse.org/projects/modeling.mmt.qvto
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>18. Eclipse Xtext Project. https://projects.eclipse.org/projects/modeling.tmf.xtext</mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>