[1] XML [RUBYB[指示子言語] [Pointer Language]]。

[9]
XPointer は、 [[XML]] 文書の一部を指し示すための包括的な仕組みと、幾つかの具体的な指示方法の仕様の総称です。

XPointer は主として [[URI参照]]の[[素片識別子]]として用いることを想定していますが、それに限ったものではありません。
[WEAK[もっとも、 XPointer が使えそうな場所の多くでは [[XPath]] が使われているので、あまり出番はありません。]]

[43] 色々な仕組みが規定、提案されましたが、結局は [[HTML]] の[[素片識別子]]に相当する[[速記指示子]]のみが広く実装されています。
目玉機能だったはずの [CODE(XPointerScheme)@en[[[xpointer()]]]] は、
完成前に開発が凍結されています。
[[XPointer]] は事実上失敗に終わったと言えます。

* 仕様書など

- [2] ''W3C XML Pointer, XML Base and XML Linking'' <http://www.w3.org/XML/Linking>
- [3] ''XPointer Framework'' <http://www.w3.org/TR/xptr-framework/>
- [4] ''XPointer xmlns() Scheme'' <http://www.w3.org/TR/xptr-xmlns/>
- [5] ''XPointer element() Scheme'' <http://www.w3.org/TR/2003/REC-xptr-element-20030325/>
- [6] ''XPointer element() Scheme'' <http://www.w3.org/TR/xptr-element/>
- [7] ''Errata in XPointer'' <http://www.w3.org/2003/03/REC-xptr-20030325-errata>
- [8] >>7 は >>3-6 全部の errata。

[11]
[CITE[XPointer Disposition of Comments]] <http://www.w3.org/2000/06/xptr-comments-20000607.html>

> This document details the responses made by the XML Linking Working Group to issues raised during the Last Call (beginning 6 December 1999 and ending 27 December 1999) review of XPointer .
([[名無しさん]])

[12]
[CITE[W3C XML Linking Working Group and Interest Group]] <http://www.w3.org/XML/2000/12/LinkingIssueList.html>
([[名無しさん]])

[13]
[CITE[XPointer Candidate Recommendation Disposition of Comments]] <http://www.w3.org/XML/2000/10/xptr-LC2-comments.html>

* 構文

[FIG(short list)[
- [22] [[速記指示子]]
- [23] [[XPointer scheme]]
- [[指示子]]
- [[EscapedData]]
]FIG]

* API

[33] [[XPointer]] 仕様自体は構文とその解釈を定義しているだけですが、 [[XPointer]]
を扱う実装は [[API]] を定義し、[[スクリプト]]等に提供しています。

