| 
 
Subject: [xsl] 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)  | 
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 | 
|---|
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| RE: [xsl] Copy all elemnts but one,, Haarman, Michael | Thread | RE: [xsl] Using keys to build a tre, Florent Georges | 
| RE: RE: RE: RE: [xsl] get variable , Haarman, Michael | Date | Re: [xsl] Splitting already-grouped, Joseph Dane | 
| Month |