Gli e-book

 

 

Sono libri digitali che vegono letti mediante dispositivi elettronici:

  • Pc
  • Laptop
  • Tablet
  • Smart phone
  • E reader

In questa sede ci occuperemo di e-reader  in modo particolare del Boox Go 10.3"

 

Ci sono diversi standard:

Produttore / Ecosistema Formati più comuni supportati
Amazon Kindle (E Ink & Fire, app) AZW3/KFX nativi; EPUB via conversione; PDF; TXT/RTF/HTML
Kobo (Rakuten) EPUB, PDF, MOBI, TXT, HTML, Comic (CBZ/CBR), FB2
PocketBook EPUB, PDF, MOBI/PRC, FB2, TXT, HTML, Comic
ONYX BOOX (Android) EPUB, PDF, MOBI, TXT, HTML, tutti formati via app Android
Tolino EPUB, PDF, TXT, HTML
Sony eReader (modelli recenti) EPUB, PDF
App su smartphone/tablet (iOS/Android) EPUB, PDF, MOBI (con app compatibili), TXT, HTML ecc.


Qui ci interesseremo principalmente dello standard epub supportato dall'Boox Go

 

Cosa è un epub equivale ad un file .zip che contiene al suo interno questa struttura:


 mimetype

 META-INF/

 │└── container.xml

 OEBPS/

 │├── nav.xhtml

 │├── cap1.xhtml

 │├── cap2.xhtml

 │├── . . .

 │├── titlepage.xhtml

 │├── content.opf

 │├── style.css

 │└── cover.jpg

 

Ora prenderemo un epub semplice e vedremo ciascun file. L'epub è un libricino che ha due capitoli con due sotto capitoli, un indice, una copertina:

 

 

        
Passiamo alladescrizione dei vari file:

 

mimetype

 

1️⃣ Cos’è mimetype

mimetype è un file di testo che serve a dire immediatamente a qualsiasi programma:

“Questo ZIP è un EPUB”

È la prima cosa che un lettore o un software (Calibre, Kobo, BOOX, ecc.) controlla senza nemmeno aprire tutto il file.

 

2️⃣ Contenuto di mimetype

Il contenuto è una sola riga, senza spazi, senza newline finale:

 

application/epub+zip

 
      

❗ Regole fondamentali

  • Nient’altro

  • Nessun ritorno a capo

  • Nessuno spazio

  • Nessun BOM

  • Encoding: ASCII / UTF-8 senza BOM

Se anche solo una di queste cose è sbagliata → l’EPUB può non essere riconosciuto.

 

3️⃣ Perché deve essere NON compresso

Quando l’EPUB è uno ZIP:

  • mimetype deve essere:

    • il primo file nello ZIP

    • memorizzato (store), non compresso

Questo permette al software di:

  • leggere solo i primi byte

  • riconoscere subito il formato

  • decidere come trattare il file

📌 Se fosse compresso, il programma dovrebbe decomprimere lo ZIP → più lento e non standard.

 

Se si vuole creare utilizzare Notepad++ impostando Formato a UTF-8

 

titlepage.xhtml

 

EPUB non “mostra immagini”, mostra pagine.

Un reader EPUB:

  • non apre direttamente cover.jpg

  • apre file XHTML

  • dentro c’è:

Quella pagina:

  • può contenere solo l’immagine

  • oppure titolo, autore, editore, ecc.

👉 Quindi è una pagina, non “la cover” in senso tecnico.

 

Molti EPUB3 fanno così:

  • file immagine:

    <item id="cover" href="copertina.jpg" media-type="image/jpeg" properties="cover-image"/>

     
              
  • pagina XHTML:

    <item id="titlepage" href="titlepage.xhtml" media-type="application/xhtml+xml"/>

     
              
  • nav.xhtml:

    <a epub:type="cover" href="titlepage.xhtml">Copertina</a>

Nel nostro caso il file titlepage.xhtml contiene questo:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Copertina</title>
  <link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
  <img src="../copertina.jpg" alt="Copertina" style="width:100%; height:auto; display:block; margin:auto"/>
</body>
</html>

 

Notare i "../" il file è fisicamente dentro la cartella OEBPS assieme agli altri file del testo, mentre l'immagine della copertina cover.jpg è nella radice percui per poterla indirizzare deve uscire da OEBPS.


content.opf

 

Questo è forse il file più importante.

content.opf è il “cervello” dell’EPUB.

Se vuoi una frase appena più lunga:

👉 È il file che dice al lettore cosa contiene il libro, dove sono i file e in che ordine leggerli.

Dentro content.opf ci sono solo tre cose fondamentali:

  1. Metadati (titolo, autore, lingua…)

  2. Manifest (lista di tutti i file del libro)

  3. Spine (ordine di lettura)

Senza content.opf:

  • il lettore vede solo uno ZIP

  • non sa quali file sono capitoli

  • non sa da dove iniziare

Questo è il contenuto

