Guia rápido para construir livros em formato ePUB

Introdução

O formato ePUB (sigla para electronic publication) é um padrão livre e aberto para livros eletrônicos (e-book) e outros tipos de publicação desenvolvido e mantido pela IDPF - International Digital Publishing Fórum. O uso do ePUB permite adaptar e otimizar a apresentação de um conteúdo eletrônico em diferentes dispositivos de saída utilizados por um leitor desse formato (eReader).

A versão 2.0.1 do ePUB é recomendada pelo IDPF desde maio de 2011. Está em fase de revisão pela comunidade, desde fevereiro de 2011, a versão 3.0 do ePUB, como especificação proposta. Um resumo sobre as diferenças entre as duas versões será apresentada na seção "Futuro do formato ePUB - versão 3.0".

O projeto SciELO Livros adota o ePUB como formato complementar ao PDF, o qual é utilizado para visualização off-line e on-line do livro completo ou de seus capítulos individualmente por meio do seu web site. Nesse caso, o ePUB complementa a visualização off-line do livro ao disponibilizar esse formato para download e uso em qualquer eReader.

Esta Guia Rápida abordará o processo de elaboração do ePUB utilizando a versão 2.0.1, baseando-se em referências encontradas na internet sobre esse tema, assim como experiências obtidas durante o projeto SciELO Livros no uso de ferramentas de conversão automática para ePUB, como também a própria metodologia de publicação da SciELO para periódicos científicos.

O propósito desse Guia Rápida é possibilitar a repetição sistemática das etapas do processo de construção de um livro em formato ePUB, introduzindo os principais elementos da especificação desse padrão e suas respectivas referências para consulta futura.

Processo de elaboração do ePUB

O processo de elaboração descrito a seguir está baseado nas referências 5 e 6, as quais seguem as recomendações e especificações desenvolvidas e mantidas pelo IDPF, disponíveis nas referências 1, 2, 3 e 4.

Processo manual versus automático

A equipe do projeto SciELO Livros realizou alguns testes para geração de formato ePUB a partir de arquivos em formato PDF, PageMaker, InDesign e Quark utilizando os softwares Adobe InDesign, Calibre e QuarkXPress. Dos testes realizados, houve perda de informação, indisponibilidade da tabela de conteúdos, desestruturação textual, ausência de metadados, problemas de disposição de imagens no corpo do texto, falta de harmonização e dificuldades de estabelecer padrão de estilo de apresentação, dentre outros problemas.

Estes testes foram realizados utilizando os arquivos originais de diferentes editores sem qualquer padronização, o que também dificultou o uso de programas de geração automática de ePUB. Pela impossibilidade a curto prazo de estabelecer padrões de elaboração desses arquivos originais, o que alteraria o próprio processo de publicação de livros dos editores, e pelos compromissos estabelecidos no projeto SciELO Livros, foi decidido utilizar um processo manual de publicação dos livros em formato ePUB.

Para mais informação sobre programas de edição e leitura de publicações em formato ePUB, ver referência 5, seção "Software".

ePUB 2.0.1: as três especificações essenciais

A versão 2.0.1 do ePUB consiste no uso de três especificações 5:

  • Open Publication Structure (OPS) 2.0.1, contém a estrutura e formatação dos conteúdos 7
  • Open Packaging Format (OPF) 2.0.1, descreve a estrutura do arquivo .epub em XML 8
  • Open Container Format (OCF) 2.0.1, agrega todos os arquivos como um arquivo compactado ZIP 9

O ePUB utiliza internamente XHTML para estruturar o conteúdo, CSS para prover o layout e formatação e XML para informação de controle (manifesto do documento, tabela de conteúdos e os metadados da publicação). Todos esses arquivos são empacotados em um arquivo ZIP com extensão .epub.

