opale_to_hdoc_regle2.xsl 18.5 KB
Newer Older
1 2 3
<?xml version="1.0" encoding="UTF-8"?>

<!-- Namespaces -->
4 5 6 7 8
<xsl:stylesheet xmlns="http://www.utc.fr/ics/hdoc/xhtml"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs" version="2.0" xmlns:sc="http://www.utc.fr/ics/scenari/v3/core"
    xmlns:sp="http://www.utc.fr/ics/scenari/v3/primitive" xmlns:op="utc.fr:ics/opale3">

9 10 11
    <xsl:template match="sc:item">
        <xsl:apply-templates/>
    </xsl:template>
12

13 14
    <!-- MODULE  -->
    <xsl:template match="op:ue">
15

16 17
        <!-- RNG -->
        <xsl:processing-instruction name="oxygen">
18
            RNGSchema="http://hdoc.crzt.fr/schemas/xhtml/hdoc1-xhtml.rng" type="xml"
19
        </xsl:processing-instruction>
20

21 22
        <!-- HTML -->
        <html>
23

24 25 26 27
            <!-- MODULE"s HEADER -->
            <head>
                <xsl:apply-templates select="op:ueM/sp:title"/>
                <meta charset="utf-8"/>
28
                <meta content="HdocConverter/Opale3.4" name="generator"/>
29 30
                <xsl:apply-templates select="op:ueM/sp:info"/>
            </head>
31

32 33 34
            <!-- MODULE's COMPONENTS  -->
            <body>
                <xsl:apply-templates select="child::*[name() != 'op:ueM']"/>
Esquilax76's avatar
Esquilax76 committed
35 36 37 38 39 40 41 42
                <section data-hdoc-type="references">
                    <header>
                        <h1>Liste des grains liés</h1>
                    </header>
                    <li>
                        <xsl:apply-templates mode="ref" select=".//sp:comp[op:pbTi/sp:title = 'Voir aussi']"/>
                    </li>
                </section>
43 44 45
            </body>
        </html>
    </xsl:template>
46

47 48
    <!-- Information -->
    <xsl:template match="op:ueM/sp:info">
49 50 51
        <xsl:apply-templates select="op:info/sp:keywds/op:keywds/sp:keywd"/>
        <xsl:apply-templates select="op:info/sp:cc"/>
        <xsl:apply-templates select="op:info/sp:cpyrgt/op:sPara/sc:para"/>
52
    </xsl:template>
53

54
    <!-- Titles -->
Esquilax76's avatar
Esquilax76 committed
55
    <xsl:template match="op:uM/sp:title | op:expUcDivM/sp:title | op:ueDivM/sp:title | op:exeM/sp:title">
56 57 58
        <h1>
            <xsl:value-of select="."/>
        </h1>
59 60
    </xsl:template>
    <xsl:template match="op:ueM/sp:title">
61 62 63
        <title>
            <xsl:value-of select="."/>
        </title>
64 65
    </xsl:template>
    <xsl:template match="op:pbTi/sp:title">
66 67 68
        <h6>
            <xsl:value-of select="."/>
        </h6>
69
    </xsl:template>
70

71 72
    <!-- Subtitle -->
    <xsl:template match="op:uM/sp:sTitle">
73 74 75
        <h2>
            <xsl:value-of select="."/>
        </h2>
76
    </xsl:template>
77

78 79
    <!-- Liscences -->
    <xsl:template match="op:ueM/sp:info/op:info/sp:cc">
80
        <meta name="rights" content="{.}"/>
81 82 83
    </xsl:template>
    <xsl:template match="op:uM/sp:info/op:info/sp:cc">
        <div data-hdoc-type="rights">
84
            <xsl:value-of select="."/>
85 86
        </div>
    </xsl:template>
87

88 89
    <!-- Keywords -->
    <xsl:template match="op:ueM/sp:info/op:info/sp:keywds/op:keywds/sp:keywd">
90
        <meta name="keywords" content="{.}"/>
91 92 93
    </xsl:template>
    <xsl:template match="op:uM/sp:info/op:info/sp:keywds">
        <div data-hdoc-type="tags">
94
            <xsl:apply-templates select="./op:keywds/sp:keywd"/>
95 96 97
        </div>
    </xsl:template>
    <xsl:template match="op:uM/sp:info/op:info/sp:keywds/op:keywds/sp:keywd">
98 99 100
        <span>
            <xsl:value-of select="."/>
        </span>
