Re: Newbie: Generating a class dictionary from a class diagram?
Leif Holmgren <[email protected]> Fri, 24 Oct 2008 22:57:23 +0200
| Newsgroups | gmane.comp.lang.uml.argouml.user |
|---|---|
| Message-ID | <[email protected]> |
I don't think you are doing anything bad. It's my transform that is not perfect. I'm using an older version of saxon and that one seems to be less picky and slips it through with just a warning. I have not yet understood fully what's wrong or how to fix it. I will work on it for a few minutes now and go back to it tomorrow evening if noone else has found a cure before that. /Leif Hayrol Reyes wrote: > 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] <mailto:[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/> > <http://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/> <http://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/> > <http://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]> <mailto:[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]> > <mailto:[email protected] <mailto:[email protected]>>] > Sent: Tuesday, October 21, 2008 12:16 PM > To: [email protected] > <mailto:[email protected]> > <mailto:[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/> > > <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]> > <mailto:[email protected] > <mailto:[email protected]>> > > For additional commands, e-mail: > [email protected] > <mailto:[email protected]> > <mailto:[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]> > <mailto:[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/> <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/> > <http://xmi.id/>]" mode="body"/> > > <!-- Classes --> > <xsl:apply-templates select="//UML:Class[@xmi.id > <http://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/> <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/> > <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]> > <mailto:[email protected] > <mailto:[email protected]>> > > For additional commands, e-mail: > [email protected] > <mailto:[email protected]> > <mailto:[email protected] > <mailto:[email protected]>> > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [email protected] > <mailto:[email protected]> > <mailto:[email protected] > <mailto:[email protected]>> > > For additional commands, e-mail: > [email protected] > <mailto:[email protected]> > <mailto:[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 <http://xmi.id/>"/> > > <xsl:key > name="generalization" > match="//UML:Generalization" > > use="@xmi.id <http://xmi.id/>"/> > > <xsl:key > name="abstraction" > match="//UML:Abstraction" > > use="@xmi.id <http://xmi.id/>"/> > > <xsl:key > name="multiplicity" > match="//UML:Multiplicity" > > use="@xmi.id <http://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 > <http://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 > <http://xmi.id/>]" mode="body"/> > <!-- Interfaces --> > <xsl:apply-templates select="//UML:Interface[@xmi.id > <http://xmi.id/>]"> > > <xsl:sort select="@name"/> > </xsl:apply-templates> > > <!-- Classes --> > <xsl:apply-templates select="//UML:Class[@xmi.id > <http://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 <http://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 <http://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 <http://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 <http://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 > <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"> > <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 > <http://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 > <http://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 > <http://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] > <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]> > >