Você está na página 1de 15

EPUB - http://www.ibm.com/developerworks/br/xml/tutorials/x-epubtut/index.

html
Este tutorial orienta voc na criao de eBooks no formato EPUB. O EPUB um formato feito para o desenvolvedor, baseado em XML, que est surgindo como o padro de facto para livros digitais. Mas EPUB no serve somente para livros, com ele possvel: Empacotar documentao para leitura offline ou fcil distribuio Empacotar postagens no blog ou outro contedo nativo da web Desenvolver, procurar e recombinar usando ferramentas comuns de software livre Voc inicia este tutorial gerando um livro EPUB manualmente para ajudar a conhecer todos os componentes e arquivos necessrios. Em seguida, o tutorial mostra como empacotar o livro digital concludo e valid-lo com a especificao, como tambm test-lo em vrios sistemas de leitura. Ento, ele descreve como gerar EPUB a partir de DocBook XMLum dos padres mais usados para documentao tcnica e como usar Python para automatizar completamente a criao de EPUB com DocBook de ponta a ponta. Neste tutorial, voc: Aprende o que EPUB, quem est por trs dele, e quem o est adotando no momento Explora a estrutura de um pacote configurvel EPUB, incluindo seus arquivos necessrios e seus esquemas Cria um arquivo EPUB vlido a partir do rascunho usando contedo simples Usa ferramentas de software livre para produzir arquivos EPUB a partir de DocBook, um esquema amplamente usado para documentao tcnica e livros Automatiza a converso de EPUB usando Python e DocBook Nenhum sistema operacional particular suposto para este tutorial, entretanto voc deve estar familiarizado com mecanismos de criao de arquivos e diretrios. O uso de um editor de XML ou ambiente de desenvolvimento integrado (IDE) bastante recomendado. Para as demais partes deste tutorial, sobre automatizar a criao de EPUB, este tutorial supe que voc tenha uma ou mais habilidades em processamento bsico de XML. XSLT, DOM ou anlise baseada em SAX e como construir um documento XML usando uma API nativa de XML. Nenhuma familiaridade com o formato de arquivo EPUB necessria para concluir este tutorial.

Requisitos do sistema
Para concluir os exemplos neste tutorial, necessrio ter um interpretador Java (verso 1.5 ou posterior) e um interpretador Python (verso 2.4 ou posterior), assim como as bibliotecas XML necessrias a cada um. Entretanto, desenvolvedores de XML experientes podem adaptar os exemplos para qualquer linguagem de programao com bibliotecas XML.

Sobre o formato EPUB


Aprenda os fundamentos do EPUB, para que o EPUB mais usado, e como o EPUB diferencia-se do Portable Document Format (PDF).

O que EPUB?
EPUB o formato XML para publicaes e livros digitais refluveis e padronizados pelo International Digital Publishing Forum (IDPF), uma associao de comrcio e normas para o segmento de mercado de publicao digital. A IDPF adotou oficialmente o EPUB em outubro de 2007 e em meados de 2008 observou uma rpida adoo por grande parte dos publicadores. possvel ler o formato EPUB usando uma variedade de software livre e software comercial em todos os sistemas operacionais em geral, dispositivos e-ink, como Sony PRS, e dispositivos pequenos como Apple iPhone.

Quem est produzindo EPUB? Serve apenas para livros?


Embora publicadores de impresso tradicionais tenham sido os primeiros a adotarem o EPUB, nada em seu formato restringe seu uso a eBooks. Com ferramentas de software livremente disponveis, possvel empacotar pginas da web como EPUB, converter arquivos de texto simples ou transformar documentao XML DocBook existente em EPUB vlido e bem-formalizado. (Descrevo informaes mais recentes em De DocBook para EPUB.)

Como EPUB difere-se de PDF?


PDF ainda o formato de documento eletrnico mais amplamente utilizado no mundo. Do ponto de vista de um publicador de livro, PDF possui diversas vantagens: Arquivos PDF permitem controle perfeito de pixel sobre layout, inclusive layouts complexos propcios impresso, como muitas colunas e alternar entre estilos anverso/verso. PDFs podem ser gerados por uma grande variedade de ferramentas de documento baseado em GUI, como Microsoft Office Word ou Adobe InDesign. Leitores PDF so ubquos e instalados na maioria dos computadores modernos.

Fontes especficas podem ser integradas em PDF para controlar precisamente a sada final.

Do ponto de vista de um desenvolvedor de software, o PDF est muito longe do ideal: No um padro trivial para aprender; portanto, no uma questo simples de se trabalhar com seu prprio cdigo gerado em PDF. Embora o PDF agora seja um padro de organizao internacional para normatizao (ISO) (ISO 32000-1:2008), tradicionalmente tem sido controlado por uma nica corporao: Adobe Systems. Embora as bibliotecas do PDF estejam disponveis para a maioria das linguagens de programao, muitas so comerciais e esto integradas em aplicativos da GUI e no so facilmente controladas por processos externos. Nem todas as bibliotecas livres permanecem mantidas ativamente. O texto nativo em PDF pode ser extrado e procurado programaticamente, mas poucos PDFs so marcados de forma que a converso para um formato propcio para web fique simples e confivel. Documentos PDF no so facilmente refluveis, o que significa que no se adaptam bem a telas pequenas ou a mudanas radicais de layout.

Porque o EPUB propcio aos desenvolvedores


