source: DCWoRMS/trunk/src/test/DEBBTranslator/xml/DEBBComponentTranslator.xsl @ 929

Revision 929, 19.2 KB checked in by gosiaw, 12 years ago (diff)

Translation of Slot elements added.

Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<xsl:stylesheet version="1.0"
3        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:plm="http://www.plmxml.org/Schemas/PLMXMLSchema"
4        xmlns:cim="http://www.coolemall.eu/DEBBComponent" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
5        <!-- Specification of the output document -->
6        <xsl:output method="xml" version="1.0" encoding="UTF-8"
7                indent="yes" />
8
9        <!-- Information for mapping of DEBB classes into DCWoRMS computingResource
10                classes -->
11        <xsl:param name="computingResourceClasses" select="computingResourceClasses" />
12
13        <!-- Information for mapping of resource classes into DCWoRMS resourceUnits
14                classes -->
15        <xsl:param name="resourceUnitClasses" select="resourceUnitClasses" />
16
17        <xsl:template match="/">
18                <xsl:element name="environment">
19                        <xsl:attribute name="xsi:noNamespaceSchemaLocation">DCWormsResSchema.xsd</xsl:attribute>
20                        <xsl:element name="resources">
21                                <xsl:element name="scheduler"></xsl:element>
22                                <xsl:apply-templates select="//*[ComponentId]"
23                                        mode="full" />
24                        </xsl:element>
25                </xsl:element>
26        </xsl:template>
27
28        <!-- TODO: Move most of "code" to basic template -->
29        <xsl:template match="//*[ComponentId]" mode="full">
30                <xsl:element name="computingResource">
31                        <xsl:attribute name="class"> 
32                                <xsl:value-of select="name(.)" /> 
33                        </xsl:attribute>
34                        <xsl:attribute name="name">
35                                <xsl:variable name="oldComponentId"><xsl:value-of select="ComponentId" /></xsl:variable>
36                                <xsl:variable name="newComponentId">
37                                <xsl:value-of select="translate($oldComponentId, '/', '_')" />
38                                </xsl:variable>
39                                <xsl:value-of select="$newComponentId" />
40                        </xsl:attribute>
41                        <xsl:call-template name="translateComputingElement" />
42                </xsl:element>
43        </xsl:template>
44
45        <xsl:template match="//*[ComponentId]">
46                <xsl:call-template name="translateComputingElement" />
47        </xsl:template>
48
49        <xsl:template name="translateComputingElement">
50                <xsl:if test="Memory">
51                        <xsl:apply-templates select="Memory" />
52                </xsl:if>
53                <xsl:if test="Storage">
54                        <xsl:apply-templates select="Storage" />
55                </xsl:if>
56                <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
57                <xsl:if test="Baseboard">
58                        <xsl:apply-templates select="Baseboard" />
59                </xsl:if>
60                <xsl:if test="Sensor">
61                        <xsl:apply-templates select="Sensor" />
62                </xsl:if>
63                <xsl:if test="PowerSupply">
64                        <xsl:apply-templates select="PowerSupply" />
65                </xsl:if>
66                <xsl:if test="Processor">
67                        <xsl:apply-templates select="Processor" />
68                </xsl:if>
69                <xsl:if test="CoolingDevice">
70                        <!-- Base cooling device data -->
71                        <xsl:apply-templates select="CoolingDevice" mode="basic" />
72                        <!-- Air throughput connected, advanced, technical data -->
73                        <xsl:if test="CoolingDevice/ThroughputProfile">
74                                <xsl:element name="profile">
75                                        <xsl:element name="airThroughputProfile">
76                                                <xsl:element name="airThroughputStates">
77                                                        <xsl:apply-templates select="CoolingDevice"
78                                                                mode="advanced" />
79                                                </xsl:element>
80                                        </xsl:element>
81                                </xsl:element>
82                        </xsl:if>
83                </xsl:if>
84               
85                <xsl:if test="Heatsink">
86                        <xsl:apply-templates select="Heatsink" />
87                </xsl:if>       
88               
89                <xsl:if test="Outlet">
90                        <xsl:apply-templates select="Outlet" />
91                </xsl:if>       
92
93                <xsl:if test="Slot">
94                        <xsl:apply-templates select="Slot" />
95                </xsl:if>       
96
97        </xsl:template>
98
99        <xsl:template match="Baseboard">
100                <xsl:element name="parameter">
101                        <xsl:attribute name="name">baseboard</xsl:attribute>
102                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
103                                cannot contain parameters. Must be parameter containing properties. -->
104                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
105                </xsl:element>
106        </xsl:template>
107
108        <xsl:template match="Sensor">
109                <xsl:element name="parameter">
110                        <xsl:attribute name="name">sensor</xsl:attribute>
111                        <xsl:element name="property">
112                                <xsl:attribute name="name">class</xsl:attribute>
113                                <xsl:element name="value">
114                                        <xsl:value-of select="Class" />
115                                </xsl:element>
116                        </xsl:element>
117                        <xsl:element name="property">
118                                <xsl:attribute name="name">unit</xsl:attribute>
119                                <xsl:element name="value">
120                                        <xsl:value-of select="Unit" />
121                                </xsl:element>
122                        </xsl:element>
123                        <xsl:if test="MinValue">
124                                <xsl:element name="property">
125                                        <xsl:attribute name="name">minValue</xsl:attribute>
126                                        <xsl:element name="value">
127                                                <xsl:value-of select="MinValue" />
128                                        </xsl:element>
129                                </xsl:element>
130                        </xsl:if>
131                        <xsl:if test="MaxValue">
132                                <xsl:element name="property">
133                                        <xsl:attribute name="name">maxValue</xsl:attribute>
134                                        <xsl:element name="value">
135                                                <xsl:value-of select="MaxValue" />
136                                        </xsl:element>
137                                </xsl:element>
138                        </xsl:if>
139                        <xsl:if test="Factor">
140                                <xsl:element name="property">
141                                        <xsl:attribute name="name">factor</xsl:attribute>
142                                        <xsl:element name="value">
143                                                <xsl:value-of select="Factor" />
144                                        </xsl:element>
145                                </xsl:element>
146                        </xsl:if>
147                        <xsl:if test="Accuracy">
148                                <xsl:element name="property">
149                                        <xsl:attribute name="name">accuracy</xsl:attribute>
150                                        <xsl:element name="value">
151                                                <xsl:value-of select="Accuracy" />
152                                        </xsl:element>
153                                </xsl:element>
154                        </xsl:if>
155
156                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
157                                cannot contain parameters. Must be parameter containing properties. -->
158                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
159                </xsl:element>
160        </xsl:template>
161
162        <xsl:template match="Processor">
163                <xsl:element name="computingResource">
164                        <xsl:attribute name="class">Processor</xsl:attribute>
165                        <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
166                        <xsl:element name="parameter">
167                                <xsl:attribute name="name">speed</xsl:attribute>
168                                <xsl:element name="value">
169                                        <xsl:value-of select="MaxClockSpeed" />
170                                </xsl:element>
171                        </xsl:element>
172                        <xsl:if test="PState | CState">
173                                <!-- If PState or CState elements present add powerProfile element -->
174                                <xsl:element name="profile">
175                                        <xsl:element name="powerProfile">
176                                                <xsl:if test="PState/Transition">
177                                                        <xsl:element name="powerStates">
178                                                                <!-- <xsl:element name="powerState"> -->
179                                                                <!-- TODO: What to take if from??? -->
180                                                                <!-- <xsl:element name="name">DummyName</xsl:element> -->
181                                                                <!-- <xsl:element name="powerUsage">0</xsl:element> -->
182                                                                <xsl:apply-templates select="PState/Transition" />
183                                                                <!-- </xsl:element> -->
184                                                        </xsl:element>
185                                                </xsl:if>
186                                                <xsl:apply-templates select="PState" />
187                                                <xsl:apply-templates select="CState" />
188                                        </xsl:element>
189                                </xsl:element>
190                        </xsl:if>
191                </xsl:element>
192        </xsl:template>
193
194        <xsl:template match="PState">
195                <xsl:element name="parameter">
196                        <xsl:attribute name="name">pState</xsl:attribute>
197                        <xsl:element name="property">
198                                <xsl:attribute name="name">name</xsl:attribute>
199                                <xsl:element name="value">
200                                        <xsl:value-of select="State" />
201                                </xsl:element>
202                        </xsl:element>
203                        <xsl:element name="property">
204                                <xsl:attribute name="name">frequency</xsl:attribute>
205                                <xsl:element name="value">
206                                        <xsl:value-of select="Frequency" />
207                                </xsl:element>
208                        </xsl:element>
209                        <xsl:element name="property">
210                                <xsl:attribute name="name">voltage</xsl:attribute>
211                                <xsl:element name="value">
212                                        <xsl:value-of select="Voltage" />
213                                </xsl:element>
214                        </xsl:element>
215                        <xsl:element name="property">
216                                <xsl:attribute name="name">powerUsage</xsl:attribute>
217                                <xsl:element name="value">
218                                        <xsl:value-of select="PowerUsage" />
219                                </xsl:element>
220                        </xsl:element>
221                </xsl:element>
222        </xsl:template>
223
224        <xsl:template match="CState">
225                <xsl:element name="parameter">
226                        <xsl:attribute name="name">pState</xsl:attribute>
227                        <xsl:element name="property">
228                                <xsl:attribute name="name">name</xsl:attribute>
229                                <xsl:element name="value">
230                                        <xsl:value-of select="State" />
231                                </xsl:element>
232                        </xsl:element>
233                        <xsl:element name="property">
234                                <xsl:attribute name="name">powerUsage</xsl:attribute>
235                                <xsl:element name="value">
236                                        <xsl:value-of select="PowerUsage" />
237                                </xsl:element>
238                        </xsl:element>
239                </xsl:element>
240        </xsl:template>
241
242        <xsl:template match="PState/Transition">
243                <xsl:element name="powerState">
244                        <xsl:element name="name">
245                                <xsl:value-of select="../State" />
246                        </xsl:element>
247                        <xsl:element name="transition">
248                                <xsl:element name="to">
249                                        <xsl:value-of select="ToState" />
250                                </xsl:element>
251                                <xsl:element name="powerUsage">
252                                        <xsl:value-of select="PowerUsage" />
253                                </xsl:element>
254                                <xsl:element name="time">
255                                        <xsl:value-of select="Time" />
256                                </xsl:element>
257                        </xsl:element>
258                </xsl:element>
259        </xsl:template>
260
261        <xsl:template name="BasicStateParameters">
262                <xsl:element name="name">
263                        <xsl:value-of select="State" />
264                </xsl:element>
265                <xsl:element name="powerUsage">
266                        <xsl:value-of select="PowerUsage" />
267                </xsl:element>
268                <xsl:element name="transition">
269                        <xsl:element name="to">
270                                <xsl:value-of select="Transition/ToState" />
271                        </xsl:element>
272                        <xsl:element name="powerUsage">
273                                <xsl:value-of select="Transition/PowerUsage" />
274                        </xsl:element>
275                        <xsl:element name="time">
276                                <xsl:value-of select="Transition/Time" />
277                        </xsl:element>
278                </xsl:element>
279        </xsl:template>
280
281        <xsl:template match="PowerSupply">
282                <xsl:element name="parameter">
283                        <xsl:attribute name="name">powerSupply</xsl:attribute>
284                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
285                                cannot contain parameters. Must be parameter containing properties. -->
286                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
287                </xsl:element>
288        </xsl:template>
289
290        <xsl:template match="Memory">
291                <xsl:element name="resourceUnit">
292                        <xsl:attribute name="class">Memory</xsl:attribute>
293                        <xsl:element name="amount">
294                                <xsl:value-of select="Capacity" />
295                        </xsl:element>
296                        <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
297                </xsl:element>
298        </xsl:template>
299
300        <xsl:template match="Storage">
301                <xsl:element name="resourceUnit">
302                        <xsl:attribute name="class">Storage</xsl:attribute>
303                        <xsl:attribute name="type"><xsl:value-of select="Class" /></xsl:attribute>
304                        <xsl:element name="amount">
305                                <xsl:attribute name="unit">MB</xsl:attribute>
306                                <xsl:value-of select="Capacity" />
307                        </xsl:element>
308                        <xsl:element name="parameter">
309                                <xsl:attribute name="name">interface</xsl:attribute>
310                                <xsl:element name="value">
311                                        <xsl:value-of select="Interface" />
312                                </xsl:element>
313                        </xsl:element>
314                        <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
315                </xsl:element>
316        </xsl:template>
317
318        <xsl:template match="CoolingDevice" mode="basic">
319                <xsl:element name="parameter">
320                        <xsl:attribute name="name">CoolingDevice</xsl:attribute>
321                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
322                                cannot contain parameters. Must be parameter containing properties. -->
323
324                        <!-- Obligatory attribute -->
325                        <xsl:element name="property">
326                                <xsl:attribute name="name">class</xsl:attribute>
327                                <xsl:element name="value">
328                                        <xsl:value-of select="Class" />
329                                </xsl:element>
330                        </xsl:element>
331                        <xsl:if test="MaxCoolingCapacity">
332                                <xsl:element name="property">
333                                        <xsl:attribute name="name">maxCoolingCapacity</xsl:attribute>
334                                        <xsl:element name="value">
335                                                <xsl:value-of select="MaxCoolingCapacity" />
336                                        </xsl:element>
337                                </xsl:element>
338                        </xsl:if>
339                        <xsl:if test="MaxAirThroughput">
340                                <xsl:element name="property">
341                                        <xsl:attribute name="name">maxAirThroughput</xsl:attribute>
342                                        <xsl:element name="value">
343                                                <xsl:value-of select="MaxAirThroughput" />
344                                        </xsl:element>
345                                </xsl:element>
346                        </xsl:if>
347                        <xsl:if test="MaxWaterThroughput">
348                                <xsl:element name="property">
349                                        <xsl:attribute name="name">maxWaterThroughput</xsl:attribute>
350                                        <xsl:element name="value">
351                                                <xsl:value-of select="MaxWaterThroughput" />
352                                        </xsl:element>
353                                </xsl:element>
354                        </xsl:if>
355                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
356                </xsl:element>
357        </xsl:template>
358
359        <xsl:template match="CoolingDevice" mode="advanced">
360                <xsl:attribute name="name"><xsl:value-of select="generate-id()" /></xsl:attribute>
361                <xsl:if test="ThroughputProfile">
362                        <xsl:apply-templates select="ThroughputProfile" />
363                </xsl:if>
364        </xsl:template>
365
366        <xsl:template match="ThroughputProfile">
367                <xsl:apply-templates select="FlowState" />
368        </xsl:template>
369
370        <xsl:template match="FlowState">
371                <xsl:element name="airThroughputState">
372                        <xsl:element name="name">
373                                <xsl:value-of select="State" />
374                        </xsl:element>
375                        <xsl:if test="Flow">
376                                <xsl:element name="value">
377                                        <xsl:value-of select="Flow" />
378                                </xsl:element>
379                        </xsl:if>
380                        <xsl:if test="PowerUsage">
381                                <xsl:element name="powerUsage">
382                                        <xsl:value-of select="PowerUsage" />
383                                </xsl:element>
384                        </xsl:if>
385                        <xsl:if test="Transition">
386                                <xsl:apply-templates select="Transition" />
387                        </xsl:if>
388                </xsl:element>
389        </xsl:template>
390
391        <xsl:template match="Transition">
392                <xsl:element name="parameter">
393                        <xsl:attribute name="name">toState</xsl:attribute>
394                        <xsl:element name="value">
395                                <xsl:value-of select="ToState" />
396                        </xsl:element>
397                </xsl:element>
398                <xsl:element name="parameter">
399                        <xsl:attribute name="name">powerUsage</xsl:attribute>
400                        <xsl:element name="value">
401                                <xsl:value-of select="PowerUsage" />
402                        </xsl:element>
403                </xsl:element>
404                <xsl:element name="parameter">
405                        <xsl:attribute name="name">time</xsl:attribute>
406                        <xsl:element name="value">
407                                <xsl:value-of select="Time" />
408                        </xsl:element>
409                </xsl:element>
410        </xsl:template>
411
412        <!-- Template for transforming basic parameters of all devices of any type -->
413        <xsl:template name="BasicDEBBPhysicalElementParameters">
414                <xsl:if test="Manufacturer">
415                        <xsl:element name="parameter">
416                                <xsl:attribute name="name">manufacturer</xsl:attribute>
417                                <xsl:element name="value">
418                                        <xsl:value-of select="Manufacturer" />
419                                </xsl:element>
420                        </xsl:element>
421                </xsl:if>
422                <xsl:if test="Product">
423                        <xsl:element name="parameter">
424                                <xsl:attribute name="name">product</xsl:attribute>
425                                <xsl:element name="value">
426                                        <xsl:value-of select="Product" />
427                                </xsl:element>
428                        </xsl:element>
429                </xsl:if>
430                <xsl:if test="MaxPower">
431                        <xsl:element name="parameter">
432                                <xsl:attribute name="name">maxPower</xsl:attribute>
433                                <xsl:element name="value">
434                                        <xsl:value-of select="MaxPower" />
435                                </xsl:element>
436                        </xsl:element>
437                </xsl:if>
438        </xsl:template>
439
440        <xsl:template name="BasicDEBBSimpleTypeProperties">
441                <xsl:comment>BasicDEBBSimpleTypeProperties</xsl:comment>
442               
443                <xsl:call-template name="BasicDEBBPhysicalElementProperties"/>
444                <!-- Transform (not needed in DCWoRMS) -->
445<!--            <xsl:if test="Transform">-->
446<!--                    <xsl:element name="property">-->
447<!--                            <xsl:attribute name="name">transform</xsl:attribute>-->
448<!--                            <xsl:element name="value">-->
449<!--                                    <xsl:value-of select="Transform" />-->
450<!--                            </xsl:element>-->
451<!--                    </xsl:element>          -->
452<!--            </xsl:if>-->
453               
454                <!-- Reference (not needed in DCWoRMS) -->
455<!--            <xsl:if test="Reference">-->
456<!--                    <xsl:element name="property">-->
457<!--                            <xsl:attribute name="name">reference</xsl:attribute>-->
458<!--                            <xsl:element name="value">-->
459<!--                                    <xsl:value-of select="Reference" />-->
460<!--                            </xsl:element>-->
461<!--                    </xsl:element>          -->
462<!--            </xsl:if>                       -->
463        </xsl:template>
464       
465        <xsl:template name="BasicDEBBPhysicalElementProperties">
466                <xsl:comment>BasicDEBBPhysicalElementProperties</xsl:comment>
467               
468                <xsl:if test="Label">
469                        <xsl:element name="property">
470                                <xsl:attribute name="name">label</xsl:attribute>
471                                <xsl:element name="value">
472                                        <xsl:value-of select="Label" />
473                                </xsl:element>
474                        </xsl:element>
475                </xsl:if>
476               
477                <xsl:if test="Manufacturer">
478                        <xsl:element name="property">
479                                <xsl:attribute name="name">manufacturer</xsl:attribute>
480                                <xsl:element name="value">
481                                        <xsl:value-of select="Manufacturer" />
482                                </xsl:element>
483                        </xsl:element>
484                </xsl:if>
485               
486                <xsl:if test="Product">
487                        <xsl:element name="property">
488                                <xsl:attribute name="name">product</xsl:attribute>
489                                <xsl:element name="value">
490                                        <xsl:value-of select="Product" />
491                                </xsl:element>
492                        </xsl:element>
493                </xsl:if>
494               
495                <xsl:if test="MaxPower">
496                        <xsl:element name="property">
497                                <xsl:attribute name="name">maxPower</xsl:attribute>
498                                <xsl:element name="value">
499                                        <xsl:value-of select="MaxPower" />
500                                </xsl:element>
501                        </xsl:element>
502                </xsl:if>
503               
504                <xsl:if test="PowerUsage">
505                        <xsl:element name="property">
506                                <xsl:attribute name="name">powerUsage</xsl:attribute>
507                                <xsl:element name="value">
508                                        <xsl:value-of select="PowerUsage" />
509                                </xsl:element>
510                        </xsl:element>
511                </xsl:if>
512
513                <!-- PowerUsageProfile -->
514                <!-- TODO: It should be translated, but it is not clear how. Impossible
515                 to map hierarchy in parameters and their properties, which is necessary here. -->
516<!--            <xsl:if test="PowerUsageProfile">-->
517<!--                    <xsl:element name="property">-->
518<!--                            <xsl:attribute name="name">powerUsageProfile</xsl:attribute>-->
519<!--                            <xsl:element name="value">-->
520<!--                                    <xsl:value-of select="PowerUsageProfile" />-->
521<!--                            </xsl:element>-->
522<!--                    </xsl:element>-->
523<!--            </xsl:if>-->
524
525               
526                <xsl:if test="Type">
527                        <xsl:element name="property">
528                                <xsl:attribute name="name">type</xsl:attribute>
529                                <xsl:element name="value">
530                                        <xsl:value-of select="Type" />
531                                </xsl:element>
532                        </xsl:element>
533                </xsl:if>
534               
535        </xsl:template>
536       
537        <xsl:template match="Heatsink">
538                <xsl:element name="parameter">
539                        <xsl:attribute name="name">heatsink</xsl:attribute>
540                       
541                        <xsl:if test="TransferRate">
542                                <xsl:element name="property">
543                                        <xsl:attribute name="name">transferRate</xsl:attribute>
544                                        <xsl:element name="value">
545                                                <xsl:value-of select="TransferRate" />
546                                        </xsl:element>
547                                </xsl:element>
548                        </xsl:if>
549                       
550                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
551                                cannot contain parameters. Must be parameter containing properties. -->
552                        <xsl:call-template name="BasicDEBBSimpleTypeProperties" />
553                </xsl:element> 
554        </xsl:template> 
555       
556        <xsl:template match="Outlet">
557                <xsl:element name="parameter">
558                        <xsl:attribute name="name">outlet</xsl:attribute>
559                       
560                        <xsl:if test="MaxRPM">
561                                <xsl:element name="property">
562                                        <xsl:attribute name="name">maxRPM</xsl:attribute>
563                                        <xsl:element name="value">
564                                                <xsl:value-of select="MaxRPM" />
565                                        </xsl:element>
566                                </xsl:element>
567                        </xsl:if>
568                       
569                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
570                                cannot contain parameters. Must be parameter containing properties. -->
571                        <xsl:call-template name="BasicDEBBSimpleTypeProperties" />
572                </xsl:element>
573       
574        </xsl:template> 
575       
576        <xsl:template match="Slot">
577                <xsl:element name="parameter">
578                        <xsl:attribute name="name">slot</xsl:attribute> 
579                       
580                        <xsl:if test="Number">
581                                <xsl:element name="property">
582                                        <xsl:attribute name="name">number</xsl:attribute>
583                                        <xsl:element name="value">
584                                                <xsl:value-of select="Number" />
585                                        </xsl:element>
586                                </xsl:element>
587                        </xsl:if>
588
589                        <xsl:element name="property">
590                                <xsl:attribute name="name">connectorType</xsl:attribute>
591                                <xsl:element name="value">
592                                        <xsl:value-of select="ConnectorType" />
593                                </xsl:element>
594                        </xsl:element>
595
596                        <xsl:element name="property">
597                                <xsl:attribute name="name">label</xsl:attribute>
598                                <xsl:element name="value">
599                                        <xsl:value-of select="Label" />
600                                </xsl:element>
601                        </xsl:element>
602                       
603                        <!-- Transform ignored -->
604                       
605                        <xsl:if test="AvailSpace">
606                                <xsl:element name="property">
607                                        <xsl:attribute name="name">availSpace</xsl:attribute>
608                                        <xsl:element name="value">
609                                                <xsl:value-of select="AvailSpace" />
610                                        </xsl:element>
611                                </xsl:element>
612                        </xsl:if>                       
613                </xsl:element> 
614        </xsl:template>
615</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.