<!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>GrTP: Transformation Based Graphical Tool Building Platform</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jānis Bārzdiņš</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Andris Zariņš</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Kārlis Čerāns</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Audris Kalniņš</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Edgars Rencis</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Lelde Lāce</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Renārs Liepiņš</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Artūrs Sproģis</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 Raina bulvaris 29 Riga</institution>
          ,
          <addr-line>LV-1459</addr-line>
          ,
          <country country="LV">LATVIA</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Janis.Barzdins</institution>
          ,
          <addr-line>Andris.Zarins, Karlis.Cerans, Audris.Kalnins, Edgars.Rencis, Lelde.Lace, Renars.Liepins</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>In this paper we introduce a novel wide-profile graphical tool-building platform GrTP which is based on the principle of separating semantic domain model processing and user interface components. This principle is enabled in GrTP by a meta-model for visual information presentation (“interface meta-model”). A novel feature of GrTP is that it consistently bases all work of connecting the domain and interface models on model transformations. These transformations can be produced for different domain models, thus obtaining concrete tools tailored to specific domains within GrTP. The visualization component of GrTP is based on an original high-performance graphical diagram presentation engine which embodies advanced graph drawing algorithms. The paper explains the GrTP platform along with the first practical experience of its usage.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Tool-building platforms</kwd>
        <kwd>model transformations</kwd>
        <kwd>interface meta-models</kwd>
        <kwd>domain meta-models</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        The basic difference between our proposed framework and
traditional tool building platforms such as Eclipse GMF [
        <xref ref-type="bibr" rid="ref16 ref6">7,
17</xref>
        ], Microsoft DSL [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], MetaEdit+ [
        <xref ref-type="bibr" rid="ref12 ref13">13, 14</xref>
        ], Pounamu/
Marama [
        <xref ref-type="bibr" rid="ref17 ref7">8, 18</xref>
        ], Diagen/Diameta [
        <xref ref-type="bibr" rid="ref2">2, 3</xref>
        ], GME [
        <xref ref-type="bibr" rid="ref10 ref4">5, 11</xref>
        ] is in
the principles of the general architecture of the framework.
Let us explain this in some detail, using Eclipse GMF as a
typical example. According to the GMF approach [
        <xref ref-type="bibr" rid="ref6">7</xref>
        ],
besides the EMOF meta-model for defining ECore models
(domain meta-models), the following three meta-models
are used: the Graphical definition meta-model for defining
types of graphical presentation elements, the Tooling
metamodel and the Mapping meta-model, by means of which
mappings between the previous ones can be defined. The
specification of a concrete tool is done by building
instances of all the abovementioned meta-models. The next
step is the generation of Java classes (C# classes in case of
MS DSL); by compiling these classes an executable tool is
obtained.
      </p>
      <p>This architecture is well suited in cases when the domain
