Hi,

I am using the xsl transformation (pasted below) to convert the
repository.xml to SQL for postgre.  Maybe someone else using postgre may
find it useful... Its not complete and full featured and generalized,
but it is better than nothing at all.. :)

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:template match="descriptor-repository">

<xsl:for-each select="class-descriptor">

<!-- sort sql statements so tables with dependencies on other tables are
deleted first-->
<xsl:sort select="reference-descriptor" order="descending"/>

<xsl:text>DROP TABLE  </xsl:text><xsl:value-of select="@table"/>;

</xsl:for-each>

<xsl:for-each select="class-descriptor">

<!-- tables without dependencies on other tables are created first-->
<xsl:sort select="reference-descriptor" order="ascending"/>

-----------------------------------------
--- <xsl:value-of select="@class"/>
-----------------------------------------
<xsl:variable name="table" select="@table"/>

<xsl:text>CREATE TABLE  </xsl:text><xsl:value-of select="@table"/>
<xsl:text>  ( 

</xsl:text>

<xsl:for-each select="field-descriptor">

    <xsl:value-of select="@column"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="@jdbc-type"/>
    <xsl:if test="number(@length)">
        <xsl:text>(</xsl:text>
        <xsl:value-of select="@length"/>
        <xsl:text>)</xsl:text>
    </xsl:if> 
    <xsl:if test="number(@precision)">
        <xsl:text>(</xsl:text>
        <xsl:value-of select="@precision"/>
        <xsl:if test="number(@scale)">
            <xsl:text>,</xsl:text>
            <xsl:value-of select="@scale"/>
        </xsl:if>
        <xsl:text>)</xsl:text>
    </xsl:if>
    <xsl:if test="@primarykey='true'">
                <xsl:text> primary key </xsl:text>
    </xsl:if> 
    <xsl:if test="string-length(@sequence-name) &gt; 0" ><xsl:text>
default nextval(</xsl:text>&apos;<xsl:value-of
select="@sequence-name"/>&apos;<xsl:text>) </xsl:text></xsl:if> 
    <xsl:if test="not(position()=last())"><xsl:text>,
</xsl:text></xsl:if>

</xsl:for-each>

<xsl:for-each select="reference-descriptor">
<xsl:text>,
 CONSTRAINT fk</xsl:text>
<xsl:value-of select="$table"/>
<xsl:value-of select="foreignkey/@field-ref"/>
<xsl:text> FOREIGN KEY (</xsl:text>
<xsl:for-each select="foreignkey">
<xsl:value-of select="@field-ref"/>
</xsl:for-each>
<xsl:text>) REFERENCES</xsl:text>
<xsl:apply-templates
select="//descriptor-repository/[EMAIL PROTECTED]()/@class-ref]"/>

</xsl:for-each>

<xsl:text>

 );
</xsl:text>

<xsl:for-each select="field-descriptor">
<xsl:if test="'true'[EMAIL PROTECTED]">
DROP SEQUENCE <xsl:value-of select="@sequence-name"/>;

CREATE SEQUENCE <xsl:value-of select="@sequence-name"/>;
</xsl:if>
</xsl:for-each>

</xsl:for-each>

</xsl:template>

<xsl:template match="descriptor-repository/class-descriptor">
<xsl:text> </xsl:text>
<xsl:value-of select="@table"/>
<xsl:text>  ( </xsl:text>
    <xsl:for-each select="[EMAIL PROTECTED] = 'true']">
            
                <xsl:value-of select="@column"/>
                <xsl:if test="not(position()=last())"><xsl:text>,
</xsl:text></xsl:if>
             
    </xsl:for-each>
<xsl:text>) </xsl:text>

</xsl:template>

</xsl:stylesheet>



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

Reply via email to