モジュール java.xml
パッケージ org.w3c.dom

インタフェースAttr

すべてのスーパー・インタフェース:
Node

public interface Attr extends Node
Attrインタフェースは、Elementオブジェクトの1つの属性を表現します。 通常、属性の許容値は文書に関連付けられたスキーマに定義されています。

AttrオブジェクトはNodeインタフェースを継承しますが、実際には記述している要素の子ノードではないため、DOMでは文書ツリーの一部とは見なされません。 したがって、Nodeの属性であるparentNodepreviousSiblingおよびnextSiblingAttrオブジェクトの値はnullになります。 DOMでは、属性は、それらが関連付けられている要素から独立した存在ではなく、こうした要素のプロパティであると見なされます。このような観点から、属性の機能は、所定の型を持つすべての要素に関連付けられたデフォルト属性として、一層効率的に実装されることになります。 さらに、AttrノードはDocumentFragmentの直接の子にはなれません。 ただし、これらをDocumentFragment内に含まれるElementノードに関連付けることはできます。 つまり、ユーザーやDOMの実装者は、AttrノードがNodeインタフェースを継承するその他のオブジェクトといくつかの共通点は持っているが、これらはまた、まったく別物でもあることに注意する必要があります。

次に、属性の実効値の特定方法について説明します。属性になんらかの値が明示的に割り当てられていれば、その値が属性の実効値になります。属性の宣言が存在し、そこにデフォルト値が含まれていれば、そのデフォルト値が属性の実効値になります。それ以外の場合、構造モデルにおける現在の要素には属性が存在しません(明示的に追加する必要がある)。 Attrインスタンス上のNode.nodeValue属性はまた、属性の値の文字列バージョンを取得するためにも使用できます。

この属性の値がインスタンス文書内で明示的に割り当てられていないが、この文書に関連付けられたスキーマにデフォルト値が設定されている場合には、specifiedfalseに設定された属性ノードが作成されます。 スキーマにデフォルト値が定義されている属性ノードを削除すると、specifiedfalseに設定された、デフォルト値の新しい属性ノードが生成されます。 Document.normalizeDocument()を呼び出しているときに検証が行われた場合には、specifiedfalseである属性ノードは、スキーマに設定されているデフォルト属性値に基づいて再計算されます。 この属性のデフォルト値がスキーマに設定されていない場合には、属性ノードは破棄されます。

XMLでは、属性の値にエンティティ参照を含めることができる場合、Attrノードの子ノードはTextノードまたはEntityReferenceノードのどちらかになる可能性があります(これらが使用されている場合は、EntityReferenceの説明を参照)。

DOM Coreでは、文書に関連付けられているDTDまたはスキーマで属性値がトークン型などの型として宣言されている場合でも、すべての属性値が文字列として表現されます。

DOM実装がどのように属性値を正規化するかは、使用しているスキーマを実装がどの程度認識しているかによって異なります。 一般に、Attrノードのvalue属性とnodeValue属性は、パーサーから渡された正規化された値を最初に返します。 また、Document.normalizeDocument()が呼び出されたあとも同様です(正しいオプションが設定されている場合)。 ただし、変異が実行されたあとは、その変異が文字列値の直接の設定またはAttrの子ノードの変更によって実行されたかには関係なく、実行されない可能性があります。 これは特に、文字参照が行われている場合(文字参照がDOMで表されず、属性値の正規化に影響する場合)に当てはまります。 一方、属性値が変更されたときに使用しているスキーマを実装が認識していて、その属性値がCDATA以外の場合には、実装は再度属性値を正規化します。 特に、SVG DOM実装(文字列とは異なる内部形式で属性値を格納する)などの特殊なDOM実装の場合には、正規化を再度実行します。

次の表は、元の文書に含まれる属性値(解析された属性)、DOMに表示された値、および直列化された値の関係についての例を示しています。

元の値、正規化された値、直列化された値の例
解析された属性値 初期のAttr.value 直列化された属性値
文字参照
"x²=5"
"x²=5"
"x²=5"
組込み文字エンティティ
"y<6"
"y<6"
"y&lt;6"
リテラル改行文字
 "x=5&#10;y=6"
"x=5 y=6"
"x=5&#10;y=6"
正規化された改行文字
"x=5
 y=6"
"x=5 y=6"
"x=5 y=6"
リテラル改行文字を含むエンティティe
 <!ENTITY e '...&#10;...'> [...]> "x=5&e;y=6"
実装とロード・オプションに応じて異なる 実装とロード/保存オプションに応じて異なる

Document Object Model (DOM) Level 3 Core Specification」も参照してください。

導入されたバージョン:
1.4、DOMレベル2