| DocBook stylesheets for EPUB 3 output |
| ============================================= |
| |
| This directory contains XSL stylesheets |
| for generating EPUB3 output from DocBook content. |
| For more information on EPUB3, see: |
| |
| http://idpf.org/epub/30 |
| |
| These EPUB3 stylesheets are a customization layer on |
| top of the xhtml5/ stylesheets in this distribution, which |
| are in turn a customization layer on top of the |
| xhtml/ stylesheets in this distribution. |
| Using a customization layer enables the EPUB3 |
| stylesheets to inherit all the features of the |
| XHTML stylesheets while making the minimum changes |
| for them to produce valid EPUB3. |
| |
| Usage |
| ----------- |
| The general process for creating an EPUB3 ebook is: |
| |
| 1. Generate chunked XHTML5 content that validates against |
| the EPUB3 schemas, and generate the EPUB3 package |
| files. |
| |
| 2. Copy any image files into the output directory. |
| |
| 3. Run a zip command to create an .epub file. |
| |
| 4. Validate the .epub file. |
| |
| |
| Following are the steps in more detail. |
| |
| 1. Create the XHTML5 files. |
| ----------------------------- |
| |
| The first step is handled by these stylesheets. |
| To generate EPUB3-compatible XHTML5 files, |
| use one of the following stylesheets as you would any |
| other DocBook XSL stylesheet: |
| |
| epub3/chunk.xsl - Chunked output. |
| epub3/profile-chunk.xsl - Profiled chunk output. |
| |
| Although the stylesheet directory contains a docbook.xsl |
| stylesheet for single file output, that is not useful for |
| generated EPUB3. |
| |
| You should set the $base.dir stylesheet param to the |
| subdirectory that will contain the .xhtml files and |
| the epub package files. Here is an example using xsltproc: |
| |
| xsltproc \ |
| --stringparam base.dir ebook1/OEBPS/ \ |
| epub3/chunk.xsl \ |
| mybook.xml |
| |
| After processing a document with this setting, you should find |
| the following output: |
| |
| ebook1/mimetype - required mimetype file. |
| ebook1/META-INF/container.xml - required container file |
| ebook1/OEBPS/package.opf - required package file |
| ebook1/OEBPS/toc.ncx - optional NCX file for backwards compatibility |
| ebook1/OEBPS/docbook-epub.css - CSS file |
| ebook1/OEBPS/*.xhtml - The chunked content files. |
| |
| |
| 2. Copy image files |
| --------------------------- |
| |
| Manually copy any image files used in the document |
| into the corresponding locations in the $base.dir |
| directory. For example, if your document contains: |
| |
| <imagedata fileref="images/caution.png"/> |
| |
| In this example base.dir, you would copy the file to: |
| |
| ebook1/OEBPS/images/caution.png |
| |
| You can get a list of image files from the manifest file |
| named ebook1/OEBPS/package.opf that is created by the |
| stylesheet. It includes references to image files for |
| callouts and admonitions if they are used in the output. |
| Note that the header and footer images are turned off for |
| EPUB3 output. |
| |
| |
| 3. Create the epub3 file. |
| ----------------------------- |
| Change to the directory containing the base.dir (ebook1 |
| in this example), and run the following zip command to |
| create the epub file: |
| |
| zip -r -X mybook.epub mimetype META-INF OEBPS |
| |
| The -r option means recursively include all directories. |
| The -X option excludes extra file attributes (required by epub3). |
| The "mybook.epub" in this example is the output file. |
| The other three arguments must appear in this order. |
| |
| |
| 4. Validating with epubcheck 3 |
| ----------------------------------- |
| |
| There is a java program that can be used to check an |
| epub3 file for conformance. It is currently available |
| from this website: |
| |
| http://code.google.com/p/epubcheck/wiki/EPUBCheck30 |
| |
| That website provides a download link, and information on |
| how to run the command. |
| |
| |
| Testing with EPUB readers |
| ---------------------------- |
| The EPUB3 standard is not yet widely supported. The output of |
| these stylesheets has been tested in the following readers: |
| |
| Apple iBooks on an iPod and iPad. |
| - Handles videodata and audiodata. |
| - Does not format MathML yet. |
| - Handles SVG. |
| |
| Firefox browser with the EPUBReader version 1.4.10 add-on. |
| - Formats MathML nicely. |
| - Does not handle videodata or audiodata yet. |
| - Handles SVG. |
| |
| Ibis EPUB3 preview version |
| - Does not format MathML yet. |
| - Does not handle videodata or audiodata yet. |
| - Handles SVG with external viewer. |
| |
| |
| EPUB metadata |
| ======================== |
| The info child of the document's root element is used |
| by the stylesheet to create EPUB metadata. Note that |
| metadata is plain text, so element content is converted |
| to text using the XSL normalize-space() function. |
| |
| Here is the current mapping of info elements to EPUB |
| metadata. Any others are ignored for metadata, but |
| may appear on the EPUB HTML titlepage, depending on the |
| titlepage customization. |
| |
| NOTE: the <dc:*> elements (not attributes of meta) duplicate |
| the meta elements for backwards compatibility, per the |
| EPUB3 specification. They can be turned off with the |
| $epub.include.optional.metadata.dc.elements parameter. |
| |
| abstract |
| --------- |
| The content must be converted to a text string for the |
| OPF metadata. The stylesheet converts only title, para, |
| formalpara, and simpara children in an abstract. All other |
| child elements are ignored. It puts any title first. |
| The OPF output appears as: |
| |
| <meta property="dcterms:description">title: abstract text</meta> |
| <dc:description>title: abstract text</dc:description> |
| |
| |
| author |
| ------- |
| If uses a personname child, then it applies the |
| DocBook XSL person.name template to arrange the name. |
| Otherwise processes org or orgname into the content. |
| Then it outputs: |
| |
| <meta id="meta-creator1" property="dcterms:creator">Firstname Surname</meta> |
| <dc:creator id="pub-creator1">Firstname Surname</dc:creator> |
| |
| If there are multiple authors, the number in the id attribute |
| is incremented each time. |
| |
| |
| authorgroup |
| ------------- |
| Applies templates to all of its children. |
| |
| |
| bibliocoverage |
| --------------- |
| <meta property="dcterms:coverage">bibliocoverage text</meta> |
| <dc:coverage>bibliocoverage text</dc:coverage> |
| |
| |
| biblioid |
| -------------- |
| This usually has @class="isbn" for the ISBN number. It is used |
| as the EPUB3 unique-identifier. That isbn value |
| is also output as follows: |
| |
| <meta id="meta-identifier" property="dcterms:identifier">urn:isbn:value</meta> |
| <dc:identifier id="pub-identifier">urn:isbn:value</dc:identifier> |
| |
| A biblioid element with other class names are converted in a similar manner. |
| |
| |
| bibliorelation |
| ---------------- |
| <meta property="dcterms:relation">bibliorelation text</meta> |
| <dc:relation>bibliorelation text</dc:relation> |
| |
| |
| bibliosource |
| ---------------- |
| <meta property="dcterms:source">bibliosource text</meta> |
| <dc:source>bibliosource text</dc:source> |
| |
| |
| collab |
| ------------ |
| If a personname child is used, then it calls the |
| person.name template, otherwise is uses the orgname or |
| collabname text. |
| |
| <meta property="dcterms:contributor">collab text</meta> |
| <dc:contributor>collab text</dc:contributor> |
| |
| |
| copyright |
| ------------- |
| Arranges the copyright elements into a text string with |
| copyright symbol, dates, and holder, and then |
| generates: |
| |
| <meta property="dcterms:right">Copyright text</meta> |
| <dc:right>Copyright text</dc:right> |
| |
| Also, if there is no info/date element, then the copyright |
| year is used to generate: |
| |
| <meta property="dcterms:date">year</meta> |
| <dc:date>year</dc:date> |
| |
| |
| corpauthor |
| ------------ |
| <meta id="meta-creator1" property="dcterms:creator">corpauthor text</meta> |
| <dc:creator id="pub-creator1">corpauthor text</dc:creator> |
| |
| |
| corpcredit |
| ------------ |
| <meta property="dcterms:contributor">corpcredit text</meta> |
| <dc:contributor>corpcredit text</dc:contributor> |
| |
| |
| date |
| ------------- |
| <meta property="dcterms:date">date text</meta> |
| <dc:date>date text</dc:date> |
| |
| See also: copyright. |
| |
| |
| editor |
| -------------- |
| If a personname child is used, then it calls the |
| person.name template, otherwise is uses the orgname text. |
| |
| An editor can be considered as either a creator (when there |
| is no author) or a contributor. The stylesheet parameter |
| 'editor.property' can be set to either 'creator' or |
| 'contributor' (default) at runtime. So the output is either: |
| |
| <meta property="dcterms:contributor">editor text</meta> |
| <dc:contributor>editor text</dc:contributor> |
| |
| or |
| |
| <meta property="dcterms:creator">editor text</meta> |
| <dc:creator>editor text</dc:creator> |
| |
| |
| isbn, issn, etc. |
| ----------------- |
| Handled like biblioid @class="isbn". |
| |
| |
| keyword |
| ----------- |
| <meta property="dcterms:subject">keyword text</meta> |
| <dc:subject>keyword text</dc:subject> |
| |
| |
| keywordset |
| ------------ |
| Applies templates to its children. |
| |
| |
| othercredit |
| ------------ |
| Handled like collab. |
| |
| |
| pubdate |
| ------------ |
| Handled like date. |
| |
| |
| publisher |
| -------------- |
| Applies templates only to publishername. |
| |
| |
| publishername |
| --------------- |
| <meta property="dcterms:publisher">publishername text</meta> |
| <dc:publisher>publishername text</dc:publisher> |
| |
| |
| subjectset |
| -------------- |
| Applies templates to subject/subjecterm descendants. |
| |
| |
| subjectterm |
| ------------------ |
| <meta property="dcterms:subject">subjecterm text</meta> |
| <dc:subject>subjecterm text</dc:subject> |
| |