<!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>E cient Model Querying with VMQL</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Vlad Acretoaie</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Harald Storrle</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Applied Mathematics and Computer Science, Technical University of</institution>
          <country country="DK">Denmark</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Context: Despite model querying being an important practical problem, existing solutions lack either usability, expressiveness, or generality. The Visual Model Query Language (VMQL) is a query byexample solution created to satisfy these requirements simultaneously. Objective: In the present paper we study whether VMQL queries can be executed in an e cient way, such that VMQL is suitable for ad-hoc model querying in practical settings involving large models. Method: We study VMQL query execution performance on sets of models ranging over a broad spectrum of sizes and degrees of complexity. The models are based on large and realistic case studies. Results: We observe that our approach exhibits competitive performance, while providing superior usability and generality.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>Interactive model querying is an important task in most modeling scenarios.
However, manually browsing the model for query purposes is only practical for
trivially small models. Consequently, several model querying approaches have
been proposed.</p>
      <p>Query By Full-Text Search is very easy to use. All major modeling tools
support this feature, with varying degrees of re nement (e. g., wildcards, regular
expressions, lters, logical connectors). However, it o ers only limited
expressiveness, and often yields a large number of false positive results. Furthermore,
it cannot be used to search for structural or meta-level information in a model.</p>
      <p>
        Query By Navigation provides search results by traversing a model via
links between model elements. This includes APIs for programming queries
explicitly, and executing queries expressed in the Object Constraint Language
(OCL [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]) or a similar formalism. Navigational approaches expose the
metalevel structure of models to users, which both accounts for their versatility and
the high demands on the expertise of the user formulating queries.
      </p>
      <p>
        Query By-Example allows expressing queries as small, possibly annotated,
model fragments that are matched against a source model. Wherever a su cient
degree of similarity is found, a binding between the two models can be
established, which corresponds to one query result. One of the exponents of this
approach is the Visual Model Query Language (VMQL [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]).
      </p>
      <p>
        In previous work we have shown that VMQL queries are easier to understand
