<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>A Graph Diagram Engine for the Transformation-Driven Architecture</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Janis Barzdins</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Karlis Cerans</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sergejs Kozlovics</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>Andris Zarins</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 blvd.</institution>
          <addr-line>29, LV-1459, Riga</addr-line>
          ,
          <country country="LV">Latvia</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>The transformation driven architecture (TDA) is a system building (in particular, tool building) approach that is based on model transformations, interface metamodels with corresponding engines, and event/command mechanism. This paper describes a metamodel and the corresponding engine for graph diagram presentations within TDA. The facilities of the metamodel and the engine include static diagram presentations, as well as graph diagram animations.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Transformation-Driven Architecture</kwd>
        <kwd>model transformations</kwd>
        <kwd>metamodels</kwd>
        <kwd>graph diagrams</kwd>
        <kwd>diagram animation</kwd>
        <kwd>modeling tools</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Developing a presentation engine and the corresponding
metamodel may be a non-trivial job. But once implemented, the
corresponding engine can be reused in several tools built upon the
TDA.</p>
      <p>
        In this paper a metamodel for graph diagram presentations within
TDA and the corresponding engine for drawing/editing graph
diagrams is presented. The metamodel along with the engine is a
development over previous authors’ work [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] by fully elaborating
the metamodel and putting it within the context of TDA. The
graph diagram animation facilities are also newly sketched here.
The paper is organized as follows. The next section lists some
ideas of the TDA and explains how the proposed Graph Diagram
Engine can be integrated within the TDA Framework. In Sect. 3
the Graph Diagram Metamodel and the Graph Diagram Engine
are explained. Sect. 4 presents a way of implementing animation
mechanism for graph diagrams. Finally, Sect. 5 concludes the
paper.
2. THE ESSENCE OF THE
TRANSFORMATION-DRIVEN
ARCHITECTURE (TDA)
The Transformation-Driven Architecture (TDA) [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] is a
metamodel-based system (in particular, tool) building approach,
where the system metamodel consists of one or more presentation
metamodels served by the corresponding engines and the
(optional) Domain Metamodel. There is also the Core Metamodel
(fixed) with the corresponding Head Engine. Model
transformations are used for linking instances of the mentioned
metamodels (see Fig. 1).
      </p>
      <p>The Head Engine is a special engine, whose role is to provide
services for transformations as well as for presentation engines.
For instance, when in some presentation engine a user event (such
as a mouse click) occurs, the Head Engine may be asked to call
the corresponding transformation for handling this event. Also, a
transformation may give commands to presentation engines.
Thus, the Core Metamodel contains classes Event and Command,
and the Head Engine is used as an event/command manager.
The TDA has its own framework that comes with the built-in
Head Engine (serving the Core Metamodel) and some predefined
pluggable engines (the Graph Diagram Engine is one of them).
Other presentation engines may also be written and plugged-in,
when needed. The TDA framework is common to all the tools
built upon the TDA. The framework is brought to life by means of
transformations. One can choose between writing different
transformations for different tools and writing one configurable
transformation covering several tools.
3. GRAPH DIAGRAM METAMODEL AND
GRAPH DIAGRAM ENGINE
The visual elements of the presentation (see Fig. 2) correspond to
the classes GraphDiagram, Box, Line, and Port along with
Compartment corresponding to text fields that may be placed
inside boxes or attached to lines and ports. Instances of the classes
just mentioned will be diagrams and graphical elements created
by the user. Every element, compartment and graph diagram has
its style (see the ElementStyle class with its subclasses as well as
classes CompartmentStyle and GraphDiagramStyle) being a
composition of various style attributes. For example, the element
style attributes supported by the graph diagram engine include
line color, background color, shape, line width, attached pictures,
etc. The compartment style attributes include such items as
alignment, adornment, visibility, text font, etc.</p>
      <p>Every GraphDiagram has its Palette consisting of