A especificação OPS 2.0.1 usa o XHTML 1.1 (application/xhtml+xml) ou DTBook para construção de cada parte do livro (elementos pré-textuais e capítulos) em arquivos individuais. O layout e formatação são definidos utilizando um sub-conjunto de CSS 2.0 [10] (text/css). Para imagens, são utilizados arquivos em formato PNG (image/png), JPEG (image/jpeg), GIF (image/gif) e SVG (image/svg+xml). A especificação OPF 2.0.1 disponibiliza o mecanismo necessário para integrar todos os componentes (arquivos) da especificação OPS, provendo estrutura e semântica adicionais para publicações eletrônicas. O OPF é representado por dois arquivos XML com as extensões .opf e .ncx.

O arquivo .opf contém os metadados do livro, o seu manifesto (listagem e descrição de cada arquivo do ePUB, com exceção dos arquivos mimetype, container.xml e content.opf) e a ordem linear de leitura das partes do livro (elementos pré-textuais e capítulos).

O arquivo .ncx (Navigation Control file for XML) contém a estrutura hierárquica da tabela de conteúdos além de alguns metadados.

A especificação OCF 2.0.1 é responsável por definir como os arquivos do ePUB, conformados pelas especificações OPS e OPF, são organizados em um arquivo ZIP compactado, incluindo dois arquivos adicionais: mimetype e container.xml.

O arquivo mimetype é um documento texto em formato ASCII e deve conter uma linha com a informação application/epub+zip.

O arquivo container.xml tem como função indicar os conteúdos do livro, descritos no arquivo .opf.

De acordo com o OCF 2.0.1, os arquivos do ePUB devem ser organizados na seguinte estrutura de diretórios:

--ZIP Container--
mimetype
META-INF/
  container.xml
OPS/
  book.opf
  chapter1.xhtml
  ch1-pic.png
  css/
    style.css
    myfont.otf

Os arquivos dentro do diretório OPS podem ser organizados em diferentes sub-diretórios. Além do sub-diretório css da estrutura descrita acima, é permitido criar novos sub-diretório, como por exemplo, images para organizar as imagens do livro. Vide exemplo abaixo:

--ZIP Container--
mimetype
META-INF/
  container.xml
OPS/
  book.opf
  chapter1.xhtml
  images/
    ch1-pic.png
  css/
    style.css
    myfont.otf

Para informação detalhada das três especificações do ePUB 2.0.1, indica-se a leitura de cada uma das referências apontadas no texto.

ePUB Passo a Passo

Seguem abaixo os principais passos para disponibilizar um livro ou qualquer outra publicação eletrônica em formato ePUB 2.0.1, baseando-se na referência 6.

Passo 1 - Elaborar os conteúdos do livro em formato XHTML, CSS e imagens

Todas as partes de um livro devem ser representadas por arquivos XHTML individuais, com referências a estilos descritos em arquivo(s) CSS e imagens. Se o livro for dividido entre informação pré-textual, seis capítulos, uma seção de glossário e outra de referências bibliográficas, serão necessários nove arquivos XHTML. É possível enriquecer a estrutura XHTML desses arquivos para controlar o layout e estilo de apresentação dos conteúdos, além de agregar informação semântica nesses conteúdos, tais como capítulo, título, seção, rodapé e outros, como no exemplo abaixo:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt">
   <head>
      <meta http-equiv="Content-Type" content="application/xhtml+xml;    charset=utf-8" />
      <title>Introdução</title>
      <link href="css/scielobooks.css" rel="stylesheet" type="text/css" />
   </head>
   <body lang="PT-BR">
      <div class="chapter">
         <div class="title">
            <p>Introdução</p>
         </div>
         <div class="section">
            <div class="title">
               <p>Título da seção</p>
            </div>
            <p>Parágrafo 1 da seção</p>
            <p>Parágrafo 2 da seção</p>
         </div>
      </div>
   </body>
</html>

A equipe SciELO Livros deve estabelecer um padrão próprio de estrutura XHTML e CSS a ser aplicado a toda coleção de livros em formato ePUB. Esse padrão permitirá estender, caso seja necessário, o conjunto de instruções CSS para customização de layout e estilo por editora ou por livro.

