<!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>Towards a Modular and Flexible Human-Usable Textual Syntax for EMF Models</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Dimitrios S. Kolovos</string-name>
          <email>dimitris.kolovos@york.ac.uk</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Richard F. Paige</string-name>
          <email>richard.paige@york.ac.uk</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Computer Science, University of York</institution>
          ,
          <addr-line>Deramore Lane, York, YO10 5GH</addr-line>
          ,
          <country country="UK">UK</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>This paper extends previous work on capturing models conforming to object-oriented metamodels using fuzzily-parsed XML, with mechanisms that facilitate file-level modularity and reuse. In particular we introduce facilities for importing and including content residing in external model files as well as a metamodel-independent templating mechanism that can facilitate encapsulation and reuse of complex model element structures.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        To create and edit models conforming to object-oriented metamodels defined
using languages such as MOF and Ecore, users need to be provided with
supporting tools that offer appropriate concrete (e.g. diagrammatic, textual,
table/treebased) syntaxes. Such tools can be generic and language-independent, or they
can be bound to a specific metamodel. In the EMF ecosystem,
metamodelindependent tools include the built-in reflective tree-based editor, an
implementation of the Human-Usable Textual Notation (HUTN) [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ], and EMF’s
builtin support for the XML Metadata Interchange (XMI) syntax [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. In terms of
language-specific tools, textual syntaxes can be defined using frameworks such
as Xtext [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] and MontiCore [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], diagrammatic syntaxes can be supported using
frameworks such as Sirius, Graphiti and GMF, and form-based editors can be
constructed using EMF Forms or EMF Parsley [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
      </p>
      <p>The main advantage of metamodel-specific tools is the ability to precisely
tailor the desired concrete syntax(es). However, they require an upfront investment
to develop, and continuous effort to maintain and keep up to date with their
underpinning frameworks (e.g. Xtext, Sirius). Metamodel-independent concrete
syntaxes on the other hand require no tool development and maintenance effort
but can be more rigid and verbose.</p>
      <p>Arguably, different approaches are more suitable depending on the expertise
and preferences of the intended users, the maturity, size and nature of the
metamodel in question, and the available resources to develop and maintain bespoke
tooling.</p>
      <p>
        In this line of work we are interested in metamodel-independent textual
concrete syntaxes. In this niche, the available options in the EMF ecosystem are
currently XMI and the OMG’s Human Usable Textual Notation. In [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] we
introduced a new metamodel-independent XML-based textual syntax called Flexmi,
which is supported by a fuzzy parser that does not require exact name
correspondence between the names of types and features in the metamodel and the
tag and attribute names used in the XML representation of a model. In this
paper, we report on enhancements to Flexmi with respect to modularity and
reuse.
      </p>
      <p>The rest of the paper is organised as follows. Section 2 provides an overview of
the Flexmi textual concrete syntax and Section 3 discusses extensions of Flexmi
that aim at enhancing modularity and reuse. Section 4 briefly discusses directions
for evaluating the presented enhancements, Section 5 reviews related work, and
Section 6 concludes the paper.
2</p>
    </sec>
    <sec id="sec-2">
      <title>An Overview of Flexmi</title>
      <p>
        In this section we provide an overview of Flexmi as introduced in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], using the
Simulink-like component-connector comps metamodel presented in Figure 1 as
a running example, and a minimal model of a speed monitoring component that
conforms to the said metamodel, which is graphically illustrated in Figure 2.
      </p>
      <p>The component in Figure 2 has two input ports (speed and location) and an
output port (warning). The incoming (geo-)location is forwarded to a
SpeedLimitCalculator component which returns the speed limit for the location. The speed
is then compared against the limit using the nested Comparator component and
if it exceeds it, a warning is produced.</p>
      <p>
        Listing 1.1 illustrates a Flexmi representation of the model in Figure 2. As
discussed in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], line 1 declares that the model is an instance of the comps
metamodel. When the Flexmi parser encounters the comp tag in line 2, it compares
it against the names of all classes in the metamodel, it finds that the closest
speed
location
      </p>
      <p>     
location             speedLimit</p>
      <p>     
SpeedLimitCalculator
     
in1             result
     
