RE: Newbie: Generating a class dictionary from a class diagram?

"Zembower, Kevin" <[email protected]> Tue, 21 Oct 2008 11:10:22 -0400
Newsgroups gmane.comp.lang.uml.argouml.user
Message-ID <18335313C79EA94C990288FE35F31B0B026D14B1A8@EXCH-VN01.sph.ad.jhsph.edu>
Mark and Leif, thanks so much for your response. I didn't know about XSLT, but I think that it's just the right tool for this job.

Leif, I agree with you regarding the comments. I've put my 'working definition,' as my instructor wants me to call it, in the Documentation field of my Classes. This makes sense to me too.

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?

For testing, I've attached these files (hope they make it through the mailing list):
  xmi-to-html.xsl (unchanged from the file in http://argouml.tigris.org/files/documents/4/31562/xmi12-to-html.zip)
  test.html my output
  test.xmi The .xmi file from my project. Note that I had to manually insert this second line:
      <!DOCTYPE XMI SYSTEM "UML14.dtd">
  UML14.dtd from this page: http://www.nabble.com/Exported-XMI-DTD-for-ArgoUML-0.24-td12086196.html. Is this the latest one? Are there any others I should be using?
  'ArgoUML class dictionary test.zargo' My whole ArgoUML test file.

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.

Thanks, again, Mark and Leif, for your suggestions. I look forward to continuing to learn from you and this group.

-Kevin


-----Original Message-----
From: Leif Holmgren [mailto:[email protected]]
Sent: Monday, October 20, 2008 4:37 PM
To: [email protected]
Subject: Re: [argouml-users] Newbie: Generating a class dictionary from a class diagram?

Hi Kevin.

There is an XSLT sample in the argouml file sharing area that does XMI
to HTML conversion. I have not checked it with later versions of ArgoUML
but it worked for 0.20 and I don't think there are any major differences.
See:
http://argouml.tigris.org/servlets/ProjectDocumentList?folderID=18&expandFolder=18&folderID=18

I don't think you will be able to generate from the suggested notes.
Instead you should use the documentation tab and fill it in. ArgoUML
supports entering documentation for every single model element. That is,
even for individual arguments for operations. Notes are (last time I
checked) only available for classes.

A few years back I frequently used notes on class models but my
experience is that they only clutter your diagrams that should be packed
with details anyway. So keep documentation where it should be and
generate the dictionary.

The major drawback by doing like this is that you can only write text in
the descriptions. Sometimes you need to express things more clearly than
you can with words. In sweden, and perhaps elsewhere, there is an old
saying that "a picture says more than a thousand words". Sure, if you
write a thousand words noone will read it. Draw a nice picture and most
may catch your intention with the class.

I can highly recommend reading the following:
http://knol.google.com/k/leon-starr/how-to-write-useful-class-descriptions/2hnjef6cmm97l/8

/Leif


Mark Fortner wrote:

>There's a seed project called ArgoPrint which aims to make
>documentation generation easier.  If you're familiar with XSLTs then
>you should be able to put together an XSLT that generates the class
>dictionary you're looking for.
>
>Regards,
>
>Mark
>
>On Mon, Oct 20, 2008 at 9:55 AM, Zembower, Kevin <[email protected]> wrote:
>
>
>>If I understand the philosophy of UML programs like ArgoUML correctly, they help keep all documentation synchronized by letting you generate one type of document from another. My instructor in Object Oriented Analysis and Design requires a class diagram and a class dictionary for the next part of our project. I've done the class diagram in ArgoUML (0.26). Can ArgoUML automatically generate a class dictionary consisting of class name and short definition, if I put the definition in a note attached to the class? Any other suggested ways of doing this?
>>
>>Thanks in advance for your suggestions and advice.
>>
>>-Kevin
>>
>>
>>Kevin Zembower
>>Internet Services Group manager
>>Center for Communication Programs
>>Bloomberg School of Public Health
>>Johns Hopkins University
>>111 Market Place, Suite 310
>>Baltimore, Maryland  21202
>>410-659-6139
>>
>>
>>---------------------------------------------------------------------
>>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]

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
xmi-to-html.xsl (text/xml, 21.1 KB)
<?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

    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="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">&amp;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">&amp;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:stylesheet>
test.html (text/html, 4.5 KB)
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:UML="org.omg.xmi.namespace.UML" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>untitledModel</title>
    <link href="xmi.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div align="center">
      <h1>untitledModel</h1>
    </div>
    <div align="center">
      <table border="1" width="75%" cellpadding="2">
        <tr>
          <td class="class-title" width="20%">Class</td>
          <td class="class-name">
            <a name="NotTest" id="NotTest">NotTest</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">
                    <tr>
                      <td colspan="3" class="info-title">Attributes:</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%">name</td>
                    </tr>
                    <tr>
                      <td class="feature-detail">public</td>
                      <td class="feature-detail"></td>
                      <td class="feature-detail">newAttr</td>
                    </tr>
                    <tr>
                      <td colspan="3" class="info-title">Operations:</td>
                    </tr>
                    <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>
                    <tr>
                      <td class="feature-detail">public</td>
                      <td class="feature-detail">
                        <span class="datatype">void</span>
                      </td>
                      <td class="feature-detail">newOperation</td>
                    </tr>
                  </table>
                </td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
    </div>
    <br />
    <br />
    <div align="center">
      <table border="1" width="75%" cellpadding="2">
        <tr>
          <td class="class-title" width="20%">Class</td>
          <td class="class-name">
            <a name="Test" id="Test">Test</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">
                    <tr>
                      <td colspan="3" class="info-title">Attributes:</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%">name</td>
                    </tr>
                    <tr>
                      <td class="feature-detail">public</td>
                      <td class="feature-detail"></td>
                      <td class="feature-detail">newAttr</td>
                    </tr>
                    <tr>
                      <td colspan="3" class="info-title">Operations:</td>
                    </tr>
                    <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>
                    <tr>
                      <td class="feature-detail">public</td>
                      <td class="feature-detail">
                        <span class="datatype">void</span>
                      </td>
                      <td class="feature-detail">newOperation</td>
                    </tr>
                  </table>
                </td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
    </div>
    <br />
    <br />
  </body>
</html>
test.xmi (application/octet-stream, 6.9 KB) - not displayed
UML14.dtd (text/xml, 214.7 KB) - not displayed
ArgoUML class dictionary test.zargo (application/octet-stream, 4.3 KB) - not displayed