Exemplo de CSS correspondente ao XHTML do exemplo:

.title {
	font-size: 25px;
	font-weight: bold;
}

.section {
	padding-top: 30px;
}

.section .title {
	font-size: 130%;
	font-weight: bold;
}

Os próximos passos utilizarão o livro "Mestres e Capoeiras Famosos da Bahia", da editora EDUFBA, formado por cinco capítulos (cinco arquivos XHTML), um arquivo CSS e sete imagens (sete arquivos em formato jpg), como segue:

  • Capítulos: 01.htm, 02.htm, 03.htm, 04.htm, 05.htm
  • CSS: scielobooks.css
  • Imagens: 01img01.png, 01img02.png, 04img01.png, 04img02.png, 04img03.png, 04img04.png, 04img05.png

Passo 2 - Construir estrutura de diretórios do ePUB, conforme especificação OCF

Para organizar os arquivos de conteúdo e de controle do ePUB, criar a seguinte estrutura de diretórios e seus respectivos arquivos:

ePUB_Mestres_e_Capoeiras_Famosos_da_Bahia
   mimetype
   META-INF/
      container.xml
   OPS/
      content.opf
      toc.ncx     
      01.htm
      02.htm
      03.htm
      04.htm
      05.htm  
      images/
         01img01.png
         01img02.png
         04img01.png
         04img02.png
         04img03.png
         04img04.png
         04img05.png
      css/
         scielobooks.css

Com a estrutura de diretórios definida, certificar-se que os atributos href dos arquivos XHTML estejam apontando corretamente para o arquivo CSS e as imagens. Exemplo:

Arquivo 04.htm

...
<link href="css/scielobooks.css" rel="stylesheet" type="text/css" />
...
<div class="image">
      <p><a id="fig01"></a></p>
      <p><img src="images/04img01.png" alt="Imagem 01" /></p>
</div>
...

Passo 3 - Construir arquivo mimetype

O mimetype é um arquivo ASCII contendo uma única linha com a seguinte string

application/epub+zip

Passo 4 - Construir arquivo container.xml

O arquivo container.xml deve ter a seguinte estrutura:

<?xml version="1.0" encoding="UTF-8" ?>
<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>

O atributo full-path contém o caminho do arquivo content.opf, conforme estrutura de diretórios definida no Passo 2.

Passo 5 - Contruir arquivo content.opf

O arquivo content.opf contém quarto elementos principais: metadata, manifest, spine e guide. O elemento metadata contém informação descritiva da publicação, baseado no padrão Dublin Core. O elemento manifest lista todos os arquivos que formam parte da publicação, com exceção dos arquivos mimetye, container.xml e content.opf. A ordem da lista é irrelevante. O elemento spine lista todos os arquivos XHTML que representam os conteúdos da publicação (elementos pré-textuais e capítulos). Sua ordem é relevante. Os arquivos que não estiverem listados no elemento spine não serão acessíveis em nenhuma parte da publicação. O elemento guide é opcional e descreve as principais partes da publicação, tais como capa, tabela de conteúdos, índice, glossário, etc.

<?xml version="1.0" encoding="UTF-8" ?>
<package version="2.0" unique-identifier="PrimaryID" xmlns="http://www.idpf.org/2007/opf">
   <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
      <dc:title>Mestres e Capoeiras Famosos da Bahia</dc:title>
      <dc:identifier id="PrimaryID" opf:scheme="URN">xxxxx</dc:identifier>
      <dc:identifier opf:scheme="URI">http://domain.org/xxxxx</dc:identifier>  
      <dc:language>pt</dc:language>
      <dc:creator opf:role="aut" opf:file-as="Abib, Pedro">Pedro Abib</dc:creator>
      <dc:publisher>Editora EDUFBA</dc:publisher>
      <dc:description>O livro 
      foi preparado por Pedro Abib – com significativos trabalhos prestados à capoeira – coordenador da pesquisa que