詳しくは [[XPointer//API]] の項を参照してください。

* XPointer Framework

[37] [DFN[[[XPointer Framework]]]] は、 [[XPointer]] の全体像、特に [[XPointer scheme]] と[[速記指示子]]の仕組みを定義した
[[XPointer]] の中心的な仕様書です。

[REFS[
- [38] [CITE@en[XPointer Framework]] ([TIME[2003-03-25 23:45:45 +09:00]] 版) <http://www.w3.org/TR/xptr-framework/>
]REFS]

* 歴史

[24] [[XPointer]] は元々 [[XLink]] において [[XML]] [[文書]]中の一部分を識別するための[[指示子言語]]として考案されました。

[25] 当時同様に [[XSL]] における[[変換]] ([[XSLT]]) で [[XML]] [[文書]]中の一部分を識別するための[[式言語]]
([[XSLパターン]]) が検討されていました。

[26] 両者の目的は似通っていたことから、 [[XPointer]] と [[XSLT]] の両者の[[式言語]]が統一され、
[[XPath]] として標準化されました。

[27] 当初の [[XPointer]] 仕様は、現在でいう [[XPath]] に多少独自の[[関数]]を加えたものを
[[URL]] の[[素片識別子]]として使えるといったものでした。

;; [[XSLT]] でも有用な機能は [[XPath]] 本体の[[関数]]となっており、 [[XSLT]] や [[XPointer]]
の一方でのみ有用な機能はそれぞれの追加の[[関数]]になっています。

[28] [[XPointer]] 仕様はほぼ完成したかに見えましたが、複雑過ぎるとの批判はありました。
[[Gecko]] が実装した [[FIXptr]] はこの頃の [[XPointer]] 仕様を簡略化した[[部分集合]]でした。

[29] その後 [[XPointer]] 仕様は大幅に変更され、仕様書も Framework と数個の (新たに導入された概念である)
[[scheme]] の規定に分割されました。新仕様は旧仕様とは互換性がなく、旧仕様に相当する部分は
[CODE(XPointerScheme)@en[[[xpointer()]]]] [[scheme]] となりました。 Framework
と [CODE(XPointerScheme)@en[[[element()]]]] [[scheme]]、
[CODE(XPointerScheme)@en[[[xmlns()]]]] [[scheme]] はその後 [[W3C]] [[勧告]]となりましたが、
[CODE(XPointerSchmee)@en[[[xpointer()]]]] [[scheme]] は完成しないまま放棄されました。

[30] [[XPointer]] は [[XML]] の共通の[[素片識別子]]と思われてきましたが、このような経緯からか、
[[XML媒体型]]を定義する [[RFC 3023]] も「[[XPointer]] を使うことになるだろうが、
現時点では未定義とする」といった旨の記述があるのみで、 [[XML]] の[[素片識別子]]は正式には未定義のまま放置され続けています。

[31] [[XPointer scheme]] の名前は [[QName]] となっています。[[名前空間URL]] がない [[NCName]]
の [[scheme]] 名については、 [[W3C]] の管理する登録簿が用意され、各種 [[W3C]]
仕様や [[TEI]] などによって定義された [[XPointer scheme]] が登録されました。

;; 現在も登録は受け付けられていますが、申請はほとんどありません。

[42] [[XPointer Framework]] [[W3C勧告]]は [[in-place modification]] により
次のような[[段落]]が追加されています。

> '''Document Status Update 2011-10-24''': This paragraph is informative. On 18 November 2005 an XPointer Schemes Registry was approved for public use under the terms of an XPointer Scheme Name Registry Policy.

[32] 実際上 [[XPointer]] は [[Web]] 上でほとんど用いられておらず、 [[Gecko]]
からも削除が検討されています。 [[SVG]] は [[XPointer]] のごくごく小さな一部分を
[[SVG素片識別子]]の一種として認めてきましたが、それすら実装されなかったとして、
[[SVG 1.1]] の Errata で削除されています。

** XML Core WG

[39] [[XML Linking Working Group]] の解散後は、 [[XPointer]] の3つの[[W3C勧告]]は
[[XML Core WG]] の担当となっているようです [SRC[>>40]]。

[REFS[
- [40] [CITE@en-US[XML Core Working Group]] ([TIME[2013-07-23 16:38:09 +09:00]] 版) <http://www.w3.org/XML/2013/xml-core-charter.html>
]REFS]

[41] [CODE(XPointerScheme)@en[[[xpointer()]]]] [[XPointer scheme]] は担当不在で放棄された状態のようです。

* 実装

** Gecko

[17]
[CITE[Bug 32832 &#8211; Implement XPointer]] ([CODE[2007-07-27 23:59:37 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=32832>

[15]
[CITE[Bug 388704 &#8211; drop XPointer support]] ([CODE[2007-07-27 23:43:59 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=388704>

[16]
[CITE@ja[Taken SPC : Mozilla が XPointer のサポートを取りやめ?]] ([CODE[2007-07-27 23:45:13 +09:00]] 版) <http://taken.s101.xrea.com/blog/article.php?id=775>
([[名無しさん]] [WEAK[2007-07-27 14:47:24 +00:00]])

** Mozilla 拡張機能

[18]
[CITE@en[mozdev.org - xpointerlib: index]] ([CODE[2007-07-28 00:00:31 +09:00]] 版) <http://xpointerlib.mozdev.org/>

** JavaScript

[20]
[CITE[XPointer UserJS]] ([TIME[2007-11-07 00:47:59 +09:00]] 版) <http://student.kuleuven.be/~s0159198/xpointer/>
([[名無しさん]])

[21]
[[xpointer.js]]: [[XPointer]] の [[JavaScript]] による実装。

** その他

[19]
[CITE[Welcome To CodeDread 1.1]] ([CODE[2007-12-17 07:16:50 +09:00]] 版) <http://www.codedread.com/fxpointer/>

* テスト・ケース

[10]
''XML fragment identifier test'' <http://www.w3.org/2004/07/xml-fragid-test/>

XHTML + SVG で XPointer がどう機能するかという test page。
([[名無しさん]] [WEAK[2004-08-01 05:26:55 +00:00]])

* 関連

[34] [[ISO/IEC 21000-17]] は、 [[MPEG]] 用に [[XPointer]] もどきを規定しています。

[45] 
[[媒体素片]]は、同じく [[W3C]] で後の時代に[[標準化]]された、
特定の [[MIME型]]に限定されない[[素片識別子]]構文です。
[[媒体素片]]は [[XPointer]] やそれと互換性のある構文を採用せず、
[[Web開発者]]にとってより親しみ深い [[URL query]] の構文を採用しており、
[[XPointer]] とは併用できなくなっています。
(もし[[媒体素片]]がもっと前の時代に開発されていたか、
[[XML]] と [[XPointer]] がもっと成功していれば、 [[XPointer]] 構文になっていたでしょうが。)

* メモ

[14]
[CITE[XPointer considered incomprehensible from Bjoern Hoehrmann on 2006-09-01 (www-xml-linking-comments@w3.org from July to September 2006)]] <http://lists.w3.org/Archives/Public/www-xml-linking-comments/2006JulSep/0005>
([[名無しさん]] [WEAK[2006-09-02 02:21:33 +00:00]])


[35] [CITE@en[RFC 6931 - Additional XML Security Uniform Resource Identifiers (URIs)]]
( ([TIME[2013-07-28 08:18:30 +09:00]] 版))
<http://tools.ietf.org/html/rfc6931#section-2.5.1>

[36] [CITE[Bug 17491 – ER: Implement XPointer Support]]
( ([TIME[2013-11-10 02:34:51 +09:00]] 版))
<https://bugs.webkit.org/show_bug.cgi?id=17491>

[44] [CITE@en[glro/xptr]]
([TIME[2015-10-26 23:33:43 +09:00]] 版)
<https://github.com/glro/xptr>

[46] [CITE[ほら貝:文字コード]], [TIME[2016-08-02T01:43:50.000Z]], [TIME[2023-07-29T02:42:24.116Z]] <http://www.horagai.com/www/moji/int/sat.htm>


>師 『大正大蔵経』の場合、三段組で活字が詰まっていて、一ページが普通の本の四~五ページ分ありますから、行番号まであった方が便利なんです。実際、欧米の研究者は、引用する際、行数まで明記しますし。また、テキストを行単位にID化しておくと、XMLで提供されることになるXPointerやXLinkといった仕組によって、引用箇所に直接リンクをはることが可能になります。
> ウィッテアンさんが提唱している仏典のポインタ表記の[ASIS[統一化案][リンク]]では、『大正大蔵経』のテキストを「T09N0262.9a.3」(『大正大蔵経』第9巻・通し番号262・9頁上段・3行目)という具合にID化しておき、引用箇所を例えば
>
[PRE(code)[
    経曰。<QUOTE ID="T09N0262.9a.3">無一不成仏。</QUOTE>
]PRE]
>
というようにマークアップすることで、引用元のテキストに直接飛ぶことができます。


[47] リンク先:


- [48] [CITE[Minimal Markup and More]], [TIME[2023-07-29T02:44:05.000Z]], [TIME[2000-12-16T08:07:40.125Z]] <https://web.archive.org/web/20001216080700/http://www.gwdg.de/~cwitter/info/ebti96ho.htm>

[SEE[ [[TEI]] ]]

[49] [CODE[application/x-moin-document]]