<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="bookid" version="3.0">
  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
    <dc:title id="id">Piccolo Libro</dc:title>
    <dc:creator id="id-1">Silvano</dc:creator>
    <dc:identifier>calibre:57</dc:identifier>
    <dc:identifier>uuid:949a185c-c927-4670-96dc-88104ddfe905</dc:identifier>
    <dc:identifier id="bookid">urn:uuid:12345</dc:identifier>
    <dc:language>it</dc:language>
    <meta refines="#id" property="title-type">main</meta>
    <meta refines="#id" property="file-as">Piccolo Libro</meta>
    <meta property="dcterms:modified">2026-01-20T00:34:17Z</meta>
    <meta refines="#id-1" property="role" scheme="marc:relators">aut</meta>
    <meta refines="#id-1" property="file-as">Silvano</meta>
  </metadata>
  <manifest>
    <item id="titlepage" href="OEBPS/titlepage.xhtml" media-type="application/xhtml+xml"/>
    <item id="cap1" href="OEBPS/cap1.xhtml" media-type="application/xhtml+xml"/>
    <item id="cap2" href="OEBPS/cap2.xhtml" media-type="application/xhtml+xml"/>
    <item id="cap3" href="OEBPS/cap3.xhtml" media-type="application/xhtml+xml"/>
    <item id="cap4" href="OEBPS/cap4.xhtml" media-type="application/xhtml+xml"/>
    <item id="cap5" href="OEBPS/cap5.xhtml" media-type="application/xhtml+xml"/>
    <item id="cap6" href="OEBPS/cap6.xhtml" media-type="application/xhtml+xml"/>
    <item id="nav" href="OEBPS/nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>
    <item id="css" href="style.css" media-type="text/css"/>
    <item id="cover" href="copertina.jpg" media-type="image/jpeg" properties="cover-image"/>
  </manifest>
  <spine>
    <itemref idref="titlepage"/>
    <itemref idref="cap1"/>
    <itemref idref="cap2"/>
    <itemref idref="cap3"/>
    <itemref idref="cap4"/>
    <itemref idref="cap5"/>
    <itemref idref="cap6"/>
  </spine>
</package>

I metadati

li generiamo con Calibre vedi in seguito

Nel manifest

si informa l'ereader di dove sono i file del testo: i capitoli, il titlepage, la cover, i fogli stile ed il nav (l'indice).

lo Spine

Da l'ordine in cui il'erider mostra le pagine

nav.xhtml

Cos’è nav.xhtml

 

nav.xhtml è l’indice di navigazione ufficiale dell’EPUB 3.

È il file che dice al lettore:

“Queste sono le voci dell’indice e portano a queste pagine”

📌 È per il lettore, non per il software (quello è content.opf).

Perché si chiama nav.xhtml

nav = navigation

Con EPUB 3 si è deciso che:

  • l’indice deve essere una pagina XHTML

  • che contiene uno o più elementi <nav>

Da qui il nome convenzionale:

 

nav.xhtml

 
      

👉 Non è obbligatorio chiamarlo così
👉 Ma è fortemente consigliato (standard de facto)

Può chiamarsi anche:

  • toc.xhtml

  • indice.xhtml

MA nel content.opf deve avere:

properties="nav"

Cosa contiene davvero

Dentro nav.xhtml ci sono elenchi navigabili, non testo libero.

Il più importante è:

 

<nav epub:type="toc">

 
      

cioè:

  • nav = sezione di navigazione

  • epub:type="toc" = Table Of Contents

Questo è il nostro nav:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:epub="http://www.idpf.org/2007/ops">
<head>
  <title>Indice</title>
</head>
<body>

<nav epub:type="toc">
  <ol>

    <!-- Copertina -->
    <li>
      <a href="titlepage.xhtml">Copertina</a>
    </li>

    <!-- Storie -->
    <li>
      <a href="cap1.xhtml">Storie</a>
      <ol>
        <li><a href="cap2.xhtml">La Montagna Fatata</a></li>
        <li><a href="cap3.xhtml">La Spada Magica</a></li>
      </ol>
    </li>

    <!-- Personaggi -->
    <li>
      <a href="cap4.xhtml">Personaggi</a>
      <ol>
        <li><a href="cap5.xhtml">Sherek</a></li>
        <li><a href="cap6.xhtml">Ciuchino</a></li>
      </ol>
    </li>

  </ol>
</nav>

</body>
</html>

EPUB 3: perché nav.xhtml ha sostituito toc.ncx

  • toc.ncx → XML tecnico, invisibile

  • nav.xhtml → XHTML leggibile, accessibile

👉 Un solo formato
👉 Stesse regole del resto del libro
👉 Più semplice e coerente

 

Indice a più livelli in nav.xhtml

Un indice multilivello si ottiene SOLO nidificando <ol> dentro <li>.

⚠️ Regola fondamentale

Un <ol> figlio DEVE stare dentro il <li> che rappresenta il capitolo padre.

Qui un esempio a tre livelli:

<li>
  <a href="cap1.xhtml">Capitolo 1</a>
  <ol>
    <li>
      <a href="cap1_1.xhtml">Sezione 1</a>
      <ol>
        <li><a href="cap1_1_1.xhtml">Paragrafo</a></li>
      </ol>
    </li>
  </ol>
</li>


👉 Non c’è un limite di livelli (teoricamente)

Regole ufficiali (riassunte)

1️⃣ Solo <ol> e <li>

  • NO <ul>

  • NO <div> per la struttura

2️⃣ Link obbligatorio

Ogni voce deve contenere un <a href="...">

3️⃣ Percorsi relativi

Se nav.xhtml è in OEBPS/:

<a href="cap1.xhtml">

 
      

Se fosse in una sottocartella:

<a href="../cap1.xhtml">

4️⃣ Coerenza con lo spine

  • Le voci dell’indice non devono per forza seguire lo stesso ordine dello spine

  • Ma è fortemente consigliato

Buona pratica consigliata

👉 Metti sempre:

  • Livello 1 → capitoli principali

  • Livello 2 → sottocapitoli

  • Livello 3 → solo se davvero serve

Un indice troppo profondo diventa scomodo.