Guía del formato ePub

Recursos

Haz clic en las pestañas para ver los capítulos.

Texto original de Harrison Ainsworth, http://www.hxa7241.org/articles/

Versión en español por Felipe Soler – www.etext.es

Copyright (c) 2007, Harrison Ainsworth / HXA7241.

Copyright (c) 2010, Felipe Soler / www.etext.es

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

INTRODUCCION

Esta es una guía para crear libros electrónicos o publicaciones en formato ePub. Básicamente es un ejemplo anotado. No se mencionan todos los detalles o variaciones, pero se incluyen las especificaciones de uso normal. Está pensado para crear publicaciones ajustadas a la norma. Se incluye también una descripción de estilos opcionales para un lector Adobe Digital Editions (también ajustados a la norma).

Esta guía es un primer paso para enterder como funciona el formato ePub. Para la creación de libros en este formato, también es necesaria la compresión y habilidades para crear documentos XHTML/CSS y XML.

IDPF

‘Epub’ es un estándar del International Digital Publishing Forum. Es una adaptación de otros estándares (principalmente: XHTML, CSS, XML, NCX, DCMI). Está dividido en tres partes: contenido, metadatos, y archivo. Respectivamente, Open Publication Structure, Open Packaging Format y OEBPS Container Format, (OPS, OPF, y OCF). Es potente, directo y no propietario.

Adobe Digital Editions

ADE’ es uno de los principales lectores de archivos ePub. Es fiel al estándar. También utiliza un componente opcional propietario: una hoja de estilo extra para el ajuste de la apariencia del texto en columna (lo que está permitido por el estándar).

Esta guía se escribió usando ADE versión 1.0.467.

Documentos XHTML

El contenido se crea a partir de diferentes documentos de tipo XHTML, CSS, e imágenes.

XHTML

El formato ePub emplea XHTML 1.1, sin los siguientes módulos:

  • Forms (Módulo de Formularios)
  • Server-side Image Map (Módulo de Mapa de Imagen del lado Servidor)
  • Intrinsic Events (Módulo de Eventos Intrínsecos)
  • Scripting (Módulo de Scripting)

Diferencias entre XHTML 1.1 y XHTML 1.0 estricto:

  • Atributo lang no permitido (en su lugar usar xml:lang)
  • Atributo name en elementos a y map no permitido (en su lugar usar id)
  • Se permiten anotaciones ruby

Se incluye una declaración XML y XHTML doctype , al principio del documento:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

y un atributo xmlns en html :

<html xmlns="http://www.w3.org/1999/xhtml">

Cualquier caracter unicode, en codificación UTF-8 o UTF-16, está permitido. Pero algunos lectores pueden tener capacidades de representación limitadas. ADE 1.0 no soporta:

&shy; &ensp; &emsp; &thinsp; &zwnj; &zwj; &lrm; &rlm; &oline; &lceil; &rceil; &lfloor; &rfloor;)

CSS

Soporta un subconjunto de CSS 2.1. Ver detalles en la parte CSS de la especificación OPS.

Es recomendable ser simple, por lo que una opción válida es usar CSS 1 sin las siguientes propiedades:

  • Imagen de fondo:
    • background-image
    • background-repeat
    • background-attachment
    • background-position
    • background
  • word-spacing
  • letter-spacing
  • text-transform
  • list-style-image

Otros detalles menores no están soportados por la norma. No debe usarse posicionamiento absoluto.

Las CSS pueden ligarse a la cabecera XHTML head , o clocarse en style en head .

Adobe Digital Editions, ADE 1.0, no soporta:

  • pseudo-clases, pseudo-elementos
  • text-align: justify;
  • font-variant: small-caps;
  • Extras OPS:
    • display: oeb-page-head;
    • display: oeb-page-foot;
    • oeb-column-number: [integer];)

Imágenes

El formato XHTML puede contener imágenes de los siguientes tipos:

  • image/jpeg
  • image/png
  • image/gif
  • image/svg+xml

Fuentes

