[1] [[リンク型]] [DFN[[CODE(HTML)[[[prev]]]]]] は、前のページを表します。

[2] [[リンク型]] [DFN[[CODE(HTML)[[[next]]]]]] は、次のページを表します。

* Atom 集成部分リスト

[9] [[AtomPub]] の[[集成部分リスト]]では、[[リンク関係]]として
[CODE(XML)@en[[[previous]]]], [CODE(XML)@en[[[next]]]] が使えます。 [SRC[>>11]]

;; [10] [[HTML]] [[リンク型]]とは違って [CODE(HTML)@en[[[prev]]]] ではありません。

[REFS[
- [11] [CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2012-04-14 23:10:59 +09:00]] 版) <http://tools.ietf.org/html/rfc5023#section-10.1>
]REFS]

* 歴史

** Atom 0.3

[6] [[Atom 0.3]] [SRC[>>5]] では、 [[Atom API]] [SRC[>>4]] で規定されていた [CODE(XML)@en[[[prev]]]],
[CODE(XML)@en[[[next]]]] の2つの値を [CODE(XMLa)@en[[[rel]]]] [[属性]]で使うことができました。

[3] 
:[DFN[[CODE(XML)@en[[[next]]]]]]:
[[エントリー]]群の[[線形]]な列における次の [VAR[N]] 個の[[エントリー]]が含まれる
[[Atom]] [[フィード]]を指します。
:[DFN[[CODE(XML)@en[[[prev]]]]]]:
[[エントリー]]群の[[線形]]な列における前の [VAR[N]] 個の[[エントリー]]が含まれる
[[Atom]] [[フィード]]を指します。

[REFS[
- [5] [CITE[The Atom Syndication Format 0.3 (PRE-DRAFT)]] ([TIME[2006-12-22 17:03:44 +09:00]] 版) <http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html#rfc.section.3.4.1>
- [4] [CITE[The AtomAPI]] ([TIME[2012-04-15 03:35:24 +09:00]] 版) <http://bitworking.org/projects/atom/draft-gregorio-09.html#rfc.section.5.4.1>
]REFS]

[12] [CITE@en[RFC 5988 - Web Linking]]
( ([TIME[2012-03-22 09:19:11 +09:00]] 版))
<http://tools.ietf.org/html/rfc5988#page-14>

[7] [CITE@ja[ページ フリップによる閲覧 (Windows)]]
([TIME[2015-05-07 17:15:59 +09:00]] 版)
<https://msdn.microsoft.com/library/jj883726(v=vs.85).aspx#Identifyingflipaheadtargets>

[8] [CITE@ja[プリレンダリングとプリフェッチのサポート (Windows)]]
([TIME[2015-05-07 17:16:21 +09:00]] 版)
<https://msdn.microsoft.com/library/dn265039(v=vs.85).aspx>

[FIG(quote)[
[FIGCAPTION[
[13] [CITE@ja[走行中の高級車から出火し全焼、小田原厚木道路(TBS系(JNN)) - Yahoo!ニュース]]
([TIME[2015-12-31 14:44:22 +09:00]] 版)
<http://headlines.yahoo.co.jp/videonews/jnn?a=20151231-00000008-jnn-soci>
]FIGCAPTION]

> 
> <link rel="prev" href="http://headlines.yahoo.co.jp/videonews/jnn?a=20151231-00000009-jnn-soci" />
> <link rel="next" href="http://headlines.yahoo.co.jp/videonews/jnn?a=20151231-00000004-jnn-soci" />

]FIG]


[FIG(quote)[
[FIGCAPTION[
[14] [CITE[はてなブックマークAtomAPI - Hatena Developer Center]]
([TIME[2016-03-21 10:41:40 +09:00]] 版)
<http://developer.hatena.ne.jp/ja/documents/bookmark/apis/atom>
]FIGCAPTION]

> 
>   <link rel="next" type="application/x.atom+xml" href="http://b.hatena.ne.jp/sample/atomfeed?of=20"/>

]FIG]


