<!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>Find-Replace as a Service of Graph-Based DSL Tool Development Framework</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Elina Kalnina</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dmitrijs Kosarevskis</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Agris Sostaks</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institute of Mathematics and Computer Science, University of Latvia</institution>
          ,
          <addr-line>Riga</addr-line>
          ,
          <country country="LV">Latvia</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2021</year>
      </pub-date>
      <fpage>21</fpage>
      <lpage>25</lpage>
      <abstract>
        <p>The tool support of modelling languages including graphical domain-specific languages is not at the level tool users have got used to in other areas. Various features typical in other tools are missing in modelling tools, for example, find, find-replace and others. We discuss principles of concrete syntaxbased find-replace for graph-based languages. We show how to add find-replace as a service of graphbased DSL tool development framework. The approach makes find-replace available to any language built with the framework.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Domain-Specific Languages</kwd>
        <kwd>Find-Replace</kwd>
        <kwd>Domain-Specific Modelling Languages</kwd>
        <kwd>DSL Tool development frameworks</kwd>
        <kwd>Concrete Syntax-Based Model Transformation</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        textual find and find-replace working in the textual representation of a single file. Metadit+ [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]
does not have find service. It has the replace menu, but it has diferent semantics. Actually, it is
an instance copier to uncouple references. Microsoft DSL Tools [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] support textual find and
ifnd-replace in the XML representation of models. AToMPM [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] does not have the support of
ifnd and find-replace, but it integrates concrete syntax-based model transformation language.
Find and find-replace working only in textual parts of a DSL is not enough for a language based
on typed attributed graphs. The context in terms of element types and their attributes is also
important.
      </p>
      <p>
        The concrete syntax-based find as a service of DSL tool development framework has been
proposed [
        <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
        ]. We demonstrate how to extend concrete syntax-based find to support
