[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[(仮想的なものかもしれません。)]] が複数あれば、 それぞれによって違うものが取出されるかもしれません。 動的表現 (>>26) をも一つの URI 参照に対応する[[資源]]の[[表現]]の一種と考えることもできます。 取出された資源の媒体型が異なると、同じ素片識別子であっても異なるものを指し得ます。 あるいは、一方に対しては構文や意味が定義されていなかったり正しくなかったりすることも起こり得ます。 実際に識別されるものが意味的に異なっている場合は、 鯖の設定の誤りと考えられます。構文や意味が未定義であるのは、 すべての媒体型が同じ機能を提供していないのですから仕方が無いことです。 [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]] * 内部参照に使う URI 参照としての素片識別子 [50] 同じ[[文書]]内で参照を行うためには [[SGML]] の [CODE(SGML)[[[IDREF]]]] のように専用の機構を用意しているものもありますが、 [[URI参照]]や [[IRI参照]]を採用して外部への参照と兼用していることもよくあります。 その場合、当然[[素片識別子]]が使われることになります。 素片識別子の構文と意味は、 その参照先の[[資源]]の[[表現]]の[[媒体型]]によります (>>24)。ですから、 そのような使い方をする文書形式では[[素片識別子]]の構文と意味が陽に定義されている必要があります。 [51] 特に [[XML]] 系の文書形式の仕様で、 [CODE(XML)[[[ID]]]] 属性を参照先として使っている場合には自明なためか明確に規定されることがあまりありません。 [52] 複数の語彙を組合わせる時にはとりわけ注意が必要です。 素片識別子の意味を組合せて使う仕様の仕様書で明確に規定しておかないと、 個々の仕様で解釈が割れていたり、 曖昧なものが含まれていたりする時に困ったことになります。 [53] 例: [[XML事象]]は [CODE(XMLa)[[[handler]]]] 属性などで [[URI参照]]を使っていますが、 それが[[同文書参照]]である時の意味を特に規定していません。 意味的には [CODE(XML)[[[IDREF]]]] として扱われることが期待されていますが、 [[XML事象]]は[[ホスト言語]]と組合せて使うものですから、 その組合せの[[プロファイル]]でこれと矛盾しないように[[素片識別子]]の規定を行わなければなりません。 (その例: [[SVG 1.2]]) [CITE[XML Events]] [[#comment]] * 素片識別子の色々 - [CODE(SGML)[[[ID]]]] 系 -- [37] [CODE(HTMLa)[[[name]]]] 属性を参照 --- [CODE(MIME)[[[text/html]]]]: [[RFC 1866]] --- [CODE(MIME)[[[text/x-hdml]]]] ---- [CITE[3 Language Elements]] -- [7] [CODE(HTMLa)[[[name]]]] 属性や [CODE(HTMLa)[[[id]]]] 属性を参照 --- [CODE(MIME)[[[text/html]]]]: ---- [54] [[HTML 4]], [[XHTML 1.0]], [[RFC 2854]] ---- [55] [[ISO-HTML]] -- [14] [CODE(XML)[[[ID]]]] 属性を参照 --- [47] [[XHTML 1.0]] ---- [[適合利用者エージェント]]は [[XHTML]] [[文書]]の [CODE(XML)[[[ID]]]] 属性だけを[[素片識別子]]に使わなければなりません。 ---- ---- [CSECTION[4.10. The elements with 'id' and 'name' attributes]] (参考) ---- [CSECTION[C.8. Fragment Identifiers]] (参考) --- [48] [[XHTML m12n]] ---- [CSECTION[3.5. XHTML Family User Agent Conformance]] --- [34] [CODE(MIME)[[[application/xhtml+xml]]]]: [[RFC 3236]] ---- [[RFC 3023]] を参照しています。 ---- しかし、 RFC 3023 は実質無規定なので、新版になるまでは [CODE(XML)[[[ID]]]] 属性に拠ると規定しています。 --- [36] [CITE[XBL - XML Binding Language]] --- [73] [[SMIL]] ([CODE(MIME)@en[[[application/smil]]]]) ---- [74] [CITE@en[Synchronized Multimedia Integration Language]] ([[SMIL 1.0]]) ---- [75] [CITE@en[The SMIL 2.0 Linking Modules]] --- [15] [CODE(MIME)[[[text/vnd.wap.wml]]]] ---- [CODE(XMLe)[[[deck]]]] 名を表します。 ---- --- [60] [[XForms]] ---- [CITE@en[Document Structure]] ----- [CODE(XMLe)[[[model]]]] 要素の [CODE(XMLa)[[[schema]]]] 属性で同じ文書内の [CODE(XML)[[[ID]]]] を参照できます。 --- [42] [CODE(MIME)[[[application/srgs+xml]]]] ([[SRGS]] [[XML]] 形) ---- [CODE(XMLe)[[[rule]]]] 名を表します。 ---- [CITE[Speech Recognition Grammar Specification Version 1.0]] ---- 以前媒体型登録のための [[I-D]] が出ていましたが、 その後音沙汰なし。 (2005年3月現在) 素片識別子については [[RFC 3023]] と同じとか書いてありましたが・・・。 --- [56] [[XTD]] ---- [CITE[tradic論理フォーマット]] ---- [CITE[tradic物理フォーマット: XMLバインディング]] --- [76] [[EMMA]] ([CODE(MIME)@en[[[application/emma+xml]]]]) ---- [CITE[EMMA: Extensible MultiModal Annotation markup language]] ---- [[媒体型]]登録のための雛形が附属書 B にありますが、 [[素片識別子]]については言及がありません。 ---- 仕様書中の例には[[同文書参照]]が頻出しますが、 同じ文書内の [CODE(XML)@en[[[ID]]]] 型[[属性]]の値を使っているようです。 -- [67] [[X3D]] 系 ([[視点]]の名前を指定) --- [66] [[VRML]] ([CODE(MIME)@en[[[model/vrml]]]]) ---- ---- --- [68] [[X3D]] ---- [CITE@en[Extensible 3D (X3D), ISO/IEC 19775-1:200x, Part 1 -- 23 Navigation component]] ---- [CITE@en[Extensible 3D (X3D), ISO/IEC 19775-1:200x, Part 1 -- 9 Networking component]] -- [41] [CODE(MIME)[[[application/srgs]]]] ([[SRGS]] [[ABNF]] 形) --- XML 形の [CODE(XML)[ID]] に相当する規則名を指します。 --- [CITE[Speech Recognition Grammar Specification Version 1.0]] --- 以前媒体型の IANA 登録のための [[I-D]] が出ていて、 素片識別子は [[RFC 3023]] と同じなどと頓珍漢なことが書かれていました。 登録手続きはその後音沙汰なし。 (2005年3月現在) -- [42] [[TTZ]] ([[T-Time]] 文書) --- [[TTZ]] [[ファイル]]内の[[名前]]。 - [13] [[RDF URI参照]]方式 -- [[RDF/XML]] ([CODE(MIME)[[[application/rdf+xml]]]]) --- [[RFC 3870]], [CITE@en[Resource Description Framework (RDF): Concepts and Abstract Syntax]] [CSECTION@en[7. Fragment Identifiers]] - [[XPointer]] 系 -- [61] [[XLink]] の [CODE(XMLa)[[QN[xlink:[[href]]] [[[http://www.w3.org/1999/xlink]]]]]] [[属性]]の値が [[XML]] を指す場合は[[素片識別子]]は [[XPointer]] です。 --- --- [[XLink]] 仕様書のこの部分は規定ですが、参照されている [[XPointer]] 仕様書は古い [[WD]] ([[勧告]]とは非互換) で、 Informative Reference になっています。 --- [[XLink 1.1]] [[WD]] でも [[XLink 1.0]] [[勧告]]と同じ古い [[WD]] が Informative に参照されています。 --- [80] [[XBRL]] ---- [[XBRL]] は [[XLink 1.0]] を使用しており、 [[XLink 1.0]] の [[XPointer]] を使うという規定を引用しつつ、 [[XBRL]] [[要素]]を参照するための[[素片識別子]]について、 [[XPointer]] [[勧告]]に基づき[[速記識別子]]と [CODE(XPointerScheme)@en[[[element]]()]] が使えると規定しています。 ---- [[JIS X 7206]]:2005 ([[XBRL 2.1]]) 3.5.4 -- [44] [[MathML]] では [[XPointer]] を使うことができます。 --- [CITE[Combining Presentation and Content Markup]] -- [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]]]] ---- [46] [CITE[XML-binary Optimized Packaging]] ([[RFC 3023]] を参照。) ---- [45] [IANAREG] ([[RFC 3023]] を参照。) --- [57] [[CCXML 1.0]] ([CODE(MIME)[[[application/ccxml+xml]]]]) ---- [CITE[Voice Browser Call Control: CCXML Version 1.0]] ---- [[RFC 3023]] を参照。 --- [64] [[DocBook]] ([CODE(MIME)@en[[[application/docbook+xml]]]]) ---- [CITE@en[The DocBook Document Type]] ----- [[RFC 3023]] を参照。 ---[81] [[WS-CDL]] ([CODE(MIME)@en[[[application/cdl+xml]]]]) ---- [CITE@en[Web Services Choreography Description Language 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]] -- [49] [[XML署名]], [[XML暗号化]] ([CODE(MIME)[[[application/xenc+xml]]]]) --- [CITE[XML-Signature Syntax and Processing]] --- [[XML暗号化]] ([CODE(MIME)[[[application/xenc+xml]]]]) の仕様書やその中の登録雛形には素片識別子に関する明確な規定がありませんが、 [[XML署名]]の仕様の処理モデルに従うようです。 --- というか、外部から文書を参照するためのものではなく、処理中の [[XML署名]]や [[XML暗号化]]の文書内にある [[URI参照]]の[[素片識別子]]の解釈について規定されています。 --- [CITE[Decryption Transform for XML Signature]] -- [38] [[XFrames]] 素片識別子 --- [39] [[XFrames]] は [[XPointer]] と互換な簡単な素片識別子の構文を規定しています。 --- [40] [CITE[XFrames]] -- [69] [[WSDL]] 方式 --- [70] [[WSDL 2.0]] [[XML]] [[直列化]] ([CODE(MIME)@en[[[application/wsdl+xml]]]]) ---- [71] [CITE@en[Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language]] ---- [72] [[RFC 3023]] の定義とこの仕様の附属書の定義のどちらかを使うと定義されています (なんだそりゃ)。附属書で定義されているのは [[XPointer]] の[[プロファイル]]です。 -- [[WebCGM]] 方式 --- [4] [[WebCGM]] ([CODE(MIME)[[[image/cgm]]; [[version]]=4; [[profileid]]=WebCGM]]) は [[XPointer]] に似ている [WEAK[(もののやや異なる)]] 構文の素片識別子を使っています。 --- 初版: [CITE[WebCGM Intelligent Content]] --- 第2版: [CITE[WebCGM Intelligent Content]] -- [19] [[FIXptr]] --- [CODE(MIME)[[[application/xml]]]], [CODE(MIME)[[[text/xml]]]]: [[Gecko]] などが実装。 --- [[XPointer]] の古い案の簡略版。現在の [[XPointer]] とは非互換。 - [5] [CODE(MIME)[[[text/vnd.wap.wmlscript]]]] -- 関数呼出しを記述できます。 -- - [78] [[Java]] -- [CODE(URI)@en[[[java]]:]] [[URI scheme]] (非標準) の実装で、 [CODE(ABNF)@en[[[path]]]] で[[クラス]]を識別し、 素片識別子で[[メソッド]]を識別するものがあります [WEAK[([[Java]] におけるメソッドの識別法 (非 URI) に倣っています)]]。 - [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] 数値系 -- [12] [CODE(MIME)[[[text/plain]]]] --- 行数などを指定。 --- [[w3m]] などが実装。 - [43] [[N-Gram]] -- [[開始記号]]を素片識別子で指定します。 -- [CITE[Stochastic Language Models (n-gram) Specification]] -- [CITE[Speech Recognition Grammar Specification Version 1.0]] - [77] [[LTM]] ([[線形Topic Map記法]]) -- [[話題ID]] を使用します。 -- [CITE[The Linear Topic Map Notation]] - [58] [[P3P]] -- [[P3P 1.0]]: [CITE@en[The Platform for Privacy Preferences 1.0 (P3P1.0) Specification]] -- [[P3P 1.1]]: [CITE@en[The Platform for Privacy Preferences 1.1 (P3P1.1) Specification]] -- [CODE(XMLe)[[[POLICY]]]] [[要素]] [CODE(XMLa)[[[name]]]] [[属性]] ([CODE(XML)[[[ID]]]] 型): [[素片識別子]]として使われます。 --- [[P3P 1.0]] --- [[P3P 1.1]] -- [CODE(XMLe)[[[POLICY-REF]]]] [[要素]] [CODE(XMLa)[[[about]]]] [[属性]]で使う[[素片識別子]]: [CODE(XMLe)[[[POLICY]]]] [[要素]]で [CODE(XMLa)[[[name]]]] [[属性]]が一致するものを指します。 --- [[P3P 1.0]] --- [[P3P 1.1]] -- [CODE(XMLe)[[[DATA]]]] [[要素]] [CODE(XMLa)[[[ref]]]] [[属性]]で使う[[素片識別子]]: [[データ要素]]や[[データ集合]]を指します。 [[要素型名]]を[[親]]から[[子]]に向かって [CODE(char)[.]] で連結したものを使います。 --- [[P3P 1.0]] --- [[P3P 1.1]] -- [CODE(XMLe)[[[DATA-STRUCT]]]], [CODE(XMLe)[[[DATA-DEF]]]] [[要素]] [CODE(XMLa)[[[structref]]]] [[属性]]: [[構造]]を指します。構造の名前 ([CODE(XMLa)[[[name]]]] [[属性]] ([CODE(XML)[[[ID]]]] 型) の [CODE(char)[.]] で階層を区切った文字列) を使います。 指される方の定義が明示的に[[要素]]として存在するとは限りません。 [WEAK[(例えば [SAMP(URI)[#a]] が指すものは [SAMP[a.b]] や [SAMP[a.c]] などによって暗示的に定義され得ます。)]] --- [[P3P 1.0]] - [65] [[DITA]] -- [CITE@en[OASIS Standards and Other Approved Work]] -- [CITE@en[topic]] --- [CODE(XML)@en[[[ID]]]] -- [CITE@en[xref]] --- [CODE(ABNF)[[CODE(XML)@en[[[ID]]]] "/" [CODE(XML)@en[[[ID]]]]]] -- [CITE@en[link]] --- [CODE(XML)@en[[[ID]]]] -- [CITE@en[%id-atts;]] - [CODE(ABNF)[[CODE(XML)@en[[[ID]]]] "/" [CODE(XML)@en[[[ID]]]]]] [59] [CITE@en[XML Schema Datatypes in RDF and OWL]] [[XML Schema]] で定義された[[データ型]]をどういう [[URI]] ([[素片識別子]]) で識別するべきかという議論があります。 [[#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 もどき]]です。 [[#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]] ** 素片識別子の始まり以外の [CODE(char)[#]] [62] [[URI]] の中で使われる [CODE(URI)[#]] が[[素片識別子]]の始まりとして扱われないことがあります (もちろん'''仕様違反'''です)。 - [63] [[Vodafone]] の独自仕様では、 [CODE(URI)[[[tel]]:]] [[URI scheme]] および [CODE(URI)[[[vtel]]:]] [[URI scheme]] で[[電話]]の [CODE(char)[#]] ボタンの意味で生の [CODE(URI)[#]] を使います。 [[#comment]] * メモ [79] [CITE[The Linear Topic Map Notation]] [[LTM]] ([[線形Topic Map記法]]) の [CODE@en[[[BASEURI]]]] [[指令]]は [[RFC 2396]] 的解釈に基づき、 [[素片識別子]]だけの [[URI]] には適用されないことになっています。 ([[名無しさん]])