001 <?xml version="1.0" encoding="UTF-8"?> 002 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 003 xmlns:fn="http://www.w3.org/2005/xpath-functions" 004 xmlns:xs="http://www.w3.org/2001/XMLSchema" 005 xmlns:tm="http://www.datenverdrahten.de/tm" 006 xmlns:epub="http://www.idpf.org/2007/ops" 007 xmlns="http://www.w3.org/1999/xhtml" 008 exclude-result-prefixes="fn tm xs"> 009 010 <!-- Author: T. Meinike 2012 / epub3.xsl - Ausführung über run.cmd 011 EPUB3-Anpassung von epub.xsl zum Tutorial http://www.tekom.de/upload/3383/OTS11_Meinike.pdf --> 012 013 <!-- Globale Vorgaben - variable IDs, Dateinamen und Pfade --> 014 <xsl:variable name="bookid" select="'BookId'"/> 015 <xsl:variable name="contentfile" select="'content.opf'"/> 016 <xsl:variable name="tocfile" select="'toc.html'"/> 017 <xsl:variable name="ncxfile" select="'toc.ncx'"/> 018 <xsl:variable name="oldtoc" select="1"/><!-- toc.ncx zusätzlich ausgeben: Wert auf 1 setzen --> 019 <xsl:variable name="epubdir" select="'ausgabe'"/> 020 <xsl:variable name="opsdir" select="'OPS'"/> 021 <xsl:variable name="imgdir" select="'bilder'"/> 022 <xsl:variable name="cssdir" select="'style'"/> 023 <xsl:variable name="htmldir" select="'html'"/> 024 <xsl:variable name="coverid" select="'katalogcover'"/> 025 <xsl:variable name="stylesheet" select="'style.css'"/> 026 <xsl:variable name="ident" select="'http://example.net/diskografie'"/> 027 028 <!-- externe Funktionen einbinden --> 029 <xsl:include href="../FktLib/library.xsl"/> 030 031 <!-- Ausgabeformate zur Dateierzeugung über xsl:result-document --> 032 <xsl:output name="plaintext" method="text" encoding="UTF-8" indent="no" media-type="text/plain"/> 033 034 <xsl:output name="stdxml" method="xml" version="1.0" encoding="UTF-8" indent="yes" media-type="text/xml"/> 035 036 <xsl:output name="tocncx" method="xml" version="1.0" encoding="UTF-8" indent="yes" media-type="text/xml" 037 doctype-public="-//NISO//DTD ncx 2005-1//EN" doctype-system="http://www.daisy.org/z3986/2005/ncx-2005-1.dtd"/> 038 039 <xsl:output name="xhtml5" method="xml" version="1.0" encoding="UTF-8" media-type="application/xhtml+xml" indent="yes"/> 040 041 042 <!-- Basis-Template --> 043 <xsl:template match="diskografie"> 044 045 <!-- EPUB-Struktur: mimetype (Pflicht) auf oberster Ebene --> 046 <xsl:result-document href="{$epubdir}/mimetype" format="plaintext"> 047 <xsl:text>application/epub+zip</xsl:text> 048 </xsl:result-document> 049 050 051 <!-- EPUB-Struktur: container.xml in META_INF (beide Namen sind obligatorisch) --> 052 <xsl:result-document href="{$epubdir}/META-INF/container.xml" format="stdxml"> 053 <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> 054 055 <rootfiles> 056 <rootfile full-path="{$opsdir}/{$contentfile}" media-type="application/oebps-package+xml"/> 057 </rootfiles> 058 059 </container> 060 </xsl:result-document> 061 062 063 <!-- EPUB-Struktur: content.opf in OPS (beide Namen sind variabel) --> 064 <xsl:result-document href="{$epubdir}/{$opsdir}/{$contentfile}" format="stdxml"> 065 <package xmlns="http://www.idpf.org/2007/opf" unique-identifier="{$bookid}" version="3.0"> 066 067 <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"> 068 <!-- Pflichtangaben --> 069 <dc:identifier id="{$bookid}"><xsl:value-of select="$ident"/></dc:identifier> 070 <dc:title><xsl:value-of select="fn:concat('Diskografie / ', @bandname)"/></dc:title> 071 <dc:language>de</dc:language> 072 073 <!-- optionale Angaben --> 074 <dc:creator>T. Meinike 2012 / epub3.xsl</dc:creator> 075 <dc:publisher>T. Meinike</dc:publisher> 076 <dc:subject>Katalog</dc:subject> 077 <dc:date><xsl:value-of select="format-date(fn:current-date(), '[Y0001]-[M01]-[D01]')"/></dc:date> 078 <dc:description>Informationen zu Band-Veröffentlichungen</dc:description> 079 080 <!-- Referenz auf das Coverbild --> 081 <meta name="cover" content="coverimage"/> 082 083 <!-- zusätzliche Datumsangabe lt. EPUB3 --> 084 <meta property="dcterms:modified"><xsl:value-of select="format-dateTime(fn:adjust-dateTime-to-timezone(fn:current-dateTime(), xs:dayTimeDuration('PT0H')), '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]Z')"/></meta> 085 086 </metadata> 087 088 <manifest> 089 <!-- Basis- und Zusatzdateien: TOC, NCX, CSS, Titelbild, ... --> 090 <item id="toc" properties="nav" href="{$tocfile}" media-type="application/xhtml+xml"/> 091 <xsl:if test="$oldtoc = 1"> 092 <item id="ncx" href="{$ncxfile}" media-type="application/x-dtbncx+xml"/> 093 </xsl:if> 094 <item id="coverimage" properties="cover-image" href="bilder/{$coverid}.jpg" media-type="image/jpeg"/> 095 <item id="stern" href="{$imgdir}/stern.gif" media-type="image/gif"/> 096 <item id="css" href="{$cssdir}/{$stylesheet}" media-type="text/css"/> 097 098 <!-- Coverbilder --> 099 <xsl:for-each select="werk/coverbild"> 100 <item id="bild{fn:position()}" href="{fn:concat($imgdir, '/', .)}"> 101 <xsl:attribute name="media-type"> 102 <xsl:choose> 103 <xsl:when test="fn:contains(., '.gif')">image/gif</xsl:when> 104 <xsl:when test="fn:contains(., '.jpg')">image/jpeg</xsl:when> 105 <xsl:when test="fn:contains(., '.png')">image/png</xsl:when> 106 <xsl:when test="fn:contains(., '.svg')">image/svg+xml</xsl:when> 107 </xsl:choose> 108 </xsl:attribute> 109 </item> 110 </xsl:for-each> 111 112 <item id="katalogcover" media-type="application/xhtml+xml" href="{$htmldir}/katalogcover.html"/> 113 114 <xsl:if test="fn:string-length(bandinfo) > 0 or referenzen"> 115 <item id="kap_infos" media-type="application/xhtml+xml" href="{$htmldir}/kapitel_infos.html"/> 116 </xsl:if> 117 118 <!-- XHTML-Kapitel --> 119 <xsl:for-each select="werk"> 120 <xsl:sort select="@jahr" order="ascending" data-type="number"/> 121 <item id="kap_werk_{fn:position()}" media-type="application/xhtml+xml" href="{$htmldir}/kapitel_werk_{fn:position()}.html"/> 122 </xsl:for-each> 123 </manifest> 124 125 <spine> 126 <!-- toc="ncx" nur, wenn auch die alte TOC zusätzlich verwendet wird --> 127 <xsl:if test="$oldtoc = 1"> 128 <xsl:attribute name="toc"> 129 <xsl:text>ncx</xsl:text> 130 </xsl:attribute> 131 </xsl:if> 132 133 <itemref idref="katalogcover" linear="no"/> 134 135 <xsl:if test="fn:string-length(bandinfo) > 0 or referenzen"> 136 <itemref idref="kap_infos"/> 137 </xsl:if> 138 139 <xsl:for-each select="werk"> 140 <xsl:sort select="@jahr" order="ascending" data-type="number"/> 141 <itemref idref="kap_werk_{fn:position()}"/> 142 </xsl:for-each> 143 </spine> 144 145 <guide> 146 <reference type="cover" title="buchcover" href="{$htmldir}/katalogcover.html"/> 147 148 <xsl:if test="fn:string-length(bandinfo) > 0 or referenzen"> 149 <reference type="text" title="Informationen" href="{$htmldir}/kapitel_infos.html"/> 150 </xsl:if> 151 152 <xsl:for-each select="werk"> 153 <xsl:sort select="@jahr" order="ascending" data-type="number"/> 154 <reference type="text" title="{werkname}" href="{$htmldir}/kapitel_werk_{fn:position()}.html"/> 155 </xsl:for-each> 156 </guide> 157 158 </package> 159 </xsl:result-document> 160 161 162 <!-- EPUB-Struktur: neue HTML5-TOC toc.html im Verzeichnis OPS (beide Namen sind variabel) --> 163 <xsl:result-document href="{$epubdir}/{$opsdir}/{$tocfile}" format="xhtml5"> 164 <xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text> 165 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="de"> 166 167 <head> 168 <meta charset="utf-8" /> 169 <meta name="description" content="Diskografie / TOC" /> 170 <title>Inhaltsverzeichnis</title> 171 </head> 172 173 <body> 174 175 <nav epub:type="toc" id="toc"> 176 <h1>Inhaltsverzeichnis</h1> 177 178 <ol> 179 180 <li id="katalogcover"> 181 <a href="{$htmldir}/katalogcover.html">Titel</a> 182 </li> 183 184 <xsl:if test="fn:string-length(bandinfo) > 0 or referenzen"> 185 <li id="kap_infos"> 186 <a href="{$htmldir}/kapitel_infos.html">Informationen</a> 187 </li> 188 </xsl:if> 189 190 <xsl:for-each select="werk"> 191 <xsl:sort select="@jahr" order="ascending" data-type="number"/> 192 <li id="kap_werk_{fn:position()}"> 193 <a href="{$htmldir}/kapitel_werk_{fn:position()}.html"><xsl:value-of select="werkname"/></a> 194 </li> 195 </xsl:for-each> 196 197 </ol> 198 199 </nav> 200 201 </body> 202 </html> 203 </xsl:result-document> 204 205 206 <!-- EPUB-Struktur: optional (falls $oldtoc = 1) alte toc.ncx für EPUB2-Kompatibilität im Verzeichnis OPS --> 207 <xsl:if test="$oldtoc = 1"> 208 <xsl:result-document href="{$epubdir}/{$opsdir}/{$ncxfile}" format="tocncx"> 209 <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" xml:lang="de" version="2005-1"> 210 211 <head> 212 <meta name="dtb:uid" content="{$ident}"/> 213 <meta name="dtb:depth" content="1"/> 214 <meta name="dtb:totalPageCount" content="0"/> 215 <meta name="dtb:maxPageNumber" content="0"/> 216 </head> 217 218 <docTitle> 219 <text><xsl:value-of select="fn:concat('Diskografie / ', @bandname)"/></text> 220 </docTitle> 221 222 <navMap> 223 224 <xsl:variable name="i" select="if (fn:string-length(bandinfo) > 0 or referenzen) then 2 else 1"/> 225 226 <xsl:if test="fn:string-length(bandinfo) > 0 or referenzen"> 227 <navPoint id="navPoint-1" playOrder="1"> 228 <navLabel> 229 <text>Titel</text> 230 </navLabel> 231 <content src="{$htmldir}/katalogcover.html"/> 232 </navPoint> 233 </xsl:if> 234 235 <xsl:if test="fn:string-length(bandinfo) > 0 or referenzen"> 236 <navPoint id="navPoint-2" playOrder="2"> 237 <navLabel> 238 <text>Informationen</text> 239 </navLabel> 240 <content src="{$htmldir}/kapitel_infos.html"/> 241 </navPoint> 242 </xsl:if> 243 244 <xsl:for-each select="werk"> 245 <xsl:sort select="@jahr" order="ascending" data-type="number"/> 246 <navPoint id="navPoint-{fn:position() + $i}" playOrder="{fn:position() + $i}"> 247 <navLabel> 248 <text><xsl:value-of select="werkname"/></text> 249 </navLabel> 250 <content src="{$htmldir}/kapitel_werk_{fn:position()}.html"/> 251 </navPoint> 252 </xsl:for-each> 253 254 </navMap> 255 256 </ncx> 257 </xsl:result-document> 258 </xsl:if> 259 260 261 <!-- externes Stylesheet --> 262 <xsl:result-document href="{$epubdir}/{$opsdir}/{$cssdir}/{$stylesheet}" format="plaintext"> 263 <xsl:text>html { margin: 0; padding: 0; } 264 body { color: #000; background-color: #FFF; margin: 0 1em; } 265 h1,h2 { font-family: sans-serif; } 266 h1 { color: #066; background-color: inherit; margin-top: 0; font-size: 1.6em; } 267 h2 { color: #69F; background-color: inherit; font-size: 1.3em; } 268 ol { margin-top: 1.5em; } 269 p { text-align: justify; } 270 p,li { page-break-inside: avoid; } 271 a:hover { color: #F00; background-color: inherit; } 272 div.cover img { border-radius: 10px; -webkit-box-shadow: 7px 7px 5px #999; box-shadow: 7px 7px 5px #999; } 273 </xsl:text> 274 </xsl:result-document> 275 276 277 <!-- XHTML-Deckblatt mit Coverbild --> 278 <xsl:result-document href="{$epubdir}/{$opsdir}/{$htmldir}/{$coverid}.html" format="xhtml5"> 279 <xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text> 280 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="de"> 281 282 <head> 283 <meta charset="utf-8" /> 284 <meta name="description" content="Diskografie / Cover" /> 285 <link rel="stylesheet" type="text/css" href="../{$cssdir}/{$stylesheet}" /> 286 <title>Cover</title> 287 </head> 288 289 <body id="cover"> 290 <section epub:type="cover"> 291 <figure> 292 <img src="../{$imgdir}/{$coverid}.jpg" alt="{$coverid}" title="" /> 293 </figure> 294 </section> 295 </body> 296 297 </html> 298 </xsl:result-document> 299 300 301 <!-- optionale Informationsseite als XHTML-Datei ausgeben --> 302 <xsl:if test="fn:string-length(bandinfo) > 0 or referenzen"> 303 <xsl:result-document href="{$epubdir}/{$opsdir}/{$htmldir}/kapitel_infos.html" format="xhtml5"> 304 <xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text> 305 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="de"> 306 307 <head> 308 <meta charset="utf-8" /> 309 <meta name="description" content="Diskografie / Informationen" /> 310 <link rel="stylesheet" type="text/css" href="../{$cssdir}/{$stylesheet}" /> 311 <title><xsl:value-of select="werkname"/></title> 312 </head> 313 314 <body> 315 316 <section epub:type="chapter introduction"> 317 <header> 318 <!-- Hauptüberschrift --> 319 <h1><xsl:value-of select="fn:concat('Diskografie / ', @bandname)"/></h1> 320 </header> 321 322 <!-- optionalen Bandinfotext ausgeben --> 323 <xsl:apply-templates select="bandinfo[fn:string-length(.) > 0]"/> 324 325 <!-- optionale Referenzen verarbeiten --> 326 <xsl:apply-templates select="referenzen"/> 327 </section> 328 329 </body> 330 331 </html> 332 </xsl:result-document> 333 </xsl:if> 334 335 336 <!-- werk-Verarbeitung --> 337 <xsl:apply-templates select="werk"> 338 <xsl:sort select="@jahr" order="ascending" data-type="number"/> 339 </xsl:apply-templates> 340 341 </xsl:template> 342 343 344 <!-- Kapitelinhalte als XHTML-Dateien ausgeben --> 345 <xsl:template match="werk"> 346 347 <xsl:result-document href="{$epubdir}/{$opsdir}/{$htmldir}/kapitel_werk_{fn:position()}.html" format="xhtml5"> 348 <xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text> 349 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="de"> 350 351 <head> 352 <meta charset="utf-8" /> 353 <meta name="description" content="Diskografie / Werk {fn:position()}" /> 354 <link rel="stylesheet" type="text/css" href="../{$cssdir}/{$stylesheet}" /> 355 <title><xsl:value-of select="werkname"/></title> 356 </head> 357 358 <body> 359 360 <section epub:type="chapter"> 361 <header> 362 <!-- Wername als Überschrift ausgeben --> 363 <h1>[<xsl:value-of select="fn:position()"/>] <xsl:value-of select="werkname"/></h1> 364 365 <!-- Erscheinungsjahr sowie optionalen Typ und optionale Bewertungssterne ausgeben --> 366 <h2> 367 <xsl:value-of select="@jahr"/> 368 369 <xsl:if test="fn:string-length(@typ) > 0"> 370 <xsl:value-of select="fn:concat(' (', @typ, ') ')"/> 371 </xsl:if> 372 373 <xsl:if test="@bewertung >= 1"> 374 <xsl:for-each select="1 to @bewertung"> 375 <img src="../{$imgdir}/stern.gif" alt="*" /> 376 </xsl:for-each> 377 </xsl:if> 378 </h2> 379 </header> 380 381 <!-- optionales Coverbild ausgeben --> 382 <xsl:apply-templates select="coverbild[fn:string-length(.) > 0]"/> 383 384 <!-- Titelliste ausgeben --> 385 <xsl:apply-templates select="titelliste"/> 386 387 <!-- Gesamtzeit über externe Funktion ausgeben, sofern @spielzeit bei allen titel-Elementen vorhanden --> 388 <xsl:if test="fn:count(titelliste/titel) = fn:count(titelliste/titel/@spielzeit)"> 389 <xsl:variable name="spielzeiten" select="for $t in titelliste/titel return $t/@spielzeit"/> 390 <p>Gesamtzeit: <xsl:value-of select="tm:gesamtzeit($spielzeiten)"/></p> 391 </xsl:if> 392 393 <!-- optionalen Kommentar ausgeben --> 394 <xsl:apply-templates select="kommentar[fn:string-length(.) > 0]"/> 395 </section> 396 397 </body> 398 399 </html> 400 </xsl:result-document> 401 402 </xsl:template> 403 404 405 <!-- Template für die bandinfo-Verarbeitung --> 406 <xsl:template match="bandinfo"> 407 408 <h2>Einführung</h2> 409 <p><strong><xsl:value-of select="."/></strong></p> 410 411 </xsl:template> 412 413 414 <!-- Template für die referenzen-Verarbeitung --> 415 <xsl:template match="referenzen"> 416 417 <h2>Referenzen</h2> 418 <ul> 419 <xsl:apply-templates select="referenz"/> 420 </ul> 421 422 </xsl:template> 423 424 425 <!-- Template für die referenz-Verarbeitung als Listeneintrag --> 426 <xsl:template match="referenz"> 427 428 <li> 429 <xsl:choose> 430 <xsl:when test="fn:string-length(@url) > 0"> 431 <a href="{@url}"><xsl:value-of select="."/></a> 432 </xsl:when> 433 <xsl:otherwise> 434 <xsl:value-of select="."/> 435 </xsl:otherwise> 436 </xsl:choose> 437 </li> 438 439 </xsl:template> 440 441 442 <!-- Template für die coverbild-Verarbeitung --> 443 <xsl:template match="coverbild"> 444 445 <div class="cover"><img src="../{$imgdir}/{.}" alt="Coverbild" /></div> 446 447 </xsl:template> 448 449 450 <!-- Template für die titelliste-Verarbeitung --> 451 <xsl:template match="titelliste"> 452 453 <ol> 454 <xsl:apply-templates select="titel"/> 455 </ol> 456 457 </xsl:template> 458 459 460 <!-- Template für die titel-Verarbeitung als Listeneintrag --> 461 <xsl:template match="titel"> 462 463 <li> 464 <xsl:value-of select="."/> 465 <xsl:if test="fn:string-length(@spielzeit) > 0"> 466 <xsl:value-of select="fn:concat(' (', @spielzeit, ')')"/> 467 </xsl:if> 468 </li> 469 470 </xsl:template> 471 472 473 <!-- Template für die kommentar-Verarbeitung --> 474 <xsl:template match="kommentar"> 475 476 <p>Kommentar: 477 <em> 478 <xsl:value-of select="."/> 479 </em> 480 </p> 481 482 </xsl:template> 483 484 </xsl:stylesheet>
Code formatiert mit »Highlight 3.7«