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:
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 2 | EPUB 3 | |
|---|---|---|
| Obsah kapitol | XHTML 1.1 | XHTML 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" |
| Metadata | Dublin Core s atributy opf: | Dublin Core + meta property="…" |
| Pevné rozvržení | ne | ano (komiksy, dětské knihy) |
| Stav | zastaralý | 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:
<?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.
<?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 atributunique-identifier),dc:title,dc:languageameta property="dcterms:modified"s datem poslední změny ve tvaruRRRR-MM-DDThh:mm:ssZ. Prvkydc:pocházejí ze slovníku Dublin Core. - manifest — seznam všech souborů publikace s jejich MIME typem.
Zvláštní role se značí atributem
properties:navpro obsah,cover-imagepro obálku,scriptednebosvgpro 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
<?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, 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 (
,—) XML nezná. Piš přímo znaky v UTF-8 nebo číselné odkazy ( ). - Kořen
<html>musí mít jmenný prostorhttp://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ů:
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-007 | mimetype není první soubor v archivu, je komprimovaný nebo má jiný obsah |
| RSC-005 | soubor neodpovídá schématu — v XHTML chybí uzavírací značka, neznámý atribut |
| RSC-007 | odkaz míří na soubor, který v archivu není |
| OPF-003 | soubor je v archivu, ale chybí v manifestu |
| entita „nbsp“ nedeklarovaná | XHTML nezná pojmenované entity HTML — použij znak nebo   |