colheu as informações, bases do conteúdo desta publicação. Pedro também é um dos coordenadores do Grupo MEL – Mídia, 
Memória, Educação e Lazer, da Faculdade de Educação da Universidade Federal da Bahia, do qual participa a maioria dos 
pesquisadores que trabalhou na coleta das informações. Embora a pesquisa, a reflexão e os estudos sobre a capoeira, do 
ponto de vista acadêmico tenham boa guarida no MEL, suas ações não se limitam a isto e se estendem para fora dos muros da 
universidade, estabelecendo relações de intimidades com todo o universo da capoeira; fator que foi essencial à realização 
da pesquisa, principalmente quando o recurso da oralidade se fez necessário.</dc:description>
      <dc:coverage></dc:coverage>
      <dc:source>SciELO Livros</dc:source>
      <dc:date opf:event="original-publication">2009</dc:date>
      <dc:date opf:event="ops-publication">2011-09-25T17:02:00Z</dc:date>
      <dc:rights></dc:rights>
      <dc:subject>Cultura</dc:subject>
         <dc:subject>Capoeira</dc:subject>
         <dc:subject>Bahia</dc:subject>
   </metadata>
   <manifest>
      <!-- Content Documents -->
      <item id="chapter-1"
         href="01.htm"
         media-type="application/xhtml+xml"/>
      <item id="chapter-2"
         href="02.htm"
         media-type="application/xhtml+xml"/>
      <item id="chapter-3"
         href="03.htm"
         media-type="application/xhtml+xml"/>
      <item id="chapter-4"
         href="04.htm"
         media-type="application/xhtml+xml"/>
      <item id="chapter-5"
         href="05.htm"
         media-type="application/xhtml+xml"/>
    
      <!-- CSS Style Sheets -->
      <item id="css"
         href="css/scielobooks.css"
         media-type="text/css"/>

      <!-- Images -->
      <item id="image-1"
         href="images/01img01.png"
         media-type="image/png"/>
      <item id="image-2"
         href="images/01img02.png"
         media-type="image/png"/>
      <item id="image-3"
         href="images/04img01.png"
         media-type="image/png"/>
      <item id="image-4"
         href="images/04img02.png"
         media-type="image/png"/>
      <item id="image-5"
         href="images/04img03.png"
         media-type="image/png"/>
      <item id="image-6"
         href="images/04img04.png"
         media-type="image/png"/>
      <item id="image-7"
         href="images/04img05.png"
         media-type="image/png"/>
    	  
      <!-- NCX -->
      <item id="ncx"
         href="toc.ncx"
         media-type="application/x-dtbncx+xml"/>
   </manifest>

   <spine toc="ncx">
      <itemref idref="chapter-1" linear="yes"/>
      <itemref idref="chapter-2" linear="yes"/>
      <itemref idref="chapter-3" linear="yes"/>
      <itemref idref="chapter-4" linear="yes"/>
      <itemref idref="chapter-5" linear="yes"/>
   </spine>

   <guide>
      <reference type="preface" title="Prefácio" href="01.htm"/>
      <reference type="text" title="Introdução" href="02.htm"/>
      <reference type="text" title="Aspectos históricos da capoeira" href="03.htm"/>
      <reference type="text" title="Capoeiras famosos da Bahia" href="04.htm"/>
      <reference type="text" title="Fontes consultadas" href="05.htm"/>
      <reference type="bibliography" title="Referências" href="05.htm#references"/>
	<reference type="loi" title="Índice das Ilustrações" href="05.htm#illustrations"/>
   </guide>
</package>

O atributo href dos elementos item e reference deve conter o caminho e o nome do arquivo XHTML correspondente, de acordo com a estrutura de diretórios definida. O valor do atributo idref do elemento itemref deve ter correspondência com o mesmo valor de um atributo href do elemento item.

Passo 6 - Contruir arquivo toc.ncx

