[21] [DFN[[RUBYB[素片識別子] [fragment identifier]]]] [WEAK[([DFN[フラグメント識別子]], [DFN[断片識別子]]などとも。)]] は、 [[URI参照]]の一部分であり、 ある[[資源]]の中の一部分や一つの[[表現]]を[[識別]]します。 [1] > :[RUBYB[素片識別子] [Fragment identifier]]: [CODE(HTMLa)[[[href]]]] 属性値の [CODE(URI)[#]] に続く部分。[SRC[ISO‐HTML 4.9]] [20] 仕様書: - [[RFC 1630]] ([[URI]] 1[SUP[st]]) - [[RFC 1738]] ([[URL]] 2[SUP[nd]]) - [[RFC 1808]] ([[相対URL]]) - [[RFC 2396]] ([[URI]] 3[SUP[rd]]) - [[RFC 3986]] ([[URI]] 4[SUP[th]]) - [[RFC 3987]] ([[IRI]]) - [[ISO‐HTML]] -- 4.9 - [WebArch] [CITE[Architecture of the World Wide Web, Volume One]] -- [CSECTION[2.6. Fragment Identifiers]] -- [CSECTION[3.2.1. Representation types and fragment identifier semantics]] -- [CSECTION[3.2.2. Fragment identifiers and content negotiation]] --[CSECTION[4.5.8. Fragment identifiers in XML] ] [[#comment]] * URI と素片識別子 [22] [[RFC 2396]] は素片識別子は [[URI]] の一部ではなく、 [[絶対URI]], [[相対URI]], 素片識別子をあわせたものを [[URI参照]]と呼んでいました。 新しい [[RFC 3986]] は、素片識別子を URI の一部としています。 非公式には、以前から素片識別子を URI の一部としている人も多くいました。 (単なる無知からそうしている人もいれば、そう定義するべきと考えてそうしている人もいました。) [[#comment]] * 素片識別子と URI scheme [23] URI の素片識別子と scheme 以外の部分の構文は、 [WEAK[(URI 全体の規定の範囲内で)]] 使用している [[URI scheme]] によって規定されています。 古くは素片識別子も URI scheme に依存すると考えられたこともあり、 古い URI scheme の中には素片識別子の扱いについて触れているものもあります。 しかし、現在では素片識別子は URI によって識別される[[資源]]の性質に依存するものであり、 '''URI scheme とは独立'''であると考えられています。 [[#comment]] * 素片識別子と媒体型 [24] URI の仕様書によれば、素片識別子の構文はその URI 参照による[[取出し]]行為 [WEAK[([[RDF]] のように仮想的な[Q[取出し]]行為も含まれます。)]] の結果得られる[[資源]]の[[媒体型]]に依存するとされています。 [Q[取出し]]が行われなければ、素片識別子の構文と解釈はできず、 実質無制約になります [SRC[WebArch 3.2.1]]。 [25] URI 参照によって識別される資源は[[内容折衝]]の対象になっているかもしれません。 そうでなくても、一つの URI 参照に対応する資源を取出す手段 [WEAK[(仮想的なものかもしれません。)]] が複数あれば、 それぞれによって違うものが取出されるかもしれません。 取出された資源の媒体型が異なると、同じ素片識別子であっても異なるものを指し得ます。 あるいは、一方に対しては構文や意味が定義されていなかったり正しくなかったりすることも起こり得ます。 実際に識別されるものが意味的に異なっている場合は、 鯖の設定の誤りと考えられます。構文や意味が未定義であるのは、 すべての媒体型が同じ機能を提供していないのですから仕方が無いことです。 [SRC[WebArch 3.2.2]] このような問題をできるだけ避けるために、 各媒体型で素片識別子の構文や意味論は大きく変えてしまわないことが好ましいと考えられています。 [29] 素片識別子を媒体型から独立したものにしようという提案もありますが、 今のところ広く受け入れられてはいません。 - [CITE[A generic fragment identifier syntax]] , [[#comment]] * 動的表現との関係 [26] 例えばある XML 文書 で、 はじめ [SAMP(XML)[id]] という識別子は定義されていなかったとします。 この時、 URI 参照 は指すものがありません。 ところが、 Web ブラウザにおける何らかの処理の過程においてこの文書のある要素の [CODE(XML)[[[ID]]]] が [SAMP(XML)[id]] と設定されたとします。すると URI 参照 はその要素を識別するようになります。 このような状況は、便利なこともありますし、混乱を招くこともあります。 [27] ある XML 文書を [[XSLT]] [[スタイル・シート]]によって変換したとします。 変換した結果には、元の文書に存在していた [CODE(XML)[ID]] が (それに対応する要素と共に) 残っているかもしれませんし、 残っていないかもしれません。ある[[原始要素]]に対応する[[結果要素]]の識別子は元とは違った識別子になっているかもしれません。 ある識別子に対応するのは原始要素に対応する結果要素とは違う (関係のない別の) 要素かもしれません。元の文書とは無関係に、 スタイル・シートが新しい識別子を導入するかもしれません。 このような状況は、便利なこともありますし、混乱を招くこともあります。 [[#comment]] * 素片識別子の色々 - [CODE(SGML)[[[ID]]]] 系 -- [7] [CODE(HTMLa)[[[name]]]] 属性や [CODE(HTMLa)[[[id]]]] 属性を参照 --- [CODE(MIME)[[[text/html]]]]: [[RFC 1866]], [[XHTML 1.0]], [[RFC 2854]] -- [14] [CODE(XML)[[[ID]]]] 属性を参照 --- [34] [CODE(MIME)[[[application/xhtml+xml]]]]: [[RFC 3236]] ---- [[RFC 3023]] を参照しています。 ---- しかし、 RFC 3023 は実質無規定なので、新版になるまでは [CODE(XML)[[[ID]]]] 属性に拠ると規定しています。 ---[36] [CITE[XBL - XML Binding Language]] --- [CODE(MIME)[[[application/smil]]]] ---- [CITE[The SMIL 2.0 Linking Modules]] ---[15] [CODE(MIME)[[[text/vnd.wap.wml]]]] ---- [CODE(XMLe)[[[deck]]]] 名を表します。 ---- -- [13] [[RDF URI参照]]方式 --- [CODE(MIME)[[[application/rdf+xml]]]] ---- [[RFC 3870]], [CITE[Resource Description Framework (RDF): Concepts and Abstract Syntax]] [CSECTION[7. Fragment Identifiers]] - [[XPointer]] 系 -- [6] [[RFC 3023]] 方式 --- RFC 3023 は [[XPointer]] 原案に言及していますが、 素片識別子について実際には何も規定していません。 --- [CODE(MIME)[[[application/xml]]]]: [[RFC 3023]] --- [CODE(MIME)[[[text/xml]]]]: RFC 3023 ---[33] [CODE(MIME)[[[application/soap+xml]]]]: [[RFC 3902]] ([[RFC 3023]] を参照。) --- [35] [CODE(MIME)[[[application/xop+xml]]]]: [IANAREG] ([[RFC 3023]] を参照。) --- [CODE(MIME)[[[application/ccxml+xml]]]] ---- [CITE[Voice Browser Call Control: CCXML Version 1.0]] ---- RFC 3023 を参照。 -- [[SVG]] 素片識別子 --- [29] [[SVG]] は [[XPointer]] と互換な簡単な素片識別子の構文を規定しています。 --- [30] [CODE(MIME)[[[image/svg+xml]]]] ---- [CITE[Linking - SVG 1.0]] ---- [CITE[Linking - SVG 1.1]] -- [[WebCGM]] 方式 --- [4] [[WebCGM]] ([CODE(MIME)[[[image/cgm]]; [[version]]=4; [[profileid]]=WebCGM]]) は [[XPointer]] に似ている (もののやや異なる) 素片識別子を使っています。 --- ''WebCGM Intelligent Content: 3.1.1 URI Fragment specification'' -- [19] [[FIXptr]] --- [CODE(MIME)[[[application/xml]]]], [CODE(MIME)[[[text/xml]]]]: [[Gecko]] などが実装。 --- XPointer の超簡略版。ただし XPointer とは非互換。 - [5] [CODE(MIME)[[[text/vnd.wap.wmlscript]]]] -- 関数呼出しを記述できます。 -- - [9] [CODE(ABNF)[[[param]]]] 系 -- [10] [CODE(MIME)[[[text/plain]]]]: [[I-D]] --- [CODE(ABNF)[param]] 型構文で文章の行や文字列を指定できます。 -- [15] [[CAB]] ファイル --- [CODE(ABNF)[param]] 型構文で [[ActiveX Control]] の版を指定できます。 -- [31] [CODE(MIME)[[[application/pdf]]]] --- [CODE(ABNF)[param]] 型構文で命令を指定できます。 - [11] その他 ad hoc 系 -- [12] [CODE(MIME)[[[text/plain]]]] --- 行数などを指定。 --- [[w3m]] などが実装。 [[#comment]] * 素片識別子の拡張 [8] 公式な URI の仕様の素片識別子には様々な問題点があり、 それを改善しようとする提案もいくつかあります。 しかし、公式に採用されたり、 広く受け入れられたりするに至ったものはまだありません。 [2] [[GNOME]] [ABBR[VFS] [仮想ファイル・システム]] URI とやら (''Writing Modules'' ) は、素片識別子 (のようなもの) を複数つけることができます。 (例: [SAMP(URI)[ftp://username:password@host.net/path/to/file.tar.gz#gzip#tar/path/to/hello.c]]) [28] [[WinIE]] は [CODE(CSS)[[[behavior]]]] で [CODE(URI)[#]] が2つ入った文字列の指定を受け付けます。 ただし、素片識別子の拡張というよりはむしろ [Q[URI もどき]]です。 ([[名無しさん]] [sage]) [[#comment]] * 実装 [3] 文書内に存在しない素片識別子つきの URI 参照を表示させようとすると、文書の最初を表示する WWW ブラウザ [WEAK[(例: [[WinIE]] や [[Mozilla]] ([[Gecko]]))]] と、 最後を表示するブラウザ [WEAK[(例: [[Classic Mozilla]])]] があります。 [[#comment]] * 他との関係 [16] [CODE(URI)[[[jar]]:]] [[URI scheme]] は、 [[ZIP]] 形式の圧縮ファイルの中のファイルを識別できます。 本来、[Q[ある資源の中に含まれる資源]]ですから、 素片識別子を使って表現するのが適当にも思えますが、 [CODE(URI)[jar:]] は[Q[資源の中の資源]]まで一つの URI 本体だけで識別できます。 (この方式を推進する人は、[Q[ある資源の中の資源の中の資源]] のような入れ子の場合を素片識別子は綺麗に表現できないことを問題視しています。) [32] >>16 他に、素片識別子を使った表現の方法を採ると[[相対参照]]が使えなくなってしまう問題もあります。 ([[名無しさん]]) [[#comment]] ** 素片識別子だけを使うプロトコル要素 [17] [[SMIL]] の [CODE(XMLa)[[[fragment]]]] 属性は、 [[HTML]] の [CODE(HTMLa)[[[name]]]] 属性や [CODE(HTMLa)[[[id]]]] 属性や、 [[XML]] の素片識別子を使ってある資源の一部を識別するために使うことができます。 [18] [[XInclude]] の [CODE(XMLa)[[[xpointer]]]] 属性は、 [[XPointer]] を使って XML の一部を識別するために使うことができます。 [[#comment]] * メモ