Project

General

Profile

1
<?xml version="1.0"?>
2
<!--
3
  *  '$RCSfile$'
4
  *      Authors: Matthew Brooke
5
  *    Copyright: 2000 Regents of the University of California and the
6
  *               National Center for Ecological Analysis and Synthesis
7
  *  For Details: http://www.nceas.ucsb.edu/
8
  *
9
  *   '$Author: tao $'
10
  *     '$Date: 2003-06-30 15:12:58 -0700 (Mon, 30 Jun 2003) $'
11
  * '$Revision: 1706 $'
12
  *
13
  * This program is free software; you can redistribute it and/or modify
14
  * it under the terms of the GNU General Public License as published by
15
  * the Free Software Foundation; either version 2 of the License, or
16
  * (at your option) any later version.
17
  *
18
  * This program is distributed in the hope that it will be useful,
19
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21
  * GNU General Public License for more details.
22
  *
23
  * You should have received a copy of the GNU General Public License
24
  * along with this program; if not, write to the Free Software
25
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26
  *
27
  * This is an XSLT (http://www.w3.org/TR/xslt) stylesheet designed to
28
  * convert an XML file that is valid with respect to the eml-variable.dtd
29
  * module of the Ecological Metadata Language (EML) into an HTML format
30
  * suitable for rendering with modern web browsers.
31
-->
32
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
33

    
34
  <xsl:output method="html" encoding="iso-8859-1"/>
35

    
36
   <xsl:template name="physical">
37
      <xsl:param name="docid"/>
38
      <xsl:param name="level">entity</xsl:param>
39
      <xsl:param name="entitytype"/>
40
      <xsl:param name="entityindex"/>
41
      <xsl:param name="physicalindex"/>
42
      <xsl:param name="distributionindex"/>
43
      <xsl:param name="physicalfirstColStyle"/>
44
      <xsl:param name="notshowdistribution"/>
45
      <table xsl:use-attribute-sets="cellspacing" class="tabledefault" width="100%">
46
        <xsl:choose>
47
         <xsl:when test="references!=''">
48
          <xsl:variable name="ref_id" select="references"/>
49
          <xsl:variable name="references" select="$ids[@id=$ref_id]" />
50
          <xsl:for-each select="$references">
51
            <xsl:call-template name="physicalcommon">
52
              <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
53
              <xsl:with-param name="notshowdistribution" select="$notshowdistribution"/>
54
            </xsl:call-template>
55
          </xsl:for-each>
56
        </xsl:when>
57
        <xsl:otherwise>
58
          <xsl:call-template name="physicalcommon">
59
             <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
60
             <xsl:with-param name="notshowdistribution" select="$notshowdistribution"/>
61
          </xsl:call-template>
62
        </xsl:otherwise>
63
      </xsl:choose>
64
      </table>
65
  </xsl:template>
66
  
67
  <xsl:template name="physicalcommon">
68
    <xsl:param name="physicalfirstColStyle"/>
69
    <xsl:param name="notshowdistribution"/>
70
    <xsl:param name="docid"/>
71
    <xsl:param name="level">entity</xsl:param>
72
    <xsl:param name="entitytype"/>
73
    <xsl:param name="entityindex"/>
74
    <xsl:param name="physicalindex"/>
75
    <xsl:param name="distributionindex"/>
76
    
77
    <xsl:call-template name="physicalobjectName">
78
      <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
79
    </xsl:call-template>
80
    <xsl:call-template name="physicalsize">
81
      <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
82
    </xsl:call-template>
83
    <xsl:call-template name="physicalauthentication">
84
      <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
85
    </xsl:call-template>
86
    <xsl:call-template name="physicalcompressionMethod">
87
      <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
88
    </xsl:call-template>
89
    <xsl:call-template name="physicalencodingMethod">
90
      <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
91
    </xsl:call-template>
92
    <xsl:call-template name="physicalcharacterEncoding">
93
      <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
94
    </xsl:call-template>
95
    <xsl:call-template name="physicaltextFormat">
96
      <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
97
    </xsl:call-template>
98
    <xsl:call-template name="physicalexternallyDefinedFormat">
99
      <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
100
    </xsl:call-template>
101
    <xsl:call-template name="physicalbinaryRasterFormat">
102
      <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
103
    </xsl:call-template>
104
    <xsl:if test="$notshowdistribution=''">
105
      <xsl:for-each select="distribution">
106
        <xsl:call-template name="distribution">
107
          <xsl:with-param name="disfirstColStyle" select="$physicalfirstColStyle"/>
108
          <xsl:with-param name="dissubHeaderStyle" select="$subHeaderStyle"/>
109
          <xsl:with-param name="docid" select="$docid"/>
110
          <xsl:with-param name="level">entitylevel</xsl:with-param>
111
          <xsl:with-param name="entitytype" select="$entitytype"/>
112
          <xsl:with-param name="entityindex" select="$entityindex"/>
113
          <xsl:with-param name="physicalindex" select="$physicalindex"/>
114
          <xsl:with-param name="distributionindex" select="position()"/>
115
        </xsl:call-template>
116
      </xsl:for-each>
117
    </xsl:if>
118
   
119
  </xsl:template>
120
  
121
  <xsl:template name="physicalobjectName">
122
    <xsl:param name="physicalfirstColStyle"/>
123
    <xsl:for-each select="objectName">
124
      <tr>
125
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">
126
        Object Name:</td>
127
        <td class="{$secondColStyle}" width="{$secondColWidth}">
128
        <xsl:value-of select="."/></td>
129
      </tr>
130
    </xsl:for-each>
131
  </xsl:template>
132
  
133
  <xsl:template name="physicalsize">
134
    <xsl:param name="physicalfirstColStyle"/>
135
    <xsl:for-each select="size">
136
      <tr>
137
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">
138
        Size:</td>
139
        <td class="{$secondColStyle}" width="{$secondColWidth}">
140
        <xsl:value-of select="."/></td>
141
      </tr>
142
    </xsl:for-each>
143
  </xsl:template>
144
  
145
  <xsl:template name="physicalauthentication">
146
    <xsl:param name="physicalfirstColStyle"/>
147
    <xsl:for-each select="authentication">
148
      <tr>
149
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">
150
        Authentication:</td>
151
        <td class="{$secondColStyle}" width="{$secondColWidth}">
152
        <xsl:value-of select="."/></td>
153
      </tr>
154
    </xsl:for-each>
155
  </xsl:template>
156
  
157
  <xsl:template name="physicalcompressionMethod">
158
    <xsl:param name="physicalfirstColStyle"/>
159
    <xsl:for-each select="compressionMethod">
160
      <tr>
161
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">
162
        Compression Method:</td>
163
        <td class="{$secondColStyle}" width="{$secondColWidth}">
164
        <xsl:value-of select="."/></td>
165
      </tr>
166
    </xsl:for-each>
167
  </xsl:template>
168
  
169
  <xsl:template name="physicalencodingMethod">
170
    <xsl:param name="physicalfirstColStyle"/>
171
    <xsl:for-each select="encodingMethod">
172
      <tr>
173
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">
174
        Encoding Method:</td>
175
        <td class="{$secondColStyle}" width="{$secondColWidth}">
176
        <xsl:value-of select="."/></td>
177
      </tr>
178
    </xsl:for-each>
179
  </xsl:template>
180
  
181
  <xsl:template name="physicalcharacterEncoding">
182
    <xsl:param name="physicalfirstColStyle"/>
183
    <xsl:for-each select="characterEncoding">
184
      <tr>
185
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">
186
        Character Encoding:</td>
187
        <td class="{$secondColStyle}" width="{$secondColWidth}">
188
        <xsl:value-of select="."/></td>
189
      </tr>
190
    </xsl:for-each>
191
  </xsl:template>
192
  
193
  <!--***********************************************************
194
      TextFormat templates
195
      ***********************************************************-->
196
  
197
  <xsl:template name="physicaltextFormat">
198
   <xsl:param name="physicalfirstColStyle"/>
199
   <xsl:for-each select="dataFormat/textFormat">
200
      <tr>
201
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">
202
        Text Format:</td>
203
        <td width="{$secondColWidth}">
204
          <table xsl:use-attribute-sets="cellspacing" class="tabledefault">
205
            <xsl:apply-templates>
206
              <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
207
            </xsl:apply-templates>
208
          </table>
209
        </td>
210
      </tr>
211
      
212
   </xsl:for-each>
213
  
214
  </xsl:template>
215
  
216

    
217
  <xsl:template match="numHeaderLines">
218
        <xsl:param name="physicalfirstColStyle"/>
219
        <tr>
220
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Number of Header Lines:</td>
221
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
222
        </tr>
223
  </xsl:template>
224

    
225
  <xsl:template match="numFooterLines">
226
        <xsl:param name="physicalfirstColStyle"/>
227
        <tr>
228
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Number of Foot Lines:</td>
229
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
230
        </tr>
231
  </xsl:template>
232
  
233
  <xsl:template match="recordDelimiter">
234
        <xsl:param name="physicalfirstColStyle"/>
235
        <tr>
236
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Record Delimiter:</td>
237
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
238
        </tr>
239
  </xsl:template>
240
  
241
  <xsl:template match="physicalLineDelimiter">
242
        <xsl:param name="physicalfirstColStyle"/>
243
        <tr>
244
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Line Delimiter:</td>
245
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
246
        </tr>
247
  </xsl:template>
248
  
249
  <xsl:template match="numPhysicalLinePerRecord">
250
        <xsl:param name="physicalfirstColStyle"/>
251
        <tr>
252
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Line Number For One Record:</td>
253
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
254
        </tr>
255
  </xsl:template>
256
  
257
  <xsl:template match="maxRecordLength">
258
        <xsl:param name="physicalfirstColStyle"/>
259
        <tr>
260
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Maximum Record Length:</td>
261
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
262
        </tr>
263
  </xsl:template>
264
  
265
  <xsl:template match="attributeOrientation">
266
        <xsl:param name="physicalfirstColStyle"/>
267
        <tr>
268
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Maximum Record Length:</td>
269
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
270
        </tr>
271
  </xsl:template>
272
  
273
  <xsl:template match="simpleDelimited">
274
        <xsl:param name="physicalfirstColStyle"/>
275
        <tr>
276
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Simple Delimited:</td>
277
        <td  width="{$secondColWidth}">
278
          <table xsl:use-attribute-sets="cellspacing" class="tabledefault" width="100%">
279
            <xsl:apply-templates>
280
              <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
281
            </xsl:apply-templates>
282
          </table>
283
        </td>
284
        </tr>
285
  </xsl:template>
286
  
287
  <xsl:template match="complex">
288
        <xsl:param name="physicalfirstColStyle"/>
289
        <tr>
290
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Complex Delimited:</td>
291
        <td  width="{$secondColWidth}">
292
           <table xsl:use-attribute-sets="cellspacing" class="tabledefault" width="100%">
293
             <xsl:call-template name="textFixed">
294
                <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
295
             </xsl:call-template>
296
             <xsl:call-template name="textDelimited">
297
               <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
298
             </xsl:call-template>
299
           </table>
300
         </td>
301
        </tr>
302
  </xsl:template>
303
  
304
  
305
  <xsl:template name="textFixed">
306
        <xsl:param name="physicalfirstColStyle"/>
307
        <tr>
308
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Text Fixed:</td>
309
        <td  width="{$secondColWidth}">
310
          <table xsl:use-attribute-sets="cellspacing" class="tabledefault" width="100%">
311
            <xsl:apply-templates>
312
              <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
313
            </xsl:apply-templates>
314
          </table>
315
        </td>
316
        </tr>
317
  </xsl:template>
318
  
319
  <xsl:template name="textDelimited">
320
        <xsl:param name="physicalfirstColStyle"/>
321
        <tr>
322
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Text Delimited:</td>
323
        <td  width="{$secondColWidth}">
324
          <table xsl:use-attribute-sets="cellspacing" class="tabledefault" width="100%">
325
            <xsl:apply-templates>
326
              <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
327
            </xsl:apply-templates>
328
          </table>
329
        </td>
330
        </tr>
331
  </xsl:template>
332

    
333
  <xsl:template match="quoteCharacter">
334
        <xsl:param name="physicalfirstColStyle"/>
335
        <tr>
336
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">Quote Character:</td>
337
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
338
        </tr>
339
  </xsl:template>
340

    
341
   <xsl:template match="literalCharacter">
342
       <xsl:param name="physicalfirstColStyle"/>
343
       <tr>
344
        <td class="{$firstColStyle}" width="{$firstColWidth}">Literal Character:</td>
345
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
346
        </tr>
347
  </xsl:template>
348

    
349
  
350
  <xsl:template match="fieldDelimiter">
351
        <xsl:param name="physicalfirstColStyle"/>
352
        <tr>
353
        <td class="{$firstColStyle}" width="{$firstColWidth}">Field Delimeter:</td>
354
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
355
        </tr>
356
  </xsl:template>
357

    
358
  <xsl:template match="fieldWidth">
359
        <xsl:param name="physicalfirstColStyle"/>
360
        <tr><td class="{$firstColStyle}" width="{$firstColWidth}">Field Width:</td>
361
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
362
        </tr>
363
  </xsl:template>
364
  
365
  <xsl:template match="lineNumber">
366
        <xsl:param name="physicalfirstColStyle"/>
367
        <tr><td class="{$firstColStyle}" width="{$firstColWidth}">Line Number:</td>
368
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
369
        </tr>
370
  </xsl:template>
371

    
372
  <xsl:template match="fieldStartColumn">
373
        <xsl:param name="physicalfirstColStyle"/>
374
        <tr>
375
        <td class="{$firstColStyle}" width="{$firstColWidth}">Field Start Column:</td>
376
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
377
        </tr>
378
  </xsl:template>
379
  
380
  
381
  <!--***********************************************************
382
      externallyDefinedFormat templates
383
      ***********************************************************-->
384
 <xsl:template name="physicalexternallyDefinedFormat">
385
    <xsl:param name="physicalfirstColStyle"/>
386
    <xsl:for-each select="dataFormat/externallyDefinedFormat">
387
      <tr>
388
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">
389
        Externally Defined Format:</td>
390
        <td width="{$secondColWidth}">
391
          <table xsl:use-attribute-sets="cellspacing" class="tabledefault">
392
            <xsl:apply-templates>
393
              <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
394
            </xsl:apply-templates>
395
          </table>
396
        </td>
397
      </tr>
398
    </xsl:for-each>
399
  </xsl:template>
400
  
401
  <xsl:template match="formatName">
402
        <xsl:param name="physicalfirstColStyle"/>
403
        <tr>
404
        <td class="{$firstColStyle}" width="{$firstColWidth}">Format Name:</td>
405
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
406
        </tr>
407
  </xsl:template>
408
  
409
  <xsl:template match="formatVersion">
410
        <xsl:param name="physicalfirstColStyle"/>
411
        <tr>
412
        <td class="{$firstColStyle}" width="{$firstColWidth}">Format Version:</td>
413
        <td class="{$secondColStyle}" width="{$secondColWidth}"><xsl:value-of select="."/></td>
414
        </tr>
415
  </xsl:template>
416
  
417
  <xsl:template match="citation">
418
        <xsl:param name="physicalfirstColStyle"/>
419
        <tr>
420
        <td class="{$firstColStyle}" width="{$firstColWidth}">Citation:</td>
421
        <td class="{$secondColStyle}">
422
          <xsl:call-template name="citation">
423
            <xsl:with-param name="citationfirstColStyle" select="physicalfirstColStyle"/>
424
          </xsl:call-template>
425
        </td>
426
        </tr>
427
  </xsl:template>
428
  
429
  <!--***********************************************************
430
      binaryRasterFormat templates
431
      ***********************************************************-->
432
  <xsl:template name="physicalbinaryRasterFormat">
433
    <xsl:param name="physicalfirstColStyle"/>
434
    <xsl:for-each select="dataFormat/binaryRasterFormat">
435
      <tr>
436
        <td class="{$physicalfirstColStyle}" width="{$firstColWidth}">
437
        Binary Raster Format:</td>
438
        <td width="{$secondColWidth}">
439
           <table xsl:use-attribute-sets="cellspacing" class="tabledefault">
440
             <xsl:apply-templates>
441
               <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
442
             </xsl:apply-templates>
443
           </table>
444
        </td>
445
      </tr>
446
      
447
   </xsl:for-each>
448
  </xsl:template>
449
  
450
  <xsl:template match="rowColumnOrientation">
451
        <xsl:param name="physicalfirstColStyle"/>
452
        <tr>
453
        <td class="{$firstColStyle}" width="{$firstColWidth}">Orientation:</td>
454
        <td class="{$secondColStyle}" width="{$secondColWidth}">
455
          <xsl:value-of select="."/>
456
        </td>
457
        </tr>
458
  </xsl:template>
459
  
460
  <xsl:template match="multiBand">
461
        <xsl:param name="physicalfirstColStyle"/>
462
        <tr>
463
        <td class="{$firstColStyle}" width="{$firstColWidth}">Multiple Bands:</td>
464
        <td class="{$secondColStyle}">
465
         <table xsl:use-attribute-sets="cellspacing" class="tabledefault" width="100%">
466
            <tr>
467
                <td class="{$firstColStyle}" width="{$firstColWidth}">Number of Spectral Bands:</td>
468
                <td class="{$secondColStyle}" width="{$secondColWidth}">
469
                <xsl:value-of select="./nbands"/>
470
              </td>
471
            </tr>
472
            <tr>
473
               <td class="{$firstColStyle}" width="{$firstColWidth}">Layout:</td>
474
               <td class="{$secondColStyle}" width="{$secondColWidth}">
475
               <xsl:value-of select="./layout"/>
476
               </td>
477
           </tr>
478
        </table>
479
        </td>
480
        </tr>
481
  </xsl:template>
482
  
483
  
484
  <xsl:template match="nbits">
485
        <xsl:param name="physicalfirstColStyle"/>
486
        <tr>
487
        <td class="{$firstColStyle}" width="{$firstColWidth}">Number of Bits (/pixel/band):</td>
488
        <td class="{$secondColStyle}" width="{$secondColWidth}">
489
          <xsl:value-of select="."/>
490
        </td>
491
        </tr>
492
  </xsl:template>
493
  
494
  <xsl:template match="byteorder">
495
        <xsl:param name="physicalfirstColStyle"/>
496
        <tr>
497
        <td class="{$firstColStyle}" width="{$firstColWidth}">Byte Order:</td>
498
        <td class="{$secondColStyle}" width="{$secondColWidth}">
499
          <xsl:value-of select="."/>
500
        </td>
501
        </tr>
502
  </xsl:template>
503
  
504
  <xsl:template match="skipbytes">
505
        <xsl:param name="physicalfirstColStyle"/>
506
        <tr>
507
        <td class="{$firstColStyle}" width="{$firstColWidth}">Skipped Bytes:</td>
508
        <td class="{$secondColStyle}" width="{$secondColWidth}">
509
          <xsl:value-of select="."/>
510
        </td>
511
        </tr>
512
  </xsl:template>
513
  
514
  <xsl:template match="bandrowbytes">
515
        <xsl:param name="physicalfirstColStyle"/>
516
        <tr>
517
        <td class="{$firstColStyle}" width="{$firstColWidth}">Number of Bytes (/band/row):</td>
518
        <td class="{$secondColStyle}" width="{$secondColWidth}">
519
          <xsl:value-of select="."/>
520
        </td>
521
        </tr>
522
  </xsl:template>
523
  
524
  <xsl:template match="totalrowbytes">
525
        <xsl:param name="physicalfirstColStyle"/>
526
        <tr>
527
        <td class="{$firstColStyle}" width="{$firstColWidth}">Total Number of Byte (/row):</td>
528
        <td class="{$secondColStyle}" width="{$secondColWidth}">
529
          <xsl:value-of select="."/>
530
        </td>
531
        </tr>
532
  </xsl:template>
533
  
534
  <xsl:template match="bandgapbytes">
535
        <xsl:param name="physicalfirstColStyle"/>
536
        <tr>
537
        <td class="{$firstColStyle}" width="{$firstColWidth}">Number of Bytes between Bands:</td>
538
        <td class="{$secondColStyle}" width="{$secondColWidth}">
539
          <xsl:value-of select="."/>
540
        </td>
541
        </tr>
542
  </xsl:template>
543
  
544
</xsl:stylesheet>
(19-19/30)