ID

ID (データ型)

[22] HTML/XML/DOM においては色々な方法で識別子 (identifier) (ID) を指定できます。

属性値と要素内容

[30] 属性値は通常属性値として指定されます。 DTD などによる識別子の指定は、 識別子として使われる属性値が与えられる属性を指定することによって行われます。

[31] 例外的に、 XML Schema では単純型属性要素は同じように扱われることが多く、 識別子 (xs:ID) である要素も定義できるようになっています。 ただしこれは現実にはなかったことにされる傾向にありますwww

応用

[32] 識別子は、素片識別子の値として、 getElementById による検索の値として、 ID選択子の値として、 IDREF 属性値としてなどいろいろな場面で文書中の特定の要素を識別するために用いられます。

id (MathML)

[13] MathML における id は、識別子であって文書中で固有のものです。 XML 1.0 5eNAME の構文に従っていなければなりません。

[14] なぜ ID の定義を参照していないのでしょうね。 DTD 依存になってしまうのを避けるためでしょうか。

[15] ところで XML に「NAME」はないですね。SGML 時代を惜しんでいるのかw、それとも Name の間違いなのか。

歴史

ID 型 (SGML)

ID 型 (HTML 4)

[5] まあ HTML 4ID 型といっても、 SGMLID 型そのものなのでありますが・・・。

HTML 4 の SGML宣言の状況下では、

なのです。 <IW:HTML4:"types.html#type-id"> 参照。

大文字・小文字の区別はありません。 SGML の規則により小文字は大文字に変換されます。

[7] あ、1文字目は ALPHA でないと。

噂のID問題も。

ID 型 (XML)

[8] XHTML m12n抽象モジュール定義における属性型 ID は、 XML 1.0 の定義によっています。

仕様書:

[1] XML名前空間を使って ID 型属性を複数使えるか。例えば XHTML の要素に RDF:ID 属性をつけることが出来るか。

[2] >>1 SGML でも XML でも、1つの要素に2つ以上の ID 属性は禁じている。よって出来ない。名前空間が違っても同じこと。

[3] XPath では、妥当でない文書も扱うわけですが、 そういう文書では同じ識別子を持った要素が複数あることもあります。 そういうときに、 文書順で2番目以降の要素は識別子を持たないこととして処理します。 <http://www.w3.org/TR/xpath#unique-id>

[4] >>3、簡単なことのように思えますが、 path/to/element1/id()path/to/element2/id() が同じ値を返しちゃいけないわけです。 だけど常識的に path/to/element1/@id-attrpath/to/element2/@id-attr は同じ値じゃないといけないでしょ? だから構造木を作ったときにでも重複をチェックして、 それを覚えとかないと。 もちろん木を操作して別の要素に識別子を与えたり、 最初の要素の識別子を削除したりしたら、 それに同期してどの属性が有効かも変更しないといけないんです。

  • [6] >>4 みたいな面倒なことするよりは、 id 関数とか識別子を使う時に木を走査する方が安上がりですね。

[9] >>3-6 元々 XPath のデータ・モデルや XML情報集合的には、 XML 実体の構文解析・妥当性検証の時点で識別子要素の対応の一覧表を作って、 あとから識別子が必要になったらその表を引くことを想定しているのだと思われ。 (名無しさん [sage])

[10] How should the problem of identifying ID semantics in XML languages be addressed in the absence of a DTD? <http://www.w3.org/2001/tag/doc/xmlIDsemantics-32.html>

[16] W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes ( ( 版)) <http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/#ID>

[17] W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures ( ( 版)) <http://www.w3.org/TR/2012/REC-xmlschema11-1-20120405/#sec-cvc-id>

[18] XBL 2.0 ( ( 版)) <http://dev.w3.org/2006/xbl2/Overview.html#general-rules>

[19] XQuery and XPath Data Model 3.0 ( ( 版)) <http://www.w3.org/TR/xpath-datamodel-3/#const-infoset-attribute>

Web Forms 2.0

[20] XPath and XQuery Functions and Operators 3.0 ( ( 版)) <http://www.w3.org/TR/xpath-functions-3/#func-element-with-id> [11] Web Forms 2.0反復フォーム制御子モデルでは反復される要素id 属性に「[」や「]」のような XML 的に非妥当文字を使っていますが、 非妥当であることに対する抵抗の声が大きく、名前文字だけで表現する方法も後に追加されました。

識別子の重複

[33] SGML: SGMLID 型の属性の値は文書内で固有でなければなりません。 この制約が満たされない SGML 文書は、型妥当ではありません (適合SGML文書ではありません)

仕様書:

[34] XML: XMLID 型の属性の値は文書内で固有でなければなりません (妥当性制約)。 この制約が満たされない XML 文書は、 整形式かもしれませんが妥当ではありません。

仕様書:

[35] HTML: HTMLid 属性と name 属性による識別子は、 同じ名前空間を共有し、文書内で固有でなければなりません。 重複は違法です。

仕様書:

[36] XML 情報集合: XML情報集合属性情報項目参照特性は、 属性型IDREFIDREFS であっても同じ識別子の複数の要素があれば、 値を持ちません。

仕様書:

[37] DOM: DOMgetElementById は、同じ識別子の複数の要素がある時の結果は未定義です。

仕様書:

[38] XPath 1.0: XPath 1.0 のデータ模型では、 重複する固有識別子は文書順で後の方を無視することになっています。 関数 id() はその固有識別子に基づき判断します。

仕様書:

[39] DOM水準3 XPath では、 XPath 1.0関数である id()DOMメソッドである getElementById とで同じ結果が得られなければならないと規定しています。

仕様書:

[40] DOM3 では getElementById の結果は未定義となっていますから、 XPath 1.0 の規定通りになるとは限りません。現実には、また後の DOM Standard によれば最初の要素が返されるので、両者の返すものは一致します。

[41] XPointer: XPointer速記指示子では、 文書順で最初に一致したものが採用されます。 element () scheme も同じ定義を採用しています。

仕様書:

[42] CSS: CSS の ID 選択子マーク付け言語における文書内の固有な識別子で使われることが想定されています。 重複に関する規定はありません。

仕様書:

[43] Re: Selectors API: Multiple elements with the same ID from Boris Zbarsky on 2007-01-28 (public-webapi@w3.org from January 2007) (Boris Zbarsky (bzbarsky@mit.edu) 著, 版) <http://lists.w3.org/Archives/Public/public-webapi/2007Jan/0158>

DOM Standard

[21] Handle setting id to the empty string https://www.w3.org/Bugs/Public/sho... · 967552c · whatwg/dom ( ( 版)) <https://github.com/whatwg/dom/commit/967552c81e1912a6ace72050a3a68a257c1ff672>

[44] RFC 3340 - The Application Exchange Core ( 版) <https://tools.ietf.org/html/rfc3340>

<!ELEMENT data-content

ANY>

<!ATTLIST Name ID #REQUIRED>