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:[EMAIL PROTECTED]
<http://xmi.id/>]" mode="body"/>
<!-- Classes -->
<xsl:apply-templates select="//UML:[EMAIL PROTECTED]
<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:[EMAIL PROTECTED]" mode="head"/>
<link href="xmi.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Model Name in document heading -->
<xsl:apply-templates select="//UML:[EMAIL PROTECTED]" mode="body"/>
<!-- Interfaces -->
<xsl:apply-templates select="//UML:[EMAIL PROTECTED]">
<xsl:sort select="@name"/>
</xsl:apply-templates>
<!-- Classes -->
<xsl:apply-templates select="//UML:[EMAIL PROTECTED]">
<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:[EMAIL PROTECTED]">
<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:[EMAIL PROTECTED]">
<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
[EMAIL PROTECTED]'return']" />
<xsl:variable name="return"
select="UML:BehavioralFeature.parameter/
UML:Parameter
[EMAIL PROTECTED]'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]