Un fichier epub est une archive ZIP qui contient un répertoire OPS qui contient :

  • un fichier XML 'toc.ncx' qui encode la navigation dans le livre et donc son ordre des chapitres
  • un fichier XML 'content.opf' qui renseigne sur le contenu du livre

[en fait le fichier 'content.opf' est déclaré dans le fichier 'META-INF/container.xml' :

<container version="1.0"
	xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
	<rootfiles>
		<rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml" />
	</rootfiles>
</container>
]

  • les fichiers XHTML de l'édition du texte :
    Par exemple “c1_Vingt_mille_lieues_sous_les_mers_Partie_1_Chapitre_1.xhtml” contient le XHTML du premier chapitre.
  • un répertoire 'images' contenant les images utilisées par les fichiers XHTML

Le fichier 'toc.ncx' contient les chemins uniques suivants :

xmlstarlet el < toc.ncx | awk '!seen[$0]++'

ncx/head
ncx/head/meta
ncx/docTitle
ncx/docTitle/text
ncx/docAuthor
ncx/docAuthor/text
ncx/navMap
ncx/navMap/navPoint
ncx/navMap/navPoint/navLabel
ncx/navMap/navPoint/navLabel/text
ncx/navMap/navPoint/content

Le fichier encode les entrées de la table des matières à plat :

	<navMap>
		<navPoint id="title" playOrder="1">
			<navLabel>
				<text>Titre</text>
			</navLabel>
			<content src="title.xhtml" />
		</navPoint>
		<navPoint id="c0_Vingt_mille_lieues_sous_les_mers" playOrder="2">
			<navLabel>
				<text>Vingt mille lieues sous les mers</text>
			</navLabel>
			<content src="c0_Vingt_mille_lieues_sous_les_mers.xhtml" />
		</navPoint>
		<navPoint id="c1_Vingt_mille_lieues_sous_les_mers_Partie_1_Chapitre_1"
			playOrder="3">
			<navLabel>
				<text>Chapitre I.</text>
			</navLabel>
			<content
				src="c1_Vingt_mille_lieues_sous_les_mers_Partie_1_Chapitre_1.xhtml" />
		</navPoint>

Ce qui correspond à :

  • page de titre
  • table des matières
  • premier chapitre

Le fichier 'content.opf' contient les chemins uniques suivants :

xmlstarlet el < content.opf | cat -n | sort --key=2.1 -b -u | sort -n | cut -c8-
ou
xmlstarlet el < content.opf | awk '!seen[$0]++'

package
package/metadata
package/metadata/dc:identifier
package/metadata/dc:language
package/metadata/dc:title
package/metadata/dc:source
package/metadata/dc:date
package/metadata/dc:rights
package/metadata/dc:contributor
package/metadata/dc:creator
package/metadata/dc:publisher
package/metadata/meta
package/manifest
package/manifest/item
package/spine
package/spine/itemref
package/guide
package/guide/reference

Synthèse des éléments du fichier content.opf

  • /package/metadata contient les métadonnées du texte au format Dublin Core

Example : <dc:title>Vingt mille lieues sous les mers</dc:title>

  • chaque /package/manifest/item déclare un fichier de données
    (comme une page de titre, une page HTML contenant un chapitre, une image d'illustration, etc.)
  • /package/spine encode l'ordre du contenu du texte : chaque /package/spine/itemref y désigne

un fichier de données participant à l'affichage du texte (la page de titre, la table des matières puis chaque chapitre)
Exemples :

  • /package/spine/itemref@href="c0_Vingt_mille_lieues_sous_les_mers.xhtml" la page de la table des matières
  • /package/spine/itemref@href="c1_Vingt_mille_lieues_sous_les_mers_Partie_1_Chapitre_1.xhtml" la page du premier chapitre
  • /package/guide encode l'ordre des éléments du livre : chaque /package/guide/reference y désigne

un élément du livre (la couverture, la page de titre, le texte = la page de la table des matières, la page de copyright)

Bref, bien que toc.ncx soit la référence pour l'ordre des éléments du texte (à l'origine de la construction de la table des matières par les outils de visualisation), le fichier content.opf contient également des informations cocnernant l'ordre du contenu du texte.

fichiers XHTML de l'édition d'un texte

