Since almost 1 year Im reading about the use of xml in
design and coding phases.
But my only source of info is internet because here
the good books regarding
IT are very expensive. 3W could give me a lot of info,
but, in conjunction,
fragmented and sometimes contradictory.
Few months ago I discover the xslt plugins inside Dia,
and voila! the
plugins/xslt directory have a working and traceable
set of examples of xml
and xslt for code generation.
Messing and mixing with the examples I can produce
this xsl's (attached in this mail):
dia-uml to PEAR DB_DataObject .ini files and .php
table object (not including relationships)
dia-uml to HTML form for record editing
dia-uml to MySQL database definition
To get the results whitout using dia I use this at
commandline:
xsltproc /usr/share/dia/plugins/xslt/dia-uml.xsl
osdata.dia > osdata.xml
to get the pear clases and .ini file:
xsltproc /usr/share/dia/plugins/xslt/dia-dbo.xsl
osdata.xml
to get the html form:
xsltproc /usr/share/dia/plugins/xslt/dia-html-edit.xsl
osdata.xml
to get the MySQL data definition:
xsltproc /usr/share/dia/plugins/xslt/dia-sql.xsl
osdata.xml
ROCKS! But still there are some things that Im unable
to achieve:
I cant see how to include relationships (foreign key
-> primary key), I dont
see the data about the relationships in the created
osdata.xml, the
dia-uml.xsl simply dont take it in account.
I dont know how to implement some 'extra stuff' like
labels to use instead
of fieldnames in HTML forms. I think that operations
tab in properties of a
class is the right place to put things like labels and
sizes etc but Im
not sure and I suppose there is a standard procedure
to follow, but I did
not found it.
My ultimate (and long-term, sigh) goal is to build a
PHP application (well...
most part of the application at less) simply
translating an UML model.
Someone have that missing info or can guide to a
related resource?
___________________________________________________________
100mb gratis, Antivirus y Antispam
Correo Yahoo!, el mejor correo web del mundo
http://correo.yahoo.com.ar
<?xml version="1.0"?>
<!--
Transform dia UML objects to PHP 4.x classes
Copyright(c) 2002 Matthieu Sozeau <mattam netcourrier com>
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; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:param name="directory"/>
<xsl:param name="ident">
<xsl:text> </xsl:text>
</xsl:param>
<!-- Visibility indentation -->
<xsl:param name="visident">
<xsl:text> </xsl:text>
</xsl:param>
<xsl:template match="class">
<xsl:text>[</xsl:text><xsl:value-of select="@name"/><xsl:text>]
</xsl:text>
<xsl:for-each select="attribute">
<xsl:value-of select="name"/>
<xsl:text> = </xsl:text>
<xsl:value-of select="type"/>
</xsl:for-each>
<xsl:text>
</xsl:text>
<xsl:document href="{$directory}{ name} php" method="text">
<xsl:if test="comment">
<xsl:text>/* 
 </xsl:text>
<xsl:value-of select="comment"/>
<xsl:text>
 */

