Re: Newbie: Generating a class dictionary from a class diagram?
"Hayrol Reyes" <[email protected]> Fri, 24 Oct 2008 11:14:40 -0600
| Newsgroups | gmane.comp.lang.uml.argouml.user |
|---|---|
| Message-ID | <[email protected]> |
Hi Leif, it's a better idea.
I tryied the preprocess.xsl lateley but I'm getting a error:
Error on line 19 of preprocess.xsl:
XTDE0410: An attribute node (xmi.version) cannot be created after the
children of the
containing element
at xsl:apply-templates
(file:/D:/Download1/saxonB/saxonb9/prueba/preprocess.xsl#13)
processing /XMI/@xmi.version
at xsl:apply-templates
(file:/D:/Download1/saxonB/saxonb9/prueba/preprocess.xsl#7)
processing /XMI
Transformation failed: Run-time errors were reported
I'm using saxonb9, and my xmi was generated with latest ArgoUML 0.26.
This was the command line:
java -jar saxon9.jar prueba\pruebav026.xmi prueba\preprocess.xsl
profile=default-uml14.xmi > prueba\pruebav026int.xmi
What I'm doing bad?
Regards,
HayrolR
2008/10/24 Leif Holmgren <[email protected]>
> Neither I could let this rest.
>
> I could not find a way to include the profile xmi file into the processing
> directly. Instead I managed to do a preprocessing of the file so that given
> the two files you get a merge files where the id references have been
> corrected. I attach it.
>
> When you run this you need to supply the name of the profile file as a
> parameter. With saxon that is done by typing
> java -jar d:\prog\saxon\saxon8.jar test.xmi preprocess.xsl
> profile=default-uml14.xmi > intermediate.xmi
> My guess is that with xsltproc the command line would be
> xsltproc test.xmi preprocess.xsl profile=default-uml14.xmi >
> intermediate.xmi
>
> Then you can run your transformation into documentation successfully.
>
> I notice that saxon reports two warnings so it's not 100% sure that it will
> work
>
> /Leif
>
>
> Hayrol Reyes wrote:
>
> Well guys, I worked yesterday in the learning XMI and XSLT a little more
>> and after I dedicated the today morning to modify xmi-to-html.xsl in order
>> to extract the documentation from clases. I got some small progress
>> (unfortunately), but at least my xmi-to-html2.xsl could transform some field
>> from the Documentation tab of my .zargo (of course exported first to xmi)
>> into the html result.
>> Kevin, because the main problem is that some UML:TagDefinition has its
>> xmi.id <http://xmi.id> outside the source xmi (using href to
>> default-uml14.xmi, as is the case of "documentation" field) then you need to
>> use the tagged values that has its xmi.id <http://xmi.id> inside the
>> source xmi, I mean, the author, version and see fields from the
>> Documentation tab are tagged values fully identifiable becouse its xmi.id<
>> http://xmi.id> still into the source xmi. So, you can use the "see" field
>> as documentation container, anyway it's like the "documentation" field but
>> xslt accessible for novices like me. I have updated the original
>> xmi-to-html.xsl into my own xml-to-html2.xsl with the necesary changes for
>> the class documentation (using the "see" field, again). I did can't write
>> this xslt code as dynamic as I wanted, so I wrote the code fixed for each
>> field (a really bad approach), but it's my first try with xslt, so I hope to
>> learn a little more and make it better (for sure, it could be better
>> written).
>> Btw, there are also a problem with the xls:key for //UML:TagDefinition,
>> in the file I downloaded (xmi-to-html-xsl), so I'm attaching my
>> xmi-to-html2.xls with this correction and the documentation generation part.
>> Hope this help you a little more.
>> Regards,
>> PS: I'm attaching the other files I used too.
>> 2008/10/22 Leif Holmgren <[email protected] <mailto:[email protected]>>
>>
>>
>> I can't help you with the reference issues. I tried to look at it
>> yesterday but I have no clue how to solve this in xslt. I hope you
>> get some input from the dev list.
>>
>> You should also add a
>> <xsl:output method="text"/>
>> element to your stylesheet. Just before the first <xsl:key element
>> will be find. That will remove any XML or HTML output that is not
>> directly in your code.
>>
>> Good luck.
>>
>> /Leif
>>
>> Zembower, Kevin wrote:
>>
>> Leif, thanks for your continued advice.
>>
>> At least one problem with the link you pointed out is that I
>> get this response if I just try to bring in up in a browser:
>> Access is denied. Error processing resource
>> 'http://argouml.org/profiles/uml14/default-uml14.xmi'.
>> Can anyone fix this?
>>
>> In case anyone is playing along at home, I've attached my
>> crude hack of just cutting out the parts I don't need from
>> xmi-to-html.xsl, called xmi-to-ClassDictionary.xsl. I use it with:
>> xsltproc xmi-to-ClassDictionary.xsl test.xmi >test.txt
>> using the same text.xmi from my previous post and examine
>> test.txt with less. This is a much smaller file that
>> xmi-to-html.xmi, and may be easier to work with. It's working,
>> but the definitions don't show up. This is what I'm working on
>> now.
>>
>> Thanks, again. If I get this working, I'll post it in the file
>> download section of ArgoUML.
>>
>> -Kevin
>>
>> -----Original Message-----
>> From: Leif Holmgren [mailto:[email protected]
>> <mailto:[email protected]>]
>> Sent: Tuesday, October 21, 2008 12:16 PM
>> To: [email protected] <mailto:[email protected]>
>> Subject: Re: [argouml-users] Newbie: Generating a class
>> dictionary from a class diagram?
>>
>> Zembower, Kevin wrote:
>>
>>
>> I down loaded the documents from the link you provided,
>> Leif, and got some preliminary results. Before I go crazy
>> changing things, I tried to use these files without
>> modification to generate output. I used this command to
>> generate an html file:
>> xsltproc xmi-to-html.xsl test.xmi > test.html
>> When I examine test.html with lynx, a text-only browser, I
>> see my two classes, Test and NotTest. However, I don't see
>> the documentation notes in each of these classes. Should I?
>>
>>
>> Well, there seem to be a problem somewhere. This is a bit over
>> my head
>> as I am primarily a modeller but:
>> Documentation is placed in the XMI-file as a tagged value on the
>> modelling element it belongs to. Tagged values have their tag name
>> placed in a tag definition. It seems as if these are no longer
>> output to
>> the XMI files from ArgoUML. Instead it refers to a profile-file.
>> <UML:TagDefinition href =
>> '
>> http://argouml.org/profiles/uml14/default-uml14.xmi#.:000000000000087C'/
>> <
>> http://argouml.org/profiles/uml14/default-uml14.xmi#.:000000000000087C%27/>>
>>
>>
>>
>> I don't know how to fix this. Probably you could find the
>> profile file
>> somewhere in the project CM system. Perhaps even at the
>> specified path,
>> but that is really only an id so don't expect to find it there.
>> When you find it you could probably somehow merge the XMI
>> files but
>> remember that XML only supports one root elemet per file so
>> the profile
>> should have to go into the other file.
>>
>>
>> Note that I had to manually insert this second line:
>> <!DOCTYPE XMI SYSTEM "UML14.dtd">
>> UML14.dtd from this page:
>>
>>
>> Must be something specific to xsltproc. Never had to do that
>> but I use
>> saxon.
>>
>>
>> I'm hoping someone has the patience to give me some
>> suggestions on modifying xmi-to-html.xsl to just produce
>> plain text output of class names and documentation.
>>
>>
>>
>> It's not that difficult. Generating plain text instead of XML
>> (or HTML
>> for that matter) is fully possible. I use XSLT to generate
>> Delphi code
>> from my models. Just find the tags that look like HTML and
>> eliminate
>> these, or replace them with plain text headers, linebreaks or
>> whatever
>> you want. Leave anything starting with <xsl: as that is what
>> defines
>> your template structure and queries on the XMI file. I'm sure
>> you will
>> find it easy when you start poking around in it. (By the way, )
>>
>> /Leif
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> <mailto:[email protected]>
>> For additional commands, e-mail: [email protected]
>> <mailto:[email protected]>
>>
>>
>> ------------------------------------------------------------------------
>>
>> <!--
>> Title: xmi-to-ClassDictionary.xsl
>> Purpose: An XSL stylesheet for converting ArgoUML 0.26 XMI
>> to a plain
>> text file of Class name and documentation.
>>
>> Modified from xmi-to-html.xsl.
>>
>> This program is free software; you can redistribute it
>> and/or modify
>> it under the terms of the GNU General Public License as
>> published by
>> the Free Software Foundation. A copy of the license may be
>> found at
>> http://www.objectsbydesign.com/projects/gpl.txt
>>
>> Version: 21 October 2008
>> Author: Kevin Zembower, [email protected]
>> <mailto:[email protected]>
>>
>> For HISTORY and CREDITS, please see the README file.
>>
>> -->
>>
>> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>> xmlns="http://www.w3.org/1999/xhtml"
>> xmlns:UML="org.omg.xmi.namespace.UML"
>> version="1.0"
>> exclude-result-prefixes="#default">
>> <xsl:key
>> name="classifier"
>> match="//UML:Class|//UML:Interface|
>> //UML:DataType"
>> use="@xmi.id <http://xmi.id/>"/>
>>
>> <xsl:key
>> name="tagdefinition"
>> match="//UML:TagDefinition"
>> use="@name"/>
>>
>>
>> <!-- Document Root -->
>> <xsl:template match="/">
>> <xsl:apply-templates select="//UML:Model[@xmi.id
>> <http://xmi.id/>]" mode="body"/>
>> <!-- Classes -->
>> <xsl:apply-templates select="//UML:Class[@xmi.id
>> <http://xmi.id/>]">
>> <xsl:sort select="@name"/>
>> </xsl:apply-templates>
>>
>> </xsl:template>
>>
>>
>> <!-- Document Heading -->
>> <xsl:template match="UML:Model" mode="body">
>> <!-- Name of the model -->
>> <xsl:value-of select="@name"/>
>>
>> </xsl:template>
>>
>>
>> <!-- Class -->
>> <xsl:template match="UML:Class">
>> <xsl:variable name="element_name" select="@name"/>
>>
>> <xsl:variable name="xmi_id" select="@xmi.id <http://xmi.id/>" />
>>
>> Class: <xsl:value-of select="$element_name"/>
>> <xsl:call-template name="documentation"/>
>> </xsl:template>
>>
>> <xsl:template name="documentation">
>> <xsl:variable name="doctag"
>> select="key('tagdefinition', 'documentation')/@xmi.id
>> <http://xmi.id/>" />
>>
>> <xsl:variable name="documentation"
>> select="UML:ModelElement.taggedValue/UML:TaggedValue
>>
>> [UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=$doctag]/
>> UML:TaggedValue.dataValue"/>
>> <xsl:if test="string-length($documentation)>0">
>> Working Definition (Documentation): <xsl:value-of
>> select="$documentation"/>
>> </xsl:if>
>> </xsl:template>
>>
>> </xsl:stylesheet>
>>
>> ------------------------------------------------------------------------
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> <mailto:[email protected]>
>> For additional commands, e-mail: [email protected]
>> <mailto:[email protected]>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> <mailto:[email protected]>
>> For additional commands, e-mail: [email protected]
>> <mailto:[email protected]>
>>
>>
>> ------------------------------------------------------------------------
>>
>> <?xml version="1.0"?>
>> <!--
>> Title: xmi-to-html.xsl
>> Purpose: An XSL stylesheet for converting ArgoUML 0.80 XMI to HTML.
>>
>> Copyright (C) 1999-2001, Objects by Design, Inc. All Rights Reserved.
>>
>> This program is free software; you can redistribute it and/or modify
>> it under the terms of the GNU General Public License as published by
>> the Free Software Foundation. A copy of the license may be found at
>> http://www.objectsbydesign.com/projects/gpl.txt
>>
>> Version: March 5, 2006
>> Hayrol Reyes
>> Version: October 23, 2008 (Just a test, not HISTORY and CREDITS updated
>> in the README file)
>>
>> For HISTORY and CREDITS, please see the README file.
>>
>> -->
>>
>> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>> xmlns="http://www.w3.org/1999/xhtml"
>> xmlns:UML="org.omg.xmi.namespace.UML"
>> version="1.0"
>> exclude-result-prefixes="#default">
>> <xsl:output method="xml" indent="yes"
>> doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>> doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
>>
>> <xsl:key
>> name="classifier"
>> match="//UML:Class|//UML:Interface|
>> //UML:DataType"
>> use="@xmi.id"/>
>>
>> <xsl:key
>> name="generalization"
>> match="//UML:Generalization"
>> use="@xmi.id"/>
>>
>> <xsl:key
>> name="abstraction"
>> match="//UML:Abstraction"
>> use="@xmi.id"/>
>>
>> <xsl:key
>> name="multiplicity"
>> match="//UML:Multiplicity"
>> use="@xmi.id"/>
>>
>> <xsl:key
>> name="tagdefinition"
>> match="//UML:TagDefinition"
>> use="@name"/>
>>
>>
>> <!-- Document Root -->
>> <xsl:template match="/">
>> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
>> <head>
>> <!-- Model Name in window title -->
>> <xsl:apply-templates select="//UML:Model[@xmi.id]" mode="head"/>
>>
>> <link href="xmi.css" rel="stylesheet" type="text/css"/>
>> </head>
>> <body>
>> <!-- Model Name in document heading -->
>> <xsl:apply-templates select="//UML:Model[@xmi.id]" mode="body"/>
>> <!-- Interfaces -->
>> <xsl:apply-templates select="//UML:Interface[@xmi.id]">
>> <xsl:sort select="@name"/>
>> </xsl:apply-templates>
>>
>> <!-- Classes -->
>> <xsl:apply-templates select="//UML:Class[@xmi.id]">
>> <xsl:sort select="@name"/>
>> </xsl:apply-templates>
>>
>> </body>
>> </html>
>>
>> </xsl:template>
>>
>>
>> <!-- Window Title -->
>> <xsl:template match="UML:Model" mode="head">
>> <title>
>> <!-- Name of the model -->
>> <xsl:value-of select="@name"/>
>> </title>
>>
>> </xsl:template>
>>
>>
>> <!-- Document Heading -->
>> <xsl:template match="UML:Model" mode="body">
>> <div align="center">
>> <h1>
>> <!-- Name of the model -->
>> <xsl:value-of select="@name"/>
>> </h1>
>> </div>
>>
>> </xsl:template>
>>
>>
>> <!-- Class -->
>> <xsl:template match="UML:Class">
>> <xsl:variable name="element_name" select="@name"/>
>>
>> <xsl:variable name="xmi_id" select="@xmi.id" />
>> <div align="center">
>> <table border="1" width="75%" cellpadding="2" >
>> <tr>
>> <td class="class-title" width="20%">Class</td>
>>
>> <!-- create a hyperlink target for the name -->
>> <td class="class-name">
>> <a name="{$element_name}">
>> <xsl:value-of select="$element_name"/>
>> </a>
>> </td>
>> </tr>
>>
>> <tr>
>> <td colspan="2" >
>> <table width="100%" cellpadding="0" cellspacing="0" border="0">
>> <tr>
>> <td colspan="2" bgcolor="#cacaca">
>> <table width="100%" border="0" cellpadding="3" cellspacing="1">
>>
>>
>> <xsl:call-template name="specifications"/>
>>
>> <xsl:call-template name="realizations"/>
>>
>> <xsl:call-template name="supertypes"/>
>> <xsl:call-template name="subtypes"/>
>> <xsl:call-template name="associations">
>> <xsl:with-param name="source" select="$xmi_id"/>
>> </xsl:call-template>
>> <xsl:call-template name="attributes"/>
>>
>> <xsl:call-template name="operations"/>
>>
>> <xsl:call-template name="documentationtest"/>
>>
>> <xsl:call-template name="documentation"/>
>>
>> </table>
>> </td>
>> </tr>
>>
>> </table>
>> </td>
>> </tr>
>>
>> </table>
>> </div>
>> <br /><br />
>> </xsl:template>
>>
>>
>> <!-- Interface -->
>> <xsl:template match="UML:Interface">
>> <xsl:variable name="element_name" select="@name"/>
>>
>> <div align="center">
>> <table border="1" width="75%" cellpadding="2" >
>> <tr>
>> <td class="interface-title" width="20%">Interface</td>
>>
>> <!-- create a hyperlink target for the name -->
>> <td class="interface-name">
>> <a name="{$element_name}">
>> <xsl:value-of select="$element_name"/>
>> </a>
>> </td>
>> </tr>
>>
>> <tr>
>> <td colspan="2" >
>> <table width="100%" cellpadding="0" cellspacing="0" border="0">
>>
>> <tr>
>> <td colspan="2" bgcolor="#cacaca">
>> <table width="100%" border="0" cellpadding="3" cellspacing="1">
>>
>> <xsl:call-template name="realizations"/>
>>
>> <xsl:call-template name="supertypes"/>
>> <xsl:call-template name="subtypes"/>
>>
>> <xsl:call-template name="operations"/>
>>
>> </table>
>> </td>
>> </tr>
>>
>> </table>
>> </td>
>> </tr>
>>
>> </table>
>> </div>
>> <br/><br/>
>> </xsl:template>
>>
>>
>> <!-- The following template is designed to be called for Abstractions with
>> the "realize"
>> stereotype, i.e. Realization relationships. It formats the name of the
>> supplier of the
>> Abstraction dependency, i.e. the class or interface specifying the
>> behaviour of the
>> client in the dependency.
>> -->
>> <!-- Specifications (interface or class) -->
>> <xsl:template name="specifications">
>>
>> <!-- Abstractions identify specifications -->
>> <xsl:variable name="specifications"
>> select="UML:ModelElement.clientDependency/
>> UML:Abstraction"/>
>>
>> <xsl:if test="count($specifications) > 0">
>> <tr>
>> <td width="20%" class="info-title">Specifications:</td>
>> <td colspan="2" class="info">
>> <xsl:for-each select="$specifications">
>> <!-- get the supplier in the abstraction -->
>> <xsl:variable name="abstraction"
>> select="key('abstraction', ./@xmi.idref)" />
>> <xsl:variable name="target"
>> select="$abstraction/
>> UML:Dependency.supplier/
>> */@xmi.idref" />
>> <xsl:call-template name="classify">
>> <xsl:with-param name="target" select="$target"/>
>> </xsl:call-template>
>> <xsl:if test="position() != last()">
>> <xsl:text>, </xsl:text>
>> </xsl:if>
>> </xsl:for-each>
>> </td>
>> </tr>
>> </xsl:if> </xsl:template>
>>
>>
>> <!-- The following template is designed to be called for Abstractions with
>> the "realize"
>> stereotype, i.e. Realization relationships. It formats the name of the
>> client of the
>> Abstraction dependency, i.e. the class realizing the specification
>> defined by the
>> supplier in the dependency.
>> -->
>> <!-- Realizations (of interface) -->
>> <xsl:template name="realizations">
>>
>> <xsl:variable name="classid" select="@xmi.id"/>
>>
>> <!-- Abstractions identify realizations -->
>> <xsl:variable name="realizations"
>> select="//UML:Abstraction[UML:Dependency.supplier/*/@xmi.idref=$classid]"/>
>>
>> <xsl:if test="count($realizations) > 0">
>> <tr>
>> <td width="20%" class="info-title">Realizations:</td>
>> <td colspan="2" class="info">
>> <xsl:for-each select="$realizations">
>> <!-- get the client in the abstraction -->
>> <xsl:variable name="target"
>> select="UML:Dependency.client/
>> */@xmi.idref" />
>> <xsl:call-template name="classify">
>> <xsl:with-param name="target" select="$target"/>
>> </xsl:call-template>
>> <xsl:if test="position() != last()">
>> <xsl:text>, </xsl:text>
>> </xsl:if>
>> </xsl:for-each>
>> </td>
>> </tr>
>> </xsl:if> </xsl:template>
>>
>>
>>
>> <!-- Supertypes (inheritance) -->
>> <xsl:template name="supertypes">
>> <!-- Generalizations identify supertypes -->
>> <xsl:variable name="generalizations"
>> select="UML:GeneralizableElement.generalization/
>> UML:Generalization"/>
>>
>> <xsl:if test="count($generalizations) > 0">
>> <tr>
>> <td width="20%" class="info-title">Supertypes:</td>
>> <td colspan="2" class="info">
>> <xsl:for-each select="$generalizations">
>> <!-- get the parent in the generalization -->
>> <xsl:variable name="generalization"
>> select="key('generalization', ./@xmi.idref)" />
>> <xsl:variable name="target"
>> select="$generalization/
>> UML:Generalization.parent/
>> */@xmi.idref" />
>> <xsl:call-template name="classify">
>> <xsl:with-param name="target" select="$target"/>
>> </xsl:call-template>
>> <xsl:if test="position() != last()">
>> <xsl:text>, </xsl:text>
>> </xsl:if>
>> </xsl:for-each>
>> </td>
>> </tr>
>> </xsl:if> </xsl:template>
>>
>>
>> <!-- Subtypes (inheritance) -->
>> <xsl:template name="subtypes">
>>
>> <xsl:variable name="classid" select="@xmi.id"/>
>>
>> <!-- Specializations identify subtypes -->
>> <xsl:variable name="specializations"
>> select="//UML:Generalization[UML:Generalization.parent/UML:Class/@xmi.idref=$classid]"/>
>>
>> <xsl:if test="count($specializations) > 0">
>> <tr>
>> <td width="20%" class="info-title">Subtypes:</td>
>> <td colspan="2" class="info">
>> <xsl:for-each select="$specializations">
>> <!-- get the child in the generalization -->
>> <xsl:variable name="target"
>> select="UML:Generalization.child/
>> */@xmi.idref" />
>> <xsl:call-template name="classify">
>> <xsl:with-param name="target" select="$target"/>
>> </xsl:call-template>
>> <xsl:if test="position() != last()">
>> <xsl:text>, </xsl:text>
>> </xsl:if>
>> </xsl:for-each>
>> </td>
>> </tr>
>> </xsl:if> </xsl:template>
>>
>>
>> <!-- Associations -->
>> <xsl:template name="associations">
>> <xsl:param name="source"/>
>> <xsl:variable name="association_ends"
>> select="//UML:AssociationEnd
>> [UML:AssociationEnd.participant/*/
>> @xmi.idref=$source]" />
>>
>> <xsl:if test="count($association_ends) > 0">
>> <tr>
>> <td colspan="3" class="info-title">Associations:</td>
>> </tr>
>> <tr>
>> <td class="feature-heading" width="20%">visibility</td>
>> <td class="feature-heading" width="25%">type</td>
>> <td class="feature-heading" width="55%">properties</td>
>> </tr>
>>
>> <xsl:for-each select="$association_ends">
>> <tr>
>> <xsl:for-each select="preceding-sibling::UML:AssociationEnd |
>> following-sibling::UML:AssociationEnd">
>>
>> <xsl:call-template name="association_end" />
>> </xsl:for-each>
>> </tr>
>> </xsl:for-each>
>> </xsl:if> </xsl:template>
>>
>>
>> <!-- Association End -->
>> <xsl:template name="association_end">
>> <!-- Visibility -->
>> <td class="feature-detail">
>> <xsl:variable name="visibility"
>> select="@visibility" />
>> <xsl:choose>
>> <xsl:when test="string-length($visibility) > 0">
>> <xsl:value-of select="$visibility"/>
>> </xsl:when>
>> <xsl:otherwise>
>> <xsl:text
>> disable-output-escaping="yes">&nbsp;</xsl:text>
>> </xsl:otherwise>
>> </xsl:choose> </td>
>> <!-- Type -->
>> <td class="feature-detail">
>> <xsl:variable name="target"
>> select="UML:AssociationEnd.participant/*/@xmi.idref" />
>>
>> <xsl:call-template name="classify">
>> <xsl:with-param name="target" select="$target"/>
>> </xsl:call-template>
>> </td>
>> <!-- Properties -->
>> <td class="feature-detail">
>> <!-- Rolename -->
>> <xsl:variable name="rolename" select="@name"/>
>> <span class="property-name">Rolename: </span>
>> <xsl:choose>
>> <xsl:when test="string-length($rolename) > 0">
>> <xsl:value-of select="$rolename"/>
>> </xsl:when>
>> <xsl:otherwise>(none)</xsl:otherwise>
>> </xsl:choose>
>> <!-- Multiplicity -->
>> <xsl:apply-templates select=".//UML:Multiplicity" />
>> <!-- Navigable -->
>> <xsl:variable name="navigable" select="@isNavigable"/>
>> <xsl:if test="string-length($navigable) > 0">
>> <br />
>> <span class="property-name">Navigable: </span>
>> <xsl:value-of select="$navigable"/>
>> </xsl:if>
>> <!-- Ordering -->
>> <xsl:variable name="ordering" select="@ordering"/>
>> <xsl:if test="string-length($ordering) > 0">
>> <br />
>> <span class="property-name">Ordering: </span>
>> <xsl:value-of select="$ordering"/>
>> </xsl:if>
>> </td>
>> </xsl:template>
>>
>>
>> <!-- Multiplicity (definition) -->
>> <xsl:template match="UML:Multiplicity[@xmi.id]">
>> <br />
>> <span class="property-name">Multiplicity: </span>
>> <xsl:variable name="lower" select=".//@lower"/>
>> <xsl:variable name="upper" select=".//@upper"/>
>>
>> <xsl:value-of select="$lower" />
>> <xsl:if test="$upper != $lower">
>> <xsl:text>..</xsl:text>
>> <xsl:if test="$upper!='-1'">
>> <xsl:value-of select="$upper" />
>> </xsl:if>
>> <xsl:if test="$upper='-1'">*</xsl:if>
>> </xsl:if>
>> </xsl:template>
>>
>> <!-- Multiplicity (reference) -->
>> <xsl:template match="UML:Multiplicity[@xmi.idref]">
>> <xsl:apply-templates
>> select="key('multiplicity', @xmi.idref)" />
>> </xsl:template>
>>
>>
>>
>> <!-- Attributes -->
>> <xsl:template name="attributes">
>> <tr>
>> <td colspan="3" class="info-title">Attributes:</td>
>> </tr>
>> <xsl:choose>
>> <xsl:when test="count(UML:Classifier.feature/UML:Attribute) > 0">
>> <tr>
>> <td class="feature-heading" width="20%">visibility</td>
>> <td class="feature-heading" width="25%">type</td>
>> <td class="feature-heading" width="55%">name</td>
>> </tr>
>> <xsl:apply-templates
>> select="UML:Classifier.feature/UML:Attribute" />
>> </xsl:when>
>> <xsl:otherwise>
>> <tr>
>> <td colspan="3" class="feature-detail">
>> none
>> </td>
>> </tr>
>> </xsl:otherwise>
>> </xsl:choose>
>> </xsl:template>
>>
>>
>> <xsl:template match="UML:Attribute">
>> <xsl:variable name="target"
>> select='UML:StructuralFeature.type/*/@xmi.idref'/>
>>
>>
>> <tr>
>> <td class="feature-detail">
>> <xsl:value-of select="@visibility"/>
>> </td>
>>
>> <td class="feature-detail">
>> <xsl:call-template name="classify">
>> <xsl:with-param name="target" select="$target" />
>> </xsl:call-template>
>> </td>
>>
>> <td class="feature-detail">
>> <xsl:value-of select="@name"/>
>> </td>
>> </tr>
>> </xsl:template>
>>
>>
>>
>> <!-- Operations -->
>> <xsl:template name="operations">
>> <tr>
>> <td colspan="3" class="info-title">Operations:</td>
>> </tr>
>> <xsl:choose>
>> <xsl:when test="count(UML:Classifier.feature/UML:Operation) > 0">
>> <tr>
>> <td class="feature-heading" width="20%">visibility</td>
>> <td class="feature-heading" width="25%">return</td>
>> <td class="feature-heading" width="55%">name</td>
>> </tr>
>>
>> <xsl:apply-templates select="UML:Classifier.feature/
>> UML:Operation" />
>> </xsl:when>
>> <xsl:otherwise>
>> <tr>
>> <td colspan="3" class="feature-detail">
>> none
>> </td>
>> </tr>
>> </xsl:otherwise>
>> </xsl:choose>
>> </xsl:template>
>>
>>
>> <xsl:template match="UML:Operation">
>> <xsl:variable name="parameters"
>> select="UML:BehavioralFeature.parameter/
>> UML:Parameter
>> [@name!='return']" />
>> <xsl:variable name="return"
>> select="UML:BehavioralFeature.parameter/
>> UML:Parameter
>> [@kind='return']" />
>> <xsl:variable name="target"
>> select="$return/UML:Parameter.type/*/@xmi.idref" />
>>
>> <tr>
>> <td class="feature-detail">
>> <xsl:value-of select="@visibility" />
>> </td>
>>
>> <td class="feature-detail">
>>
>> <xsl:choose>
>> <xsl:when test="string-length($target) = 0">
>> <span class="datatype"><xsl:text>void</xsl:text></span>
>> </xsl:when>
>>
>> <xsl:otherwise>
>> <xsl:call-template name="classify">
>> <xsl:with-param name="target" select="$target" />
>> </xsl:call-template>
>> </xsl:otherwise>
>> </xsl:choose>
>>
>> </td>
>>
>> <td class="feature-detail">
>> <xsl:value-of select="@name"/>
>> </td>
>> </tr>
>>
>> <xsl:variable name="parameter-count" select="count($parameters)" />
>>
>> <xsl:if test="not(normalize-space($parameter-count)='0')">
>>
>> <tr>
>> <td class="feature-detail" >
>> <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
>> </td>
>> <td class="parameter-heading" valign="top">parameters:</td>
>> <td bgcolor="#ffffff" align="right">
>> <table width="85%" align="right" cellpadding="0" cellspacing="0"
>> border="0">
>> <xsl:apply-templates select="$parameters" />
>> </table>
>> </td>
>> </tr>
>>
>> </xsl:if >
>>
>> </xsl:template>
>>
>>
>>
>> <!-- Parameter -->
>> <xsl:template match="UML:Parameter">
>> <xsl:variable name="target"
>> select="UML:Parameter.type/*/@xmi.idref" />
>>
>> <tr>
>> <td class="feature-detail" width="45%">
>> <xsl:call-template name="classify">
>> <xsl:with-param name="target" select="$target" />
>> </xsl:call-template>
>> </td>
>>
>> <td class="feature-detail" width="55%">
>> <xsl:value-of select="@name"/>
>> </td>
>> </tr>
>> </xsl:template>
>>
>>
>> <!-- Classification -->
>> <xsl:template name="classify">
>> <xsl:param name="target"/>
>>
>> <xsl:variable name="classifier"
>> select="key('classifier', $target)" />
>> <xsl:variable name="classifier_name"
>> select="$classifier/@name" />
>>
>> <xsl:variable name="type" select="name($classifier)" />
>>
>> <!-- Get the type of the classifier (class, interface, datatype) -->
>> <xsl:variable name="classifier_type">
>> <xsl:choose>
>> <xsl:when test="$type='UML:Class'">classifier</xsl:when>
>> <xsl:when test="$type='UML:Interface'">interface</xsl:when>
>> <xsl:when test="$type='UML:DataType'">datatype</xsl:when>
>> <xsl:otherwise>classifier</xsl:otherwise>
>> </xsl:choose>
>> </xsl:variable>
>> <xsl:choose>
>> <!-- Datatypes don't have hyperlinks -->
>> <xsl:when test="$type='UML:DataType'">
>> <span class="datatype">
>> <xsl:value-of select="$classifier_name"/>
>> </span>
>> </xsl:when>
>> <!-- Classes and Interfaces have hyperlinks -->
>> <!-- The classifier type is used to style appropriately -->
>> <xsl:otherwise>
>> <xsl:if test="string-length($classifier_name) > 0">
>> <a class="{$classifier_type}" href="#{$classifier_name}">
>> <xsl:value-of select="$classifier_name"/>
>> </a>
>> </xsl:if>
>> </xsl:otherwise>
>> </xsl:choose>
>>
>> </xsl:template>
>>
>> <xsl:template name="documentation">
>> <xsl:variable name="doctag"
>> select="key('tagdefinition', 'documentation')/@xmi.id" />
>>
>> <xsl:variable name="documentation"
>> select="UML:ModelElement.taggedValue/UML:TaggedValue
>>
>> [UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=$doctag]/
>> UML:TaggedValue.dataValue"/>
>> <xsl:if test="string-length($documentation)>0">
>> <tr>
>> <td colspan="3" class="info-title">Documentation:</td>
>> </tr>
>> <tr>
>> <td colspan="3" class="feature-detail">
>> <xsl:value-of select="$documentation"/>
>> </td>
>> </tr>
>> </xsl:if>
>> </xsl:template>
>>
>> <xsl:template name="documentationtest">
>> <xsl:variable name="author"
>> select="key('tagdefinition', 'author')/@xmi.id" />
>>
>> <xsl:variable name="classauthor"
>> select="UML:ModelElement.taggedValue/UML:TaggedValue
>>
>> [UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=$author]/
>> UML:TaggedValue.dataValue"/>
>> <xsl:variable name="version"
>> select="key('tagdefinition', 'version')/@xmi.id" />
>>
>> <xsl:variable name="classversion"
>> select="UML:ModelElement.taggedValue/UML:TaggedValue
>>
>> [UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=$version]/
>> UML:TaggedValue.dataValue"/>
>> <xsl:variable name="see"
>> select="key('tagdefinition', 'see')/@xmi.id" />
>>
>> <xsl:variable name="classsee"
>> select="UML:ModelElement.taggedValue/UML:TaggedValue
>>
>> [UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=$see]/
>> UML:TaggedValue.dataValue"/>
>> <tr>
>> <td colspan="3" class="info-title">Documentation:</td>
>> </tr>
>> <xsl:if test="string-length($classauthor)>0">
>> <tr>
>> <td class="feature-heading" width="20%">author:</td>
>> <td colspan="3" class="feature-detail">
>> <xsl:value-of select="$classauthor"/>
>> </td>
>> </tr>
>> </xsl:if>
>> <xsl:if test="string-length($classversion)>0">
>> <tr>
>> <td class="feature-heading" width="20%">version:</td>
>> <td colspan="3" class="feature-detail">
>> <xsl:value-of select="$classversion"/>
>> </td>
>> </tr>
>> </xsl:if>
>> <xsl:if test="string-length($classsee)>0">
>> <tr>
>> <td class="feature-heading" width="20%">description:</td>
>> <td colspan="3" class="feature-detail">
>> <xsl:value-of select="$classsee"/>
>> </td>
>> </tr>
>> </xsl:if>
>> </xsl:template>
>>
>> </xsl:stylesheet>
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>> pruebabeta
>>
>> Class Hito
>> Supertypes: Tarea <#Tarea>
>> Attributes:
>> visibility type name
>> public
>> startDate
>> Operations:
>> visibility return name
>> public void Hito
>> Documentation:
>> author: Hayro Reyes
>> version: 0.01
>> description: Clase especializada, hereda desde Tarea
>>
>>
>>
>> Class Manager
>> Associations:
>> visibility type properties
>> public Proyecto <#Proyecto> Rolename: (none)
>> Multiplicity: 1
>> Navigable: false
>> Ordering: unordered
>> public Tarea <#Tarea> Rolename: (none)
>> Multiplicity: 1
>> Navigable: false
>> Ordering: unordered
>> Attributes:
>> visibility type name
>> private Manager <#Manager> manager
>> Operations:
>> visibility return name
>> public Proyecto <#Proyecto> obtenerProyectoPorId
>> parameters:
>>
>> idProyecto
>>
>> public Tarea <#Tarea> obtenerTareaPorId
>> parameters:
>>
>> idProyecto
>>
>> idTarea
>>
>> private void Manager
>> Documentation:
>> author: Hayrol Reyes
>> version: 0.01
>> description: Clase de utileria, utiliza el patrón Singleton.
>>
>>
>>
>> Class Proyecto
>> Associations:
>> visibility type properties
>> public Tarea <#Tarea> Rolename: (none)
>> Multiplicity: 1..*
>> Navigable: true
>> Ordering: unordered
>> public Manager <#Manager> Rolename: (none)
>> Multiplicity: 1
>> Navigable: false
>> Ordering: unordered
>> Attributes:
>> visibility type name
>> public
>> idProyecto
>> public
>> nombreProyecto
>> private
>> fechaInicio
>> Operations:
>> visibility return name
>> public void Proyecto
>> Documentation:
>> author: Hayrol Reyes
>> version: 0.01
>> description: Clase primaria.
>>
>>
>>
>> Class Tarea
>> Subtypes: Hito <#Hito>
>> Associations:
>> visibility type properties
>> public Proyecto <#Proyecto> Rolename: (none)
>> Multiplicity: 1
>> Navigable: true
>> Ordering: unordered
>> public Manager <#Manager> Rolename: (none)
>> Multiplicity: 1
>> Navigable: false
>> Ordering: unordered
>> Attributes:
>> visibility type name
>> public
>> idTarea
>> public
>> nombreTarea
>> Operations:
>> visibility return name
>> public void Tarea
>> Documentation:
>> author: Hayrol Reyes
>> version: 0.01
>> description: Clase Primaria.
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>