/[volute]/trunk/projects/theory/snapdm/res/intermediate2tap.xsl
ViewVC logotype

Diff of /trunk/projects/theory/snapdm/res/intermediate2tap.xsl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 540 by gerard.lemson, Sat May 17 07:21:43 2008 UTC revision 541 by gerard.lemson, Mon May 26 13:16:05 2008 UTC
# Line 22  Line 22 
22                                                                  xmlns:exsl="http://exslt.org/common"                                                                  xmlns:exsl="http://exslt.org/common"
23                  extension-element-prefixes="exsl"                  extension-element-prefixes="exsl"
24                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
25                  xmlns:vot="http://www.ivoa.net/xml/VOTable/v1.1">                  xmlns:vot="http://www.ivoa.net/xml/VOTable/v1.1"
26                    xmlns:tab="urn:astrogrid:schema:TableMetadata"
27                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
28        
29    
30    <xsl:import href="common-ddl.xsl"/>    <xsl:import href="common-ddl.xsl"/>
# Line 35  Line 37 
37        
38    <xsl:key name="element" match="*" use="@xmiid"/>    <xsl:key name="element" match="*" use="@xmiid"/>
39        
40    <xsl:param name="mode" select='tap_schema'/> <!-- tap_schema, tap_table_set -->    <xsl:param name="mode" select='vodataservice'/> <!-- tap_schema, tap_table_set vodataservice -->
41    <xsl:param name="vendor" select="sql92"/> <!--  -->    <xsl:param name="vendor" select="sql92"/> <!--  -->
42    <xsl:param name="lastModifiedText"/>    <xsl:param name="lastModifiedText"/>
43        
# Line 63  Line 65 
65        <xsl:when test="$mode = 'tableset'">        <xsl:when test="$mode = 'tableset'">
66          <xsl:apply-templates select="model" mode="tableset"/>          <xsl:apply-templates select="model" mode="tableset"/>
67        </xsl:when>        </xsl:when>
68              <xsl:when test="$mode = 'tap_schema'">        <xsl:when test="$mode = 'tap_schema'">
69          <xsl:apply-templates select="model" mode="tap_schema"/>          <xsl:apply-templates select="model" mode="tap_schema"/>
70        </xsl:when>        </xsl:when>
71          <xsl:when test="$mode = 'vodataservice'">
72            <xsl:apply-templates select="model" mode="vodataservice"/>
73          </xsl:when>
74        <xsl:otherwise>        <xsl:otherwise>
75        UNKNOWN TAP metadata mode <xsl:value-of select="$mode"/>        UNKNOWN TAP metadata mode <xsl:value-of select="$mode"/>
76        </xsl:otherwise>        </xsl:otherwise>
# Line 88  Line 93 
93  <xsl:value-of select="$header"/>  <xsl:value-of select="$header"/>
94            
95  <!-- CREATE TAP-type 1 votable -->  <!-- CREATE TAP-type 1 votable -->
     <xsl:variable name="file" select="concat(name,'_tap_table.xml')"/>  
     <xsl:message >Opening file <xsl:value-of select="$file"/></xsl:message>  
       
