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:[EMAIL PROTECTED]
        <http://xmi.id/>
               <http://xmi.id/>]" mode="body"/>

                         <!-- Classes -->
                 <xsl:apply-templates select="//UML:[EMAIL PROTECTED]
        <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:[EMAIL PROTECTED]
        <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:[EMAIL PROTECTED]
        <http://xmi.id/>]" mode="body"/>
                  <!-- Interfaces -->
          <xsl:apply-templates select="//UML:[EMAIL PROTECTED]
        <http://xmi.id/>]">

              <xsl:sort select="@name"/>
          </xsl:apply-templates>

          <!-- Classes -->
          <xsl:apply-templates select="//UML:[EMAIL PROTECTED]
        <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">&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:[EMAIL PROTECTED] <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:[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">&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
        <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]>





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to