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 &gt; 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(., '&#10;')">
        !           162:         <xsl:value-of select="substring-after(., '&#10;')"/>
        !           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>&gt;= <xsl:value-of select="@value"/></tt></li>
                    292:   </xsl:template>
                    293:   
                    294:   <xsl:template match="xs:minExclusive">
                    295:     <li><tt>&gt; <xsl:value-of select="@value"/></tt></li>
                    296:   </xsl:template>
                    297:   
                    298:   <xsl:template match="xs:maxInclusive">
                    299:     <li><tt>&lt;= <xsl:value-of select="@value"/></tt></li>
                    300:   </xsl:template>
                    301:   
                    302:   <xsl:template match="xs:maxExclusive">
                    303:     <li><tt>&lt; <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>