EPUB: elektronická kniha v XML a XHTML

EPUB je otevřený formát elektronických knih. Uvnitř je to ZIP archiv s kapitolami v XHTML a s několika XML soubory, které popisují metadata, obsah a pořadí čtení. Kapitola prochází strukturu balíčku podle specifikace EPUB 3.3, ukazuje minimální funkční knihu a nejčastější chyby, kvůli kterým ji obchod nebo čtečka odmítne.

Autor: Aktualizováno

Co je EPUB

EPUB je standardní formát e-knih, který čtou Apple Books, Google Play Knihy, Kobo, PocketBook i čtečky Kindle (od roku 2022 přijímá EPUB i služba Send to Kindle). Obsah je reflowable: text se přizpůsobuje velikosti displeje a písma, které si čtenář nastaví. Formát původně vyvíjelo sdružení IDPF, od roku 2017 ho spravuje W3C. Aktuální verze EPUB 3.3 je doporučením W3C.

Kniha je ZIP archiv s příponou .epub. Obsah kapitol je XHTML — tedy HTML zapsané podle pravidel XML — a řídicí soubory jsou čisté XML:

Struktura archivu
kniha.epub
├── mimetype                     application/epub+zip (první, nekomprimovaný)
├── META-INF/
│   └── container.xml            kde leží balíčkový dokument
└── OEBPS/
    ├── content.opf              metadata, seznam souborů, pořadí čtení
    ├── nav.xhtml                obsah knihy
    ├── kapitola-1.xhtml
    ├── kapitola-2.xhtml
    ├── styl.css
    └── obrazky/obalka.jpg
EPUB 2EPUB 3
Obsah kapitolXHTML 1.1XHTML podle HTML (XML syntaxe), audio, video, MathML, SVG
Obsah knihy (navigace)toc.ncx (formát NCX z DAISY)nav.xhtml s nav epub:type="toc"
MetadataDublin Core s atributy opf:Dublin Core + meta property="…"
Pevné rozvrženíneano (komiksy, dětské knihy)
Stavzastaralýaktuální EPUB 3.3, doporučení W3C

mimetype a container.xml

Čtečka pozná EPUB podle souboru mimetype s obsahem application/epub+zip (bez konce řádku). Musí to být první soubor v archivu a nesmí být komprimovaný — díky tomu jde typ přečíst z pevného místa na začátku souboru.

Druhým pevným bodem je META-INF/container.xml. Říká, kde leží balíčkový dokument (soubor .opf); složka OEBPS je jen zvyklost, může se jmenovat jakkoli:

META-INF/container.xml
<?xml version="1.0" encoding="UTF-8"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
  <rootfiles>
    <rootfile full-path="OEBPS/content.opf"
              media-type="application/oebps-package+xml"/>
  </rootfiles>
</container>

Balíčkový dokument (OPF)

Soubor content.opf je srdce knihy. Má tři povinné části: metadata, manifest a spine.

OEBPS/content.opf
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="3.0"
         unique-identifier="uid" xml:lang="cs">
  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
    <dc:identifier id="uid">urn:uuid:4f1c2a7e-8d3b-4e6a-9f15-2b7c9d0e1a34</dc:identifier>
    <dc:title>Babička</dc:title>
    <dc:creator>Božena Němcová</dc:creator>
    <dc:language>cs</dc:language>
    <meta property="dcterms:modified">2026-09-29T08:00:00Z</meta>
    <meta property="schema:accessMode">textual</meta>
    <meta property="schema:accessibilityFeature">structuralNavigation</meta>
    <meta property="schema:accessibilitySummary">Kniha má obsah a nadpisy kapitol.</meta>
  </metadata>
  <manifest>
    <item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>
    <item id="k1" href="kapitola-1.xhtml" media-type="application/xhtml+xml"/>
    <item id="k2" href="kapitola-2.xhtml" media-type="application/xhtml+xml"/>
    <item id="css" href="styl.css" media-type="text/css"/>
    <item id="obalka" href="obrazky/obalka.jpg" media-type="image/jpeg" properties="cover-image"/>
  </manifest>
  <spine>
    <itemref idref="k1"/>
    <itemref idref="k2"/>
  </spine>
