Epub电子书格式(三)

来源:互联网 发布:发票验旧需要什么数据 编辑:程序博客网 时间:2024/05/22 14:58

做人要厚道:http://blog.sina.com.cn/s/blog_6441e0640100gmi8.html

Packaging Format 元数据文件

该文件名没有特殊要求,扩展名为opf。它指定了图书中所有内容的位置,如文本和图像等其他媒体。它还给出了另一个元数据文件,内容的 Navigation Center eXtended (NCX) 表,有的称其为逻辑目录。

该 OPF 文件是 EPUB 规范中最复杂的元数据。让我们来看一看它的内容吧:

 

包含示例元数据的 OPF content 文件
     
<?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:12345</dc:identifier>
    <meta name="cover" content="cover-image" />
  </metadata>
  <manifest>
    <item id="ncx" href="toc.ncx" media-type="text/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="cover.html" type="cover" title="Cover"/>
  </guide>
</package>

我们来一步一步的分析它的各个部分。

OPF 模式与名称空间

OPF 文档本身必须使用名称空间 http://www.idpf.org/2007/opf,元数据则使用 Dublin Core Metadata Initiative (DCMI) 名称空间 http://purl.org/dc/elements/1.1/

最好现在将 OPF 和 DCMI 模式添加到 XML 编辑器中。

元数据

Dublin Core 定义了一组常用的元数据,可用于描述各种不同的数字资料,它不是 EPUB 规范的一部分。所有这些术语都可以出现在 OPF 元数据部分。编写要分发的 EPUB 时,这里可以放很多内容,目前来说下面的内容就足够了。

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>
...
有两个术语是必须的,即 title 和 identifier。按照 EPUB 规范,标识符必须是惟一的,但是这个惟一的值要靠数字图书的创建者来定义。对于图书出版商来说,这个字段一般包含ISBN编号。对于其他 EPUB 创建者,可以考虑使用 URL 或者很大的随机生成的惟一用户 ID(UUID)。要注意,属性 unique-identifier 的值必须和 dc:identifier 元素的 ID 属性匹配。

其他和内容相关的可以考虑添加的元数据包括:

语言(如 dc:language)。
出版日期(如 dc:date)。
出版商(如 dc:publisher)。(可以是公司或个人的名称)。
版权信息(如 dc:rights)。

更多的元数据可以参见DCMI规范和用法。

EPUB 规范没有要求包含 name 属性值为 cover 的 meta 元素,但为了增加封面和图像的可移植性,建议这样做。一些 EPUB 呈现程序喜欢使用图像文件作为封面,另一些则愿意使用包含内联封面图像的 XHTML 文件。该例子显示了这两种情况。meta 元素的 content 属性的值应该是图书封面图像在 manifest 中的 ID 号,manifest 是 OPF 文件的一部分。

Manifest

OPF manifest 列出了 EPUB 内容(不包括元数据)中的所有资源。就是说,通常是组成电子图书文本的一组 XHTML 文件再加上一些相关的媒体如图像。EPUB 鼓励使用 CSS 设定图书内容的样式,因此 manifest 中也包含 CSS。进入数字图书的所有文件都必须在 manifest 中列出。

下面给出了一个menifest的一部分:

...
<manifest>
  <item id="ncx" href="toc.ncx" media-type="text/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>
...
第一项 toc.ncx是必须的。所有的项都有相应的 media-type 值,XHTML 内容的媒体类型为application/xhtml+xml。媒体类型必须正确,不能 是 text/html 或者其他类型。

EPUB支持四种核心图像文件类型:JPEG、PNG、GIF 和 Scalable Vector Graphics (SVG)。

href属性的值应该是一个相对于该 OPF 文件 的统一资源标识符(URI)。(很容易和 container.xml 中对 OPF 文件的引用混淆,其中的引用是相对于 EPUB 的整体引用)。这里的 OPF 文件位于和内容相同的 OEBPS 目录中,因此不需要路径信息。

Spine

manifest 告诉 EPUB 阅读器哪些文件属于档案,spine 则指定这些文件出现的顺序或 — 按照 EPUB 的说法 — 数字图书的线性阅读顺序。可以将 OPF spine 看作是书中 “页面” 的顺序。按照文档顺序从上到下依次读取 spine。

下面为OPF spine 的一部分

... <spine toc="ncx"> <itemref idref="cover" linear="no"/> <itemref idref="content"/> </spine> ... 每个 itemref 元素都需要有一个 idref 属性,并且和 manifest 中的某个 ID 匹配。toc 属性也是必需的。它引用 manifest 中表示内容 NCX 表文件名的 ID。 spine 中的 linear 属性表明该项是作为线性阅读顺序中的一项,还是和先后次序无关。建议将封面定义为 linear=no。符合 EPUB 规范的阅读系统将首先打开 spine 中没有 设置为 linear=no 中的第一项。GuideOPF 内容文件的最后一部分是 guide。这一节是可选的,但最好保留。下面显示了 guide 文件的部分内容。

 

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

guide 可以为 EPUB 阅读系统提供语义信息。manifest 定义了 EPUB 中的物理资源,spine 提供了这些资源的顺序信息,guide 负责解释这些部分的含义。下面是可以出现在 OPF guide 中的部分值:

  • cover 图书封面
  • title-page 包含作者和出版商信息的页面
  • toc目录

完整的列表请参阅 OPF 2.0 规范


0 0