96      <xsl:variable name="file" select="concat(name,'_tap_tableset.xml')"/>      <xsl:variable name="file" select="concat(name,'_tap_tableset.xml')"/>
97      <xsl:message >Opening file <xsl:value-of select="$file"/></xsl:message>      <xsl:message >Opening file <xsl:value-of select="$file"/></xsl:message>
98      <xsl:result-document href="{$file}">      <xsl:result-document href="{$file}">
# Line 149  Line 151 
151        <xsl:element name="DESCRIPTION">        <xsl:element name="DESCRIPTION">
152          <xsl:value-of select="description"/>          <xsl:value-of select="description"/>
153        </xsl:element>        </xsl:element>
154    
155          <xsl:apply-templates select="." mode="tap_fields"/>
156        </xsl:element>    
157        
158      </xsl:template>
159        
160      <xsl:template match="objectType" mode="tap_fields">
161      
162        <xsl:variable name="utype">
163          <xsl:apply-templates select="." mode="utype"/>
164        </xsl:variable>
165      <xsl:choose>      <xsl:choose>
166      <xsl:when test="extends">        <xsl:when test="extends">
167        <xsl:apply-templates select="key('element',extends/@xmiidref)" mode="tap_fields"/>          <xsl:apply-templates select="key('element',extends/@xmiidref)" mode="tap_fields"/>
168      </xsl:when>        </xsl:when>
169      <xsl:otherwise>        <xsl:otherwise>
170        <xsl:element name="FIELD">            <xsl:element name="FIELD">
171          <xsl:attribute name="name" select="$primaryKeyColumnName"/>              <xsl:attribute name="name" select="$primaryKeyColumnName"/>
172          <xsl:attribute name="datatype" select="'long'"/>              <xsl:attribute name="datatype" select="'long'"/>
173          <xsl:attribute name="ucd" select="'TBD'"/>              <xsl:attribute name="ucd" select="'TBD'"/>
174          <xsl:attribute name="utype" select="concat($utype,'.',$primaryKeyColumnName)"/>              <xsl:attribute name="utype" select="concat($utype,'.',$primaryKeyColumnName)"/>
175          <xsl:element name="DESCRIPTION">              <xsl:element name="DESCRIPTION">
176            <xsl:text>The unique, primary key column on this table.</xsl:text>                <xsl:text>The unique, primary key column on this table.</xsl:text>
177          </xsl:element>              </xsl:element>
178        </xsl:element>            </xsl:element>
179        <xsl:element name="FIELD">            <xsl:element name="FIELD">
180          <xsl:attribute name="name" select="$discriminatorColumnName"/>              <xsl:attribute name="name" select="$discriminatorColumnName"/>
181          <xsl:attribute name="datatype" select="'char'"/>              <xsl:attribute name="datatype" select="'char'"/>
182          <xsl:attribute name="width" select="$discriminatorColumnLength"/>              <xsl:attribute name="width" select="$discriminatorColumnLength"/>
183          <xsl:attribute name="ucd" select="'TBD'"/>              <xsl:attribute name="ucd" select="'TBD'"/>
184          <xsl:attribute name="utype" select="'TBD'"/>              <xsl:attribute name="utype" select="'TBD'"/>
185          <xsl:element name="DESCRIPTION">              <xsl:element name="DESCRIPTION">
186            <xsl:text>This column stores the name of the object type from the data model stored in the row.</xsl:text>                <xsl:text>This column stores the name of the object type from the data model stored in the row.</xsl:text>
187          </xsl:element>              </xsl:element>
188        </xsl:element>            </xsl:element>
189      </xsl:otherwise>          </xsl:otherwise>
190      </xsl:choose>        </xsl:choose>
191    
192        
193      <xsl:if test="container">      <xsl:if test="container">
194        <xsl:element name="FIELD">        <xsl:element name="FIELD">
195          <xsl:attribute name="name" select="'containerId'"/>          <xsl:attribute name="name" select="'containerId'"/>
# Line 240  Line 255 
255          </xsl:element>          </xsl:element>
256        </xsl:element>        </xsl:element>
257      </xsl:for-each>              </xsl:for-each>        
 </xsl:element>      