O EPUB refere-se a todas as falhas em PDF relacionadas convenincia para o desenvolvedor. Um EPUB um arquivo de formato ZIP simples (com uma extenso .epub ) que contm arquivos ordenados de maneira proscrita. Existem alguns requisitos de "manha" sobre como o archive ZIP preparado, os quais sero discutidos em detalhes posteriormente em Empacotando seu arquivo EPUB como um archive ZIP . Por outro lado, o EPUB simples: Quase tudo em EPUB XML. Arquivos EPUB podem ser desenvolvidos usando kits de ferramentas XML padro sem qualquer software especial ou proprietrio. Contedo EPUB (o texto real de um eBook) quase sempre XHTML na verso 1.1. (Um formato alternativo DTBook, um padro de codificao de livros para deficientes visuais. Consulte Resources para obter mais informaes sobre DTBook, as quais no esto descritas neste tutorial). Muitos dos esquemas XML so tirados das especificaes publicadas existentes que esto livremente disponveis.

Os dois principais pontos so: os metadados EPUB so XML e o contedo EPUB XHTML. Se seu sistema de desenvolvimento de documentao produz sada para web e/ou baseado em XML, ento est bem prximo de ser capaz de produzir EPUB, tambm.

Desenvolvendo seu primeiro EPUB


Um pacote configurvel EPUB de conformidade mnima possui alguns arquivos obrigatrios. A especificao pode ser bem rigorosa sobre o formato, contedo e local desses arquivos dentro do archive EPUB. Esta seo explica o que voc deve saber quando trabalhar com o padro EPUB.

Anatomia de um pacote configurvel EPUB


A estrutura bsica de um arquivo EPUB mnimo segue o padro em Listagem 1. Quando pronto para distribuio, essa estrutura de diretrio empacotadas juntamente com o requisito em formato ZIP, com alguns requisitos especiais discutidos em Empacotando seu arquivo EPUB como um archive ZIP .

Listagem 1. Layout de diretrio e arquivo para um archive EPUB simples


mimetype META-INF/ container.xml OEBPS/ content.opf title.html content.html stylesheet.css toc.ncx images/ cover.png

Observao: Um livro de amostra que acompanha esse padro est disponvel em Downloads, mas recomendo que voc crie seu prprio enquanto segue neste tutorial.

Para iniciar o desenvolvimento de seu livro EPUB, crie um diretrio para o projeto EPUB. Abra um editor de texto ou um IDE, como o Eclipse. Recomendo usar um editor que possui o modo XML em particular, um que possa validar com os esquemas Relax NG listados em Resources.

O arquivo tipo MIME


Esse tipo bem fcil: O arquivo tipo MIME necessrio e deve ser nomeado mimetype. O contedo do arquivo sempre:
application/epub+zip

Observe que o arquivo tipo MIME no pode conter nenhuma linha nova ou retorno de linha. Alm disso, o arquivo tipo MIME deve ser o primeiro arquivo no archive ZIP e ele prprio no deve ser compactado. Voc ver como inclu-lo usando os argumentos ZIP comuns em Empacotando seu arquivo EPUB como um archive ZIP . Por ora, apenas crie esse arquivo e salve-o, certifique-se de que ele esteja no nvel raiz de seu projeto EPUB.

META-INF/container.xml
No nvel raiz do EPUB, deve haver um diretrio META-INF, e ele deve conter um arquivo denominado container.xml. Os sistemas de leitura do EPUB procuraro por esse arquivo primeiro, j que ele aponta para o local dos metadados do livro digital. Crie um diretrio chamado META-INF. Dentro dele, abra um novo arquivo chamado container.xml para composio. O arquivo de continer bem pequeno, mas seus requisitos estruturais so rigorosos. Cole o cdigo em Listagem 2 META-INF/container.xml.

Listagem 2. Amostra o arquivo container.xml


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

O valor de caminho completo (em negrito) a nica parte desse arquivo que pode variar. O caminho do diretrio deve ser relativo raiz do prprio arquivo EPUB, no relativo ao diretrio META-INF. Os arquivos tipo MIME e continer so os nicos dois cuja localizao no archive do EPUB rigorosamente controlada. Conforme recomendado (embora no obrigatrio), armazene os arquivos restantes no EPUB em um subdiretrio. (Por conveno, geralmente ele chamado OEBPS, para Open eBook Publication Structure, mas pode ser qualquer nome que desejar). Em seguida, crie um diretrio denominado OEBPS em seu projeto EPUB. A seo a seguir deste tutorial descreve os arquivos que ficam dentro do OEBPS a real alimentao do livro digital: seus metadados e suas pginas. O diretrio META-INF pode conter alguns arquivos opcionais, tambm. Esses arquivos permitem que o EPUB suporte assinaturas digitais, criptografias e gerenciamento de direitos digitais (DRM). Esses tpicos no esto cobertos neste tutorial. Consulte a especificao OCF para obter mais informaes.

arquivo de metadados Open Packaging Format


Embora esse arquivo possa ter qualquer nome, o arquivo OPF normalmente chamado content.opf. Ele especifica o local de todo contedo do livro, desde seu texto at outra mdia como imagens. Tambm aponta para outro arquivo de metadados, o ndice Navigation Center eXtended (NCX). O arquivo OPF o metadado mais complexo na especificao EPUB. Crie o OEBPS/content.opf, e cole o contedo de Listagem 3 nele.

Listagem 3. Arquivo de contedo OPF com metadados de amostra