in2             
     
Comparator
warning
match is Component and therefore creates an instance of that type. In line 3,
the parser compares the in tag against the names of all containment references
of Component and all the valid contained types and finds that the best match
is the inPorts reference, hence it creates an instance of Port (which is the only
valid type for this reference) and adds it to the values of the reference. The same
tolerant fuzzy matching approach is used to map XML attributes to attributes
and non-containment references. For example, the n attribute in line 2 is mapped
to the name attribute of Component while the f and t attributes in lines 18-22
are mapped to the from and to non-containment references of class Connector.</p>
      <p>
        The complete parsing algorithm that Flexmi uses is discussed in detail in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
1 &lt;?nsuri comps?&gt;
2 &lt;comp n="SpeedMonitor" &gt;
3 &lt;in n="speed"/&gt;
4 &lt;in n="location"/&gt;
5 &lt;out n="warning"/&gt;
6
7 &lt;comp n="SpeedLimitCalculator"&gt;
8 &lt;in n="location"/&gt;
9 &lt;out n="speedLimit"/&gt;
10 &lt;/comp&gt;
11
12 &lt;comp n="Comparator" a="result = in1 &gt; in2"&gt;
13 &lt;in n="in1"/&gt;
14 &lt;in n="in2"/&gt;
15 &lt;out n="result"/&gt;
16 &lt;/comp&gt;
17
18 &lt;con f="SpeedMonitor.location"
19 t="SpeedMonitor.SpeedLimitCalculator.location"/&gt;
20 &lt;con f="speed" t="in1"/&gt;
21 &lt;con f="speedLimit" t="in2"/&gt;
22 &lt;con f="result" t="warning"/&gt;
23 &lt;/comp&gt;
      </p>
      <sec id="sec-2-1">
        <title>Listing 1.1. Speed monitor model in Flexmi</title>
        <p>3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Adding Modularity to Flexmi</title>
      <p>To capture larger models, the ability to split a model over multiple files is often
desirable. To address this need, Flexmi has been extended with two new XML
processing instructions to enable importing and including content from other
EMF models.</p>
      <sec id="sec-3-1">
        <title>3.1 Importing Models</title>
        <p>Suppose that we wish to specify the types of the ports of the speed monitoring
component in Listing 1.1. To render the type definitions reusable, we opt to
record them in a separate Flexmi file called types.flexmi (the name of the file
has no special semantics), which appears in Listing 1.2. The underscore tag in
line 2 is a placeholder to accommodate models (such as this one) which have
more than one root elements (very similarly to XMI’s xmi root tag).
1 &lt;?nsuri comps?&gt;
2 &lt;_&gt;
3 &lt;type n="boolean"/&gt;
4 &lt;type n="geo"/&gt;
5 &lt;type n="float"/&gt;
6 &lt;/_&gt;</p>
        <sec id="sec-3-1-1">
          <title>Listing 1.2. types.flexmi</title>
          <p>We can now import types.flexmi using an import processing instruction (line
2) from the speed monitoring model file and refer to its elements by id as
illustrated in Listing 1.3.
1 &lt;?nsuri comps?&gt;
2 &lt;?import types.flexmi?&gt;
3 &lt;comp n="SpeedMonitor" &gt;
4 &lt;in n="speed" t="float"/&gt;
5 &lt;in n="location" t="geo"/&gt;
6 &lt;out n="warning" t="boolean"/&gt;
7 ...
8 &lt;/comp&gt;</p>
          <p>Listing 1.3. Speed monitor model with port types in Flexmi</p>
          <p>At this point, it is worth contrasting Flexmi’s file-level model imports to
