/[volute]/trunk/projects/theory/snapdm/res/schema2xhtml.xsl
ViewVC logotype

Contents of /trunk/projects/theory/snapdm/res/schema2xhtml.xsl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 99 - (show annotations)
Sun Mar 16 23:45:40 2008 UTC (12 years, 8 months ago) by richard.p.wagner
File MIME type: application/xml
File size: 18856 byte(s)
adding xsd to xhtml stylesheet
1 <?xml version="1.0" encoding="utf-8"?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3 <xsl:output method="html" encoding="utf-8"/>
4
5 <xsl:template match="xsd:schema">
6
7 <xsl:variable name="Main" select="/"/>
8
9 <xsl:for-each select="xsd:annotation/xsd:documentation">
10 <p><xsl:value-of select="text()"/></p>
11 </xsl:for-each>
12
13 <xsl:if test="xsd:import">
14 <p style="font-weight:bold">Imported schemata:</p>
15 <ul>
16 <xsl:for-each select="xsd:import">
17 <li>
18 <a href="{@schemaLocation}">
19 <xsl:value-of select="@schemaLocation"/>
20 </a>
21 from namespace
22 <span style="font-weight:bold;">
23 <xsl:value-of select="@namespace"/>
24 </span>
25 </li>
26 </xsl:for-each>
27 </ul>
28 </xsl:if>
29
30 <xsl:if test="xsd:include">
31 <p style="font-weight:bold">Included schemata:</p>
32 <ul>
33 <xsl:for-each select="xsd:include">
34 <li>
35 <a href="{@schemaLocation}">
36 <xsl:value-of select="@schemaLocation"/>
37 </a>
38 </li>
39 </xsl:for-each>
40 </ul>
41 </xsl:if>
42
43 <xsl:if test="xsd:redefine">
44 <p style="font-weight:bold">Schemata affected by redefine:</p>
45 <ul>
46 <xsl:for-each select="xsd:redefine">
47 <li>
48 <a href="{@schemaLocation}">
49 <xsl:value-of select="@schemaLocation"/>
50 </a>
51 </li>
52 </xsl:for-each>
53 </ul>
54 </xsl:if>
55
56 <xsl:if test="xsd:element">
57 <p style="font-weight:bold">Global Elements in main module</p>
58 <xsl:apply-templates select="xsd:element"/>
59 </xsl:if>
60
61 <xsl:for-each select="xsd:include | xsd:redefine">
62 <xsl:variable name="emodule" select="document(@schemaLocation)"/>
63 <xsl:if test="$emodule/xsd:schema/xsd:element">
64 <p style="font-weight:bold">
65 Global Elements from <a href="{@schemaLocation}"><xsl:value-of select="$emodule/xsd:schema/@id"/></a>
66 </p>
67 <xsl:apply-templates select="$emodule/xsd:schema/xsd:element">
68 <xsl:with-param name="Main" select="$Main"/>
69 </xsl:apply-templates>
70 </xsl:if>
71 </xsl:for-each>
72
73 <xsl:if test="xsd:attribute">
74 <p style="font-weight:bold">Global Attributes in main module</p>
75 <xsl:apply-templates select="xsd:attribute"/>
76 </xsl:if>
77
78 <xsl:for-each select="xsd:include | xsd:redefine">
79 <xsl:variable name="amodule" select="document(@schemaLocation)"/>
80 <xsl:if test="$amodule/xsd:schema/xsd:attribute">
81 <p style="font-weight:bold">
82 Global Attributes from <a href="{@schemaLocation}"><xsl:value-of select="$amodule/xsd:schema/@id"/></a>
83 </p>
84 <xsl:apply-templates select="$amodule/xsd:schema/xsd:attribute">
85 <xsl:with-param name="Main" select="$Main"/>
86 </xsl:apply-templates>
87 </xsl:if>
88 </xsl:for-each>
89
90 <xsl:if test="xsd:complexType|xsd:simpleType">
91 <p style="font-weight:bold">Global Types in main module</p>
92 <xsl:apply-templates select="xsd:complexType | xsd:simpleType">
93 <xsl:sort select="@name"/>
94 </xsl:apply-templates>
95 </xsl:if>
96
97 <xsl:for-each select="xsd:include | xsd:redefine">
98 <xsl:variable name="tmodule" select="document(@schemaLocation)"/>
99 <xsl:if test="$tmodule/xsd:schema/xsd:complexType | $tmodule/xsd:schema/xsd:simpleType">
100 <p style="font-weight:bold">Global Types from
101 <a href="{@schemaLocation}"><xsl:value-of select="$tmodule/xsd:schema/@id"/></a>
102 </p>
103 <xsl:apply-templates select="$tmodule/xsd:schema/xsd:complexType | $tmodule/xsd:schema/xsd:simpleType">
104 <xsl:with-param name="Main" select="$Main"/>
105 </xsl:apply-templates>
106 </xsl:if>
107 </xsl:for-each>
108
109 <xsl:if test="xsd:group|xsd:attributeGroup">
110 <p style="font-weight:bold">Useful groups in main module</p>
111 <xsl:apply-templates select="xsd:group|xsd:attributeGroup">
112 <xsl:sort select="@name"/>
113 </xsl:apply-templates>
114 </xsl:if>
115
116 <xsl:for-each select="xsd:include | xsd:redefine">
117 <xsl:variable name="agmodule" select="document(@schemaLocation)"/>
118 <xsl:if test="$agmodule/xsd:schema/xsd:group | $agmodule/xsd:schema/xsd:attributeGroup">
119 <p style="font-weight:bold">Useful groups from
120 <a href="{@schemaLocation}"><xsl:value-of select="$agmodule/xsd:schema/@id"/></a>
121 </p>
122 <xsl:apply-templates select="$agmodule/xsd:schema/xsd:group | $agmodule/xsd:schema/xsd:attributeGroup">
123 <xsl:with-param name="Main" select="$Main"/>
124 </xsl:apply-templates>
125 </xsl:if>
126 </xsl:for-each>
127
128 </xsl:template>
129
130 <xsl:template name="link2">
131 <xsl:param name="Main" select="/"/>
132 <xsl:param name="type"/>
133 <xsl:choose>
134 <xsl:when test="document($Main/xsd:schema/xsd:include/@schemaLocation)">
135 <xsl:for-each select="document($Main/xsd:schema/xsd:include/@schemaLocation)">
136 <xsl:if test="key('type',$type)">
137 <xsl:text> </xsl:text>
138 <a href="#{generate-id(key('type',$type))}">{<xsl:value-of select="$type"/>}</a>
139 </xsl:if>
140 </xsl:for-each>
141 </xsl:when>
142 <xsl:otherwise>
143 <xsl:for-each select="$Main">
144 <xsl:if test="key('type',$type)">
145 <xsl:text> </xsl:text>
146 <a href="#{generate-id(key('type',$type))}">{<xsl:value-of select="$type"/>}</a>
147 </xsl:if>
148 </xsl:for-each>
149 </xsl:otherwise>
150 </xsl:choose>
151 </xsl:template>
152
153 <xsl:template match="xsd:element">
154 <xsl:param name="Main" select="/"/>
155 <ul>
156 <li>
157 <xsl:choose>
158 <xsl:when test="@name">
159 <span style="font-weight:normal; color:darkred;">&lt;<a name="{generate-id()}"><xsl:value-of select="@name"/>&gt;</a></span>
160 <xsl:call-template name="howmany"/>
161 <span style="font-weight:bold; color:darkblue">
162 <xsl:choose>
163 <xsl:when test="@type">
164 <xsl:choose>
165 <xsl:when test="contains(@type,':')">{<xsl:value-of select="@type"/>}</xsl:when>
166 <xsl:otherwise>
167 <xsl:call-template name="link2">
168 <xsl:with-param name="Main" select="$Main"/>
169 <xsl:with-param name="type" select="@type"/>
170 </xsl:call-template>
171 </xsl:otherwise>
172 </xsl:choose>
173 </xsl:when>
174 <xsl:when test="@ref">
175 <xsl:choose>
176 <xsl:when test="contains(@ref,':')">{<xsl:value-of select="@ref"/>}</xsl:when>
177 <xsl:otherwise>
178 <xsl:call-template name="link2">
179 <xsl:with-param name="Main" select="$Main"/>
180 <xsl:with-param name="type" select="@ref"/>
181 </xsl:call-template>
182 </xsl:otherwise>
183 </xsl:choose>
184 </xsl:when>
185 <!--default -->
186 </xsl:choose>
187 </span>
188 <xsl:if test="xsd:annotation">
189 <span style="font-weight:normal; color:black;"><xsl:apply-templates select="xsd:annotation"/></span>
190 </xsl:if>
191 </xsl:when>
192 <xsl:otherwise> <!--only @ref-->
193 <xsl:choose>
194 <xsl:when test="contains(@ref,':')">{<xsl:value-of select="@ref"/>}</xsl:when>
195 <xsl:otherwise>
196 <xsl:call-template name="link2">
197 <xsl:with-param name="Main" select="$Main"/>
198 <xsl:with-param name="type" select="@ref"/>
199 </xsl:call-template>
200 </xsl:otherwise>
201 </xsl:choose>
202 <xsl:if test="xsd:annotation">
203 <span style="font-weight:normal; color:black;"><xsl:apply-templates select="xsd:annotation"/></span>
204 </xsl:if>
205 </xsl:otherwise>
206 </xsl:choose>
207 <xsl:if test="xsd:complexType | xsd:simpleType">
208 <xsl:apply-templates select="xsd:complexType | xsd:simpleType">
209 <xsl:with-param name="Main" select="$Main"/>
210 </xsl:apply-templates>
211 </xsl:if>
212 <xsl:apply-templates select="xsd:unique | xsd:key | xsd:keyref">
213 <xsl:with-param name="Main" select="$Main"/>
214 </xsl:apply-templates>
215 </li>
216 </ul>
217 </xsl:template>
218
219 <xsl:template match="xsd:complexType">
220 <xsl:param name="Main" select="/"/>
221 <xsl:choose>
222 <xsl:when test="@name">
223 <ul>
224 <li>
225 <p style="font-weight:bold; color:darkblue;">
226 <a name="{generate-id()}"><xsl:value-of select="@name"/></a> :
227 <xsl:if test="@mixed='true'">
228 <span> {free text}</span>
229 </xsl:if>
230 <xsl:if test="xsd:annotation">
231 <span style="font-weight:normal; color:black;"><xsl:apply-templates select="xsd:annotation"/></span>
232 </xsl:if>
233 </p>
234 <xsl:apply-templates select="xsd:complexContent | xsd:simpleContent | xsd:sequence | xsd:choice | xsd:all | xsd:group ">
235 <xsl:with-param name="Main" select="$Main"/>
236 </xsl:apply-templates>
237 <xsl:if test="xsd:attributeGroup | xsd:anyAttribute | xsd:attribute">
238 <xsl:apply-templates select="xsd:attributeGroup | xsd:anyAttribute | xsd:attribute">
239 <xsl:with-param name="Main" select="$Main"/>
240 </xsl:apply-templates>
241 </xsl:if>
242 </li>
243 </ul>
244 </xsl:when>
245 <xsl:otherwise>
246 <xsl:apply-templates select="xsd:complexContent | xsd:simpleContent | xsd:sequence | xsd:choice | xsd:all | xsd:group | xsd:attributeGroup | xsd:anyAttribute">
247 <xsl:with-param name="Main" select="$Main"/>
248 </xsl:apply-templates>
249 <xsl:if test="xsd:attribute">
250 <xsl:apply-templates select="xsd:attribute">
251 <xsl:with-param name="Main" select="$Main"/>
252 </xsl:apply-templates>
253 </xsl:if>
254 </xsl:otherwise>
255 </xsl:choose>
256 </xsl:template>
257
258 <xsl:template match="xsd:simpleType">
259 <xsl:param name="Main" select="/"/>
260 <xsl:choose>
261 <xsl:when test="@name">
262 <ul>
263 <li>
264 <p>
265 <span style="font-weight:bold; color:darkblue;">
266 <a name="{generate-id()}"><xsl:value-of select="@name"/></a>
267 </span> :
268 <xsl:if test="xsd:annotation"><xsl:apply-templates select="xsd:annotation"/></xsl:if>
269 </p>
270 <xsl:if test="xsd:restriction | xsd:list | xsd:union">
271 <xsl:apply-templates select="xsd:restriction | xsd:list | xsd:union">
272 <xsl:with-param name="Main" select="$Main"/>
273 </xsl:apply-templates>
274 </xsl:if>
275 </li>
276 </ul>
277 </xsl:when>
278 <xsl:otherwise>
279 <xsl:apply-templates select="xsd:restriction | xsd:list | xsd:union">
280 <xsl:with-param name="Main" select="$Main"/>
281 </xsl:apply-templates>
282 </xsl:otherwise>
283 </xsl:choose>
284 </xsl:template>
285
286 <xsl:template match="xsd:list">
287 <xsl:param name="Main" select="/"/>
288 List of
289 <xsl:choose>
290 <xsl:when test="contains(@itemType,':')">
291 <span style="font-weight:bold; color:darkblue;">
292 {<xsl:value-of select="@itemType"/>}
293 </span>
294 </xsl:when>
295 <xsl:otherwise>
296 <xsl:call-template name="link2">
297 <xsl:with-param name="Main" select="$Main"/>
298 <xsl:with-param name="type" select="@itemType"/>
299 </xsl:call-template>
300 </xsl:otherwise>
301 </xsl:choose>
302 </xsl:template>
303
304 <xsl:template match="xsd:group">
305 <xsl:param name="Main" select="/"/>
306 <ul>
307 <li>
308 <xsl:choose>
309 <xsl:when test="@name">
310 <p style="font-weight:normal; color:darkblue;">
311 <a name="{generate-id()}"><xsl:value-of select="@name"/></a> :
312 </p>
313 <xsl:if test="xsd:all | xsd:choice | xsd:sequence">
314 <xsl:apply-templates select="xsd:all | xsd:choice | xsd:sequence">
315 <xsl:with-param name="Main" select="$Main"/>
316 </xsl:apply-templates>
317
318 </xsl:if>
319 </xsl:when>
320 <xsl:otherwise>
321 <xsl:choose>
322 <xsl:when test="contains(@ref,':')">
323 <span style="font-weight:bold; color:darkblue;">
324 {<xsl:value-of select="@ref"/>}
325 </span>
326 </xsl:when>
327 <xsl:otherwise>
328 <xsl:call-template name="link2">
329 <xsl:with-param name="Main" select="$Main"/>
330 <xsl:with-param name="type" select="@ref"/>
331 </xsl:call-template>
332 </xsl:otherwise>
333 </xsl:choose>
334 </xsl:otherwise>
335 </xsl:choose>
336 </li>
337 </ul>
338 </xsl:template>
339
340 <xsl:template match="xsd:attributeGroup">
341 <xsl:param name="Main" select="/"/>
342 <ul>
343 <li>
344 <xsl:choose>
345 <xsl:when test="@name">
346 <p style="font-weight:normal; color:darkblue;">
347 <a name="{generate-id()}"><xsl:value-of select="@name"/></a> :
348 </p>
349 </xsl:when>
350 <xsl:otherwise>
351 <xsl:call-template name="link2">
352 <xsl:with-param name="Main" select="$Main"/>
353 <xsl:with-param name="type" select="@ref"/>
354 </xsl:call-template>
355 </xsl:otherwise>
356 </xsl:choose>
357 <xsl:if test="xsd:attribute | xsd:attributeGroup | xsd:anyAttribute">
358 <xsl:apply-templates select="xsd:attribute | xsd:attributeGroup | xsd:anyAttribute">
359 <xsl:with-param name="Main" select="$Main"/>
360 </xsl:apply-templates>
361 </xsl:if>
362 </li>
363 </ul>
364 </xsl:template>
365
366
367 <xsl:template match="xsd:any">
368 <span style="font-weight:bold;">any</span>
369 </xsl:template>
370
371 <xsl:template match="xsd:sequence">
372 <xsl:param name="Main" select="/"/>
373 <ul>
374 <li>
375 <div style="font-weight:bold; color:darkblue">(<xsl:call-template name="howmany"/></div>
376 <xsl:apply-templates>
377 <xsl:with-param name="Main" select="$Main"/>
378 </xsl:apply-templates>
379 <div style="font-weight:bold; color:darkblue">)</div>
380 </li>
381 </ul>
382 </xsl:template>
383
384 <xsl:template match="xsd:choice">
385 <xsl:param name="Main" select="/"/>
386 <ul>
387 <li>
388 <div style="font-weight:bold; color:darkblue">[<xsl:call-template name="howmany"/></div>
389 <xsl:apply-templates>
390 <xsl:with-param name="Main" select="$Main"/>
391 </xsl:apply-templates>
392 <div style="font-weight:bold; color:darkblue">]</div>
393 </li>
394 </ul>
395 </xsl:template>
396
397 <xsl:template match="xsd:all">
398 <xsl:param name="Main" select="/"/>
399 <ul>
400 <li>
401 <div style="font-weight:bold; color:darkblue">([<xsl:call-template name="howmany"/></div>
402 <xsl:apply-templates>
403 <xsl:with-param name="Main" select="$Main"/>
404 </xsl:apply-templates>
405 <div style="font-weight:bold; color:darkblue">])</div>
406 </li>
407 </ul>
408 </xsl:template>
409
410
411 <xsl:template match="xsd:attribute">
412 <xsl:param name="Main" select="/"/>
413 <ul>
414 <li>
415 <xsl:if test="@name">
416 <span style="font-weight:normal; color:darkgreen;">
417 <xsl:value-of select="@name"/> :
418 </span>
419 </xsl:if>
420 <span style="font-weight:bold; color:darkblue">
421 <xsl:choose>
422 <xsl:when test="@type">
423 <xsl:choose>
424 <xsl:when test="contains(@type,':')">{<xsl:value-of select="@type"/>}</xsl:when>
425 <xsl:otherwise>
426 <xsl:call-template name="link2">
427 <xsl:with-param name="Main" select="$Main"/>
428 <xsl:with-param name="type" select="@type"/>
429 </xsl:call-template>
430 </xsl:otherwise>
431 </xsl:choose>
432 </xsl:when>
433 </xsl:choose>
434 </span>
435 <xsl:apply-templates select="xsd:annotation"/>
436 <xsl:apply-templates select="xsd:simpleType">
437 <xsl:with-param name="Main" select="$Main"/>
438 </xsl:apply-templates>
439 </li>
440 </ul>
441 </xsl:template>
442
443 <xsl:template match="xsd:extension">
444 <xsl:param name="Main" select="/"/>
445 <ul>
446 <li>
447 <span style="font-weight:bold; color:darkblue">&lt;&lt;
448 <xsl:choose>
449 <xsl:when test="contains(@base,':')">{<xsl:value-of select="@base"/>}</xsl:when>
450 <xsl:otherwise>
451 <xsl:call-template name="link2">
452 <xsl:with-param name="Main" select="$Main"/>
453 <xsl:with-param name="type" select="@base"/>
454 </xsl:call-template>
455 </xsl:otherwise>
456 </xsl:choose>
457 &gt;&gt;</span>
458 <xsl:apply-templates>
459 <xsl:with-param name="Main" select="$Main"/>
460 <xsl:sort select="@value" order="ascending"/>
461 </xsl:apply-templates>
462 </li>
463 </ul>
464 </xsl:template>
465
466 <xsl:template match="xsd:restriction">
467 <xsl:param name="Main" select="/"/>
468 <ul>
469 <li>
470 <span style="font-weight:bold; color:darkblue">&gt;&gt;
471 <xsl:choose>
472 <xsl:when test="contains(@base,':')">{<xsl:value-of select="@base"/>}</xsl:when>
473 <xsl:otherwise>
474 <xsl:call-template name="link2">
475 <xsl:with-param name="Main" select="$Main"/>
476 <xsl:with-param name="type" select="@base"/>
477 </xsl:call-template>
478 </xsl:otherwise>
479 </xsl:choose>&lt;&lt;</span>
480 <xsl:apply-templates>
481 <xsl:with-param name="Main" select="$Main"/>
482 <xsl:sort select="@value" order="ascending"/>
483 </xsl:apply-templates>
484 </li>
485 </ul>
486 </xsl:template>
487
488
489 <xsl:template match="xsd:pattern">
490 <div>
491 pattern:<span style="font-weight:normal; color:blue">&#9;
492 <xsl:value-of select="@value"/>
493 </span>
494 </div>
495 </xsl:template>
496
497 <xsl:template match="xsd:simpleContent">
498 <xsl:param name="Main" select="/"/>
499 <xsl:apply-templates>
500 <xsl:with-param name="Main" select="$Main"/>
501 </xsl:apply-templates>
502 </xsl:template>
503
504 <xsl:template match="xsd:complexContent">
505 <xsl:param name="Main" select="/"/>
506 <xsl:apply-templates>
507 <xsl:with-param name="Main" select="$Main"/>
508 </xsl:apply-templates>
509 </xsl:template>
510
511
512 <xsl:template match="xsd:enumeration">
513 <div style="font-weight:normal; color:blue">
514 <xsl:value-of select="@value"/>
515 <xsl:apply-templates/>
516 </div>
517 </xsl:template>
518
519 <xsl:template match="xsd:documentation">
520 <span style="font-weight:normal; color:black">
521 <xsl:text>&#9;</xsl:text><xsl:value-of select="text()"/>
522 </span>
523 </xsl:template>
524
525
526 <xsl:template name="howmany">
527 <xsl:choose>
528 <xsl:when test="@minOccurs='0' and @maxOccurs='unbounded'">*</xsl:when>
529 <xsl:when test="@minOccurs='0' and (not(@maxOccurs) or @maxOccurs='1')">?</xsl:when>
530 <xsl:when test="(not(@minOccurs) or @minOccurs='1') and @maxOccurs='unbounded'">+ </xsl:when>
531 <xsl:otherwise>
532 <xsl:if test="@minOccurs and @maxOccurs!='1'">
533 <xsl:value-of select="@minOccurs"/>
534 <xsl:if test="@maxOccurs='unbounded'">+</xsl:if>
535 <xsl:if test="@maxOccurs!='unbounded'">-<xsl:value-of select="@maxOccurs"/>
536 </xsl:if>
537 </xsl:if>
538 </xsl:otherwise>
539 </xsl:choose>
540 </xsl:template>
541
542 <xsl:template match="xsd:minExclusive">
543 &gt;<xsl:value-of select="@value"/>
544 </xsl:template>
545
546 <xsl:template match="xsd:maxExclusive">
547 &lt;<xsl:value-of select="@value"/>
548 </xsl:template>
549
550 <xsl:template match="xsd:minInclusive">
551 &gt;=<xsl:value-of select="@value"/>
552 </xsl:template>
553
554 <xsl:template match="xsd:maxInclusive">
555 &lt;=<xsl:value-of select="@value"/>
556 </xsl:template>
557
558 <xsl:key name="type" match="xsd:schema/xsd:element | xsd:schema/xsd:attribute | xsd:schema/xsd:complexType | xsd:schema/xsd:simpleType | xsd:schema/xsd:group | xsd:schema/xsd:attributeGroup" use="@name"/>
559
560 <xsl:template match="/">
561 <html>
562 <head>
563 <title>
564 <xsl:value-of select="xsd:schema/@id"/> Schema version <xsl:value-of select="xsd:schema/@version"/>
565 </title>
566 </head>
567 <body style="font:sans-serif;">
568 <h3><xsl:value-of select="xsd:schema/@id"/> Schema version <xsl:value-of select="xsd:schema/@version"/></h3>
569 <div style="font-weight:bold">Notation and color conventions of this schema representation:</div>
570 <div>a choice: [x y z] ; a sequence: (x y z) ; (* x,y) is the same as the dtd-like notation (x,y)*</div>
571 <div>Colours used:
572 <span style="font-weight:bold; color:darkblue">{type declarations}</span>; <span style="font-weight:normal; color:darkred"> element names </span>
573 <span style="font-weight:normal; color:darkgreen">attribute names </span>;
574 <span style="font-weight:normal; color:blue">restriction/extension facets</span>; <a style="font-weight:bold" href="#">{links to type definitions}</a>; <span style="font-weight:normal; color:black">comments</span>; </div>
575 <div>an extension of a type is {&lt;&lt;type&gt;&gt;} ; and a restriction to it : {&gt;&gt;type&lt;&lt;}</div>
576 <xsl:apply-templates/>
577 <p style="font-weight:normal;text-align:right">Schema viewer developed by <a href="http://romeo.roua.org">Romeo Anghelache</a>, copyleft <a href="http://www.gnu.org">GNU</a><xsl:text> </xsl:text><a href="http://www.gnu.org/licenses/gpl.html">GPL</a>, 2001, version 1.01</p>
578 </body>
579 </html>
580 </xsl:template>
581
582 </xsl:stylesheet>

msdemlei@ari.uni-heidelberg.de
ViewVC Help
Powered by ViewVC 1.1.26