<?xml version='1.0' encoding='utf-8'?> <package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="bookid" version="2.0"> <metadata> <dc:title>Hello World: My First EPUB</dc:title> <dc:creator>My Name</dc:creator> <dc:identifier id="bookid">urn:uuid:0cc33cbd-94e2-49c1-909a-72ae16bc2658</dc:identifier> <dc:language>en-US</dc:language> <meta name="cover" content="cover-image" /> </metadata> <manifest> <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/> <item id="cover" href="title.html" media-type="application/xhtml+xml"/> <item id="content" href="content.html" media-type="application/xhtml+xml"/> <item id="cover-image" href="images/cover.png" media-type="image/png"/> <item id="css" href="stylesheet.css" media-type="text/css"/> </manifest> <spine toc="ncx"> <itemref idref="cover" linear="no"/> <itemref idref="content"/> </spine> <guide> <reference href="title.html" type="cover" title="Cover"/> </guide> </package>

Esquemas OPF e namespaces O documento OPF em si deve usar o namespace http://www.idpf.org/2007/opf, e os metadados estaro no namespace Dublin Core Metadata Initiative (DCMI), http://purl.org/dc/elements/1.1/. Seria uma boa ideia incluir o OPF e o esquema DCMI em seu editor XML. Todos os esquemas utilizados no EPUB esto disponveis em Downloads. Metadata Dublin Core define um conjunto de termos de metadados comuns que podem ser usados para descrever uma grande variedade de materiais digitais; ele no faz parte da especificao do EPUB em si. Todos esses termos so permitidos na seo de metadados do OPF. Quando voc desenvolver um EPUB para distribuio, inclua o mximo de detalhes que puder aqui, embora a extrao fornecida em Listagem 4 seja suficiente para iniciar.

Listagem 4. Extrao dos metadados OPF


... <metadata> <dc:title>Hello World: My First EPUB</dc:title> <dc:creator>My Name</dc:creator> <dc:identifier id="bookid">urn:uuid:12345</dc:identifier> <meta name="cover" content="cover-image" /> </metadata> ...

Os dois termos obrigatrios so title e identificador. De acordo com a especificao do EPUB, o identificador deve ser um valor exclusivo, muito embora seja critrio do criador do livro digital definir esse valor exclusivo. Para publicadores de livro, esse campo normalmente conter um nmero ISBN ou Library of Congress. Para outros criadores do EPUB, considere usar uma URL ou um ID de usurio exclu dc:identifier . Outros metadados a considerar para incluir, se forem relevantes a seu contedo, incluem: Idioma (como dc:language). Data de publicao (como dc:date). Publicador (como dc:publisher). (Esse pode ser sua empresa ou nome individual). Informaes sobre copyright (como dc:rights). (Se estiver liberando o trabalho sob uma licena Creative Commons, coloque a URL da licena aqui). Consulte Resources Para obter mais informaes sobre DCMI. Incluindo um elemento meta com o atributo nome contendo capa no faz parte da especificao do EPUB diretamente, mas uma maneira recomendada de criar pginas de capa e imagens de maneira

mais mvel. Alguns renderizadores EPUB preferem usar um arquivo de imagem como capa, enquanto outros utilizaro um arquivo XHTML contendo uma imagem de capa em sequncia. Este exemplo mostra as duas formas. O valor do atributo meta , o atributo contedo deve ser o ID da imagem de capa do livro no manifesto, que a prxima parte do arquivo OPF. Manifesto O manifesto OPF lista todos os recursos encontrados no EPUB que fazem parte do contedo (e excluindo metadados). Geralmente, isso se refere a uma lista de arquivos XHTML que compem o texto do eBook mais alguma mdia relacionada, como imagens. O EPUB encoraja o uso de CSS para contedo de lucro de estilo, portanto os arquivos CSS tambm esto includos no manifesto. Todo arquivo que entrar em seu livro digital deve estar listado no manifesto. A Listagem 5 mostra a seo de manifesto extrado.

Listagem 5. Extrao do manifesto OPF


... <manifest> <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/> <item id="cover" href="title.html" media-type="application/xhtml+xml"/> <item id="content" href="content.html" media-type="application/xhtml+xml"/> <item id="cover-image" href="images/cover.png" media-type="image/png"/> <item id="css" href="stylesheet.css" media-type="text/css"/> </manifest> ...

Manifestos OPF avanados Uma amostra mais avanada de um arquivo de manifesto incluir diversos arquivos XHTML como tambm imagens e um CSS. Obtenha um EPUB completo com exemplos de tipos comuns deDownloads. Voc deve incluir o primeiro item, toc.ncx (discutido na prxima seo). Observe que todos os itens possuem um valor de tipo de mdia apropriado e que o tipo de mdia do contedo XHTML application/xhtml+xml. O valor exato obrigatrio e no pode ser text/html ou algum outro tipo. O EPUB suporta quatro formatos de arquivo de imagem como tiposprincipais : Joint Photographic Experts Group (JPEG), Portable Network Graphics (PNG), Graphics Interchange Format (GIF) e Scalable Vector Graphics (SVG). possvel incluir tipos de arquivos no suportados se voc fornecer um fall-back para um tipo principal. Consulte a especificao de OPF para obter mais informaes sobre itens de fall-back. Os valores do atributo href devem ser um Identificador Uniforme de Recursos (URI) que esteja relativo ao arquivo OPF. ( fcil confundir com a referncia ao arquivo OPF no arquivo container.xml, no qual deve ser relativo ao EPUB como um todo). Nesse caso, o arquivo OPF est no mesmo diretrio OEBPS que seu contedo, portanto nenhuma informao de caminho necessria aqui. Spine Embora o manifesto informe ao leitor EPUB quais arquivos fazem parte do archive, o spine indica a ordem na qual eles aparecem, ou em termos de EPUB, a ordem de leitura linear do livro digital. Um modo de pensar do OPF spine que ele define a ordem das "pginas" do livro. O spine lido na ordem do documento, da parte superior para a parte inferior. A Listagem 6 mostra uma extrao do arquivo OPF.