ePub usa fuentes OpenType. Referenciarlas en la CSS con @font-face , p. ej.:

@font-face { font-family: "Minion Pro"; src: url(MinionPro.otf); }@font-face { font-family: "Minion Pro"; font-style: italic; src: url(MinionPro-It.otf); }

Otros descriptores admitidos son:

font-variant, font-weight, font-size.

Vea las principales especificaciones: OPS, XHTML, CSS en la pestaña “Especificaciones”.

Paquete y archivos contenedores

Un documento ePub debe contener estos 4 archivos, de acuerdo con las siguientes descripciones:

mimetype

application/epub+zip


Se trata de ASCII, sin un final de linea.
Ver Especificación: OCF

container.xml

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

Si se renombra o se coloca el archivo content.opf en otro lugar, debe cambiarse el atributo full-path para que haya correpondencia.
Ver Especificación: OCF

content.opf

<?xml version="1.0"?>

<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="dcidid" 

   version="2.0">

   <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"

      xmlns:dcterms="http://purl.org/dc/terms/"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:opf="http://www.idpf.org/2007/opf">

      <dc:title>Epub Format Construction Guide</dc:title>

      <dc:language xsi:type="dcterms:RFC3066">en</dc:language>

      <dc:identifier id="dcidid" opf:scheme="URI">

         http://www.hxa7241.org/articles/content/epup-guide_hxa7241_2007_2.epub

         </dc:identifier>

      <dc:subject>Non-fiction, technical article, tutorial, Epub, IDPF, ebook

         </dc:subject>

      <dc:description>A guide for making Epub ebooks/publications, sufficient

         for most purposes. It requires understanding of XHTML, CSS, XML.

         </dc:description>

      <dc:relation>http://www.hxa.name/</dc:relation>

      <dc:creator>Harrison Ainsworth / HXA7241</dc:creator>

      <dc:publisher>Harrison Ainsworth / HXA7241</dc:publisher>

      <dc:date xsi:type="dcterms:W3CDTF">2007-12-28</dc:date>

      <dc:date xsi:type="dcterms:W3CDTF">2010-08-27</dc:date>

      <dc:rights>Creative Commons BY-SA 3.0 License.</dc:rights>

   </metadata>


   <manifest>

      <item id="ncx"      href="toc.ncx"                 

         media-type="application/x-dtbncx+xml" />

      <item id="css"      href="EpubGuide.css"           

         media-type="text/css" />

      <item id="logo"     href="hxa7241-logo.svg"         

         media-type="image/svg+xml" />

      <item id="title"    href="EpubGuide-title.html"    

         media-type="application/xhtml+xml" />

      <item id="contents" href="EpubGuide-contents.html" 

         media-type="application/xhtml+xml" />

      <item id="intro"    href="EpubGuide-intro.html"    

         media-type="application/xhtml+xml" />

      <item id="part1"    href="EpubGuide-1.html"        

         media-type="application/xhtml+xml" />

      <item id="part2"    href="EpubGuide-2.html"        

         media-type="application/xhtml+xml" />

      <item id="part3"    href="EpubGuide-3.html"        

         media-type="application/xhtml+xml" />

      <item id="part4"    href="EpubGuide-4.html"        

         media-type="application/xhtml+xml" />

      <item id="specs"    href="EpubGuide-specs.html"    

         media-type="application/xhtml+xml" />

   </manifest>


   <spine toc="ncx">

      <itemref idref="title" />

      <itemref idref="contents" />

      <itemref idref="intro" />

      <itemref idref="part1" />

      <itemref idref="part2" />

      <itemref idref="part3" />

      <itemref idref="part4" />

      <itemref idref="specs" />

   </spine>


   <guide>

      <reference type="title-page" title="Title Page"        

         href="EpubGuide-title.html" />

      <reference type="toc"        title="Table of Contents" 

         href="EpubGuide-contents.html" />

      <reference type="text"       title="Text"              

         href="EpubGuide-intro.html" />

   </guide>


</package>

Metadata (información de la publicación)