and graphical notation meta-models have sufficiently
similar structure. In these cases the above described static
mapping facilities are sufficient to define the tool
functionality in an adequate way. However, frequently the
domain and its graphical presentation are not so similar,
and the only option is a manual code extension in Java (or
C#, respectively), that requires a deep understanding of the
generated code.</p>
      <p>A question arises, whether it is possible to build a very
simple (both from the architecture and user point of view)
platform, where the only link between the domain and
interface meta-models is by means of model
transformations. This would allow describing connections
of any complexity between domain and interface
metamodels in a uniform and structured way.</p>
      <p>At the core of our approach is an interface meta-model of a
principally new kind, which directly contains both the
classes of graphical presentation elements themselves and
their types, as well as classes of events and commands. In
other words, our interface meta-model describes all
possible graph diagram "screenshots" and all possible end
user actions (events). The presentation engine, the main
control unit of GrTP, is in a sense an interpreter of interface
models that are instances of the abovementioned interface
meta-model. It is capable to visualise elements in
accordance with their types, as well as to call
transformations as responses to end user actions.</p>
    </sec>
    <sec id="sec-2">
      <title>2.OVERVIEW OF GrTP</title>
      <p>
        Figure 1 schematically depicts the structure of GrTP. GrTP
consists of control unit, called GrTP Engine (or
Presentation Engine, or PE, for short), and repository. The
repository contains a fixed interface meta-model (IMM)
and its instances that are interface models, as well as a
domain meta-model (DMM) and its instances that are
domain models (e.g., concrete UML activity diagrams that
correspond to the UML activity diagram meta-model).
Each interface model contains a graphical view reflecting
the corresponding domain model, plus it contains instances
of IMM classes that correspond to symbol palette and its
elements, toolbars and popup menus, as well as user actions
(called events) on concrete interface elements.
The work of GrTP Engine on a concrete DMM is powered
by model transformations connecting DMM and IMM. To
enable writing of these transformations, scaffolding
between DMM and IMM that contains interconnection
links of concrete DM and IM elements is used. The
transformations can be written in any universal model
transformation language (e.g., QVT [
        <xref ref-type="bibr" rid="ref11">12</xref>
        ], MOLA [
        <xref ref-type="bibr" rid="ref12">13</xref>
        ]) that
has an efficient implementation. They are called by GrTP
Engine at runtime.
      </p>
      <p>The GrTP platform itself consists of a core part that is the
presentation engine, the implementation of the repository
and the IMM, and the specialization part that allows
tailoring GrTP to the needs of serving concrete DMM.
More precisely, specialization of GrTP to serve concrete
DMM (that is, building of particular tool on the basis of
GrTP) consists of the following:</p>
      <p>providing the domain meta-model itself;
defining types of visual presentation elements
(nodes and edges), as well as symbol palette
elements (these are defined in IM as instances of
respective IMM classes);
defining scaffolding between
(classes) of DMM and IMM;
the
elements
creating the transformation library (one can think
of it as of Transformation Engine (TE)) and
connecting the transformations to the concrete
events of presentation engine;
The work of the specialized tool can be perceived as
cooperation between PE and TE. PE detects user actions,
creates corresponding event instance and calls TE. The
transformations, on the other hand, are processing the
events created by PE. This usually involves making
changes to instances of IMM and DMM. Transformations
may also issue commands for PE that are visualization
instructions to be executed by PE. We note that both Event
and Command classes are included in IMM, and their
instances can be linked to instances of other IMM classes.</p>
    </sec>
    <sec id="sec-3">
      <title>3.INTERFACE META-MODEL</title>
      <p>The interface meta-model is the core of the framework. It
can be viewed as the interface between the presentation
engine (hard-coded part) and transformations (adapted for a
particular tool). Here we consider a simplified version of
the interface meta-model (subset of the full interface
metamodel) depicted in figure 2. We let the role names of
associations, if not explicitly specified, to coincide with the
corresponding class names, with first letter in lowercase.
The visual elements of the interface correspond to the
classes GraphDiagr, Node and Edge, together with
NCompartment and ECompartment that correspond to text
fields placed in nodes and attached to edges, respectively.
The location attributes in Node and Edge classes encode the
placement of corresponding nodes and edges in the
diagram, and they are to be understood only by the
Presentation Engine; they are not meant for use by model
transformations.</p>
      <p>The IMM includes GraphDiagrType class for different
graph diagram types (e.g., class diagrams, or activity
diagrams) together with NodeType and EdgeType classes
for types of nodes and edges that are allowed in diagrams
of respective type. The type information for node or edge
contains style information of respective element, as well as
compartment type information (NCompartmentType and
ECompartmentType classes). In this simplified IMM we
show only shape information for nodes and both edge ends
in their types (nodeShape, startShape and endShape
attributes for simplicity are treated here as integers). The
compartment type information associated with node and
edge types list names of compartments that are in elements
(nodes or edges) of corresponding types. The ordering of
node compartments is given by the values of nr attribute.
For edge compartments the position attribute denotes the
placement of corresponding compartment (e.g. at the
beginning or end of the edge). The instances of
GraphDiagrType, NodeType, EdgeType,
NCompartmentType and ECompartmentType classes, as
well as instances of Palette and PaletteElement classes are
created at initialization time of concrete specialized tool.
These instances determine, to a large extent, the
functionality of the concrete tool that is available to the end
OkMessage
*</p>
      <p>Node
location: String
0..1 1</p>
      <p>1
end start
*
NCompartment *
value: String
DeleteNode
SessionEnd
enew snew
NewEdge</p>
      <p>EditNode</p>
      <p>EditEdge</p>
      <p>DeleteEdge</p>
      <p>NewNode</p>
      <p>Event
SessionStart attribute: String</p>
      <p>Refresh</p>
      <p>Open
CurrentDiagrPointer 0..1 GraphDiagr 0..1
1</p>
      <p>Command
attribute: String</p>
      <p>Diagram
name: String
0..1
user. For instance, the collection
of compartment types for a node
or edge type determines the
properties of compartment
structure (e.g. compartment count
and their placement) for nodes or
edges associated with this type.</p>
      <p>The class Event ( ) and its
subclasses correspond to the
actions that the end user may
perform on a concrete diagram
and that are understood by PE.</p>
      <p>The instances of these classes
(called events) are created by PE
upon detection of corresponding
end user action.</p>
      <p>The Transformation Engine, upon
receiving control from PE,
analyzes the type (class) of the
available event, and invokes
appropriate transformation, which
can access the context of the
event via the association links
created by PE.</p>
      <p>The Transformation Engine may,
upon transferring the control back to PE, create commands
( , instances of Command class) to be executed by PE. If
a command is of Refresh class, it requires the PE to update
the visual presentation in accordance to changes that have
occurred in the interface model. This type of command is
typically used after node or edge addition or deletion in the
visual presentation (interface).</p>
      <p>If, for instance, a NewNode event is created in a simple
flowchart diagram editor, the transformation finds the type
of the node to be created via the link to a Box
(PaletteElement) and then via the link to NodeType. If, for
instance, the node type has nodeTypeName = “StartNode”,
the transformation may check, if there is already an
instance of class StartNode in the flowchart diagram, and if
there is not, the transformation may insert a Node instance
in IM and a StartNode instance in DM, and construct a
scaffolding link between these instances. Then a command
of Refresh type is created and control is returned to PE. If
the transformation is not successful, an ErrorMessage
command is created, what PE uses further to display a
corresponding error message to the user. The
transformations can also instruct PE to open property
diagram, e.g. for input of the node attribute values.
An important design issue concerning IMM is that of the
event and command granularity: what kind of user actions
are served just by GrTP engine (is hard-coded into it), and
what kind of work is delegated to transformations. The
hard-coded part of functionality allows for transformations
not to be overwhelmed by low level user interface
manipulation, however, this kind of decision will restrict
the possibility to adjust the behavior of the engine to the
needs of a concrete specialization. For instance, in GrTP a
design decision has been made to leave all work of
positioning elements in the diagram to the hard-coded part.
Another decision has been to allow the engine itself to
produce the events like “New node” and “New edge”.
The full interface meta-model in addition to the simplified
version considered here contains: child-parent association
between nodes for representing node inclusion into other
nodes, subType-baseType association between element type
classes for implementation of stereotype-like mechanism,
additional graphical element Port that is attached to the
node and can be used as Pin representation in activity
diagram. The meta-model also contains additional interface
constructs along with corresponding events and commands,
e.g., Toolbar, PopUpDiagram as well as
transformationdriven menu for property diagram.</p>
    </sec>
    <sec id="sec-4">
      <title>4.IMPLEMENTATION AND FIRST</title>
    </sec>
    <sec id="sec-5">
      <title>EXPERIENCE</title>
      <p>
        The visual presentation part of GrTP is developed on the
basis of graphical engines that are developed for GRADE
tools family [
        <xref ref-type="bibr" rid="ref5">6</xref>
        ] and offer advanced graph drawing
capabilities [
        <xref ref-type="bibr" rid="ref3 ref9">4, 10</xref>
        ], e.g., advanced services for automatic
diagram element positioning according to different layouts,
basic graph diagram editing services (e.g. Zoom, Print,
Scroll, etc.).
      </p>
      <p>
        To ensure the efficiency of GrTP, a novel model
transformation language L0 has been implemented [
        <xref ref-type="bibr" rid="ref11">12</xref>
        ]
with a highly efficient compiler; also an efficient
inmemory repository for holding domain and interface
metamodels and their instances has been developed.
      </p>
      <p>The first experiments with GrTP have been performed in
parallel with tuning up the platform itself. As a first
implementation on the basis of GrTP, a class diagram
editor for MOF-type meta-model building was created. As
an example, the meta-models in this article have been
constructed and printed using this meta-model editor. The
time for transformation writing for this editor can be
estimated in 3 person-months; that is several times less than
creating a corresponding tool from scratch.</p>
      <p>On the basis of our platform we have also developed an
UML activity diagram editor covering nearly all their
features, including elements like Pin, Interrupt region, etc.,
that are rather complicated from diagram editing viewpoint.
This editor also has achieved a completely satisfactory
performance level. The time for transformation writing for
this editor can be estimated in 2 person-months. We expect
that use of higher level model transformation languages
could reduce the transformation writing time for new
specializations of GrTP approximately by the factor of 2.</p>
    </sec>
    <sec id="sec-6">
      <title>5.CONCLUSIONS AND FUTURE WORK</title>
      <p>Our basic conclusion is that such tool building platform is
sufficiently effective from practical point of view, both
from perspective of efforts involved in specialization of
GrTP into concrete tools (by means of transformation
writing), and the performance of obtained concrete tools.
We have considered in this paper only interface
metamodel for graph diagrams (together with some auxiliary
diagrams), thus describing a graph diagram engine. We
have under development also a tree diagram engine that is
relatively simpler and can easily be integrated into the
current architecture. The architecture admits also further
inclusion of engines for other diagram types that use the
event/command communication pattern with the
transformation engine.</p>
      <p>
        Our current plans include further development of graph
diagram engine to enable it to serve animation of diagrams.
We see one of further target application areas for GrTP
platform also in the context of Semantic Web. GrTP seems
very suitable for building graphical editors for Ontology
languages (RDF, OWL), and graphical Semantic Web
browsers. One of the strengths of GrTP that can be
exploited here is its ability to process large diagrams, both
in the sense of performance, and in the sense of automated
graph drawing facilities that are built into the engine. In this
context it is important to stress the possibility to connect
GrTP to other in-memory data stores (for instance Sesame
[
        <xref ref-type="bibr" rid="ref15">16</xref>
        ]), which are more popular in Semantic Web world.
[2] DiaGen Overview,
http://www2.cs.unibw.de/tools/DiaGen/doc/Overview.pdf,
2000.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>S.</given-names>
            <surname>Cook</surname>
          </string-name>
          , G. Jones,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kent</surname>
          </string-name>
          and
          <string-name>
            <given-names>A. C.</given-names>
            <surname>Wills</surname>
          </string-name>
          , “
          <article-title>DomainSpecific Development with Visual Studio DSL Tools,” Addison-</article-title>
          <string-name>
            <surname>Wesley</surname>
          </string-name>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [3]
          <string-name>
            <surname>DiaGen</surname>
          </string-name>
          , The Tree Tutorial, http://www2.cs.unibw.de/tools/DiaGen/doc/Tutorial.pdf,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>K.</given-names>
            <surname>Freivalds</surname>
          </string-name>
          and
          <string-name>
            <given-names>P.</given-names>
            <surname>Kikusts</surname>
          </string-name>
          , “
          <article-title>Optimum Layout Adjustment Supporting Ordering Constraints in Graph-Like Diagram Drawing,”</article-title>
          <source>Proc. The Latvian Academy of Sciences, Section B</source>
          , Vol.
          <volume>55</volume>
          , No.
          <issue>1</issue>
          , pp.
          <fpage>43</fpage>
          -
          <lpage>51</lpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <article-title>[5] The Generic Modeling Environment, GME User's Manual http</article-title>
          ://www.isis.vanderbilt.edu/Projects/gme/GMEUMan.pdf,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <article-title>[6] GRADE tools</article-title>
          , http://www.gradetools.com/,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Graphical</given-names>
            <surname>Modeling</surname>
          </string-name>
          <article-title>Framework (GMF, Eclipse Modeling subproject</article-title>
          ), http://www.eclipse.org/gmf/,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>J.</given-names>
            <surname>Grundy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hosking</surname>
          </string-name>
          ,
          <string-name>
            <surname>N.</surname>
          </string-name>
          <article-title>Zhu1 and N. Liu1, “Generating Domain-Specific Visual Language Editors from High-level Tool Specifications,”</article-title>
          <source>21st IEEE International Conference on Automated Software Engineering (ASE'06)</source>
          , pp.
          <fpage>25</fpage>
          -
          <lpage>36</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kalnins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Barzdins</surname>
          </string-name>
          and E. Celms, “
          <string-name>
            <surname>Model Transformation Language</surname>
            <given-names>MOLA</given-names>
          </string-name>
          ,
          <source>” Proc. MDAFA</source>
          <year>2004</year>
          , Vol.
          <volume>3599</volume>
          ,
          <string-name>
            <surname>Springer</surname>
            <given-names>LNCS</given-names>
          </string-name>
          , pp.
          <fpage>62</fpage>
          -
          <lpage>76</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>P.</given-names>
            <surname>Kikusts</surname>
          </string-name>
          and
          <string-name>
            <given-names>P.</given-names>
            <surname>Rucevskis</surname>
          </string-name>
          , “
          <article-title>Layout Algorithms of GraphLike Diagrams for</article-title>
          GRADE Windows Graphic Editors,
          <source>” Proc. Graph Drawing '95, Lecture Notes in Computer Science</source>
          , vol.
          <volume>1027</volume>
          , pp.
          <fpage>361</fpage>
          -
          <lpage>364</lpage>
          ,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ledeczi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Maroti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Bakay</surname>
          </string-name>
          , G. Karsai,
          <string-name>
            <given-names>J.</given-names>
            <surname>Garrett</surname>
          </string-name>
          ,
          <string-name>
            <surname>C. Thomason IV</surname>
          </string-name>
          , G. Nordstrom,
          <string-name>
            <given-names>J.</given-names>
            <surname>Sprinkle</surname>
          </string-name>
          and
          <string-name>
            <given-names>P.</given-names>
            <surname>Volgyesi</surname>
          </string-name>
          , “The Generic Modeling Environment,” Workshop on Intelligent Signal Processing, pp.
          <fpage>6</fpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>Lx</given-names>
            <surname>Transformation Language Set</surname>
          </string-name>
          , http://Lx.mii.lu.lv/,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [13]
          <article-title>MetaEdit+ Method Workbench User's Guide, Version 4</article-title>
          .0, http://www.metacase.com/support/40/manuals/mwb40sr2a4. pdf,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [14]
          <article-title>MetaEdit+ User's Guide, Version 4</article-title>
          .0, http://www.metacase.com/support/40/manuals/mep40sr2a4.p df,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [15]
          <article-title>MOF QVT specification</article-title>
          , http://www.omg.org/docs/ptc/05-11-01.pdf,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Sesame</surname>
          </string-name>
          , http://www.openrdf.org,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>A.</given-names>
            <surname>Shatalin</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Tikhomirov</surname>
          </string-name>
          , “
          <article-title>Graphical Modeling Framework Architecture Overview</article-title>
          ,”
          <source>Eclipse Modeling Symposium</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>N.</given-names>
            <surname>Zhu1</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Grundy</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Hosking</surname>
          </string-name>
          , “
          <article-title>Pounamu: a meta-tool for multi-view visual language environment construction</article-title>
          ,
          <source>” Proc. IEEE Symposium on Visual Languages and Human Centric Computing (VLHCC'04)</source>
          , pp.
          <fpage>254</fpage>
          -
          <lpage>256</lpage>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>