and formulate than their OCL counterparts, even when OCL is enhanced with
a query API partially hiding meta-model complexity [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. However, VMQL has
so far not been demonstrated to be Turing-complete, so it is less expressive than
OCL in a theoretical sense. Originally de ned for UML, VMQL has since been
extended to also allow querying BPMN [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] models, as detailed in [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Beyond
queries, VMQL can also be used to specify model constraints [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>VMQL addresses the ad-hoc querying application scenario, where a user
(often a domain expert) explores a model interactively. Ad-hoc model querying
depends on (a) an expressive query language of high usability, and (b) query
processing that is fast enough to satisfy an interactive operation.</p>
      <p>However, query by-example approaches generally do not scale well, since both
source and query models are treated as graphs. Executing a query amounts to
mapping the query model graph Q to the source model graph S, and returning
bindings b : Q ! S between the elements of the query and source models. A
valid binding must bind all query elements, i. e., every b is total, so there are up
to B = jSjjQj bindings. Enumerating all the bindings is only an option for small
values of S and Q. In the case of ad-hoc queries, jQj &lt;&lt; jSj and jQj is not very
large (typically in the range 5::20 model elements). S, on the other hand, can
be very large: models with jSj 103:::105 elements are common. Thus, a naive
approach cannot deliver the performance required for ad-hoc querying.</p>
      <p>The remainder of this paper is structured as follows. Section 2 brie y presents
VMQL, Section 3 describes the algorithms underlying the execution of VMQL
queries and provides implementation details, Section 4 presents an evaluation
of VMQL query execution performance, Section 5 highlights related work, and
Section 6 concludes the paper and outlines future work.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Presenting VMQL By-Example</title>
      <p>Our running example represents a process model for handling insurance
bene t claims. The source model is the UML Activity Diagram \Coverage Quote
Processing" in Figure 1, while the query model is the UML Activity Diagram
\Query A" in the same gure. The red dashed lines highlight a valid binding. In
this case, this is the only binding. Since \Query A" does not use any annotations
or variables, it is a base query. Additional queries are shown in Figure 2.</p>
      <p>Query B introduces VMQL variables: strings starting with the $ character
which typically store the value of a source model meta-attribute. The query nds
all Actions which can raise an exception to be handled by the \manual coverage
quote processing" Action. It returns two bindings, with the $FailingAction
variable instantiated to the names of the matching Actions: \compute quotable
coverage o ering" and \verify customer account", respectively.</p>
      <p>Query C introduces VMQL constraints represented as Comments stereotyped
by &lt;&lt;vmql&gt;&gt;. The steps constraint indicates that matches may include paths
of inde nite length containing only Flows of the same type as the Flow to which
the constraint is anchored. The name constraint implies a particular name for a
model element (in this case, any string starting with \check"). Thus, the query
Query:AD Query A</p>
      <p>check
general coverage</p>
      <p>check
coverage limit</p>
      <p>Binding</p>
      <p>AD Coverage Quote Processing
receive plan coverage</p>
      <p>quote request
check
general coverage</p>
      <p>check
coverage limit
compute quotable
coverage offering
set up standard
leetr No 42</p>
      <p>Action is bound to the source model Actions \check general coverage" and
\check coverage limit", respectively.</p>
      <p>
        Query D is a more general version of Query A, using wildcards. Executing
query D will result in the same binding as Query A. Queries A through D only
illustrate the most basic constructs of VMQL; a complete list is available in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Algorithms and Implementation</title>
      <p>VMQL queries are executed by computing a set B = fb1; b2; :::; bng of bindings
between the elements of a query model and those of a source model. A binding
bi = f(q id 1; s id 1); (q id 2; s id 2); :::; (q id m; s id m)g is a set of m pairs, each
consisting of the ID of a query model element and that of the matching source
model element, where m is the number of elements of the query model.</p>
      <p>Query model matching is performed in two stages. First, source model
elements that do not match any query model element are quickly discarded. This
activity Query A</p>
      <p>activity Query B
activity Query C
check general
coverage
check coverage
limit</p>
      <p>«vmql»
steps=*</p>
      <p>«vmql»
name=check*</p>
      <p>«vmql»
steps=*
activity Query D
$FailingAction
is achieved by only considering element types and meta-attributes with xed
values, while ignoring meta-attributes that represent references to neighbouring
model elements.</p>
      <p>In the second stage, Algorithm 1 also takes into account references between
query model elements. It terminates upon the convergence of two binding lists:
old bindings and new bindings. At each iteration, a new version of the bindings is
computed by considering each query/source model element pair and verifying its
consistency with the rest of the bindings through the VERIFY LINKS function,
which checks if model element references in the query model are re ected by the
source model. Additional functions are required for applying VMQL constraints
to the results of Algorithm 1. Since constraints are applied locally to binding
elements, their processing time is linear in the size of the query model.</p>
      <p>
        VMQL is implemented by the MQ-2 tool [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], a plug-in for the MagicDraw
modeling environment [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. MQ-2 may be downloaded1 or tested online through
SHARE [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. The query execution engine is implemented in SWI-Prolog [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
Models are stored as Prolog hash maps of model elements, so loading a model
amounts to consulting a Prolog knowledge base. Each model element takes the
form me(type-id, [tag-value, ...]), where type is a model element's
metaclass, id is an arbitrary unique identi er, tag is an atom representing one of the
element's properties, and value is the respective value for this property.
1 http://www2.compute.dtu.dk/~hsto/tools/tools.html
To evaluate the performance of our approach, we investigate di erent sizes of
source and query models, where model size is measured as the number of
elements included in a model. The model samples originate in students' course work
in graduate and undergraduate courses at the authors' host institution. They
consist of UML Activity Diagrams representing analysis-level process models
created by teams of 4{6 people over several months. We split the models into
three batches, each consisting of 7 source models, 14 successful query models
(i.e. queries producing bindings), and 14 unsuccessful query models (i.e. queries
not producing bindings). Source model sizes range between 50 and 1000 model
elements, while query sizes range between 1 and 50 elements. Each query
execution is replicated 20 times in the interest of accuracy. All queries and their
observed execution times are available online2. The experiments are executed on
a Windows 7 Enterprise machine with 8 GB DDR3 memory and an Intel Core
i7-3630QM CPU. The 64-bit version of SWI-Prolog 6.6.1 is used, with the limits
of the local, global, and trail stacks set to their default values of 256 MB each.
2 http://www.compute.dtu.dk/~rvac/experiments/vmql_performance
Execution times for all combinations of source and successful query models are
listed in Table 1. As Figures 3a and 3b show, increasing either the source or the
query model size yields longer execution times. In both cases, it appears that
execution time increases at a low polynomial rate. The highest observed times
are approximately 2s, while the execution times for most realistic ad-hoc queries
(i.e. those with less than 20 elements) are below 1s even for large source models.
For source models with less than 250 elements, query execution is instantaneous
from a user's perspective.
      </p>
      <p>Unsuccessful queries are executed faster than successful ones (see Figure 4).
Also, the execution time of unsuccessful queries is less dependant on source
model size. This is due to the \fail early" approach of our algorithms: easily
veri able properties are considered rst in order to prune the search space.</p>
      <p>
        Table 2 shows the observations for executing the more complex queries
introduced in Section 2. The base query (Query A) and the query containing a
wildcard constraint (Query D) have the lowest execution times. Query B has a
slightly higher execution time, likely due to the extra variable instantiation step.
As expected, the path constraint in Query C makes it the most time consuming
in our sample. Paths of inde nite length require computing transitive closures,
which is problematic for most model querying approaches (see [
        <xref ref-type="bibr" rid="ref18 ref2">2, 18</xref>
        ]).
(a) Execution times by source size for various query sizes
Query size = 5
Query size = 10
Query size = 20
Query size = 30
Query size = 40
      </p>
      <p>Query size = 50
Fig. 4. Execution times for successful and unsuccessful queries
Successful queries
Unsuccessful queries
The largest threat to validity of our evaluation is the nature of the models it
is based on: they originate in academical course work. However, the models are
realistic in the sense that their structure, size, and complexity resemble those of
models that we have encountered in industry. The same caveat applies to the
queries, as we cannot assert that the sample used is representative of practical
applications. Furthermore, there is no research on what realistic queries are. We
attempt to mitigate this threat by considering a variety of query sizes and types.
4.4</p>
      <p>Comparison and Discussion
Models an order of magnitude larger than the ones we have considered are not
uncommon in practice. Based on Figure 3b, we estimate that a VMQL query
consisting of 20 model elements will be executed on a model containing 104
elements in 10 seconds. Similarly, based on Figure 3b, we deduce that queries
containing more than 50 elements lead to execution times in the order of seconds
on moderately large models. Therefore, scenarios such as large-scale online model
di erencing for model version control are outside the scope of our solution.</p>
      <p>
        Table 3 summarizes performance experiments reported for model and
process querying approaches. The performance of VMQL is comparable to existing
ad-hoc model querying solutions, but is surpassed by model repository querying
approaches which employ o ine element indexing, a process requiring up to
several hours to complete [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. However, Table 3 cannot form the basis of an accurate
comparison, since the experiments were performed under di erent conditions.
      </p>
      <p>
        As mentioned in Section 1, query by-example solutions are more di cult
to scale than navigational approaches (e. g. OCL) due to the large number of
source model elements to be considered at the start of the matching process.
To address this issue, the VMQL matching algorithm prunes the search space
based on element types and xed-valued meta-attributes. Local-search based
graph pattern matching improves this heuristic by taking into account common
structures identi ed in a set of typical models or in the source model itself [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
      </p>
      <p>Due to the generality of the matching algorithm, the performance gures
reported for VMQL are independent of modeling language and diagram type.
5</p>
    </sec>
    <sec id="sec-4">
      <title>Related Work</title>
      <p>
        Model querying is an important topic in Model-Based Software Engineering
(MBSE), both in itself and as a part of other operations (e. g. model
transformation). In this area, the topic of fast ad-hoc querying has been addressed by
EMF-IncQuery [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], an approach based on incremental graph pattern matching.
      </p>
      <p>
        In Business Process Modeling (BPM), model querying plays several roles,
including compliance veri cation and process template discovery. BP-QL [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] is a
matching-based business process model querying language. Execution times for
BP-QL queries are in the order of seconds, increasing polynomially with source
model size and exponentially with query model size.
      </p>
      <p>
        The related problem of e ciently querying model repositories has been
addressed by both the MBSE and BPM communities. Approaches originating in
MBSE (IncQuery-D [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], Hawk [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], and MorsaQL [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]) derive their performance
from o ine indexing and the adoption of e cient storage layers such as dedicated
graph databases. Meanwhile, BPM-based solutions (BPMN-Q [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], FNet [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], and
YNet [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]) place a higher emphasis on algorithmic e ciency, while also taking
advantage of o ine indexing techniques. In all cases, the indexing process is time
consuming, reported at 405 seconds for the SAP R/3 Reference Model in the case
of BPMN-Q, and at 25 hours for a repository containing 6 105 models in the
case of YNet. This aspect implies that solutions relying on model pre-processing
may not be suitable for the task of ad-hoc querying.
6
      </p>
    </sec>
    <sec id="sec-5">
      <title>Conclusions</title>
      <p>In this paper we have shown that the performance of VMQL is adequate for
the task of interactive, ad-hoc model querying. On the other hand, VMQL is
outperformed by approaches designed for model repository querying. However,
such approaches require substantial model pre-processing, which makes them
less suitable for the ad-hoc model querying scenario addressed by VMQL.</p>
      <p>
        We have previously shown that, compared to other model query languages,
VMQL o ers superior usability and generality [
        <xref ref-type="bibr" rid="ref12 ref13">13, 12</xref>
        ], and supports a broad
application scope [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. The present performance evaluation adds to the body of
evidence placing VMQL as a competitive model query language.
      </p>
      <p>As future work, we intend to study the scalability of our implementation
to ultra-large sized models, as well as the impact of VMQL annotations on
performance. We also plan to extend our approach to address model warehouse
querying. This will likely demand a redesign of the matching algorithm to take
advantage of caching techniques and other types of pre-processing.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Vlad</given-names>
            <surname>Acretoaie</surname>
          </string-name>
          and
          <article-title>Harald Storrle. MQ-2: A Tool for Prolog-based Model Querying</article-title>
          .
          <source>In Proc. co-located Events 8th Eur. Conf. on Modelling Foundations and Applications (ECMFA'12)</source>
          , pages
          <fpage>328</fpage>
          {
          <fpage>331</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Ahmed</given-names>
            <surname>Awad</surname>
          </string-name>
          and
          <string-name>
            <given-names>Sharif</given-names>
            <surname>Sakr</surname>
          </string-name>
          .
          <article-title>On e cient processing of BPMN-Q queries</article-title>
          . Comp. Ind.,
          <volume>63</volume>
          (
          <issue>9</issue>
          ):
          <volume>867</volume>
          {
          <fpage>881</fpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>Konstantinos</given-names>
            <surname>Barmpis</surname>
          </string-name>
          and
          <string-name>
            <given-names>Dimitris S.</given-names>
            <surname>Kolovos</surname>
          </string-name>
          .
          <article-title>Towards Scalable Querying of Large-Scale Models</article-title>
          .
          <source>In Proc. 10th Eur. Conf. on Modelling Foundations and Applications (ECMFA'14)</source>
          , volume
          <volume>8569</volume>
          <source>of LNCS</source>
          , pages
          <volume>35</volume>
          {
          <fpage>50</fpage>
          . Springer,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Catriel</given-names>
            <surname>Beeri</surname>
          </string-name>
          , Anat Eyal, Simon Kamenkovich, and
          <string-name>
            <given-names>Tova</given-names>
            <surname>Milo</surname>
          </string-name>
          .
          <article-title>Querying business processes with BP-QL</article-title>
          . Inf. Syst.,
          <volume>33</volume>
          (
          <issue>6</issue>
          ):
          <volume>477</volume>
          {
          <fpage>507</fpage>
          ,
          <year>September 2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Gabor</given-names>
            <surname>Bergmann</surname>
          </string-name>
          , Akos Horvath, Istvan Rath, Daniel Varro, Andras Balogh, Zoltan Balogh, and
          <article-title>Andras Okros. Incremental Evaluation of Model Queries over EMF Models</article-title>
          .
          <source>In Proc. 13th Intl. Conf. Model-Driven Engineering Languages and Systems (MODELS'10)</source>
          , volume
          <volume>6394</volume>
          <source>of LNCS</source>
          , pages
          <volume>76</volume>
          {
          <fpage>90</fpage>
          . Springer,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>Benedek</given-names>
            <surname>Izso</surname>
          </string-name>
          , Gabor Szarnyas, Istvan Rath, and Daniel Varro.
          <article-title>IncQuery-D: Incremental Graph Search in the Cloud</article-title>
          .
          <source>In Proc. Ws. Scalability in Model Driven Engineering (BigMDE'13)</source>
          , pages
          <fpage>4</fpage>
          <issue>:1</issue>
          {
          <issue>4</issue>
          :
          <fpage>4</fpage>
          , New York, NY, USA,
          <year>2013</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>Tao</given-names>
            <surname>Jin</surname>
          </string-name>
          , Jianmin Wang, Marcello La Rosa, Arthur ter Hofstede, and
          <string-name>
            <given-names>Lijie</given-names>
            <surname>Wen</surname>
          </string-name>
          .
          <article-title>E cient querying of large process model repositories</article-title>
          . Comp. Ind.,
          <volume>64</volume>
          (
          <issue>1</issue>
          ):
          <volume>41</volume>
          {
          <fpage>49</fpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. NoMagic INC.
          <source>MagicDraw UML 17.0.3</source>
          ,
          <year>2014</year>
          . http://www.nomagic.com/ products/magicdraw.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>Object</given-names>
            <surname>Management</surname>
          </string-name>
          <article-title>Group (OMG). Object Constraint Language (OCL</article-title>
          ),
          <source>Version 2.3.1</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10. Object Management Group (OMG).
          <source>Business Process Model and Notation (BPMN), Version 2.0.2</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Javier</surname>
          </string-name>
          <article-title>Espinazo Pagan and Jesus Garc a Molina. Querying large models e ciently</article-title>
          .
          <source>Inf. Softw. Tech.</source>
          ,
          <volume>56</volume>
          (
          <issue>6</issue>
          ):
          <volume>586</volume>
          {
          <fpage>622</fpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Harald</surname>
          </string-name>
          <article-title>Storrle. Expressing Model Constraints Visually with VMQL</article-title>
          .
          <source>In Proc. IEEE Symp. Visual Languages and Human-Centric Computing (VL/HCC'11)</source>
          , pages
          <fpage>195</fpage>
          {
          <fpage>202</fpage>
          . IEEE Computer Society,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Harald</surname>
          </string-name>
          <article-title>Storrle. VMQL: A Visual Language for Ad-hoc Model Querying</article-title>
          .
          <source>J. Visual Languages and Computing</source>
          ,
          <volume>22</volume>
          (
          <issue>1</issue>
          ),
          <year>February 2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Harald</surname>
          </string-name>
          <article-title>Storrle and Vlad Acretoaie. Querying Business Process Models with VMQL</article-title>
          .
          <source>In Proc. 5th ACM SIGCHI Ann. Intl. Ws. Behaviour Modelling { Foundations and Applications (BMFA'13)</source>
          . ACM,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Pieter Van</surname>
          </string-name>
          Gorp and
          <article-title>Ste en Mazanek. SHARE: a web portal for creating and sharing executable research papers</article-title>
          .
          <source>Procedia Comp. Sci.</source>
          ,
          <volume>4</volume>
          :
          <fpage>589</fpage>
          {
          <fpage>597</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Gergely</surname>
            <given-names>Varro</given-names>
          </string-name>
          , Frederik Deckwerth,
          <string-name>
            <given-names>Martin</given-names>
            <surname>Wieber</surname>
          </string-name>
          , and
          <article-title>Andy Schurr. An algorithm for generating model-sensitive search plans for pattern matching on EMF models</article-title>
          .
          <source>Softw. Syst. Model.</source>
          , pages
          <volume>1</volume>
          {
          <fpage>25</fpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Jan</surname>
            <given-names>Wielemaker</given-names>
          </string-name>
          , Tom Schrijvers,
          <string-name>
            <given-names>Markus</given-names>
            <surname>Triska</surname>
          </string-name>
          , and Torbjorn Lager.
          <source>SWI-Prolog. Theory and Practice of Logic Programming</source>
          ,
          <volume>12</volume>
          (
          <issue>1-2</issue>
          ):
          <volume>67</volume>
          {
          <fpage>96</fpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Zhiqiang</surname>
            <given-names>Yan</given-names>
          </string-name>
          , Remco Dijkman, and Paul Grefen.
          <article-title>FNet: An Index for Advanced Business Process Querying</article-title>
          .
          <source>In Proc. 10th Intl. Conf. Business Process Management (BPM'12)</source>
          , volume
          <volume>7481</volume>
          <source>of LNCS</source>
          , pages
          <volume>246</volume>
          {
          <fpage>261</fpage>
          . Springer Verlag,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>