Proporciona información de la publicación de acuerdo a los teminos DCMI. El orden no es significativo, y están permitidos los duplicados.
Términos requeridos:

  • title
  • language — usa un código de idioma RFC3066
  • identifier — usa una cadena única: URI o ISBN son adecuados

Términos opcionales:

  • creator
  • contributor
  • publisher
  • subject
  • description
  • date
  • type
  • format
  • source
  • relation
  • coverage
  • rights

Algunos términos tienen atributos opcionales:

  • creator, contributor
  • date
    • opf:event — no estandarizado: usar un formato razonable
  • identifier
    • opf:scheme —no estandarizado: usar un formato razonable
  • date, format, identifier, language, type
    • xsi:type — usar un término estándar apropiado (como W3CDTF para date)
  • contributor, coverage, creator, description, publisher, relation, rights, source, subject, title
    • xml:lang — usa el formato RFC-3066

manifest (lista de archivos del documento)

Es una lista de todos los archivos que componen el documento. Excepto: mimetypecontainer.xmlcontent.opf . El orden no es significativo.
Debe asignarse el correcto mime-type en el atributo media-type. Las ids son obligatorias y deben ser únicas en el archivo content.opf.

spine (definición del orden de lectura)

Lista de todos los los documentosl XHTML en el manifest (que usan idref), y nada más, sin dupicados. El orden es significativo. Los documetos XHTML que sean omitidos, no podrán ser viculados, referenciados o localizables desde ninguna parte de la publicación.

guide (partes principales del documento)

Esta sección es opcional. Cada elemento hace referencia a un archivo del documento, y pueden tener una id. Los tipo types permitidos son:

  • cover
  • title-page
  • toc (table of contents)
  • index
  • glossary
  • acknowledgements
  • bibliography
  • colophon
  • copyright-page
  • dedication
  • epigraph
  • foreword
  • loi (list of illustrations)
  • lot (list of tables)
  • notes
  • preface
  • text
  • other.[...]

Especificación: OPF, DCMI

toc.ncx

<?xml version="1.0"?>

<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" 

   "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">


<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">


   <head>

      <meta name="dtb:uid" content="http://www.hxa7241.org/articles/content/epup-guide_hxa7241_2007_2.epub"/>

      <meta name="dtb:depth" content="2"/>

      <meta name="dtb:totalPageCount" content="0"/>

      <meta name="dtb:maxPageNumber" content="0"/>

   </head>



   <docTitle>

      <text>Epub Format Construction Guide</text>

   </docTitle>



   <navMap>

      <navPoint id="navPoint-1" playOrder="1">

         <navLabel>

            <text>Title Page</text>

         </navLabel>

         <content src="EpubGuide-title.html"/>

      </navPoint>

      <navPoint id="navPoint-2" playOrder="2">

         <navLabel>

            <text>Table of Contents</text>

         </navLabel>

         <content src="EpubGuide-contents.html"/>

      </navPoint>

      <navPoint id="navPoint-3" playOrder="3">

         <navLabel>

            <text>Introduction</text>

         </navLabel>

         <content src="EpubGuide-intro.html"/>

      </navPoint>

      <navPoint id="navPoint-4" playOrder="4">

         <navLabel>

            <text>1: XHTML Documents</text>

         </navLabel>

         <content src="EpubGuide-1.html"/>

      </navPoint>

      <navPoint id="navPoint-5" playOrder="5">

         <navLabel>

            <text>2: Package And Container Files</text>

         </navLabel>

         <content src="EpubGuide-2.html"/>

         <navPoint id="navPoint-6" playOrder="6">

            <navLabel>

               <text>mimetype</text>

            </navLabel>

            <content src="EpubGuide-2.html#mimetype"/>

         </navPoint>

         <navPoint id="navPoint-7" playOrder="7">

            <navLabel>

               <text>container.xml</text>

            </navLabel>

            <content src="EpubGuide-2.html#containerxml"/>

         </navPoint>

         <navPoint id="navPoint-8" playOrder="8">

            <navLabel>

               <text>content.opf</text>

            </navLabel>

            <content src="EpubGuide-2.html#contentopf"/>

         </navPoint>

         <navPoint id="navPoint-9" playOrder="9">

            <navLabel>

               <text>toc.ncx</text>

            </navLabel>

            <content src="EpubGuide-2.html#tocncx"/>

         </navPoint>

      </navPoint>

      <navPoint id="navPoint-10" playOrder="10">

         <navLabel>

            <text>3: ADE stylesheet</text>

         </navLabel>

         <content src="EpubGuide-3.html"/>

      </navPoint>

      <navPoint id="navPoint-11" playOrder="11">

         <navLabel>

            <text>4: Container Structure</text>

         </navLabel>

         <content src="EpubGuide-4.html"/>

      </navPoint>

      <navPoint id="navPoint-12" playOrder="12">

         <navLabel>

            <text>Specifications List</text>

         </navLabel>

         <content src="EpubGuide-specs.html"/>

      </navPoint>

   </navMap>



