source: 1dwg/branches/v1.1/cansasxml-extended-html.xsl @ 283

Last change on this file since 283 was 283, checked in by prjemian, 7 years ago

refactor (and prepare to make this the only XSLT)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision URL
File size: 14.5 KB
Line 
1<?xml version="1.0"?>
2
3<!--
4########### SVN repository information ###################
5# $Date$
6# $Author$
7# $Revision$
8# $HeadURL$
9# $Id$
10########### SVN repository information ###################
11
12Purpose:
13        This stylesheet is used to translate cansas1d:1.1
14        XML data files into a display form for viewing
15        in a web browser such as Firefox or Internet Explorer
16        that supports client-side XSLT formatting.
17
18Usage:
19        xsltproc cansasxml-html.xsl datafile.xml > datafile.html
20        (or include it as indicated at the documentation site
21        http://www.cansas.org/wgwiki/index.php/cansas1d_documentation)
22-->
23
24<xsl:stylesheet version="1.1"
25        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
26        xmlns:cs="urn:cansas1d:1.1"
27        xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
28        >
29
30        <xsl:template match="/">
31<!-- DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" -->
32                <html>
33                        <head>
34                                <title>SAS data in canSAS 1-D format</title>
35                        </head>
36                        <body>
37                                <h1>SAS data in canSAS 1-D format</h1>
38                                <small>generated using <TT>cansasxml-extended-html.xsl</TT> from canSAS</small>
39                                <BR />
40                                <table border="2">
41                                        <tr>
42                                                <th bgcolor="lavender">canSAS 1-D XML version:</th>
43                                                <td><xsl:value-of select="cs:SASroot/@version" /></td>
44                                        </tr>
45                                        <tr>
46                                                <th bgcolor="lavender">number of entries:</th>
47                                                <td><xsl:value-of select="count(cs:SASroot/cs:SASentry)" /></td>
48                                        </tr>
49                                        <xsl:if test="count(/cs:SASroot//cs:SASentry)>1">
50                                                <!-- if more than one SASentry, make a table of contents -->
51                                                <xsl:for-each select="/cs:SASroot//cs:SASentry">
52                                                        <tr>
53                                                                <th bgcolor="lavender">SASentry-<xsl:value-of select="position()" /></th>
54                                                                <td>
55                                                                        <a href="#SASentry-{generate-id(.)}">
56                                                                                <xsl:if test="@name!=''">(<xsl:value-of select="@name" />)</xsl:if>
57                                                                                <xsl:value-of select="cs:Title" />
58                                                                        </a>
59                                                                </td>
60                                                                <xsl:if test="count(cs:SASdata)>1">
61                                                                        <td>
62                                                                                <!-- if more than one SASdata, make a local table of contents -->
63                                                                                <xsl:for-each select="cs:SASdata">
64                                                                                        <xsl:if test="position()>1">
65                                                                                                <xsl:text> | </xsl:text>
66                                                                                        </xsl:if>
67                                                                                        <a href="#SASdata-{generate-id(.)}">
68                                                                                                <xsl:choose>
69                                                                                                        <xsl:when test="cs:name!=''">
70                                                                                                                <xsl:value-of select="cs:name" />
71                                                                                                        </xsl:when>
72                                                                                                        <xsl:when test="@name!=''">
73                                                                                                                <xsl:value-of select="@name" />
74                                                                                                        </xsl:when>
75                                                                                                        <xsl:otherwise>
76                                                                                                                SASdata<xsl:value-of select="position()" />
77                                                                                                        </xsl:otherwise>
78                                                                                                </xsl:choose>
79                                                                                        </a>
80                                                                                </xsl:for-each>
81                                                                        </td>
82                                                                </xsl:if>
83                                                        </tr>
84                                                </xsl:for-each>
85                                        </xsl:if>
86                                </table>
87                                <xsl:apply-templates  />
88                                <hr />
89                                <small><center>$Id$</center></small>
90                        </body>
91                </html>
92        </xsl:template>
93
94        <xsl:template match="cs:SASroot">
95                <xsl:for-each select="cs:SASentry">
96                        <hr />
97                        <br />
98                        <a id="#SASentry-{generate-id(.)}"  name="SASentry-{generate-id(.)}" />
99                        <h1>SASentry<xsl:value-of select="position()" />:<xsl:if 
100                                test="@name!=''">(<xsl:value-of select="@name" />)</xsl:if>
101                                <xsl:value-of select="cs:Title" /></h1>
102                        <xsl:if test="count(cs:SASdata)>1">
103                                <table border="2">
104                                        <caption>SASdata contents</caption>
105                                        <xsl:for-each select="cs:SASdata">
106                                                <tr>
107                                                        <th>SASdata-<xsl:value-of select="position()" /></th>
108                                                        <td>
109                                                                <a href="#SASdata-{generate-id(.)}">
110                                                                        <xsl:choose>
111                                                                        <xsl:when test="@name!=''">
112                                                                                        <xsl:value-of select="@name" />
113                                                                                </xsl:when>
114                                                                                <xsl:otherwise>
115                                                                                        SASdata<xsl:value-of select="position()" />
116                                                                                </xsl:otherwise>
117                                                                        </xsl:choose>
118                                                                </a>
119                                                        </td>
120                                                </tr>
121                                        </xsl:for-each>
122                                </table>
123                        </xsl:if>
124                        <br />
125                        <table border="2">
126                                <tr>
127                                        <th>SAS data</th>
128                                        <xsl:for-each select="cs:SAStransmission_spectrum"><th>transmission spectrum: <xsl:value-of select="@name" /></th></xsl:for-each>
129                                        <th>Selected Metadata</th>
130                                </tr>
131                                <tr>
132                                        <td valign="top"><xsl:apply-templates  select="cs:SASdata" /></td>
133                                        <xsl:apply-templates  select="cs:SAStransmission_spectrum" />
134                                        <td valign="top">
135                                                <table border="2">
136                                                        <tr bgcolor="lavender">
137                                                                <th>name</th>
138                                                                <th>value</th>
139                                                                <th>unit</th>
140                                                        </tr>
141                                                        <tr>
142                                                                <td>Title</td>
143                                                                <td><xsl:value-of select="cs:Title" /></td>
144                                                                <td />
145                                                        </tr>
146                                                        <tr>
147                                                                <td>Run</td>
148                                                                <td><xsl:value-of select="cs:Run" /></td>
149                                                                <td />
150                                                        </tr>
151                                                        <tr><xsl:apply-templates  select="run" /></tr>
152                                                        <xsl:apply-templates  select="cs:SASsample" />
153                                                        <xsl:apply-templates  select="cs:SASinstrument" />
154                                                        <xsl:apply-templates  select="cs:SASprocess" />
155                                                        <xsl:apply-templates  select="cs:SASnote" />
156                                                </table>
157                                        </td>
158                                </tr>
159                        </table>
160                </xsl:for-each>
161        </xsl:template>
162
163        <xsl:template match="cs:SAStransmission_spectrum">
164                <td valign="top">
165                    <table border="2">
166                        <caption><xsl:if 
167                                test="@name!=''"><xsl:value-of select="@name" /></xsl:if> (<xsl:value-of 
168                                select="count(cs:Tdata)" /> points)
169                                <a id="#Tdata-{generate-id(.)}"  name="Tdata-{generate-id(.)}" />
170                        </caption>
171                        <tr bgcolor="lavender">
172                                <xsl:for-each select="cs:Tdata[1]/*">
173                                        <th>
174                                                <xsl:value-of select="name()" /> 
175                                                <xsl:if test="@unit!=''"> (<xsl:value-of select="@unit" />)</xsl:if>
176                                        </th>
177                                </xsl:for-each>
178                        </tr>
179                        <xsl:for-each select="cs:Tdata">
180                                        <tr>
181                                                <xsl:for-each select="*">
182                                                        <xsl:call-template name="td-value"/>
183                                                </xsl:for-each>
184                                        </tr>
185                                </xsl:for-each>
186                        </table>
187                </td>
188        </xsl:template>
189
190        <xsl:template match="cs:SASdata">
191                <a id="#SASdata-{generate-id(.)}"  name="SASdata-{generate-id(.)}" />
192                <table border="2">
193                        <caption><xsl:if 
194                                test="@name!=''"><xsl:value-of select="@name" /></xsl:if> (<xsl:value-of 
195                                select="count(cs:Idata)" /> points)</caption>
196                        <tr bgcolor="lavender">
197                                <xsl:for-each select="cs:Idata[1]/*">
198                                        <th>
199                                                <xsl:value-of select="name()" /> 
200                                                <xsl:if test="@unit!=''"> (<xsl:value-of select="@unit" />)</xsl:if>
201                                        </th>
202                                </xsl:for-each>
203                        </tr>
204                        <xsl:for-each select="cs:Idata">
205                                <tr>
206                                        <xsl:for-each select="*">
207                                                <xsl:call-template name="td-value"/>
208                                        </xsl:for-each>
209                                </tr>
210                        </xsl:for-each>
211                </table>
212        </xsl:template>
213
214        <xsl:template match="cs:SASsample">
215                <tr>
216                        <td>SASsample</td>
217                        <td><xsl:value-of select="@name" /></td>
218                        <td />
219                </tr>
220                <xsl:for-each select="*">
221                        <xsl:choose>
222                                <xsl:when test="name()='position'">
223                                        <xsl:apply-templates select="." />
224                                </xsl:when>
225                                <xsl:when test="name()='orientation'">
226                                        <xsl:apply-templates select="." />
227                                </xsl:when>
228                                <xsl:otherwise>
229                                        <xsl:call-template name="tr-parent-value-units"/>
230                                </xsl:otherwise>
231                        </xsl:choose>
232                </xsl:for-each>
233        </xsl:template>
234
235        <xsl:template match="cs:SASinstrument">
236                <tr>
237                        <td>SASinstrument</td>
238                        <td><xsl:value-of select="cs:name" /></td>
239                        <td><xsl:value-of select="@name" /></td>
240                </tr>
241                <xsl:for-each select="*">
242                        <xsl:choose>
243                                <xsl:when test="name()='SASsource'"><xsl:apply-templates select="." /></xsl:when>
244                                <xsl:when test="name()='SAScollimation'"><xsl:apply-templates select="." /></xsl:when>
245                                <xsl:when test="name()='SASdetector'"><xsl:apply-templates select="." /></xsl:when>
246                                <xsl:when test="name()='name'" />
247                                <xsl:otherwise>
248                                        <xsl:call-template name="tr-parent-value-units"/>
249                                </xsl:otherwise>
250                        </xsl:choose>
251                </xsl:for-each>
252        </xsl:template>
253
254        <xsl:template match="cs:SASsource">
255                <tr>
256                        <td><xsl:value-of select="name()" /></td>
257                        <td><xsl:value-of select="@name" /></td>
258                        <td />
259                </tr>
260                <xsl:for-each select="*">
261                        <xsl:choose>
262                                <xsl:when test="name()='beam_size'"><xsl:apply-templates select="." /></xsl:when>
263                                <xsl:otherwise>
264                                        <xsl:call-template name="tr-parent-value-units"/>
265                                </xsl:otherwise>
266                        </xsl:choose>
267                </xsl:for-each>
268        </xsl:template>
269
270        <xsl:template match="cs:beam_size">
271                <xsl:call-template name="tr-parent-name"/>
272                <xsl:for-each select="*">
273                        <xsl:call-template name="tr-grandparent-value-units"/>
274                </xsl:for-each>
275        </xsl:template>
276
277        <xsl:template match="cs:SAScollimation">
278                <xsl:for-each select="*">
279                        <xsl:choose>
280                                <xsl:when test="name()='aperture'"><xsl:apply-templates select="." /></xsl:when>
281                                <xsl:otherwise>
282                                        <xsl:call-template name="tr-parent-value-units"/>
283                                </xsl:otherwise>
284                        </xsl:choose>
285                </xsl:for-each>
286        </xsl:template>
287
288        <xsl:template match="cs:aperture">
289                <tr>
290                        <td><xsl:value-of select="name(..)" />_<xsl:value-of select="name()" /></td>
291                        <td><xsl:value-of select="@name" /></td>
292                        <td><xsl:value-of select="@type" /></td>
293                </tr>
294                <xsl:for-each select="*">
295                        <xsl:choose>
296                                <xsl:when test="name()='size'"><xsl:apply-templates select="." /></xsl:when>
297                                <xsl:otherwise>
298                                        <xsl:call-template name="tr-grandparent-value-units"/>
299                                </xsl:otherwise>
300                        </xsl:choose>
301                </xsl:for-each>
302        </xsl:template>
303
304        <xsl:template match="cs:size">
305                <tr>
306                        <xsl:call-template name="td-grandparent"/>
307                        <td><xsl:value-of select="@name" /></td>
308                        <td />
309                </tr>
310                <xsl:for-each select="*">
311                        <tr>
312                                <xsl:call-template name="td-greatgrandparent"/>
313                                <xsl:call-template name="td-value"/>
314                                <xsl:call-template name="td-unit"/>
315                        </tr>
316                </xsl:for-each>
317        </xsl:template>
318
319        <xsl:template match="cs:SASdetector">
320                <tr>
321                        <td><xsl:value-of select="name()" /></td>
322                        <td><xsl:value-of select="cs:name" /></td>
323                        <td><xsl:value-of select="@name" /></td>
324                </tr>
325                <xsl:for-each select="*">
326                        <xsl:choose>
327                                <xsl:when test="name()='name'" />
328                                <xsl:when test="name()='offset'"><xsl:apply-templates select="." /></xsl:when>
329                                <xsl:when test="name()='orientation'"><xsl:apply-templates select="." /></xsl:when>
330                                <xsl:when test="name()='beam_center'"><xsl:apply-templates select="." /></xsl:when>
331                                <xsl:when test="name()='pixel_size'"><xsl:apply-templates select="." /></xsl:when>
332                                <xsl:otherwise>
333                                        <xsl:call-template name="tr-parent-value-units"/>
334                                </xsl:otherwise>
335                        </xsl:choose>
336                </xsl:for-each>
337        </xsl:template>
338
339        <xsl:template match="cs:orientation">
340                <xsl:call-template name="tr-parent-name"/>
341                <xsl:for-each select="*">
342                        <xsl:call-template name="tr-grandparent-value-units"/>
343                </xsl:for-each>
344        </xsl:template>
345
346        <xsl:template match="cs:position">
347                <xsl:call-template name="tr-parent-name"/>
348                <xsl:for-each select="*">
349                        <xsl:call-template name="tr-grandparent-value-units"/>
350                </xsl:for-each>
351        </xsl:template>
352
353        <xsl:template match="cs:offset">
354                <xsl:call-template name="tr-parent-name"/>
355                <xsl:for-each select="*">
356                        <xsl:call-template name="tr-grandparent-value-units"/>
357                </xsl:for-each>
358        </xsl:template>
359
360        <xsl:template match="cs:beam_center">
361                <xsl:call-template name="tr-parent-name"/>
362                <xsl:for-each select="*">
363                        <xsl:call-template name="tr-grandparent-value-units"/>
364                </xsl:for-each>
365        </xsl:template>
366
367        <xsl:template match="cs:pixel_size">
368                <xsl:call-template name="tr-parent-name"/>
369                <xsl:for-each select="*">
370                        <xsl:call-template name="tr-grandparent-value-units"/>
371                </xsl:for-each>
372        </xsl:template>
373
374        <xsl:template match="cs:term">
375                <tr>
376                        <td><xsl:value-of select="@name" /></td>
377                        <xsl:call-template name="td-value"/>
378                        <xsl:call-template name="td-unit"/>
379                </tr>
380        </xsl:template>
381
382        <xsl:template match="cs:SASprocessnote" mode="standard">
383                <tr>
384                        <td><xsl:value-of select="name()" /></td>
385                        <xsl:call-template name="td-value"/>
386                        <td><xsl:value-of select="@name" /></td>
387                </tr>
388        </xsl:template>
389       
390        <xsl:template match="cs:SASprocessnote" mode="Indra">
391                <!--
392                        Customization for APS USAXS metadata
393                        These will be IgorPro wavenote variables
394                -->
395                <xsl:for-each select="cs:APS_USAXS">
396                        <!-- ignore any other elements at this point -->
397                        <tr>
398                                <td bgcolor="lightgrey"><xsl:value-of select="name(..)" /></td>
399                                <td bgcolor="lightgrey"><xsl:value-of select="name()" /></td>
400                                <td bgcolor="lightgrey"><xsl:value-of select="@name" /></td>
401                        </tr>
402                        <xsl:for-each select="*">
403                                <tr>
404                                        <td><xsl:value-of select="name()" /></td>
405                                        <xsl:call-template name="td-value"/>
406                                        <td><xsl:value-of select="@name" /></td>
407                                </tr>
408                        </xsl:for-each>
409                </xsl:for-each>
410        </xsl:template>
411       
412        <xsl:template match="cs:SASprocess">
413                <tr>
414                        <td><xsl:value-of select="name()" /></td>
415                        <td><xsl:value-of select="cs:name" /></td>
416                        <td><xsl:value-of select="@name" /></td>
417                </tr>
418                <xsl:for-each select="*">
419                        <xsl:choose>
420                                <xsl:when test="name()='name'" />
421                                <xsl:when test="name()='term'"><xsl:apply-templates select="." /></xsl:when>
422                                <xsl:when test="name()='SASprocessnote'">
423                                        <xsl:choose>
424                                                <xsl:when test="../@name='Indra'"><xsl:apply-templates select="." mode="Indra"/></xsl:when>
425                                                <xsl:otherwise><xsl:apply-templates select="." mode="standard"/></xsl:otherwise>
426                                        </xsl:choose>
427                                </xsl:when>
428                                <xsl:otherwise>
429                                        <tr>
430                                                <xsl:call-template name="td-grandparent"/>
431                                                <xsl:call-template name="td-value"/>
432                                                <td />
433                                        </tr>
434                                </xsl:otherwise>
435                        </xsl:choose>
436                </xsl:for-each>
437        </xsl:template>
438
439        <xsl:template match="cs:SASnote">
440                <xsl:if test="@name!=''">
441                        <tr>
442                                <td><xsl:value-of select="name()" /></td>
443                                <xsl:call-template name="td-value"/>
444                                <td><xsl:value-of select="@name" /></td>
445                        </tr>
446                </xsl:if>
447        </xsl:template>
448       
449        <!-- =============== convenience routines =============== -->
450       
451        <xsl:template name="tr-parent-value-units">
452                <tr>
453                        <xsl:call-template name="td-parent"/>
454                        <xsl:call-template name="td-value"/>
455                        <xsl:call-template name="td-unit"/>
456                </tr>
457        </xsl:template>
458       
459        <xsl:template name="tr-grandparent-value-units">
460                <tr>
461                        <xsl:call-template name="td-grandparent"/>
462                        <xsl:call-template name="td-value"/>
463                        <xsl:call-template name="td-unit"/>
464                </tr>
465        </xsl:template>
466       
467        <xsl:template name="tr-parent-name">
468                <tr>
469                        <xsl:call-template name="td-parent"/>
470                        <td><xsl:value-of select="@name" /></td>
471                        <td />
472                </tr>
473        </xsl:template>
474       
475        <xsl:template name="td-value">
476                <td><xsl:value-of select="." /></td>
477        </xsl:template>
478       
479        <xsl:template name="td-parent">
480                <td><xsl:value-of select="name(..)" 
481                        />_<xsl:value-of select="name()" 
482                        /></td>
483        </xsl:template>
484       
485        <xsl:template name="td-grandparent">
486                <td><xsl:value-of select="name(../..)" 
487                        />_<xsl:value-of select="name(..)" 
488                        />_<xsl:value-of select="name()" 
489                        /></td>
490        </xsl:template>
491       
492        <xsl:template name="td-greatgrandparent">
493                <td><xsl:value-of select="name(../../..)" 
494                        />_<xsl:value-of select="name(../..)" 
495                        />_<xsl:value-of select="name(..)" 
496                        />_<xsl:value-of select="name()" 
497                        /></td>
498        </xsl:template>
499       
500        <xsl:template name="td-unit">
501                <td><xsl:value-of select="@unit" /></td>
502        </xsl:template>
503
504</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.