/[volute]/trunk/projects/ivoapub/ivoadoc/vor2spec.xsl
ViewVC logotype

Contents of /trunk/projects/ivoapub/ivoadoc/vor2spec.xsl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2411 - (show annotations)
Thu Feb 6 13:08:19 2014 UTC (7 years, 3 months ago) by volute@g-vo.org
File MIME type: application/xml
File size: 27780 byte(s)
ivoadoc: Deleted a superfluous template.

The template did a special case that was already dealt with in another
template within an xsl:choose; since negative matching for the special
case is tricky, that's how it turned out to be easier.


1 <!--
2 - a stylesheet for preformatting the definitions from an XML Schema
3 - that follows the VOResource schema conventions. The output is intended
4 - to be pasted into an IVOA specification document.
5 -->
6 <!-- Derived from Ray Plante's stylesheet of the same name - there are differences in this -->
7 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
8 xmlns:xs="http://www.w3.org/2001/XMLSchema"
9 xmlns="http://www.w3.org/2001/XMLSchema"
10 xmlns:vm="http://www.ivoa.net/xml/VOMetadata/v0.1"
11 xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0"
12 version="1.0">
13
14 <xsl:output method="xml"/>
15
16 <xsl:param name="showDefaults" select="true()"/>
17
18 <xsl:param name="xsdprefix">xs</xsl:param>
19
20 <xsl:param name="vrprefix">vr</xsl:param>
21
22
23 <xsl:param name="indentstep" select="' '" />
24
25 <xsl:param name="maxcodelen" select="80"/>
26
27 <xsl:variable name="cr"><xsl:text>
28 </xsl:text></xsl:variable>
29
30 <xsl:template match="/">
31 <spec>
32 <xsl:value-of select="$cr"/>
33 <xsl:text> </xsl:text>
34 <xsl:apply-templates select="/xs:schema/xs:complexType|/xs:schema/xs:simpleType" mode="def"/>
35 <xsl:value-of select="$cr"/>
36 <xsl:text> </xsl:text>
37 </spec>
38 <xsl:value-of select="$cr"/>
39 </xsl:template>
40
41 <xsl:template match="xs:complexType|xs:simpleType" mode="def">
42 <xsl:value-of select="$cr"/>
43 <xsl:text> </xsl:text>
44 <definition name="{@name}">
45 <xsl:value-of select="$cr"/>
46 <xsl:apply-templates select="." mode="xsddef"/>
47 <xsl:value-of select="$cr"/>
48 <xsl:apply-templates select="." mode="content"/>
49 <xsl:value-of select="$cr"/>
50 <xsl:apply-templates select="." mode="attributes"/>
51 <xsl:text> </xsl:text>
52 </definition>
53 <xsl:value-of select="$cr"/>
54 </xsl:template>
55
56 <xsl:template match="xs:complexType|xs:simpleType" mode="xsddef">
57 <xsl:text> </xsl:text>
58 <xsddef>
59 <xsl:attribute namespace="" name="title">
60 <xsl:apply-templates select="." mode="schemaDefTitle"/>
61 </xsl:attribute>
62 <xsl:value-of select="$cr"/>
63 <xsl:apply-templates select="." mode="xsdcode"/>
64 <xsl:text> </xsl:text>
65 </xsddef>
66 <xsl:value-of select="$cr"/>
67 </xsl:template>
68
69 <xsl:template match="xs:complexType[xs:simpleContent]" mode="content"/>
70
71 <xsl:template match="xs:complexType" mode="content">
72 <xsl:if test=".//xs:element">
73 <xsl:text> </xsl:text>
74 <content>
75 <xsl:attribute namespace="" name="title">
76 <xsl:apply-templates select="." mode="MetadataTitle"/>
77 </xsl:attribute>
78 <xsl:value-of select="$cr"/>
79 <xsl:apply-templates select=".//xs:element" mode="content"/>
80 <xsl:text> </xsl:text>
81 </content>
82 <xsl:value-of select="$cr"/>
83 </xsl:if>
84 </xsl:template>
85
86 <xsl:template match="xs:simpleType" mode="content"/>
87
88 <xsl:template match="xs:complexType|xs:simpleType" mode="attributes">
89 <xsl:if test=".//xs:attribute">
90 <xsl:text> </xsl:text>
91 <attributes>
92 <xsl:attribute namespace="" name="title">
93 <xsl:value-of select="concat(/xs:schema/xs:annotation/xs:appinfo/vm:targetPrefix,':',@name)"/>
94 <xsl:text> Attributes</xsl:text>
95 </xsl:attribute>
96 <xsl:value-of select="$cr"/>
97 <xsl:apply-templates select=".//xs:attribute" mode="attributes"/>
98 <xsl:text> </xsl:text>
99 </attributes>
100 <xsl:value-of select="$cr"/>
101 </xsl:if>
102 </xsl:template>
103
104 <xsl:template match="xs:element" mode="content">
105 <xsl:text> </xsl:text>
106 <element name="{@name}">
107 <xsl:value-of select="$cr"/>
108 <xsl:apply-templates select="." mode="nextContentItem"/>
109 <xsl:text> </xsl:text>
110 </element>
111 <xsl:value-of select="$cr"/>
112 </xsl:template>
113
114 <xsl:template match="xs:element" mode="nextContentItem">
115 <xsl:param name="row" select="1"/>
116 <xsl:param name="item" select="1"/>
117
118 <xsl:variable name="type" select="@type"/>
119
120 <xsl:choose>
121 <xsl:when test="$item &lt; 2 and xs:annotation/xs:appinfo/vm:dcterm">
122 <xsl:apply-templates select="." mode="content.rmname">
123 <xsl:with-param name="row" select="$row"/>
124 </xsl:apply-templates>
125 <xsl:apply-templates select="." mode="nextContentItem">
126 <xsl:with-param name="row" select="$row+1"/>
127 <xsl:with-param name="item" select="2"/>
128 </xsl:apply-templates>
129 </xsl:when>
130
131 <xsl:when test="$item &lt; 3">
132 <xsl:apply-templates select="." mode="content.type">
133 <xsl:with-param name="row" select="$row"/>
134 </xsl:apply-templates>
135 <xsl:apply-templates select="." mode="nextContentItem">
136 <xsl:with-param name="row" select="$row+1"/>
137 <xsl:with-param name="item" select="3"/>
138 </xsl:apply-templates>
139 </xsl:when>
140
141 <xsl:when test="$item &lt; 4">
142 <xsl:apply-templates select="." mode="content.meaning">
143 <xsl:with-param name="row" select="$row"/>
144 </xsl:apply-templates>
145 <xsl:apply-templates select="." mode="nextContentItem">
146 <xsl:with-param name="row" select="$row+1"/>
147 <xsl:with-param name="item" select="4"/>
148 </xsl:apply-templates>
149 </xsl:when>
150
151 <xsl:when test="$item &lt; 5">
152 <xsl:apply-templates select="." mode="content.occurrences">
153 <xsl:with-param name="row" select="$row"/>
154 </xsl:apply-templates>
155 <xsl:apply-templates select="." mode="nextContentItem">
156 <xsl:with-param name="row" select="$row+1"/>
157 <xsl:with-param name="item" select="5"/>
158 </xsl:apply-templates>
159 </xsl:when>
160
161 <xsl:when test="$item &lt; 6 and
162 (xs:simpleType/xs:restriction or
163 (starts-with($type,/xs:schema/xs:annotation/xs:appinfo/vm:targetPrefix) and
164 /xs:schema/xs:simpleType[@name=substring-after($type,':')]/xs:restriction))">
165 <xsl:apply-templates select="." mode="content.allowedValues">
166 <xsl:with-param name="row" select="$row"/>
167 </xsl:apply-templates>
168 <xsl:apply-templates select="." mode="nextContentItem">
169 <xsl:with-param name="row" select="$row+1"/>
170 <xsl:with-param name="item" select="6"/>
171 </xsl:apply-templates>
172 </xsl:when>
173
174 <xsl:when test="$item &lt; 7 and count(xs:annotation/xs:documentation) > 1">
175 <xsl:apply-templates select="." mode="content.comment">
176 <xsl:with-param name="row" select="$row"/>
177 </xsl:apply-templates>
178 </xsl:when>
179 </xsl:choose>
180 </xsl:template>
181
182 <xsl:template match="xs:element" mode="content.rmname">
183 <xsl:param name="row" select="1"/>
184
185 <xsl:text> </xsl:text>
186 <rmname>
187 <xsl:attribute namespace="" name="row"><xsl:value-of select="$row"/></xsl:attribute>
188 <xsl:for-each select="xs:annotation/xs:appinfo/vm:dcterm">
189 <xsl:if test="position()!=1">
190 <xsl:text>, </xsl:text>
191 </xsl:if>
192 <xsl:value-of select="."/>
193 </xsl:for-each>
194 </rmname>
195 <xsl:value-of select="$cr"/>
196 </xsl:template>
197
198 <xsl:template match="xs:element|xs:attribute" mode="content.type">
199 <xsl:param name="row" select="1"/>
200
201 <xsl:variable name="type">
202 <xsl:choose>
203 <xsl:when test="@type">
204 <xsl:apply-templates select="@type" mode="type"/>
205 </xsl:when>
206 <xsl:otherwise>
207 <xsl:apply-templates select="xs:complexType|xs:simpleType"
208 mode="type"/>
209 </xsl:otherwise>
210 </xsl:choose>
211 </xsl:variable>
212
213 <xsl:text> </xsl:text>
214 <type row="{$row}"><xsl:copy-of select="$type"/></type>
215 <xsl:value-of select="$cr"/>
216 </xsl:template>
217
218 <xsl:template match="xs:element|xs:attribute" mode="content.meaning">
219 <xsl:param name="row" select="1"/>
220
221 <xsl:text> </xsl:text>
222 <meaning>
223 <xsl:attribute namespace="" name="row"><xsl:value-of select="$row"/></xsl:attribute>
224 <xsl:value-of select="xs:annotation/xs:documentation[1]"/>
225 </meaning>
226 <xsl:value-of select="$cr"/>
227 </xsl:template>
228
229 <xsl:template match="xs:attribute" mode="content.default">
230 <xsl:param name="row" select="1"/>
231
232 <xsl:text> </xsl:text>
233 <default row="{$row}">
234 <xsl:value-of select="@default"/>
235 </default>
236 <xsl:value-of select="$cr"/>
237 </xsl:template>
238
239 <xsl:template match="xs:element" mode="content.occurrences">
240 <xsl:param name="row" select="1"/>
241
242 <xsl:text> </xsl:text>
243 <occurrences row="{$row}">
244 <xsl:apply-templates select="." mode="occurrences"/>
245 </occurrences>
246 <xsl:value-of select="$cr"/>
247 </xsl:template>
248
249 <xsl:template match="xs:element" mode="occurrences">
250 <xsl:choose>
251 <xsl:when test="@minOccurs='0'">
252 <xsl:text>optional</xsl:text>
253 <xsl:choose>
254 <xsl:when test="@maxOccurs='unbounded'">
255 <xsl:text>; multiple occurrences allowed.</xsl:text>
256 </xsl:when>
257 <xsl:when test="@maxOccurs and @maxOccurs!='0' and
258 @maxOccurs!='1'">
259 <xsl:text>; up to </xsl:text>
260 <xsl:value-of select="@maxOccurs"/>
261 <xsl:text> occurrences allowed.</xsl:text>
262 </xsl:when>
263 </xsl:choose>
264 </xsl:when>
265
266 <xsl:when test="(not(@minOccurs) or @minOccurs='1')">
267 <xsl:text>required</xsl:text>
268 <xsl:choose>
269 <xsl:when test="@maxOccurs='unbounded'">
270 <xsl:text>; multiple occurrences allowed.</xsl:text>
271 </xsl:when>
272 <xsl:when test="@maxOccurs and @maxOccurs!='0' and
273 @maxOccurs!='1'">
274 <xsl:text>; up to </xsl:text>
275 <xsl:value-of select="@maxOccurs"/>
276 <xsl:text> occurrences allowed.</xsl:text>
277 </xsl:when>
278 </xsl:choose>
279 </xsl:when>
280
281 <xsl:otherwise>
282 <xsl:choose>
283 <xsl:when test="@minOccurs=@maxOccurs">
284 <xsl:text>exactly </xsl:text>
285 <xsl:value-of select="@minOccurs"/>
286 <xsl:text> occurrences required.</xsl:text>
287 </xsl:when>
288 <xsl:otherwise>
289 <xsl:text>at least </xsl:text>
290 <xsl:value-of select="@minOccurs"/>
291 <xsl:text> occurrences required; </xsl:text>
292 <xsl:choose>
293 <xsl:when test="@maxOccurs='unbounded'">
294 <xsl:text>more are allowed</xsl:text>
295 </xsl:when>
296 <xsl:otherwise>
297 <xsl:text>no more than </xsl:text>
298 <xsl:value-of select="@maxOccurs"/>
299 <xsl:text> allowed.</xsl:text>
300 </xsl:otherwise>
301 </xsl:choose>
302 </xsl:otherwise>
303 </xsl:choose>
304 </xsl:otherwise>
305 </xsl:choose>
306 </xsl:template>
307
308 <xsl:template match="xs:attribute" mode="content.occurrences">
309 <xsl:param name="row" select="1"/>
310
311 <xsl:text> </xsl:text>
312 <occurrences row="{$row}">
313 <xsl:apply-templates select="." mode="occurrences"/>
314 </occurrences>
315 <xsl:value-of select="$cr"/>
316 </xsl:template>
317
318 <xsl:template match="xs:attribute" mode="occurrences">
319 <xsl:choose>
320 <xsl:when test="@use='required'">required</xsl:when>
321 <xsl:otherwise>optional</xsl:otherwise>
322 </xsl:choose>
323 </xsl:template>
324
325 <xsl:template match="xs:element|xs:attribute" mode="content.allowedValues">
326 <xsl:param name="row" select="1"/>
327 <xsl:param name="type" select="@type"/>
328
329 <xsl:text> </xsl:text>
330 <allowedValues>
331 <xsl:attribute namespace="" name="row"><xsl:value-of select="$row"/></xsl:attribute>
332 <xsl:value-of select="$cr"/>
333 <xsl:choose>
334 <xsl:when test="$type">
335 <xsl:apply-templates select="/xs:schema/xs:simpleType[@name=substring-after($type,':')]/xs:restriction/xs:enumeration" mode="controlledVocab"/>
336 </xsl:when>
337 <xsl:otherwise>
338 <xsl:apply-templates select="xs:simpleType/xs:restriction/xs:enumeration" mode="controlledVocab"/>
339 </xsl:otherwise>
340 </xsl:choose>
341 <xsl:text> </xsl:text>
342 </allowedValues>
343 <xsl:value-of select="$cr"/>
344 </xsl:template>
345
346 <xsl:template match="xs:element|xs:attribute" mode="content.comment">
347 <xsl:param name="row" select="1"/>
348
349 <xsl:for-each select="xs:annotation/xs:documentation[position() > 1]">
350 <xsl:text> </xsl:text>
351 <comment>
352 <xsl:attribute namespace="" name="row"><xsl:value-of select="$row"/></xsl:attribute>
353 <xsl:value-of select="."/>
354 </comment>
355 <xsl:value-of select="$cr"/>
356 </xsl:for-each>
357 </xsl:template>
358
359 <xsl:template match="@type[.='xs:boolean']" priority="1"
360 mode="type">
361 <xsl:text>boolean (true/false): </xsl:text>
362 <code><xsl:value-of select="."/></code>
363 </xsl:template>
364
365 <xsl:template match="@type[.=concat($vrprefix,':ResourceName')]"
366 priority="1" mode="type">
367 <xsl:text>string with ID attribute: </xsl:text>
368 <code><a href="http://www.ivoa.net/Documents/REC/ReR/VOResource-20080222.html#d:ResourceName">
369 <xsl:text>vr:ResourceName</xsl:text></a></code>
370 </xsl:template>
371
372 <xsl:template match="@type[.=concat($vrprefix,':IdentifierURI')]"
373 priority="1" mode="type">
374 <xsl:text>an IVOA Identifier URI: </xsl:text>
375 <code><a href="http://www.ivoa.net/Documents/REC/ReR/VOResource-20080222.html#d:IdentifierURI">
376 <xsl:text>vr:IdentifierURI</xsl:text></a></code>
377 </xsl:template>
378
379 <xsl:template match="@type[starts-with(., $vrprefix)]" mode="type">
380 <xsl:text>composite: </xsl:text>
381 <code><xsl:value-of select="."/></code>
382 </xsl:template>
383
384 <xsl:template match="@type[starts-with(., 'xs:')]" mode="type">
385 <xsl:choose>
386 <xsl:when test=".='xs:token' or .='xs:string'">
387 <xsl:text>string: </xsl:text>
388 <code><xsl:value-of select="."/></code>
389 </xsl:when>
390 <xsl:when test=".='xs:integer'">
391 <xsl:text>integer</xsl:text>
392 </xsl:when>
393 <xsl:when test=".='xs:NCName'">
394 <xsl:text>a prefixless XML name</xsl:text>
395 </xsl:when>
396 <xsl:when test=".='xs:decimal' or .='xs:float' or .='xs:double'">
397 <xsl:text>floating-point number: </xsl:text>
398 <code><xsl:value-of select="."/></code>
399 </xsl:when>
400 <xsl:when test=".='xs:anyURI'">
401 <xsl:text>a URI: </xsl:text>
402 <code><xsl:value-of select="."/></code>
403 </xsl:when>
404 </xsl:choose>
405 </xsl:template>
406
407 <xsl:template match="@type[starts-with(., /xs:schema/xs:annotation/xs:appinfo/vm:targetPrefix)]" mode="type">
408 <xsl:variable name="type" select="substring-after(.,':')"/>
409
410 <xsl:choose>
411 <xsl:when test="/xs:schema/xs:simpleType[@name=$type]">
412 <xsl:apply-templates select="/xs:schema/xs:simpleType[@name=$type]"
413 mode="type"/>
414 </xsl:when>
415
416 <xsl:when test="/xs:schema/xs:complexType[@name=$type]/xs:simpleContent/xs:extension">
417 <xsl:for-each select="/xs:schema/xs:complexType[@name=$type]/xs:simpleContent/xs:extension">
418
419 <xsl:choose>
420 <xsl:when test="@base='xs:string' or @base='xs:token'">
421 <xsl:text>a string</xsl:text>
422 </xsl:when>
423 <xsl:when test="@base='xs:anyURI'">
424 <xsl:text>a URI</xsl:text>
425 </xsl:when>
426 <xsl:when test="@base='xs:NCName'">
427 <xsl:text>an XML name without a namespace prefix</xsl:text>
428 </xsl:when>
429 <xsl:when test="@base='xs:integer'">
430 <xsl:text>an integer</xsl:text>
431 </xsl:when>
432 <xsl:when test="@base='xs:nonNegativeInteger'">
433 <xsl:text>a non-negative integer (0, 1, ...)</xsl:text>
434 </xsl:when>
435 <xsl:when test="@base='xs:decimal' or @base='xs:float' or @base='xsdouble'">
436 <xsl:text>a floating point number (</xsl:text>
437 <code><xsl:value-of select="@base"/></code>
438 <xsl:text>)</xsl:text>
439 </xsl:when>
440 <xsl:when test="@base='boolean'">
441 <xsl:text>a boolean value (true, false, 0, or 1)</xsl:text>
442 </xsl:when>
443 <xsl:otherwise>
444 <code><xsl:value-of select="@base"/></code>
445 </xsl:otherwise>
446 </xsl:choose>
447 <xsl:text> with optional attributes</xsl:text>
448 </xsl:for-each>
449 </xsl:when>
450
451 <xsl:otherwise>
452 <xsl:text>composite: </xsl:text>
453 <code><a href="#d:{substring-after(.,':')}">
454 <xsl:value-of select="."/></a></code>
455 </xsl:otherwise>
456 </xsl:choose>
457 </xsl:template>
458
459 <xsl:template match="xs:simpleType" mode="type">
460 <xsl:choose>
461 <xsl:when test="xs:restriction[@base='xs:string' or @base='xs:token']/xs:enumeration">
462 <xsl:text>string with controlled vocabulary</xsl:text>
463 </xsl:when>
464
465 <xsl:when test="xs:restriction[@base='xs:string' or @base='xs:token']/xs:pattern">
466 <xsl:text>string of the form:</xsl:text>
467 <i><xsl:value-of select="xs:restriction/xs:pattern/@value"/></i>
468 </xsl:when>
469
470 <xsl:otherwise>string</xsl:otherwise>
471 </xsl:choose>
472 </xsl:template>
473
474 <xsl:template match="@type" mode="type">
475 <code><xsl:value-of select="."/></code>
476 </xsl:template>
477
478 <xsl:template match="xs:enumeration" mode="controlledVocab">
479 <xsl:text> </xsl:text>
480 <value name="{@value}">
481 <xsl:value-of select="xs:annotation/xs:documentation"/>
482 </value>
483 <xsl:value-of select="$cr"/>
484 </xsl:template>
485
486 <xsl:template match="xs:attribute" mode="attributes">
487 <xsl:text> </xsl:text>
488 <attr name="{@name}">
489 <xsl:value-of select="$cr"/>
490 <xsl:apply-templates select="." mode="nextContentItem"/>
491 <xsl:text> </xsl:text>
492 </attr>
493 <xsl:value-of select="$cr"/>
494 </xsl:template>
495
496 <xsl:template match="xs:attribute" mode="nextContentItem">
497 <xsl:param name="row" select="1"/>
498 <xsl:param name="item" select="1"/>
499
500 <xsl:variable name="type" select="@type"/>
501
502 <xsl:choose>
503 <xsl:when test="$item &lt; 2">
504 <xsl:apply-templates select="." mode="content.type">
505 <xsl:with-param name="row" select="$row"/>
506 </xsl:apply-templates>
507 <xsl:apply-templates select="." mode="nextContentItem">
508 <xsl:with-param name="row" select="$row+1"/>
509 <xsl:with-param name="item" select="2"/>
510 </xsl:apply-templates>
511 </xsl:when>
512
513 <xsl:when test="$item &lt; 3">
514 <xsl:apply-templates select="." mode="content.meaning">
515 <xsl:with-param name="row" select="$row"/>
516 </xsl:apply-templates>
517 <xsl:apply-templates select="." mode="nextContentItem">
518 <xsl:with-param name="row" select="$row+1"/>
519 <xsl:with-param name="item" select="3"/>
520 </xsl:apply-templates>
521 </xsl:when>
522
523 <xsl:when test="$item &lt; 4">
524 <xsl:apply-templates select="." mode="content.occurrences">
525 <xsl:with-param name="row" select="$row"/>
526 </xsl:apply-templates>
527 <xsl:apply-templates select="." mode="nextContentItem">
528 <xsl:with-param name="row" select="$row+1"/>
529 <xsl:with-param name="item" select="4"/>
530 </xsl:apply-templates>
531 </xsl:when>
532
533 <xsl:when test="$item &lt; 5 and
534 (xs:simpleType/xs:restriction or
535 (starts-with($type,/xs:schema/xs:annotation/xs:appinfo/vm:targetPrefix) and
536 /xs:schema/xs:simpleType[@name=substring-after($type,':')]/xs:restriction))">
537 <xsl:apply-templates select="." mode="content.allowedValues">
538 <xsl:with-param name="row" select="$row"/>
539 </xsl:apply-templates>
540 <xsl:apply-templates select="." mode="nextContentItem">
541 <xsl:with-param name="row" select="$row+1"/>
542 <xsl:with-param name="item" select="5"/>
543 </xsl:apply-templates>
544 </xsl:when>
545
546 <xsl:when test="$item &lt; 6 and @default and $showDefaults">
547 <xsl:apply-templates select="." mode="content.default">
548 <xsl:with-param name="row" select="$row"/>
549 </xsl:apply-templates>
550 <xsl:apply-templates select="." mode="nextContentItem">
551 <xsl:with-param name="row" select="$row+1"/>
552 <xsl:with-param name="item" select="6"/>
553 </xsl:apply-templates>
554 </xsl:when>
555
556 <xsl:when test="$item &lt; 7 and count(xs:annotation/xs:documentation) > 1">
557 <xsl:apply-templates select="." mode="content.comment">
558 <xsl:with-param name="row" select="$row"/>
559 </xsl:apply-templates>
560 </xsl:when>
561 </xsl:choose>
562 </xsl:template>
563
564 <xsl:template match="*" mode="xsdcode">
565 <xsl:param name="indent"/>
566 <xsl:param name="step" select="$indentstep"/>
567
568 <xsl:value-of select="$indent"/>
569 <xsl:text>&lt;</xsl:text>
570 <xsl:value-of select="concat($xsdprefix, ':', local-name())"/>
571 <xsl:apply-templates select="." mode="formatAttrs">
572 <xsl:with-param name="elindent" select="$indent"/>
573 </xsl:apply-templates>
574 <xsl:choose>
575 <xsl:when test="*[local-name()!='annotation']">
576 <xsl:text>&gt;</xsl:text>
577 <xsl:value-of select="$cr"/>
578 <xsl:apply-templates select="*[local-name()!='annotation']"
579 mode="xsdcode">
580 <xsl:with-param name="indent" select="concat($indent,$step)"/>
581 </xsl:apply-templates>
582 <xsl:value-of select="$indent"/>
583 <xsl:text>&lt;/</xsl:text>
584 <xsl:value-of select="concat($xsdprefix, ':', local-name())"/>
585 <xsl:text>&gt;</xsl:text>
586 </xsl:when>
587 <xsl:when test="*">
588 <xsl:text>/&gt;</xsl:text>
589 </xsl:when>
590 <xsl:when test="text()">
591 <xsl:text>&gt;</xsl:text>
592 <xsl:value-of select="text()"/>
593 <xsl:text>&lt;/</xsl:text>
594 <xsl:value-of select="concat($xsdprefix, ':', local-name())"/>
595 <xsl:text>&gt;</xsl:text>
596 </xsl:when>
597 <xsl:otherwise>
598 <xsl:text>/&gt;</xsl:text>
599 </xsl:otherwise>
600 </xsl:choose>
601 <xsl:value-of select="$cr"/>
602 </xsl:template>
603
604 <xsl:template match="*" mode="formatAttrs">
605 <xsl:param name="elindent"/>
606 <xsl:param name="indent">
607 <xsl:value-of select="$elindent"/>
608 <xsl:text> </xsl:text>
609 <xsl:call-template name="indentFor">
610 <xsl:with-param name="in" select="concat($xsdprefix,local-name())"/>
611 </xsl:call-template>
612 </xsl:param>
613 <xsl:param name="c" select="count(@*)"/>
614 <xsl:param name="to"/>
615
616 <xsl:variable name="i" select="count(@*)-$c+1"/>
617 <xsl:variable name="appended">
618 <xsl:apply-templates select="@*[$i]" mode="appendAttr">
619 <xsl:with-param name="to" select="$to"/>
620 <xsl:with-param name="indent" select="$indent"/>
621 </xsl:apply-templates>
622 </xsl:variable>
623
624 <xsl:choose>
625 <xsl:when test="$c > 1">
626 <xsl:apply-templates select="." mode="formatAttrs">
627 <xsl:with-param name="to" select="$appended"/>
628 <xsl:with-param name="c" select="$c - 1"/>
629 <xsl:with-param name="indent" select="$indent"/>
630 </xsl:apply-templates>
631 </xsl:when>
632 <xsl:otherwise>
633 <xsl:value-of select="$appended"/>
634 <xsl:if test="$appended">
635 <xsl:text> </xsl:text>
636 </xsl:if>
637 </xsl:otherwise>
638 </xsl:choose>
639 </xsl:template>
640
641 <xsl:template match="@*" mode="appendAttr">
642 <xsl:param name="to"/>
643 <xsl:param name="indent"/>
644 <xsl:param name="maxlen" select="$maxcodelen"/>
645 <xsl:variable name="attr">
646 <xsl:apply-templates select="." mode="formatAttr"/>
647 </xsl:variable>
648
649 <xsl:value-of select="$to"/>
650 <xsl:if test="string-length($attr)+string-length($to)+string-length($attr) &gt; $maxcodelen">
651 <xsl:value-of select="$cr"/>
652 <xsl:value-of select="$indent"/>
653 </xsl:if>
654 <xsl:value-of select="$attr"/>
655 </xsl:template>
656
657 <xsl:template match="@*" mode="formatAttr">
658 <xsl:text> </xsl:text>
659 <xsl:value-of select="local-name()"/>
660 <xsl:text>="</xsl:text>
661 <xsl:value-of select="."/>
662 <xsl:text>"</xsl:text>
663 </xsl:template>
664
665 <xsl:template name="indentFor">
666 <xsl:param name="in"/>
667 <xsl:if test="$in">
668 <xsl:text> </xsl:text>
669 <xsl:call-template name="indentFor">
670 <xsl:with-param name="in" select="substring($in,2)"/>
671 </xsl:call-template>
672 </xsl:if>
673 </xsl:template>
674
675 <xsl:template match="xs:complexType|xs:simpleType" mode="schemaDefTitle">
676 <xsl:value-of select="concat(/xs:schema/xs:annotation/xs:appinfo/vm:targetPrefix,':',@name)"/>
677 <xsl:text> Type Schema Definition</xsl:text>
678 </xsl:template>
679
680 <xsl:template match="xs:complexType|xs:simpleType" mode="attributeTitle">
681 <xsl:value-of select="concat(/xs:schema/xs:annotation/xs:appinfo/vm:targetPrefix,':',@name)"/>
682 <xsl:text> Attributes</xsl:text>
683 </xsl:template>
684
685 <xsl:template match="xs:complexType" mode="MetadataTitle">
686 <xsl:value-of select="concat(/xs:schema/xs:annotation/xs:appinfo/vm:targetPrefix,':',@name)"/>
687 <xsl:choose>
688 <xsl:when test=".//xs:extension">
689 <xsl:text> Extension Metadata Elements</xsl:text>
690 </xsl:when>
691 <xsl:otherwise>
692 <xsl:text> Metadata Elements</xsl:text>
693 </xsl:otherwise>
694 </xsl:choose>
695 </xsl:template>
696
697 </xsl:stylesheet>

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