Server : Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.6 System : Windows NT USER-PC 6.1 build 7601 (Windows 7 Professional Edition Service Pack 1) AMD64 User : User ( 0) PHP Version : 7.4.6 Disable Function : NONE Directory : C:/xampp/php/pear/PHP/UML/Output/ |
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:uml="http://schema.omg.org/spec/UML/2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:UML="http://www.omg.org/spec/UML/1.4" exclude-result-prefixes="uml UML"> <xsl:include href="common.xsl"/> <xsl:key name="association1" match="UML:Association|UML:AssociationClass" use="UML:Association.connection/UML:AssociationEnd[1]/UML:AssociationEnd.participant/*/@xmi.idref" /> <xsl:key name="association2" match="UML:Association|UML:AssociationClass" use="UML:Association.connection/UML:AssociationEnd[2]/UML:AssociationEnd.participant/*/@xmi.idref" /> <xsl:key name="abstraction" match="UML:Abstraction" use="@xmi.id"/> <xsl:key name="generalization" match="UML:Generalization[UML:Generalization.parent/UML:Class]" use="UML:Generalization.child/UML:Class/@xmi.idref" /><!-- argo/rationale --> <xsl:key name="generalization2" match="UML:Generalization[not(UML:Generalization.parent/UML:Class)]" use="@child" /> <!--- umbrello--> <xsl:key name="getTaggedValue" match="UML:TaggedValue[@tag='documentation']" use="@modelElement"/> <xsl:param name="appName"/> <xsl:param name="targetVersion" select="string('2.1')"/> <xsl:output encoding="iso-8859-1" method="xml" indent="yes" /> <!-- XMI --> <xsl:template match="/"> <xmi:XMI xmi:version="2.1" xmlns:uml="http://schema.omg.org/spec/UML/2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1"> <xsl:apply-templates select="XMI" /> </xmi:XMI> </xsl:template> <xsl:template match="XMI"> <xsl:apply-templates /> </xsl:template> <xsl:template match="XMI.documentation"> <xmi:Documentation> <xsl:attribute name="exporter"><xsl:value-of select="XMI.exporter"/><xsl:value-of select="concat('Conversion to XMI ',$targetVersion,' by ',$appName)"/></xsl:attribute> <xsl:attribute name="exporterVersion"><xsl:value-of select="XMI.exporterVersion"/></xsl:attribute> </xmi:Documentation> </xsl:template> <xsl:template match="XMI.content"> <xsl:apply-templates select="UML:Model"/> </xsl:template> <xsl:template match="XMI.extension"> <xmi:Extension> <xsl:if test="@xmi.extender!=''"><xsl:attribute name="extender"><xsl:value-of select="@xmi.extender"/></xsl:attribute></xsl:if> <xsl:copy-of select="*"/> </xmi:Extension> </xsl:template> <!-- CONTAINERS --> <xsl:template match="UML:Model"> <uml:Model xmi:type="uml:Model" name="{@name}" xmi:id="{@xmi.id}"> <xsl:if test="@visibility!=''"><xsl:attribute name="visibility"><xsl:value-of select="@visibility"/></xsl:attribute></xsl:if> <xsl:call-template name="namespace-ownedElement"/> </uml:Model> </xsl:template> <xsl:template match="UML:Package"> <packagedElement xmi:type="uml:Package" xmi:id="{@xmi.id}" name="{@name}"> <xsl:call-template name="namespace-ownedElement"/> </packagedElement> </xsl:template> <xsl:template name="namespace-ownedElement"> <xsl:for-each select="UML:Namespace.ownedElement"> <xsl:apply-templates select="UML:Model"/> <xsl:apply-templates select="UML:Package"/> <xsl:apply-templates select="UML:UseCase"/> <xsl:apply-templates select="UML:Actor"/> <xsl:apply-templates select="UML:Class[@name!='']"/> <xsl:apply-templates select="UML:Association"/> <xsl:apply-templates select="UML:AssociationClass"/> <xsl:apply-templates select="UML:Interface"/> <xsl:apply-templates select="UML:Dependency"/> <xsl:apply-templates select="UML:Stereotype"/> <xsl:apply-templates select="UML:Abstraction"/> <xsl:apply-templates select="UML:Artifact"/> <xsl:apply-templates select="UML:DataType"/> <xsl:apply-templates select="XMI.extension"/> <!--xsl:call-template name="realization"/--> </xsl:for-each> <xsl:call-template name="comment"/> <xsl:apply-templates select="XMI.extension"/> </xsl:template> <!-- ELEMENTS --> <xsl:template match="UML:Actor"> <packagedElement xmi:type="uml:Actor" name="{@name}" xmi:id="{@xmi.id}" visibility="{@visibility}" isAbstract="{@isAbstract}"/> </xsl:template> <xsl:template match="UML:UseCase"> <packagedElement xmi:type="uml:UseCase" name="{@name}" xmi:id="{@xmi.id}" visibility="{@visibility}" isAbstract="{@isAbstract}"/> </xsl:template> <xsl:template match="UML:Class"> <xsl:call-template name="class"/> </xsl:template> <xsl:template name="class"> <xsl:variable name="hic" select="@xmi.id"/> <packagedElement xmi:type="uml:Class" name="{@name}" xmi:id="{$hic}" visibility="{@visibility}" isAbstract="{@isAbstract}"> <xsl:for-each select="key('generalization',$hic)"> <generalization xmi:type="uml:Generalization" xmi:id="{@xmi.id}" general="{UML:Generalization.parent/UML:Class/@xmi.idref}"/> </xsl:for-each> <xsl:for-each select="key('generalization2',$hic)"> <generalization xmi:type="uml:Generalization" xmi:id="{@xmi.id}" general="{@parent}"/> </xsl:for-each> <xsl:for-each select="key('association2',$hic)/UML:Association.connection/UML:AssociationEnd[1]"> <ownedAttribute xmi:type="uml:Property" name="" association="{../../@xmi.id}" aggregation="{@aggregation}" xmi:id="{concat($hic,'_',../../@xmi.id)}"> <type xmi:idref="{UML:AssociationEnd.participant/*/@xmi.idref}" /> <lowerValue xmi:type="uml:LiteralString"> <xsl:attribute name="value"><xsl:call-template name="convInfinite"><xsl:with-param name="value" select="UML:AssociationEnd.multiplicity/UML:Multiplicity/UML:Multiplicity.range/UML:MultiplicityRange/@lower"/></xsl:call-template></xsl:attribute> </lowerValue> <upperValue xmi:type="uml:LiteralString"> <xsl:attribute name="value"><xsl:call-template name="convInfinite"><xsl:with-param name="value" select="UML:AssociationEnd.multiplicity/UML:Multiplicity/UML:Multiplicity.range/UML:MultiplicityRange/@upper"/></xsl:call-template></xsl:attribute> </upperValue> </ownedAttribute> </xsl:for-each> <xsl:for-each select="key('association1',$hic)/UML:Association.connection/UML:AssociationEnd[2]" > <ownedAttribute xmi:type="uml:Property" name="" association="{../../@xmi.id}" aggregation="{@aggregation}" xmi:id="{concat($hic,'_',../../@xmi.id)}"> <type xmi:idref="{UML:AssociationEnd.participant/*/@xmi.idref}" /> <lowerValue xmi:type="uml:LiteralString"> <xsl:attribute name="value"><xsl:call-template name="convInfinite"><xsl:with-param name="value" select="UML:AssociationEnd.multiplicity/UML:Multiplicity/UML:Multiplicity.range/UML:MultiplicityRange/@lower"/></xsl:call-template></xsl:attribute> </lowerValue> <upperValue xmi:type="uml:LiteralString"> <xsl:attribute name="value"><xsl:call-template name="convInfinite"><xsl:with-param name="value" select="UML:AssociationEnd.multiplicity/UML:Multiplicity/UML:Multiplicity.range/UML:MultiplicityRange/@upper"/></xsl:call-template></xsl:attribute> </upperValue> </ownedAttribute> </xsl:for-each> <xsl:apply-templates select="UML:Classifier.feature/UML:Attribute"/> <xsl:apply-templates select="UML:Classifier.feature/UML:Operation"/> <xsl:call-template name="comment"/> </packagedElement> </xsl:template> <xsl:template match="UML:Attribute"> <ownedAttribute xmi:type="uml:Property" name="{@name}" xmi:id="{@xmi.id}" visibility="{@visibility}" > <xsl:if test="@isAbstract"><xsl:attribute name="isAbstract">true</xsl:attribute></xsl:if> <xsl:if test="@isStatic or @ownerScope='classifier'"><xsl:attribute name="isStatic">true</xsl:attribute></xsl:if> <xsl:if test="@isReadOnly or @changeability='frozen'"><xsl:attribute name="isReadOnly">true</xsl:attribute></xsl:if> <type xmi:idref="{(UML:StructuralFeature.type/UML:DataType/@xmi.idref)|@type}" /> <xsl:if test="UML:Attribute.initialValue"> <xsl:for-each select="UML:Attribute.initialValue"> <defaultValue xmi:type="uml:LiteralString" xmi:id="{UML:Expression/@xmi.id}" value="{UML:Expression/@body}" /> </xsl:for-each> </xsl:if> <xsl:if test="@initialValue!=''"> <!-- umbrello--> <defaultValue xmi:type="uml:LiteralString" xmi:id="{concat(@xmi.id,'dv')}" value="{@initialValue}"/> </xsl:if> <xsl:call-template name="comment"/> <xsl:apply-templates select="XMI.extension"/> </ownedAttribute> </xsl:template> <xsl:template match="UML:Operation"> <ownedOperation xmi:type="uml:Operation" name="{@name}" xmi:id="{@xmi.id}" visibility="{@visibility}" isAbstract="{@isAbstract}"> <xsl:if test="@isStatic or @ownerScope='classifier'"><xsl:attribute name="isStatic">true</xsl:attribute></xsl:if> <xsl:if test="@isRoot"><xsl:attribute name="isRoot">true</xsl:attribute></xsl:if> <xsl:for-each select="UML:BehavioralFeature.parameter/UML:Parameter"> <ownedParameter name="{@name}" xmi:id="{@xmi.id}" direction="{@kind}"> <type xmi:idref="{(UML:Parameter.type/UML:DataType/@xmi.idref)|@type}" /> <xsl:for-each select="UML:Parameter.defaultValue"> <defaultValue xmi:type="uml:LiteralString" xmi:id="{UML:Expression/@xmi.id}" value="{UML:Expression/@body}"/> </xsl:for-each> <xsl:if test="@value!=''"> <!-- umbrello--> <defaultValue xmi:type="uml:LiteralString" xmi:id="{concat(@xmi.id,'dv')}" value="{@value}"/> </xsl:if> <xsl:call-template name="comment"/> </ownedParameter> </xsl:for-each> <xsl:call-template name="comment"/> <xsl:apply-templates select="XMI.extension"/> </ownedOperation> </xsl:template> <xsl:template match="UML:DataType"> <packagedElement xmi:type="uml:DataType" name="{@name}" xmi:id="{@xmi.id}"/> </xsl:template> <xsl:template match="UML:Interface"> <packagedElement xmi:type="uml:Interface" name="{@name}" xmi:id="{@xmi.id}" visibility="{@visibility}" isAbstract="{@isAbstract}"> <xsl:apply-templates select="UML:Classifier.feature/UML:Operation"/> <xsl:call-template name="comment"/> <xsl:apply-templates select="XMI.extension"/> </packagedElement> </xsl:template> <xsl:template match="UML:Artifact"> <packagedElement xmi:type="uml:Artifact" xmi:id="{@xmi.id}" name="{@name}" stereotype="{UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref}"/> </xsl:template> <xsl:template match="UML:Stereotype"> <packagedElement xmi:type="uml:Stereotype" xmi:id="{@xmi.id}" name="{@name}" isAbstract="{@isAbstract}"/> </xsl:template> <!-- STRUCTURAL ELEMENTS --> <xsl:template match="UML:Dependency"> <xsl:choose> <xsl:when test="UML:Dependency.client"> <packagedElement xmi:type="uml:Dependency" xmi:id="{@xmi.id}" client="{UML:Dependency.client/UML:Class/@xmi.idref}" supplier="{UML:Dependency.supplier/UML:Class/@xmi.idref}"> <xsl:if test="@name!=''"> <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> </xsl:if> <xsl:apply-templates select="UML:Classifier.feature/UML:Operation"/> </packagedElement> </xsl:when> <xsl:when test="@client!=''"> <packagedElement xmi:type="uml:Dependency" xmi:id="{@xmi.id}" client="{@client}" supplier="{@supplier}" visibility="{@visibility}"> <xsl:if test="@name!=''"> <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> </xsl:if> </packagedElement> </xsl:when> </xsl:choose> </xsl:template> <xsl:template match="UML:Association"> <xsl:call-template name="association"/> </xsl:template> <xsl:template match="UML:AssociationClass"> <xsl:call-template name="class"/> <xsl:call-template name="association"><xsl:with-param name="type">AC</xsl:with-param></xsl:call-template> </xsl:template> <xsl:template match="UML:Generalization"/> <xsl:template match="UML:Abstraction"> <xsl:choose> <xsl:when test="@client!=''"> <packagedElement xmi:type="uml:Realization" xmi:id="{@xmi.id}" client="{@client}" supplier="{@supplier}" realizingClassifier="{@supplier}" /> </xsl:when> <xsl:when test="UML:Dependency.supplier"> <xsl:variable name="supplier" select="UML:Dependency.supplier/*/@xmi.idref"/> <packagedElement xmi:type="uml:Realization" xmi:id="{@xmi.id}" client="{UML:Dependency.client/UML:Class/@xmi.idref}" supplier="{$supplier}" realizingClassifier="{$supplier}" /> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="convInfinite"> <xsl:param name="value"/> <xsl:choose> <xsl:when test="$value='-1'">*</xsl:when> <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="association"> <xsl:param name="type" select="''" /> <packagedElement xmi:type="uml:Association" xmi:id="{concat($type,@xmi.id)}"> <xsl:choose> <xsl:when test="$type!='AC'"> <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> </xsl:when> <xsl:otherwise> <xsl:attribute name="name"></xsl:attribute> </xsl:otherwise> </xsl:choose> <xsl:variable name="class_far1" select="UML:Association.connection/UML:AssociationEnd[1]/UML:AssociationEnd.participant/*/@xmi.idref"/> <memberEnd xmi:idref="{concat($class_far1,'_',@xmi.id)}" /> <xsl:variable name="class_far2" select="UML:Association.connection/UML:AssociationEnd[2]/UML:AssociationEnd.participant/*/@xmi.idref"/> <memberEnd xmi:idref="{concat($class_far2,'_',@xmi.id)}" /> </packagedElement> <xsl:if test="$type='AC'"> <packagedElement xmi:type="uml:AssociationClass" xmi:id="{concat('AAC',@xmi.id)}"> <memberEnd xmi:idref="{concat($type,@xmi.id)}"/> <memberEnd xmi:idref="{@xmi.id}"/> </packagedElement> </xsl:if> </xsl:template> <!-- COMMENTS --> <xsl:template match="UML:Comment"> <xsl:call-template name="comment-body"> <xsl:with-param name="id" select="@xmi.id"/> <xsl:with-param name="text" select="@body"/> </xsl:call-template> </xsl:template> <xsl:template match="UML:ModelElement.taggedValue/UML:TaggedValue"> <xsl:call-template name="comment-body"> <xsl:with-param name="id" select="@xmi.id"/> <xsl:with-param name="text" select="UML:TaggedValue.dataValue/text()"/> </xsl:call-template> </xsl:template> <xsl:template name="comment"> <xsl:apply-templates select="UML:Comment"/> <xsl:apply-templates select="UML:ModelElement.taggedValue/UML:TaggedValue"/><!-- argo --> <xsl:for-each select="key('getTaggedValue', @xmi.id)"> <!-- rationale --> <xsl:call-template name="comment-body"> <xsl:with-param name="id" select="concat(@xmi.id,'comment')"/> <xsl:with-param name="text" select="concat(@value, UML:TaggedValue.value/text())"/> </xsl:call-template> </xsl:for-each> <xsl:call-template name="comment-body"><!-- umbrello--> <xsl:with-param name="id" select="concat(@xmi.id,'comment')"/> <xsl:with-param name="text" select="@comment"/> </xsl:call-template> </xsl:template> <xsl:template name="comment-body"> <xsl:param name="id" value="id"/> <xsl:param name="text" value="text"/> <xsl:if test="$text!=''"> <ownedComment xmi:type="uml:Comment" xmi:id="{$id}"> <body><xsl:value-of select="$text"/></body> </ownedComment> </xsl:if> </xsl:template> </xsl:stylesheet>