To understand the script and the following output, you need the xmi.id's of the types involved:
Type | Id |
int | S.100006 |
String | S.100003 |
Return2 | S.100082 |
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0" xmlns:xt="http://www.jclark.com/xt" extension-element-prefixes="xt"> <xsl:template match="XMI"> <xsl:text> </xsl:text> <XMI> <xsl:apply-templates select="XMI.content"> </xsl:apply-templates> <xsl:text> </xsl:text> </XMI> </xsl:template> <xsl:template match="XMI.content"> <xsl:text> </xsl:text> <XMI.content> <xsl:apply-templates select="Model"> </xsl:apply-templates> <xsl:text> </xsl:text> </XMI.content> </xsl:template> <xsl:template match="Model"> <xsl:text> </xsl:text> <Model name="{name}"> <xsl:apply-templates select="ownedElement"> </xsl:apply-templates> <xsl:text> </xsl:text> </Model> </xsl:template> <xsl:template match="ownedElement"> <xsl:apply-templates select="Model|Class" /> </xsl:template> <xsl:template match="Class"> </xsl:template> <xsl:template match="Class[@XMI.id='S.100027']" priority="2"> <xsl:text> </xsl:text> <Class name="{name}"> <xsl:apply-templates select="feature" /> <xsl:text> </xsl:text> </Class> </xsl:template> <xsl:template match="feature"> <xsl:apply-templates select="Operation" /> </xsl:template> <xsl:template match="Operation"> </xsl:template> <xsl:template match="Operation[name='operation']" priority="2"> <xsl:text> </xsl:text> <Operation name="{name}"> <xsl:apply-templates select="parameter[1]/Parameter[1]/type[1]/XMI.reference[1]" mode="P1"/> <xsl:text> </xsl:text> </Operation> </xsl:template> <xsl:template match="XMI.reference"> </xsl:template> <xsl:template match="XMI.reference[@target='S.100003']" mode="P1" priority="2"> <xsl:text> IS_OK_1</xsl:text> <xsl:apply-templates select="../../../../parameter[2]/Parameter[1]/type[1]/XMI.reference[1]" mode="P2"/> </xsl:template> <xsl:template match="XMI.reference[@target='S.100006']" mode="P2" priority="2"> <xsl:text> IS_OK_2</xsl:text> <xsl:apply-templates select="../../../../parameter[3]/Parameter[1]/type[1]/XMI.reference[1]" mode="PR"/> </xsl:template> <xsl:template match="XMI.reference" mode="PR" priority="2"> <xsl:text> [</xsl:text> <xsl:value-of select="@target"/> <xsl:text>]</xsl:text> </xsl:template> </xsl:stylesheet>
Apart from the query result, the script produces debugging output, which may be used to trace the path of the query processor through the document.
<XMI> <XMI.content> <Model name="untitledpackage"> <Class name="someClass"> <Operation name="operation"> </Operation> <Operation name="operation"> IS_OK_1 IS_OK_2 [S.100082] </Operation> <Operation name="operation"> </Operation> </Class> </Model> </XMI.content> </XMI>
Again, the id's for types involved:
Type | Id |
A1 | S.100027 |
A2 | S.100073 |
A3 | S.100074 |
B1 | S.100075 |
B2 | S.100076 |
B3 | S.100077 |
C1 | S.100078 |
C2 | S.100079 |
C3 | S.100080 |
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0" xmlns:xt="http://www.jclark.com/xt" extension-element-prefixes="xt"> <xsl:template match="XMI"> <xsl:param name="sub" >S.100079</xsl:param> <xsl:param name="super">S.100074</xsl:param> <xsl:text> </xsl:text> <XMI sub="{$sub}" super="{$super}"> <xsl:apply-templates select="XMI.content"> <xsl:with-param name="sub" ><xsl:value-of select="$sub" /></xsl:with-param> <xsl:with-param name="super"><xsl:value-of select="$super" /></xsl:with-param> </xsl:apply-templates> <xsl:text> </xsl:text> </XMI> </xsl:template> <xsl:template match="XMI.content"> <xsl:param name="sub" >nixxsub</xsl:param> <xsl:param name="super">nixxsuper</xsl:param> <xsl:text> </xsl:text> <XMI.content sub="{$sub}" super="{$super}"> <xsl:apply-templates select="Model"> <xsl:with-param name="sub" ><xsl:value-of select="$sub" /></xsl:with-param> <xsl:with-param name="super"><xsl:value-of select="$super" /></xsl:with-param> </xsl:apply-templates> <xsl:text> </xsl:text> </XMI.content> </xsl:template> <xsl:template match="Model"> <xsl:param name="sub" >nixxsub</xsl:param> <xsl:param name="super">nixxsuper</xsl:param> <xsl:text> </xsl:text> <Model name="{name}" sub="{$sub}" super="{$super}"> <xsl:apply-templates select="ownedElement"> <xsl:with-param name="sub" ><xsl:value-of select="$sub" /></xsl:with-param> <xsl:with-param name="super"><xsl:value-of select="$super" /></xsl:with-param> </xsl:apply-templates> <xsl:text> </xsl:text> </Model> </xsl:template> <xsl:template match="ownedElement"> <xsl:param name="sub" >nixxsub</xsl:param> <xsl:param name="super">nixxsuper</xsl:param> <xsl:apply-templates select="Model|Generalization"> <xsl:with-param name="sub" ><xsl:value-of select="$sub" /></xsl:with-param> <xsl:with-param name="super"><xsl:value-of select="$super" /></xsl:with-param> </xsl:apply-templates> </xsl:template> <xsl:template match="Generalization"> </xsl:template> <xsl:template match="Generalization[subtype[XMI.reference[@target=$sub]]]" priority="2"> <xsl:param name="sub" >nixxsub</xsl:param> <xsl:param name="super">nixxsuper</xsl:param> <xsl:text> </xsl:text> <Generalization name="{@XMI.id}" sub="{$sub}" super="{$super}"> <xsl:apply-templates select="supertype" mode="supertype"> <xsl:with-param name="super"><xsl:value-of select="$super" /></xsl:with-param> </xsl:apply-templates> <xsl:text> </xsl:text> </Generalization> </xsl:template> <xsl:template match="supertype[XMI.reference[@target=$super]]" priority="2" mode="supertype"> <xsl:text> </xsl:text> <supertype super="{$super}"> <xsl:text> [TRUE]</xsl:text> <xsl:text> </xsl:text> </supertype> </xsl:template> <xsl:template match="supertype" mode="supertype"> <xsl:param name="super">nixxsuper</xsl:param> <xsl:text> </xsl:text> <supertype super="{$super}"> <xsl:apply-templates select="XMI.reference" mode="supertype"> <xsl:with-param name="super"><xsl:value-of select="$super" /></xsl:with-param> </xsl:apply-templates> <xsl:text> </xsl:text> </supertype> </xsl:template> <xsl:template match="XMI.reference" mode="supertype"> <xsl:param name="super">nixxsuper</xsl:param> <xsl:variable name="nextsub" select="@target" /> <xsl:text> </xsl:text> <XMI.reference super="{$super}" nextsub="{$nextsub}"> <xsl:apply-templates select="/XMI/XMI.content"> <xsl:with-param name="sub" ><xsl:value-of select="$nextsub" /></xsl:with-param> <xsl:with-param name="super"><xsl:value-of select="$super" /></xsl:with-param> </xsl:apply-templates> <xsl:text> </xsl:text> </XMI.reference> </xsl:template> </xsl:stylesheet>
<XMI super="S.100074" sub="S.100079"> <XMI.content super="S.100074" sub="S.100079"> <Model super="S.100074" sub="S.100079" name="untitledpackage"> <Generalization super="S.100074" sub="S.100079" name="S.100086"> <supertype super="S.100074"> <XMI.reference nextsub="S.100075" super="S.100074"> <XMI.content super="S.100074" sub="S.100075"> <Model super="S.100074" sub="S.100075" name="untitledpackage"> <Generalization super="S.100074" sub="S.100075" name="S.100081"> <supertype super="S.100074"> <XMI.reference nextsub="S.100073" super="S.100074"> <XMI.content super="S.100074" sub="S.100073"> <Model super="S.100074" sub="S.100073" name="untitledpackage"> </Model> </XMI.content> </XMI.reference> </supertype> </Generalization> <Generalization super="S.100074" sub="S.100075" name="S.100135"> <supertype super="S.100074"> <XMI.reference nextsub="S.100027" super="S.100074"> <XMI.content super="S.100074" sub="S.100027"> <Model super="S.100074" sub="S.100027" name="untitledpackage"> </Model> </XMI.content> </XMI.reference> </supertype> </Generalization> </Model> </XMI.content> </XMI.reference> </supertype> </Generalization> <Generalization super="S.100074" sub="S.100079" name="S.100087"> <supertype super="S.100074"> <XMI.reference nextsub="S.100077" super="S.100074"> <XMI.content super="S.100074" sub="S.100077"> <Model super="S.100074" sub="S.100077" name="untitledpackage"> <Generalization super="S.100074" sub="S.100077" name="S.100084"> <supertype super="S.100074"> <XMI.reference nextsub="S.100073" super="S.100074"> <XMI.content super="S.100074" sub="S.100073"> <Model super="S.100074" sub="S.100073" name="untitledpackage"> </Model> </XMI.content> </XMI.reference> </supertype> </Generalization> <Generalization super="S.100074" sub="S.100077" name="S.100137"> <supertype super="S.100074"> [TRUE] </supertype> </Generalization> </Model> </XMI.content> </XMI.reference> </supertype> </Generalization> <Generalization super="S.100074" sub="S.100079" name="S.100139"> <supertype super="S.100074"> <XMI.reference nextsub="S.100076" super="S.100074"> <XMI.content super="S.100074" sub="S.100076"> <Model super="S.100074" sub="S.100076" name="untitledpackage"> <Generalization super="S.100074" sub="S.100076" name="S.100082"> <supertype super="S.100074"> <XMI.reference nextsub="S.100027" super="S.100074"> <XMI.content super="S.100074" sub="S.100027"> <Model super="S.100074" sub="S.100027" name="untitledpackage"> </Model> </XMI.content> </XMI.reference> </supertype> </Generalization> <Generalization super="S.100074" sub="S.100076" name="S.100083"> <supertype super="S.100074"> [TRUE] </supertype> </Generalization> <Generalization super="S.100074" sub="S.100076" name="S.100136"> <supertype super="S.100074"> <XMI.reference nextsub="S.100073" super="S.100074"> <XMI.content super="S.100074" sub="S.100073"> <Model super="S.100074" sub="S.100073" name="untitledpackage"> </Model> </XMI.content> </XMI.reference> </supertype> </Generalization> </Model> </XMI.content> </XMI.reference> </supertype> </Generalization> </Model> </XMI.content> </XMI>