</package>
  • metadata — povinné jsou dc:identifier (na něj ukazuje atribut unique-identifier), dc:title, dc:language a meta property="dcterms:modified" s datem poslední změny ve tvaru RRRR-MM-DDThh:mm:ssZ. Prvky dc: pocházejí ze slovníku Dublin Core.
  • manifest — seznam všech souborů publikace s jejich MIME typem. Zvláštní role se značí atributem properties: nav pro obsah, cover-image pro obálku, scripted nebo svg pro kapitoly se skripty či vloženým SVG.
  • spine — pořadí, ve kterém se kapitoly čtou. Odkazuje na položky manifestu přes idref, ne přes názvy souborů.

Kapitoly v XHTML

OEBPS/kapitola-1.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops"
      xml:lang="cs" lang="cs">
  <head>
    <title>I. Příjezd babičky</title>
    <link rel="stylesheet" href="styl.css"/>
  </head>
  <body>
    <section epub:type="chapter" role="doc-chapter">
      <h2>I.</h2>
      <p>Dlouhá, dlouhá je to řada let,&#160;co jsem naposledy…</p>
      <img src="obrazky/obalka.jpg" alt="Babička s dětmi na lavičce"/>
    </section>
  </body>
</html>

Kapitola vypadá jako webová stránka, ale čte ji XML parser. Co by prohlížeč v HTML tiše opravil, v EPUB skončí chybou:

  • Každá značka musí být uzavřená, včetně <br/> a <img …/>.
  • Pojmenované entity HTML (&nbsp;, &mdash;) XML nezná. Piš přímo znaky v UTF-8 nebo číselné odkazy (&#160;).
  • Kořen <html> musí mít jmenný prostor http://www.w3.org/1999/xhtml.
  • Záleží na velikosti písmen: <P> není <p>.

Pravidla, která parser vyžaduje, shrnuje kapitola Jak funguje XML; entity a kódování vysvětluje část o kódování a entitách.

Přístupnost

Od 28. června 2025 se na e-knihy prodávané v EU vztahuje Evropský akt o přístupnosti. Kniha proto má mít smysluplné nadpisy, textové popisy obrázků (alt), správně nastavený jazyk a metadata o přístupnosti podle specifikace EPUB Accessibility 1.1 — vlastnosti schema:accessMode, schema:accessibilityFeature, schema:accessibilityHazard a schema:accessibilitySummary v OPF (ukázka výše jich obsahuje jen část). Soulad s požadavky kontroluje nástroj Ace by DAISY.

Sestavení a kontrola

Nejsnazší je knihu vytvořit a upravovat v programu Sigil nebo Calibre, případně ji exportovat z InDesignu nebo převést z Markdownu nástrojem Pandoc. Pokud skládáš archiv ručně, záleží na pořadí a kompresi souborů:

Ruční sestavení a kontrola
cd kniha/
zip -X0  ../kniha.epub mimetype          # nejdřív mimetype, bez komprese
zip -Xr9D ../kniha.epub META-INF OEBPS   # potom zbytek
java -jar epubcheck.jar ../kniha.epub   # kontrola

Referenčním validátorem je EPUBCheck od W3C; obchody s e-knihami ho při nahrání spouštějí také. Nejčastější hlášení:

Chyba (EPUBCheck)Příčina
PKG-006 / PKG-007mimetype není první soubor v archivu, je komprimovaný nebo má jiný obsah
RSC-005soubor neodpovídá schématu — v XHTML chybí uzavírací značka, neznámý atribut
RSC-007odkaz míří na soubor, který v archivu není
OPF-003soubor je v archivu, ale chybí v manifestu
entita „nbsp“ nedeklarovanáXHTML nezná pojmenované entity HTML — použij znak nebo &#160;