Listagem 6. Extrao do OPF spine


... <spine toc="ncx"> <itemref idref="cover" linear="no"/> <itemref idref="content"/> </spine> ...

Cada elemento itemref possui um atributo obrigatrio idref, que deve corresponder a um dos IDs no manifesto. O atributo toc tambm obrigatrio. Refere-se a um ID no manifesto que deve indicar o nome do arquivo do ndice NCX. O atributo linear no spine indica se o item considerado parte da ordem de leitura linear ou se irrelevante em termos de frente ou final. Recomendo que voc defina qualquer pgina de capa como linear=no. De acordo com o EPUB, os sistemas de leitura abriro o livro no primeiro item no spine, ou seja no definido como linear=no.

Guia A ltima parte do arquivo de contedo OPF o guia. Esta seo opcional, mas recomendada. A Listagem 7 mostra uma extrao de um arquivo de guia.

Listagem 7. Extrao de um guia OPF


... <guide> <reference href="cover.html" type="cover" title="Cover"/> </guide> ...

O guia uma maneira de fornecer informaes semnticas a um sistema de leitura EPUB. Enquanto o manifesto define os recursos fsicos no EPUB e o spine fornea informaes sobre sua ordem, o guia explica o que as sees significam. Aqui est uma lista parcial dos valores que so permitidos no guia OPF: capa: A capa do livro ttulo-pgina: Uma pgina com informaes do autor e publicador toc: O ndice Para obter uma lista completa, consulte a especificao OPF 2.0, disponvel em Resources.

ndice NCX
Embora o arquivo OCF seja definido como parte do EPUB em si, o ltimo arquivo de metadados principal emprestado de um padro de livro digital diferente. DAISY um consrcio que desenvolve formatos de dados para leitores que so incapazes de usar livros tradicionais, geralmente por causa de deficincia visual ou incapacidade para manipular livros impressos. EPUB emprestou o NCX DTD do DAISY. O NCX define o ndice do livro digital. Em livros complexos, normalmente ele hierrquico, contendo partes aninhadas, captulos e sees. Usando seu editor de XML, crie o OEBPS/toc.ncx, e inclua o cdigo em A Listagem 8.

Listagem 8. Arquivo NCX simples


<?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 xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1"> <head> <meta name="dtb:uid" content="urn:uuid:0cc33cbd-94e2-49c1-909a-72ae16bc2658"/> <meta name="dtb:depth" content="1"/> <meta name="dtb:totalPageCount" content="0"/> <meta name="dtb:maxPageNumber" content="0"/> </head> <docTitle> <text>Hello World: My First EPUB</text> </docTitle> <navMap> <navPoint id="navpoint-1" playOrder="1"> <navLabel> <text>Book cover</text> </navLabel> <content src="title.html"/> </navPoint> <navPoint id="navpoint-2" playOrder="2"> <navLabel> <text>Contents</text> </navLabel> <content src="content.html"/> </navPoint> </navMap> </ncx>