XMI’s model-element level references. While in Flexmi, types.flexmi needs to be
imported once, in the equivalent XMI presented in Listing 1.4, the path of the
imported file needs to be repeated every time a reference to one of its elements
is made (lines 3, 6 and 9). To the best of our knowledge, HUTN provides no
syntax for file-level imports either.
1 &lt;comps:Component xmlns:comps="comps" name="SpeedMonitor"&gt;
2 &lt;inPorts name="speed"&gt;
3 &lt;type href="types.xmi#/2"/&gt;
4 &lt;/inPorts&gt;
5 &lt;inPorts name="location"&gt;
6 &lt;type href="types.xmi#/1"/&gt;
7 &lt;/inPorts&gt;
8 &lt;outPorts name="warning"&gt;
9 &lt;type href="types.xmi#/0"/&gt;
10 &lt;/outPorts&gt;
11 ...
12 &lt;/comps:Component&gt;</p>
          <p>Listing 1.4. Speed monitor model with port types in XMI</p>
        </sec>
      </sec>
      <sec id="sec-3-2">
        <title>3.2 Including Models</title>
        <p>We now wish to specify the internal structure of the SpeedLimitCalculator
component (see Figure 2 and lines 7-10 of Listing 1.1). The intended inner structure
of the component is shown in Figure 3.</p>
        <p>location</p>
        <p>     
location             speedLimit
     
SpeedLimitDatastore
     </p>
        <p>             speedLimit
     
MinimumSpeedLimit
     
in1             result
     
in2             
     </p>
        <p>Max
speedLimit</p>
        <p>If we wish to do this in a separate model file (e.g. slc.flexmi as shown in
Listing 1.5), we can use Flexmi’s include processing instruction – which
operates in a very similar way to LaTeX’s input command – which instructs the
Flexmi parser to parse the contents of slc.flexmi as if they were a part of
the main model file. That is, we can replace lines 7-10 of Listing 1.1 with an
&lt;?include slc.flexmi?&gt; processing instruction.
1 &lt;?nsuri comps?&gt;
2 &lt;?import library.flexmi?&gt;
3 &lt;comp n="SpeedLimitCalculator"&gt;
4 &lt;in n="location"/&gt;
5 &lt;out n="speedLimit"/&gt;
6
7 &lt;comp n="MinimumSpeedLimit"&gt;
8 &lt;out n="speedLimit"/&gt;
9 &lt;/comp&gt;
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 &lt;/comp&gt;
&lt;comp n="SpeedLimitDatastore"&gt;
&lt;in n="location"/&gt;
&lt;out n="speedLimit"/&gt;
&lt;/comp&gt;
&lt;comp n="Max" a="result = (in1 &gt; in2) : in1 ? in2"&gt;
&lt;in n="in1"/&gt;
&lt;in n="in2"/&gt;
&lt;out n="result"/&gt;
&lt;/comp&gt;
&lt;!-- connections omitted --&gt;</p>
        <p>Listing 1.5. SpeedLimitCaclculator in Flexmi (slc.flexmi)
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>Reusable Model Element Templates</title>
        <p>The Comparator and Max components in Figures 2 and 3 are very similar in
terms of their structure as both of them contain two input ports called in1 and
in2 and an output port called result. Given that the comps language does not
define a notion of component inheritance, the only option available with a format
such as XMI or HUTN is to tolerate this near-duplication.</p>
        <p>To reduce duplication in such cases, without needing to extend the
instantiated metamodel, Flexmi introduces a templating mechanism. In Flexmi,
templates are specified using the reserved &lt;\_template&gt; XML tag. A template
can have a number of named parameters and a content nested tag under which
its content is defined. With reference to our example, we create a new Flexmi
file (library.flexmi ) which contains the definition of a binary_operator template.
1 &lt;?nsuri comps?&gt;
2 &lt;_&gt;
3 &lt;_template name="binary_operator"&gt;
4 &lt;parameter name="in"/&gt;
5 &lt;parameter name="out"/&gt;
6 &lt;content&gt;
7 &lt;comp&gt;
8 &lt;in name="in1" type="${in}"/&gt;
9 &lt;in name="in2" type="${in}"/&gt;
10 &lt;out name="result" type="${out}"/&gt;
11 &lt;/comp&gt;
12 &lt;/content&gt;
13 &lt;/_template&gt;
14 &lt;/_&gt;</p>
        <p>Listing 1.6. The binary-operator template (library.flexmi)</p>
        <p>The template has two parameters (in and out in lines 4 and 5) and its content