</ncx>

head

Los siguientes atributos meta content deben estar establecidos:

  • uid — el mismo identificador único que en content.opf
  • depth — según los niveles del arbol de contenidos (en navMap), entero, >= 1
  • totalPageCount — a 0
  • maxPageNumber — a 0

navMap

Es una tabla de contenidos para la navegación, opcionalmente jerarquica. (navMap no necesita incluir todos los archivos XHTML, como hace spineen content.opf).

navPoint

Posee dos atributos:

  • id — debe ser único en el archivo
  • playOrder — un entero, erdenado en navMap, comienza por 1

Subpartes:

  • text el contenido textual en navLabel
  • src el atributo es el origen listado en content — hace refernecia a un URI de uno de los archivos XHTML (fragment id allowed)

Están permitidos navPoints anidados en navPoints.

Ver Especificación: NCX

Hoja de estilo ADE

Este archivo es opcional, y proporciona con ADE 1.0 un control adicional de la apariencia con columnas:

  • page-template.xpgt

Se añade un vínculo en la cabecera de los archivos XHTML:

<link rel="stylesheet" type="application/vnd.adobe-page-template+xml"
   href="page-template.xpgt"/>

¿Será una publicación no conforme? En un documento ePub pueden incluirse archivos no estándar (como fuentes), pero debe recurrirse a un manejo adecuado. El estándar implica que todos los recursos manejados están explicitamente estandarizados (por la IDPF o usando componentes estándar). En las hojas de estilo, las reglas HTML dicen que los lectores deberían ignorar los tipos no reconocidos. Sin embargo, la hoja de estilo ADE parece conforme y segura. Además, ADE es uno de los principales lectores ePub tanto en ordenadores como en la implementación para lectores portátiles, que además se encarga de la gestión de los DRM de las obras distribuidas bajo plataforma DRM Adobe.

page-template.xpgt

