Hi,
meine Ausgangsstruktur sieh folgendermaßen aus.
<XML>
<MODELS>
<MODEL>
<AttributesBig>
<Instance>
<Attributes>
<Connection>
Diese will ich folgende Struktur umwandeln (xmi 1.3 UML 1.4)
<XMI.content>
<UML:Model>
<UML:Namespace.ownedElement>
<UML:Package>
<UML:Namespace.ownedElement>
<UML:Model >
<UML:Namespace.ownedElement>
<UML:Actor>
</UML:Actor>
<UML:UseCase>
</UML:UseCase>
<UML:Comment>
<UML:ModelElement.name>
</UML:ModelElement.name>
<UML:Comment.body>
</UML:Comment.body>
<UML:Comment.annotatedElement>
</UML:Comment.annotatedElement>
</UML:Comment>
<UML:Association xmi.id = 'B'
name = '{Test}' visibility = 'package' isSpecification = 'false'
isAbstract = 'false' stereotype = 'XX.11'>
<UML:Association.connection>
<UML:AssociationEnd xmi.id = 'C' visibility = 'public' isSpecification = 'false'
isNavigable = 'false' aggregation = 'none'
targetScope = 'instance' changeability = 'changeable'>
<UML:AssociationEnd.multiplicity>
<UML:Multiplicity/>
</UML:AssociationEnd.multiplicity>
<UML:AssociationEnd.participant>
<UML:Classifier xmi.idref = 'D'/>
</UML:AssociationEnd.participant>
</UML:AssociationEnd>
<UML:AssociationEnd xmi.id = 'E' visibility = 'public' isSpecification = 'false'
isNavigable = 'false' aggregation = 'none'
targetScope = 'instance' changeability = 'changeable'>
<UML:AssociationEnd.multiplicity>
<UML:Multiplicity/>
</UML:AssociationEnd.multiplicity>
<UML:AssociationEnd.participant>
<UML:Classifier xmi.idref = 'F'/>
</UML:AssociationEnd.participant>
</UML:AssociationEnd>
</UML:Association.connection>
</UML:Association>
</UML:Namespace.ownedElement>
</UML:Model>
<UML:TaggedValue xmi.id = 'XX.9'
name = 'text'
modelElement = 'XX.7'>
<UML:TaggedValue.dataValue>
</UML:TaggedValue.dataValue>
</UML:TaggedValue>
</XMI.content>
</XMI>
So, jetzt habe ich das Problem das in <UML:Association> (Zielstruktur) Information rein müssen, die ich zuerst mit Attributwerten die in <Connection> und <Instance> (Quellstruktur) stehen vergleichen muss und bei Übereinstimmung müssen andere Attributwerte in die Zielstruktur übernommen werden.
In <In Connection> steht zum Beispiel drin, dass Maier eine Verbindung mit Müller hat. In der Zielstruktur soll aber drin stehen, dass die Nummer 123 mit der Nummer 234 eine Verbindung hat. Diese Nummer die zu Müller passt erhält man aus <Instance>, die andere Nummer die zu Maier passt erhält man aus einer anderen <Instance>.
Ich habe es versucht folgendermaßen umzusetzen.
<XMI>
<XMI.content>
<xsl:for-each select="MODELS">
<xsl:variable name="VarMODELS" select="."/>
<UML:Model>
<UML:Namespace.ownedElement>
<UML:Package>
<UML:Namespace.ownedElement>
<xsl:for-each select="MODEL">
<xsl:variable name="VarMODEL" select="."/>
<UML:Model>
<UML:Namespace.ownedElement>
<xsl:for-each select="INSTANCE">
<xsl:choose>
<xsl:when test="@class='actor'">
<UML:Actor>
<xsl:attribute name="xmi.id" separator=" ">
<xsl:value-of select="@id"/>
</xsl:attribute>
</UML:Actor>
</xsl:when>
<xsl:when test="@class='use case'">
<UML:UseCase>
<xsl:attribute name="xmi.id" separator=" ">
<xsl:value-of select="@id"/>
</xsl:attribute>
</UML:UseCase>
</xsl:when>
<xsl:when test="@class='Note'">
<UML:Comment>
</UML:Comment>
</xsl:when>
<xsl:when test="@class='system boundary'">
<UML:system_boundary>
</UML:system_boundary>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:for-each select="CONNECTOR">
<xsl:choose>
<xsl:when test="@class='communicates'">
<UML:Association>
<xsl:attribute name="xmi.id" separator=" ">
<xsl:value-of select="@id"/>
</xsl:attribute>
<UML:Association.connection>
<UML:AssociationEnd visibility='public' isSpecification="false" isNavigable="false" aggregation="none" targetScope="instance" changeability="changeable">
<xsl:variable name="VarClass" select="FROM/@class"/>
<xsl:variable name="VarName" select="FROM/@instance"/>
<xsl:for-each select="INSTANCE">
<xsl:if test="@class=$VarClass">
<xsl:if test="@name=$VarName">
<xsl:value-of select="@id"/>
</xsl:if>
</xsl:if>
</xsl:for-each>
<UML:AssociationEnd.multiplicity>
<UML:Multiplicity/>
</UML:AssociationEnd.multiplicity>
<UML:AssociationEnd.participant>
<UML:Classifier xmi.idref="S.11"/>
</UML:AssociationEnd.participant>
</UML:AssociationEnd>
<UML:AssociationEnd xmi.id="G.19" visibility="public" isSpecification="false" isNavigable="false" aggregation="none"
</UML:AssociationEnd>
</UML:Association.connection>
</UML:Association>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</UML:Namespace.ownedElement>
</UML:Model>
</xsl:for-each>
</UML:Namespace.ownedElement>
</UML:Package>
</UML:Namespace.ownedElement>
</UML:Model>
</xsl:for-each>
</XMI.content>
</XMI>
Die Stelle die interessant ist habe ich mal fett markiert. Hier erhalte ich keine Ausgabe, was muss ich anders machen, wo liegt mein Denkfehler?
THX
Opelk
meine Ausgangsstruktur sieh folgendermaßen aus.
<XML>
<MODELS>
<MODEL>
<AttributesBig>
<Instance>
<Attributes>
<Connection>
Diese will ich folgende Struktur umwandeln (xmi 1.3 UML 1.4)
<XMI.content>
<UML:Model>
<UML:Namespace.ownedElement>
<UML:Package>
<UML:Namespace.ownedElement>
<UML:Model >
<UML:Namespace.ownedElement>
<UML:Actor>
</UML:Actor>
<UML:UseCase>
</UML:UseCase>
<UML:Comment>
<UML:ModelElement.name>
</UML:ModelElement.name>
<UML:Comment.body>
</UML:Comment.body>
<UML:Comment.annotatedElement>
</UML:Comment.annotatedElement>
</UML:Comment>
<UML:Association xmi.id = 'B'
name = '{Test}' visibility = 'package' isSpecification = 'false'
isAbstract = 'false' stereotype = 'XX.11'>
<UML:Association.connection>
<UML:AssociationEnd xmi.id = 'C' visibility = 'public' isSpecification = 'false'
isNavigable = 'false' aggregation = 'none'
targetScope = 'instance' changeability = 'changeable'>
<UML:AssociationEnd.multiplicity>
<UML:Multiplicity/>
</UML:AssociationEnd.multiplicity>
<UML:AssociationEnd.participant>
<UML:Classifier xmi.idref = 'D'/>
</UML:AssociationEnd.participant>
</UML:AssociationEnd>
<UML:AssociationEnd xmi.id = 'E' visibility = 'public' isSpecification = 'false'
isNavigable = 'false' aggregation = 'none'
targetScope = 'instance' changeability = 'changeable'>
<UML:AssociationEnd.multiplicity>
<UML:Multiplicity/>
</UML:AssociationEnd.multiplicity>
<UML:AssociationEnd.participant>
<UML:Classifier xmi.idref = 'F'/>
</UML:AssociationEnd.participant>
</UML:AssociationEnd>
</UML:Association.connection>
</UML:Association>
</UML:Namespace.ownedElement>
</UML:Model>
<UML:TaggedValue xmi.id = 'XX.9'
name = 'text'
modelElement = 'XX.7'>
<UML:TaggedValue.dataValue>
</UML:TaggedValue.dataValue>
</UML:TaggedValue>
</XMI.content>
</XMI>
So, jetzt habe ich das Problem das in <UML:Association> (Zielstruktur) Information rein müssen, die ich zuerst mit Attributwerten die in <Connection> und <Instance> (Quellstruktur) stehen vergleichen muss und bei Übereinstimmung müssen andere Attributwerte in die Zielstruktur übernommen werden.
In <In Connection> steht zum Beispiel drin, dass Maier eine Verbindung mit Müller hat. In der Zielstruktur soll aber drin stehen, dass die Nummer 123 mit der Nummer 234 eine Verbindung hat. Diese Nummer die zu Müller passt erhält man aus <Instance>, die andere Nummer die zu Maier passt erhält man aus einer anderen <Instance>.
Ich habe es versucht folgendermaßen umzusetzen.
<XMI>
<XMI.content>
<xsl:for-each select="MODELS">
<xsl:variable name="VarMODELS" select="."/>
<UML:Model>
<UML:Namespace.ownedElement>
<UML:Package>
<UML:Namespace.ownedElement>
<xsl:for-each select="MODEL">
<xsl:variable name="VarMODEL" select="."/>
<UML:Model>
<UML:Namespace.ownedElement>
<xsl:for-each select="INSTANCE">
<xsl:choose>
<xsl:when test="@class='actor'">
<UML:Actor>
<xsl:attribute name="xmi.id" separator=" ">
<xsl:value-of select="@id"/>
</xsl:attribute>
</UML:Actor>
</xsl:when>
<xsl:when test="@class='use case'">
<UML:UseCase>
<xsl:attribute name="xmi.id" separator=" ">
<xsl:value-of select="@id"/>
</xsl:attribute>
</UML:UseCase>
</xsl:when>
<xsl:when test="@class='Note'">
<UML:Comment>
</UML:Comment>
</xsl:when>
<xsl:when test="@class='system boundary'">
<UML:system_boundary>
</UML:system_boundary>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:for-each select="CONNECTOR">
<xsl:choose>
<xsl:when test="@class='communicates'">
<UML:Association>
<xsl:attribute name="xmi.id" separator=" ">
<xsl:value-of select="@id"/>
</xsl:attribute>
<UML:Association.connection>
<UML:AssociationEnd visibility='public' isSpecification="false" isNavigable="false" aggregation="none" targetScope="instance" changeability="changeable">
<xsl:variable name="VarClass" select="FROM/@class"/>
<xsl:variable name="VarName" select="FROM/@instance"/>
<xsl:for-each select="INSTANCE">
<xsl:if test="@class=$VarClass">
<xsl:if test="@name=$VarName">
<xsl:value-of select="@id"/>
</xsl:if>
</xsl:if>
</xsl:for-each>
<UML:AssociationEnd.multiplicity>
<UML:Multiplicity/>
</UML:AssociationEnd.multiplicity>
<UML:AssociationEnd.participant>
<UML:Classifier xmi.idref="S.11"/>
</UML:AssociationEnd.participant>
</UML:AssociationEnd>
<UML:AssociationEnd xmi.id="G.19" visibility="public" isSpecification="false" isNavigable="false" aggregation="none"
</UML:AssociationEnd>
</UML:Association.connection>
</UML:Association>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</UML:Namespace.ownedElement>
</UML:Model>
</xsl:for-each>
</UML:Namespace.ownedElement>
</UML:Package>
</UML:Namespace.ownedElement>
</UML:Model>
</xsl:for-each>
</XMI.content>
</XMI>
Die Stelle die interessant ist habe ich mal fett markiert. Hier erhalte ich keine Ausgabe, was muss ich anders machen, wo liegt mein Denkfehler?
THX
Opelk
Comment