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-26 18:29:36 -0700 (Thu, 26 Jun 2003) $'
11
  * '$Revision: 1696 $'
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 class="{$physicalfirstColStyle}" width="{$secondColWidth}">
204
        &#160;</td>
205
      </tr>
206
      <xsl:apply-templates>
207
        <xsl:with-param name="physicalfirstColStyle" select="$physicalfirstColStyle"/>
208
      </xsl:apply-templates>
209
     
210
   </xsl:for-each>
211
  
212
  </xsl:template>
213
  
214

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

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

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

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

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

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

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