258    </xsl:template>    </xsl:template>
259    
260    
# Line 455  Line 469 
469      <xsl:param name="primary" select="'T'"/>      <xsl:param name="primary" select="'T'"/>
470      <xsl:param name="indexed" select="'T'"/>      <xsl:param name="indexed" select="'T'"/>
471      <xsl:param name="std" select="'T'"/>      <xsl:param name="std" select="'T'"/>
472        <!-- TODO this can be simplieified, the INSERT INTO ... does not have to be repeated,
473      only comma-separated list of values (within () ) is required. More efficient as well. -->
474    <xsl:text>INSERT INTO TAP_SCHEMA.Columns(name, tableName,description,unit,ucd,utype,datatype,arraysize,"primary",indexed,std)values(</xsl:text>    <xsl:text>INSERT INTO TAP_SCHEMA.Columns(name, tableName,description,unit,ucd,utype,datatype,arraysize,"primary",indexed,std)values(</xsl:text>
475     '<xsl:value-of select="$name"/>'     '<xsl:value-of select="$name"/>'
476  ,  '<xsl:value-of select="$tableName"/>'  ,  '<xsl:value-of select="$tableName"/>'
# Line 472  Line 487 
487    
488    
489    
490    <!--
491    Use VOSI/VODataService specification.
492    Following example in http://wfaudata.roe.ac.uk/ukidssWorld-dsa/wsa/vosi/tables
493    as suggested in http://www.ivoa.net/internal/IVOA/TableAccess/TAP-QL-0.1.pdf
494    -->
495      <!--
496      This template assumes that the public database schema is described as a collection
497      of <table>-s, with <column>-s describing the columns.
498      -->
499      <xsl:template match="model" mode="vodataservice">
500        <xsl:message>Model = <xsl:value-of select="name"></xsl:value-of></xsl:message>
501    -- Generating VODataService like metadata for model <xsl:value-of select="name"/>.
502    <xsl:value-of select="$header"/>
503        
504        <xsl:variable name="file" select="concat(name,'_vodataservice.xml')"/>
505        <xsl:message >Opening file <xsl:value-of select="$file"/></xsl:message>
506        
507        <xsl:result-document href="{$file}">
508    
509        <xsl:element name="tab:tables">
510          <xsl:namespace name="vr">http://www.ivoa.net/xml/VOResource/v1.0</xsl:namespace>
511          <xsl:namespace name="vs">http://www.ivoa.net/xml/VODataService/v1.0</xsl:namespace>
512          <xsl:namespace name="tab">urn:astrogrid:schema:TableMetadata</xsl:namespace>
513          <xsl:namespace name="xsi">http://www.w3.org/2001/XMLSchema-instance</xsl:namespace>
514          <xsl:attribute name="xsi:schemaLocation">
515    <xsl:text>http://www.ivoa.net/xml/VOResource/v1.0 http://software.astrogrid.org/schema/vo-resource-types/VOResource/v1.0/VOResource.xsd http://www.ivoa.net/xml/VODataService/v1.0 http://software.astrogrid.org/schema/vo-resource-types/VODataService/v1.0/VODataService.xsd urn:astrogrid:schema:TableMetadata http://wfaudata.roe.ac.uk/ukidssWorld-dsa/schema/Tables.xsd</xsl:text>
516          </xsl:attribute>
517          
518    <!--
519      xsi:schemaLocation="http://www.ivoa.net/xml/VOResource/v1.0 http://software.astrogrid.org/schema/vo-resource-types/VOResource/v1.0/VOResource.xsd http://www.ivoa.net/xml/VODataService/v1.0 http://software.astrogrid.org/schema/vo-resource-types/VODataService/v1.0/VODataService.xsd urn:astrogrid:schema:TableMetadata http://wfaudata.roe.ac.uk/ukidssWorld-dsa/schema/Tables.xsd
520     -->
521          <xsl:apply-templates select="//objectType" mode="vodataservice">
522            <xsl:sort select="name"/>
523          </xsl:apply-templates>
524        </xsl:element>
525        </xsl:result-document>
526      </xsl:template>  
527    
528    
529    
530      <!--
531      This template assumes that the public database schema is described as a collection
532      of <table>-s, with <column>-s describing the columns.
533      -->
534    
535      <xsl:template match="objectType" mode="vodataservice">
536        <xsl:variable name="utype">
537          <xsl:apply-templates select="." mode="utype"/>
538        </xsl:variable>
539        
540        <xsl:element name="table">
541          <xsl:element name="name">
542            <xsl:apply-templates select="." mode="viewName"/>
543          </xsl:element>
544          <xsl:element name="description">
545            <xsl:value-of select="description"/>
546          </xsl:element>
547          <xsl:apply-templates select="." mode="vodataservice_columns"/>
548        </xsl:element>
549      </xsl:template>
550    
551      <xsl:template match="objectType" mode="vodataservice_columns">
552        <xsl:variable name="utype">
553          <xsl:apply-templates select="." mode="utype"/>
554        </xsl:variable>
555        <xsl:choose>
556        <xsl:when test="extends">
557          <xsl:apply-templates select="key('element',extends/@xmiidref)" mode="vodataservice_columns"/>
558        </xsl:when>
559        <xsl:otherwise>
560          <xsl:call-template name="vodataservice_column">
561            <xsl:with-param name="name" select="$primaryKeyColumnName"/>
562            <xsl:with-param name="description">
563              <xsl:text>The unique, primary key column on this table.</xsl:text>
564            </xsl:with-param>
565            <xsl:with-param name="datatype" select="'long'"/>
566            <xsl:with-param name="ucd" select="'TBD'"/>
567            <xsl:with-param name="utype" select="concat($utype,'.',$primaryKeyColumnName)"/>
568          </xsl:call-template>
569          
570          <xsl:call-template name="vodataservice_column">
571            <xsl:with-param name="name" select="$discriminatorColumnName"/>
572            <xsl:with-param name="description">
573              <xsl:text>This column stores the name of the object type from the data model stored in the row.</xsl:text>
574            </xsl:with-param>
575            <xsl:with-param name="datatype" select="'char'"/>
576            <xsl:with-param name="width" select="$discriminatorColumnLength"/>
577            <xsl:with-param name="ucd" select="'TBD'"/>
578            <xsl:with-param name="utype" select="concat($utype,'.CONTAINER')"/>
579          </xsl:call-template>
580    
581        </xsl:otherwise>
582        </xsl:choose>
583    
584        <xsl:if test="container">
585          <xsl:call-template name="vodataservice_column">
586            <xsl:with-param name="name" select="'containerId'"/>
587            <xsl:with-param name="description">
588              <xsl:text>This column is a foreign key pointing to the containing object in </xsl:text>
589              <xsl:apply-templates select="key('element',container/@xmiidref)" mode="viewName"/>
590            </xsl:with-param>
591            <xsl:with-param name="datatype" select="'long'"/>
592            <xsl:with-param name="ucd" select="'TBD'"/>
593            <xsl:with-param name="utype" select="concat($utype,'.CONTAINER')"/>
594          </xsl:call-template>
595        </xsl:if>        
596        <xsl:for-each select="attribute">
597          <xsl:variable name="columns">
598            <xsl:apply-templates select="." mode="columns">
599              <xsl:with-param name="utypeprefix" select="$utype"/>
600            </xsl:apply-templates>
601          </xsl:variable>
602          <xsl:for-each select="exsl:node-set($columns)/column">
603            <xsl:variable name="votabletype">
604              <xsl:call-template name="votabletype">
605                <xsl:with-param name="type" select="type"/>
606              </xsl:call-template>
607            </xsl:variable>
608    
609            <xsl:call-template name="vodataservice_column">
610              <xsl:with-param name="name" select="name"/>
611              <xsl:with-param name="description" select="description"/>
612              <xsl:with-param name="datatype" select="$votabletype"/>
613              <xsl:with-param name="ucd" select="'TBD'"/>
614              <xsl:with-param name="utype" select="utype"/>
615            </xsl:call-template>
616          </xsl:for-each>  
617        </xsl:for-each>
618    
619        <xsl:for-each select="reference[not(subsets)]">
620          <xsl:call-template name="vodataservice_column">
621            <xsl:with-param name="name">
622              <xsl:apply-templates select="." mode="columnName"/>
623            </xsl:with-param>
624            <xsl:with-param name="description" select="description"/>
625            <xsl:with-param name="datatype" select="'long'"/>
626            <xsl:with-param name="ucd" select="'TBD'"/>
627            <xsl:with-param name="utype" select="'TBD'"/>
628          </xsl:call-template>
629        </xsl:for-each>        
630      </xsl:template>
631    
632    
633    
634      <xsl:template name="vodataservice_column">
635        <xsl:param name="name"/>
636        <xsl:param name="tableName"/>
637        <xsl:param name="description"/>
638        <xsl:param name="unit"/>
639        <xsl:param name="ucd"/>
640        <xsl:param name="utype"/>
641        <xsl:param name="datatype"/>
642        <xsl:param name="width"/>
643    
644        <xsl:element name="column">
645          <xsl:element name="name"><xsl:value-of select="$name"/></xsl:element>
646          <xsl:element name="description"><xsl:value-of select="$description"/></xsl:element>
647          <xsl:if test="$unit"><xsl:element name="unit"><xsl:value-of select="$unit"/></xsl:element></xsl:if>
648          <xsl:if test="$ucd"><xsl:element name="ucd"><xsl:value-of select="$ucd"/></xsl:element></xsl:if>
649          <xsl:if test="$utype"><xsl:element name="utype"><xsl:value-of select="$utype"/></xsl:element></xsl:if>
650          <xsl:element name="dataType"><xsl:value-of select="$datatype"/></xsl:element>
651          <xsl:if test="$width"><xsl:element name="width"><xsl:value-of select="$width"/></xsl:element></xsl:if>
652        </xsl:element>
653      </xsl:template>
654    
655    
656    
657    
658  <!-- UTIL -->  <!-- UTIL -->
659    
660    <xsl:template name="votabletype">    <xsl:template name="votabletype">

Legend:
Removed from v.540  
changed lines
  Added in v.541

msdemlei@ari.uni-heidelberg.de
ViewVC Help
Powered by ViewVC 1.1.26