/[volute]/trunk/projects/ivoapub/ivoatex/schemadoc.xslt
ViewVC logotype

Contents of /trunk/projects/ivoapub/ivoatex/schemadoc.xslt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3293 - (show annotations)
Thu Apr 14 09:44:06 2016 UTC (5 years, 6 months ago) by msdemlei
File size: 26532 byte(s)
ivoatex: no longer generating empty lists of vocabulary terms.


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

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