101
    </xsl:template>
102

103 104
    <!-- Author -->
    <xsl:template match="op:ueM/sp:info/op:info/sp:cpyrgt/op:sPara/sc:para">
105
        <meta name="author" content="{.}"/>
106 107 108
    </xsl:template>
    <xsl:template match="op:uM/sp:info/op:info/sp:cpyrgt/op:sPara/sc:para">
        <div data-hdoc-type="author">
109
            <xsl:value-of select="."/>
110 111
        </div>
    </xsl:template>
112

113
    <!-- Division -->
114
    <xsl:template match="op:ue/sp:div | op:ueDiv/sp:div">
Esquilax76's avatar
Esquilax76 committed
115
        <section data-hdoc-type="division">
116 117 118 119 120 121 122 123 124 125
            <header>
                <xsl:apply-templates select="./op:ueDiv/op:ueDivM/sp:title"/>
                <xsl:apply-templates
                    select="./op:ueDiv/op:ueDivM/sp:info/op:info/sp:cpyrgt/op:sPara/sc:para"/>
                <xsl:apply-templates select="./op:ueDiv/op:ueDivM/sp:info/op:info/sp:cc"/>
            </header>

            <!-- check for sub-division -->
            <xsl:apply-templates select="./op:ueDiv/sp:div"/>

Esquilax76's avatar
Esquilax76 committed
126
            <!-- currently : grain & introduction & conclusion || adding "exercice redactionnel" || adding "actvite d'apprentissage" -->
127 128 129
            <xsl:apply-templates select="./op:ueDiv/sp:intro"/>
            <xsl:apply-templates select="./op:ueDiv/sp:courseUc"/>
            <xsl:apply-templates select="./op:ueDiv/sp:conclu"/>
Esquilax76's avatar
Esquilax76 committed
130 131
            <xsl:apply-templates select="./op:ueDiv/sp:practUc"/>
            <xsl:apply-templates select="./op:ueDiv/sp:courseUa"/>
132 133 134 135 136

            <footer>
                <xsl:apply-templates select="./op:ueDiv/op:ueDivM/sp:info/op:info/sp:keywds"/>
            </footer>
        </section>
137
    </xsl:template>
138

139 140
    <!-- Activity -->
    <xsl:template match="sp:courseUa">
Esquilax76's avatar
Esquilax76 committed
141
        <section data-hdoc-type="activity">
142 143
            <header>
                <xsl:apply-templates select="./op:courseUa/op:uM/sp:title"/>
144 145
                <xsl:apply-templates
                    select="./op:courseUa/op:uM/sp:info/op:info/sp:cpyrgt/op:sPara/sc:para"/>
146 147
                <xsl:apply-templates select="./op:courseUa/op:uM/sp:info/op:info/sp:cc"/>
            </header>
148

149
            <!-- currently : grain & introduction & conclusion -->
150
            <xsl:apply-templates select="./op:courseUa/sp:obj"/>
151
            <xsl:apply-templates select="./op:courseUa/sp:intro"/>
152
            <xsl:apply-templates select="./op:courseUa/sp:courseUc"/>
153
            <xsl:apply-templates select="./op:courseUa/sp:conclu"/>
154

155 156
            <!-- overview questions : regroup questions into a section-->
            <xsl:if test="./op:courseUa/sp:quest">
Esquilax76's avatar
Esquilax76 committed
157
                <section data-hdoc-type="synthesis">
158 159 160 161 162
                    <header>
                        <h1>Questions de synthèse</h1>
                    </header>
                    <!-- a conclusion has only a bloc -->
                    <div>
163 164
                        <xsl:apply-templates select="./op:courseUa/sp:quest"/>
                    </div>
165 166
                </section>
            </xsl:if>
167

168 169
            <footer>
                <xsl:apply-templates select="./op:courseUa/op:uM/sp:info/op:info/sp:keywds"/>
170
            </footer>
171 172
        </section>
    </xsl:template>
173

174 175
    <!-- Grain -->
    <xsl:template match="sp:courseUc">
Esquilax76's avatar
Esquilax76 committed
176
        <section data-hdoc-type="grain">
177 178
            <header>
                <xsl:apply-templates select="./op:expUc/op:uM/sp:title"/>
179 180
                <xsl:apply-templates
                    select="./op:expUc/op:uM/sp:info/op:info/sp:cpyrgt/op:sPara/sc:para"/>
