* [CODE(XML)[ID]] 型 (XML) [8] [[XHTML m12n]] の[[抽象モジュール]]定義における[[属性型]] [DFN[[CODE(XML)[ID]]]] は、 [[XML 1.0]] の定義によっています。 仕様書: - [[Web体系]] -- [CSECTION@en[4.5.6. XML ID semantics]] - [[XHTML m12n]] -- [CSECTION[4.3. Attribute Types]] - [xmlIDSemantics-32] [CSECTION@en[How should the problem of identifying ID semantics in XML languages be addressed in the absence of a DTD?]] [1] [[XML名前空間]]を使って [CODE(SGML)[ID]] 型属性を複数使えるか。例えば [[XHTML]] の要素に [CODE(XML)[[[RDF]]:[[ID]]]] 属性をつけることが出来るか。 [2] >>1 [[SGML]] でも [[XML]] でも、1つの要素に2つ以上の [CODE(SGML)[ID]] 属性は禁じている。よって出来ない。名前空間が違っても同じこと。 [3] [[XPath]] では、[[妥当]]でない文書も扱うわけですが、 そういう文書では同じ識別子を持った要素が複数あることもあります。 そういうときに、 [[文書順]]で2番目以降の要素は識別子を持たないこととして処理します。 [4] >>3、簡単なことのように思えますが、 [SAMP(XPath)[[VAR[path/to/element1]]/id()]] と [SAMP(XPath)[[VAR[path/to/element2]]/id()]] が同じ値を返しちゃいけないわけです。 だけど常識的に [SAMP(XPath)[[VAR[path/to/element1]]/@[VAR[id-attr]]]] と [SAMP(XPath)[[VAR[path/to/element2]]/@[VAR[id-attr]]]] は同じ値じゃないといけないでしょ? だから構造木を作ったときにでも重複をチェックして、 それを覚えとかないと。 もちろん木を操作して別の要素に識別子を与えたり、 最初の要素の識別子を削除したりしたら、 それに同期してどの属性が有効かも変更しないといけないんです。 - [6] >>4 みたいな面倒なことするよりは、 [CODE(XPathf)[[[id]]]] 関数とか識別子を使う時に木を走査する方が安上がりですね。 [9] >>3-6 元々 [[XPath]] のデータ・モデルや [[XML情報集合]]的には、 [[XML]] [[実体]]の構文解析・妥当性検証の時点で[[識別子]]と[[要素]]の対応の一覧表を作って、 あとから[[識別子]]が必要になったらその表を引くことを想定しているのだと思われ。 ([[名無しさん]] [sage]) [10] [CITE[How should the problem of identifying ID semantics in XML languages be addressed in the absence of a DTD?]] [11] [[Web Forms 2.0]] の[[反復フォーム制御子モデル]]では[[反復]]される[[要素]]の [CODE(XMLa)@en[[[id]]]] [[属性]]に「[」や「]」のような [[XML]] 的に[[非妥当]]な[[文字]]を使っていますが、 [[非妥当]]であることに対する抵抗の声が大きく、[[名前文字]]だけで表現する方法も後に追加されました。 ;; [CITE@en-GB-x-Hixie[Web Forms 2.0]] ([TIME[2009-01-05 20:07:15 +09:00]] 版) * ID 型 (SGML) @@ * ID 型 (HTML 4) [5] まあ [[HTML 4]] の [CODE(SGML)[ID]] 型といっても、 [[SGML]] の [CODE(SGML)[ID]] 型そのものなのでありますが・・・。 HTML 4 の [[SGML宣言]]の状況下では、 - [CODE(ABNF)[[DFN[ID]] := [[ALPHA]] / [[DIGIT]] / "-" / "_" / "." / ":"]] なのです。 参照。 大文字・小文字の区別はありません。 SGML の規則により小文字は大文字に変換されます。 [7] あ、1文字目は [CODE(ABNF)[ALPHA]] でないと。 [[噂のID問題]]も。 * [CODE[id]] (MathML) [13] [[MathML]] における [DFN[[CODE[[[id]]]]]] は、[[識別子]]であって[[文書]]中で固有のものです。 [[XML 1.0 5e]] の [CODE(XML)@en[[[NAME]]]] の構文に従っていなければなりません。 ;; [12] [CITE[MathML Fundamentals]] ([TIME[2010-10-21 05:51:46 +09:00]] 版) [14] なぜ [CODE(XML)@en[[[ID]]]] の定義を参照していないのでしょうね。 [[DTD]] 依存になってしまうのを避けるためでしょうか。 [15] ところで [[XML]] に「[CODE(XML)@en[[[NAME]]]]」はないですね。[[SGML]] 時代を惜しんでいるのかw、それとも [CODE(EBNF)@en[[[Name]]]] の間違いなのか。 * メモ