<ade:template xmlns="http://www.w3.org/1999/xhtml" 

   xmlns:ade="http://ns.adobe.com/2006/ade" 

   xmlns:fo="http://www.w3.org/1999/XSL/Format">


   <fo:layout-master-set>

      <fo:simple-page-master master-name="single_column" margin-bottom="2em" 

         margin-top="2em" margin-left="2em" margin-right="2em">

         <fo:region-body/>

      </fo:simple-page-master>


      <fo:simple-page-master master-name="single_column_head" margin-bottom="2em" 

         margin-top="2em" margin-left="2em" margin-right="2em">

         <fo:region-before extent="8em"/>

         <fo:region-body margin-top="8em"/>

      </fo:simple-page-master>


      <fo:simple-page-master master-name="two_column" margin-bottom="2em" 

         margin-top="2em" margin-left="2em" margin-right="2em">

         <fo:region-body column-count="2" column-gap="3em"/>

      </fo:simple-page-master>


      <fo:simple-page-master master-name="two_column_head" margin-bottom="2em" 

         margin-top="2em" margin-left="2em" margin-right="2em">

         <fo:region-before extent="8em"/>

         <fo:region-body column-count="2" margin-top="8em" column-gap="3em"/>

      </fo:simple-page-master>


      <fo:simple-page-master master-name="three_column" margin-bottom="2em" 

         margin-top="2em" margin-left="2em" margin-right="2em">

         <fo:region-body column-count="3" column-gap="3em"/>

      </fo:simple-page-master>


      <fo:simple-page-master master-name="three_column_head" margin-bottom="2em" 

         margin-top="2em" margin-left="2em" margin-right="2em">

         <fo:region-before extent="8em"/>

         <fo:region-body column-count="3" margin-top="8em" column-gap="3em"/>

      </fo:simple-page-master>


      <fo:page-sequence-master>

         <fo:repeatable-page-master-alternatives>

            <fo:conditional-page-master-reference 

               master-reference="three_column_head" page-position="first" 

               ade:min-page-width="80em"/>

            <fo:conditional-page-master-reference 

               master-reference="three_column" ade:min-page-width="80em"/>

            <fo:conditional-page-master-reference 

               master-reference="two_column_head" page-position="first" 

               ade:min-page-width="50em"/>

            <fo:conditional-page-master-reference 

               master-reference="two_column" ade:min-page-width="50em"/>

            <fo:conditional-page-master-reference 

               master-reference="single_column_head" page-position="first"/>

            <fo:conditional-page-master-reference 

               master-reference="single_column"/>

         </fo:repeatable-page-master-alternatives>

      </fo:page-sequence-master>

   </fo:layout-master-set>


   <ade:style>

      <ade:styling-rule selector="#header" display="adobe-other-region" 

         adobe-region="xsl-region-before"/>

   </ade:style>


</ade:template>

El atributo selector en ade:style/ade:styling-rule se refiere a un selector CSS. Para más detalles: http://blogs.adobe.com/digitaleditions/template.html (puede que este enlace no exista). No tiene una especificación conocida.

Estructura del contenedor

Los archivos se organizan con la siguiente estructura de directorios:

EpubGuide
   META-INF
      container.xml
   mimetype
   content.opf
   toc.ncx
   page-template.xpgt
   EpubGuide.css
   hxa7241logo.png
   EpubGuide-title.html
   EpubGuide-contents.html
   EpubGuide-intro.html
   EpubGuide-1.html
   EpubGuide-2.html
   EpubGuide-3.html
   EpubGuide-4.html
   EpubGuide-specs.html

El directorio META-INF y su contenido son especiales, al igual que el archivo mimetype, pero todos los demás archivos pueden organizarse en una estructura de subdirectorios. De esta manera, también deberán ajustarse las referencias a estos archivos.

Una vez organizado, se deben comprimir los documentos en un archivo ZIP. La extensión del archivo deberá ser ‘epub’. Muy importante, el archivo mimetype debe ser el primero y no debe comprimirse. SE puede utilizar cualquier aplicación que sea capaz de crear contenedores ZIP y que permita incluir en ellos archivos sin comprimir (WinZip o 7zip son dos de ellas).

Especificación: OCF

Lista de especificaciones

IDPF
http://www.idpf.org/specs.htm

Open Publication Structure (OPS) 2.0 v1.0
http://www.idpf.org/2007/ops/OPS_2.0_final_spec.html
Open Packaging Format (OPF) 2.0 v1.0
http://www.idpf.org/2007/opf/OPF_2.0_final_spec.html
OEBPS Container Format (OCF) v1.0
http://www.idpf.org/ocf/ocf1.0/download/ocf10.htm
ANSI/NISO Z39.86 – 2005 Specifications for the Digital Talking Book, NCX part (NCX)
http://www.niso.org/standards/resources/Z39-86-2005.html#NCX
DCMI Metadata Terms 2006-12-18 (DC)
http://dublincore.org/documents/2006/12/18/dcmi-terms/
XHTML 1.1
http://www.w3.org/TR/xhtml11/
CSS 2.1
http://www.w3.org/TR/CSS21/
XML 1.0
http://www.w3.org/TR/xml/