181 182
                <xsl:apply-templates select="./op:expUc/op:uM/sp:info/op:info/sp:cc"/>
            </header>
183 184

            <!-- call for blocs -->
185
            <xsl:apply-templates select="./op:expUc/sp:pb/op:pb/*"/>
186 187 188 189

            <!-- call for parts -->
            <xsl:apply-templates select="./op:expUc/sp:div"/>

190 191
            <footer>
                <xsl:apply-templates select="./op:expUc/op:uM/sp:info/op:info/sp:keywds"/>
192
            </footer>
193 194
        </section>
    </xsl:template>
195

196 197
    <!-- Aims (aims don't have metadata) -->
    <xsl:template match="sp:obj">
Esquilax76's avatar
Esquilax76 committed
198
        <section data-hdoc-type="aims">
199 200 201 202 203
            <header>
                <h1>Objectifs</h1>
            </header>
            <div>
                <xsl:apply-templates select="./op:sTxt/*"/>
204
            </div>
205 206
        </section>
    </xsl:template>
207

208 209 210 211 212 213 214 215 216
    <!-- Introduction (a introduction doesn't have metadata) -->
    <xsl:template match="sp:intro">
        <section data-hdoc-type="introduction">
            <header>
                <h1>Introduction</h1>
            </header>
            <!-- a introduction has only a bloc -->
            <div>
                <xsl:apply-templates select="./op:res/*"/>
217
            </div>
218 219
        </section>
    </xsl:template>
220

221 222 223 224 225 226 227 228 229
    <!-- Conclusion (a conclusion doesn't have metadata) -->
    <xsl:template match="sp:conclu">
        <section data-hdoc-type="conclusion">
            <header>
                <h1>Conclusion</h1>
            </header>
            <!-- a conclusion has only a bloc -->
            <div>
                <xsl:apply-templates select="./op:res/*"/>
230
            </div>
231 232
        </section>
    </xsl:template>
233

234 235 236 237 238
    <xsl:template match="sp:filtered">
        <xsl:if test="op:filter/sp:exclude/text() = 'short'">
            <xsl:apply-templates select="./op:res/*"/>
        </xsl:if>
    </xsl:template>
239

240 241 242 243
    <!-- Overview questions (fr : question de synthèse) -->
    <xsl:template match="sp:quest">
        <xsl:apply-templates select="./op:txt/*"/>
    </xsl:template>
244

245
    <!-- Parts (of a Grain) -->
246
    <xsl:template match="op:expUc/sp:div | op:expUcDiv/sp:div">
Esquilax76's avatar
Esquilax76 committed
247
        <section data-hdoc-type="part">
248 249 250 251
            <header>
                <!-- only title - parts don't have other metadata -->
                <xsl:apply-templates select="./op:expUcDiv/op:expUcDivM/sp:title"/>
            </header>
252 253 254 255 256 257 258

            <!-- call for blocs -->
            <xsl:apply-templates select="./op:expUcDiv/sp:pb/op:pb/*"/>

            <!-- call for parts -->
            <xsl:apply-templates select="./op:expUcDiv/sp:div"/>

259 260
        </section>
    </xsl:template>
Esquilax76's avatar
Esquilax76 committed
261 262 263 264 265 266 267
    
    <!-- "Exercice redactionnel" -->
    <xsl:template match="sp:practUc">
        <section data-hdoc-type="exercise">
            <header>
                <xsl:apply-templates select="op:practUc/op:exeM/sp:title"/>
            </header>
268 269
			<xsl:apply-templates select="op:practUc/sp:desc"/>
			<xsl:apply-templates select="op:practUc/sp:quest"/>
Esquilax76's avatar
Esquilax76 committed
270 271 272
        </section>
    </xsl:template>
    
273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
	<xsl:template match="op:practUc/sp:desc">
        <div data-hdoc-type="description">
			<xsl:value-of select="*"/>
		</div>
    </xsl:template>
	
	<xsl:template match="op:practUc/sp:quest">
        <div data-hdoc-type="question">
			<div data-hdoc-type="description">
				<xsl:value-of select="op:practUcQ/sp:desc/*"/>
			</div>
			<xsl:if test="op:practUcQ/sp:sol">
				<div data-hdoc-type="solution">
					<xsl:value-of select="op:practUcQ/sp:sol/*"/>
				</div>
			</xsl:if>
		</div>
    </xsl:template>
291

292
    <!-- ***** BLOCS START ***** -->
293

294
    <xsl:template match="sp:res[op:resInfoM/sp:index/text() = 'img']">
295
        <xsl:variable name="name" select="tokenize(@sc:refUri, '/')[last()]"/>
296 297
        <img src="re/{$name}" alt="{$name}"/>
    </xsl:template>
298

299
    <xsl:template match="sp:res[op:resInfoM/sp:index/text() = 'graph']">
300
        <xsl:variable name="name" select="tokenize(@sc:refUri, '/')[last()]"/>
301 302
        <object data="re/{$name}" type="application/vnd.oasis.opendocument.graphics"/>
    </xsl:template>
303

304
    <xsl:template match="sp:res[op:resInfoM/sp:index/text() = 'tab']">
305
        <xsl:variable name="name" select="tokenize(@sc:refUri, '/')[last()]"/>
306
        <object data="re/{$name}" type="application/vnd.oasis.opendocument.spreadsheet"/>
307
    </xsl:template> 
308

309 310
    <!-- content Information : no microformat -->
    <xsl:template match="sp:pb/op:pb/sp:info">
311
        <div data-hdoc-type="information">
312 313
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
314 315 316 317 318
        </div>
    </xsl:template>
    <!-- content definition : definition -->
    <xsl:template match="sp:pb/op:pb/sp:def">
        <div data-hdoc-type="definition">
319 320
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
321 322 323 324 325
        </div>
    </xsl:template>
    <!-- content example : example -->
    <xsl:template match="sp:pb/op:pb/sp:ex">
        <div data-hdoc-type="example">
326 327
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
328 329 330 331 332
        </div>
    </xsl:template>
    <!-- content remark : remark -->
    <xsl:template match="sp:pb/op:pb/sp:rem">
        <div data-hdoc-type="remark">
333 334
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
335 336 337 338 339
        </div>
    </xsl:template>
    <!-- content advice : advice -->
    <xsl:template match="sp:pb/op:pb/sp:adv">
        <div data-hdoc-type="advice">
340 341
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
342 343 344 345 346
        </div>
    </xsl:template>
    <!-- content warning : warning -->
    <xsl:template match="sp:pb/op:pb/sp:warning">
        <div data-hdoc-type="warning">
347 348
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
349 350 351 352 353
        </div>
    </xsl:template>
    <!-- content complement : complement -->
    <xsl:template match="sp:pb/op:pb/sp:comp">
        <div data-hdoc-type="complement">
354 355
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
356 357
        </div>
    </xsl:template>
358
    <!-- content method : method -->
359 360
    <xsl:template match="sp:pb/op:pb/sp:meth">
        <div data-hdoc-type="advice">
361 362
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
363 364 365 366 367
        </div>
    </xsl:template>
    <!-- contenu review : complement -->
    <xsl:template match="sp:pb/op:pb/sp:remind">
        <div data-hdoc-type="complement">
368 369
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
370 371 372 373 374
        </div>
    </xsl:template>
    <!-- content fondamental : emphasis -->
    <xsl:template match="sp:pb/op:pb/sp:basic">
        <div data-hdoc-type="emphasis">
375 376
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
377 378
        </div>
    </xsl:template>
379
    <!-- content syntax : complement -->
380
    <xsl:template match="sp:pb/op:pb/sp:syntax">
381
        <div  data-hdoc-type="information">
382 383
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
384 385
        </div>
    </xsl:template>
386
    <!-- content legal : complement -->
387
    <xsl:template match="sp:pb/op:pb/sp:legal">
388
        <div  data-hdoc-type="information">
389 390
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
391 392
        </div>
    </xsl:template>
393
    
394 395 396
    <!-- content simulation :  no microformat (we lose this information) -->
    <xsl:template match="sp:pb/op:pb/sp:simul">
        <div>
397 398
            <xsl:apply-templates select="./op:pbTi/sp:title"/>
            <xsl:apply-templates select="op:res/*"/>
399 400
        </div>
    </xsl:template>
401

402
    <!-- ***** BLOCS END ***** -->
403

404
    <!-- ***** TEXT START ***** -->
405

406 407
    <!-- Simple text -->
    <xsl:template match="op:res/sp:txt">
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537
        <xsl:apply-templates select="./op:txt/*"/>
    </xsl:template>

    <!-- Paragraph -->
    <xsl:template match="sc:para">
        <p>
            <xsl:apply-templates select="./* | ./text()"/>
        </p>
    </xsl:template>

    <!-- ***** PARAGRAPH ITEMS START ***** -->

    <!-- citation -->
    <xsl:template match="sc:para/sc:inlineStyle[@role='quote']" priority="2">
        <q>
            <xsl:value-of select="."/>
        </q>
    </xsl:template>
    <!-- important -->
    <xsl:template match="sc:para/sc:inlineStyle[@role='emp']" priority="2">
        <em>
            <xsl:value-of select="."/>
        </em>
    </xsl:template>
    <!-- foreign term -->
    <xsl:template match="sc:para/sc:inlineStyle[@role='spec']" priority="2">
        <i>
            <xsl:value-of select="."/>
        </i>
    </xsl:template>
    <!-- syntax -->
    <xsl:template match="sc:para/sc:inlineStyle[@role='code']" priority="2">
        <span data-hdoc-type="syntax">
            <xsl:value-of select="."/>
        </span>
    </xsl:template>

    <xsl:template match="sc:para/sc:uLink" priority="2">
        <xsl:value-of select="."/>
    </xsl:template>
    <!-- exponent -->
    <xsl:template match="sc:para/sc:textLeaf[@role='exp']" priority="2">
        <sup>
            <xsl:value-of select="."/>
        </sup>
    </xsl:template>
    <!-- subscript -->
    <xsl:template match="sc:para/sc:textLeaf[@role='ind']" priority="2">
        <sub>
            <xsl:value-of select="."/>
        </sub>
    </xsl:template>
    <!-- latex -->
    <xsl:template match="sc:para/sc:textLeaf[@role='mathtex']" priority="2">
        <span data-hdoc-type="latex">
            <xsl:value-of select="."/>
        </span>
    </xsl:template>
    <!-- default behaviour for other balises -->
    <xsl:template match="sc:para/sc:inlineStyle|sc:para/sc:textLeaf" priority="1">
        <xsl:value-of select="."/>
    </xsl:template>

    <xsl:template match="sc:para/sc:phrase[@role='url']">
        <xsl:apply-templates select="op:urlM/sp:url"/>
    </xsl:template>

    <xsl:template match="op:urlM/sp:url">
        <a href="{text()}">
            <xsl:value-of select="text()"/>
        </a>
    </xsl:template>

    <!-- ***** PARAGRAPH ITEMS END ***** -->

    <!-- List-->
    <xsl:template match="sc:itemizedList">
        <ul>
            <xsl:apply-templates select="./sc:listItem"/>
        </ul>
    </xsl:template>

    <!-- Ordered list -->
    <xsl:template match="sc:orderedList">
        <ol>
            <xsl:apply-templates select="./sc:listItem"/>
        </ol>
    </xsl:template>

    <!-- ***** LIST ITEMS START ***** -->

    <!-- List item -->
    <xsl:template match="sc:listItem">
        <li>
            <xsl:apply-templates select="./*"/>
        </li>
    </xsl:template>

    <!-- ***** LIST ITEMS END ***** -->

    <!-- Table -->
    <xsl:template match="sc:table">
        <table>
            <xsl:apply-templates select="./*"/>
        </table>
    </xsl:template>

    <!-- ***** TABLE ITEMS START ***** -->

    <!-- caption -->
    <xsl:template match="sc:table/sc:caption">
        <caption>
            <xsl:value-of select="."/>
        </caption>
    </xsl:template>
    <!-- table row -->
    <xsl:template match="sc:table/sc:row">
        <tr>
            <xsl:apply-templates select="./*"/>
        </tr>
    </xsl:template>
    <!-- table cell -->
    <xsl:template match="sc:table/sc:row/sc:cell">
        <td>
            <xsl:apply-templates select="./*"/>
        </td>
    </xsl:template>

    <!-- ***** TABLE ITEMS END ***** -->

538
    <!-- ***** TEXT END ***** -->
539

540 541
    <xsl:template match="op:res/sp:listing">
        <p>
542
            <xsl:value-of select="./op:code/sc:code"/>
543 544
        </p>
    </xsl:template>
545 546

    <xsl:template match="*"/>
Esquilax76's avatar
Esquilax76 committed
547 548 549 550 551 552
    
    <xsl:template mode="ref" match="sp:comp[op:pbTi/sp:title = 'Voir aussi']">
        <xsl:for-each select="./op:res//sc:uLink">
                <ul><xsl:value-of select="."/> - <xsl:value-of select="./@sc:refUri"/></ul>
        </xsl:for-each> 
    </xsl:template>
553

554
</xsl:stylesheet>