Plik EPUB (kontener) jest plikiem o pewnej strukturze. Przede wszystkim zauważmy, że jest to zwykłe archiwum zip, które można rozpakować - gdy zmienisz rozszerzenie pliku z .epub na .zip, będziesz mógł łatwo wczytać taki plik do dowolnego archiwizera.
Gdy zajrzysz do środka pliku zobaczysz w nim przykładową zawartość:
- plik mimetype
- folder META-INF z metadanymi publikacji
- container.xml
- folder OPS (nazwy tego folderu bywają różne, np. OEBPS, content) z zawartością publikacji - pliki XHTML (w praktyce stosuje się .html, .xhtml, .xml), CSS i inne
- folder z ilustracjami, np. o nazwie images
- obrazek1.jpg
- obrazek2.jpg
- ...
- opis struktury content.opf (nazwa jest dowolna, np. metadata.opf, mojebook.opf)
- spis treści toc.ncx
- arkusz stylów stylesheet.css
- rozdział 1 rozdzial1.xhtml
- rozdział 2 rozdzial2.xhtml
- ...
- folder z ilustracjami, np. o nazwie images
Uwaga: nazwy plików i odwołań są wrażliwe na wielkość liter, czyli PLIK.png nie jest tym samym co plik.png
Poniższa ilustracja pochodzi z dokumentu EPUB Best Practices sygnowanego przez Adobe i pokazuje zawartość kontenera EPUB.
Co ciekawe, plik EPUB można utworzyć za pomocą zwykłego notatnika, w którym piszemy zawartość, i programu do archiwizacji, za pomocą którego tworzymy plik .zip. Po zmianie rozszerzenia z .zip na .epub mamy już działający plik EPUB, który możemy wczytać do czytnika ebooków, jak Stanza, Adobe Digital Editions czy Mobipocket Reader.
Oczywiście na rynku są narzędzia wspomagające budowanie takich plików, podobnie jak w przypadku stron HTML, ale tekstowy format "wnętrza" pliku EPUB nie wymaga ich bezwględnego stosowania.
Plik mimetype
Plik mimetype, znadujący się w kontenerze na samym wierzchu, nie ma rozszerzenia, a jego zawartość składa się z jednego wiersza:
application/epub+zip
Plik ten informuje o typie kontenera - zzipowanym pliku EPUB.
Plik container.xml
Plik container.xml znajdujący się w folderze META-INF, powtarzalny w różnych ebookach (jednak z różną ścieżką full-path), wskazuje położenie content.opf. Jego przykładowa zawartość jest następująca:
<?xml version="1.0"?>
<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>
Plik OPF
Zawartość pliku content.opf opisujemy na osobnej stronie.