本文件為W3C於2019年05月08日發布之EPUB Content Documents 3.2的翻譯版本。此翻譯版本係由台灣數位出版聯盟(Taiwan Digital Publishing Forum, TDPF)自願翻譯,譯者盡可能維持英文原文本意與翻譯品質,唯翻譯內容仍可能有所錯誤。如有發現錯誤或不妥之處,請透過GitHub與譯者聯繫、修正或建立issue。
本翻譯文件僅供參考,唯一的正式版本請以W3C網站發布之英文原文版為準。
翻譯版本最後更新日期:2022年01月23日
Copyright © 1999-2019 International Digital Publishing Forum™ and W3C® (MIT, ERCIM, Keio, Beihang)
EPUB是國際數位出版論壇(IDPF, International Digital Publishing Forum)的註冊商標
本規格定義使用於EPUB®出版品脈絡下的HTML、SVG以及CSS的規範。
本規格屬於組成 [EPUB32] 的規格群之一,其為基於XML與Web標準的數位出版品交換與遞送格式。要了解整體EPUB 3規格,需要與其他規格一併閱讀且理解。
可參考 [EPUB32Changes] 以了解本規格與其前版本的差異資訊。
本規格由EPUB 3社群小組所發表。並非W3C標準也不在W3C標準程序上。請注意本規格適用於W3C社群完整規範協議(FSA)。可進一步了解W3C社群與業界小組。
如果你想要對本文件提出意見,請寄送到public-epub3@w3.org(訂閱,存檔)。
本章節為非規範性。
本規格並不參照特定版本的W3C [HTML] ,而參照無標注日期的版本,如此一來將會一直指向最新的推薦版本。這項作法確保可以讓EPUB持續跟上HTML標準的變化腳步。作者與閱讀系統開發者會需要持續追蹤HTML的變革,以確保他們的處理程序與系統保持更新。
隨著HTML進化,可能有些功能在前一版有效,但後來變得過時或者被移除。W3C期望像這樣的變化能夠對作者造成最小限度的干擾,但考量到向後不相容的改版,於是重新考量使用無標注日期的參照版本。
本規格的XHTML規範定義,除非另有指定,繼承所有語意、結構與處理行為在 [HTML] 中的定義。
此外,本規格定義了一系列對W3C HTML文件模式的延伸,讓作者可以包含在XHTML內容文件中。
本規格不要求EPUB閱讀系統支援腳本、HTML表單或者HTML DOM。本規格中的閱讀系統適用性僅預期能夠處理適用的EPUB內容文件。如同對腳本和HTML表單的支援為非強制,合適的閱讀系統可能不需要為具完整適用性的HTML使用者端。
本規格並不參照特定版本的 [SVG] ,而參照無標注日期的版本。當在參照中有任何矛盾或疑義,最新的推薦版本為權威性參考資料。
這項作法確保EPUB能夠一直保持與SVG標準的同步發展。作者與閱讀系統開發者會需要持續追蹤SVG標準的變革,以確保他們的流程與系統保持更新。
隨著SVG進化,可能有些功能在前一版有效,但後來變得過時或者被移除。W3C期望像這樣的變化能夠對作者造成最小限度的干擾,但考量到向後不相容的改版,於是重新考量使用無標注日期的參照版本。
EPUB 3支援的CSS定義比照CSS工作小組快照 [CSSSnapshot] 。EPUB 3也維護一些有字首的CSS特性,以確保對全球語言的穩定支援。
專屬於EPUB 3的術語在本文件中以括號(譯注:英文版為首字大寫。範例如「作者」,「閱讀系統」)。術語與定義的完整清單提供於 [EPUB32] 。
每章節術語第一次出現時才會連結至其定義。
除了標註為非規範性的章節,本規格中所有製作指針、圖表、範例與注意事項都為非規範性。其餘本規格中的內容皆為規範性。
關鍵字:可以(MAY)、必需(MUST)、不得(MUST NOT)、選擇性(OPTIONAL)、必要(REQUIRED)、應該(SHOULD)、不應(SHOULD NOT)應該以 [RFC2119] 之記述解釋。
為求方便,以下命名空間字首 [XML-NAMES] 用於本規格而無需另外宣告。若要使用其他字首在EPUB內容文件中,宣告為必要。
字首 | URI |
---|---|
epub |
http://www.idpf.org/2007/ops |
ssml |
https://www.w3.org/2001/10/synthesis |
本章節定義了 [HTML] 的規範供創建XHTML內容文件使用。符合本規範的XML文件副本為核心媒體類型資源,並且在本規格中稱為XHTML內容文件。
除非另有指定,本規格繼承 [HTML] 規格所有語意、結構以及處理行為的定義。
一份XHTML內容文件必需符合以下所有領域的需求:
一個合規的EPUB閱讀系統必需符合所有以下處理XHTML內容文件的需求:
除非在本規格中額外定義為可覆蓋,其必需使用定義在 [HTML] 中的語意來處理XHTML內容文件,並且鼓勵適用所有定義於其中的使用者端適用性限制。
其必需符合所有定義在HTML延伸中的閱讀系統適用性要求。
其必需識別並且行為上採用定義於HTML歧異與限制中的限制。
其必需符合所有定義在有腳本的內容文件 — 閱讀系統適用性中的適用性需求。
其必需支援對XHTML內容文件的視覺化排版,如在CSS樣式表 — 閱讀系統適用性中的定義。
其應該識別嵌入的ARIA標記以及支援任何存在ARIA角色、狀態以及特性的呈現,如平台無障礙輔助性APIs [WAI-ARIA] 。
本章節定義在 [HTML] 文件模型下,EPUB 3 XHTML內容文件的延伸。
本章節為非規範性。
語意變化是在一份 XHTML內容文件中,為一個元素附加為了特殊目的及/或性質之額外意義的過程。epub:type
屬性在XHTML內容文件中用於領域特定的語意,在 [HTML] 用語之外,這樣的變化包含了補充意義。
使用語意是為了精製其包含他們元素的意義;他們的存在不會覆蓋其性質(例如,該屬性可以被用於指示section
為該作品中的一章,但並非設計用來在適當的列表架構外,把p
元素轉為列表項目)。
語意詮釋資料是在出版工作流程以及作者定義的目的下來強化內容的使用。其可讓閱讀系統了解更多關於文件中內容的結構,本規格對這些語意沒有特別定義其行為。處理行為可任閱讀系統決定。
本規格透過使用屬性軸來定義處理語意變化的方法:與其添加新元素,epub:type
屬性可以對既存語意進行擴充,變化成想要的語意。也定義了一套機制來識別外部用語能夠提供對這些屬性的控制值。
epub:type
屬性type
http://www.idpf.org/2007/ops
全域屬性。可以在所有元素中指定。
由空白分隔的特性列表 [Packages32] 值,其限制定義在用語關聯中。
空白的字元組定義於 [XML] 。
epub:type
屬性出現在元素中會改變其語意。其值為一或多個由空白分隔的術語,來自於文件副本中關聯的外部用語集,如用語關聯所定義。
變化的語意必需為乘載的元素表達一個次級語意。對於語意中立的元素而言,如同 [HTML] div
及span
元素,變化的語意不得附加已經由既存元素所攜帶的意義(例如,一個div
代表一段落或者區塊)。閱讀系統必需忽略與乘載元素相衝突的語意變化。
[HTML] head
元素包含了該文件的詮釋資料,在此元素表達的結構化語意或者任何子元素沒有任何意義。閱讀系統必需忽略這樣的語意。
本規格採用用語關聯機制,其定義於[Packages32] 中的用語關聯機制,但有以下調整:
供內容文件使用的預設用語定義為 [EPUB-SSV] 。不屬於 [EPUB-SSV] 的無字首的術語可以被包含,但不鼓勵使用。要添加客製化語意,建議使用字首。
作者可以使用以下保留的字首於epub:type
屬性而無需宣告。
儘管保留的字首是為了製作上的便利,但依賴他們會導致互通性問題。例如,驗證工具經常會拒絕新的字首直到工具更新。強烈建議作者宣告所有使用的字首以避免這樣的問題。
字首 | IRI |
---|---|
msv | http://www.idpf.org/epub/vocab/structure/magazine/# |
prism | http://www.prismstandard.org/specifications/3.0/PRISM_CV_Spec_3.0.htm# |
prefix
屬性定義沒有改變,但該屬性當使用於EPUB內容文件時,其命名空間為http://www.idpf.org/2007/ops
。
prefix
屬性僅能用於 [HTML] 的根html
元素。
一個閱讀系統必需以以下方式處理epub:type
屬性:
其可以與定義於預設用語中的無、部分、全部術語的行為關聯。
當閱讀系統遇到與epub:type
之值產生關聯的行為和一個元素原生行為產生衝突時,該元素的關聯行為必需優先。
本章節為非規範性。
不像語意變化用於在標記中加強結構,語意豐富化為內容添加了意義層,而可以供機器處理使用。
[Microdata] 及 [RDFA-CORE] 規格兩方定義了一系列屬性可以用於XHTML內容文件來豐富內容的語意。
[RDFA-CORE] 屬性允許用於XHTML內容文件,但所有使用情形必需符合定義在 [[!HTML+RDFA]] 中的需求。
[RDFA-CORE] 規格定義了當使用RDFa屬性時, [HTML] 內容模型的變化。變化後的內容模型在XHTML內容文件中合乎規定。
[Microdata] 屬性允許用於XHTML內容文件,但所有使用情形必需符合定義在該規格中的需求。
[Microdata] 規格定義了當使用RDFa屬性時, [HTML] 內容模型的變化。變化後的內容模型在XHTML內容文件中合乎規定。
W3C語音合成標記語言 [SSML] 是一種用來協助文字轉換語音(Text-to-Speech, TTS)引擎用來合成朗讀的語言。由於SSML設計上作為獨立的文件類型,其也定義了適用在其他標記語言中的語意。
本規格改編 [SSML] phoneme
元素為兩種屬性 — ssml:ph
與ssml:alphabet
— 讓它們可以用於XHTML內容文件。
具備文字轉換語音相容性的閱讀系統應該支援SSML屬性其定義如下:
要了解更多EPUB 3與合成朗讀相關的功能,請參考文字轉換語音 [EPUB3Overview] 。
ssml:ph
屬性ssml:ph
屬性指定該文字一個音素/語音學的發音,由附加其屬性的元素所表達。
ph
https://www.w3.org/2001/10/synthesis
全域屬性。可以指定於所有元素,期能在邏輯上關聯於一個發音(例如,包含文字資訊的元素)。
不得指定在一個已經有該項屬性元素的子元素。
一個音素的/語音學表述,語法上合規並且尊重使用的音素的/語音學字母表。
ssml:alphabet
屬性ssml:alphabet
屬性指定該文字一個音素/語音學的發音字母表,其為用於ssml:ph
屬性的值。
alphabet
https://www.w3.org/2001/10/synthesis
全域屬性。可以指定於所有元素。
用於ssml:ph
(繼承)值的發音字母表名稱。
本屬性繼承所有 [SSML] phoneme
元素alphabet
屬性的語意,並且有以下附加:
儘管 [SSML] 規格中提供一份字母表的註冊參考,但卻還沒發表。由於W3C聲音瀏覽工作組的章程已經過期,不期待這樣的註冊會被發表。所以作者需要參考閱讀系統支援文件來判斷有哪些支援的字母表值。一些常見的字母表包括x-JEITA (以及 x-JEITA-IT-4002和x-JEITA-IT-4006)和x-sampa。
switch
元素提供了簡單機制讓作者能夠調整顯示給使用者的內容,該機制不依存於閱讀系統的腳本支援性。
不再推薦使用switch
元素。請參考在 [ContentDocs301] 中的定義以獲得用法資訊。
epub:trigger
元素(不再推薦)trigger
元素能啟動所創建由標記定義的使用者介面供控制多媒體物件,例如聲音或者影片的播放,無論腳本或者非腳本脈絡。
不再推薦使用trigger
元素。請參考在 [ContentDocs301] 中的定義以獲得用法資訊。
閱讀系統可以提供未定義在本規格中的功能來加強對EPUB出版品的排版處理。為了活用這項實驗功能,提供者可以定義客製化屬性供XHTML內容文件使用。
客製化屬性可以在一份XHTML內容文件的任何元素中,這些屬性來自一個外部的命名空間,其定義如命名空間 [XML-NAMES] ,且不能對應到以下的URIs:
http://www.w3.org/1999/xhtml
http://www.idpf.org/2007/ops
客製化屬性,以及與其相關聯的行為,不得改動一份EPUB出版品的一致性。內容必需能在沒有任何資訊缺失或者明顯瑕疵的狀況下讓使用者能夠閱讀,無論閱讀系統是否會進行排版處理。
為使客製化屬性能夠跨閱讀系統提供互通性,強烈建議提供者將實作的任何延伸記錄在 [AttributeExtensions] 中。
本章節定義了EPUB 3 XHTML內容文件與所適用 [HTML] 文件模式的歧異與限制。
本章節為非規範性。
XHTML內容文件支援嵌入 [MATHML3] ,但限制其用途為完整MathML標記語言中受限制的子集。
設計該子集的目的是為了降低閱讀系統的門檻並且有助於無障礙輔助性,且能獲得對 [HTML] 使用者端的相容性。
任何在XHTML內容文件中出現的MathML標記,必需符合MathML規格 [MATHML3] 中所表述的規則,以及以下額外限制:
math
元素必需僅包含顯示用的MathML,annotation-xml
為例外。
MathML內容可以以MathML標記包含在XHTML內容文件中,當顯示時,semantics
元素中必需有一個annotation-xml
子元素。
當內容MathML在前述狀態中被包含時,其annotation-xml
元素之encoding
屬性必需被設置為功能上等同的值MathML-Content
或者application/mathml-content+xml
,及其name
屬性必需被設定為contentequiv
。
在 [MATHML3] 中元素與屬性若被標註為不再推薦,則不得被包含在XHTML內容文件的MathML標記中。
合規的EPUB閱讀系統必需以下領域對在XHTML內容文件中支援MathML的需求:
其可以支援在annotation-xml
元素中MathML內容的排版。
當有顯示範圍(Viewport)時,其必需支援MathML顯示的視覺排版。
EPUB閱讀系統可以選擇使用第三方資料庫,如MathJax來提供MathML排版支援。
XHTML內容文件支援嵌入SVG文件斷片 [SVG] ,可透過參照(透過參照嵌入,例如,使用img
或者object
元素)以及透過包含(在XHTML內容文件中直接包含一個svg
元素嵌入)。
對在XHTML中嵌入SVG的內容適用性限制如同對SVG內容文件的中對SVG限制的定義。
閱讀系統必需如定義在SVG內容文件 — 閱讀系統適用性中一般處理XHTML內容文件中的嵌入SVG。
宣告item
元素 [Packages32] 中的svg
特性指出一份XHTML內容文件中包含嵌入SVG。
若要為在XHTML內容文件中對以參照方式嵌入的SVG給予樣式,閱讀系統不得套用包含文件的CSS樣式規則到參照的SVG文件。
若要為在XHTML內容文件中對以包含方式嵌入的SVG給予樣式,閱讀系統必需套用包含文件的CSS規則到包含的SVG元素。
本章節列出對於Unicode字元組的限制。
任何包含的字元其指向的碼點落在定義於 [Unicode] 的私用區(Private Use Area, PUA)時,則必需出現在一個有樣式或者屬性的字串中,其目的為可以其包含對嵌入字體 [CSS-Fonts-3] 的參照,該字體需包含該碼點的適當字形。
本章節為非規範性。
rp
元素 [HTML] rp
元素之目的是對於無法辨識ruby標記之舊版閱讀系統提供回退機制(即為,在ruby
標記前後加入括號)。不過EPUB 3閱讀系統都重視ruby並且能提供回退機制,故不再推薦使用rp
元素。
embed
元素由於 [HTML] embed
元素未包含固有機制以提供給不支援腳本的閱讀系統回退,故不鼓勵作者使用本元素,尤其當參照的資源包含腳本時。可使用包含固有回退相容性的 [HTML] object
元素取代。
外圍資源可以透過有固有回退機制的元素進行參照,固有回退機制能夠在不支援外圍資源時,提供替代呈現。例如,多數 [HTML] 嵌入內容元素提供了替代排版的選項,例如在一項資源無法被排版時,可以指定多重來源或者允許嵌入HTML內容。核心媒體類型資源或者嵌入HTML內容在外圍資源被參照時,其元素必需提供明確的回退機制。
[HTML] 重排內容可以嵌入audio
及video
元素供排版,但對無法辨識這些元素的舊版閱讀系統而言(例如EPUB 2閱讀系統),不需要回退到核心媒體類型資源上。
>由於各式各樣的來源都能被透過 [HTML] img
元素產生關聯,以下的回退狀態可供適用:
當為一個picture
元素的子元素時:
src
中,若指定其srcset
屬性時,參照核心媒體類型資源;以及source
元素必需在其src
和srcset
屬性中,參照一個核心媒體類型資源,除非在其type
屬性中指定一個媒體類型,其非核心媒體類型。src
及srcset
屬性中提供宣告回退 [Packages32] 定義。以下 [HTML] 元素可以參照外圍資源 [EPUB32] ,且無需提供對核心媒體類型資源的回退:
link
— 當其rel
屬性有值"pronunciation
"時
外圍資源可以在以上三元素中被參照,且無需提供對核心媒體類型資源的回退。
請參照宣告回退 [Packages32] 以獲得對沒有固有機制元素,例如 [HTML] iframe
,提供回退的資訊。
本章節為非規範性。
可縮放向量圖形(Scalable Vector Graphics, SVG) [SVG] 定義了一個格式,供顯示向量圖形與文字的最終形式。
儘管一本EPUB出版品一般使用XHTML內容文件作為頂層文件類型,但也允許使用SVG內容文件。SVG一般僅用於某些特殊環境,例如作為頁面圖像的最終形式,僅供特別類型的內容顯示(例如,漫畫書脈絡下的封面)。.
一份SVG內容文件必需符合以下領域需求:
本規格限制了SVG內容文件,以及在XHTML內容文件中嵌入SVG的內容模型如下:
[SVG] foreignObject
元素必需符合以下規定:
其內容必需為合規的文件斷片,符合定義在XHTML內容文件 - 內容適用性中的XHTML內容文件模型。
其requiredExtensions
屬性在出現時,必需設定為"http://www.idpf.org/2007/ops
"。
一個合規的EPUB閱讀系統在處理SVG內容文件及XHTML內容文件中的嵌入SVG時,必需符合以下領域需求:
除非在本規格中額外定義為可覆蓋,其必需使用定義在 [SVG] 規格中的語意來處理SVG內容文件,並且推薦符合所有在該規格中表述的適用性限制。
其必需符合在有腳本的內容文件 - 閱讀系統適用性中定義的適用性規定。
當有顯示範圍(Viewport)時,其必需按照定義如樣式 [SVG] ,使用CSS來支援SVG的排版,以及其應該支援所有定義在特性索引 [SVG] 中的特性。對嵌入SVG而言,其必需符合定義在嵌入SVG與CSS中的限制。
當在XHTML內容文件斷片出現時,其必需辨識requiredExtensions
屬性的值"http://www.idpf.org/2007/ops
"(即為,當該屬性包含在foreignObject
元素,或其switch
子元素中)。
定義在XHTML語意變化中的語法與語意在SVG內容文件中,繼承供epub:type
與epub:prefix
屬性使用。
epub:prefix屬性僅能用於SVG內容文件的根svg
元素而合規。用於嵌入SVG的字首必需要在 [HTML] html
根元素中宣告,如同XHTML語意變化中所定義。
本章節為非規範性。
CSS為開放網頁平台不可欠的一部分。讀者、出版商以及文件作者預期CSS「能運作」,如同期望HTML能夠運作一般。
在過去,EPUB定義了一份CSS子集以指示對一些特性的強制性支援,並且提供了許多其他特性的有字首版本。儘管CSS工作組不再推薦使用這些有字首的特性,本規格依然需要維護一些有字首的特性以避免破壞既存的內容。但除了定義在本章節的少數例外外,EPUB依從W3C定義的CSS。
一份合規的CSS樣式表必需符合以下領域需求:
其不得使用direction
特性 [CSS-Writing-Modes-3] 。改用 [HTML] dir
attribute屬性來設定行文基本方向。
其不得使用unicode-bidi
特性 [CSS-Writing-Modes-3] 。改用 [HTML] bdo
元素以及dir
屬性來控制行文的雙向性。
其可以包含定義在CSS樣式表 - 有字首的特性中的有字首特性。
其必需使用UTF-8或UTF-16編碼 [Unicode] 。
請注意,一些閱讀系統可能不支援所有想要的CSS功能。特別是以下所列容易出問題:
閱讀系統建構的分頁可能與樣式表造成不好的結果。分頁有時使用列(columns)來處理,會導致可見區域尺寸的值不正確。固定與絕對定位特別容易出錯。
有些種類的螢幕在顯示動畫與轉場時表現不佳(即為,反應速度慢的)。
一個合規的EPUB閱讀系統在處理CSS樣式表時,必需符合以下領域需求:
其必需支援說明在 [CSSSnapshot] 中對CSS的官方定義。
其應該支援 [CSSSnapshot] 中所有可適用的模組,至少需支援為候選推薦(Candidate Recommendation)狀態 [W3CProcess] (並且廣泛受到實作)。
其必需透過@font-face
規則支援 [TrueType] 、 [OpenType] 、 [WOFF] 及 [WOFF2] 字型資源。
其必需支援所有定義在CSS樣式表 - 有字首的特性中的所有有字首特性。
其應該尊重定義在閱讀系統覆蓋中的作者CSS與使用者樣式。
建議閱讀系統開發者實作與主流瀏覽器相同等級的CSS支援。
強烈推薦作者使用無字首的特性,以及閱讀系統支援最新的CSS規格。來自 [ContentDocs301] 中廣為使用的有字首特性於本版恢復,但對其他特性的支援卻已經移除。作者建議在可以使用的狀況下,使用CSS原生解決方式替代移除的特性。
作者現在使用這些有字首的特性時,在有支援的狀況下建議使用無字首版本,這些特性預期在下一次EPUB的主要版本中不再支援。
以下表格列出 [CSS-Writing-Modes-3] 具-epub-
的字首特性。值的欄指出該特性接受的值。過往EPUB映射的欄指出曾於之前版本EPUB 3使用的值/特性。星號(*)表示舊的值或者特性已經不再推薦。最後一欄解釋如何基於 [CSS-Writing-Modes-3-20151215] 實作有字首的特性。
特性 | 值 | 過往EPUB映射 | 映射到 [CSS-Writing-Modes-3-20151215] |
---|---|---|---|
-epub-text-orientation |
upright |
upright |
upright |
-epub-text-orientation |
mixed |
vertical-right * |
mixed |
-epub-text-orientation |
sideways-right |
sideways-right |
sideways |
-epub-text-orientation |
sideways-right |
rotate-right * |
sideways |
-epub-text-orientation |
sideways |
rotate-normal * |
sideways |
-epub-text-orientation |
sideways |
sideways |
sideways |
-epub-text-orientation |
mixed |
mixed |
mixed |
-epub-writing-mode |
horizontal-tb |
horizontal-tb |
horizontal-tb |
-epub-writing-mode |
vertical-rl |
vertical-rl |
vertical-rl |
-epub-writing-mode |
vertical-lr |
vertical-lr |
vertical-lr |
-epub-text-combine * |
-epub-text-combine-horizontal: none |
none |
text-combine-upright: none |
-epub-text-combine * |
-epub-text-combine-horizontal: all |
horizontal |
text-combine-upright: all |
-epub-text-combine * |
錯誤 | horizontal <number> |
text-combine-upright: digits <number> |
特性 | 值 | 映射到 [CSS-Text-3-20160119] |
---|---|---|
-epub-hyphens |
none | manual | auto |
無變更 |
-epub-hyphens |
all |
不支援 |
-epub-line-break |
auto | loose | normal | strict |
無變更 |
-epub-text-align-last |
auto | start | end | left | right | center | justify |
無變更 |
-epub-word-break |
normal | keep-all | break-all |
無變更 |
text-transform |
-epub-fullwidth |
text-transform: full-width |
特性 | 值 | 映射到 [CSS-Text-Decor-3] |
---|---|---|
-epub-text-emphasis-color |
<color> |
無變更 |
-epub-text-emphasis-position |
[ over | under ] && [ right | left ] |
無變更 |
-epub-text-emphasis-style |
none | [ [ filled | open ] || [ dot | circle | double-circle | triangle |
sesame ] ] | <string> |
無變更 |
-epub-text-underline-position |
auto | [ under || [ left | right ] ] |
無變更 |
-epub-text-underline-position |
alphabetic |
text-underline-position: auto |
特性值語法定義在元件值的組合 [CSS-Values-3] 。
EPUB閱讀系統應該套用作者寫在EPUB內容文件中的樣式表。如果閱讀系統允許,使用者應該能在想要的時候,能覆蓋作者提供的樣式表。EPUB閱讀系統不應在沒有嚴格需求下,覆蓋作者樣式表。
如果閱讀系統需要覆蓋作者樣式表,其應該透過一個使用者端樣式表來保存其層疊,利用getOverrideStyle
方式 [DOM-Level-2-Style] ,或者 [HTML] style
屬性。
強烈建議閱讀系統開發者公開發表所使用的使用者端樣式表以及如何與作者樣式表互動。
EPUB內容文件可以利用定義在本規格與相關規格( [HTML] 及 [SVG] )中的機制來包含腳本。當一份EPUB內容文件包含腳本時,在本規格中稱為有腳本的內容文件。本標籤也套用到包含 [HTML] 表單副本的XHTML內容文件。
本規格定義了兩個脈絡,腳本可以出現:
不能為以下兩者:
在這兩個以上定義的脈絡,無論JavaScript代碼是直接嵌入在script
元素,或者透過其src
屬性進行參照,在執行脈絡下沒有區別。
腳本應用在哪一個脈絡中決定了其權利與限制,閱讀系統該如何處理。請參照內容適用性與閱讀系統適用性以了解一些特別的優先需求(並非所有的閱讀系統都提供相同的腳本功能性)。
一個容器限制腳本不得包含修改該EPUB出版品之其他內容,或其母內容文件的DOM的程序,以及不得包含操弄其包含矩形尺寸的程序。
EPUB內容文件包含書脊層級腳本必需使用漸進強化技巧,其目的在本規格中遵從以下定義:當文件透過沒有腳本支援的閱讀系統排版,或者關閉腳本支援時,其頂層內容文件必需保持一致,依然可以被使用者閱讀而沒有任何資訊丟失或者明顯的瑕疵。
EPUB內容文件包含腳本可以為內容提供回退,無論是使用固有回退機制(例如可讓 [HTML] object
與canvas
元素使用的)或者,當無法適用固有回退時,可使用宣告層級回退 [Packages32] 。
宣告item
元素中的scripted
特性指出一份EPUB內容文件為有腳本的內容文件。
支援腳本的閱讀系統必需符合以下領域的需求:
其應該在重排EPUB內容文件中支援容器限制腳本。
其應該在重排EPUB內容文件中支援書脊層級腳本,而該文件使用定義在 [Packages32] 中rendition:flow
特性的"scrolled-doc
"或"scrolled-continuous
"顯示模式。相同地,如果其在重排EPUB內容文件中支援書脊層級腳本,其必需實作"scrolled-doc
"顯示模式,並且應該實作"scrolled-continuous
顯示模式。
其可以在其他脈絡下支援腳本,但本規格對這樣的腳本不另外敘述。結果來說在其他脈絡下使用腳本可能在跨閱讀系統時不會保持一致。
其不得允許容器限制腳本修改該EPUB出版品之其他內容,或其母內容文件的DOM,以及不得允許其操弄其包含的矩形尺寸(注意,儘管腳本並非為容器限制腳本,閱讀系統可以對操弄施予限制(可參照dom-manipulation
功能)。
其必需實作JavaScriptnavigator
延伸物件epubReadingSystem
,如附錄A所定義的JavaScript epubReadingSystem物件。其也必需支援dom-manipulation
與layout-change
功能,定義在容器限制腳本脈絡下的功能。
一個不支援腳本的閱讀系統必需符合以下領域的需求:
其必需處理腳本化內容的回退,如有腳本的內容文件中回退所定義。
閱讀系統可以在排版有腳本的內容文件的同時,關閉其他EPUB功能及/或提供不同的排版與使用者體驗(例如,關閉分頁)。
作者對使用容器限制模型腳本的選擇可以進一步確保在腳本化與無腳本內容間使用者經驗一致(例如翻頁行為一致)。
建議作者在能使用時使用宣告式技術,以增進其EPUB出版品的互通性、長期保存性與無障礙輔助性,並且避免使用包含式腳本。
本章節為非規範性。
所有的EPUB作者以及EPUB閱讀系統開發者得要注意到當閱讀系統執行腳本化內容時發生的安全性問題。由於目前閱讀系統與瀏覽器所使用的腳本模型一樣,在網頁脈絡下的相同問題也需要納入考量。
每一個閱讀系統都得要分辨是否在特殊文件中的腳本是否該被信任。推薦所有的腳本都被以不受信任對待(並且潛在為惡意),所有維度的攻擊都要被檢查並且受到保護,尤其以以下需求更需要受考量:
對runtime環境的攻擊(例如從使用者硬碟中偷取檔案);
對閱讀系統自身的攻擊(例如竊取使用者書單或者造成非預期的行為);
由一個內容文件攻擊另一個(例如竊取從不同文件產生的資料);
透過非加密的腳本攻擊一份文件的加密部分(例如注入惡意腳本擷取保護的內容);
對區域網路的攻擊(例如竊取在防火牆後伺服器的資料)。
提供以下建議作為處理不受信任腳本的指南:
閱讀系統行為上需要將每一份內容文件視為一個獨特的網域(domain),如瀏覽器為基礎的安全性大量基於文件URL與網域。採用這樣的做法可以將每一份文件和網際網路網域互相孤立,所以可以限制對外部URL、cookies、DOM儲存等的存取。
啟用腳本與網路存取的閱讀程式需要考量包括方法來警示使用者正在存取網路及/或允許他們關閉之。
實務上,閱讀系統可以在文件間共享網域,但依然需要維持文件間的孤立。
如果一份文件受到加密而其他沒有,或者不同的加密密鑰用於該文件的不同部分,一個獨特單一文件的網域也許不足以提供充分的保護。
如果閱讀系統允許保留持續性資料,該資料則需要被視為敏感資料。腳本可以透過cookies或DOM儲存來保存持續性資料,但是閱讀系統可以阻擋這樣的嘗試。允許儲存資料的閱讀系統需要確保資料不會受到其他不相關文件的存取(例如其他文件以欺騙的方式偽裝)。特別是,使用匹配文件識別碼(或者類似的詮釋資料)並非有效的手段來控制對持續性資料的存取。
允許本地儲存的閱讀系統也需要提供方法讓使用者來檢查、關閉或者刪除這些資料。當對應的EPUB出版品刪除時,這些資料也需要受到銷毀。
注意,適用以上推薦項目並不保證能夠抵抗所有列出的可能攻擊;開發者需要檢查閱讀系統脈絡下所有潛在的脆弱性。
本章節為非規範性。
閱讀系統需要遵從DOM事件模型如 [HTML] ,並在執行和與這些事件連結的預設事件時,忽略對腳本環境的UI事件。閱讀系統實作者需要確保腳本不能關閉重要功能(例如導覽)以延伸其影響讓潛在惡意腳本能衝擊該閱讀系統。結果上來說腳本環境需要能夠取消所有事件的預設動作,有些事件還是不能被忽略或者不能被取消。
作者在為他們的EPUB出版品加入腳本功能時,需要為各種具廣泛可能的閱讀系統實作負責(即為,並非所有裝置都具備物理鍵盤,許多狀態下軟鍵盤僅供文字輸入元素啟動)。結果上來說,不推薦僅使用鍵盤事件;推薦常時提供替代方式來啟動想要的行為。
本章節為非規範性。
本章節定義了規則供固定版面文件 — 在包裝文件中標為pre-paginated
的EPUB內容文件,之表述與空間特性的解釋。
本規格不定義初始化容器區塊 [CSS2] 如何置放於閱讀系統內容顯示區域中。
請參考固定版面特性 [Packages32] 以了解更多關於如何指定內容釋義或獨立書脊項目,要被排版成預先分頁內容(即為有固定寬與高空間的頁面)。
合規的固定版面文件必需符合以下領域需求:
合規的EPUB閱讀系統在處理固定版面文件時,必需符合以下領域需求:
其必需使用在viewport
meta
標籤所表述的空間來對XHTML內容文件進行排版,如同在於HTML中表述ICB所定義。
其必需使用定義在於SVG中表述ICB的方式給予空間來排版SVG內容文件。
當對固定版面文件進行排版時,預設目的為內容顯示區域應該佔據盡可能多的可用顯示範圍區域。閱讀系統不得插入額外的內容如邊框、邊界,頁首或頁尾到顯示範圍中。
閱讀系統控制小工具呈現給使用者,此部分由實作決定,不包含在以上行為預期中。
對XHTML固定版面文件而言,初始容器區塊 [CSS2] 空間必需在一個viewport
meta
標籤中表述,使用語法定義在 [CSS-Device-Adapt-1] 。在本版本的規格中,只有寬度(width)與高度(height)表述必需要被閱讀系統所辨識。
閱讀系統必需將XHTML內容剪裁到初始容器區塊(ICB)透過viewport
meta
標籤所宣告的空間中 — 定位在初始容器區塊外的內容不應該被看見。當ICB長寬比與閱讀系統內容顯示區域的長寬比不匹配時,閱讀系統可以將ICB放置於顯示區塊內以適合使用者介面;換言之,可能會在內容的一側(或兩端)出現橫向塊狀空間。
本章節為非規範性。
W3C發音辭典規格(Pronunciation Lexicon Specification, PLS) [PRONUNCIATION-LEXICON] 定義了基於XML的發音辭典之語法與語意,可供自動語音辨識以及文字轉換語音(Text-to-Speech, TTS) 引擎使用。
以下章節定義了當PLS文件包含在EPUB出版品時的適用性領域,以及PLS文件與XHTML內容文件建立關聯的規則。
若想要了解更多EPUB 3與語音合成相關的資訊,請參照文字轉換語音 [EPUB3Overview] 。
EPUB出版品中合規的內容釋義包含PLS文件時必需符合以下領域需求:
PLS文件可以與XHTML內容文件進行關聯。每一份XHTML內容文件可以包含零或多個PLS文件關聯。
PLS文件與XHTML內容文件產生關聯時必需透過使用 [HTML] link
元素其rel
屬性設定為"pronunciation
"並且其type
屬性設定為媒體類型"application/pls+xml
"。
link
元素的hreflang
應該在每個link
中都要指定,以及其值在相關的 [PRONUNCIATION-LEXICON] 被指定時必需與該發音字典語言匹配。
PLS文件必需符合定義在PLS文件 - 內容適用性中的內容適用性領域。
PLS文件必需如同EPUB包裝 - 適用性 [Packages32] 中的定義被表述及置放。
PLS文件必需符合以下領域需求:
其必需符合定義在XML適用性 [EPUB32] 中對XML文件的使用性限制。
其必需為合規的RELAX NG模式PLS文件,其URI在https://www.w3.org/TR/2008/REC-pronunciation-lexicon-20081014/
[PRONUNCIATION-LEXICON] 。
閱讀系統具備文字轉換語音(TTS)能力應該支援PLS文件。
合規的EPUB閱讀系統處理PLS文件時必需符合以下領域需求:
支援文字轉換語音(TTS)的閱讀系統也應該支援 [PRONUNCIATION-LEXICON] 。
其必需如 [PRONUNCIATION-LEXICON] 之定義處理PLS文件。
其必需套用提供的發音程序給所有該XHTML內容文件中其語言 [HTML] 符合該發音辭典語言所關聯 [PRONUNCIATION-LEXICON] 的文字節點。語言標籤的配對演算法定義在 [BCP47] 。
當在提供的語言中,對提供的目標字串指定多於一個的發音規則時,其必需讓最後出現的規則優先,如此一來任何預先定義的發音規則能被覆蓋。
如果其也支援SSML屬性,則必需讓任何透過ssml:ph
屬性提供的發音程序優先,當一個grapheme
元素 [PRONUNCIATION-LEXICON] 與包含ssml:ph
屬性 [SSML]文字節點匹配。
epubReadingSystem
物件本規格延伸 [HTML] Navigator
物件如下。
[Exposed=(Window)] interface EpubReadingSystem { [Unforgeable] readonly attribute DOMStringname
; [Unforgeable] readonly attribute DOMStringversion
; booleanhasFeature
(DOMString feature, optional DOMString version); };
[WEBIDL] 標記法。
本規格不定義一個epubReadingSystem
特性延伸供WorkerNavigator
物件 [WebWorkers] 使用。閱讀系統因此不需要面對在Workers腳本脈絡中遇到epubReadingSystem
物件,作者也不可依賴其存在。
Navigator.epubReadingSystem
物件提供了一個介面,可以讓有腳本的內容文件能夠查詢使用者閱讀系統的資訊。
該物件能顯示閱讀系統的特性(名稱與版本),並且提供hasFeature
方法能用於決定功能是否受到支援。
閱讀系統必需在所有載入有腳本的內容文件的navigator
物件中顯露epubReadingSystem
物件,包含任何巢狀容器限制腳本脈絡。閱讀系統必需確保epubReadingSystem
物件可被使用,且不晚於DOMContentLoaded
事件被啟動 [HTML] 。
閱讀系統實作上,可以在有腳本的內容文件中創建複製的epubReadingSystem
物件副本,以便於技術上的實踐。在這些狀況中,閱讀系統需要確保該物件的狀態 — 如反映其特性與方法的值 — 在所有複製的副本中維持一致。
以下特性必需在取得關於閱讀系統的資訊時提供。
名稱 | 說明 |
---|---|
name |
返回一個String 值用來表示閱讀系統的名稱(例如:
"iBooks "、"Kindle ")。 |
version |
返回一個String 值用來表示閱讀系統的版本(例如:"1.0 "、"2.1.1 ")。 |
layoutStyle |
不再推薦使用layoutStyle 特性。請參考其在 [ContentDocs301] 定義已取得用法資訊。 |
hasFeature
方法返回一個布林值指出指定功能的任何版本是否受到支援,或者當指定的功能無法被辨識時為undefined
。
也包含選擇性的version
參數供查詢可能隨著時間變得不相容的客製化功能。返回的值指出是否只支援特定版本的功能。
作者不應在使用查詢本規格定義的功能時包含version
參數 — 這些功能為無版本。如果閱讀系統支援定義在本規格中的功能,其必需忽略任何提供的version
參數而回以true
值。
以下表格列出一系列功能,支援epubReadingSystem
物件的閱讀系統必需辨識(例如,提供返回值)。對這些功能的支援為選擇性。
名稱 | 說明 |
---|---|
dom-manipulation |
腳本可以對文件的DOM進行結構變更(僅適用於書脊層級腳本)。 |
layout-changes |
腳本可以變更屬性與CSS樣式來影響內容排版(僅適用於書脊層級腳本)。 |
touch-events |
該裝置支援觸控事件,以及閱讀系統傳達觸控事件到內容上。 |
mouse-events |
該裝置支援滑鼠事件,以及閱讀系統傳達滑鼠事件到內容上。 |
keyboard-events |
該裝置支援鍵盤事件,以及閱讀系統傳達鍵盤事件到內容上。 |
spine-scripting |
指出是否閱讀系統支援書脊層級腳本(即為,如此一來容器限制腳本可以決定是否運作,取決於對頂層內容文件對腳本的支援,在嘗試之前了解是否能成功)。 |
閱讀程式開發者可以添加額外的功能,但是本規格的未來版本可能擴充本清單,將會使客製化功能產生衝突或者變得不相容。
本章節為非規範性。
EPUB 3由W3C EPUB 3社群小組所開發,並且與出版業界小組相互協力。
EPUB 3.2改版由以下主導:
此外向編輯群致敬,本版本EPUB若缺少以下人物的顯著貢獻,則不可能完成:
特別感謝IDPF的前會員,尤其是Markus Gylling與Bill McCoy,沒有他們EPUB不可能成真。