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

Leif Holmgren <[email protected]> Thu, 23 Oct 2008 07:58:11 +0200
Newsgroups gmane.comp.lang.uml.argouml.user
Message-ID <[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]]
>Sent: Tuesday, October 21, 2008 12:16 PM
>To: [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'/>
>
>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]
>For additional commands, e-mail: [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]
>
>    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"/>
>
><xsl:key
>    name="tagdefinition"
>    match="//UML:TagDefinition"
>    use="@name"/>
>
>
><!-- Document Root -->
><xsl:template match="/">
>    <xsl:apply-templates select="//UML:Model[@xmi.id]" mode="body"/>
>         
>    <!-- Classes -->
>    <xsl:apply-templates select="//UML:Class[@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" />
>    
>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" />
>
>    <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]
>For additional commands, e-mail: [email protected]
>