is a component (line 7) with two input ports (line 8 and 9) and one output port
(line 10). The types of these ports are controlled by the value of the in and out
parameters using string replacement. Templates can be instantiated in models
by name using an underscore prefix. Attributes of template invocations that also
start with an underscore are passed as values for their named parameters, while
all other attributes override the respective attributes of the template content
element. In the context of our running example, we can replace lines 12-16 of
Listing 1.1 with the following line (after importing library.flexmi ):
1 &lt;_binary_operator n="Comparator" a="result = in1 &gt; in2" _in="
float" _out="boolean"/&gt;
Listing 1.7. The Comparator component of Listing 1.1 replaced with an instantiation
of the binary_operator template</p>
        <p>and lines 16-19 of Listing 1.5 with the following line:
1 &lt;_binary_operator n="Max" a="result = (in1 &gt; in2) : in1 ? in2"
_in="float" _out="float"/&gt;
Listing 1.8. The Max component of Listing 1.5 replaced with an instantiation of the
binary_operator template</p>
        <p>While this form of parametric templates is an improvement over the complete
absence of a similar feature in XMI or HUTN, parameter passing through string
substitution can only serve relatively simple use-cases. To enable more complex
reuse scenarios, we have prototyped support for templates where the body is
specified using a model scripting and a model-to-text transformation language,
instead of XML.</p>
        <p>
          Listing 1.9 shows a more generic implementation of the binary_operator
template of Listing 1.6, named nary_operator which can produce components with
n input ports (of the same type) and one output port. Line 7 specifies that
the content of the template is produced by running the EOL program (EOL [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]
is an imperative model scripting language inspired by OCL) in lines 9-16. The
program creates a component (line 9), adds n appropriately-named input ports
(lines 10-13) and an output port (lines 14-15) to it, and returns the component
(line 16).
1 &lt;?nsuri comps?&gt;
2 &lt;_&gt;
3 &lt;_template name="nary_operator"&gt;
4 &lt;parameter name="n"/&gt;
5 &lt;parameter name="in"/&gt;
6 &lt;parameter name="out"/&gt;
7 &lt;content language="EOL"&gt;
8 &lt;![CDATA[
9 var comp : new Component;
10 for (i in 1.to(n.asInteger())) {
11 comp.inPorts.add(new Port(name="in" + i,
12 type=Datatype.all.selectOne(t|t.name=`in`)));
13 }
14 comp.outPorts.add(new Port(name="result",
15 type=Datatype.all.selectOne(t|t.name=out)));
16 return comp;
17 ]]&gt;
18 &lt;/content&gt;
19 &lt;/_template&gt;
20 &lt;/_&gt;
        </p>
        <p>
          Listing 1.9. The binary-operator template expressed using an EOL script
Another way to express the same template, but using the model-to-text EGL
[
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] language this time, is illustrated in Listing 1.10. Line 7 specifies that the body
of the template is a model-to-text transformation, while lines 9-14 specify the
EGL transformation that will produce the XML of the template instantiation,
which will then be parsed by Flexmi.
1 &lt;?nsuri comps?&gt;
2 &lt;_&gt;
3 &lt;_template name="nary_operator"&gt;
4 &lt;parameter name="n"/&gt;
5 &lt;parameter name="in"/&gt;
6 &lt;parameter name="out"/&gt;
7 &lt;content language="EGL"&gt;
8 &lt;![CDATA[
9 &lt;comp&gt;
10 [%for (i in 1.to(n.asInteger())){%]
11 &lt;in name="in[%=i%]" type="${in}"/&gt;
12 [%}%]
13 &lt;out name="result" type="${out}"/&gt;
14 &lt;/comp&gt;
15 ]]&gt;
16 &lt;/content&gt;
17 &lt;/_template&gt;
18 &lt;/_&gt;
        </p>
        <p>Listing 1.10. The binary-operator template expressed using an embedded
model-totext transformation in EGL</p>
        <p>Clearly, there are several things that can go wrong with template definition
and instantiation: templates can return elements that are incompatible with
their application context, they can contain syntax errors or they can throw
exceptions at runtime. At this early stage, the prototype implementation does
not attempt to prevent any of this exceptional behaviour; this is left as future
work. Flexmi, including the features discussed in this paper, is available as part of
the latest interim version of the Epsilon open-source model management platform
(eclipse.org/epsilon).
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Evaluation</title>
      <p>
        In the evaluation experiments conducted in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], Flexmi was shown to be
