diff --git a/data-discovery/src/main/java/vlkb/output/XmlSerializer.java b/data-discovery/src/main/java/vlkb/output/XmlSerializer.java index 496dc1a2ec3b7ea54eaeb3911605822d39d7f09f..3a632ee9e10062a4c13a1ffeffc2c77d97eb368a 100644 --- a/data-discovery/src/main/java/vlkb/output/XmlSerializer.java +++ b/data-discovery/src/main/java/vlkb/output/XmlSerializer.java @@ -33,6 +33,8 @@ public final class XmlSerializer BufferedWriter out = new BufferedWriter( writer ); + out.write("<?xml-stylesheet type='text/xsl' href='VOTable2XHTML.xsl'?>"); + //out.write("<?xml-stylesheet type='text/xsl' href='http://www.ivoa.net/internal/IVOA/VOTableSoftware/VOTable2XHTML.xsl'?>"); out.write( "<VOTABLE version='1.1'>\n" ); out.write( "<RESOURCE>\n" ); out.write( "<DESCRIPTION> " + searchOutputData.versionString + " </DESCRIPTION>\n" ); @@ -46,7 +48,7 @@ public final class XmlSerializer } private static StarTable makeSearchResultsTable(Subsurvey[] ssurv) - { + { ColumnInfo[] colInfos = new ColumnInfo[ 5 + 2*4 ]; colInfos[ 0 ] = new ColumnInfo( "overlap", Integer.class, "Overlap Code" ); diff --git a/data-discovery/src/main/webapp/VOTable2XHTML.xsl b/data-discovery/src/main/webapp/VOTable2XHTML.xsl new file mode 100644 index 0000000000000000000000000000000000000000..8edc081f7007a772a026e7fed47934c2583218f2 --- /dev/null +++ b/data-discovery/src/main/webapp/VOTable2XHTML.xsl @@ -0,0 +1,1816 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- +# VOTable2XHTML +# Version: 1.0 +# Author: Jian SANG (China-VO) +# Date: June, 2004 +# +# VOTable2XHTML +# Version: 2.0 +# Description: An XSLT converter to transform VOTable file to XHTML file +# Updated by: Chenzhou CUI (ccz@bao.ac.cn) +# Last Modified: September, 2005 +# +# Changelog: +# 2.0 (2005-09-16) +# Support for VOTable with schema designed +# Much more information displayed including "GROUP" element +# +--> +<!-- + For further documentation and updates visit http://services.china-vo.org/votable2xhtml/ + --> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:VOT="http://www.ivoa.net/xml/VOTable/v1.1"> + <xsl:output method="xml" encoding="UTF-8" media-type="application/xhtml+xml" indent="no" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" omit-xml-declaration="no"/> + <xsl:template match="/"> + <html> + <head> + <meta content="Created by VOTable2XHTML 2.0 (China-VO)"/> + <title>VOTable</title> + <style type="text/css"> + <!-- +# Change the display style to what you want here +--> + <xsl:comment> + +.databody {COLOR: #000000; FONT-FAMILY: arial,verdana,helvetica,sans-serif; FONT-SIZE: 10pt} +.header {COLOR: #000000; FONT-FAMILY: arial,verdana,helvetica,sans-serif; FONT-SIZE: 10pt;FONT-WEIGHT: bold} +.groupHeader {COLOR: #0000ff; FONT-FAMILY: arial,verdana,helvetica,sans-serif; FONT-SIZE: 10pt;FONT-WEIGHT: bold} +.topHeader {COLOR: #000000; FONT-FAMILY: Arial Black,verdana,helvetica,sans-serif; FONT-SIZE: 12pt} +.comments {COLOR: #000000; FONT-FAMILY: arial,verdana,helvetica,sans-serif; FONT-SIZE: 10pt} +</xsl:comment> + </style> + </head> + <body> + <xsl:for-each select="/*"> + <!-- When there is no namespace (xmlns) designed to the VOTable file, "noschema" template will be used, otherwise, "withschema" will be used --> + <xsl:choose> + <xsl:when test="namespace-uri()"> + <xsl:call-template name="withschema"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="noschema"/> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </body> + </html> + </xsl:template> + <!-- Transformation template for VOTable file without (xmlns) namespace --> + <xsl:template name="noschema"> + <xsl:for-each select="/VOTABLE"> + <xsl:call-template name="data_import"/> + </xsl:for-each> + </xsl:template> + <!-- Core part for format transformation --> + <xsl:template name="data_import"> + <!-- Transformation for each TABLE --> + <xsl:for-each select="//TABLE"> + <xsl:call-template name="Ctable"/> + </xsl:for-each> + <!-- Transformation for each RESOURCE --> + <xsl:for-each select="//RESOURCE"> + <xsl:call-template name="Cresource"/> + </xsl:for-each> + <!-- Transformation for the root VOTABLE --> + <xsl:for-each select="/VOTABLE"> + <xsl:call-template name="VOTABLE"/> + </xsl:for-each> + </xsl:template> + <!-- "TABLEDATA" level transformation --> + <xsl:template name="Ctable"> + <xsl:if test="//DATA/TABLEDATA"> + <xsl:call-template name="Ctabledata"/> + </xsl:if> + <xsl:if test=".//FIELD"> + <xsl:call-template name="Ctablefield"/> + </xsl:if> + <xsl:if test=".//PARAM"> + <xsl:call-template name="Ctableparam"/> + </xsl:if> + <xsl:if test=".//GROUP"> + <xsl:call-template name="Ctablegroup"/> + </xsl:if> + <xsl:call-template name="Ctableother"/> + </xsl:template> + <xsl:template name="Ctabledata"> + <p class="topHeader">Data in Table: + <xsl:call-template name="table_name"> + </xsl:call-template> + </p> + <table border="1"> + <tr align="center"> + <xsl:for-each select=".//FIELD"> + <xsl:choose> + <xsl:when test="@name"> + <th class="header" align="center"> + <xsl:value-of select="@name"/> + </th> + </xsl:when> + <xsl:otherwise> + <th class="header" align="center"> + <xsl:value-of select="@ID"/> + </th> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </tr> + <tr align="center"> + <xsl:for-each select=".//FIELD"> + <td class="databody" align="center"> + <xsl:value-of select="@unit"/> + </td> + </xsl:for-each> + </tr> + <xsl:for-each select="..//DATA"> + <xsl:for-each select="TABLEDATA"> + <xsl:for-each select="TR"> + <tr> + <xsl:for-each select=".//TD"> + <td class="databody"> + <xsl:value-of select="."/> + </td> + </xsl:for-each> + </tr> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </table> + </xsl:template> + <xsl:template name="Ctablefield"> + <p class="topHeader">Fields in Table: + <xsl:call-template name="table_name"> + </xsl:call-template> + </p> + <table border="1"> + <tr align="center"> + <th class="header"> + ID + </th> + <th class="header"> + name + </th> + <th class="header"> + datatype + </th> + <th class="header"> + unit + </th> + <th class="header"> + precision + </th> + <th class="header"> + width + </th> + <th class="header"> + ref + </th> + <th class="header"> + ucd + </th> + <th class="header"> + utype + </th> + <th class="header"> + arraysize + </th> + <th class="header"> + type + </th> + <th class="header"> + Description + </th> + <th class="header"> + Link + </th> + </tr> + <xsl:for-each select="FIELD"> + <tr> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@datatype"/> + </td> + <td class="databody"> + <xsl:value-of select="@unit"/> + </td> + <td class="databody"> + <xsl:value-of select="@precision"/> + </td> + <td class="databody"> + <xsl:value-of select="@width"/> + </td> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + <td class="databody"> + <xsl:value-of select="@ucd"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="@arraysize"/> + </td> + <td class="databody"> + <xsl:value-of select="@type"/> + </td> + <td class="databody"> + <xsl:value-of select="DESCRIPTION"/> + </td> + <td class="databody"> + <xsl:for-each select="LINK"> + <xsl:variable name="flink"> + <xsl:value-of select="@href"/> + </xsl:variable> + <a href="{$flink}"> + <xsl:value-of select="$flink"/> + </a> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </table> + </xsl:template> + <xsl:template name="Ctablegroup"> + <p class="topHeader">Groups Defined in Table: + <xsl:call-template name="table_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:for-each select="GROUP"> + <tr> + <xsl:choose> + <xsl:when test="@ID"> + <td class="groupHeader"> + Group Name + </td> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + </xsl:when> + <xsl:otherwise> + <td class="groupHeader"> + Group Name + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + </xsl:otherwise> + </xsl:choose> + </tr> + <xsl:if test="./FIELDref"> + <tr> + <td class="header"> + FIELDref + </td> + <xsl:for-each select="FIELDref"> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + </xsl:for-each> + </tr> + </xsl:if> + <xsl:if test="./PARAMref"> + <tr> + <td class="header"> + PARAMref + </td> + <xsl:for-each select="PARAMref"> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + </xsl:for-each> + </tr> + </xsl:if> + <tr> + <td class="header"> + Attributes + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + name + </td> + <td class="databody"> + ref + </td> + <td class="databody"> + ucd + </td> + <td class="databody"> + utype + </td> + <td class="databody"> + Description + </td> + </tr> + <tr> + <td/> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + <td class="databody"> + <xsl:value-of select="@ucd"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="DESCRIPTION"/> + </td> + </tr> + <xsl:if test="./PARAM"> + <tr> + <td class="header"> + PARAMETERS + </td> + </tr> + <xsl:call-template name="PARAMETERS"/> + </xsl:if> + <tr></tr> + </xsl:for-each> + </table> + </xsl:template> + <xsl:template name="Ctableparam"> + <p class="topHeader">Parameters for Table: <xsl:call-template name="table_name"> + </xsl:call-template> + </p> + <xsl:if test="PARAM"> + <table border="1"> + <xsl:call-template name="PARAMETERS"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="Ctableother"> + <xsl:if test="(@*|DESCRIPTION|LINK)"> + <p class="topHeader">Other Metadata for Table: <xsl:call-template name="table_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:if test="@*"> + <tr> + <td class="header"> + Attributes + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + name + </td> + <td class="databody"> + ref + </td> + <td class="databody"> + ucd + </td> + <td class="databody"> + utype + </td> + <td class="databody"> + nrows + </td> + </tr> + <tr> + <td/> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + <td class="databody"> + <xsl:value-of select="@ucd"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="@nrows"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="DESCRIPTION"> + <tr> + <td class="header"> + Description + </td> + <td class="databody"> + <xsl:value-of select="DESCRIPTION"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:for-each select="LINK"> + <tr> + <td class="databody"> + Link + + </td> + <tr> + <td/> + <td class="databody"> + <xsl:variable name="flink"> + <xsl:value-of select="@href"/> + </xsl:variable> + <a href="{$flink}"> + <xsl:value-of select="$flink"/> + </a> + </td> + </tr> + </tr> + </xsl:for-each> + </table> + </xsl:if> + </xsl:template> + <!-- "RESOURCE" level transformation --> + <xsl:template name="Cresource"> + <xsl:call-template name="Cresourceparam"/> + <xsl:call-template name="Cresourceinfo"/> + <xsl:call-template name="Cresourceother"/> + </xsl:template> + <xsl:template name="Cresourceparam"> + <xsl:if test="PARAM"> + <p class="topHeader">Parameters for Resource: <xsl:call-template name="RES_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:call-template name="PARAMETERS"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="Cresourceinfo"> + <xsl:if test="INFO"> + <p class="topHeader">Information for Resource:<xsl:call-template name="RES_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:call-template name="INFORMATION"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="Cresourceother"> + <xsl:if test="(@*|DESCRIPTION|COOSYS|LINK)"> + <p class="topHeader">Other Metadata for Resource: <xsl:call-template name="RES_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:if test="@*"> + <tr> + <td class="header"> + Attributes + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + name + </td> + <td class="databody"> + utype + </td> + <td class="databody"> + type + </td> + </tr> + <tr> + <td/> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="@type"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="DESCRIPTION"> + <tr> + <td class="header"> + Description + </td> + <td class="databody"> + <xsl:value-of select="DESCRIPTION"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="COOSYS"> + <tr> + <td class="header"> + Coordinates System + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + equinox + </td> + <td class="databody"> + epoch + </td> + <td class="databody"> + system + </td> + </tr> + <tr> + <td class="databody"> + <p/> + </td> + <td class="databody"> + <xsl:value-of select="COOSYS/@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="COOSYS/@equinox"/> + </td> + <td class="databody"> + <xsl:value-of select="COOSYS/@epoch"/> + </td> + <td class="databody"> + <xsl:value-of select="COOSYS/@system"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:for-each select="LINK"> + <tr> + <td class="header"> + Link + + </td> + <tr> + <td/> + <td class="databody"> + <xsl:variable name="flink"> + <xsl:value-of select="@href"/> + </xsl:variable> + <a href="{$flink}"> + <xsl:value-of select="$flink"/> + </a> + </td> + </tr> + </tr> + </xsl:for-each> + </table> + </xsl:if> + </xsl:template> + <!-- "VOTABLE" or ROOT level transformation --> + <xsl:template name="VOTABLE"> + <xsl:call-template name="VOTABLEparam"/> + <xsl:call-template name="VOTABLEinfo"/> + <xsl:call-template name="VOTABLEother"/> + </xsl:template> + <xsl:template name="VOTABLEparam"> + <xsl:if test="PARAM"> + <p class="topHeader">Parameters for VOTable: <xsl:call-template name="final_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:call-template name="PARAMETERS"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="VOTABLEinfo"> + <xsl:if test="INFO"> + <p class="topHeader">Information for VOTable: <xsl:call-template name="final_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:call-template name="INFORMATION"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="VOTABLEother"> + <xsl:if test="(/VOTABLE[@ID]|/VOTABLE[@version]|/VOTABLE/DESCRIPTION|/VOTABLE/COOSYS|/VOTABLE/DEFINITIONS)"> + <p class="topHeader">Other Metadata for VOTable: <xsl:call-template name="final_name"> + + </xsl:call-template> + </p> + <table border="1"> + <xsl:if test="/VOTABLE[@ID]"> + <tr> + <td class="header"> + Document ID + </td> + <td class="databody"> + <xsl:value-of select="/VOTABLE/@ID"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="/VOTABLE[@version]"> + <tr> + <td class="header"> + Version + </td> + <td class="databody"> + <xsl:value-of select="/VOTABLE/@version"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="/VOTABLE/DESCRIPTION"> + <tr> + <td class="header"> + Description + </td> + <td class="databody"> + <xsl:value-of select="/VOTABLE/DESCRIPTION"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="/VOTABLE/COOSYS"> + <tr> + <td class="header"> + Coordinates System + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + equinox + </td> + <td class="databody"> + epoch + </td> + <td class="databody"> + system + </td> + </tr> + <tr> + <td class="databody"> + <p/> + </td> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@equinox"/> + </td> + <td class="databody"> + <xsl:value-of select="@epoch"/> + </td> + <td class="databody"> + <xsl:value-of select="@system"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:for-each select="/VOTABLE/DEFINITIONS"> + <xsl:for-each select="COOSYS"> + <tr> + <td class="header"> + Definition: Coordinates System + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + equinox + </td> + <td class="databody"> + epoch + </td> + <td class="databody"> + system + </td> + </tr> + <tr> + <td class="databody"> + <p/> + </td> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@equinox"/> + </td> + <td class="databody"> + <xsl:value-of select="@epoch"/> + </td> + <td class="databody"> + <xsl:value-of select="@system"/> + </td> + </tr> + </xsl:for-each> + </xsl:for-each> + </table> + </xsl:if> + </xsl:template> + <!-- Common Module for "PARAM" elements --> + <xsl:template name="PARAMETERS"> + <tr> + <th class="header"> + ID + </th> + <th class="header"> + name + </th> + <th class="header"> + value + </th> + <th class="header"> + datatype + </th> + <th class="header"> + unit + </th> + <th class="header"> + precision + </th> + <th class="header"> + width + </th> + <th class="header"> + ref + </th> + <th class="header"> + ucd + </th> + <th class="header"> + utype + </th> + <th class="header"> + arraysize + </th> + <th class="header"> + Description + </th> + <th class="header"> + Link + </th> + </tr> + <xsl:for-each select="PARAM"> + <tr> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@value"/> + </td> + <td class="databody"> + <xsl:value-of select="@datatype"/> + </td> + <td class="databody"> + <xsl:value-of select="@unit"/> + </td> + <td class="databody"> + <xsl:value-of select="@precision"/> + </td> + <td class="databody"> + <xsl:value-of select="@width"/> + </td> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + <td class="databody"> + <xsl:value-of select="@ucd"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="@arraysize"/> + </td> + <td class="databody"> + <xsl:value-of select="DESCRIPTION"/> + </td> + <td class="databody"> + <xsl:for-each select="LINK"> + <xsl:variable name="flink"> + <xsl:value-of select="@href"/> + </xsl:variable> + <a href="{$flink}"> + <xsl:value-of select="$flink"/> + </a> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </xsl:template> + <!-- Common Module for "INFO" elements --> + <xsl:template name="INFORMATION"> + <tr> + <td class="header"> + ID + </td> + <td class="header"> + name + </td> + <td class="header"> + value + </td> + </tr> + <xsl:for-each select="INFO"> + <tr> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@value"/> + </td> + </tr> + </xsl:for-each> + </xsl:template> + <!-- Generate names for different sheets --> + <xsl:template name="table_name"> + <xsl:choose> + <xsl:when test="@ID"> + <xsl:variable name="TAB_ID"> + <xsl:value-of select="concat('_',@ID)"/> + </xsl:variable> + <xsl:call-template name="resource_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="@name"> + <xsl:variable name="TAB_ID"> + <xsl:value-of select="concat('_',@name)"/> + </xsl:variable> + <xsl:call-template name="resource_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="TAB_ID"> + <xsl:value-of select="concat('_',name())"/> + </xsl:variable> + <xsl:call-template name="resource_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="resource_name"> + <xsl:param name="TAB_ID"/> + <xsl:choose> + <xsl:when test="../@ID"> + <xsl:variable name="RES_ID"> + <xsl:value-of select="concat('_',../@ID)"/> + </xsl:variable> + <xsl:call-template name="final_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + <xsl:with-param name="RES_ID" select="$RES_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="../@name"> + <xsl:variable name="RES_ID"> + <xsl:value-of select="concat('_',../@name)"/> + </xsl:variable> + <xsl:call-template name="final_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + <xsl:with-param name="RES_ID" select="$RES_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="RES_ID"> + <xsl:value-of select="concat('_',name(..))"/> + </xsl:variable> + <xsl:call-template name="final_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + <xsl:with-param name="RES_ID" select="$RES_ID"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="RES_name"> + <xsl:choose> + <xsl:when test="@ID"> + <xsl:variable name="RES_ID"> + <xsl:value-of select="concat('_',@ID)"/> + </xsl:variable> + <xsl:call-template name="final_name"> + <xsl:with-param name="RES_ID" select="$RES_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="@name"> + <xsl:variable name="RES_ID"> + <xsl:value-of select="concat('_',@name)"/> + </xsl:variable> + <xsl:call-template name="final_name"> + <xsl:with-param name="RES_ID" select="$RES_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="RES_ID"> + <xsl:value-of select="concat('_',name())"/> + </xsl:variable> + <xsl:call-template name="final_name"> + <xsl:with-param name="RES_ID" select="$RES_ID"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="final_name"> + <xsl:param name="RES_ID"/> + <xsl:param name="TAB_ID"/> + <xsl:choose> + <xsl:when test="/VOTABLE/@ID"> + <xsl:variable name="VOT_ID"> + <xsl:value-of select="/VOTABLE/@ID"/> + </xsl:variable> + <xsl:value-of select="concat($VOT_ID,$RES_ID,$TAB_ID)"/> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="VOT_ID"> + <xsl:value-of select="string('VOTABLE')"/> + </xsl:variable> + <xsl:value-of select="concat($VOT_ID,$RES_ID,$TAB_ID)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="withschema"> + <xsl:for-each select="/VOT:VOTABLE"> + <xsl:call-template name="vot_data_import"/> + </xsl:for-each> + </xsl:template> + <!-- Core part for format transformation --> + <xsl:template name="vot_data_import"> + <!-- Transformation for each TABLE --> + <xsl:for-each select="//VOT:TABLE"> + <xsl:call-template name="vot_Ctable"/> + </xsl:for-each> + <!-- Transformation for each RESOURCE --> + <xsl:for-each select="//VOT:RESOURCE"> + <xsl:call-template name="vot_Cresource"/> + </xsl:for-each> + <!-- Transformation for the root VOTABLE --> + <xsl:for-each select="/VOT:VOTABLE"> + <xsl:call-template name="vot_VOTABLE"/> + </xsl:for-each> + </xsl:template> + <!-- "TABLEDATA" level transformation --> + <xsl:template name="vot_Ctable"> + <xsl:if test="//VOT:DATA/VOT:TABLEDATA"> + <xsl:call-template name="vot_Ctabledata"/> + </xsl:if> + <xsl:if test=".//VOT:FIELD"> + <xsl:call-template name="vot_Ctablefield"/> + </xsl:if> + <xsl:if test=".//VOT:PARAM"> + <xsl:call-template name="vot_Ctableparam"/> + </xsl:if> + <xsl:if test=".//VOT:GROUP"> + <xsl:call-template name="vot_Ctablegroup"/> + </xsl:if> + <xsl:call-template name="vot_Ctableother"/> + </xsl:template> + <xsl:template name="vot_Ctabledata"> + <p class="topHeader">Data in Table: + <xsl:call-template name="vot_table_name"> + </xsl:call-template> + </p> + <table border="1"> + <tr align="center"> + <xsl:for-each select=".//VOT:FIELD"> + <xsl:choose> + <xsl:when test="@name"> + <th class="header" align="center"> + <xsl:value-of select="@name"/> + </th> + </xsl:when> + <xsl:otherwise> + <th class="header" align="center"> + <xsl:value-of select="@ID"/> + </th> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </tr> + <tr align="center"> + <xsl:for-each select=".//VOT:FIELD"> + <td class="databody" align="center"> + <xsl:value-of select="@unit"/> + </td> + </xsl:for-each> + </tr> + <xsl:for-each select="..//VOT:DATA"> + <xsl:for-each select="VOT:TABLEDATA"> + <xsl:for-each select="VOT:TR"> + <tr> + <xsl:for-each select=".//VOT:TD"> + <td class="databody"> + <xsl:value-of select="."/> + </td> + </xsl:for-each> + </tr> + </xsl:for-each> + </xsl:for-each> + </xsl:for-each> + </table> + </xsl:template> + <xsl:template name="vot_Ctablefield"> + <p class="topHeader">Fields in Table: + <xsl:call-template name="vot_table_name"> + </xsl:call-template> + </p> + <table border="1"> + <tr align="center"> + <th class="header"> + ID + </th> + <th class="header"> + name + </th> + <th class="header"> + datatype + </th> + <th class="header"> + unit + </th> + <th class="header"> + precision + </th> + <th class="header"> + width + </th> + <th class="header"> + ref + </th> + <th class="header"> + ucd + </th> + <th class="header"> + utype + </th> + <th class="header"> + arraysize + </th> + <th class="header"> + type + </th> + <th class="header"> + Description + </th> + <th class="header"> + Link + </th> + </tr> + <xsl:for-each select="VOT:FIELD"> + <tr> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@datatype"/> + </td> + <td class="databody"> + <xsl:value-of select="@unit"/> + </td> + <td class="databody"> + <xsl:value-of select="@precision"/> + </td> + <td class="databody"> + <xsl:value-of select="@width"/> + </td> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + <td class="databody"> + <xsl:value-of select="@ucd"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="@arraysize"/> + </td> + <td class="databody"> + <xsl:value-of select="@type"/> + </td> + <td class="databody"> + <xsl:value-of select="VOT:DESCRIPTION"/> + </td> + <td class="databody"> + <xsl:for-each select="VOT:LINK"> + <xsl:variable name="flink"> + <xsl:value-of select="@href"/> + </xsl:variable> + <a href="{$flink}"> + <xsl:value-of select="$flink"/> + </a> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </table> + </xsl:template> + <xsl:template name="vot_Ctablegroup"> + <p class="topHeader">Groups Defined in Table: + <xsl:call-template name="vot_table_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:for-each select="VOT:GROUP"> + <tr> + <xsl:choose> + <xsl:when test="@ID"> + <td class="groupHeader"> + Group Name + </td> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + </xsl:when> + <xsl:otherwise> + <td class="groupHeader"> + Group Name + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + </xsl:otherwise> + </xsl:choose> + </tr> + <xsl:if test="./VOT:FIELDref"> + <tr> + <td class="header"> + FIELDref + </td> + <xsl:for-each select="VOT:FIELDref"> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + </xsl:for-each> + </tr> + </xsl:if> + <xsl:if test="./VOT:PARAMref"> + <tr> + <td class="header"> + PARAMref + </td> + <xsl:for-each select="VOT:PARAMref"> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + </xsl:for-each> + </tr> + </xsl:if> + <tr> + <td class="header"> + Attributes + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + name + </td> + <td class="databody"> + ref + </td> + <td class="databody"> + ucd + </td> + <td class="databody"> + utype + </td> + <td class="databody"> + Description + </td> + </tr> + <tr> + <td/> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + <td class="databody"> + <xsl:value-of select="@ucd"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="VOT:DESCRIPTION"/> + </td> + </tr> + <xsl:if test="./VOT:PARAM"> + <tr> + <td class="header"> + PARAMETERS + </td> + </tr> + <xsl:call-template name="vot_PARAMETERS"/> + </xsl:if> + <tr></tr> + </xsl:for-each> + </table> + </xsl:template> + <xsl:template name="vot_Ctableparam"> + <p class="topHeader">Parameters for Table: <xsl:call-template name="vot_table_name"> + </xsl:call-template> + </p> + <xsl:if test="VOT:PARAM"> + <table border="1"> + <xsl:call-template name="vot_PARAMETERS"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="vot_Ctableother"> + <xsl:if test="(@*|VOT:DESCRIPTION|VOT:LINK)"> + <p class="topHeader">Other Metadata for Table: <xsl:call-template name="vot_table_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:if test="@*"> + <tr> + <td class="header"> + Attributes + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + name + </td> + <td class="databody"> + ref + </td> + <td class="databody"> + ucd + </td> + <td class="databody"> + utype + </td> + <td class="databody"> + nrows + </td> + </tr> + <tr> + <td/> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + <td class="databody"> + <xsl:value-of select="@ucd"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="@nrows"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="VOT:DESCRIPTION"> + <tr> + <td class="header"> + Description + </td> + <td class="databody"> + <xsl:value-of select="VOT:DESCRIPTION"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:for-each select="VOT:LINK"> + <tr> + <td class="databody"> + Link + + </td> + <tr> + <td/> + <td class="databody"> + <xsl:variable name="flink"> + <xsl:value-of select="@href"/> + </xsl:variable> + <a href="{$flink}"> + <xsl:value-of select="$flink"/> + </a> + </td> + </tr> + </tr> + </xsl:for-each> + </table> + </xsl:if> + </xsl:template> + <!-- "RESOURCE" level transformation --> + <xsl:template name="vot_Cresource"> + <xsl:call-template name="vot_Cresourceparam"/> + <xsl:call-template name="vot_Cresourceinfo"/> + <xsl:call-template name="vot_Cresourceother"/> + </xsl:template> + <xsl:template name="vot_Cresourceparam"> + <xsl:if test="VOT:PARAM"> + <p class="topHeader">Parameters for Resource: <xsl:call-template name="RES_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:call-template name="vot_PARAMETERS"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="vot_Cresourceinfo"> + <xsl:if test="VOT:INFO"> + <p class="topHeader">Information for Resource:<xsl:call-template name="RES_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:call-template name="vot_INFORMATION"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="vot_Cresourceother"> + <xsl:if test="(@*|VOT:DESCRIPTION|VOT:COOSYS|VOT:LINK)"> + <p class="topHeader">Other Metadata for Resource: <xsl:call-template name="RES_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:if test="@*"> + <tr> + <td class="header"> + Attributes + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + name + </td> + <td class="databody"> + utype + </td> + <td class="databody"> + type + </td> + </tr> + <tr> + <td/> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="@type"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="VOT:DESCRIPTION"> + <tr> + <td class="header"> + Description + </td> + <td class="databody"> + <xsl:value-of select="VOT:DESCRIPTION"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="VOT:COOSYS"> + <tr> + <td class="header"> + Coordinates System + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + equinox + </td> + <td class="databody"> + epoch + </td> + <td class="databody"> + system + </td> + </tr> + <tr> + <td class="databody"> + <p/> + </td> + <td class="databody"> + <xsl:value-of select="VOT:COOSYS/@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="VOT:COOSYS/@equinox"/> + </td> + <td class="databody"> + <xsl:value-of select="VOT:COOSYS/@epoch"/> + </td> + <td class="databody"> + <xsl:value-of select="VOT:COOSYS/@system"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:for-each select="VOT:LINK"> + <tr> + <td class="header"> + Link + + </td> + <tr> + <td/> + <td class="databody"> + <xsl:variable name="flink"> + <xsl:value-of select="@href"/> + </xsl:variable> + <a href="{$flink}"> + <xsl:value-of select="$flink"/> + </a> + </td> + </tr> + </tr> + </xsl:for-each> + </table> + </xsl:if> + </xsl:template> + <!-- "VOTABLE" or ROOT level transformation --> + <xsl:template name="vot_VOTABLE"> + <xsl:call-template name="vot_VOTABLEparam"/> + <xsl:call-template name="vot_VOTABLEinfo"/> + <xsl:call-template name="vot_VOTABLEother"/> + </xsl:template> + <xsl:template name="vot_VOTABLEparam"> + <xsl:if test="VOT:PARAM"> + <p class="topHeader">Parameters for VOTable: <xsl:call-template name="vot_final_name"> + </xsl:call-template> + </p> + <table border="1"> + <xsl:call-template name="vot_PARAMETERS"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="vot_VOTABLEinfo"> + <!-- There is a bug in previous version here --> + <xsl:if test="VOT:INFO"> + <p class="topHeader">Information for VOTable:<xsl:call-template name="vot_final_name"> + + </xsl:call-template> + </p> + <table border="1"> + <xsl:call-template name="vot_INFORMATION"/> + </table> + </xsl:if> + </xsl:template> + <xsl:template name="vot_VOTABLEother"> + <xsl:if test="(/VOT:VOTABLE[@ID]|/VOT:VOTABLE[@version]|/VOT:VOTABLE/VOT:DESCRIPTION|/VOT:VOTABLE/VOT:COOSYS|/VOT:VOTABLE/VOT:DEFINITIONS)"> + <p class="topHeader">Other Metadata for VOTable:<xsl:call-template name="vot_final_name"> + + </xsl:call-template> + </p> + <table border="1"> + <xsl:if test="/VOT:VOTABLE[@ID]"> + <tr> + <td class="header"> + Document ID + </td> + <td class="databody"> + <xsl:value-of select="/VOT:VOTABLE/@ID"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="/VOT:VOTABLE[@version]"> + <tr> + <td class="header"> + Version + </td> + <td class="databody"> + <xsl:value-of select="/VOT:VOTABLE/@version"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="/VOT:VOTABLE/VOT:DESCRIPTION"> + <tr> + <td class="header"> + Description + </td> + <td class="databody"> + <xsl:value-of select="/VOT:VOTABLE/VOT:DESCRIPTION"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:if test="/VOT:VOTABLE/VOT:COOSYS"> + <tr> + <td class="header"> + Coordinates System + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + equinox + </td> + <td class="databody"> + epoch + </td> + <td class="databody"> + system + </td> + </tr> + <tr> + <td class="databody"> + <p/> + </td> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@equinox"/> + </td> + <td class="databody"> + <xsl:value-of select="@epoch"/> + </td> + <td class="databody"> + <xsl:value-of select="@system"/> + </td> + </tr> + <tr></tr> + </xsl:if> + <xsl:for-each select="/VOT:VOTABLE/VOT:DEFINITIONS"> + <xsl:for-each select="VOT:COOSYS"> + <tr> + <td class="header"> + Definition: Coordinates System + </td> + <td class="databody"> + ID + </td> + <td class="databody"> + equinox + </td> + <td class="databody"> + epoch + </td> + <td class="databody"> + system + </td> + </tr> + <tr> + <td class="databody"> + <p/> + </td> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@equinox"/> + </td> + <td class="databody"> + <xsl:value-of select="@epoch"/> + </td> + <td class="databody"> + <xsl:value-of select="@system"/> + </td> + </tr> + </xsl:for-each> + </xsl:for-each> + </table> + </xsl:if> + </xsl:template> + <!-- Common Module for "PARAM" elements --> + <xsl:template name="vot_PARAMETERS"> + <tr> + <th class="header"> + ID + </th> + <th class="header"> + name + </th> + <th class="header"> + value + </th> + <th class="header"> + datatype + </th> + <th class="header"> + unit + </th> + <th class="header"> + precision + </th> + <th class="header"> + width + </th> + <th class="header"> + ref + </th> + <th class="header"> + ucd + </th> + <th class="header"> + utype + </th> + <th class="header"> + arraysize + </th> + <th class="header"> + Description + </th> + <th class="header"> + Link + </th> + </tr> + <xsl:for-each select="VOT:PARAM"> + <tr> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@value"/> + </td> + <td class="databody"> + <xsl:value-of select="@datatype"/> + </td> + <td class="databody"> + <xsl:value-of select="@unit"/> + </td> + <td class="databody"> + <xsl:value-of select="@precision"/> + </td> + <td class="databody"> + <xsl:value-of select="@width"/> + </td> + <td class="databody"> + <xsl:value-of select="@ref"/> + </td> + <td class="databody"> + <xsl:value-of select="@ucd"/> + </td> + <td class="databody"> + <xsl:value-of select="@utype"/> + </td> + <td class="databody"> + <xsl:value-of select="@arraysize"/> + </td> + <td class="databody"> + <xsl:value-of select="VOT:DESCRIPTION"/> + </td> + <td class="databody"> + <xsl:for-each select="VOT:LINK"> + <xsl:variable name="flink"> + <xsl:value-of select="@href"/> + </xsl:variable> + <a href="{$flink}"> + <xsl:value-of select="$flink"/> + </a> + </xsl:for-each> + </td> + </tr> + </xsl:for-each> + </xsl:template> + <!-- Common Module for "INFO" elements --> + <xsl:template name="vot_INFORMATION"> + <tr> + <td class="header"> + ID + </td> + <td class="header"> + name + </td> + <td class="header"> + value + </td> + </tr> + <xsl:for-each select="VOT:INFO"> + <tr> + <td class="databody"> + <xsl:value-of select="@ID"/> + </td> + <td class="databody"> + <xsl:value-of select="@name"/> + </td> + <td class="databody"> + <xsl:value-of select="@value"/> + </td> + </tr> + </xsl:for-each> + </xsl:template> + <!-- Generate names for different sheets --> + <xsl:template name="vot_table_name"> + <xsl:choose> + <xsl:when test="@ID"> + <xsl:variable name="TAB_ID"> + <xsl:value-of select="concat('_',@ID)"/> + </xsl:variable> + <xsl:call-template name="vot_resource_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="@name"> + <xsl:variable name="TAB_ID"> + <xsl:value-of select="concat('_',@name)"/> + </xsl:variable> + <xsl:call-template name="vot_resource_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="TAB_ID"> + <xsl:value-of select="concat('_',name())"/> + </xsl:variable> + <xsl:call-template name="vot_resource_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="vot_resource_name"> + <xsl:param name="TAB_ID"/> + <xsl:choose> + <xsl:when test="../@ID"> + <xsl:variable name="RES_ID"> + <xsl:value-of select="concat('_',../@ID)"/> + </xsl:variable> + <xsl:call-template name="vot_final_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + <xsl:with-param name="RES_ID" select="$RES_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="../@name"> + <xsl:variable name="RES_ID"> + <xsl:value-of select="concat('_',../@name)"/> + </xsl:variable> + <xsl:call-template name="vot_final_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + <xsl:with-param name="RES_ID" select="$RES_ID"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="RES_ID"> + <xsl:value-of select="concat('_',name(..))"/> + </xsl:variable> + <xsl:call-template name="vot_final_name"> + <xsl:with-param name="TAB_ID" select="$TAB_ID"/> + <xsl:with-param name="RES_ID" select="$RES_ID"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="vot_final_name"> + <xsl:param name="RES_ID"/> + <xsl:param name="TAB_ID"/> + <xsl:choose> + <xsl:when test="/VOT:VOTABLE/@ID"> + <xsl:variable name="VOT_ID"> + <xsl:value-of select="/VOT:VOTABLE/@ID"/> + </xsl:variable> + <xsl:value-of select="concat($VOT_ID,$RES_ID,$TAB_ID)"/> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="VOT_ID"> + <xsl:value-of select="string('VOTABLE')"/> + </xsl:variable> + <xsl:value-of select="concat($VOT_ID,$RES_ID,$TAB_ID)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> +</xsl:stylesheet>