Le répertoire OPS contient également les fichiers XHTML de l'édition du texte.

Les chemins uniques du fichier “c1_Vingt_mille_lieues_sous_les_mers_Partie_1_Chapitre_1.xhtml” sont :

xmlstarlet el < c1_Vingt_mille_lieues_sous_les_mers_Partie_1_Chapitre_1.xhtml | awk '!seen[$0]++'

html
html/head
html/head/meta
html/head/link
html/head/title
html/body
html/body/p
html/body/div
html/body/div/span
html/body/div/span/span
html/body/div/div
html/body/div/div/div
html/body/div/div/div/img
html/body/div/p
html/body/div/p/br
html/body/div/h3
html/body/div/h3/span
html/body/div/h3/span/br
html/body/div/h3/span/span
html/body/div/br
html/body/div/p/span
html/body/div/p/span/span
html/body/div/p/a
html/body/div/p/i
html/body/div/p/sup
html/body/div/p/sup/a
html/body/div/p/span/i
html/body/div/div/div/div
html/body/div/div/div/div/img
html/body/div/div/div/div/div
html/body/div/div/div/div/div/i
html/body/hr
html/body/ol
html/body/ol/li
html/body/ol/li/span
html/body/ol/li/span/a

Synthèse du XHTML d'un chapitre

  • l'entête encode le titre de la page et l'utilisation de la CSS “main.css” :

	<head>
		<meta content="application/xhtml+xml;charset=UTF-8" http-equiv="content-type" />
		<link type="text/css" rel="stylesheet" href="main.css" />
		<title>Chapitre I.</title>
	</head>

  • le titre du chapitre est encodé par :

			<h3 style="font-weight: normal; text-align: center; line-height: 1.5em;">
				<span class="mw-headline" id="CHAPITRE_PREMIER_un_.C3.A9cueil_fuyant.">
					CHAPITRE PREMIER
					<br />
					<br />
					<span style="font-variant: small-caps">un écueil fuyant.</span>
				</span>
			</h3>

  • le contenu est encodé par des <p> et quelques <br/> :

			<br />
			<p>L’année 1866 fut marquée par un événement bizarre, un phénomène
				inexpliqué et inexplicable que personne n’a sans doute oublié. Sans
				parler des rumeurs qui agitaient les populations des ports et
				surexcitaient l’esprit public à l’intérieur des continents, les gens
				de mer furent particulièrement émus. Les négociants, armateurs,
				capitaines de navires, skippers et masters de l’Europe et de
				l’Amérique, officiers des marines militaires de tous pays, et, après
				eux, les gouvernements des divers États des deux continents, se
				préoccupèrent de ce fait au plus haut point.</p>

  • il y a des mises en évidence par <i> :

				En effet, le 20 juillet 1866, le steamer
				<i>Governor-Higginson</i>
				, de
				<i>Calcutta and Burnach steam navigation Company</i>
				, avait rencontré cette masse mouvante à cinq milles dans l’est des

  • il y a des appels de note :

				et 60° 35′ de longitude à l’ouest du méridien de Greenwich. Dans
				cette observation simultanée, on crut pouvoir évaluer la longueur
				minimum du mammifère à plus de trois cent cinquante pieds anglais 
				<sup id="cite_ref-1" class="reference">
					<a href="#cite_note-1">[1]</a>
				</sup>
				, puisque le

  • puis les notes sont encodées en bas de page :

		<hr />
		<ol class="references">
			<li id="cite_note-1">
				<span class="mw-cite-backlink">
					<a href="#cite_ref-1">↑</a>
				</span>
				<span class="reference-text">Environ 106 mètres. Le pied anglais n’est que de
					30,40 centimètres.</span>
			</li>
		</ol>

  • les liens hypertexte sont encodés par des <a> :

				Lacépède, ni
				<a href="http://fr.wikipedia.org/wiki/Auguste_Dum%C3%A9ril" class="extiw"
					title="w:Auguste Duméril">M. Dumeril</a>
				, ni

  • les sauts de page sont encodés par :

				<span>
					<span class="pagenum ws-pagenum" id="_2"
						title="Page:Verne - Vingt mille lieues sous les mers.djvu/12" />
				</span>

  • les illustrations sont encodées par des <img> :

			<div class="center">
				<div class="floatnone">
					<img
						alt="//upload.wikimedia.org/wikipedia/commons/thumb/6/66/Vingtmillelieue00vern_orig_0011_1.jpg/420px-Vingtmillelieue00vern_orig_0011_1.jpg"
						src="images/c48_commons_thumb_6_66_Vingtmillelieue00vern_orig_0011_1.jpg_420px_Vingtmillelieue00vern_orig_0011_1.jpg"
						style="width:420; height:543; " />
				</div>
			</div>