[FIG(quote)[
[FIGCAPTION[
[15] [CITE[はてなブックマークフィード仕様 - Hatena Developer Center]]
([TIME[2016-03-21 10:54:30 +09:00]] 版)
<http://developer.hatena.ne.jp/ja/documents/bookmark/misc/feed>
]FIGCAPTION]

> Atomフィードでは、link要素により前後ページのURLを取得することも可能です。
> <link rel="prev" type="application/atom+xml" href="http://b.hatena.ne.jp/jkondo/atomfeed?of=0" /> 
> <link rel="next" type="application/atom+xml" href="http://b.hatena.ne.jp/jkondo/atomfeed?of=40" />

]FIG]


[FIG(quote)[
[FIGCAPTION[
[16] [CITE[はてなブックマークフィード仕様 - Hatena Developer Center]]
([TIME[2016-03-21 10:54:32 +09:00]] 版)
<http://developer.hatena.ne.jp/ja/documents/bookmark/misc/feed>
]FIGCAPTION]

> Atomフィードでは、link要素により前後ページのURLを取得することも可能です。
> <link rel="prev" type="application/atom+xml" href="http://b.hatena.ne.jp/jkondo/atomfeed?of=0" /> 
> <link rel="next" type="application/atom+xml" href="http://b.hatena.ne.jp/jkondo/atomfeed?of=40" />

]FIG]


[FIG(quote)[
[FIGCAPTION[
[17] [CITE[Qiita API v2ドキュメント - Qiita:Developer]]
( ([TIME[2016-05-11 14:35:18 +09:00]]))
<http://qiita.com/api/v2/docs>
]FIGCAPTION]

> Link: <http://qiita.com/api/v2/users?page=1>; rel="first",
>       <http://qiita.com/api/v2/users?page=1>; rel="prev",
>       <http://qiita.com/api/v2/users?page=3>; rel="next",
>       <http://qiita.com/api/v2/users?page=6>; rel="last"

]FIG]


[18] [CITE@en[Treat <link rel="next"> as a general resource hint]]
( ([[domenic]]著, [TIME[2016-05-19 16:38:13 +09:00]]))
<https://github.com/whatwg/html/commit/7ff5b096d423bf5750463957aed69680368ed99e>

[FIG(quote)[
[FIGCAPTION[
-[19] [CITE[WikiHub APIのページネーションの実装 - Programming]]
([TIME[2017-02-11 14:43:08 +09:00]])
<https://programming.wikihub.io/@r7kamura/20160510164824>
-- [24] 消滅確認 [TIME[2025-07-04T05:02:16.600Z]]
-- [25] 
[CITE[WikiHub APIのページネーションの実装 - Programming]], [TIME[2025-07-04T05:02:00.000Z]], [TIME[2019-05-24T19:09:52.492Z]] <https://web.archive.org/web/20190524190936/https://programming.wikihub.io/@r7kamura/20160510164824>
]FIGCAPTION]

> IANAのLink Relation Typesに登録されているものを見ると、previousもprevの同義語として使えることに実装してこの記事を書くときに後から気付いた。previousをprevに略すという判断があると、ではなぜ他の文字列は同様の文脈において略す判断をしないのか (例えばfirstはなぜfirstより略さないのか) という曖昧性やコード上に記述されていない何らかの関係性が発生するので、previousが使えるならpreviousを使いたい。

]FIG]

[23] 
>>19 このような考え方は適切ではない。
[[リンク型]]や[[リンク関係型]]は[[プログラマー]]が自由に選べる変数ではなく[[プロトコル要素]]。
このような判断を下せるのはプロトコル開発者であって、プロトコル利用者であるプログラム開発者ではない。
プログラム開発者にとってはただの[[不透明]]な文字列なのである。


[28] 
さて参照されている [[IANA登録簿]] [SRC[>>26]] を開いてみると、
[CITE[HTML 4.01]] が参照されている。この時点でこの登録簿が長年まともにメンテナンスされていないことが察せられるが [WEAK[(これが [[IETF]] / [[IANA]] の標準的な品質なのであるからこんなことでいちいち驚いてはいけない)]]、それはさておき
[CITE[HTML 4.01]] を参照すると、

> 
:[B[Prev]]:    Refers to the previous document in an ordered series of documents. Some user agents also support the synonym "Previous".


とある [SRC[>>27]]。 つまり正式には [CODE[Prev]] であり、 [CODE[Previous]]
も実装しているもの'''も'''ある、と書いているに過ぎない。この重要情報を欠落させている
[[IANA登録簿]]にも非はあるが、 [CODE[Prev]] を避けてわざわざ [CODE[Previous]] 
を使うべき理由はない。


[30] 
ところで [CITE[HTML 4.01]] は既に廃止されて久しい。 >>19 の執筆時点では「事実上廃止」
状態だったが、今や名実ともに廃止されている。このようなとき [[IANA登録簿]]の
[CODE[previous]] が現行 [CITE[HTML Standard]] を指すと解釈するべきかどうか明確ではない。
(なぜか [CODE[prev]] は今は現行 [CITE[HTML Standard]] を指している。)
ともかく
[CITE[HTML Standard]] を参照すると、 [CODE[prev]] の項に

>
[B[Synonyms]]: For historical reasons, user agents must also treat the keyword "[CODE[previous]]" like the [CODE[prev]] keyword.

とある。 [SRC[>>29]] これと [CITE[HTML Standard]] の他の関連規定によると、
実装は [CODE[prev]] も [CODE[previous]] も実装しなければならないが、
[[著者]]は [CODE[prev]] のみを使わなければならない。


[31] 
「[CITE[HTML 4.01]] も [CITE[HTML Standard]] も [[HTML]] の規定に過ぎず、
そこにしかない規定は [[HTML]] にだけ適用される。
[[IANA登録簿]]が定める[[リンク関係型]]では [CODE[previous]]
も普通に使って良い」という考え方もないではない。
[[IETF]] が[[リンク関係型]]なる概念を不適切に規定しているので、
このような仕様の解釈もあり得る ([SEE[ [[リンク関係型]] ]])。
しかし、本事例に限って言えば、
長年安定して優先的に実利用されている [CODE[prev]] を退けてわざわざ
[CODE[previous]] を選ぶべき理由はなく、
標準仕様を使うという意識のもとで使うべきではないだろう。
(標準仕様との整合性はどうでもいい、優先度は低い、という考え方なら勝手に使えば良いが、
それならこのような重箱の隅のような仕様書の不整合に依拠しなくてよい。)



[REFS[

- [26] 
[CITE[Link Relations]], [TIME[2025-06-17T19:05:25.000Z]], [TIME[2025-07-04T05:03:23.621Z]] <https://www.iana.org/assignments/link-relations/link-relations.xhtml>
- [27] 
[CITE@en[Basic HTML data types]], [TIME[2018-04-05T15:13:08.000Z]], [TIME[2025-07-04T05:03:36.945Z]] <https://www.w3.org/TR/html401/types.html#type-links>
- [29] 
[CITE@en-US-x-hixie[HTML Standard]], [TIME[2025-07-02T01:51:59.000Z]], [TIME[2025-07-04T05:07:29.096Z]] <https://html.spec.whatwg.org/#link-type-prev>



]REFS]





[20] [CITE@en[Official Google Webmaster Central Blog: Video about pagination with rel=“next” and rel=“prev”]]
([TIME[2017-06-19 03:43:55 +09:00]])
<https://webmasters.googleblog.com/2012/03/video-about-pagination-with-relnext-and.html>


[21] [CITE@ja-jp[Getting Started: 大量のデータを取得する (ページング) | SORACOM API 利用ガイド | ソラコムユーザーサイト - SORACOM Users]], [TIME[2025-07-03T05:05:32.000Z]], [TIME[2025-07-04T04:57:11.975Z]] <https://users.soracom.io/ja-jp/tools/api/paging/>


[22] >>21 [[paging]] に [CODE[Link:]] の [CODE[rel=next]], [CODE[rel=prev]]