approximately slower than XMI to parse, which is to be expected given the additional
cost of fuzzy and tolerant matching. We have not attempted performance
evaluation for the work reported in this paper as the current version of the prototype
is intentionally not optimised for performance. To assess correctness and avoid
regressions, we have implemented a number of unit tests1 which exercise all the
features discussed in this paper. A more systematic evaluation in later
iterations of this work would comprise performance evaluation experiments to assess
the overhead of the new features (import, include, templates), as well as user
studies with real-world metamodels (e.g. UML, BPMN, Ecore) to assess the
perceived advantages (e.g. conciseness, modularity, reusability) and challenges (e.g.
uncertainty, fragility) of a fuzzy textual syntax such as Flexmi.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Related Work</title>
      <p>
        Literature related to fuzzy and tolerant parsing, and to identifying and repairing
structural discrepancies between XML documents and their corresponding XML
Schemas was reviewed in the paper that introduced Flexmi [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], and to the best of
our knowledge there have not been any noteworthy further developments since
the paper was written in 2016. The includes and imports features are common
in several textual notations and languages that support multi-file artefacts.
      </p>
      <p>
        With regard to the templating approach discussed in Section 3.3, the
Reuseware framework [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] also enables the definition and reuse of complex components
in EMF-based models, but it achieves this in an invasive manner, by modifying
the metamodel of the target domain-specific language. Several templating
solutions have been proposed specifically for UML (e.g. [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]) and since version 2.0
the language supports built-in support for parameterisable templates. By
contrast, the templating approach discussed in this paper aspires to be non invasive
and language-independent, but is still at a very early stage of development.
6
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusions and Future Work</title>
      <p>This paper has presented extensions to the language-agnostic Flexmi textual