concrete syntax-based find-replace as a service of graphical (graph-based) DSL tool development
framework. We add find-replace to the DSL tool development framework ajoo[
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. However, it
is possible to apply the approach to other DSL tool development frameworks as well.
      </p>
      <p>The motivation and find-replace principles are given in Section 2. The simple find-replace
patterns and their semantics is discussed in Section 3. How the find-replace is added to the tool
is discussed in Section 4. The potential use cases are discussed in Section 5. The related work is
reviewed in Section 6.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Find-Replace Principles</title>
      <p>A typical use case of the find-replace in ofice applications (text editors, spreadsheets) is to help
maintain the consistency of a document. For example, to automatically correct all misspellings
of a word or to replace a full name of an organization with an acronym. Replace the American
version of a word with the British version of a word, e.g., modeling with modelling. Depending
on the task, it is possible to replace all occurrences or only some occurrences. In fact, the
findreplace feature in ofice applications is more powerful than most users are aware of. Besides
simple textual find, tools support regular expressions, invisible symbols, formatting conditions,
etc. However, for most users, it is enough with simple textual find-replace.</p>
      <p>In the paper, we consider graphical or graph-based diagrams. The question is, what is
findreplace for a graph-based diagram? Of course, we could use traditional textual find-replace, but
this way it is not possible to restrict find query to look for a match only in certain property of a
specific element type. Besides, the user may want to modify not only textual properties but
also the structure of a diagram. In the general case, find-replace for graph-based languages is a
special type of graph/model transformation - unidirectional in-place transformation. It should
be possible to execute transformation for all or some manually selected matches only and to
distinguish the find part from the replace part of the transformation.</p>
      <p>The purpose of introducing find-replace is to improve the usability of tools, built using a
DSL tool definition framework. We propose to provide find-replace as a universal service of
a DSL tool development framework to enable find-replace in any graph-based DSL tool built
using the framework. The potential users of find-replace are modellers working with a DSL.
Users who can create models in a DSL should be able to use find-replace to modify models in a
DSL, as well. The potential users are familiar with the concrete syntax of a DSL. Most probably
they are not familiar with the abstract syntax of a DSL. Therefore, we propose to use concrete
syntax-based find-replace instead of traditional model transformation languages.</p>
      <p>
        Of course, for complicated find-replace tasks, traditional model transformations can be used.
However, there are a few things to consider:
• Typically, model transformation languages use the abstract syntax of the model. Therefore,
to write a model transformation the user should be familiar with the encoding of models
used by the DSL tool definition framework.
• The user should be familiar with the model transformation language.
• The transformation language should work in the technical space of the DSL tool
development framework. Various technical spaces or repositories are used by DSL tools, e.g.,
Sirius [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] use EMF/Ecore [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], ajoo [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] use MongoDB [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], MS DSLs [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] use XML as data
store and XSD as schema. The only technical space from these with appropriate model
transformation support is EMF/Ecore [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>There are a few concrete syntax-based model transformation approaches available. We discuss
them in detail in Section 6. However, none of the approaches has been integrated with a DSL
tool definition framework to support find-replace. We in contrast use the definition of a DSL in
a DSL tool definition framework to provide a DSL specific find - replace transformation service.
The concrete syntax of a DSL is used to define find-replace transformation.</p>
      <p>
        The concrete syntax-based find-replace is based on the concrete syntax-based find [
        <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
        ].
Any DSL diagram or a fragment of a DSL diagram can serve as a find query in the concrete
syntax-based find. In the find-replace, however, there are two fragments of a DSL diagram:
fragment used as find query and fragment describing a result of a replace operation, similarly
to find-replace in ofice applications. However, to support more complicated transformations,
the relation between find and replace patterns is required. We call it the find-replace edge. The
semantics of the find-replace edge and patterns is described in Section 3.
      </p>
      <p>Similarly to the concrete syntax-based find, any DSL diagram can be used as the find-replace
diagram. However, to draw a find-replace pattern, find-replace elements (find-replace edge)
should be enabled in a palette of a DSL diagram. After a find-replace pattern has been created it
is possible to execute it. The find-replace is executed in two steps. The first step is to execute
the find query. The result of the find query is a list of matches grouped by diagrams. The
execution of the replace step is supervised. The user may select to perform replace operation
for a specific match, all matches in a diagram or for all matches in all diagrams. Anyway, the
replace operation for each match is executed separately. The activity diagram describing the
usage of the find-replace is given in Fig. 1.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Find-Replace Semantics</title>
      <p>When defining find-replace transformation, it is required to distinguish the fragment to be
found and the replace fragment describing how the result is obtained. We call these fragments of
a diagram - patterns - a find pattern (or left-hand side) and a replace pattern (or the right-hand
side), both together find-replace pattern. Both sides of the find-replace pattern use the same
language. The find-replace edge is used to define the correspondence between the left-hand
side and the right-hand side. To distinguish between multiple find-replace edges, it is possible
to give a name to a find-replace edge. (The examples are given in Section 5.)</p>
      <p>The find-replace is executed in two steps - find and replace. Before the execution of the find
step, the find-replace diagram is validated. The diagram is considered invalid, if it is not possible
to distinguish the left-hand side (the find pattern) and the right-hand side (the replace pattern)
of the diagram (e.g., circular usage of the find-replace edge is detected), if the expressions are
incorrect, etc.</p>
      <p>A DSL element (node) at the source of a find-replace edge is used as a starting point for a
ifnd query. The whole pattern related to the node is matched. A set of elements to be matched
may be restricted using constraints on attribute values. A constraint on string type attribute
is matched using substring semantics. For other attribute types, equivalence is used. A match
should satisfy all constraints defined by left-hand side patterns and attribute values. If there
are multiple unrelated sub-graphs at the source of the find-replace diagram, each subgraph is
matched separately. If there are multiple matches of the subgraphs in the diagram, the Cartesian
product is used to produce a set of find results.</p>
      <p>The result of the find step is a list of diagrams and a list of matches in a diagram (see Fig. 4).
Afterwards, a match or multiple matches may be selected for execution of the replace operation.
It should be noted that there may be overlapping matches. When the replace operation for
a match is executed, all overlapping matches are marked as conflicting. It is not possible to
execute a match marked as conflicting. If the user selects to replace all matches in a diagram,
then replace operation is executed for each match. Matches marked as conflicting are skipped.
It is also possible to replace all matches in all diagrams. In this case, the process of replacing all
matches in a diagram is repeated for each diagram.</p>
      <p>The replace operation for each selected match is executed separately. The correspondence
between the match and the find pattern is used for executing the replace operation. The
execution of the replace operation relay on element types in a DSL. In general, the execution of
the replace step consists of the following substeps (some substeps may be skipped if they are
not necessary):
• Create a target structure: The semantics of the replace pattern is to create all elements on
the right-hand side of a find-replace edge.
• Copy attribute values: A value of an attribute in the source element is copied to an attribute
in the target element if they have the same name and type. If there is no appropriate
attribute in the target model then it is ignored. If elements at the source and target of the
ifnd-replace edge have the same type it is possible to copy all attribute values. If multiple
ifnd-replace edges enter a node attributes from all source elements of find-replace edges
are copied. If multiple source elements have attributes with the same name and type the
expressions should be used.
• Move edges to target: For each edge type, there is a collection of the node types usable
as a source of the edge and node types usable as a target of an edge. Therefore, only
edges usable with the target node type are moved to the new element. Other edges
are ignored in the step. (They are removed afterwards.) If elements at the source and
target of the find-replace edge have the same type it is possible to move all edges. If
multiple find-replace edges enter a node the edge ends are moved from all source nodes
of find-replace edges.
• Set attribute values using expressions defined in the target elements: The simple
expression language is used to set attribute values. It is necessary to use expressions if names of
attributes difer or if there are attributes with the same name in multiple elements. See
expression example in Fig. 6. The following elements are supported in the expression
language: Attribute name (supported if only one find replace-edge enters the target
element), Name of the find-replace edge followed by the attribute name (the name of the
ifnd-replace edge is prefixed with the “@” symbol and followed with “.” and the attribute
name), Constants, String operations of previously mentioned elements (concatenation,
substring, split etc.).
• Remove instances of source elements (related to the find-replace edge): All related
elements e.g., edges not moved in the previous step are removed. All nodes at the source
of the find-replace edge are removed. The edge is removed if it satisfies the following
conditions: the edge is included in a match processed; both its ends have outgoing
findreplace edges. A specific find-replace element type - delete node is used if it is required
to remove a node.</p>
    </sec>
    <sec id="sec-4">
      <title>4. Find-Replace in a Tool</title>
      <p>It is possible to implement find-replace principles in any graphical DSL tool development
framework. However, the encoding used by tools difer. An important part of find-replace
transformation implementation is the translation of the concrete syntax into the abstract syntax.
This part is tool-specific. Another important issue is the technical space supported by the tool.</p>
      <p>
        We implement find-replace in the web-based DSL tool development framework - ajoo [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. A
DSL editor in the ajoo framework is created by defining diagram types and their node types and
edge types. For each edge type supported source and target node types are defined. For the node
and edge types supported attribute types (named compartments types in the ajoo framework)
are defined. There is a specialization relationship between node types. The semantics is that
children inherit edge types supported by the parent. Diagrams in the ajoo framework are
encoded similarly. Diagrams consist of nodes and edges. Nodes and edges contain attributes
(compartments). Each instance is related to its type.
      </p>
      <p>To enable find-replace in a DSL, we provide service to extend the definition of a DSL with
ifnd-replace specific elements. We extend DSL definition with the find-replace edge type, delete
node type and also an abstract node type. The abstract node type is serving as the source and
the target of the find-replace edge. All node types in the DSL diagram and the delete node type
inherit from this abstract node type. This way the find-replace edge is usable between any two
node types in a DSL diagram.</p>
      <p>
        The ajoo framework is based on Meteor [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] and uses MongoDB [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] as a data store. We
implemented find-replace from scratch as to our knowledge there is no model transformation
approaches working in the Meteor - MongoDB technical space. However, if the technical space
already has support for model transformations (for example, EMF-based framework Sirius), find
and find-replace patterns may be translated to model transformation rules.
      </p>
    </sec>
    <sec id="sec-5">
      <title>5. Find-Replace Usage Scenarios</title>
      <p>We discuss a few scenarios where find-replace may be useful for a DSL user.</p>
      <p>• Language evolution: As a graphical DSL evolves (the language changes) it is required to
update DSL models accordingly. Find-replace may be used to update models. At first,
the DSL is extended with new elements. Afterwards, find-replace is used to transform
models to the new constructs. In the end, unnecessary DSL elements are removed.
• Model evolution: Find-replace may be useful to adapt a model according to changes
required. In this case, the language is the same, but usage principles and conventions
changes. For example, it may be necessary to rename model elements according to new
naming conventions or to restructure diagrams.
• Model clean-up: Detect and remove harmful elements from the model. This may be
necessary if some constructs cause problems in DSL execution. The find-replace may be
used to modify problematic elements or to remove unnecessary elements. This approach
may also be used to improve the readability of the models or to check whether models
conform to naming and/or formatting conventions, etc.</p>
      <p>We demonstrate the model evolution using simple activity diagram example. Activity diagram
describing ticket vending process is given in Fig. 2. There are four node kinds in the diagram:
start symbol (black circle), end symbol (black circle with white halo), action (rounded rectangle),
condition (diamond). The action has two properties performer (black text) and name (blue text).
Beside nodes, there are edges with optional conditions.</p>
      <p>As with text documents, it is important to maintain the consistency of models, as well. We
have identified three required improvements in the diagram. The first improvement required
in the diagram is to modify the performer name of actions performed by the ticket vending
machine. It is required to replace the performer "vending machine" with the performer "Ticket
vending machine". The find-replace transformation is given in Fig. 3. The result of the find
query of this transformation (in the ajoo framework) is given in Fig. 4. It is possible to highlight
ifnd results in a diagram (Fig. 5.). Afterwards, it is possible to replace one match or all matches
in a diagram. The result after replacing all matches in a diagram is given in Fig. 5.</p>
      <p>The second improvement required is to introduce merge symbol. There are various styles of
how transitions are used in activity diagrams. In the example (Fig. 2) multiple edges enter action
node. There is another style, where only one transition can enter an action. To merge multiple
lfows merge symbol (diamond similar to condition) is used. Find-replace pattern introducing
merge symbol and the result of the transformation is given in Fig. 6.</p>
      <p>The third improvement of the example is to extract Object from actions. In the UML activity
diagrams, there is Object symbol used to describe real-life objects sent from one action to
another action. If the ticket vending machine "Dispense" something to a passenger, it should be
extracted as an object in the activity diagram. The transformation and result is given in Fig. 6.</p>
      <p>The find-replace patterns were demonstrated using one DSL diagram. However, the find step
of a transformation finds matches in all diagrams accessible to a user.</p>
    </sec>
    <sec id="sec-6">
      <title>6. Related Work</title>
      <p>The find-replace is a model transformation of a special kind. It is in-place transformation:
endogenous, unidirectional, the same model is used as a source and as a target of a model
transformation. There are additional requirements set for the find-replace task:
• It should be possible to execute transformation for all or some manually selected matches
only. Therefore, it should be possible, to distinguish find step and replace step.
• The modeller working with a DSL should be able to define find - replace transformation,
therefore the concrete syntax of the DSL should be used.
• The transformation should work in the technical space of a DSL tool development
framework.</p>
      <p>Traditionally, model transformation is defined using the abstract syntax of the language.</p>
      <p>
        However, there are concrete syntax-based approaches, as well. The concrete syntax-based
approaches are: concrete syntax-based model transformations [
        <xref ref-type="bibr" rid="ref12 ref13 ref14 ref15 ref16 ref6">12, 13, 14, 15, 6, 16</xref>
        ], model
transformations by example [
        <xref ref-type="bibr" rid="ref17 ref18 ref19">17, 18, 19</xref>
        ] and model transformations by demonstration [
        <xref ref-type="bibr" rid="ref20 ref21 ref22">20, 21, 22</xref>
        ].
      </p>
      <p>In general, the concrete syntax-based find-replace is a subset of concrete syntax-based model
transformations. Still, the find-replace use case sets certain constraints on concrete syntax
transformation definition’s means and style. There is no need for control structures because
only a single find or find-replace pattern will be executed at a time. To ensure a similar style
of find and find-replace features, the pattern used in the find query should be the same as the
one used in the find-replace operations. It should be noted, that the find-replace is intended for
small incremental updates of a model. It is not a full transformation language.</p>
      <p>
        Source and target model pairs are used to generate model transformation in model
transformations by example. It may be necessary to provide multiple model pairs, to provide
correspondences or to edit generated transformation, depending on the approach. Model transformations
by demonstration is a special type of model transformations by example. Here the target model
is obtained using demonstrations. The demonstration-based approaches are endogenous, but
they don’t use correspondences. Model transformation by example and model transformation
by demonstration approaches rely on constraint guessing for transformation. In our approach,
the constraints are stated explicitly by setting attribute values. The [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] analyses the first wave
of concrete syntax-based approaches. It states that "no correspondence-based approach has
been proposed for endogenous transformations, so far." To our knowledge, there is still no other
endogenous correspondence and concrete syntax-based approach.
      </p>
      <p>
        Model transformations are defined as annotated concrete syntax diagrams of a tool in VMTL
[
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. Although these ideas may be generalized to DSL tool building frameworks, the current
implementation requires defining a transformation from each language/tool used to the format
supported by the transformation execution engine. However, in our approach, find-replace
features should be available to any language defined in the DSL tool definition framework. It
should also be noted that in VMTL a special language of annotations is used in the patterns.
      </p>
      <p>
        Concrete syntax-based model transformations are integrated with the DSL tool development
framework in the AToMPM [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. The transformation rule in the AToMPM consists of Left - Hand
Side, Right - Hand Side and Negative Application conditions. To relate Left - Hand Side and Right
- Hand Side elements "__pLabel" property is used. We in contrast use a visual representation of
relations - the find-replace edge. Constraint and action code in AToMPM patterns is written in
Python. Our approach targets modellers, often without a programming background. We think
that for users without programming background it is easier to gasp relations than variables.
The AToMPM supports full-fledged transformation language while our approach is tailored for
small incremental model updates. Besides, currently, it is not possible to execute AToMPM rules
only for some manually selected matches as it is required in the find-replace use case.
      </p>
    </sec>
    <sec id="sec-7">
      <title>7. Conclusions</title>
      <p>
        In the paper, a universal find-replace approach as a service of DSL tool development framework
is proposed. The find-replace operation is performed in two steps. At first, the find operation is
performed. The replace operation is performed for each match of the find operation separately.
The user may select to perform the replace operation for one or multiple matches at once. If there
are conflicting matches, the user must select one to be replaced. The find-replace is implemented
in the web-based DSL tool development framework ajoo [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. However, the approach could
be implemented in other DSL tool development frameworks, as well. The approach relies on
element types. The encoding used by tools difer, but element types are present in one way or
another in almost all DSL tool development frameworks. It should be noted, that other graphical
element types are supported in other tools, like box in a box or pins. The approach proposed in
the paper could be extended to support other element types, as well.
      </p>
      <p>The find-replace approach proposed in the paper is not a complete concrete syntax-based
transformation language. Thus, it is not possible to write any transformation as a find-replace
pattern. It is not the purpose of the approach. The find-replace is intended for small incremental
updates of a model. This is how find-replace is typically used in other tools (text editors, etc.).</p>
    </sec>
    <sec id="sec-8">
      <title>Acknowledgments</title>
      <p>The work has been supported by the European Regional Development Fund within the project #
1.1.1.2/16/I/001, application # 1.1.1.2/VIAA/1/16/180 “Concrete Syntax Based Find for Graphical
Domain Specific Languages”.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>J.</given-names>
            <surname>Whittle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hutchinson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Rouncefield</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Burden</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Heldal</surname>
          </string-name>
          ,
          <article-title>Industrial adoption of model-driven engineering: Are the tools really the problem?</article-title>
          , in: A.
          <string-name>
            <surname>Moreira</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Schätz</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Gray</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Vallecillo</surname>
          </string-name>
          , P. Clarke (Eds.),
          <source>Model-Driven Engineering Languages and Systems</source>
          , Springer Berlin Heidelberg, Berlin, Heidelberg,
          <year>2013</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>17</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2] MetaCase, Metaedit+
          <volume>5</volume>
          .1.,
          <year>2020</year>
          . URL: http://www.metacase.com/.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Microsoft</surname>
          </string-name>
          ,
          <article-title>Modeling sdk for visual studio - domain-specific languages</article-title>
          .,
          <year>2020</year>
          . URL: https: //msdn.microsoft.com/en-us/library/bb126259.aspx.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Eclipse</surname>
          </string-name>
          , Sirius,
          <year>2020</year>
          . URL: https://www.eclipse.org/sirius/.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Sprogis</surname>
          </string-name>
          ,
          <article-title>Dsml tool building platform in web</article-title>
          , in: G. Arnicans,
          <string-name>
            <given-names>V.</given-names>
            <surname>Arnicane</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Borzovs</surname>
          </string-name>
          , L. Niedrite (Eds.),
          <source>Databases and Information Systems</source>
          , Springer International Publishing, Cham,
          <year>2016</year>
          , pp.
          <fpage>99</fpage>
          -
          <lpage>109</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>E.</given-names>
            <surname>Syriani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Vangheluwe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Mannadiar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Hansen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. Van</given-names>
            <surname>Mierlo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Ergin</surname>
          </string-name>
          ,
          <article-title>Atompm: A web-based modeling environment</article-title>
          ., Demos/Posters/StudentResearch@ MoDELS
          <year>2013</year>
          (
          <year>2013</year>
          )
          <fpage>21</fpage>
          -
          <lpage>25</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>E.</given-names>
            <surname>Kalnina</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sostaks</surname>
          </string-name>
          ,
          <article-title>Towards concrete syntax based find for graphical domain specific languages</article-title>
          ,
          <source>in: 2019 ACM/IEEE 22nd International Conference on Model Driven Engineering Languages and Systems Companion</source>
          <volume>(</volume>
          <string-name>
            <surname>MODELS-C)</surname>
          </string-name>
          , IEEE,
          <year>2019</year>
          , pp.
          <fpage>236</fpage>
          -
          <lpage>242</lpage>
          . doi:
          <volume>10</volume>
          .1109/MODELS-C.
          <year>2019</year>
          .
          <volume>00038</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>E.</given-names>
            <surname>Kalnina</surname>
          </string-name>
          ,
          <article-title>Concrete syntax-based find for graphical dsls</article-title>
          ,
          <source>in: Proceedings of the 23rd ACM/IEEE International Conference on Model Driven Engineering Languages and Systems: Companion Proceedings, MODELS '20</source>
          ,
          <string-name>
            <surname>Association</surname>
          </string-name>
          for Computing Machinery, New York, NY, USA,
          <year>2020</year>
          . URL: https://doi.org/10.1145/3417990.3422008. doi:
          <volume>10</volume>
          .1145/3417990. 3422008.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>D.</given-names>
            <surname>Steinberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Budinsky</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Paternostro</surname>
          </string-name>
          , E. Merks, EMF: Eclipse Modeling Framework, Eclipse Series, 2 ed.,
          <string-name>
            <surname>Addison-Wesley</surname>
          </string-name>
          , Upper Saddle River, NJ,
          <year>2009</year>
          . URL: https://www. safaribooksonline.com/library/view/emf-eclipse-modeling/9780321331885/.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>I. MongoDB</surname>
          </string-name>
          , Mongodb,
          <year>2020</year>
          . URL: https://www.mongodb.org/.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>M.</given-names>
            <surname>Software</surname>
          </string-name>
          , Meteor,
          <year>2020</year>
          . URL: https://www.meteor.com/.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>T.</given-names>
            <surname>Baar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Whittle</surname>
          </string-name>
          ,
          <article-title>On the usage of concrete syntax in model transformation rules</article-title>
          , in: I.
          <string-name>
            <surname>Virbitskaite</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Voronkov (Eds.),
          <source>Perspectives of Systems Informatics</source>
          , Springer Berlin Heidelberg, Berlin, Heidelberg,
          <year>2007</year>
          , pp.
          <fpage>84</fpage>
          -
          <lpage>97</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>M.</given-names>
            <surname>Schmidt</surname>
          </string-name>
          ,
          <article-title>Transformations of uml 2 models using concrete syntax patterns</article-title>
          , in: N.
          <string-name>
            <surname>Guelfi</surname>
          </string-name>
          , D. Buchs (Eds.),
          <source>Rapid Integration of Software Engineering Techniques</source>
          , Springer Berlin Heidelberg, Berlin, Heidelberg,
          <year>2007</year>
          , pp.
          <fpage>130</fpage>
          -
          <lpage>143</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>R.</given-names>
            <surname>Grønmo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Møller-Pedersen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. K.</given-names>
            <surname>Olsen</surname>
          </string-name>
          ,
          <article-title>Comparison of three model transformation languages</article-title>
          ,
          <source>in: European Conference on Model Driven Architecture-Foundations and Applications</source>
          , Springer,
          <year>2009</year>
          , pp.
          <fpage>2</fpage>
          -
          <lpage>17</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>R.</given-names>
            <surname>Grønmo</surname>
          </string-name>
          ,
          <article-title>Using Concrete Syntax in Graph-based Model Transformations</article-title>
          ,
          <source>Ph.D. thesis</source>
          , University of Oslo,
          <year>2010</year>
          . Doctoral thesis.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>V.</given-names>
            <surname>Acretoaie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Störrle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Strüber</surname>
          </string-name>
          ,
          <article-title>Vmtl: a language for end-user model transformation</article-title>
          ,
          <source>Software &amp; Systems Modeling</source>
          <volume>17</volume>
          (
          <year>2016</year>
          )
          <fpage>1139</fpage>
          -
          <lpage>1167</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>M.</given-names>
            <surname>Kessentini</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Sahraoui</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Boukadoum</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O. B.</given-names>
            <surname>Omar</surname>
          </string-name>
          ,
          <article-title>Search-based model transformation by example</article-title>
          ,
          <source>Software &amp; Systems Modeling</source>
          <volume>11</volume>
          (
          <year>2012</year>
          )
          <fpage>209</fpage>
          -
          <lpage>226</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>D.</given-names>
            <surname>Varró</surname>
          </string-name>
          ,
          <article-title>Model transformation by example</article-title>
          ,
          <source>in: International Conference on Model Driven Engineering Languages and Systems</source>
          , Springer,
          <year>2006</year>
          , pp.
          <fpage>410</fpage>
          -
          <lpage>424</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>M.</given-names>
            <surname>Wimmer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Strommer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Kargl</surname>
          </string-name>
          , G. Kramler,
          <article-title>Towards model transformation generation by-example</article-title>
          ,
          <source>in: 2007 40th Annual Hawaii International Conference on System Sciences (HICSS'07)</source>
          , IEEE,
          <year>2007</year>
          , pp.
          <fpage>285b</fpage>
          -
          <lpage>285b</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>P.</given-names>
            <surname>Langer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Wimmer</surname>
          </string-name>
          , G. Kappel,
          <article-title>Model-to-model transformations by demonstration</article-title>
          , in: L.
          <string-name>
            <surname>Tratt</surname>
          </string-name>
          , M. Gogolla (Eds.),
          <source>Theory and Practice of Model Transformations</source>
          , Springer Berlin Heidelberg, Berlin, Heidelberg,
          <year>2010</year>
          , pp.
          <fpage>153</fpage>
          -
          <lpage>167</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>V.</given-names>
            <surname>Acretoaie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Störrle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Strüber</surname>
          </string-name>
          ,
          <article-title>Transparent model transformation: Turning your favourite model editor into a transformation tool</article-title>
          , in: D.
          <string-name>
            <surname>Kolovos</surname>
          </string-name>
          , M. Wimmer (Eds.),
          <source>Theory and Practice of Model Transformations</source>
          , Springer International Publishing, Cham,
          <year>2015</year>
          , pp.
          <fpage>121</fpage>
          -
          <lpage>130</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Sun</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>White</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Gray</surname>
          </string-name>
          ,
          <article-title>Model transformation by demonstration</article-title>
          , in: A.
          <string-name>
            <surname>Schürr</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          Selic (Eds.),
          <source>Model Driven Engineering Languages and Systems</source>
          , Springer Berlin Heidelberg, Berlin, Heidelberg,
          <year>2009</year>
          , pp.
          <fpage>712</fpage>
          -
          <lpage>726</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>G.</given-names>
            <surname>Kappel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Langer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Retschitzegger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Schwinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Wimmer</surname>
          </string-name>
          ,
          <article-title>Model transformation by-example: A survey of the first wave</article-title>
          , in: A.
          <string-name>
            <surname>Düsterhöft</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Klettke</surname>
          </string-name>
          , K.-D. Schewe (Eds.),
          <source>Conceptual Modelling and Its Theoretical Foundations: Essays Dedicated to Bernhard Thalheim on the Occasion of His 60th Birthday</source>
          , Springer Berlin Heidelberg, Berlin, Heidelberg,
          <year>2012</year>
          , pp.
          <fpage>197</fpage>
          -
          <lpage>215</lpage>
          . URL: https://doi.org/10.1007/978-3-
          <fpage>642</fpage>
          -28279-9_
          <fpage>15</fpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>642</fpage>
          -28279-9_
          <fpage>15</fpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>