PaletteElements, each of them being a line, a box or a port.
Toolbars* consisting of ToolbarItems* can also be associated with
the GraphDiagram. Additional MenuItems* could also be
associated with the graph diagram. When the graph diagram is
being activated, the corresponding toolbars and menu items are
made visible. The currently active diagram is pointed to by the
ActiveDiagramPointer singleton instance. The elements currently
selected are linked to a CollectionOfActiveElements.</p>
      <p>The metamodel allows the user to specify also a PopUpMenu*
consisting of PopUpMenuItems*. Such a menu is usually activated
when the user clicks the right mouse button.</p>
      <p>The Graph Diagram Metamodel defines engine-specific events
and commands that are subclasses of Event* and Command*.
Every event and every command during tool runtime is placed
within the context defined by the metamodel. For example, the
NewBoxEvent is attached to the PaletteBox with which it is being
created, and the Box in which it is being put (see associations
from class NewBoxEvent).</p>
      <p>The singleton class GraphDiagramEngine contains attributes that
correspond to engine’s events. In the beginning a transformation
can assign values for these attributes, each value representing the
name of the transformation that has to be called when the
particular event occurs.</p>
      <p>
        The graph diagram engine is responsible for visualizing instances
of the Graph Diagram Metamodel. The engine is developed on the
basis of graphical engines for GRADE tools family [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. The
engine relies on advanced graph layout algorithms [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ] as well
* From the Core Metamodel.
as effective internal diagram representation structures allowing to
handle the visualization tasks efficiently even for large diagrams.
4. GRAPH DIAGRAM ANIMATION
Although there are several approaches for metamodel-based
handling of dynamic multimedia objects that include animations
(see, for instance, [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]), our goal here is more specific — to
provide simple animation facilities for graph diagrams explained
in Sect. 3. Complex interactive animations (such as animations
that can be created in Microsoft Silverlight [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] or Adobe Flash
[
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]) are beyond our scope.
      </p>
      <p>In Fig. 3 we extend the metamodel of Fig. 2 by classes for
describing graph diagram animations. The animation of graph
diagrams is based on the notion of token that is associated with
some element (box or line) in a graph diagram. Tokens do not
imply any semantics, they are used only for managing the
animation process. The semantics is up to transformations.
A token is started by StartTokenCmd that specifies also its
duration (how long the token “lives”). There are also commands
for starting, stopping, pausing and resuming a token in the
diagram, as well as pausing, resuming and stopping all tokens in
the diagram. The “end of life” of a token is observed by the
presentation engine — at that time it creates a corresponding
EndTokenEvent. There can be several tokens living concurrently
in the diagram.</p>
      <p>An explicit token is able to simulate the activity of the associated
element for the given duration. The visual effect of the simulation
is determined by TokenStyle instance associated with the token. If
an ElementStyle instance is associated with the token style, then
the animation consists of just changing the element style for the
token’s lifetime. Other options of animation consist of moving a
bullet of certain size or some image along the line in the diagram,
or animating a box by a line flowing over it in certain direction,
with or without leaving the trailing part in the specified color. In
the case of AUTOMATIC direction, the actual line flowing
direction is determined by the presentation engine on the basis of
the placement of the actual outgoing line from the box. A hidden
token doesn’t animate any element, but just “lives” for the</p>
    </sec>
    <sec id="sec-2">
      <title>From the Core Metamodel</title>
      <p>0..1
previous</p>
      <sec id="sec-2-1">
        <title>Command</title>
        <p>0..1 next</p>
        <sec id="sec-2-1-1">
          <title>Engine</title>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>Event</title>
        <p>&lt;&lt;singleton&gt;&gt;</p>
        <p>GraphDiagramEngine
onOpenDiagramEvent: String
onCloseDiagramEvent: String
onOKStyleDialogEvent
onLeftClickEvent: String
onRightClickEvent: String
onDoubleClickEvent: String
onNewLineEvent: String
onNewBoxEvent: String
onNewPortEvent: String
onChangeContainerEvent: String
onMoveLineStartPointEvent: String
onMoveLineEndPointEvent: String
onKeyDownEvent: String</p>
        <sec id="sec-2-2-1">
          <title>RefreshDiagramCommand</title>
        </sec>
        <sec id="sec-2-2-2">
          <title>PasteElementsCommand</title>
        </sec>
        <sec id="sec-2-2-3">
          <title>ShowStyleDialogCommand</title>
        </sec>
        <sec id="sec-2-2-4">
          <title>ActivateElementCommand</title>
        </sec>
        <sec id="sec-2-2-5">
          <title>LocalStyleToElementStyleCommand</title>
        </sec>
        <sec id="sec-2-2-6">
          <title>ElementStyleToLocalStyleCommand</title>
        </sec>
        <sec id="sec-2-2-7">
          <title>KeyDownEvent</title>
          <p>keyName: String</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>From the Core Metamodel</title>
      <sec id="sec-3-1">
        <title>ActivatePopUpMenu</title>
      </sec>
      <sec id="sec-3-2">
        <title>Command</title>
        <p>1</p>
      </sec>
      <sec id="sec-3-3">
        <title>PopUpMenu</title>
        <p>{ordered} *
parent {ordered} *</p>
      </sec>
      <sec id="sec-3-4">
        <title>PopUpMenuItem</title>
        <p>name: String
isVisible: Boolean
isEnabled: Boolean
onPopUpMenuItemSelectEvent: String
1</p>
      </sec>
      <sec id="sec-3-5">
        <title>PopUpMenuItem</title>
      </sec>
      <sec id="sec-3-6">
        <title>SelectEvent</title>
      </sec>
      <sec id="sec-3-7">
        <title>MenuItem</title>
      </sec>
      <sec id="sec-3-8">
        <title>SelectEvent</title>
        <p>{ordered} *
parent
MenuItem
name: String
isVisible: Boolean</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>1 isEnabled: Boolean</title>
      <p>onMenuItemSelectEvent: String
*</p>
      <p>*</p>
      <sec id="sec-4-1">
        <title>GraphDiagram</title>
        <p>name: String
*
{ordered}
1</p>
      </sec>
      <sec id="sec-4-2">
        <title>ToolbarItem</title>
        <p>name: String
picture: String
isVisible: Boolean
* isEnabled: Boolean
{ordered} onToolbarItemSelectEvent: String</p>
      </sec>
      <sec id="sec-4-3">
        <title>RefreshToolbar</title>
      </sec>
      <sec id="sec-4-4">
        <title>Command</title>
        <p>1</p>
      </sec>
      <sec id="sec-4-5">
        <title>Toolbar</title>
        <p>isVisible: String
1
1</p>
      </sec>
      <sec id="sec-4-6">
        <title>RefreshPalette</title>
      </sec>
      <sec id="sec-4-7">
        <title>Command</title>
        <p>1</p>
      </sec>
      <sec id="sec-4-8">
        <title>Palette</title>
      </sec>
      <sec id="sec-4-9">
        <title>GraphDiagramStyle</title>
        <p>name: String
layoutMode: TLayoutMode
layoutAlgorithm: TLayoutAlgorithm
backgroundColor: TColor</p>
      </sec>
      <sec id="sec-4-10">
        <title>OpenDiagramEvent</title>
      </sec>
      <sec id="sec-4-11">
        <title>CloseDiagramEvent</title>
        <p>{ordered}</p>
        <sec id="sec-4-11-1">
          <title>PaletteElement</title>
          <p>* name: String
picture: String</p>
        </sec>
      </sec>
      <sec id="sec-4-12">
        <title>OpenDiagram</title>
      </sec>
      <sec id="sec-4-13">
        <title>Command</title>
      </sec>
      <sec id="sec-4-14">
        <title>CloseDiagram</title>
      </sec>
      <sec id="sec-4-15">
        <title>Command</title>
      </sec>
      <sec id="sec-4-16">
        <title>ActivateDiagram</title>
      </sec>
      <sec id="sec-4-17">
        <title>Command</title>
      </sec>
      <sec id="sec-4-18">
        <title>SaveDiagram</title>
      </sec>
      <sec id="sec-4-19">
        <title>Command</title>
        <p>&lt;&lt;singleton&gt;&gt;</p>
      </sec>
      <sec id="sec-4-20">
        <title>ActiveDiagramPointer</title>
        <p>CollectionOfActiveElements 0..1
1
1
1
1
1
1
1
*
*</p>
        <p>Element
* localStyle: String
location: String
hint: String
*
*
1
*
*
*
*
0..1
0..1
0..1
start
end</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>1 nStart</title>
    </sec>
    <sec id="sec-6">
      <title>1 nEnd</title>
      <sec id="sec-6-1">
        <title>OKStyleDialogEvent</title>
      </sec>
      <sec id="sec-6-2">
        <title>LeftClickEvent</title>
      </sec>
      <sec id="sec-6-3">
        <title>RightClickEvent</title>
      </sec>
      <sec id="sec-6-4">
        <title>DoubleClickEvent</title>
      </sec>
      <sec id="sec-6-5">
        <title>NewLineEvent</title>
      </sec>
      <sec id="sec-6-6">
        <title>NewBoxEvent</title>
      </sec>
      <sec id="sec-6-7">
        <title>NewPortEvent</title>
      </sec>
      <sec id="sec-6-8">
        <title>ChangeContainer Event</title>
        <p>start
end
target
target
1
1
1
1
{ordered} *</p>
      </sec>
      <sec id="sec-6-9">
        <title>Compartment</title>
        <p>value: String</p>
      </sec>
      <sec id="sec-6-10">
        <title>MoveLine</title>
      </sec>
      <sec id="sec-6-11">
        <title>StartPointEvent</title>
      </sec>
      <sec id="sec-6-12">
        <title>MoveLine</title>
      </sec>
      <sec id="sec-6-13">
        <title>EndPointEvent</title>
        <p>CompartmentStyle
name: String
0..1 isVisible: Boolean
alignment: TTexAlignment
adjustment: TCompartmentAdjustment
picture: TPictureRef
picturePosition: TPicturePosition
adornment: TAdornmentCode
textFont: TFont</p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>StartTokenCmd duration: Real</title>
    </sec>
    <sec id="sec-8">
      <title>HiddenToken</title>
      <p>&lt;&lt;enumeration&gt;&gt;</p>
    </sec>
    <sec id="sec-9">
      <title>TokenStatus</title>
    </sec>
    <sec id="sec-10">
      <title>MOVING</title>
    </sec>
    <sec id="sec-11">
      <title>PAUSED</title>
    </sec>
    <sec id="sec-12">
      <title>STOPPED</title>
      <p>specified amount of time. Hidden tokens can be useful, e.g., for
accounting the global animation time, or for creating certain
breakpoints during the animation when the control is transferred
to transformations for some semantic actions.</p>
      <p>
        The implementation of animation facilities in our graph diagram
engine is currently under development.
5. CONCLUSIONS
The Graph Diagram Engine has been successfully implemented in
recent version of transformation-based tool building platform
GrTP [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. The GrTP tool is now being transformed to the TDA
framework, which should become publicly available soon. At the
moment, the TDA framework consists of two predefined engines
(one of them is the Graph Diagram Engine and the other is the
Dialog Engine), and the interaction between these engines and
model transformations performed by means of commands and
events works well. We are working on ameliorating the TDA
framework and its engines. One of the research topics here is
adding advanced graph diagram layout capabilities to the Graph
Diagram Engine. We are working also on implementing diagram
animations within the Graph Diagram Engine for TDA.
Several diagram editors (such as class diagram editor and activity
diagram editor) have been successfully built using the Graph
Diagram Engine. This engine has been also used in [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. We are
looking forward for applying the TDA and its engines in the
Semantic Web domain.
M. Zviedris for their efforts in materializing the ideas presented in
this paper.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>[1] MetaEdit+ (http://www.metacase.com).</mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <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="ref3">
        <mixed-citation>
          [3]
          <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>Domain-Specific Development with Visual Studio DSL Tools</article-title>
          , AddisonWesley,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>[4] DiaGen/DiaMeta (http://www.unibw.de/inf2/DiaGen).</mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kalnins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Vilitis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Celms</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Kalnina</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sostaks</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Barzdins</surname>
          </string-name>
          .
          <article-title>Building Tools by Model Transformations in Eclipse</article-title>
          .
          <source>Proceedings of DSM'07 Workshop of OOPSLA</source>
          <year>2007</year>
          , Montreal, Canada, Jyvaskyla University Printing House, pp.
          <fpage>194</fpage>
          -
          <lpage>207</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Barzdins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kozlovics</surname>
          </string-name>
          ,
          <string-name>
            <surname>E. Rencis.</surname>
          </string-name>
          <article-title>The TransformationDriven Architecture</article-title>
          .
          <source>Proceedings of DSM'08 Workshop of OOPSLA</source>
          <year>2008</year>
          ,
          <article-title>Nashville</article-title>
          , USA, pp.
          <fpage>60</fpage>
          -
          <lpage>63</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J.</given-names>
            <surname>Barzdins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Zarins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Cerans</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A</given-names>
            ,
            <surname>Kalnins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Rencis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Lace</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Liepins</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Sprogis</surname>
          </string-name>
          .
          <source>GrTP: Transformation Based Graphical Tool Building Platform. Proceedings of MDDAUI Workshop of MoDELS</source>
          <year>2007</year>
          , Nashville, USA,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <article-title>[8] GRADE tools (http://www</article-title>
          .gradetools.com).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <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 GRADE Windows Graphic Editors</article-title>
          .
          <source>Proceedings of Graph Drawing '95, LNCS</source>
          , vol.
          <volume>1027</volume>
          , pp.
          <fpage>361</fpage>
          -
          <lpage>364</lpage>
          , Springer-Verlag,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <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>Proceedings of 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="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Pleuss</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Vitzthum</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Hussmann</surname>
          </string-name>
          .
          <article-title>Integrating Heterogeneous Tools into Model-Centric Development of Interactive Application</article-title>
          .
          <source>MoDELS</source>
          <year>2007</year>
          ,
          <article-title>LNCS</article-title>
          , vol.
          <volume>4735</volume>
          , pp.
          <fpage>241</fpage>
          -
          <lpage>355</lpage>
          , Springer-Verlag,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Silverlight</surname>
            <given-names>Animation Overwiew. MSDN</given-names>
          </string-name>
          , Microsoft Corp. (http://msdn.microsoft.com/en-us/library /cc189019(vs.95).aspx).
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>Adobe</given-names>
            <surname>Flash</surname>
          </string-name>
          (http://www.adobe.com/products/flash).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>G.</given-names>
            <surname>Barzdins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Liepins</surname>
          </string-name>
          , E.,
          <string-name>
            <given-names>M.</given-names>
            <surname>Veilande</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Zviedris</surname>
          </string-name>
          .
          <article-title>Semantic Latvia Approach in the Medical Domain</article-title>
          . In Haav,
          <string-name>
            <given-names>H-M.</given-names>
            , &amp;
            <surname>Kalja</surname>
          </string-name>
          ,
          <string-name>
            <surname>A</surname>
          </string-name>
          . (eds),
          <source>Proceedings of the 8th International Baltic Conference (Baltic DB&amp;IS2008)</source>
          , June 2-5, Tallin, Estonia, Tallinn University of Technology Press, pp.
          <fpage>89</fpage>
          -
          <lpage>102</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>