另見 翻譯.
Copyright © 1999-2023 International Digital Publishing Forum and World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
EPUB® 3定義了供數位出版品及文件用於配布及交換的格式。EPUB格式提供表現、包裝,以及將結構化和增強語義的網頁內容──包括HTML、CSS、SVG以及其他資源──進行編碼,以單一檔案容器形式供配布使用的方法。
本規格定義了處理EPUB出版品的使用者代理:EPUB 3閱讀系統之符合性規定。
本節介紹本文件發布時的狀態。可以在W3C技術報告索引(W3C technical reports index)(https://www.w3.org/TR/)找到當前W3C出版物列表和本技術報告的最新版本。
本文件係由EPUB 3工作小組使用推薦歷程作為推薦標準發布。
W3C建議廣泛部署此規範作為Web標準。
W3C建議書是經過廣泛達成共識後得到W3C及其成員認可的規範,並得到工作小組成員對實施免版稅許可的承諾。本建議書的未來更新可能會包含新功能。
本文件由W3C專利政策運作的團隊製作。W3C 維護與該組織的可交付成果相關的 任何專利揭露的公開清單;該頁面還包括揭露專利的說明。個人(個體)對專利具備實際知識而該個人(個體)認為其包含基本要求時, 必須根據W3C 專利政策第6節揭露該資訊。
本文件受2021年11月2日W3C流程文件之管控。
本節不具規範性。
EPUB 3標準切分為兩份,各為不同的考量: 核心規格定義了如何製作EPUB出版品 [epub-33] ,本規格詳細說明EPUB閱讀系統處理EPUB出版品的規則。
EPUB閱讀系統可打造成多種形式。舉個例子,可能擁有一個視覺顯示區域來將內容排版後提供給讀者,或者只提供內容裡的聲音播放。因此,沒有一套可以適用於所有閱讀系統的規則。所以本規格將處理上的規定拆分,按照閱讀系統各自所能達到的程度以及支援的功能分別採用。
此外,本規格提供開發者很大幅度的彈性來打造專有的使用者介面,並且嘗試把如後設資料處理等事物的規定降到最小限度,以提供這樣的彈性。
所以儘管本規格提出了供閱讀系統使用的正式規則,但不可能僅靠本文件就能理解其內容。開發者也應該熟悉EPUB出版品的完整內容結構,以對提供的資訊能有全方位的理解。
合乎規定的閱讀系統不一定是單一專用程式或者裝置,而可能以配布系統的方式存在。
本規格使用定義在EPUB 3.3 [epub-33] 中的術語。
也定義了以下術語:
顯示範圍(viewport)中的區域,專門用於呈現EPUB內容文件。內容顯示區域排除任何邊框、邊界、頁首、頁腳,或者其他EPUB閱讀系統可能加進顯示範圍中的裝飾。
在同步跨頁的狀況中,顯示範圍包含了兩個內容顯示區域。
只有術語在每一章節第一次出現時會連結到其定義。
本規格中被標註為不具規範性的章節,以及所有製作準則、圖表、範例以及注意事項都不具非規範性。本規格其他部分皆具規範性。
關鍵字:可以(MAY)、必須(MUST)、不得(MUST NOT)、選擇性(OPTIONAL)、推薦(RECOMMENDED),需要(REQUIRED)、應該(SHOULD)、不應(SHOULD NOT)在本文件中以如上粗體加底線格式出現時,BCP 14 [RFC2119] [RFC8174] 中的敘述解釋。
所有演算法的說明皆不具規範性。
本節不具規範性。
[html] 標準不斷演進──也就是不再有編號版本發佈。該標準持續參照各項不斷演進的技術,例如MathML、SVG、CSS與JavaScript。
閱讀系統開發者必須持續追蹤HTML以及所參考的技術變革,以確保所開發的系統跟得上時代。
本規格不要求EPUB閱讀系統支援腳本、表單遞送或者HTML DOM [dom] 。合乎本規格的閱讀系統預期僅能處理符合規定的EPUB內容文件。不必支援腳本以及表單遞送,符合規定的閱讀系統不一定是完全合乎規定的HTML使用者代理。
本規格並不參照特定版本的 [svg] ,相對之下參照無日期版。當所參照的版本產生歧義時,權威性參考文件為最新的推薦版本。
這種作法確保EPUB可以一直跟隨SVG標準演進的腳步前進。然而,閱讀系統開發者必須持續追蹤SVG標準的變化,以確保製作處理跟上時代。
無論閱讀系統是否支援本章開頭提及的功能。為了符合本規格,閱讀系統必須支援所有規定的功能,以及分別定義在各章節中,所有在特定條件下可使用的功能(例如,如果閱讀系統具有顯示範圍,就要支援圖片處理)。
因為閱讀系統不一定是獨立的應用程式,而可能存在於配布系統中,所以將EPUB出版品處理呈現給讀者的應用程式,並不一定都能符合閱讀系統規定。例如僅用於管控內容容器的閱讀系統(例如書店或圖書館系統)。對這樣案例而言,只要閱讀系統開發者能證明規定不適用於該應用程式(像是有著重複itemref
項目 [epub-33] 的EPUB出版品不能進入該系統),該閱讀系統整體依然可被視為符合規定。
當支援推薦以及選擇性功能時,閱讀系統必須符合分別定義在各章節中的所有規範性規定。
當閱讀系統開發者選擇不支援推薦以及選擇性功能時,不是意味著該章節中可應用的的規範性規定全部不適用。在某些狀況下,不實作某一項功能時,可能有替代的規定(例如不支援腳本時,就要處理回退)。閱讀系統必須在不支援功能時,符合這些替代的規定。
EPUB出版品經常包含對本規格而言並非必要的資訊(像是包裝文件後設資料)。閱讀系統使用這些額外資訊於任何目的上(例如用於改善使用者介面)。
閱讀系統在EPUB出版品,或者其中的資訊違反內容製作或者處理規定時,不要求一定要載入。
本節不具規範性。
儘管不要求閱讀系統在解析以及處理EPUB出版品時得回報錯誤(像是推測固定版面文件的尺寸),但強烈鼓勵提供存取這些資訊的手段。可類比的範例為網頁瀏覽器中的開發者工具,可用來去除HTML網頁以及應用程式的臭蟲。
舉個例子,EPUB製作者若能存取這些解析資訊,可以得到極大的助益(像是能有效地除去EPUB出版品中的臭蟲)。為了最大限度除去這些臭蟲,建議閱讀系統不僅回報直接遇到的問題,也可以回報所使用的應用程式所回報的問題(像是由用於處理內容的瀏覽器核心回報的HTML、CSS以及JavaScript錯誤,或者由EPUBCheck回報的驗證問題)。
我們不希望使用者在閱讀時因為錯誤回報而產生突兀的體驗,造成對閱讀體驗的影響。舉個例子,可以選擇性地由設定選單中開啟回報的資訊,而不會對使用者造成非必要的干擾。
如果閱讀系統有顯示範圍,其必須支援圖片核心媒體類別資源 [epub-33] 。
如果閱讀系統有處理預錄音訊的能力,其必須支援聲音核心媒體類別資源 [epub-33] 。
閱讀系統可以支援外圍資源類別的任意組合,以及,當不支援一種外圍資源時,必須按照外圍資源 [cite>epub-33] 中定義的做法來處理回退。
閱讀系統應該支援遠端資源,如資源位址 [epub-33] 中的定義。
為了限制網路攻擊造成的風險,閱讀系統應該僅載入透過https
URI綱要 [rfc7230] 所參照的遠端資源。
閱讀系統必須避免從頂層瀏覽脈絡 [html] 開啟的資料URL [rfc2397] ,除非透過閱讀系統提供的功能,像是脈絡選單所啟動。如果閱讀系統不使用供頂層內容文件的頂層瀏覽脈絡,例如頂層內容文件為SVG,其必須防止將資料URL以頂層內容文件的方式開啟。
閱讀系統必須避免存取透過檔案URL [rfc8089] 參照的資源。
作為處理出版品資源的一部分,閱讀系統需要處理XHTML內容文件或者SVG內容文件中,設置語言以及基礎行文方向的屬性,以及所有XML文件的xml:lang
屬性(像是包裝文件以及媒體層疊文件)。
更進一步,閱讀系統必須處理在包裝文件中處理dir
屬性 [epub-33] ,透過dir
指定的基礎行文方向適用於其指定的元素,以及內容中的所有元素,除非使用另外一個dir
實例來覆寫(也請見5.1 基礎行文方向以了解更近一步的細節。)
在出版品資源中缺少這項資訊時,閱讀系統不得從包裝文件中表述的資訊來推測語言或者基礎行文方向(也就是透過xml:lang
以及dir
屬性,link
元素中的hreflang
屬性,或者從dc:language
元素 [epub-33] )。參照資源的正式規格以獲得在缺少明確的語言以及行文資訊時該如何處理。
閱讀系統可以支援網路存取,以獲得遠端資源並且允許有腳本的內容文件與位於網頁上的API溝通以取得資源。
然而,提供網路存取會增加對閱讀系統的安全風險,以及對使用者的安全與隱私風險。這些風險經常特定於閱讀系統以及其所運作的基礎平台──大多數閱讀系統建構於其上的瀏覽器核心,其不提供與網頁瀏覽器相同的安全與隱私控制。結果使開發者需要在允許網路存取時,需要格外小心,閱讀系統需要更多澈底的測試,使其能不受到攻擊。更多關於這些風險的資訊提供在15. 安全與隱私。
如果閱讀系統開發者允許網路存取,推薦以下兩者方式:
當一個連結有http
或https
綱要 [url] 時,閱讀系統:
對於需要輔助應用程式(helper application)才能載入的有綱要連結,閱讀系統應該取得使用者的同意,並且遵從平台指引來開啟輔助應用程式。
更多關於外部連結的安全與隱私問題資訊,請見15.2 威脅模型。
處理EPUB容器的應用程式不需為功能完整的閱讀系統(例如,一個應用程式可能只會解壓縮容器中的內容,或者檢查包裝內容是否合規)。在這些狀況下,應用程式的開發者可以忽略定義在本章節中對閱讀系統的規定。
閱讀系統必須指派一個URL [url] 作為OCF抽象容器的根目錄。該URL稱為容器根URL。由實作自行決定作法,但實作上必須有以下特性:
/
」加上容器根URL為c容器根URL的base。..
」加上容器根URL為容器根URL的base。閱讀系統中每一個使用者指定的EPUB出版品實例之 來源(origin) [html] 獨特性意味著,如果兩個不同使用者取得相同的EPUB出版品,就算使用相同的閱讀系統,兩位使用者各自擁有的副本,其來源應該不同。
容器根URL的特性為,合規的閱讀系統會將任何相對URL字串解析為一個內容URL。換句話說,相對連結不會「溢位」到容器內容之外,這是一項重要的安全功能。
實務上,容器根URL的行為類於定義如下的URL:
URL元件 | 值 |
綱要 | http 或https |
主機 | localhost |
埠 | 一個動態的埠,唯一指派給該EPUB實例 |
例如:
容器檔案 | 檔案路徑 | URL |
根目錄 | empty string |
http://localhost:49152/
|
包裝文件 |
EPUB/package.opf
|
http://localhost:49152/EPUB/package.opf
|
EPUB內容文件 |
HTML/file name.xhtml
|
http://localhost:49152/HTML/file%20name.xhtml
|
URL字串 (可在在內容文件中發現作為範例) |
內容URL |
../HTML/file%20name.xhtml
|
http://localhost:49152/HTML/file%20name.xhtml
|
/Media/img.png
|
http://localhost:49152/Media/img.png
|
../../../Media/img.png
|
http://localhost:49152/Media/img.png
|
請注意,後兩個連結禁止在EPUB出版品使用,以確保對不合規以及遺存之閱讀系統和工具鏈的互通性。
有些語言規範參考了之前的意見徵求書(Requests For Comments,RFC) [url] ,在這樣的案例中,特定語言適用較早的RFC。
儘管EPUB製作者需要遵從各種檔案名稱與檔案路徑的限制 [epub-33] 以獲得最大的互通性,閱讀系統應該嘗試處理不符合這些規定的檔案名稱與路徑。不合規的檔案名稱與路徑可能只會在某些作業系統上產生問題。
本規格不指定無法顯示OCF檔案名稱與路徑的閱讀系統,該如何處理不相容問題。
container.xml
)閱讀系統預設必須使用第一個rootfile
元素所參照的包裝文件 [epub-33] 來處理EPUB出版品。如果閱讀系統能提供方法從其他可以取得的選項中挑選,其可以選擇更為適切的包裝文件。
metadata.xml
)閱讀系統應該忽略具備無法識別跟元素的metadata.xml
檔案 [epub-33] 。
manifest.xml
)閱讀系統不得使用ZIP封存檔或者manifest.xml
檔案中的補充性宣告資訊 [epub-33] 來處理EPUB出版品。
signatures.xml
)在估算摘要用於驗證signatures.xml
檔案 [epub-33] 中的簽章前,閱讀系統 必須解密在簽署後加密的檔案──在簽署前加密的檔案 不得被解密。
請參照供XML簽章使用的解密轉換(Decryption Transform) [xmlenc-decrypt] 以獲得更多關於識別簽章後資料解密的識別方式。
閱讀系統:
必須將任何使用Deflate [rfc1951] 以外壓縮技術的OCF ZIP容器視為錯誤。
必須支援定義為「Version 1」的ZIP 64延伸 [zip] 。
必須將使用 [zip] 加密功能的OCF ZIP容器視為錯誤。
不需要保存OCF ZIP容器透過載入與儲存操作時,外於OCF抽象容器脈絡的資訊。詳細而言,閱讀系統不需保存CRC值、comment欄位或者其他保有對應到特定作業系統之檔案系統資訊的欄位(例如外部檔案屬性以及額外的欄位)。
關於OCF ZIP容器封存檔中的特定欄位,閱讀系統:
閱讀系統應該支援字體解模糊化,如 [epub-33] 中字體模糊化所定義。
為了恢復原始資料,閱讀系統應該單純地將程序反過來進行:來源檔案變成模糊化資料,以及目標檔案包含原始資料。
EPUB 3早在EPUB 3.0.1就允許字型模糊化,但並未指定模糊化與壓縮的順序。就結果來說,閱讀系統可能在解壓縮與解模糊化後遇到不合規的字體。在這樣的實例中,在解壓縮前解模糊化可以得到合規的字體。閱讀系統不必支援這種補償的手段,但是開發者應該在支援EPUB 3內容時考慮加入。
如果有設定dir
屬性 [epub-33] ,並且指示基礎行文方向為ltr
或rtl
,閱讀系統必須以定義在 [bidi] 中更高階的協定來覆寫bidi演算法,如果基礎行文方向為ltr
,將段落嵌入層級設定為0,或基礎行文方向為rtl
時,為1。
如果基礎行文方向為auto
,在這樣的狀況下,閱讀系統必須利用Unicode bidi演算法來決定文字方向,由 [bidi] 的規則P2開始。
儘管在 [epub-33] 中,於包裝文件後設資料中設定文字方向被標記為實作不足,閱讀系統若有全球性的使用者,或者宣稱能支援各種語言的內容,強烈推薦在將後設資料公開給讀者時實作這項功能。忽略文字方向會造成易讀性問題。
如果閱讀系統的支援達到必要的基準,實作不足的標記會由 [epub-33] 中移除。
閱讀系統不應依賴唯一識別碼(unique identifier),認為獨特的識別碼會用於唯一一本的EPUB出版品上。判斷兩本有著相同唯一識別碼的EPUB出版品為同一出版品的不同版本,或者不同的出版品,可能需要檢視其他後設資料,像是最後修改日期、書名以及作者。
閱讀系統必須在處理都柏林核心 [dcterms] 與meta
元素值 [epub-33] 前,剝去並且壓縮ASCII空白 [infra] 。
dc:identifier
元素為了判斷dc:identifier
元素的值 [epub-33] 是否符合既有的系統,或者受到發行機關所承認,閱讀系統應該檢查identifier-type
特性 [epub-33] 。
dc:title
元素閱讀系統必須識別文件順序中第一個 dc:title
元素 [epub-33] 作為EPUB出版品的主要標題,並且在其他title元素之前優先呈現給使用者。
本規格不定義如何處理額外的dc:title
元素。
dc:language
元素在dc:language
元素中指定該EPUB出版品的語言為資訊性質。此資訊有一些用途包括:
dc:creator
元素當決定顯示順序時,閱讀系統必須使用metadata
區塊中dc:creator
元素 [epub-33] 的文件順序,第一個出現的creator
元素即為主要創作者。如果閱讀系統要將創作者後設資料呈現給使用者,其應該在可能時,將所有列於metadata
區塊中的創作者一併列出(基於顯示上的考量,而不限制何時)。
meta
元素閱讀系統應該忽略所有無法辨識的property
屬性, [epub-33] 定義表述的meta
元素。閱讀系統不得遇到未知的表述時出現問題。
link
元素取得與支援連結的資源為選擇性。
在hreflang
[EPUB-33] 屬性中指定的語言純粹只是建議性質。在資源中表述的語言資訊決定解析與處理目的使用的語言,定義在國際化需求中。
閱讀系統必須忽略無法辨識的properties
屬性 [epub-33] 值。
閱讀系統在處理EPUB出版品時不應使用連結的資源,因為具備限制以及涉及風險(例如,缺少關於資源的資訊以及如何處理,遠端託管資源的安全性風險,缺少回退等。)。
閱讀系統遇到出版品資源為不支援的MIME媒體類型 [rfc2046] 時,必須穿越宣告回退鍊 [epub-33] 直到識別支援的出版品資源,用來取代不支援的資源。如果閱讀系統支援回退鍊中多個出版品資源,其可以基於資源的 properties
屬性 [epub-33] 值來選擇資源,否則應該尊重EPUB製作者偏好的回退順序。
如果閱讀系統不支援回退鍊中的任何資源,其必須警告使用者內容無法顯示。
當宣告回退 [epub-33] 提供給頂層內容文件使用時,閱讀系統可以從可用的選項中挑出最適宜的版本來處理該內容(也就是檢查每一個的properties屬性)。
閱讀系統必須在遇到其已經遇過的第一個參照時終止回退鍊。
閱讀系統必須提供按照定義在spine
元素 [epub-33] 中的方法來處理EPUB出版品,包括:
itemref
[epub-33] 作爲預設閱讀順序的起點;以及,spine
中給予的接續主要項目。當使用者按照定義在spine
元素中的預設閱讀順序閱讀時,閱讀系統可以自動跳過非線性的itemref
元素 [epub-33] 。當使用者啟動超連結到非線性資源時,這時閱讀系統必須處理參照的資源或者指定的回退。閱讀系統也可以提供選項供使用者決定要跳過預設的非線性內容或者不跳過。
如果EPUB製作者未指定page-progression-direction
屬性 [epub-33] ,閱讀系統必須推測其default
的值,當page-progression-direction
值為default
,閱讀系統可以選擇處理方向。
如果page-progression-direction
有default
以外的值,閱讀系統必須忽略任何從pre-paginated
XHTML內容文件中計算出的方向性。
閱讀系統必須忽略書脊中itemref
properties
屬性 [EPUB-33] 中無法辨識的所有值。
閱讀系統在處理線性閱讀順序時,不得跳過對重複宣告項目 [EPUB-33] 的參照。閱讀系統必須為了使用者介面(UI)目的,將這些視為有區別的項目(例如同一頁面每次出現都可以被獨立被加上書籤或者註解)。當閱讀系統跟從超連結到書脊中重複受參照的資源時,閱讀系統必須導覽到線性閱讀順序中在文件第一次出現的位置。
當書脊itemref
元素的properties
屬性覆寫掉全域處理特性 [epub-33] 時,閱讀系統必須跟從覆寫全域值以顯示書脊項目的規定。
例如,一個書脊項目包含了layout-pre-paginated
覆寫 [epub-33] ,在處理上就該跟從全域pre-paginated
值的規定。
如果在properties
屬性中有多於一個的覆寫擁有相同特性時,閱讀系統必須只使用第一個值。
在本規格的脈絡下,閱讀系統對集合 [epub-33] 的支援為選擇性。閱讀系統必須忽略定義了無法辨識角色的collection
元素。
EPUB內容文件 [epub-33] 的定義包含各種製作上的限制以對內容的跨界相容性進行最佳化(例如禁止以CSS設定語言與方向 [epub-33] )。除非在本規格另有陳述,閱讀系統可以支援這些受限制的功能。
除非在本章節中明確定義為覆寫,閱讀系統必須使用定義在 [html] 中的語義來處理XHTML內容文件,並且尊重任何在之中描述的使用者代理符合性限制。
不再推薦使用switch
元素 [epub-33] 。請參見在 [epubcontentdocs-301] 中的定義以獲得實作資訊。
不再推薦使用trigger
元素 [epub-33] 。請參見在 [epubcontentdocs-301] 中的定以獲得實作資訊。
閱讀系統可以在客製化屬性不變更本規格規定的前提下,支援該屬性。
為了支援嵌入於XHTML內容文件的MathML [mathml3] ,閱讀系統需:
如果有顯示區域,則必須支援顯示用MathML的視覺處理。
可以支援在annotation-xml
元素 [mathml3] 中發現的內容MathML處理。
閱讀系統可以選擇使用第三方函式庫,像是MathJax來處理MathML。
閱讀系統必須處理嵌入於XHTML內容文件中的SVG,如6.2 SVG內容文件所定義。
對以參照方式在XHTML內容文件中嵌入SVG添加樣式,閱讀系統不得套用包含文件中的CSS樣式規則到參照的SVG文件。
對以包含方式在XHTML內容文件中嵌入SVG添加樣式,閱讀系統必須套用包含文件中可適用的CSS規則到包含的SVG元素中。
為了處理SVG內容文件以及嵌入在XHTML內容文件中的SVG,閱讀系統需:
如果閱讀系統有顯示區域,其必須支援XHTML內容文件加上CSS [epub-33] 的視覺處理。
為了支援CSS,閱讀系統:
必須支援在 [csssnapshot] 中描述的正式CSS定義。
應該支援在 [csssnapshot] 中可適用的模組,其至少達到推薦候選(Candidate Recommendation)狀態 [w3cprocess] (並且受到廣泛實作)。
必須支援 [truetype] 、 [opentype] 、 [woff] 、以及 [woff2] 字型資源,透過@font-face
規則 [css-fonts-4] 所參照。
應該支援所有定義在CSS樣式表─有字首的特性 [epub-33] 中所有有字首的特性。
不應覆寫EPUB製作者的樣式表,但應該在必要時以方法保存層疊:透過使用者代理的樣式表、getOverrideStyle方法 [dom-level-2-style] ,或者 [html] style
屬性。
可以因使用者互動覆寫部分由EPUB製作者的樣式表。
除了支援以上定義的CSS特性外,閱讀系統的使用者代理樣式表應該支援 [html] 推薦的預設處理。
閱讀系統開發者應該將CSS支援實作到主流瀏覽器的等級,並且公開其使用者代理樣式表,以及如何與EPUB製作者的樣式表互動。
閱讀系統對腳本的支援依靠其使用脈絡:
閱讀系統應該在使用rendition:flow
特性「scrolled-doc
」或「scrolled-continuous
」 [epub-33] 顯示模式的流動內容EPUB內容文件中,支援書脊層級腳本。同樣的,如果在流動內容EPUB內容文件中支援書脊層級腳本,其必須實作「scrolled-doc
」顯示模式,以及應該實作「scrolled-continuous
」顯示模式。
閱讀系統可以支援其他使用腳本的脈絡,但是本規格並不描述這樣的腳本。結論而言,在其他脈絡下使用腳本,可能在跨閱讀系統時不穩定。
如果閱讀系統支援腳本:
來源(origin) [html] 必須對閱讀系統中每一個使用者特定的EPUB出版品實例而言為獨特。
其不得允許容器限制的腳本變更主EPUB內容文件的 [dom] 或者其他EPUB出版品中的內容。以及不得允許操弄包含矩形的尺寸。(注意,儘管腳本並非容器限制,閱讀系統可能對內容變更給予限制。請見dom-manipulation功能)。
其可以在執行時,對腳本能力做出附加的限制(例如限制網路存取)。
其必須定義在B. epubReadingSystem物件中的epubReadingSystem
介面,來延伸導覽物件 [html] 。其也必須在容器限制腳本脈絡中,支援定義在B.4.1.2 Features中的dom-manipulation
以及layout-change
。
如果閱讀系統不支援腳本,其必須按照Fallbacks for scripted content documents [epub-33] 供有腳本內容文件回退之定義,處理有腳本內容的回退。
閱讀系統應該在腳本環境中跟從 [html] 中的DOM事件模型,並且跳過UI事件,在執行任何與這些事件相關的動作前為之。
閱讀系統開發者必須確保腳本不能關閉重要功能(像是導覽)以限制可能的惡意腳本對閱讀系統產生影響的可能性。結果而論,儘管腳本環境應該能夠取消任何事件的預設動作,而有些事件可能無法被跳過,或者無法取消。
本節不具規範性。
閱讀系統開發者在讓閱讀系統支援腳本時,必須注意到執行有腳本內容時產生的安全問題。由於閱讀系統部署的腳本模型與瀏覽器相同,開發者必須將在網頁脈絡中會遇到的相同種類問題納入考量。
每一個閱讀系統必須確認是否特定文件中的腳本能被信任。閱讀系統應該將所有腳本視為不受信任(以及潛在惡意),開發者應該檢查各種維度的攻擊並且建立保護。詳細來說,開發者應該考量以下各點:
對於runtime環境的攻擊(例如,從使用者硬碟竊取檔案);
對於閱讀系統自身的攻擊(例如,竊取使用者的書單或者造成非預期的行為);
從一份EPUB內容文件對另一份文件進行攻擊(例如,竊取其他文件產生出的資料);
透過未加密的腳本攻擊文件中加密的部分(例如,注入惡意腳本來抽取保護的內容);
對區域網路進行攻擊(例如,竊取防火牆後伺服器中的資料)。
為了限制不受信任腳本造成的可能傷害,本規格推薦閱讀系統分派給每一本EPUB出版品一個獨特來源(origin) [html] (請見4.1.1 根目錄URL)。指派獨特來源可以確保書脊層級腳本 [epub-33] 能與其他EPUB出版品分離區隔,並且限制cookies [html] 、網頁儲存 [html] 等的存取。
網頁API的範例也與「來源(origin)」的概念相繫,包含網頁儲存 [html] 以及IndexedDB [indexeddb] ,EPUB內容文件可以透過腳本與其互動。閱讀系統允許使用者從其管理的資料庫(他們的「書架」)新增/移除出版品,可以在出版品一時移除及重新輸入內容資料庫時,維持出版品的獨特來源。相反地,閱讀系統可以為每次新增的出版品建立新的獨特來源。
本規格也推薦受容器限制的腳本 [epub-33] 不得調整主EPUB內容文件的DOM,以及/或者操弄包含的四邊形(請見6.4 腳本)。
請注意符合這些推薦事項並不保證能保護以上列出的可能攻擊;開發者必須檢查每一項在其閱讀系統脈絡中潛在的脆弱性。
閱讀系統必須支援對固定版面文件 [epub-33] 的處理。
如果在包裝文件後設資料 [epub-33] 中沒有任何meta
元素包含rendition:layout
特性時,閱讀系統必須推定預設值reflowable
為全域值。
當rendition:layout
特性設定為pre-paginated
,閱讀系統不得在處理同步跨頁時,在相鄰的內容槽中加入空白。
rendition:layout
特性值有著以下處理規定:
如果在包裝文件後設資料 [epub-33] 中沒有任何meta
元素包含rendition:orientation
特性時,閱讀系統必須推定預設值auto
為全域值。
rendition:orientation
特性值有著以下處理規定:
閱讀系統判斷該以何種方向處理EPUB內容文件。
支援多重頁面方向的閱讀系統應該將EPUB內容文件以landscape(橫寬直窄)方向處理。
支援多重頁面方向的閱讀系統應該將EPUB內容文件以portrait(直寬橫窄)方向處理。
以何種方式傳達其意圖以實作而定。
如果在包裝文件後設資料 [epub-33] 中沒有任何meta
元素包含rendition:spread
特性時,閱讀系統必須推定預設值auto
為全域值。
rendition:spread
特性值有著以下處理規定:
rendition:page-spread-left
特性 [epub-33] 指示書脊項目應該被處理到跨頁的左手側槽中。
rendition:page-spread-right
特性 [epub-33] 指示書脊項目應該被處理到跨頁的右手側槽中。
rendition:page-spread-left
以及rendition:page-spread-right
特性適用於預分頁及流動內容內容,並且僅在閱讀系統創建同步跨頁時套用。
rendition:page-spread-*
特性必須優先於XHTML內容文件中設定page-break-before
特性的任何值 [csssnapshot] 。
rendition:page-spread-*
特性值時,流動內容的項目應該由下一頁起──如 [epub-33] 中page-progression-direction
屬性所定義。
閱讀系統必須尊重reflowable與pre-paginated書脊項目中的rendition:page-spread-*
特性(例如透過加入空白頁)。
當預分頁的書脊項目跟在流動內容的書脊項目之後,當其缺少rendition:page-spread-*
特性值時,預分頁的項目應該由下一頁起(如page-progression-direction
屬性所定義)。
當閱讀系統遇到兩個書脊項目呈現真正的跨頁(也就是兩個相鄰的書脊項目有著rendition:page-spread-left
與rendition:page-spread-right
特性),其應該建立相鄰頁面間沒有空白的跨頁。
閱讀系統必須使用宣告於viewport meta
標籤中表述的寬與高,為XHTML內容文件創建初始包含塊(initial containing block, ICB),如 [epub-33] 在HTML中表述所定義。其必須裁去位置外於ICB的內容。
如果viewport meta
標籤中的寬與高值包含非數字字元,但由數字開始(例如值包含長度單位宣告,如「500px」),該數字字首應該被當作像素值,之外的值必須被當作不合規。
就算語法不合規,閱讀系統應該嘗試從viewport meta
標籤中取出width
與height
的值。
閱讀系統必須使用viewport
meta
標籤中第一個宣告的width
及height
特性(也就是忽略重複的宣告)。
如果viewport meta
不包含width或者height值,或者這些值不合規定,閱讀系統可以補填值。例如,閱讀系統可以:
device-width
與device-height
;或者如果一份XHTML內容文件包含多於一個的viewport meta
標籤,閱讀系統必須使用文件順序中第一個以取得寬與高的尺寸。後來的宣告必須被忽略。
當ICB的長寬比與閱讀系統內容顯示區域的長寬比不匹配時,閱讀系統可以將ICB置放在使用者介面可容納的區域中;換句話說,可以在內容的任一邊(或者兩邊)加上黑邊(letter-boxing)。
閱讀系統必須使用在 [epub-33] 中在SVG中表述ICB的定義,以其尺寸建立初始包含塊(ICB)以處理SVG內容文件。
當ICB的長寬比與閱讀系統內容顯示區域的長寬比不匹配時,閱讀系統應該跟從定義在 [SVG] 中供viewBox
以及preserveAspectRatio
屬性使用的規則。
當處理固定版面文件時,預設的意圖為內容顯示區域應該盡可能地佔據可使用的顯示範圍。閱讀系統不應在顯示範圍插入額外的內容,像是邊框、邊界、頁首、頁腳。
將閱讀系統的控制工具呈現給使用者由實作端決定,也不包含在以上的預期行為中。
如果閱讀系統閱讀系統支援指定的處理方式,其應該使用控制溢流內容的方法,但可以提供選項供使用者來覆寫要求的處理方式。
如果在metadata
區塊 [epub-33] 中沒有任何meta
元素包含此特性,閱讀系統必須推定預設值auto
為全域值。閱讀系統可以僅支援此預設值。
rendition:flow
特性值有著以下處理規定:
閱讀系統應該動態分頁所有溢流內容。
閱讀系統應該將所有EPUB內容文件中可以溢流的內容處理成可捲動,以及應該將整份EPUB出版品處理成一個連續的捲軸,從一個書脊項目到另一個書脊項目(除了區域覆寫 [epub-33] )。
閱讀系統應該將所有EPUB內容文件處理成使用者可捲動的溢流內容,以及應該將每一份書脊項目處理成切分開的可捲動文件。
閱讀系統可以使用其預設方式處理溢流內容,或者按照可以適用的使用者偏好方式來處理。
對rendition:flow-scrolled-continuous
特性而言,捲動方向必須由itemref
元素 [epub-33] 所參照的XHTML內容文件其根元素的區塊流動方向相對定義。如果區塊流動方向向下(由上而下),捲動方向必須為垂直。如果區塊流動方向是向右(由左而右)或者向左(由右而左)就必須為水平。
閱讀系統必須在處理預分頁書脊項目 [epub-33] 時,忽略rendition:flow
特性及其覆寫。
閱讀系統開發者可以決定不理會此項限制,並且接受rendition:flow
的scrolled-continuous
值作為開關,來將每一份預分頁的書脊項目呈現為一個垂直的長條(使其易於在智慧型手機或者電腦上閱讀)。這種呈現類型常被稱為「Webtoons」。有些出版社已經使用這種可能性。經過更多實驗以及孵化,本規格的未來版本可能將這種作法作為固定版面文件的標準功能。請參見github issue 2412。
當書脊項目設定rendition:align-x-center
特性時,若可行,閱讀系統應該將內容在顯示範圍或者跨頁中處理成水平置中。這項特性不會影響到對書脊項目的處理,結果只會影響內容盒中置放位置。
對流動內容的內容,支援本特性的閱讀系統必須將每一份虛擬頁面置中。
本規格不定義當閱讀系統不支援這項特性,或者EPUB製作者不指定時的預設處理行為。閱讀系統可以自己的設計來處理書脊項目。
除了為固定版面文件取得初始包含塊的尺寸外,閱讀系統必須忽略在viewport meta
宣告中的處理程序。
本限制適用於固定版面與流動內容文件。
具備處理預錄音訊能力的閱讀系統應該支援媒體層疊 [epub-33] 。
如果閱讀系統不支援媒體層疊,其必須忽略以下兩項:
item
元素中的media-overlay
屬性 [epub-33] ;以及media-type
屬性值為application/smil+xml
的item
元素。當閱讀系統載入包裝文件時,其必須參照宣告item
元素 [epub-33] 的media-overlay屬性以找到EPUB內容文件所對應的媒體層疊。
閱讀系統必須支援XHTML內容文件的播放,以及 可以支援SVG內容文件。
播放必須開始於媒體層疊元素想要對應到EPUB內容文件上的開始點。請注意EPUB內容文件的開始點可能對應到媒體層疊開始或者中間的元素。 當媒體層疊文件結束播放時,閱讀系統應該載入下一個EPUB內容文件(如在包裝文件書脊中所指定)也載入對應的媒體層疊文件。
閱讀系統必須按照序列處理body
元素 [epub-33] 下接的子元素。seq
元素 [epub-33] 的子項必須被按照序列處理,當最後一個子元素結束播放時完成播放過程。閱讀系統必須平行處理par
元素 [epub-33] 的子項,當所有的子項結束播放時完成播放過程。當body
元素的最後一個子項結束播放時,閱讀系統完成媒體層疊文件的播放過程。
當有媒體層疊audio
元素 [EPUB-33] 時,閱讀系統必須播放src
屬性所參照的聲音資源,由clipBegin
屬性所提供的片段偏移時間開始,並且到clipEnd
屬性 [epub-33] 所提供的片段偏移時間結束。
此外:
如果EPUB製作者沒有指定clipBegin
屬性,閱讀系統必須推定其值為「0
」。
如果EPUB製作者沒有指定clipEnd
屬性,閱讀系統必須推定該值為物理媒體的完整長度。
如果clipEnd
的值超過物理媒體的完整長度,閱讀系統必須推定其值為物理媒體的完整長度。
使用者可以控制音訊播放的選項應該包含時長調整(timescale modification),這樣使用者可以更改播放速率而不會讓聲調變形。推薦的範圍為一半速度到兩倍速。
當呈現媒體層疊text
元素 [epub-33] 時,其src
屬性包含一個URL-斷片(URL-fragment)字串參照到EPUB內容文件的特定部分,閱讀系統應該確保參照的位置可以在顯示範圍內可見。在 [html] 元素ID與SVG斷片識別碼 [svg] 之外,閱讀系統可以支援其他斷片識別碼綱要。
在媒體層疊播放時,具備顯示範圍的閱讀系統應該添加後設資料特性active-class
以及playback-active-class
[epub-33] 給予的class名稱到EPUB內容文件中適切的元素上,如果有該特性的話。反過來說該class名稱應該在播放狀態改變時移除,如 [epub-33] 中關聯樣式資訊所描述。
active-class
與playback-active-class
後設資料特性為選擇性,如果忽略,閱讀系統行為交由實作端決定。
本規格先前的版本包含一些關於嵌入音訊以及影片 [epubmediaoverlays-32] 的資訊。這項功能不再推薦使用。
指引到嵌入音訊與影片的自動播放現在不再推薦。
請參照在 [epubmediaoverlays-32] 中的定義以獲得更多資訊。
當媒體層疊text
元素沒有對應的audio
[epub-33] 元素,參照到目標EPUB內容文件的文字時,具備文字轉換語音(text-to-speech, TTS)能力的閱讀系統應該使用TTS處理參照的文字。
閱讀系統應該使用目標EPUB內容文件中提供與語音相關的資訊,來播放聲音流作為媒體層疊處理的一部分。
請見 [epub-tts-10] 中的EPUB 3文字轉換語音支援以獲得更多關於在EPUB出版品中支援TTS科技的資訊。
媒體層疊text
元素生命週期對應到關聯語音合成的處理時間。text
元素的長度因此不明確(以及透過母par
元素推斷)需要由文字轉換語音引擎的執行來決定,所以無法在製作時知悉(像是朗讀速度、暫停以及其他音律參數等因素都會影響到音訊輸出)。這也意味著閱讀系統在使用包裝文件中的duration
特性值時應該將其視為近似值。
閱讀系統應該使用媒體層疊元素中epub:type
屬性所提供的語義資訊,來提供使用者跳過內容的選項。
當啟動跳過內容時,閱讀系統必須停止任何epub:type
屬性包含符合可跳過結構的語義之par
以及seq
元素的播放。
當播放媒體層疊時,閱讀系統應該提供使用者選項以離開(「跳出」)可跳出的結構 [epub-33] ,其由epub:type
屬性 [epub-33] ,其值是否來自可跳出的結構清單以進行判斷。
如果使用者要從可跳出的結構中跳出,閱讀系統必須從結構之後下一個接續的元素開始播放。
閱讀系統可以支援EPUB內容文件中的結構語義 [epub-33] 。
當處理epub:type
屬性時,閱讀系統需:
閱讀系統可以支援用語關聯機制,供處理property
資料類別值 [epub-33] 。
本章節定義了一個演算法,供從property
資料類別值中取得展開的URL使用。其僅適用於支援 [epub-33] 用語關聯機制的閱讀系統。
不支援 [epub-33] 用語關聯機制的閱讀系統可以將property
值處理成純字串值 [infra] 。不需要支援將值展開為URL,並基於其存在添加閱讀系統行為。
本演算法描述了使用定義在 [infra] 中術語以及資料類別的處理程序,以及,如果成功,回傳具備展開URL的字串值。對於不合規的特性回傳null值。
本演算法採用以下參數:
為了取得展開的URL,適用以下步驟:
讓baseURL、expandedURL、propertyPrefix以及propertyReference為空白字串。
按照以下方式取得propertyPrefix以及propertyReference的值:
如果value不包含冒號(U+003A),將propertyReference設為value。
如果一個property
值不包含冒號,就不包含字首。在這狀況下,該值由預設用語集而來,如本演算法的下一步驟說明。
此外,如果value由冒號開始,則該值不合規,回傳null。
由冒號開始的值不合規,因為代表著沒有設置字首。
以外的狀況,以第一個冒號將value切分,冒號前的字串設定到propertyPrefix,並且將冒號後的字串設定到propertyReference。
如果propertyReference不是合規的相對-路徑-無-綱要-位址(path-relative-scheme-less-URL)字串,如property
資料類別定義 [epub-33] 所要求,該值不合規,回傳null。
相對-路徑-無-綱要-位址(path-relative-scheme-less-URL)字串定義有著不少限制,其適用於參照上判斷其是否有字首。
例如,參照不得以位址-綱要(URL-scheme)字串開始,後接冒號。這項限制意味著以下字串並非合規的property
值,因為第二個冒號可能代表一個綱要,如:foo:bar:baz/qux
。
此外還限制字元必須使用百分比編號編碼。
以以下方式取得baseURL的值:
如果propertyPrefix為空白字串:
epub:type
[epub-33] ,將baseURL設定為http://idpf.org/epub/vocab/structure/#
meta
元素 [epub-33] 以及attr為scheme
,該特性值不合規,回傳null。meta
元素 [epub-33] ,將baseURL設定為http://idpf.org/epub/vocab/package/meta/#
link
元素 [epub-33] ,將baseURL設定為http://idpf.org/epub/vocab/package/link/#
item
元素 [epub-33] ,將baseURL設定為http://idpf.org/epub/vocab/package/item/#
itemref
元素 [epub-33] ,將baseURL設定為http://idpf.org/epub/vocab/package/itemref/#
此外:
如果在doc的文件元素宣告了一個prefix
屬性,以及該屬性包含的字首能與propertyPrefix匹配,就將baseURL設定到該字首宣告關聯的URL。
此外,如果propertyPrefix匹配到doc所保留的字首 [epub-33] ,就將baseURL設定到保留的字首所關聯的URL。
當一個property
值有字首時,第一個要檢查的地方就是文件元素中的prefix
屬性宣告之基底URL。
如果作者沒有為字首指派URL,下一步就是檢查該字首是否與保留的字首相匹配。
請注意作者指派的字首URL會覆寫保留的字首的URL。
如果baseURL為空白字串,該property值不合規,回傳null。
如果基底URL經過以上處理程序還是為空白,就是代表字首沒被保留或者映射,或者該元素或屬性經過處理後不是 [epub-33] 所定義可以接受的property
資料類別。
缺少基底URL,就無法產生展開的URL,所以該值不合規。
如果expandedURL不是合規的URL字串,該值不符合規定。回傳null。
此外,回傳expandedURL。
儘管可以取得展開後的值,並不代表一定是合規的URL。這僅會發生在EPUB製作者為字首指派了不合規定的基底URL。
閱讀系統必須嘗試解析包裝文件version
屬性 [epub-33] 的值小於「3.0
」的EPUB出版品。
有較舊版本編號的EPUB出版品除非使用各自的規格進行解析,不一定會如預期一般被處理。閱讀系統應該以其規格的定義支援這樣的EPUB出版品。
本節不具規範性。
儘管本規格主要關注於如何解析以及處理EPUB出版品,而不強制要求所有閱讀系統都必須提供特定的使用者介面。但還是會有共同的近用性問題,所有的閱讀系統開發者都必須注意、發現,避免在其應用程式中出現。
W3C的使用者代理無障礙指引(User Agent Accessibility Guidelines) [uaag20] 提供了許多有用的實踐,開發者應該採用以增進閱讀系統。因為許多瀏覽器會遇到的近用性問題,在專為EPUB的使用者代理上都會平行出現。
以下列表概要地指出許多額外專屬於EPUB的領域,若這些領域近用性有缺陷,就會影響到使用者的閱讀體驗:
DAISY Consortium維護了一份近用性測試套件以評量這些以及更多要點。
本節不具規範性。
EPUB出版品的特質在於其結構。EPUB格式提供了表現、包裝以及將一組有結構並在語義上強化的網頁內容─包括HTML、CSS、SVG、JavaScript以及其他資源─編碼以單一檔案容器配布的手段。
對閱讀系統而言,這種做法意味著安全與隱私問題主要與這些格式的特質相連結,並且近乎要面對所有網頁內容的威脅。
閱讀系統開發者也需要負擔雙向的責任,一方確保應用程式的安全與隱私,並且協助限制使用者受到內容在處理時受到的威脅。本章節剩下的部分將發掘EPUB 3的風險模型,用意為協助開發者認識並且移除這些風險。
本節不具規範性。
對使用者而言最大的威脅來自於其閱讀的內容 [epub-33] ,而站在第一線防衛這些攻擊的就是他們所使用的閱讀系統。使用者期盼閱讀系統能作為保鑣抵抗這些惡意內容,也經常不會意識到EPUB出版品會面對與網站相同的安全風險。
不過儘管仰賴閱讀系統來保障安全與隱私,閱讀系統按照資訊被處理的方式,也會面對對使用者的非預期威脅。例如,追蹤使用者資訊來提供最佳經驗為常見的需求,但在沒有使用者同意之下為之,閱讀系統就會衝撞到法律對隱私的規定。
本章節勾勒一些閱讀系統開發者必須考量的關鍵威脅,並在接下來的章節說明細節以及推薦事項。
惡意腳本呈現多種對閱讀系統攻擊的維度。例如,如果本地儲存不安全,腳本就可能試圖取得使用者的資料。若與網路存取一併提供,就可能試圖在不同意的狀況下蒐集使用者資料。
更多對這些議題的討論細節,以及如何移除這些威脅,提供在6.4.3 安全考量中。
EPUB出版品可以包含針對閱讀系統或者其運行的作業系統之安全漏洞所設計的資源。攻擊者可能也會透過檔案重新導向技巧,試圖存取遠端資源,像是符號連結或者檔案捷徑。
T缺少對EPUB出版品簽署的標準方式意味著閱讀系統無法驗證內容從製作端到載入設備的過程是否受到竄改。
遠端資源讓EPUB出版品從不受信任的來源載入時,面對相同的風險。儘管EPUB出版品的出版社可以信任,遠端資源可能不是那麼一回事。
呼叫遠端資源也可能會被用來追蹤使用者資訊(例如透過伺服器紀錄)。閱讀系統應該限制透過HTTP要求時暴露的資訊,僅能提供取得資源必要的資訊。
EPUB的來源對EPUB製作者以及對每一種閱讀系統實作來說都為未知。結論上,如果EPUB製作者在自己控制的網頁伺服器上託管遠端資源,該伺服器實際上不能使用需要制定允許來源的的安全功能,像是供CORS的檔頭、Content-Security-Policy
,或者X-Frame-Options
。
就像遠端資源,外部連結可以用於欺騙不知情的使用者開啟網站上的惡意資源,攻擊作業系統或者閱讀系統的漏洞。
同樣的,閱讀系統應該也要在開啟連結時,避免暴露潛在的使用者識別資訊(例如,不使用可追蹤的識別碼,或者透露非必要的使用者環境資訊)。
使用者生成的內容屬於閱讀體驗的一環,例如從文字區域到其他互動元件,可能在內容安全性不足時,讓閱讀程式的安全或者使用者隱私面對威脅。更多關於腳本安全性的細節於6.4.3 安全考量中提供。
在未得到使用者的同意的情形下,蒐集關於使用者以及其閱讀習慣的資訊違反其隱私權,儘管該資訊僅供內部使用。
嘗試基於使用者的閱讀習慣或者其出版品的後設資料(例如無障礙偏好)來側寫使用者,會讓使用者暴露在非預期的危險之下。
此外,適用於 [xml] 以及 [zip] 檔案的安全考量也分別適用於包裝文件以及開放容器格式,請參見application/oebps-package+xml
以及 application/epub+zip
格式媒體類別註冊中的「安全考量」以獲得近一步的細節。
閱讀系統開發者可以採用對隱私最強的措施就是:指出所意圖蒐集與使用,關於使用者及/或其閱讀行為的資料,並且獲得使用者同意以取得。他們應該也允許對這些資訊進行個人化和管控。
如果閱讀系統允許使用者儲存持久性資料,特別是個人識別資訊,其應該將資料視為敏感,並且不准讓第三方存取。
可以理解蒐集一些使用者資料供銷售、配發、以及EPUB出版品的運作為必須,特別是對銷售EPUB出版品平台而言,閱讀書的方法與其相連。在這些案例中,閱讀系統應該識別所搜集的資料、如何被使用,並且允許使用者退出(然而零售商可以選擇透過其他方式告知使用者,像是在使用者在網站上創建帳號時)。推薦將蒐集的資料匿名化以保障使用者以及閱讀系統的安全及隱私。
也可以理解使用者資料對於一些閱讀系統的功能而言為必要或者有用。在這些案例中,也推薦匿名化。閱讀系統也應該告知使用者需要哪些資料,以及會被作為何用,並且提供退出的方法。
內容處理器──定義為處理接受EPUB內容供配布、顯示或者銷售的實體──也需要注意接受書檔時的潛在風險。建議內容處理器在接受書檔時,除了常態的驗證步驟外,也須檢查內容是否含有惡意內容。這些步驟能包含運行病毒掃描、驗證外部連結以及遠端資源和其他預警事項。
閱讀系統應該將來自任何新來源,包含整合書店的內容視為不安全(例如初次存取該來源時,就要求使用者允許腳本與網路存取)。如果閱讀系統允許使用者載入自己的內容(像是透過「側載(sideloading)」程序),每一個實例應該被視為不安全。
當處理XML文件時,閱讀系統不應解析DOCTYPE、ENTITY以及NOTATION宣告 [xml] 中的外部識別碼。閱讀系統也應該考量與內部或者外部XML實體相關的安全風險,例如,已知的DoS攻擊如「十億笑聲(Billion laughs attacks)」或者「XML外部實體攻擊」。
額外供外部連結、網路存取以及腳本的安全建議可以分別於3.9 外部連結、3.8 網路存取以及6.4.3 安全性考量取得。
開發者應該添加對不再推薦功能的支援前,考量到可能不會遇到這些內容。
WebIDL [Exposed=(Window)]
interface EpubReadingSystem
{
boolean hasFeature
(DOMString feature, optional DOMString version);
};
本規格不定義epubReadingSystem
的特性延伸供WorkerNavigator
物件 [html] 使用。因此閱讀系統不需要將epubReadingSystem
物件在Worker腳本脈絡中透露,以及EPUB製作者不能仰賴其存在。
Navigator.epubReadingSystem
物件透過有腳本的內容文件可以提供查詢使用者的閱讀系統資訊的介面。
閱讀系統必須將epubReadingSystem
物件在所有載入之有腳本內容文件的navigator
物件中顯露,包含任何巢狀容器限制腳本脈絡 [epub-33] 。閱讀系統必須確保epubReadingSystem
不晚於DOMContentLoaded
事件被觸發前可以使用 [html] 。
閱讀系統實作上可以因技術彈性原因,在有腳本的內容文件中創建複製的epubReadingSystem
物件實例。在這狀況下,閱讀系統必須確保能穩定維護物件的狀態──能夠對特性以及方法反映其值──在所有複製的實例中。
本規格用於定義name
、version
、以及layoutStyle
特性,但這些現在已經不再推薦 [epub-33] 。要獲得更多資訊,請參照其在 [epubcontentdocs-32] (供name
以及version
)以及 [epubcontentdocs-301] (供layoutStyle
)中的定義。
hasFeature
方法回傳布林值以指示是否閱讀系統支援任何指定功能的版本,或者當閱讀系統無法辨識指定功能時,回傳undefined
。
選擇性的version
參數能讓EPUB製作者查詢客制功能,其可能隨著時間變得不相容。所回傳的值只是僅對特定版本的功能支援。
定義在本規格中的功能沒有版本號。如果閱讀系統支援本規格定義的功能,其 必須忽略任何提供的version
參數並且回傳true
值。
以下表格列出支援epubReadingSystem
物件的閱讀系統必須辨識的一系列功能。當功能使用hasFeature
方法查詢時,閱讀系統必須回傳布林值以指示支援狀態。
名稱 | 描述 |
---|---|
dom-manipulation
|
腳本可以對文件的DOM進行結構變更(僅適用於書脊層級腳本 [epub-33] )。 |
layout-changes
|
腳本可以變更CSS樣式的屬性而影響內容排版(僅適用於書脊層級腳本 [epub-33] )。 |
touch-events
|
該設備支援觸控事件,以及閱讀系統將觸控事件傳給內容。 |
mouse-events
|
該設備支援滑鼠事件,以及閱讀系統將滑鼠事件傳給內容。 |
keyboard-events
|
該設備支援鍵盤事件,以及閱讀系統將鍵盤事件傳給內容。 |
spine-scripting
|
指示是否閱讀系統支援書脊層級腳本 [epub-33] (例如,這樣容器限制腳本 [epub-33] 可以判斷動作能不能依靠頂層內容文件的腳本支援,在嘗試動作之前了解成功的機會)。 |
閱讀系統開發者可以添加額外的功能,但是本規格的未來版本可能會延伸此列表,所以可能會與客製化添加的功能產生衝突或者不相容。
EpubReadingSystem
介面
§B.1EpubReadingSystem
使用的hasFeature
方法
§B.4.1.1Navigator
使用的Navigator.epubReadingSystem
屬性
§B.2audio
element
body
element
dc:creator
element
dc:identifier
element
dc:language
element
dc:title
element
epub:type
attribute
item
element
itemref
element
link
element
meta
element
par
element
rootfile
element
seq
element
spine
element
text
element
form
element
object
type
style
attribute (for html-global
element)
boolean
type
DOMString
interface
[Exposed]
extended attribute
[LegacyUnforgeable]
extended attribute
[SameObject]
extended attribute
本節不具規範性。
請注意本變更日誌僅列出自EPUB 3.2以來的顯著變更─這些變更會影響閱讀系統的符合性或有同等的重要性。
若要取得在改版過程中所有議題的列表,請參考工作小組的議題追蹤器。
getOverrideStyle
的參照。請見pull
request 2531。rendition:flow
的值可能用於控制如webtoon出版品。請見issue 2412。epubReadingSystem
物件的name
與version
特性。請見issue 1872。hreflang
值作為處理目的的重複規定。請見pull request
2343。rendition:spread
以及rendition:orientation
特性的預設陳述為推薦,與rendition:layout
相同。請見issue 1936。page-spread-center
現在是spread-none
的別名。請見issue 1929。textref
屬性以及text
元素的src
屬性的參照。對其他斷片識別碼綱要的支援為選擇性。請見issue 1586。dc:language
元素中的語言作為資源的語言。dir
屬性處理新的auto
值。請見issue 1491。link
元素中新的hreflang
屬性中的語言資訊不可信賴。請見issue 1488。本節不具規範性。
規格,就像藝術,就像人類創作。沒有人對EPUB的貢獻多於Garth Conboy,他參與了規格發展的每一步,從最早1999年的OEB 1.0到現在的EPUB 3.3。若沒有Garth的遠見、知識,以及超常的善良本性,這一切都不會成真。我們將EPUB 3.3版貢獻於對他的紀念,Garth,我們永遠欠你一筆。
以下EPUB 3工作小組的成員對本文件的產製有所貢獻:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: