1. 簡介

Open Publication Distribution System中文翻譯作開放出版發行系統,是一種基於Atom用來對電子出版物(主要用於電子書)作格式化的規範。透過OPDS可以提供電子出版物整合、發布、查詢和取得的功能。

完整的規範可以在此網站查到http://opds-spec.org/specs/opds-catalog-1-1-20110627/

OPDS繼承自Atom

OPDS目前發展到版本1.1,1.2為 Draft;OPDS 1.1的規範使用到的命名空間與Prefix如下:

名稱命名空間Prefix
OPDS 1.1 http://opds-spec.org/2010/catalog opds:
Atom 1.0 http://www.w3.org/2005/Atom atom:
DCTERMS http://purl.org/dc/terms/ dc:

MIME Type雖然基於Atom,不過由於OPDS的文件依據不同類型內容共定義了四種,如下:

文件類型MIME Type
OPDS Catalog Entry Document application/atom+xml;type=entry;profile=opds-catalog
OPDS Catalog Feed Document application/atom+xml;profile=opds-catalog
Acquisition Feed application/atom+xml;profile=opds-catalog;kind=acquisition
Navigation Feed application/atom+xml;profile=opds-catalog;kind=navigation

2. 文件類型

OPDS Catalog定義兩種文件,分別為OPDS Catalog Entry Document和OPDS Catalog Feed Document。

2.1 OPDS Catalog Feed Document

OPDS Catalog Feed Document應該要包含一個連結rel="start"以指向OPDS Catalog Root

OPDS Catalog Feed Document又定義兩種Feed,分別為Acquisition Feed和Navigation Feed

2.1-1 OPDS Catalog Root

OPDS Catalog Root必須是最外層的OPDS Catalog Feed Document且只能有一個Root,可以是Navigation Feed或Acquisition Feed。

2.1-2 Navigation Feed

Navigation Feed用來導向其他的Feed,黑字部分繼承Atom定義,紅字部分為OPDS定義,Navigation Feed定義如下:

Element必要多筆資料型態說明
<author> Δ O atomPersonConstruct 作者,<feed>必須要包含至少一個<author>,除非之下的所有<entry>都有包含<author>
<category> X O <category> 分類
<contributor> X O atomPersonConstruct 貢獻者
<generator> X X <generator> 產生者
<icon> X X 純文字 圖示,寬高比應該為1:1
<id> O X 純文字 唯一識別ID
<link> X O <link>(OPDS擴充) 連結,<feed>應該包含一個連結指向自己(ref="self")
<feed>應該包含一個連結指向OPDS Catalog Root(ref="start")
<logo> X X 純文字 圖示,寬高比應該為2:1
<rights> X X atomTextConstruct 版權資訊
<subtitle> X X atomTextConstruct 副標題
<title> O X atomTextConstruct 標題
<updated> O X atomDateConstruct 最後更新時間
<entry> X O <entry> 包含的項目
可以是Navigation Feed或Acquisition Feed的連結,但不可以是OPDS Catalog Entry。
<entry>中應該包含<content>來描述連結
<entry>包含之<link>的rel應該使用OPDS Catalog Relations定義,無合適才用rel="subsection"

指向Navigation Feed的連結type應該為application/atom+xml;profile=opds-catalog;kind=navigation

2.1-3 Acquisition Feed

Acquisition Feed用來列出可取得的項目,黑字部分繼承Atom定義,紅字部分為OPDS定義,Acquisition Feed定義如下:

Element必要多筆資料型態說明
<author> Δ O atomPersonConstruct 作者,<feed>必須要包含至少一個<author>,除非之下的所有<entry>都有包含<author>
<category> X O <category> 分類
<contributor> X O atomPersonConstruct 貢獻者
<generator> X X <generator> 產生者
<icon> X X 純文字 圖示,寬高比應該為1:1
<id> O X 純文字 唯一識別ID
<link> X O <link>(OPDS擴充) 連結,<feed>應該包含一個連結指向自己(ref="self")
<feed>應該包含一個連結指向OPDS Catalog Root(ref="start")
<logo> X X 純文字 圖示,寬高比應該為2:1
<rights> X X atomTextConstruct 版權資訊
<subtitle> X X atomTextConstruct 副標題
<title> O X atomTextConstruct 標題
<updated> O X atomDateConstruct 最後更新時間
<entry> X O <entry>(OPDS Catalog Entry) 包含的項目

指向Acquisition Feed的連結type必須為application/atom+xml;type=entry;profile=opds-catalog

2.1-3 Complete Acquisition Feed

OPDS Catalog可以提供一個Complete Acquisition Feed,以讓外部抓取,規則如下:

  1. 提供所有的刊物且不應該分頁,除非資料量很大。
  2. 所有刊物必須依照<updated>排序。
  3. 如果無分頁的話必須包含<fh:complete>之Element,分頁的話依據[RFC5005]之規則。
  4. 應該使用定義於[RFC2616]之Content-Encoding壓縮資料。
  5. 包含之Entry必須是Complete Catalog Entry。

2.1-4 OPDS Catalog Relations

連結到OPDS Catalog Feed Document的連結應該要使用OPDS Catalog Relation之定義來表示文件意義:

rel文件類型說明
start OPDS Catalog Root OPDS Catalog Root
subsection Navigation Feed 無其他更合適的OPDS Catalog Relation可用時才使用
http://opds-spec.org/sort/new Acquisition Feed 最新刊物,應該依時間排序,應該在Navigation Feed或OPDS Catalog Root才使用
http://opds-spec.org/sort/popular Acquisition Feed 熱門刊物,應該依熱門度排序,應該在Navigation Feed或OPDS Catalog Root才使用
http://opds-spec.org/featured Acquisition Feed 特別刊物,例如促銷,應該在Navigation Feed或OPDS Catalog Root才使用
http://opds-spec.org/recommended Acquisition Feed 推薦刊物,應該依推薦度排序,應該在Navigation Feed或OPDS Catalog Root才使用
http://opds-spec.org/shelf Acquisition Feed 使用者書櫃,例如購買之刊物
http://opds-spec.org/subscriptions Acquisition Feed 使用者訂閱
http://opds-spec.org/facet Acquisition Feed 過濾或排序條件,必須在Navigation Feed才使用
http://opds-spec.org/crawlable Acquisition Feed 提供被抓取的位址,應該要是Complete Acquisition Feed

當以上Relation與[RFC 5988]中都無合適時,<entry>之<title>或<link>之title應該用來描述此關連。

2.2 OPDS Catalog Entry Document

OPDS Catalog Entry Document又分為Partial和Complete Catalog Entry兩種,

指向OPDS Catalog Entry Document的連結type應該為application/atom+xml;profile=opds-catalog;kind=acquisition

2.2-1 Partial Catalog Entry

Partial Catalog Entry只提供最重要的資訊以減少資料量,黑字部分繼承Atom定義,紅字部分為OPDS定義,Partial Catalog Entry定義如下:

Element必要多筆資料型態說明
<author> Δ O atomPersonConstruct 作者,<entry>必須要包含至少一個<author>,除非之下的<source>或者此<feed>有包含<author>
<category> X O <category> 分類,如果有的話應該包含此資訊
<content> X X <content> 內容,<content>和<summary>應該至少包含其中一個,同時具有時不應該提供<contnet>
<contributor> X O atomPersonConstruct 貢獻者,如果有的話應該包含此資訊
<id> O X 純文字 唯一識別ID,可以有相同ID的<entry>,但更新時間必須不同,表示不同版本
<link> X O <link>(OPDS擴充) 連結,如果沒有<content>就必須包含一個連結(ref="alternate"),且多個具有ref="alternate"的連結,type和hreflang的屬性不能都相同
必須包含一個連結指向Complete Catalog Entry(ref="alternate")
必須包含一個獲取連結(ref為Acquisition Relations定義)
<published> X X atomDateConstruct 發布時間
<rights> X X atomTextConstruct 版權資訊,如果有的話應該包含此資訊
<source> X X <source> 資料來源,當資料來源是從別的<feed>拷貝過來時,應用此Element提供原始<feed>資訊
<summary> Δ X atomTextConstruct純文字

摘要,如果<content>是外部資源(具有src屬性)或內容是Base64編碼時,必須要有<summary>
必須是type="text",<content>和<summary>應該至少包含其中一個,同時具有時應該只提供<summary>
不應該和<content>或<title>重複

<title> O X atomTextConstruct 標題
<updated> O X atomDateConstruct 最後更新時間

Acquisition Feed中的Entry應該要是Partial Catalog Entry。

2.2-2 Complete Catalog Entry

Complete Catalog Entry應該要提供完整的資訊,黑字部分繼承Atom定義,紅字部分為OPDS定義,Complete Catalog Entry定義如下:

Element必要多筆資料型態說明
<author> Δ O atomPersonConstruct 作者,<entry>必須要包含至少一個<author>,除非之下的<source>或者此<feed>有包含<author>
<category> X O <category> 分類
<content> X X <content> 內容,<content>和<summary>應該至少包含其中一個
<contributor> X O atomPersonConstruct 貢獻者
<id> O X 純文字 唯一識別ID,可以有相同ID的<entry>,但更新時間必須不同,表示不同版本
<link> X O <link>(OPDS擴充) 連結,如果沒有<content>就必須包含一個連結(ref="alternate"),且多個具有ref="alternate"的連結,type和hreflang的屬性不能都相同
必須包含一個獲取連結(ref為Acquisition Relations定義)
<published> X X atomDateConstruct 發布時間
<rights> X X atomTextConstruct 版權資訊
<source> X X <source> 資料來源,當資料來源是從別的<feed>拷貝過來時,應用此Element提供原始<feed>資訊
<summary> Δ X atomTextConstruct純文字

摘要,如果<content>是外部資源(具有src屬性)或內容是Base64編碼時,必須要有<summary>
必須是type="text",<content>和<summary>應該至少包含其中一個
不應該和<content>或<title>重複

<title> O X atomTextConstruct 標題
<updated> O X atomDateConstruct 最後更新時間

2.2-3 Entry Relations

rel說明
http://opds-spec.org/acquisition 一般的獲取刊物
http://opds-spec.org/acquisition/open-access 無條件獲取刊物
http://opds-spec.org/acquisition/borrow 借閱刊物
http://opds-spec.org/acquisition/buy 購買刊物
http://opds-spec.org/acquisition/sample 試閱刊物
http://opds-spec.org/acquisition/subscribe 訂閱刊物
http://opds-spec.org/image 刊物圖片(封面)
http://opds-spec.org/image/thumbnail 刊物圖片之縮圖

圖片Relation之type應該是image/gif、image/jpeg或image/png

2.3 元素

2.3-1 <link>

<link>描述連結,黑字部分繼承Atom定義,紅字部分為OPDS定義,<link>定義如下:

Attribute必要說明
href O IRI
rel X 關聯類型,無設定時,預設為alternate。格式應符合isegment-nz-nc或IRI且不包含空白。另外,關聯定義可參考RFC 5988,在Atom中特別定義其中5個項目:
alternate: 目前資源別種顯示方式(例如搭配hreflang為其他語言版本)
related: 相關資源
self: 目前資源
enclosure: 相關資源,但資料內容較大
via: 資源由何處提供
http://opds-spec.org/facet: 只使用在<Feed>之<link>
type X 類型
rel如果是http://opds-spec.org/acquisition開頭的,必須要有此屬性
hreflang X 語系
title X 標題
length X 連結內容的大小,當rel為enclosure時,應該要有此屬性
opds:facetGroup X 過濾或排序條件的群組,當rel為http://opds-spec.org/facet時,必須要有此屬性
opds:activeFacet X 是否為正在使用的過濾或排序條件,當rel為http://opds-spec.org/facet時且為使用時,必須為true,否則不顯示此屬性,一個群組中一次只能有一個是使用狀態

Atom原定義<link>不包含Element,而在OPDS之定義了以下Element:

Element必要多筆說明
<opds:price> X O

價格
當<link>之rel為http://opds-spec.org/acquisition/buy,必須要有此Element
當<link>之rel為,http://opds-spec.org/acquisition/borrowhttp://opds-spec.org/acquisition/samplehttp://opds-spec.org/acquisition/subscribe時,可以有此Element
如果為Partial Catalog Entry且有此資訊時應該包含此Element

<opds:indirectAcquisition> X O 次要的Media Type

2.3-2 <opds:price>

<opds:price>描述<link>的價格,<opds:price>之中定義了以下屬性

Attribute必要說明
currencycode O 貨幣單位,定義於[ISO4217]

Element內容必須是價格數字

2.3-3 <opds:indirectAcquisition>

<opds:indirectAcquisition>描述<link>的次要Media Type,例如用於購買之<link>中,type可能是text/html之購買網頁,可用此屬性描述購買完成後刊物的Media Type,<opds:indirectAcquisition>之中定義了以下屬性

Attribute必要說明
type O Media type

<opds:indirectAcquisition>定義了以下Element:

Element必要多筆說明
<opds:indirectAcquisition> X O 次要的Media Type

2.4 延展性

OPDS與Atom規範一致,允許自訂未定義Element和Attribute,解析或整合者要遵守以下規則:

  1. 遇到未定義標記時,不能中斷處理與視為error。
  2. 轉遞OPDS時,應該保留未定義標記。

2.5 搜索

OPDS Catalog可以透過[OpenSearch]規範,提供搜索功能,搜索連結必須為rel="search"與type="application/opensearchdescription+xml"。

搜索結果之OPDS Catalog Entry Document可以包含[OpenSearch]定義元素,例如:<opensearch:totalResults>或<opensearch:itemsPerPage>

延伸閱讀

Atom Feed

OpenSearch

文章標籤
創作者介紹

小殘的程式光廊

emn178 發表在 痞客邦 PIXNET 留言(0) 人氣()