</xsl:text>
</xsl:if>
<xsl:text>class </xsl:text>
<xsl:value-of select="@name"/>
<xsl:if test="@stereotype!=''">
<xsl:text> : public </xsl:text>
<xsl:value-of select="@stereotype"/>
</xsl:if>
<xsl:text> extends DB_DataObject {

</xsl:text>
<xsl:text>var $__table ='</xsl:text><xsl:value-of select="@name"/>
<xsl:text>';

</xsl:text>
<xsl:apply-templates select="attributes"/>
<xsl:text>
</xsl:text>
<xsl:apply-templates select="operations"/>
<!-- funciones que siempre se agregan -->
<xsl:text>
function __clone() { return $this;}
</xsl:text>
<xsl:text>
function staticGet($k,$v=null) { return DB_DataObject::staticGet('</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>',$k,$v);}
</xsl:text>
<xsl:text>
};
</xsl:text>
</xsl:document>
</xsl:template>
<xsl:template match="operations|attributes">
<xsl:if test="*[ visibility='private']">
<xsl:value-of select="$visident"/>
<xsl:text>private:
</xsl:text>
<xsl:apply-templates select="*[ visibility='private']"/>
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:if test="*[ visibility='protected']">
<xsl:value-of select="$visident"/>
<xsl:text>protected:
</xsl:text>
<xsl:apply-templates select="*[ visibility='protected']"/>
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:if test="*[ visibility='public']">
<xsl:value-of select="$visident"/>
<xsl:apply-templates select="*[ visibility='public']"/>
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:if test="*[not(@visibility)]">
<xsl:apply-templates select="*[not(@visibility)]"/>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="attribute">
<xsl:value-of select="$ident"/>
<xsl:text>var $</xsl:text>
<xsl:value-of select="name"/>
<xsl:text>; //</xsl:text>
<xsl:value-of select="type"/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="operation">
<xsl:if test="comment!=''">
<xsl:text>
</xsl:text>
<xsl:value-of select="$ident"/>
<xsl:text>/*
</xsl:text>
<xsl:value-of select="$ident"/>
<xsl:text> * </xsl:text>
<xsl:value-of select="comment"/>
<xsl:text>
</xsl:text>
<xsl:for-each select="parameters/parameter/comment">
<xsl:value-of select="$ident"/>
<xsl:text> * @</xsl:text>
<xsl:value-of select="../name"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:value-of select="$ident"/>
<xsl:text> */

</xsl:text>
</xsl:if>
<xsl:value-of select="$ident"/>
<xsl:choose>
<xsl:when test="@inheritance='polymorphic'">
<xsl:text>virtual </xsl:text>
</xsl:when>
<xsl:when test="@inheritance='abstract'">
<xsl:text>virtual </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:if test="@class_scope">
<xsl:text>static </xsl:text>
</xsl:if>
<!-- Constructor has no type -->
<xsl:if test="type">
<xsl:value-of select="type"/>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="name"/>
<xsl:text>(</xsl:text>
<xsl:for-each select="parameters/*">
<xsl:choose>
<xsl:when test="@kind='in'">
<xsl:text>const </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:value-of select="type"/>
<xsl:if test="@kind">
<xsl:text>&</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
<xsl:value-of select="name"/>
<xsl:if test="value">
<xsl:text> = </xsl:text>
<xsl:value-of select="value"/>
</xsl:if>
<xsl:if test="not(position()=last())">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text>
<xsl:if test="@inheritance='abstract'">
<xsl:text> = 0</xsl:text>
</xsl:if>
<xsl:if test="@query=1">
<xsl:text> const</xsl:text>
</xsl:if>
<xsl:text>;
</xsl:text>
</xsl:template>
<xsl:template match="text()">
</xsl:template>
<xsl:template match="node()|@*">
<xsl:apply-templates match="node()|@*"/>
</xsl:template>
</xsl:stylesheet>
<!-- Keep this comment at the end of the file
Local variables:
mode: xml
sgml-omittag:nil
sgml-shorttag:nil
sgml-namecase-general:nil
sgml-general-insert-case:lower
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:2
sgml-indent-data:t
sgml-parent-document:nil
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->
<?xml version="1.0"?>
<!--
Transform dia UML objects to PHP 4.x classes
Copyright(c) 2002 Matthieu Sozeau <mattam netcourrier com>
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; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:param name="directory"/>
<xsl:param name="ident">
<xsl:text> </xsl:text>
</xsl:param>
<!-- Visibility indentation -->
<xsl:param name="visident">
<xsl:text> </xsl:text>
</xsl:param>
<xsl:template match="class">
<xsl:text>[</xsl:text><xsl:value-of select="@name"/><xsl:text>]
</xsl:text>
<xsl:for-each select="attribute">
<xsl:value-of select="name"/>
<xsl:text> = </xsl:text>
<xsl:value-of select="type"/>
</xsl:for-each>
<xsl:text>
</xsl:text>
<xsl:document href="{$directory}{ name} php" method="text">
<xsl:text>< form action ='</xsl:text>
<xsl:value-of select="substring(@name,1,3)"/>
<xsl:text>frmval.php' name='</xsl:text>
<xsl:value-of select="substring(@name,1,3)"/>
<xsl:text>frm.php' id='</xsl:text>
<xsl:value-of select="substring(@name,1,3)"/>
<xsl:text>'>
</xsl:text>
<!-- falta hidden PHPSESSID -->
<xsl:text><input name='_qf__</xsl:text>
<xsl:value-of select="substring(@name,1,3)"/>
<xsl:text>frm' type='hidden' value=''></xsl:text>
<xsl:text>
<input name='ins' type='hidden' value=''/></xsl:text>
<xsl:text>
</xsl:text>
<xsl:apply-templates select="attributes"/>
<xsl:text><tr><td align='right' valign='top'></td>
</xsl:text>
<xsl:text><td valign='top' align='left'><input name='boton' value='Ok' type='submit'/></td></tr></xsl:text>
</xsl:document>
</xsl:template>
<xsl:template match="attribute">
<xsl:text><tr><td align='right' valign='top'></xsl:text>
<xsl:value-of select="name"/>
<xsl:text></td>
<td align='left' valign='top'><input type='text' name='</xsl:text>
<xsl:value-of select="name"/><xsl:text>'/></td></tr>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
<!-- Keep this comment at the end of the file
Local variables:
mode: xml
sgml-omittag:nil
sgml-shorttag:nil
sgml-namecase-general:nil
sgml-general-insert-case:lower
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:2
sgml-indent-data:t
sgml-parent-document:nil
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->
<?xml version="1.0"?>
<!--
Transform dia UML objects to C++ classes
Copyright(c) 2002 Matthieu Sozeau <mattam netcourrier com>
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; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:param name="directory"/>
<xsl:param name="ident">
<xsl:text> </xsl:text>
</xsl:param>
<!-- Visibility indentation -->
<xsl:param name="visident">
<xsl:text> </xsl:text>
</xsl:param>
<xsl:template match="class">
<xsl:if test="comment">
<xsl:text>/* 
 </xsl:text>
<xsl:value-of select="comment"/>
<xsl:text>
 */

</xsl:text>
</xsl:if>
<xsl:text>create table </xsl:text><xsl:value-of select="@name"/><xsl:text> (
 </xsl:text>
<xsl:apply-templates select="attributes"/>
<xsl:text>
</xsl:text>
<xsl:apply-templates select="operations"/>
<xsl:text>
);
</xsl:text>
</xsl:template>
<xsl:template match="attribute">
<xsl:value-of select="$ident"/>
<xsl:value-of select="name"/>
<xsl:text> </xsl:text>
<xsl:value-of select="type"/>
<!--
<xsl:if test="not(position()=last())">
-->
<xsl:text>, </xsl:text>
<!--
</xsl:if>
-->
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="operation">
<xsl:value-of select="$ident"/>
<!-- Constructor has no type -->
<xsl:if test="type">
<xsl:value-of select="type"/>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="name"/>
<xsl:text>(</xsl:text>
<xsl:for-each select="parameters/*">
<xsl:value-of select="type"/>
<xsl:if test="@kind">
<xsl:text>&</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
<xsl:value-of select="name"/>
<xsl:if test="value">
<xsl:text> = </xsl:text>
<xsl:value-of select="value"/>
</xsl:if>
<xsl:if test="not(position()=last())">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text>
<xsl:if test="not(position()=last())">
<xsl:text>,
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="text()">
</xsl:template>
<xsl:template match="node()|@*">
<xsl:apply-templates match="node()|@*"/>
</xsl:template>
</xsl:stylesheet>
<!-- Keep this comment at the end of the file
Local variables:
mode: xml
sgml-omittag:nil
sgml-shorttag:nil
sgml-namecase-general:nil
sgml-general-insert-case:lower
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:2
sgml-indent-data:t
sgml-parent-document:nil
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->