ou encore :
			<div class="center">
				<div class="thumb tnone">
					<div class="thumbinner" style="width:422px;">
						<img
							alt="//upload.wikimedia.org/wikipedia/commons/thumb/8/84/Vingtmillelieue00vern_orig_0018_1.jpg/420px-Vingtmillelieue00vern_orig_0018_1.jpg"
							src="images/c49_commons_thumb_8_84_Vingtmillelieue00vern_orig_0018_1.jpg_420px_Vingtmillelieue00vern_orig_0018_1.jpg"
							class="thumbimage" style="width:420; height:618; " />
						<div class="thumbcaption">

							Les ingénieurs procédèrent à la visite du
							<i>Scotia</i>
						</div>
					</div>
				</div>
			</div>

  • la langue peut être encodée par des xml:lang :

				, tous navires de première marche, et les plus vastes qui, après le
				<span class="lang-en" xml:lang="en">
					<i>Great-Eastern</i>
				</span>
				, eussent jamais sillonné les mers. Ainsi donc, en 1867, la

Synthèse de la structure d'un texte

Un fichier XHTML de chapitre ne fait pas référence à la partie dans laquelle il se trouve.

Aucun des fichiers de structuration 'toc.ncx' ou 'content.opf' ne mentionne les parties du livre (si ce n'est dans les noms de fichiers et les identifiants de chapitre) :

  • toc.ncx :
    		<navPoint id="c1_Vingt_mille_lieues_sous_les_mers_Partie_1_Chapitre_1"
    			playOrder="3">
    			<navLabel>
    				<text>Chapitre I.</text>
    			</navLabel>
    			<content
    				src="c1_Vingt_mille_lieues_sous_les_mers_Partie_1_Chapitre_1.xhtml" />
    		</navPoint>
    
  • content.opf :
    	<item id="c0_Vingt_mille_lieues_sous_les_mers" href="c0_Vingt_mille_lieues_sous_les_mers.xhtml" media-type="application/xhtml+xml" />
    

Le fichier XHTML de la table des matières (c0_Vingt_mille_lieues_sous_les_mers.xhtml) mentionne les parties mais sans structuration XML :

	<body>
		<p />
		<div>
			<div id="ws-summary" style="margin-top:1em">
				<div style="text-align:center;clear:both;">
					<p>TABLE DES MATIÈRES</p>
					<hr
						style="margin-top: 2em; margin-bottom: 2em; auto;border:none;background:black;width:1em;height:1px;margin-left:auto;margin-right:auto;" />
					<p>PREMIÈRE PARTIE.</p>
				</div>
				<div class="tableItem"
					style="position:relative;margin:.125em auto;background:#FFFFFF;color:#000000;line-height:normal;zoom:1">
					<div style="margin-right:0px">
						<div style="float:left;width:100%">
							<div
								style="float:left;z-index:2;min-width:45px;text-indent:0;text-align:right;white-space:nowrap">
								<span style="background:#FFFFFF">
									<a
										href="c1_Vingt_mille_lieues_sous_les_mers_Partie_1_Chapitre_1.xhtml"
										title="Vingt mille lieues sous les mers/Partie 1/Chapitre 1">
										<span style="font-variant: small-caps">Chapitre</span>
										I.
									</a>
									 
								</span>
							</div>
							<div style="position:relative;margin-left:45px">
								<div style="position:relative;z-index:2;text-align:justify;">
									<span style="background:#FFFFFF">Un écueil fuyant </span>
								</div>

							</div>

						</div>


					</div>
				</div>

Bref, il faut encoder la structuration du texte en parties à la main.

public/analyse_format_epub_vingt_mille.txt · Dernière modification: 2016/02/21 19:43 par slh@ens-lyon.fr