concrete syntax and parser that aim at enhancing modularity and reuse. The
import and include processing instructions are straightforward and stable
extensions for splitting models over multiple files. The templating mechanism
discussed in Section 3.3 is more novel, interesting and underdeveloped - and hence
a clear direction for additional work.
1 https://git.eclipse.org/c/epsilon/org.eclipse.epsilon.git/
tree/tests/org.eclipse.epsilon.flexmi.test
Acknowledgements This research was part supported by the Aerospace
Technology Institute and Innovate UK via the SECT-AIR grant (project number
113099), and by the European Commission via the CROSSMINER (project
number 732223) and TYPHON (project number 780251) H2020 projects.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. Object Management Group.
          <string-name>
            <surname>Human-Usable Textual Notation Specification</surname>
          </string-name>
          ,
          <year>2004</year>
          . http://www.omg.org/spec/HUTN/1.0/.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Louis</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Rose</surname>
          </string-name>
          , Richard F. Paige, Dimitrios S. Kolovos, and
          <string-name>
            <surname>Fiona</surname>
            <given-names>A. C.</given-names>
          </string-name>
          <string-name>
            <surname>Polack</surname>
          </string-name>
          .
          <article-title>Constructing Models with the Human-Usable Textual Notation</article-title>
          . In Krzysztof Czarnecki, Ileana Ober,
          <string-name>
            <surname>Jean-Michel</surname>
            <given-names>Bruel</given-names>
          </string-name>
          , Axel Uhl, and Markus Völter, editors,
          <source>Model Driven Engineering Languages and Systems</source>
          , pages
          <fpage>249</fpage>
          -
          <lpage>263</lpage>
          , Berlin, Heidelberg,
          <year>2008</year>
          . Springer Berlin Heidelberg.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. Object Management Group.
          <source>XML Metadata Interchange (version 2.5.1)</source>
          ,
          <year>2015</year>
          . http://www.omg.org/spec/XMI/2.5.1/.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Moritz</given-names>
            <surname>Eysholdt</surname>
          </string-name>
          and
          <string-name>
            <given-names>Heiko</given-names>
            <surname>Behrens</surname>
          </string-name>
          .
          <article-title>Xtext: Implement Your Language Faster Than the Quick and Dirty Way</article-title>
          .
          <source>In Proceedings of the ACM International Conference Companion on Object Oriented Programming Systems Languages and Applications Companion</source>
          , OOPSLA '
          <volume>10</volume>
          , pages
          <fpage>307</fpage>
          -
          <lpage>309</lpage>
          , New York, NY, USA,
          <year>2010</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Holger</given-names>
            <surname>Krahn</surname>
          </string-name>
          , Bernhard Rumpe, and Steven Völkel.
          <article-title>MontiCore: a framework for compositional development of domain specific languages</article-title>
          .
          <source>International Journal on Software Tools for Technology Transfer</source>
          ,
          <volume>12</volume>
          (
          <issue>5</issue>
          ):
          <fpage>353</fpage>
          -
          <lpage>372</lpage>
          ,
          <year>Sep 2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>L.</given-names>
            <surname>Bettini</surname>
          </string-name>
          .
          <article-title>The EMF Parsley DSL for developing EMF applications</article-title>
          .
          <source>In 4th International Conference on Model-Driven Engineering and Software Development (MODELSWARD)</source>
          , pages
          <fpage>301</fpage>
          -
          <lpage>308</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Dimitrios</surname>
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Kolovos</surname>
          </string-name>
          , Nicholas Matragkas, and Antonio García-Domínguez.
          <article-title>Towards Flexible Parsing of Structured Textual Model Representations</article-title>
          .
          <source>In Proceedings of the 2nd Workshop on Flexible Model Driven Engineering co-located with ACM/IEEE 19th International Conference on Model Driven Engineering Languages and Systems (MoDELS</source>
          <year>2016</year>
          ), Saint-Malo, France, October 2,
          <year>2016</year>
          ., pages
          <fpage>22</fpage>
          -
          <lpage>31</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Dimitrios</surname>
            <given-names>S</given-names>
          </string-name>
          . Kolovos, Richard F. Paige, and
          <string-name>
            <surname>Fiona</surname>
            <given-names>A. C.</given-names>
          </string-name>
          <string-name>
            <surname>Polack</surname>
          </string-name>
          .
          <article-title>The Epsilon Object Language (EOL)</article-title>
          .
          <source>In Arend Rensink and Jos Warmer</source>
          , editors,
          <source>Model Driven Architecture - Foundations and Applications</source>
          , pages
          <fpage>128</fpage>
          -
          <lpage>142</lpage>
          , Berlin, Heidelberg,
          <year>2006</year>
          . Springer Berlin Heidelberg.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Louis</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Rose</surname>
          </string-name>
          , Richard F. Paige, Dimitrios S. Kolovos, and
          <string-name>
            <surname>Fiona</surname>
            <given-names>A. C.</given-names>
          </string-name>
          <string-name>
            <surname>Polack</surname>
          </string-name>
          .
          <article-title>The epsilon generation language</article-title>
          .
          <source>In Ina Schieferdecker and Alan Hartman</source>
          , editors,
          <source>Model Driven Architecture - Foundations and Applications</source>
          , pages
          <fpage>1</fpage>
          -
          <lpage>16</lpage>
          , Berlin, Heidelberg,
          <year>2008</year>
          . Springer Berlin Heidelberg.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>J. Henriksson</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Heidenreich</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Johannes</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Zschaler</surname>
            , and
            <given-names>U.</given-names>
          </string-name>
          <string-name>
            <surname>Assmann</surname>
          </string-name>
          .
          <article-title>Extending grammars and metamodels for reuse: the Reuseware approach</article-title>
          .
          <source>IET Software</source>
          ,
          <volume>2</volume>
          :
          <fpage>165</fpage>
          -
          <lpage>184</lpage>
          (
          <issue>19</issue>
          ),
          <year>June 2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>R. B. France</surname>
            ,
            <given-names>D. K.</given-names>
          </string-name>
          <string-name>
            <surname>Kim</surname>
            , Sudipto Ghosh, and
            <given-names>E.</given-names>
          </string-name>
          <string-name>
            <surname>Song</surname>
          </string-name>
          .
          <article-title>A UML-based pattern specification technique</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <volume>30</volume>
          (
          <issue>3</issue>
          ):
          <fpage>193</fpage>
          -
          <lpage>206</lpage>
          ,
          <year>March 2004</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>