[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Using keys to build a tree represented in XMI

Subject: Using keys to build a tree represented in XMI
From: "Christian Solisch" <christian.solisch@xxxxxx>
Date: Wed, 28 Dec 2005 19:32:04 +0100 (MET)
uml stereotype
Hi community,

I am new to XSLT and actually trying to use it for a transformation of a XMI
file. After two weeks of trying I really don4t know how to proceed. I am not
sure, if XSLT is really what I need to get the job done. Any help (or hint
to use anything else ;-) will be really appreciated!

I use Saxon 8.6.1 on XSLT 2.0

In an UML tool (enterprise architect) I modelled a tree-structure consisting
of classes. They are stereotyped by <<node>> and <<leaf>> and connected by
aggregations. After exporting it to XMI I like to generate the path for each
leaf (leading from root to leaf).

After digging out that an aggregation points to both connected classes and
each class references its stereotype, I tried to use keys to resolve the
references. The aggregation4s direction can be seen in the "aggregation"
attribute of each of the two end points ("none" -> "aggregate"). But after
identifying the leaf classes I don4t manage it to follow the aggregation...

Here is my stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0" xmlns:UML="org.omg.xmi.namespace.UML"
exclude-result-prefixes="UML">

<!-- *** <Keys> ************************************************ -->
<xsl:key name="package_by_name" match="UML:Package" use="@name" />
<xsl:key name="stereotype_by_name" match="UML:Stereotype" use="@name" />
<xsl:key name="class_by_stereotypeReference" match="UML:Class"
use="UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref" />
<xsl:key name="class_by_ID" match="UML:Class" use="@xmi.id" />
<xsl:key name="aggregation_by_classReference"
match="UML:Association.connection"
use="UML:AssociationEnd[@aggregation='none']/UML:AssociationEnd.participant/UML:Class/@xmi.idref"
/>
<!-- *** </Keys> *********************************************** -->


<xsl:template match="/">
<xsl:apply-templates select="key('stereotype_by_name', 'leaf')" />
</xsl:template>

<xsl:template match="UML:Stereotype">
<xsl:apply-templates select="key('class_by_stereotypeReference', @xmi.id)"/>
</xsl:template>

<!-- now i should have only leaf classes -->
<xsl:template match="UML:Class">
  <xsl:for-each select="." >
  <!-- here i have to find the aggregation -->
  <!-- pointing to this class, actually not working -->
    <xsl:value-of
select="key('aggregation_by_classReference',./@xmi.id)/@xmi.id"/>
  </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
	
A part of the XMI file looks like this:

<XMI.content>
 <UML:Model name="Views" xmi.id="Model_id_1">
  <UML:Namespace.ownedElement>	
	
   <UML:Stereotype xmi.id="Stereotype_id_1" name="node" ></UML:Stereotype>
   <UML:Stereotype xmi.id="Stereotype_id_2" name="leaf" ></UML:Stereotype>
		
   <UML:Package name="Package_Tree" xmi.id="Package_id_1">
    <UML:Namespace.ownedElement>

     <UML:Class name="Node_1" xmi.id="Node_id_1">
      <UML:ModelElement.stereotype>
       <UML:Stereotype xmi.idref="Stereotype_id_1"/>
      </UML:ModelElement.stereotype>
     </UML:Class>

     <UML:Association xmi.id="Aggregation_id_1">
      <UML:Association.connection>

       <UML:AssociationEnd aggregation="none">
        <UML:AssociationEnd.participant>
         <UML:Class xmi.idref="Node_id_2"/>
        </UML:AssociationEnd.participant>
       </UML:AssociationEnd>

       <UML:AssociationEnd aggregation="aggregate">
        <UML:AssociationEnd.participant>
         <UML:Class xmi.idref="Node_id_1"/>
        </UML:AssociationEnd.participant>
       </UML:AssociationEnd>

      </UML:Association.connection>
     </UML:Association>

     <UML:Class name="Node_2" xmi.id="Node_id_2">
      <UML:ModelElement.stereotype>
       <UML:Stereotype xmi.idref="Stereotype_id_2"/>
      </UML:ModelElement.stereotype>
     </UML:Class>

    </UML:Namespace.ownedElement>						   </UML:Package>

  </UML:Namespace.ownedElement>
 </UML:Model>
</XMI.content>
	
So if somebody could help me with some ideas how to follow the connection
between my nodes, I would be very happy!

Thanks in advance
Christian

-- 
Telefonieren Sie schon oder sparen Sie noch?
NEU: GMX Phone_Flat http://www.gmx.net/de/go/telefonie

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.