Metadados NCX O DTD requer quatro elementos meta dentro do NCX <head> : uid: o ID exclusivo do livro digital. Esse elemento deve corresponder ao dc:identifier no arquivo OPF. profundidade: Reflete o nvel de hierarquia no ndice. Esse exemplo possui somente um nvel, portanto esse valor 1. totalPageCount e maxPageNumber: Aplica-se somente a livros impressos e pode ser deixado como 0. O contedo de docTitle/text o ttulo do trabalho, e corresponde ao valor de dc:title no OPF. Qual a diferena entre NCX e o OPF spine? compreensvel estar confuso, j que ambos os arquivos descrevem a ordem e o contedo do documento. A maneira mais fcil de explicar a diferena por analogia com um livro impresso: O OPF spine descreve como as sees do livro so fisicamente vinculadas entre si, como que a ltima pgina do final de um captulo revela a primeira pgina do segundo captulo. O NCX descreve o ndice no final do livro. O ndice sempre inclui todas as principais sees do livro, mas tambm pode listar as subsees, o que no ocorre em suas prprias pginas. Uma boa regra prtica e que o NCX normalmente contm mais elementos navPoint do que elementositemref no OPF spine. Na prtica, todos os itens no spine aparecem no NCX, mas o NCX pode ser mais granular do que o spine. NCX navMap O operador navMap a parte mais importante do arquivo NCX, j que ele define o ndice do livro real. A seo navMap contm um ou mais elementos navPoint . Cada navPoint deve conter os seguintes elementos: Um atributo playOrder , que reflete a ordem de leitura do documento. Essa ordem segue a mesma da lista de elementos itemref no OPF spine. Um elemento navLabel/text , que descreve o ttulo dessa seo do livro. Normalmente um ttulo do captulo ou nmero, como "Captulo um," oucomo nesse exemplo "Pgina de capa." Um elemento contedo cujo atributo src aponta para o recurso fsico que contm o contedo. Esse ser um arquivo declarado no manifesto OPF. (tambm aceitvel usar identificadores de fragmento aqui para apontar para ncoras dentro do contedo XHTML por exemplo,content.html#footnote1.) Opcionalmente, um ou mais elementos filho navPoint . Pontos aninhados so como os documentos hierrquicos so expressos no NCX. A estrutura do livro de amostra simples: Possui apenas duas pginas e no esto aninhadas. Isso significa que voc ter dois elementos navPoint com valores ascendentes playOrder , comeando em 1. No NCX, voc tem a oportunidade de nomear essas sees, permitindo que os leitores pulem para diferentes partes do eBook.

Incluindo o contedo final.


Agora voc conhece todos os metadados necessrios no EPUB, ento hora de inserir o contedo real do livro. possvel usar o contedo de amostra fornecido em Downloads ou criar seu prprio contedo, desde que os nomes de arquivo correspondam aos metadados. Em seguida, crie esses arquivos e pasta: title.html: Esse arquivo ser a pgina de titularidade do livro. Crie esse arquivo e inclua um elemento img que faa referncia a uma imagem de capa, com o valor do atributo src como images/cover.png. imagens: Crie essa pasta dentro do OEBPS, em seguida copie a imagem de amostra (ou crie sua prpria), nomeando-a cover.png. content.html: Esse ser o texto real do livro. stylesheet.css: Coloque esse arquivo no mesmo diretrio OEBPS que os arquivos XHTML. Esse arquivo pode conter qualquer declarao CSS que voc desejar, como a configurao de tipo de fonte ou cor de texto. Consulte A Listagem 10 para obter um exemplo desse arquivo CSS.

XHTML e CSS em um livro EPUB Listagem 9 contm um exemplo de uma pgina de contedo EPUB vlida. Use essa amostra para sua pgina de ttulo (title.html) e uma semelhante para a pgina de contedo principal (content.html) de seu livro.

Listagem 9. Pgina de ttulo de amostra (title.html)


<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Hello World: My First EPUB</title> <link type="text/css" rel="stylesheet" href="stylesheet.css" /> </head> <body> <h1>Hello World: My First EPUB</h1> <div><img src="images/cover.png" alt="Title page"/></div> </body> </html>

O contedo XHTML no EPUB segue algumas regras que podem ser pouco familiares a voc do ponto de vista de desenvolvimento da desenvolvimento geral: O contedo deve ser validado como XHTML 1.1: A nica diferena significativa entre XHTML 1.0 Strict e XHTML 1.1 que o atributo nome foi removido. (Use os IDs para se referir s ncoras dentro do contedo). Elementos img podem fazer referncia somente a imagens locais no eBook: Os elementos no podem fazer referncia a imagens na web. script blocos devem ser evitados: No h requisito para leitores do EPUB terem suporte de cdigo JavaScript. H algumas diferenas menores na maneira como o EPUB suporta CSS, mas nenhuma que afete o uso comum dos estilos (consulte a especificao OPS para obter detalhes). A Listagem 10 demonstra um arquivo CSS simples que pode ser aplicado ao contedo para definir recomendaes de fontes bsicas e a cor dos ttulos em vermelho.

Lista 10. Estilos da amostra para o eBook (stylesheet.css)


body { font-family: sans-serif; } h1,h2,h3,h4 { font-family: serif; color: red; }

Um ponto de interesse que o EPUB suporta especialmente a regra CSS 2 @font-face , que permite fontes integradas. Se voc criar documentao tcnico, isso provavelmente no relevante, mas os desenvolvedores que criarem EPUBs em vrios idiomas ou para domnios especializados apreciaro a capacidade de especificar dados de fonte exatos. Agora voc j possui tudo o que precisa para criar seu primeiro EPUB. Na seo seguinte, voc ir empacotar o livro de acordo com as especificaes OCF e descobrir como valid-lo.

Empacotar e Verificar seu EPUB


Nesta altura, voc j deve ter um pacote configurvel EPUB pronto para empacotar. Esse pacote configurvel poder ser um novo livro que voc mesmo criou ou um que utiliza os arquivos brutos disponveis de Downloads.

Empacotando seu arquivo EPUB como um archive ZIP


A parte do Formato de Continer OEBPS da especificao EPUB possui diversas coisas para serem expostas sobre EPUB e ZIP, mas as mais importantes so:

O primeiro arquivo no archive deve ser um arquivo tipo MIME (consulte Mimetype neste tutorial). O arquivo tipo MIME no deve ser compactado. Isso permite que utilitrios no ZIP descubram o tipo MIME lendo os bytes brutos, comeando da posio 30 no pacote configurvel EPUB. O archive ZIP no pode ser criptografado. O EPUB suporta criptografia mas no no nvel do arquivo zip.

Usando ZIP verso 2.3 sob um sistema operacional como o UNIX, crie o arquivo EPUB ZIP em dois comandos, como emListagem 11. (Esses comandos presumem que seu diretrio atualmente em funcionamento seja seu projeto EPUB).

Listagem 11. Empacotando o EPUB em um arquivo epub+zip vlido


$ zip -0Xq my-book.epub mimetype $ zip -Xr9Dq my-book.epub *

No primeiro comando, voc cria o novo archive ZIP e inclui o arquivo tipo MIME sem nenhuma compactao. No segundo, voc inclui os itens restantes. Os sinalizadores -X e -D minimizam as informaes irrelevantes no arquivo zip; -r incluir recursivamente o contedo dos diretrios META-INF e OEBPS.

Validao do EPUB
Embora o padro do EPUB no seja especialmente difcil, seus arquivos XML devem ser validados com esquemas especficos. Se voc usar um editor XML ciente de esquema para gerar os metadados e XHTML, j ter mais de meio caminho andado. Faa uma verificao final com o pacote EpubCheck (consulte Resources). Adobe mantm o pacote EpubCheck, e est disponvel como um software livre sob licena de Berkeley Software Distribution (BSD). um programa Java que pode executar como uma ferramenta independente ou como um aplicativo da web, ou pode ser integrado em um aplicativo que execute em Java Runtime Environment (JRE) verso 1.5 ou posterior. Execut-lo a partir da linha de comando simples. Listagem 12 d um exemplo.

Listagem 12. Executando o utilitrio EpubCheck


$ java -jar /path/to/epubcheck.jar my-book.epub

Se voc falhar ao criar alguns dos arquivos auxiliares ou se introduziu um erro nos arquivos de metadados, poder obter uma mensagem de erro semelhante aquela em Listagem 13.

Lista 13. Amostra de erros do EpubCheck


my-book.epub: image file OEBPS/images/cover.png is missing my-book.epub: resource OEBPS/stylesheet.css is missing my-book.epub/OEBPS/title.html(7): 'OEBPS/images/cover.png': referenced resource missing in the package Check finished with warnings or errors!

Pode ser necessrio configurar seu CLASSPATH aqui para apontar para o local da instalao EpubCheck, j que ele possui algumas bibliotecas externas para importar. Voc provavelmente precisar configurar o CLASSPATH se receber uma mensagem como:
org.xml.sax.SAXParseException: no implementation available for schema language with namespace URI "http://www.ascc.net/xml/schematron"

Se a validao foi bem-sucedida, ver "Nenhum erro ou avisos detectados". Nesse caso, parabns por produzir seu primeiro EPUB!

Visualizao do EPUB
Testar no serve somente para validao: Trata-se tambm de certificar-se de que o livro esteja correto. As folhas de estilo funcionam corretamente? As sees esto realmente na ordem lgica correta? O livro inclui todo o contedo esperado? Diversos leitores do EPUB esto disponveis para voc usar para testar. a Figura 1 mostra uma captura de tela de Adobe Digital Editions (ADE), o leitor do EPUB mais usado normalmente.

Figura 1. O EPUB no ADE

As cores da fonte e imagens esto aparecendo, o que bom. O ADE no apresenta renderizao correta no ttulo em uma fonte sans-serif, apesar de que isso pode ser um problema com o CSS. interessante aqui verificar em outro leitor. a Figura 2mostra o mesmo livro renderizado em meu software livre, Bookworm, leitor do EPUB baseado na web.

Figura 2. O EPUB em Bookworm

Neste caso, acontece apenas que esse ADE no suporta essa declarao particular. Conhecer as sutilezas de um software de leitura individual ser fundamental se em seu livro digital for importante uma formatao precisa. Agora que voc j passou pelo processo trabalhoso de criao de um EPUB simples a partir de rascunho, veja o que preciso para converter DocBook, um esquema de documentao XML comum, em EPUB.

De DocBook para EPUB


DocBook uma opo comum para desenvolvedores que precisam manter documentao tcnica em formato longo. Diferentemente dos arquivos produzidos por programas de processamento de texto tradicionais, possvel gerenciar a sada de DocBook com sistemas de controle de verso baseados em texto. Como o DocBook XML, voc pode transform-lo facilmente em diversos formatos de sada. Desde o terceiro trimestre de 2008, possvel localizar suporte de EPUB como um formato de sada do projeto DocBook XSL oficial.

Executando o pipeline DocBook-para-EPUB bsico com XSLT


Inicie com um documento DocBook simples, em a Listagem 14. Esse documento est definido como tipo livro e inclui um prefcio, dois captulos e uma imagem sequencial exibida na pgina de ttulo. Esse imagem estar localizada no mesmo diretrio em que o arquivo de origem do DocBook. Crie esse arquivo e a pgina de ttulo voc mesmo, ou faa download de amostras de Downloads.

Listagem 14. Um livro DocBook simples


<?xml version="1.0" encoding="utf-8"?> <book> <bookinfo> <title>My EPUB book</title> <author><firstname>Liza</firstname> <surname>Daly</surname></author> <volumenum>1234</volumenum> </bookinfo> <preface id="preface"> <title>Title page</title> <figure id="cover-image"> <title>Our EPUB cover image icon</title> <graphic fileref="cover.png"/> </figure> </preface> <chapter id="chapter1"> <title>This is a pretty simple DocBook example</title> <para> No h muito para ver aqui. </para> </chapter> <chapter id="end-notes"> <title>End notes</title> <para> Este espao deixado em branco intencionalmente. </para> </chapter> </book>

Em seguida, consulte Resources para fazer o download da verso mais recente das folhas de estilo do DocBook XSL, e certifique-se de ter um processador XSLT como xsltproc ou Saxon instalado. Esse exemplo utiliza xsltproc, que est disponvel na maioria dos sistemas como UNIX. Para converter o arquivo DocBook, simplesmente execute esse arquivo com o mdulo do EPUB includo no DocBook XSL, como em A Listagem 15.

Lista 15. Convertendo DocBook em EPUB


$ xsltproc /path/to/docbook-xsl-1.74.0/epub/docbook.xsl docbook.xml Writing OEBPS/bk01-toc.html for book Writing OEBPS/pr01.html for preface(preface) Writing OEBPS/ch01.html for chapter(chapter1) Writing OEBPS/ch02.html for chapter(end-notes) Writing OEBPS/index.html for book Writing OEBPS/toc.ncx Writing OEBPS/content.opf Writing META-INF/container.xml

Customizando o DocBook XSL


O pipeline de converso do DocBook-para-EPUB ainda relativamente novo, pode ser necessrio customizar o XSLT para obter a sada desejada.

Em seguida, inclua o arquivo tipo MIME e desenvolva o archive epub+zip voc mesmo. Listagem 16 mostra os trs comandos rpidos e o resultado de uma passagem pelo validador EpubCheck.

Listagem 16. Criando o archive EPUB de DocBook


$ echo "application/epub+zip" > mimetype $ zip -0Xq my-book.epub mimetype $ zip -Xr9D my-book.epub * $ java -jar epubcheck.jar my-book.epub No errors or warnings detected

Bem fcil! a Figura 3 mostra sua criao em ADE.

Figura 3. DocBook EPUB convertido em ADE

Voltar para parte superior

Converso automtica de DocBook-para-EPUB com Python e lxml


O DocBook XSL tem se empenhado em tornar a gerao do EPUB menos complicada, mas voc deve executar algumas etapas fora do XSLT. Esta ltima seo demonstra um programa Python de amostra que conclui a criao de um pacote configurvel EPUB vlido. Mostro mtodos individuais no tutorial; voc pode obter o programa docbook2epub.py completo emDownloads. Diversos bibliotecas Python XSLT esto disponveis, mas minha preferida lxml. Ela fornece no penas funcionalidade XSLT 1.0, mas tambm anlise de alto desempenho, suporte integral de XPath 1.0 e extenses especiais para manipulao de HTML. Se preferir uma biblioteca diferente ou usar uma linguagem de programao diferente de Python, esses exemplos devem ser fceis de adaptar. Chamando o DocBook XSL com lxml O mtodo mais eficiente de chamar XSLT usando lxml de antemo analisar o XSLT, ento criar um transformador para uso repetitivo. Isso til, desde que meu script DocBook-para-EPUB aceite vrios arquivos DocBook para converter.A Listagem 17demonstra essa abordagem.

Listagem 17. Executando o DocBook XSL usando lxml


import os.path from lxml import etree def convert_docbook(docbook_file): docbook_xsl = os.path.abspath('docbook-xsl/epub/docbook.xsl') # D ao processador XSLT a capacidade de criar novos diretrios xslt_ac = etree.XSLTAccessControl(read_file=True, write_file=True, create_dir=True, read_network=True, write_network=False) transform = etree.XSLT(etree.parse(docbook_xsl), access_control=xslt_ac) transform(etree.parse(docbook_file))

O mdulo EPUB em DocBook XSL cria ele mesmo os arquivos de sada, assim nada retornado da avaliao da transformao aqui. Em vez disso, o DocBook cria duas pastas (META-INF e OEBPS) no diretrio ativo atual para conter os resultados da converso. Copiando as imagens e outros recursos no archive

O DocBook XSL no faz nada com as imagens que voc possa fornecer para uso em seu documento; ele apenas cria os arquivos de metadados e o XHTML renderizado. Como a especificao do EPUB requer que todos os recursos sejam listados no manifesto content.opf, possvel inspecionar o manifesto para localizar as imagens que foram referidas no arquivo DocBook original. A Listagem 18 mostra essa tcnica, que presume que a varivel path contenha o caminho para seu EPUB em andamento, conforme criado pelo DocBook XSLT.

Listagem 18. Analisar o arquivo de contedo OPF para localizar quaisquer recursos ausentes.
import os.path, shutil from lxml import etree def find_resources(path='/path/to/our/epub/directory'): opf = etree.parse(os.path.join(path, 'OEBPS', 'content.opf')) # Todos os elementos opf:item so recursos para o item em opf.xpath('//opf:item', namespaces= { 'opf': 'http://www.idpf.org/2007/opf' }): # Se o recurso ainda no tiver sido criado pelo prprio DocBook XSL, # copie-o na pasta do OEBPS href = item.attrib['href'] referenced_file = os.path.join(path, 'OEBPS', href): if not os.path.exists(referenced_file): shutil.copy(href, os.path.join(path, 'OEBPS'))

Criando o arquivo tipo MIME automaticamente O DocBook XSL no criar seu arquivo tipo MIME, tambm, mas uma rpida consulta no cdigo da Listagem 19 pode resolver isso.

Listagem 19. Criar um arquivo tipo MIME


def create_mimetype(path='/path/to/our/epub/directory'): f = '%s/%s' % (path, 'mimetype') f = open(f, 'w') # Cuidado para no incluir uma nova linha aqui f.write('application/epub+zip') f.close()

Criando o pacote configurvel do EPUB com Python Tudo o que resta agora empacotar os arquivos em um arquivo EPUB ZIP vlido. Isso exige duas etapas: incluir o arquivo tipo MIME como o primeiro no archive sem nenhuma compactao e, em seguida, incluir os diretrios restantes. A Listagem 20mostra o cdigo para esse processo.

Listagem 20. Usando o mdulo do arquivo zip Python para criar um pacote configurvel EPUB
import zipfile, os def create_archive(path='/path/to/our/epub/directory'): '''Create the ZIP archive. The mimetype must be the first file in the archive and it must not be compressed.''' epub_name = '%s.epub' % os.path.basename(path) # The EPUB must contain the META-INF and mimetype files at the root, so # we'll create the archive in the working directory first and move it later os.chdir(path) # Open a new zipfile for writing epub = zipfile.ZipFile(epub_name, 'w') # Add the mimetype file first and set it to be uncompressed epub.write(MIMETYPE, compress_type=zipfile.ZIP_STORED) # For the remaining paths in the EPUB, add all of their files

# using normal ZIP compression for p in os.listdir('.'): for f in os.listdir(p): epub.write(os.path.join(p, f)), compress_type=zipfile.ZIP_DEFLATED) epub.close()

S isso! Lembre-se de validar.

Resumo
O script Python na seo anterior somente uma primeira etapa ao automatizar integralmente qualquer tipo de converso do EPUB. Para ser breve, essa etapa no lida com muitos casos comuns, como caminhos aninhados arbitrariamente, folhas de estilos ou fontes integradas. Os fs de Ruby podem dar uma olhada em dbtoepub, includo na distribuio do DocBook XSL, para verem uma abordagem semelhante nessa linguagem. Como o EPUB um formato relativamente novo, muitos caminhos de converso teis ainda aguardam criao. Felizmente, muitos tipos de marcao estruturada, como reStructuredText ou Markdown, possuem pipelines que j produzem HTML ou XHTML. Adaptar isso para produzir EPUBs deve ser bastante simples, especialmente usando os scripts do DocBook-para-EPUB Python ou Ruby como guia. Como o EPUB principalmente ZIP e XHTML, h poucos motivos para no distribuir pacotes configurveis de documentao como archives do EPUB, em vez de simples arquivos .zip. Usurios com leitores de EPUB se beneficiam dos metadados adicionais e ndices automticos, mas aqueles sem podem simplesmente tratar o archive do EPUB como um arquivo ZIP normal e visualizar o contedo XHTML em um navegador. Considere a incluso do cdigo gerado por EPUB para qualquer tipo de sistema de documentao, como Javadoc ou Perldoc. O EPUB desenvolvido para documentao no comprimento de livro, portanto um formato de distribuio perfeito para o crescente nmero de livros de programao online ou em andamento.

Downloads
Descrio Nome Tamanho Mtodo de download 8KB HTTP

Resources to build the EPUB in this tutorial DocBook to EPUB tools1

epub-raw-files.zip

docbook-to-epub.zip 7KB

HTTP

Informaes sobre mtodos de download Nota 1.

Esse arquivo .zip contm a amostra do arquivo DocBook XML ilustrado no tutorial e um script docbook2epub.py completo. Voc deve fazer o download do lxml e DocBook XSL separadamente; consulte os links em Resources.

Recursos
Aprender Especificaes de EPUB completas : Leia as especificaes disponveis no site da IDPF, inclusive Open Publication Structure (OPS), Open Packaging Format (OPF) e OEBPS Container Format (OCF).

XHTML 1.1 e DAISY: Para obter mais informaes sobre os formatos de contedo do EPUB, consulte a especificao XHTML 1.1 (atualmente um Rascunho do trabalho W3C) e a especificao DAISY para Digital Talking Book (DTBook). Inclua validao EPUB automtica para seu editor XML com os diversos esquemas de formatos e arquivos EPUB: o NCX DTD (converso para Relax NG) o OPF 2.0 (Relax NG) o OCF 1.0 (Relax NG)

Dublin Core Metadata: Para saber mais sobre termos de metadados disponveis em Dublin Core, consulte o documento Termos DCMI e o guia de uso . eventos tcnicos do developerWorks e webcasts: Mantenha-se atualizado com relao tecnologia mais recente. biblioteca tcnica de XML: Consulte a zona XML do developerWorks para obter uma ampla faixa de artigos tcnicos e dicas, tutoriais, normas e IBM Redbooks. Livraria de tecnologia: Procure livros sobre esses e outros tpicos tcnicos. Certificao XML da IBM: Descubra como possvel se tornar um Desenvolvedor Certificado pela IBM em XML e tecnologias relacionadas. Podcasts do developerWorks: escute entrevistas e debates interessantes para desenvolvedores de software.

Obter produtos e tecnologias EpubCheck: Adobe EpubCheck uma ferramenta de grande valor para criao do EPUB. Faa download e execute-o como um programa independente, um aplicativo da web, ou como uma biblioteca (requer Java verso 1.5 ou posterior).

DocBook XSL: Faa download da ltima verso das folhas de estilo para processamento de DocBook no EPUB. O pacote DocBook XSL tambm inclui um script Ruby para processamento em um archive de EPUB completo, semelhante ao script Python demonstrado neste tutorial. lxml: Caso voc no o tenha instalado atualmente, o lxml a biblioteca XML mais bem equipada disponvel para Python. Para obter mais informaes sobre lxml, consulte o artigo do autor Highperformance XML parsing in Python with lxml(Liza Daly, developerWorks, outubro de 2008). Edies Digitais Adobe e Bookworm: Para teste de EPUB, os e-readers que seguem mais de perto a especificao so ADE, um aplicativo desktop de plataforma cruzada, e Bookwork, o ereader baseado na web do autor, que utiliza o navegador para renderizao de EPUB. Software de avaliao da IBM para avaliao de produto : Desenvolva seu prximo projeto com o software de avaliao disponvel para download diretamente do developerWorks, incluindo ferramentas de desenvolvimento de aplicativo e produtos de middleware do DB2, Lotus, Rational, TivolieWebSphere.

Discutir

Fruns de discusso da zona de XML: Participe de qualquer uma das vrias discusses relacionadas a XML. zona XML do developerWorks: Compartilhe seus pensamentos: Depois de ler esse artigo, poste seus comentrios e pensamentos neste frum. Os editores da zona XML atuam como moderadores do frum e recebem bem sua entrada. Blogs do developerWorks Confira os blogs do developerWorks e participe da Comunidade do developerWorks.

Liza Daly engenheira de software especializada em aplicativos para o segmento de mercado de publicaes. Ela desenvolvedora lder dos principais produtos online da Oxford University Press, O'Reilly Media e outros publicadores. Atualmente, consultora independente e fundadora da Threepress, um projeto de software livre desenvolvendo aplicativos ebook.

Você também pode gostar