O arquivo toc.ncx correspondente deve ter a seguinte estrutura:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ncx PUBLIC
     "-//NISO//DTD ncx 2005-1//EN"
     "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">

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

   <head>
      <!-- The following four metadata items are required for all
        NCX documents, including those conforming to the relaxed
        constraints of OPS 2.0 -->
      <meta name="dtb:uid" content="http://domain.org/xxxxx"/>
      <meta name="dtb:depth" content="1"/>
      <meta name="dtb:totalPageCount" content="0"/>
      <meta name="dtb:maxPageNumber" content="0"/>
   </head>

   <docTitle>
      <text>Mestres e Capoeiras Famosos da Bahia</text>
   </docTitle>

   <docAuthor>
      <text>Pedro Abib</text>
   </docAuthor>

   <navMap>
      <navPoint class="preface" id="chapter-1" playOrder="1">
         <navLabel><text>Prefácio</text></navLabel>
         <content src="01.htm"/>
      </navPoint>
      <navPoint class="introduction" id="chapter-2" playOrder="2">
         <navLabel><text>Introdução</text></navLabel>
         <content src="02.htm"/>
      </navPoint>
      <navPoint class="chapter" id="chapter-3" playOrder="3">
         <navLabel><text>Aspectos históricos da capoeira</text></navLabel>
         <content src="03.htm"/>
      </navPoint>
      <navPoint class="chapter" id="chapter-4" playOrder="4">
         <navLabel><text>Capoeiras famosos da Bahia</text></navLabel>
         <content src="04.htm"/>
      </navPoint>
      <navPoint class="bibliography" id="chapter-5" playOrder="5">
         <navLabel><text>Fontes consultadas</text></navLabel>
         <content src="05.htm"/>
      </navPoint>	 	
   </navMap>
</ncx>

O elemento navMap é responsável pela tabela de conteúdos da publicação e pode ser hierárquico, possibilitando a declaração de capítulos > seções > subseções > etc por meio da endentação de elementos navPoint.

Passo 7 - Empacotar os arquivos ePUB em formato ZIP

Para a montagem do ePUB contendo todos os arquivos da publicação, seguindo as três especificações mencionadas, é necessário realizar a compactação em formato ZIP de toda a estrutura de diretórios. Alguns eReaders exigem que o arquivo mimetype seja o primeiro arquivo da lista, porém se compactarmos toda a estrutura de diretórios em uma única vez, o arquivo mimetype não será o primeiro a ser incluído. Para fazer isso, primeiro crie um arquivo ZIP vazio, arraste somente o arquivo mimetype para dentro do arquivo ZIP, em seguida arraste os diretórios OPS e META-INF juntos para o mesmo arquivo ZIP. Por último, renomeie a extensão do arquivo para .epub.

Passo 8 - Verificar conformidade do arquivo ePUB

É possível utilizar ferramentas de validação e detecção de erros na estrutura de marcação dos arquivos gerados a partir das especificações OPS, OPF e OCF para compor o arquivo ePUB. Um exemplo de ferramenta é o epubcheck, disponível em http://code.google.com/p/epubcheck/.

Futuro do formato ePUB - versão 3.0

Os detalhes das mudanças entre a versão 2.0.1 e 3.0 do ePUB estão descritos no site do IDPF, disponível em 11.

Referências Bibliográficas

  1. http://idpf.org/
  2. http://idpf.org/epub/201
  3. http://idpf.org/epub/30
  4. http://idpf.org/epub/30/spec/epub30-overview.html
  5. http://en.wikipedia.org/wiki/EPUB
  6. http://www.hxa.name/articles/content/epub-guide_hxa7241_2007.html
  7. http://idpf.org/epub/20/spec/OPS_2.0.1_draft.htm
  8. http://idpf.org/epub/20/spec/OPF_2.0.1_draft.htm
  9. http://idpf.org/epub/20/spec/OCF_2.0.1_draft.doc
  10. http://idpf.org/epub/20/spec/OPS_2.0.1_draft.htm#Section3.0
  11. http://idpf.org/epub/30/spec/epub30-changes.html