モジュール 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」も参照してください。

  • メソッドの詳細

    • getName

      String getName()
      この属性の名前を返します。 Node.localNamenull以外の場合、この属性は修飾名です。
    • getSpecified

      boolean getSpecified()
      インスタンス文書内でこの属性の値が明示的に設定されている場合はTrue、それ以外の場合はfalse アプリケーションがこの属性ノードの値を変更した場合は(最終的にデフォルト値と同じ値になった場合でも)、trueに設定されます。 実装では、ほかのスキーマからのデフォルト値で属性が同様に処理される可能性がありますが、アプリケーションはDocument.normalizeDocument()を使用してこの情報を更新する必要があります。
    • getValue

      String getValue()
      取得時、属性値は文字列として返されます。 文字および一般的なエンティティ参照はこれらの値に置き換えられます。 ElementインタフェースのgetAttributeメソッドも参照してください。
      設定時、解析対象外の文字列コンテンツを持つTextノードを作成します。つまり、XMLプロセッサによってマークアップとして認識されるすべての文字は、リテラル・テキストとして取り扱われます。
      Element.setAttribute()メソッドも参照してください。
      SVG 1.1」実装などの一部の特殊な実装では、変更後にも自動的に正規化が行われることがあります。このような場合には、取得時の値が設定時の値と一致しないことがあります。
    • setValue

      void setValue(String value) throws DOMException
      取得時、属性値は文字列として返されます。 文字および一般的なエンティティ参照はこれらの値に置き換えられます。 ElementインタフェースのgetAttributeメソッドも参照してください。
      設定時、解析対象外の文字列コンテンツを持つTextノードを作成します。つまり、XMLプロセッサによってマークアップとして認識されるすべての文字は、リテラル・テキストとして取り扱われます。
      Element.setAttribute()メソッドも参照してください。
      SVG 1.1」実装などの一部の特殊な実装では、変更後にも自動的に正規化が行われることがあります。このような場合には、取得時の値が設定時の値と一致しないことがあります。
      例外:
      DOMException - NO_MODIFICATION_ALLOWED_ERR: ノードが読取り専用の場合に発生します。
    • getOwnerElement

      Element getOwnerElement()
      この属性の接続先であるElementノード。この属性が使用されていない場合はnull
      導入されたバージョン:
      1.4、DOMレベル2
    • getSchemaTypeInfo

      TypeInfo getSchemaTypeInfo()
      この属性に関連付けられている型情報。 この属性に含まれている型情報は、文書のロードやDocument.normalizeDocument()の呼出しのあとも正しいことが保証されますが、ノードが移動された場合はschemaTypeInfoが信頼できない可能性があります。
      導入されたバージョン:
      1.5、DOMレベル3
    • isId

      boolean isId()
      この属性が型IDとして認識されている(所有者要素の識別子を含んでいる)かどうかを返します。 これが型IDであり、その値が一意である場合は、Document.getElementByIdメソッドを使用してこの属性のownerElementを取得できます。 この実装は、いくつかの方法を使用して、属性ノードが識別子を含んでいると認識されているかどうかを判定します。
      • 文書をロードしているときまたはDocument.normalizeDocument()を呼び出しているときに、XMLスキーマ「XML Schema Part 1」を使用して検証が行われた場合には、スキーマ検証後情報セット・コントリビューション(PSVIコントリビューション)値を使用して、この属性が「XPointer」のスキーマ決定ID定義を使用するスキーマ決定ID属性であるかどうかを判断します。
      • 文書をロードしているときまたはDocument.normalizeDocument()を呼び出しているときに、DTDを使用して検証が行われた場合には、情報セット「型定義」の値を使用して、この属性が「XPointer」のDTD決定ID定義を使用するDTD決定ID属性であるかどうかを判断します。
      • Element.setIdAttribute()Element.setIdAttributeNS()、またはElement.setIdAttributeNode()メソッドが使用されている場合には、ユーザー決定ID属性であると判断します。

        ノート: XPointerフレームワーク(「XPointer」のセクション3.2を参照)では、DOMユーザー決定ID属性がXPointer外部決定ID定義の一部と見なされます。

      • この仕様の範囲に含まれないメカニズムを使用して、外部決定ID属性であると判断します。 たとえば、XMLスキーマとDTD以外のスキーマ言語を使用します。

      Document.normalizeDocument()を呼び出しているときに検証が行われた場合には、すべてのユーザー決定ID属性がリセットされ、使用しているスキーマに基づいてすべての属性ノードID情報が再評価されます。
      この結果、Attr.schemaTypeInfo属性にID型が含まれる場合には、isIdは常にtrueを返します。
      導入されたバージョン:
      1.5、DOMレベル3