 <?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/project/folder/model"> 
<html> 
<body>
 <h2>GME Meta-Model Inference Project </h2>
 <h3>XSLT Transformed file contents (GME-XML file -> DSL specifications):</h3>
<br/>
	<xsl:variable name = "id" select = "@id" />
	<xsl:variable name = "kind" select = "@kind" />
	<xsl:variable name = "name" select = "name"/>
	model <xsl:value-of select="$kind"/> {


		<br/> 
<xsl:for-each select = "atom">
	<xsl:variable name = "id3" select = "@id" />
	<xsl:variable name = "kind3" select = "@kind" />
	<xsl:variable name = "name3" select = "name"/>
<xsl:value-of select="$kind3"/> ; <br/>
</xsl:for-each>

	<xsl:for-each select = "model">
	<xsl:variable name = "id2" select = "@id" />
	<xsl:variable name = "kind2" select = "@kind" />
	<xsl:variable name = "name2" select = "name"/>
<xsl:value-of select="$kind2"/> ;
 <br/>
</xsl:for-each >  
<br/>
  
fields   
<xsl:for-each select = "attribute">
<xsl:value-of select="@kind"/>, 
</xsl:for-each>
;<br/><br/>


connections <br/>
<xsl:for-each select = "connection">
<xsl:variable name = "conn" select = "@id" />


<xsl:variable name = "connpt" select = "connpoint[@role='src']/@target" />
<xsl:variable name = "connpt3" select = "connpoint[@role='dst']/@target" />

<xsl:value-of select="name"/> : 
 <xsl:call-template name = "scopeX">
   <xsl:with-param name = "targ" select = "$connpt"> </xsl:with-param>
 </xsl:call-template>
->
 <xsl:call-template name = "scopeX">
   <xsl:with-param name = "targ" select = "$connpt3"> </xsl:with-param>
 </xsl:call-template>  ;
<br/>

</xsl:for-each>

		}
<br/><br/> 

<xsl:apply-templates select = "model"> <xsl:with-param name = "globalX" select = "$name"> </xsl:with-param> </xsl:apply-templates>
<xsl:apply-templates select = "atom"> <xsl:with-param name = "globalY" select = "$name"> </xsl:with-param> </xsl:apply-templates>

<br/>
       </body>
 </html> 
</xsl:template>


<xsl:template match="model"> 
<xsl:param name = "globalX"> </xsl:param>
<br/><br/>
	<xsl:variable name = "id4" select = "@id" />
	<xsl:variable name = "kind4" select = "@kind" />
	<xsl:variable name = "name4" select = "name"/>
	
	<xsl:choose>
	<xsl:when test = "$globalX = parent::node()/name">
		model  <xsl:value-of select="$kind4"/> {
	</xsl:when>
	<xsl:otherwise>
		model  <xsl:value-of select="$kind4"/> {
	</xsl:otherwise>
	</xsl:choose>

		<br/>
<xsl:for-each select = "atom">
	<xsl:variable name = "id6" select = "@id" />
	<xsl:variable name = "kind6" select = "@kind" />
	<xsl:variable name = "name6" select = "name"/>
<xsl:value-of select="$kind6"/> ; <br/>
</xsl:for-each>

	<xsl:for-each select = "model">
	<xsl:variable name = "id5" select = "@id" />
	<xsl:variable name = "kind5" select = "@kind" />
	<xsl:variable name = "name5" select = "name"/>
<xsl:value-of select="$kind5"/> ; <br/>

</xsl:for-each >

<br/>

fields   
<xsl:for-each select = "attribute">
 <xsl:value-of select="@kind"/>, 
</xsl:for-each>  
;<br/><br/>

connections <br/>

<xsl:for-each select = "connection">
<xsl:variable name = "conn2" select = "@id" />

<xsl:variable name = "connpt2" select = "connpoint[@role='src']/@target" />
<xsl:variable name = "connpt4" select = "connpoint[@role='dst']/@target" />

<xsl:value-of select="name"/> : 
 <xsl:call-template name = "scopeX">
   <xsl:with-param name = "targ" select = "$connpt2"> </xsl:with-param>
 </xsl:call-template>
->
 <xsl:call-template name = "scopeX">
   <xsl:with-param name = "targ" select = "$connpt4"> </xsl:with-param>
 </xsl:call-template>  ;


<br/>

</xsl:for-each>

}
<xsl:apply-templates select = "model"> <xsl:with-param name = "globalX" select = "$globalX"> </xsl:with-param> </xsl:apply-templates>
<xsl:apply-templates select = "atom"> <xsl:with-param name = "globalY" select = "$globalX"> </xsl:with-param> </xsl:apply-templates>

</xsl:template>  


<xsl:template match="atom"> 
<xsl:param name = "globalY"> </xsl:param>
<br/><br/>
	<xsl:variable name = "id9" select = "@id" />
	<xsl:variable name = "kind9" select = "@kind" />
	<xsl:variable name = "name9" select = "name"/>

	<xsl:choose>
	<xsl:when test = "$globalY = parent::node()/name">
	atom <xsl:value-of select="$kind9"/> {
	</xsl:when>
	<xsl:otherwise>
	atom <xsl:value-of select="$kind9"/> {
	</xsl:otherwise>
	</xsl:choose>

		<br/>

fields 
<xsl:for-each select = "attribute">
 <xsl:value-of select="@kind"/>, 
</xsl:for-each>    
;<br/><br/>

}
</xsl:template>


<xsl:template name = "scopeX" >
 <xsl:param name = "targ"> </xsl:param>
    <xsl:variable name = "parenter" select = "//parent::node()[@id = $targ]/name" />   
    <xsl:variable name = "IDer" select = "//parent::node()[@id = $targ]/@kind" />   
 <xsl:value-of select = "$IDer"/> 

</xsl:template>



</xsl:stylesheet>
