Annotation of modules/damieng/schema_documentation/XMLSchema.xsl, revision 1.2
1.1 damieng 1: <?xml version="1.0" encoding='UTF-8' ?>
2:
3: <xsl:stylesheet version="1.0"
4: xmlns:xs="http://www.w3.org/2001/XMLSchema"
5: xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
6: exclude-result-prefixes="xs">
7:
8: <xsl:output method="html" indent="yes"
9: doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>
10:
1.2 ! damieng 11: <xsl:param name="titre"/>
1.1 damieng 12: <xsl:param name="jaxe-uri-xsl"/>
13: <xsl:variable name="uri-xsl"><xsl:call-template name="rep-uri"><xsl:with-param name="chemin" select="$jaxe-uri-xsl"/></xsl:call-template></xsl:variable>
1.2 ! damieng 14: <xsl:variable name="langue">
! 15: <xsl:choose>
! 16: <xsl:when test="/xs:schema/@xml:lang"><xsl:value-of select="translate(/xs:schema/@xml:lang, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/></xsl:when>
! 17: <xsl:otherwise>fr</xsl:otherwise>
! 18: </xsl:choose>
! 19: </xsl:variable>
1.1 damieng 20: <xsl:variable name="messages" select="document(concat($uri-xsl, '/XMLSchema_messages_', $langue, '.xml'))/messages"/>
21:
22: <xsl:template match="xs:schema">
23: <html>
24: <head>
1.2 ! damieng 25: <title><xsl:value-of select="$titre"/></title>
1.1 damieng 26: <style type="text/css">
27: body { color: #000000; background: #FFFFFF }
1.2 ! damieng 28: .documentation { font-family: monospace; color: #005500; white-space: pre-line; margin-bottom: 1em }
1.1 damieng 29: .grandlien { font-size: 120%; font-weight: bold }
30: .nomtitre { color: #550000 }
31: .nomattribut { color: #000055; font-weight: bold }
32: .indentation { margin-left: 2em; margin-top: 1em; margin-bottom: 1em }
1.2 ! damieng 33: ul { margin-top: 0.5em }
1.1 damieng 34: </style>
35: </head>
36: <body>
37: <div align="center">
1.2 ! damieng 38: <h1><xsl:value-of select="$titre"/></h1>
1.1 damieng 39: </div>
40: <br/>
41: <span class="grandlien">
42: <a href="#index"><xsl:value-of select="$messages/message[@label='Aller à l index']"/></a><br/>
43: </span>
44: <hr/>
45: <xsl:apply-templates/>
46: <br/>
47: <a name="index"/>
48: <h3><xsl:value-of select="$messages/message[@label='Index']"/></h3>
49: <xsl:for-each select="//*[local-name()!='attribute' and @name!='']">
50: <xsl:sort select="@name"/>
51: <xsl:variable name="numero" select="count(preceding::*[@name=current()/@name])"/>
52: <xsl:variable name="total" select="count(//*[@name=current()/@name])"/>
53: <a href="#{@name}_{$numero}"><xsl:value-of select="@name"/></a>
54: <xsl:if test="$total > 1 and ancestor::*[@name!=''][1]">
1.2 ! damieng 55: (<xsl:value-of select="$messages/message[@label='sous']"/><xsl:text> </xsl:text>
! 56: <xsl:value-of select="ancestor::*[@name!=''][1]/@name"/>)
1.1 damieng 57: </xsl:if>
58: <br/>
59: </xsl:for-each>
60: </body>
61: </html>
62: </xsl:template>
63:
64: <xsl:template match="xs:element">
65: <xsl:choose>
66: <xsl:when test="@ref">
67: <xsl:variable name="localref">
68: <xsl:choose>
69: <xsl:when test="contains(@ref,':')">
70: <xsl:value-of select="substring-after(@ref,':')"/>
71: </xsl:when>
72: <xsl:otherwise>
73: <xsl:value-of select="@ref"/>
74: </xsl:otherwise>
75: </xsl:choose>
76: </xsl:variable>
77: <xsl:variable name="numero">
78: <xsl:for-each select="/xs:schema/xs:element[@name=$localref][1]">
79: <xsl:value-of select="count(preceding::*[@name=current()/@name])"/>
80: </xsl:for-each>
81: </xsl:variable>
82: <a href="#{$localref}_{$numero}"><xsl:value-of select="@ref"/></a>
83: <br/>
84: </xsl:when>
85: <xsl:otherwise>
1.2 ! damieng 86: <xsl:variable name="numero" select="count(preceding::*[@name=current()/@name])"/>
1.1 damieng 87: <a name="{@name}_{$numero}"/>
1.2 ! damieng 88: <h3><xsl:value-of select="$messages/message[@label='Elément']"/><xsl:text> </xsl:text>
! 89: <span class="nomtitre"><xsl:value-of select="@name"/></span></h3>
1.1 damieng 90: <xsl:if test="@type">
1.2 ! damieng 91: <xsl:value-of select="$messages/message[@label='type:']"/><xsl:text> </xsl:text>
! 92: <xsl:call-template name="nomtype">
! 93: <xsl:with-param name="type" select="@type"/>
! 94: </xsl:call-template>
! 95: <br/>
1.1 damieng 96: </xsl:if>
97: <xsl:apply-templates/>
98: <br/>
99: <xsl:if test="parent::xs:schema">
100: <xsl:for-each select="//xs:element[.//xs:element[@ref=current()/@name or substring-after(@ref,':')=current()/@name]] | //xs:group[.//xs:element[@ref=current()/@name or substring-after(@ref,':')=current()/@name]]">
101: <xsl:if test="position() = 1">
1.2 ! damieng 102: <xsl:value-of select="$messages/message[@label='Parents:']"/><xsl:text> </xsl:text>
1.1 damieng 103: </xsl:if>
104: <xsl:if test="position() != 1">, </xsl:if>
1.2 ! damieng 105: <xsl:variable name="numero2" select="count(preceding::*[@name=current()/@name])"/>
1.1 damieng 106: <a href="#{@name}_{$numero2}"><xsl:value-of select="@name"/></a>
107: </xsl:for-each>
108: <br/>
109: </xsl:if>
110: <xsl:if test="not(ancestor::xs:choice or ancestor::xs:sequence)">
111: <hr/>
112: </xsl:if>
113: </xsl:otherwise>
114: </xsl:choose>
115: </xsl:template>
116:
117: <xsl:template match="xs:group">
118: <xsl:choose>
119: <xsl:when test="@ref">
120: <xsl:variable name="localref">
121: <xsl:choose>
122: <xsl:when test="contains(@ref,':')">
123: <xsl:value-of select="substring-after(@ref,':')"/>
124: </xsl:when>
125: <xsl:otherwise>
126: <xsl:value-of select="@ref"/>
127: </xsl:otherwise>
128: </xsl:choose>
129: </xsl:variable>
130: <xsl:variable name="numero">
131: <xsl:for-each select="/xs:schema/xs:group[@name=$localref][1]">
132: <xsl:value-of select="count(preceding::*[@name=current()/@name])"/>
133: </xsl:for-each>
134: </xsl:variable>
135: <a href="#{$localref}_{$numero}"><xsl:value-of select="@ref"/></a>
136: <br/>
137: </xsl:when>
138: <xsl:otherwise>
139: <xsl:variable name="numero" select="count(preceding::*[@name=current()/@name])"/>
140: <a name="{@name}_{$numero}"/>
1.2 ! damieng 141: <h3><xsl:value-of select="$messages/message[@label='Groupe']"/><xsl:text> </xsl:text>
! 142: <span class="nomtitre"><xsl:value-of select="@name"/></span></h3>
1.1 damieng 143: <xsl:apply-templates/>
144: <br/>
145: <xsl:for-each select="//xs:element[.//xs:group[@ref=current()/@name or substring-after(@ref,':')=current()/@name]] | //xs:group[.//xs:group[@ref=current()/@name or substring-after(@ref,':')=current()/@name]]">
146: <xsl:if test="position() = 1">
1.2 ! damieng 147: <xsl:value-of select="$messages/message[@label='Parents:']"/><xsl:text> </xsl:text>
1.1 damieng 148: </xsl:if>
149: <xsl:if test="position() != 1">, </xsl:if>
1.2 ! damieng 150: <xsl:variable name="numero2" select="count(preceding::*[@name=current()/@name])"/>
1.1 damieng 151: <a href="#{@name}_{$numero2}"><xsl:value-of select="@name"/></a>
152: </xsl:for-each>
153: <br/>
154: <hr/>
155: </xsl:otherwise>
156: </xsl:choose>
157: </xsl:template>
158:
159: <xsl:template match="xs:documentation">
1.2 ! damieng 160: <div class="documentation"><xsl:choose>
! 161: <xsl:when test="starts-with(., ' ')">
! 162: <xsl:value-of select="substring-after(., ' ')"/>
! 163: </xsl:when>
! 164: <xsl:otherwise>
! 165: <xsl:value-of select="."/>
! 166: </xsl:otherwise>
! 167: </xsl:choose></div>
! 168: <xsl:if test="parent::xs:annotation/parent::xs:schema">
! 169: <hr/>
! 170: </xsl:if>
1.1 damieng 171: </xsl:template>
172:
173: <xsl:template match="xs:choice">
174: <xsl:value-of select="$messages/message[@label='Choix parmi:']"/>
175: <ul>
176: <xsl:for-each select="*">
177: <li><xsl:apply-templates select="."/></li>
178: </xsl:for-each>
179: </ul>
180: </xsl:template>
181:
182: <xsl:template match="xs:sequence">
183: <xsl:value-of select="$messages/message[@label='Séquence parmi:']"/>
184: <ul>
185: <xsl:for-each select="*">
186: <li><xsl:apply-templates select="."/></li>
187: </xsl:for-each>
188: </ul>
189: </xsl:template>
190:
191: <xsl:template match="xs:complexType">
192: <!--Type complexe-->
193: <xsl:if test="@name">
194: <xsl:variable name="numero" select="count(preceding::*[@name=current()/@name])"/>
195: <a name="{@name}_{$numero}"/>
1.2 ! damieng 196: <h3><xsl:value-of select="$messages/message[@label='Type complexe']"/><xsl:text> </xsl:text>
! 197: <span class="nomtitre"><xsl:value-of select="@name"/></span></h3>
1.1 damieng 198: </xsl:if>
199: <xsl:if test="@ref">
200: <xsl:variable name="numero" select="count(preceding::*[@name=current()/@name])"/>
201: <a href="{@ref}_{$numero}"><xsl:value-of select="@ref"/></a><br/>
202: </xsl:if>
203: <xsl:if test="@mixed='true'">
204: <xsl:value-of select="$messages/message[@label='Peut contenir du texte']"/><br/>
205: </xsl:if>
206: <div class="indentation">
207: <xsl:apply-templates/>
208: </div>
209: <xsl:if test="@name">
210: <hr/>
211: </xsl:if>
212: </xsl:template>
213:
214: <xsl:template match="xs:attribute">
1.2 ! damieng 215: <xsl:value-of select="$messages/message[@label='Attribut']"/><xsl:text> </xsl:text>
! 216: <span class="nomattribut"><xsl:value-of select="@name"/></span>:
1.1 damieng 217: <div class="indentation">
218: <xsl:choose>
219: <xsl:when test="@use='required'">
220: <xsl:value-of select="$messages/message[@label='obligatoire']"/><br/>
221: </xsl:when>
222: <xsl:otherwise>
223: <xsl:value-of select="$messages/message[@label='facultatif']"/><br/>
224: </xsl:otherwise>
225: </xsl:choose>
226: <xsl:if test="@type">
1.2 ! damieng 227: <xsl:value-of select="$messages/message[@label='type:']"/><xsl:text> </xsl:text>
! 228: <xsl:call-template name="nomtype">
! 229: <xsl:with-param name="type" select="@type"/>
! 230: </xsl:call-template>
! 231: <br/>
1.1 damieng 232: </xsl:if>
233: <xsl:apply-templates/>
234: </div>
235: </xsl:template>
236:
237: <xsl:template match="xs:simpleType">
238: <xsl:choose>
239: <xsl:when test="@name!=''">
240: <xsl:variable name="numero" select="count(preceding::*[@name=current()/@name])"/>
241: <a name="{@name}_{$numero}"/>
1.2 ! damieng 242: <h3><xsl:value-of select="$messages/message[@label='Type simple']"/><xsl:text> </xsl:text>
! 243: <span class="nomtitre"><xsl:value-of select="@name"/></span></h3>
1.1 damieng 244: <xsl:apply-templates/>
245: <hr/>
246: </xsl:when>
247: <xsl:otherwise>
248: <xsl:apply-templates/>
249: </xsl:otherwise>
250: </xsl:choose>
251: </xsl:template>
252:
253: <xsl:template match="xs:restriction">
254: <xsl:value-of select="$messages/message[@label='Restriction des valeurs']"/>
255: <xsl:if test="@base!=''">
256: <xsl:text> </xsl:text>
257: <xsl:value-of select="$messages/message[@label='basée sur']"/>
258: <xsl:text> </xsl:text>
259: <xsl:value-of select="@base"/>
260: </xsl:if>
261: <xsl:if test="*">
262: <ul>
263: <xsl:apply-templates/>
264: </ul>
265: </xsl:if>
266: </xsl:template>
267:
1.2 ! damieng 268: <xsl:template match="xs:union">
! 269: <xsl:value-of select="$messages/message[@label='Union des types']"/>
! 270: <ul>
! 271: <xsl:if test="@memberTypes!=''">
! 272: <xsl:call-template name="union-members">
! 273: <xsl:with-param name="types" select="@memberTypes"/>
! 274: </xsl:call-template>
! 275: </xsl:if>
! 276: <xsl:for-each select="xs:simpleType">
! 277: <li><xsl:apply-templates select="."/></li>
! 278: </xsl:for-each>
! 279: </ul>
! 280: </xsl:template>
! 281:
1.1 damieng 282: <xsl:template match="xs:enumeration">
283: <li><tt><xsl:value-of select="@value"/></tt></li>
284: </xsl:template>
285:
286: <xsl:template match="xs:pattern">
287: <li><tt><xsl:value-of select="@value"/></tt></li>
288: </xsl:template>
289:
290: <xsl:template match="xs:minInclusive">
291: <li><tt>>= <xsl:value-of select="@value"/></tt></li>
292: </xsl:template>
293:
294: <xsl:template match="xs:minExclusive">
295: <li><tt>> <xsl:value-of select="@value"/></tt></li>
296: </xsl:template>
297:
298: <xsl:template match="xs:maxInclusive">
299: <li><tt><= <xsl:value-of select="@value"/></tt></li>
300: </xsl:template>
301:
302: <xsl:template match="xs:maxExclusive">
303: <li><tt>< <xsl:value-of select="@value"/></tt></li>
304: </xsl:template>
305:
306: <xsl:template match="xs:attributeGroup">
307: <xsl:choose>
308: <xsl:when test="@ref">
309: <xsl:variable name="localref">
310: <xsl:choose>
311: <xsl:when test="contains(@ref,':')">
312: <xsl:value-of select="substring-after(@ref,':')"/>
313: </xsl:when>
314: <xsl:otherwise>
315: <xsl:value-of select="@ref"/>
316: </xsl:otherwise>
317: </xsl:choose>
318: </xsl:variable>
319: <xsl:variable name="numero">
320: <xsl:for-each select="/xs:schema/xs:attributeGroup[@name=$localref][1]">
321: <xsl:value-of select="count(preceding::*[@name=current()/@name])"/>
322: </xsl:for-each>
323: </xsl:variable>
324: <a href="#{$localref}_{$numero}"><xsl:value-of select="@ref"/></a>
325: <br/>
326: <br/>
327: </xsl:when>
328: <xsl:otherwise>
329: <xsl:variable name="numero" select="count(preceding::*[@name=current()/@name])"/>
330: <a name="{@name}_{$numero}"/>
1.2 ! damieng 331: <h3><xsl:value-of select="$messages/message[@label='Groupe d attributs:']"/><xsl:text> </xsl:text>
! 332: <span class="nomtitre"><xsl:value-of select="@name"/></span></h3>
1.1 damieng 333: <xsl:apply-templates/>
334: <br/>
335: <xsl:for-each select="//xs:element[.//xs:attributeGroup[@ref=current()/@name or substring-after(@ref,':')=current()/@name]] | //xs:attributeGroup[.//xs:attributeGroup[@ref=current()/@name or substring-after(@ref,':')=current()/@name]] | //xs:complexType[.//xs:attributeGroup[@ref=current()/@name or substring-after(@ref,':')=current()/@name] and @name]">
336: <xsl:if test="position() = 1">
1.2 ! damieng 337: <xsl:value-of select="$messages/message[@label='Parents:']"/><xsl:text> </xsl:text>
1.1 damieng 338: </xsl:if>
339: <xsl:if test="position() != 1">, </xsl:if>
1.2 ! damieng 340: <xsl:variable name="numero2" select="count(preceding::*[@name=current()/@name])"/>
1.1 damieng 341: <a href="#{@name}_{$numero2}"><xsl:value-of select="@name"/></a>
342: </xsl:for-each>
343: <br/>
344: <hr/>
345: </xsl:otherwise>
346: </xsl:choose>
347: </xsl:template>
348:
1.2 ! damieng 349: <xsl:template match="xs:import">
! 350: </xsl:template>
! 351:
1.1 damieng 352: <xsl:template name="nomtype">
1.2 ! damieng 353: <xsl:param name="type"/>
1.1 damieng 354: <xsl:variable name="localType">
355: <xsl:choose>
1.2 ! damieng 356: <xsl:when test="contains($type,':')">
! 357: <xsl:value-of select="substring-after($type,':')"/>
1.1 damieng 358: </xsl:when>
359: <xsl:otherwise>
1.2 ! damieng 360: <xsl:value-of select="$type"/>
1.1 damieng 361: </xsl:otherwise>
362: </xsl:choose>
363: </xsl:variable>
364: <xsl:choose>
365: <xsl:when test="/xs:schema/xs:simpleType[@name=$localType]|/xs:schema/xs:complexType[@name=$localType]">
366: <xsl:for-each select="/xs:schema/xs:simpleType[@name=$localType]|/xs:schema/xs:complexType[@name=$localType]">
367: <xsl:variable name="numero" select="count(preceding::*[@name=current()/@name])"/>
368: <a href="#{@name}_{$numero}"><xsl:value-of select="@name"/></a>
369: </xsl:for-each>
370: </xsl:when>
371: <xsl:otherwise>
1.2 ! damieng 372: <tt><xsl:value-of select="$type"/></tt>
1.1 damieng 373: </xsl:otherwise>
374: </xsl:choose>
375: </xsl:template>
376:
1.2 ! damieng 377: <xsl:template name="rep-uri">
! 378: <!-- renvoit le chemin du répertoire d'un fichier à partir de l'URI complète, sous forme d'URI -->
! 379: <xsl:param name="chemin"/>
! 380: <!-- séparateur de chemins ( normalement / mais parfois \ avec file:// sur Windows ? ) -->
! 381: <xsl:variable name="sepuri"><xsl:choose>
! 382: <xsl:when test="contains($chemin, '\')">\</xsl:when>
! 383: <xsl:otherwise>/</xsl:otherwise>
! 384: </xsl:choose></xsl:variable>
! 385: <xsl:choose>
! 386: <xsl:when test="contains($chemin,$sepuri) and contains(substring-after($chemin,$sepuri),$sepuri)">
! 387: <xsl:value-of select="substring-before($chemin,$sepuri)"/><xsl:value-of select="$sepuri"/><xsl:call-template name="rep-uri"><xsl:with-param name="chemin" select="substring-after($chemin,$sepuri)"/></xsl:call-template>
! 388: </xsl:when>
! 389: <xsl:otherwise>
! 390: <xsl:value-of select="substring-before($chemin,$sepuri)"/>
! 391: </xsl:otherwise>
! 392: </xsl:choose>
! 393: </xsl:template>
1.1 damieng 394:
1.2 ! damieng 395: <xsl:template name="union-members">
! 396: <xsl:param name="types"/>
! 397: <xsl:variable name="nt" select="normalize-space($types)"/>
! 398: <xsl:if test="$nt!=''">
! 399: <xsl:choose>
! 400: <xsl:when test="contains($nt,' ')">
! 401: <xsl:call-template name="union-members">
! 402: <xsl:with-param name="types" select="substring-before($nt, ' ')"/>
! 403: </xsl:call-template>
! 404: <xsl:call-template name="union-members">
! 405: <xsl:with-param name="types" select="substring-after($nt, ' ')"/>
! 406: </xsl:call-template>
! 407: </xsl:when>
! 408: <xsl:otherwise>
! 409: <li>
! 410: <xsl:call-template name="nomtype">
! 411: <xsl:with-param name="type" select="$nt"/>
! 412: </xsl:call-template>
! 413: </li>
! 414: </xsl:otherwise>
! 415: </xsl:choose>
! 416: </xsl:if>
! 417: </xsl:template>
! 418:
1.1 damieng 419: </xsl:stylesheet>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>