第4章: 基本データ型とインターフェース

4.1. 定義

初期値

属性やプロパティの初期値は、その属性やプロパティが指定されていない場合、または無効な値が指定された場合に使用される値です。 この値はレンダリング、アニメーション値の計算、DOMインターフェース経由で属性やプロパティにアクセスする際に使用されます。

無効な値
スタイルシートまたは提示属性プロパティに対して指定された無効な値とは、そのプロパティ値の文法で許可されていない値、または文法で許可されているが本文で却下されている値です。無効な値を持つCSS宣言は無視されます。詳細は宣言とプロパティ([CSS2]、4.1.8節)を参照してください。

4.2. 属性の構文

この仕様では、属性は属性定義テーブルで定義されます。例は以下の通りです:

名前 初期値 アニメーション可能
exampleattr <length> | none none yes

値の列には属性の構文の説明が記載されています。属性の構文を記述する方法は6通りあります:

  1. CSS値定義構文 [css-values] を使用する。 この表記は、ほとんどの属性の構文定義に使われており、デフォルトです。
  2. EBNF記号への参照(この仕様や他仕様で定義、[xml])。 外部定義の場合は値の列に[EBNF]と記載されます。
  3. ABNF記号への参照(他仕様で定義、[rfc5234])。 値の列に[ABNF]と記載されます。
  4. URL標準 [URL]で定義されたURLとして。 値の列に[URL]と記載されます。
  5. HTML現行標準 [HTML]で定義された型として。 値の列に[HTML]と記載されます。
  6. 属性定義テーブルの下に本文で記述される場合(値の列に"(see below)"と記載)。
SVG 2要件: 提示属性値の大文字小文字の区別を緩和することを検討。
決議: プロパティ値を大文字小文字を区別しないようにします。
目的: 提示属性構文のパースを対応するCSSプロパティのパースと整合させるため。
担当: Cameron (ACTION-3276)
ステータス: 完了

提示属性がCSS値定義構文で定義されている場合のパースは、以下の通りです:

  1. value を属性の値とする。
  2. grammar を属性定義テーブルの値列に記載された文法とする。
  3. grammar内のすべての<length>を [<length> | <number>]に置換する。
  4. grammar内のすべての<length-percentage>を [<length-percentage> | <number>]に置換する。
  5. grammar内のすべての<angle>を [<angle> | <number>]に置換する。
  6. valueをgrammarでパースした結果を返す。

<number>記号の挿入により、提示属性で単位なしの長さや角度が使えるようになり、対応するプロパティ値では許可されません。

すべての提示属性は対応するCSSプロパティを参照して定義されるため、CSS値定義構文で定義されています。

CSS値定義構文で定義された他の属性は、属性値を属性定義テーブル記載文法でパースすることで処理されます。

この方法により、CSSコメントやエスケープを属性値でも使用できます。例えば、'10\px/**/''10px'として、rect要素の‘x’提示属性でパースされます。

URLとして定義された属性は、URLパーサで属性値をinput、文書のURLをbaseとして呼び出してパースします。[URL]

初期値の列には属性の初期値が記載されます。属性が指定CSS値定義構文、ABNFやEBNF文法でパース失敗した場合、またはURL標準や本文によるパースで失敗した場合、指定された初期値が指定されたものとして扱われます。

提示属性の初期値は対応するプロパティの初期値です。提示属性無効な値を指定した場合は初期値が指定されたものとみなされるため、この値は例えばユーザーエージェントスタイルシート等の低優先度スタイルを上書きできます。

例えば、ユーザーエージェントスタイルシートでsvg要素にoverflowプロパティ値hiddenを設定していても、提示属性でoverflow="invalid"を指定するとoverflowvisibleとなり、ユーザーエージェントスタイル値を上書きします。

アニメーション可能の列は、属性がアニメーション要素SVG Animationモジュールで定義)によってアニメーション可能かを示します。

4.2.1. 実数精度

特に明記されていない限り、SVG属性やSVG要素に効果のあるプロパティの数値値は、ホストアーキテクチャがサポートする全ての有限な単精度値を少なくともサポートしなければなりません。

座標系変換などの演算時には、より高精度な浮動小数点での保存や計算を推奨します。これにより精度が向上し、丸め誤差を防げます。

適合SVGビューアは、適合基準に記載の適合クラスに従って数値計算を行う必要があります。

4.2.2. 特定範囲に制限される値の丸め

一部の数値属性・プロパティ値は範囲が制限されています。その他の値はデバイスの能力によって制限されます。特に明記されていない場合、ユーザーエージェントは範囲外エラーの検査をできるだけレンダリング処理の後半まで遅延させなければなりません。これはデバイス制限に特に重要で、複合操作により途中で範囲外値が出ても最終値が範囲内になる場合があるためです。

4.3. SVG DOM概要

適合するSVGビューアSVGインタープリタスクリプト実行をサポートする場合、本仕様を通じて定義されているSVG DOMインターフェースを実装しなければなりません。具体的な要件や依存関係はこの節に記載されています。

SVG 2要件: DOMを改善すること。
決議: SVG 2でSVG DOMを全般的に改善します。
目的: SVG DOMをJava志向から脱却し、著者が使いやすくする。
担当: Cameron (ACTION-3273)
備考: SVG 2 DOM Wiki参照。
SVG 2要件: SVGパスDOM APIの改善。
決議: SVG 2でSVGパスDOM APIを改善します。
目的: SVGPathSegListインターフェースの整理、およびCanvasとAPI共有の可能性。
担当: Cameron(アクションなし)

4.3.1. SVG DOMサポートの依存関係

SVG DOMは Web IDL インターフェースで定義されています。本仕様のすべてのIDL断片は、Web IDL仕様に記載された 適合IDL断片として解釈されなければなりません。[WebIDL]

SVG DOMは多数のDOM仕様の上に構築されています。特に:

4.3.2. 命名規則

SVG DOMはHTMLやDOM標準([HTML]、[DOM])に類似した命名規則に従います。

すべての名前は英単語1個以上を連結した文字列です。プロパティやメソッド名は最初のキーワードが小文字、以降の単語は大文字で始まります。例えば、ファイル作成日などのメタ情報を返すプロパティは "fileDateCreated" となります。

本仕様で定義されるインターフェース名はほぼすべて "SVG" で始まります。SVG名前空間要素のDOM Element オブジェクトを表すインターフェースは SVGElementNameElement 形式で、ElementName はタグ名の先頭大文字です。よって SVGRadialGradientElementradialGradient要素のインターフェースとなります。

この命名規則の例外は SVGSVGElement で、タグ名全体が大文字になります。

4.3.3. SVG DOMの要素

SVG DOMをサポートするSVGソフトウェアは、SVG文書フラグメントで作成されたDOM要素を以下のように拡張しなければなりません:

SVGUnknownElementインターフェースは「リスクあり」です。

‘rect’要素では、SVGRectElementインターフェースが指定されています。つまり、名前空間URIが "http://www.w3.org/2000/svg" かつローカル名が "rect" の Element オブジェクトは必ず SVGRectElementも実装する必要があります。

4.3.4. DOMでのコンテンツ属性の反映

多くのSVG DOMプロパティ(IDL属性)は、対応する要素上のコンテンツ属性またはプロパティを反映します。つまり、コンテンツ属性とIDL属性は同じ基礎データを表します。 例えば、SVGAnimatedLength rySVGRectElement内)は、対応するrect要素のry提示属性を反映します。

反映方法はIDL属性型によって異なります:

この関係はライブであり、属性または反映プロパティが変更された場合は(反映値の同期の規則に従い)値を同期しなければなりません。

属性が文書マークアップで明示的に指定されていなくても、反映オブジェクトはアクセス時に属性の初期値で初期化されます。初期値が(none)の場合は空の初期値の反映で定義されるように初期化されます。この新しく構築されたオブジェクトは、初回変更が行われるまで要素上に属性を生成しません。対応属性への変更は即座にオブジェクトに反映されます。

例えばlineElement.x1.baseVallineElementSVGLineElementのインスタンス)にアクセスし、x1属性が文書で指定されていない場合、返されるSVGLengthオブジェクトは0ユーザー単位を表します。これは属性の初期値が0だからです。

4.3.5. 反映値の同期

反映されたコンテンツ属性の基本値が変更された場合は、反映オブジェクトを同期しなければならず、値変更直後に以下の手順を実行します:

  1. 反映オブジェクトがリストインターフェースオブジェクトの場合は、リストインターフェースオブジェクトの同期の手順を実行します。
  2. それ以外の場合は、オブジェクトの値を反映するコンテンツ属性の基本値に更新します(属性が存在しないか無効な場合は初期値を使用)。

    例えば、これによりSVGLengthオブジェクトで更新されます。

反映されたコンテンツ属性を、必要に応じて特定の値で再シリアル化する場合は、以下の手順を実行します:

  1. 特定値が与えられていればvalueをそれとし、なければコンテンツ属性の反映IDL属性の値とします。
  2. valueの型に応じて:
    SVGAnimatedBoolean
    SVGAnimatedNumber
    SVGAnimatedLength
    SVGAnimatedAngle
    SVGAnimatedRect
    SVGAnimatedString
    SVGAnimatedNumberList
    SVGAnimatedLengthList
    SVGAnimatedTransformList
    再シリアル化valueのbaseValメンバーで行います。
    SVGAnimatedEnumeration
    1. numbervalueのbaseValメンバーの値とする。
    2. keywordをコンテンツ属性のnumberに対応するキーワード値とし、numberが0なら空文字列とする。

      つまり、列挙値が"unknown"の時は属性値は空文字列になります。

    3. コンテンツ属性をkeywordに設定する。
    boolean
    valueがtrueならコンテンツ属性を"true"、そうでなければ"false"に設定する。
    float
    double
    コンテンツ属性を、CSS構文で<number>としてパースした場合、実装の実数精度valueに最も近い数値値を返す実装依存文字列に設定する。
    SVGLength
    コンテンツ属性をvaluevalueAsStringメンバー値に設定する。
    SVGAngle
    コンテンツ属性をvaluevalueAsStringメンバー値に設定する。
    DOMRect
    1. componentsを、valueのx, y, width, heightメンバー値のリストとする。
    2. serialized componentsを、各値がCSS構文で<number>としてパースした場合、components内の対応値に最も近い実装依存文字列となるような4つの文字列のリストとする(実装の実数精度考慮)。
    3. コンテンツ属性を、serialized componentsの文字列をU+0020 SPACEで連結した文字列に設定する。
    DOMString
    コンテンツ属性をvalueに設定する。
    SVGNumberList
    SVGLengthList
    SVGPointList
    SVGTransformList
    SVGStringList
    1. elementsvalueの値リストとする。

      値は型に応じてSVGNumberSVGLengthDOMPointSVGTransformオブジェクト、またはDOMString値です。

    2. serialized elementsを、各値の型に応じて文字列化したリストとする:
      SVGNumberオブジェクト
      CSS構文で<number>としてパースした場合、実装の実数精度でvalueのvalueメンバーに最も近い値となる実装依存文字列。
      SVGLengthオブジェクト
      valueのvalueAsStringメンバー値。
      DOMPointオブジェクト
      以下の手順で文字列化:
      1. stringを空文字列とする。
      2. xyをDOMPointのx,y座標とする。
      3. CSS構文で<number>としてパースした場合、xに最も近い実装依存文字列をstringに追加。
      4. stringにU+002C COMMA文字を追加。
      5. CSS構文で<number>としてパースした場合、yに最も近い実装依存文字列をstringに追加。
      6. その文字列がstring
      SVGTransformオブジェクト
      SVGTransformmatrix objectのシリアル化文字列。
      DOMString
      値自体。
    3. コンテンツ属性をserialized elementsの文字列をU+0020 SPACEで連結した文字列に設定する。

4.3.6. 空の初期値の反映

nullまたは空の初期値を反映するSVG DOM属性の初期化時は、本節で定義するデータ型に応じてプロパティを初期化しなければなりません。 これは反映コンテンツ属性に明示値がなく、属性定義テーブルの初期値が(none)の場合のみ発生します。

以下に記載がないインターフェースは、そのインターフェースが含むオブジェクトの値を使って初期化されます。例えば、SVGAnimatedStringは2つのDOMStringメンバーで構成され、DOMRectは複数のdoubleを持ちます。

DOMString
空文字列("")で初期化。
float
long
short
WebIDLで定義される他の数値型
0で初期化。
boolean
falseで初期化。
SVGLength
0ユーザー単位SVG_LENGTHTYPE_NUMBER)で初期化。
SVGLengthList
SVGNumberList
SVGPointList
SVGStringList
SVGTransformList
空リストで初期化。
SVGAngle
単位未指定の0SVG_ANGLETYPE_UNSPECIFIED)で初期化。
SVGZoomAndPan
0SVG_ZOOMANDPAN_UNKNOWN)で初期化。
SVGPreserveAspectRatio
'xMidYMid meet'で初期化。

例えばtextElement.dx.baseValtextElementSVGTextElementのインスタンス)にアクセスし、dx属性が文書で指定されていない場合、返されるSVGLengthListオブジェクトは空になります。

4.3.7. 無効な値

スクリプトが反映DOM属性に対してコンテンツ属性の無効な値(例:非負でなければならない属性に負数、列挙値で範囲外など)を設定した場合、この仕様で別途指定がない限り、設定時に例外はスローされませんが、そのドキュメントフラグメントは技術的にエラー状態となります(エラー処理参照)。

現在多くのブラウザは、範囲外の列挙値や列挙型にUNKNOWN値を明示設定した場合にエラーをスローします。 GitHub上の議論は 列挙IDLに無効値設定時に例外を投げるべきか? を参照。

4.4. SVG要素のDOMインターフェース

4.4.1. SVGElementインターフェース

SVG言語の要素に直接対応するすべてのSVG DOMインターフェース(例えば、path要素用のSVGPathElementインターフェース)は、SVGElementインターフェースから派生します。

CSSOM仕様は SVGElementにstyle IDL属性を追加しているため、style 属性はHTML要素と同様にアクセスできます。

[Exposed=Window]
interface SVGElement : Element {

  [SameObject] readonly attribute SVGAnimatedString className;

  readonly attribute SVGSVGElement? ownerSVGElement;
  readonly attribute SVGElement? viewportElement;
};

SVGElement includes GlobalEventHandlers;
SVGElement includes DocumentAndElementEventHandlers;
SVGElement includes SVGElementInstance;
SVGElement includes HTMLOrSVGElement;

className IDL属性は 反映で、class属性に対応します。

この属性は非推奨であり、将来の仕様で削除される可能性があります。著者はElement.classListの利用を推奨します。

className 属性はSVGElement上で、Element上の同名属性を上書きします(WebIDLの継承規則に従う)。

ownerSVGElement IDL属性は 最も近い祖先のsvg要素を表します。取得時、 最も近い祖先のsvg要素を返し、現在の要素が最外svg要素ならnullを返します。

viewportElement IDL属性は 現在の要素のSVGビューポートを提供する要素を表します。取得時、 最も近いSVGビューポートを確立する祖先要素を返し、現在の要素が最外svg要素ならnullを返します。

4.4.2. SVGGraphicsElementインターフェース

SVG 2要件: マウスイベントが図形の塗りかストロークか判定できること。
決議: SVG 2で要素のストロークか塗りかでマウスイベントを判別しやすくする。
目的: 要素の塗りとストロークのポインタイベントを複製せず区別できるようにするため。
担当: Cameron (ACTION-3279)
ステータス: 完了。

SVGGraphicsElementインターフェースは、主にグループ内で直接グラフィックスを描画するSVG要素を表します。

dictionary SVGBoundingBoxOptions {
  boolean fill = true;
  boolean stroke = false;
  boolean markers = false;
  boolean clipped = false;
};

interface SVGGraphicsElement : SVGElement {
  [SameObject] readonly attribute SVGAnimatedTransformList transform;

  DOMRect getBBox(optional SVGBoundingBoxOptions options);
  DOMMatrix? getCTM();
  DOMMatrix? getScreenCTM();
};

SVGGraphicsElement includes SVGTests;

transform IDL属性は 反映で、計算済みtransformプロパティ値と、 対応する‘transform’提示属性を表します。

getBBoxメソッドは 現在の要素のバウンディングボックスを計算するために使います。getBBox(options)メソッド呼び出し時、バウンディングボックスアルゴリズムが現在の要素で呼ばれ、options辞書引数のfillstrokemarkersclippedメンバーで含める部分を制御します。要素のユーザー座標系を返す座標系として使用し、計算結果を定義する新規DOMRectオブジェクトを返します。

getCTMメソッドは 現在の要素の座標系をSVGビューポートの座標系に変換する行列を取得します。getCTM()呼び出し時は以下手順:

  1. 現在の要素が文書内にない場合はnullを返す。
  2. ctmを現在の要素に応じて決定:
    現在の要素が最外svg要素の場合
    ctmsvgtransformプロパティ含む)座標空間を文書ビューポート座標空間へ変換する行列。行列にはviewBoxpreserveAspectRatio属性、transformプロパティ、currentScalecurrentTranslateプロパティによる変換を含む。
    その他の要素
    ctmは現在の要素(transformプロパティ含む)座標空間を最も近い祖先のビューポート確立要素(同じくtransformプロパティ含む)座標空間へ変換する行列。
  3. 同じ行列を表す新規detachedDOMMatrixオブジェクトを返す。

getScreenCTMメソッドは 現在の要素の座標系をSVG文書フラグメントのSVGビューポート座標系に変換する行列を取得します。getScreenCTM()呼び出し時は以下手順:

  1. 現在の要素が文書内にない場合はnullを返す。
  2. ctmを、現在の要素(transformプロパティ含む)座標空間を文書ビューポート座標空間に変換する行列とする。

    これには以下が含まれる:

  3. 同じ行列を表す新規detachedDOMMatrixオブジェクトを返す。

このメソッドは本来getClientCTMという名前が適切だが、歴史的理由でgetScreenCTMの名前を維持しています。

4.4.3. SVGGeometryElementインターフェース

SVGGeometryElementインターフェースは、描画が同等パスで定義され、塗りやストロークが可能なSVG要素を表します。 パスや基本図形が該当します。

[Exposed=Window]
interface SVGGeometryElement : SVGGraphicsElement {
  [SameObject] readonly attribute SVGAnimatedNumber pathLength;

  boolean isPointInFill(optional DOMPointInit point);
  boolean isPointInStroke(optional DOMPointInit point);
  float getTotalLength();
  DOMPoint getPointAtLength(float distance);
};

isPointInFillメソッドは、 メソッドに渡されたpointが要素座標空間で、その要素のfill-ruleプロパティで示される巻き方向規則で意図されるパス内部にある場合trueを返し、そうでなければfalseを返します。 開いたサブパスは面積計算時は暗黙的に閉じ、実際のサブパスには影響しません。パス上の点もパス内部とみなします。 返り値はfill-rule以外のCSSプロパティには依存しません。 pointのxまたはyが無限大またはNaNの場合はfalseを返します。

isPointInFillは、要素がclipPath要素の子でも、fill-ruleプロパティの巻き方向規則を取ります。

isPointInFillは、SVG文脈が許す限り、CanvasDrawPathミックスインのisPointInPathメソッドと整合しています。

isPointInStrokeメソッドは、 メソッドに渡されたpointが要素座標空間で、その要素の適用ストロークのアウトラインパス上または内部にある場合trueを返し、そうでなければfalseを返します。 アウトラインパスはstroke-widthstroke-linecapstroke-linejoinstroke-miterlimitstroke-dasharraystroke-dashoffset等を考慮します。 返り値はこれらストロークプロパティ以外のCSSプロパティには依存しません。 pointのxまたはyが無限大またはNaNの場合はfalseを返します。

isPointInStrokeは、SVG文脈が許す限り、CanvasDrawPathミックスインのisPointInPathメソッドと整合しています。

pathLength IDL属性は 反映で、pathLengthコンテンツ属性に対応します。

getTotalLengthメソッドは パスの長さを計算するために使います。getTotalLength()呼び出し時、ユーザーエージェントが計算したパス全体の長さ(ユーザー単位)を返します。

ユーザーエージェントが計算するパス長はpathLength属性を考慮しません。

getPointAtLengthメソッドは パス上の指定距離の点を返します。getPointAtLength(distance)呼び出し時、以下手順:

  1. lengthをユーザーエージェントが計算したパス全体長(ユーザー単位)とする。

    getTotalLength同様pathLength属性は考慮しません。

  2. distanceを[0, length]範囲に丸める。
  3. パス上のdistanceの位置の(x, y)を決定。
  4. (x, y)を表す新規detachedDOMPointオブジェクトを返す。

4.5. 基本データ型のDOMインターフェース

4.5.1. SVGNumberインターフェース

SVGNumberインターフェースは主に<number> 値をSVGNumberListの一部として表現するために使われます。 個別のSVGNumber オブジェクトはスクリプトで作成することもできます。

SVGNumberオブジェクトは読み取り専用に指定できます。 この場合、オブジェクトを変更しようとすると例外がスローされます(下記参照)。 animVal IDL属性経由で反映されるSVGNumberオブジェクトは常に 読み取り専用です。

SVGNumberオブジェクトは 特定の要素に関連付けられることがあります。関連付けられた要素は、 オブジェクトが属性を反映する場合に、どの要素のコンテンツ属性を更新するかを決定するために使われます。 特に記載がない限り、SVGNumberオブジェクトはどの要素にも関連付けられていません。

すべてのSVGNumberオブジェクトは、2つのモードのいずれかで動作します:

  1. 反映されたアニメーション可能属性の基本値の要素を反映する( baseValメンバー経由で SVGAnimatedNumberListのメソッドから公開される)、
  2. デタッチされているSVGNumberオブジェクトが createSVGNumberで作成された場合)。

SVGNumberオブジェクトは内部に数値値を保持し、これをvalueと呼びます。

[Exposed=Window]
interface SVGNumber {
  attribute float value;
};

value IDL属性は 数値を表します。value取得時は、 SVGNumbervalueが返されます。

value設定時は以下の手順が実行されます:

  1. SVGNumber読み取り専用なら、 throw NoModificationAllowedErrorを投げます。
  2. SVGNumbervaluevalueメンバーに代入した値に設定します。
  3. SVGNumber反映された属性の基本値の要素を反映している場合は、反映属性を再シリアル化します。

4.5.2. SVGLengthインターフェース

SVGLengthインターフェースは、 <length><percentage>または <number>値を表すために使われます。

SVGLengthオブジェクトは読み取り専用に指定できます。 この場合、オブジェクトを変更しようとすると例外がスローされます(下記参照)。 animVal IDL属性経由で反映されるSVGLengthオブジェクトは常に 読み取り専用です。

SVGLengthオブジェクトは 特定の要素に関連付けられることがあり、さらに方向性も指定できます(水平・垂直・未指定)。 関連付け要素と長さの方向性は、パーセンテージ値をユーザー単位に変換する際や、オブジェクトが属性を反映する場合にどの要素のコンテンツ属性を更新するかを決定する際に使われます。 特に記載がない限り、SVGLengthオブジェクトはどの要素にも関連付けられておらず、方向性も未指定です。

すべてのSVGLengthオブジェクトは、4つのモードのいずれかで動作します:

  1. 反映されたアニメーション可能属性の基本値を反映baseValメンバー経由で SVGAnimatedLengthから公開される)、
  2. 提示属性値を反映(例:SVGRectElement.width.baseValなど)、
  3. 反映されたアニメーション可能属性の基本値の要素を反映baseValメンバー経由で SVGAnimatedLengthListのメソッドから公開される)、
  4. デタッチされているSVGLengthオブジェクトが createSVGLengthで作成された場合)。

SVGLengthオブジェクトは内部に <length><percentage><number>値を保持し、これをvalueと呼びます。

[Exposed=Window]
interface SVGLength {

  // Length Unit Types
  const unsigned short SVG_LENGTHTYPE_UNKNOWN = 0;
  const unsigned short SVG_LENGTHTYPE_NUMBER = 1;
  const unsigned short SVG_LENGTHTYPE_PERCENTAGE = 2;
  const unsigned short SVG_LENGTHTYPE_EMS = 3;
  const unsigned short SVG_LENGTHTYPE_EXS = 4;
  const unsigned short SVG_LENGTHTYPE_PX = 5;
  const unsigned short SVG_LENGTHTYPE_CM = 6;
  const unsigned short SVG_LENGTHTYPE_MM = 7;
  const unsigned short SVG_LENGTHTYPE_IN = 8;
  const unsigned short SVG_LENGTHTYPE_PT = 9;
  const unsigned short SVG_LENGTHTYPE_PC = 10;

  readonly attribute unsigned short unitType;
           attribute float value;
           attribute float valueInSpecifiedUnits;
           attribute DOMString valueAsString;

  void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
  void convertToSpecifiedUnits(unsigned short unitType);
};

SVGLengthで定義される数値型長さ単位定数は、 SVGLengthvalue型を表します。 それぞれの意味は下記の通りです:

定数 意味
SVG_LENGTHTYPE_NUMBER 単位なし<number>px値として解釈されます。
SVG_LENGTHTYPE_PERCENTAGE <percentage>
SVG_LENGTHTYPE_EMS em単位の<length>
SVG_LENGTHTYPE_EXS ex単位の<length>
SVG_LENGTHTYPE_PX px単位の<length>
SVG_LENGTHTYPE_CM cm単位の<length>
SVG_LENGTHTYPE_MM mm単位の<length>
SVG_LENGTHTYPE_IN in単位の<length>
SVG_LENGTHTYPE_PT pt単位の<length>
SVG_LENGTHTYPE_PC pc単位の<length>
SVG_LENGTHTYPE_UNKNOWN その他の値。

数値型長さ単位定数の利用はアンチパターンであり、 SVGLengthがサポートする他の単位や長さ型に対して新たな定数値は導入されません。 他の型の長さがサポート・利用される場合、SVGLengthSVG_LENGTHTYPE_UNKNOWN単位型を使います。 他の型の長さの扱い詳細は下記参照。

unitType IDL属性は SVGLengthvalue型を表します。 unitType取得時は以下手順:

  1. SVGLengthvalueが 単位なし<number><percentage><length>emexpxcmmminptpc単位なら上記テーブルの対応定数値を返す。
  2. それ以外なら SVG_LENGTHTYPE_UNKNOWNを返す。

    例えば、ch単位や、calc()等非スカラー値の場合は SVG_LENGTHTYPE_UNKNOWNが返されます。

value IDL属性は SVGLengthvalue(ユーザー単位)を表します。 value取得時は以下手順:

  1. valueSVGLengthvalueとする。
  2. value<number>ならその数値を返す。
  3. viewport sizeを、関連付け要素と方向性に基づきパーセンテージ解決基準として決定:
    関連付け要素なし
    sizeは100
    関連付け要素あり・水平方向
    sizeは関連付け要素のSVGビューポート幅
    関連付け要素あり・垂直方向
    sizeは関連付け要素のSVGビューポート高さ
    関連付け要素あり・方向未指定
    sizeは関連付け要素のSVGビューポート対角線長(Units参照)
  4. font sizeをフォントサイズ値解決基準として、関連付け要素に基づき決定:
    関連付け要素なし
    font sizefont-sizeプロパティ初期値の絶対長
    関連付け要素あり
    sizeは関連付け要素のfont-sizeプロパティ算出値
  5. valueを絶対長に変換した結果を返す(パーセンテージ基準にviewport size、フォントサイズ基準にfont sizeを使用)。関連付け要素がなく変換不可の場合は0を返す。

value設定時は以下手順:

  1. SVGLengthオブジェクトが読み取り専用なら throw NoModificationAllowedErrorを投げる。
  2. valuevalueに代入された値とする。
  3. SVGLengthvalue<number>型でvalueに設定する。
  4. SVGLength基本値を反映または提示属性を反映または 基本値の要素を反映している場合は反映属性を再シリアル化する。

valueInSpecifiedUnits IDL属性は SVGLengthvalueの数値係数を表します。 valueInSpecifiedUnits取得時は以下手順:

  1. valueSVGLengthvalueとする。
  2. value<number>ならその数値を返す。
  3. それ以外でvalue<percentage>またはスカラー<length>値なら、単位前の数値係数を返す。
  4. それ以外なら0を返す。

    valueInSpecifiedUnits'12%'12emなら12を返し、calc(12px + 5%)のような非スカラー値なら0を返します。

valueInSpecifiedUnits設定時は以下手順:

  1. SVGLengthオブジェクトが読み取り専用なら throw NoModificationAllowedErrorを投げる。
  2. valuevalueInSpecifiedUnitsに代入された値とする。
  3. SVGLengthvalue<number>ならその値をvalueに更新。
  4. それ以外でSVGLengthvalue<percentage>またはスカラー<length>なら、数値係数をvalueに更新。
  5. それ以外の場合は、値を<number>型でvalueに更新。
  6. SVGLength基本値を反映または基本値の要素を反映している場合は反映属性を再シリアル化する。

valueAsString IDL属性は SVGLengthvalueを文字列で表します。 valueAsString取得時は以下手順:

  1. valueSVGLengthvalueとする。
  2. stringを空文字列とする。
  3. value<number><percentage>、スカラー<length>値なら:
    1. もしvalue<percentage><length>なら数値係数をfactorに、<number>ならvalue自身をfactorにする。
    2. CSS構文で<number>としてパースした場合、実装の実数精度factorに最も近い値となる実装依存文字列をstringに追加。
    3. value<percentage>ならstringにU+0025 PERCENT記号を追加。
    4. それ以外で<length>なら、単位の正規表記をstringに追加。
    5. stringを返す。
  4. それ以外の場合は、CSS構文で<length>としてパースした場合、valueに最も近い長さ値となる実装依存文字列を返す(実装の実数精度を考慮)。

valueAsString設定時は以下手順:

  1. SVGLengthオブジェクトが読み取り専用なら throw NoModificationAllowedErrorを投げる。
  2. valuevalueAsStringに代入された値とする。
  3. CSS構文[ <number> | <length> | <percentage> ]でvalueをパース。
  4. パース失敗ならthrowSyntaxErrorを投げる。
  5. パース成功なら、SVGLengthvalueにパース値を設定。
  6. SVGLength基本値を反映または基本値の要素を反映している場合は反映属性を再シリアル化する。

newValueSpecifiedUnits メソッドはSVGLengthの値を型付きで設定するために使います。 newValueSpecifiedUnits(unitType, valueInSpecifiedUnits)呼び出し時は以下手順:

  1. SVGLengthオブジェクトが読み取り専用なら throw NoModificationAllowedErrorを投げる。
  2. unitTypeSVG_LENGTHTYPE_UNKNOWN または上記長さ単位テーブルにない値なら throw NotSupportedErrorを投げる。
  3. unitTypeの値に応じてSVGLengthvalueを設定:
    SVG_LENGTHTYPE_NUMBER
    <number>型でvalueInSpecifiedUnitsを設定。
    SVG_LENGTHTYPE_PERCENTAGE
    <percentage>型で数値係数valueInSpecifiedUnitsを設定。
    その他
    該当単位の<length>型で数値係数valueInSpecifiedUnitsを設定。
  4. SVGLength基本値を反映または基本値の要素を反映している場合は反映属性を再シリアル化する。

convertToSpecifiedUnits メソッドはSVGLengthの値を特定の型に変換するために使います。 convertToSpecifiedUnits(unitType)呼び出し時は以下手順:

  1. SVGLengthオブジェクトが読み取り専用なら throw NoModificationAllowedErrorを投げる。
  2. unitTypeSVG_LENGTHTYPE_UNKNOWN または上記長さ単位テーブルにない値なら throw NotSupportedErrorを投げる。
  3. absolutevalueメンバーの値とする。
  4. unitTypeSVG_LENGTHTYPE_NUMBERなら:
    1. SVGLengthvalue<number>型でabsoluteに設定。
  5. それ以外でunitTypeSVG_LENGTHTYPE_PERCENTAGEなら:
    1. 関連付け要素と方向性に基づきパーセンテージ解決基準viewport sizeを決定:
      関連付け要素なし
      sizeは100
      関連付け要素あり・水平方向
      sizeは関連付け要素のSVGビューポート幅
      関連付け要素あり・垂直方向
      sizeは関連付け要素のSVGビューポート高さ
      関連付け要素あり・方向未指定
      sizeは関連付け要素のSVGビューポート対角線長(Units参照)
    2. SVGLengthvalueを、absoluteviewport size基準でパーセンテージに変換した値に設定。
  6. それ以外でunitTypeSVG_LENGTHTYPE_EMSまたはSVG_LENGTHTYPE_EXSなら:
    1. 関連付け要素に基づきフォントサイズ解決基準font sizeを決定:
      関連付け要素なし
      font sizefont-sizeプロパティ初期値の絶対長
      関連付け要素あり
      sizeは関連付け要素のfont-sizeプロパティ算出値
    2. SVGLengthvalueを、absolutefont size基準でunitTypeに応じてemまたはex単位の長さに変換した値に設定。
  7. それ以外の場合:
    1. 上記長さ単位テーブルでunitTypeに対応する単位の長さにabsoluteを変換し、SVGLengthvalueに設定。
  8. SVGLength反映属性の基本値または 反映属性の基本値の要素反映している場合、 反映属性を再シリアル化してください。

4.5.3. SVGAngleインターフェース

SVGAngleインターフェースは、<angle>値または<number>値を表すために使用されます。

SVGAngleオブジェクトは読み取り専用に指定できます。これは、オブジェクトを変更しようとすると下記の通り例外がスローされることを意味します。animVal属性経由で反映されたSVGAngleは常に読み取り専用です。

SVGAngleオブジェクトは、特定の要素に関連付けることができます。関連付けられた要素は、そのオブジェクトが反映する属性の更新先要素を決定するために使用されます。特に記載がない限り、SVGAngleオブジェクトは要素に関連付けられていません。

すべてのSVGAngleオブジェクトは2つのモードのいずれかで動作します:

  1. 反映属性の基本値を反映するbaseValメンバーを通じてSVGAnimatedAngleの基本値要素として公開)
  2. 切り離されているSVGAngleオブジェクトをcreateSVGAngleで生成した場合)

SVGAngleオブジェクトは内部に<angle>または<number>値を保持しており、これをと呼びます。

[Exposed=Window]
interface SVGAngle {

  // Angle Unit Types
  const unsigned short SVG_ANGLETYPE_UNKNOWN = 0;
  const unsigned short SVG_ANGLETYPE_UNSPECIFIED = 1;
  const unsigned short SVG_ANGLETYPE_DEG = 2;
  const unsigned short SVG_ANGLETYPE_RAD = 3;
  const unsigned short SVG_ANGLETYPE_GRAD = 4;

  readonly attribute unsigned short unitType;
           attribute float value;
           attribute float valueInSpecifiedUnits;
           attribute DOMString valueAsString;

  void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
  void convertToSpecifiedUnits(unsigned short unitType);
};

SVGAngleで定義される数値型角度単位定数は、SVGAngleの型を表します。それぞれの意味は以下の通りです:

定数 意味
SVG_ANGLETYPE_UNSPECIFIED 単位なし<number>(度として解釈)。
SVG_ANGLETYPE_DEG <angle>deg単位。
SVG_ANGLETYPE_RAD <angle>rad単位。
SVG_ANGLETYPE_GRAD <angle>grad単位。
SVG_ANGLETYPE_UNKNOWN その他の型の値。

数値型角度単位定数の使用はアンチパターンであり、SVGAngleでサポートされる他の単位や角度型のために新しい定数値は導入されません。他の角度型がサポートされて使用される場合は、SVGAngleSVG_ANGLETYPE_UNKNOWN単位型を使用します。その他のプロパティの動作詳細は下記参照。

unitType IDL属性は、SVGAngleの型を表します。取得時は以下手順:

  1. SVGAngleが単位なし<number>、またはdegradgrad単位の<length>なら上記角度単位定数表の対応値を返す。
  2. それ以外はSVG_ANGLETYPE_UNKNOWNを返す。

    例えば、turn単位の<angle>ではSVG_ANGLETYPE_UNKNOWNが返されます。

value IDL属性はSVGAngle(度単位)を表します。取得時は以下手順:

  1. valueSVGAngleとする。
  2. value<number>ならその値を返す。
  3. valueを度単位の角度に変換した結果を返す。

value を設定すると、次の手順が実行されます:

  1. SVGAngleオブジェクトが読み取り専用なら throw NoModificationAllowedError
  2. 設定値valuevalueに割り当てる。
  3. SVGAnglevalueの値を持つ<number>に設定する。
  4. SVGAngle基本値を反映している場合は反映属性を再シリアル化してください。

valueInSpecifiedUnits IDL属性はSVGAngleの数値部分を表します。取得時は以下手順:

  1. valueSVGAngleとする。
  2. value<number>ならその値を返す。
  3. それ以外はvalue<angle>値なので、その単位の前の数値部分を返す。

valueInSpecifiedUnits を設定すると、次の手順が実行されます:

  1. SVGAngleオブジェクトが読み取り専用なら throw NoModificationAllowedError
  2. 設定値valuevalueInSpecifiedUnitsに割り当てる。
  3. SVGAngle<number>ならその値を更新。
  4. それ以外は、値が<angle>なら数値部分を更新。
  5. SVGAngle基本値を反映または基本値の要素を反映している場合は反映属性を再シリアル化してください。

valueAsString IDL属性はSVGAngleを文字列で表します。取得時は以下手順:

  1. valueSVGAngleとする。
  2. stringを空文字列とする。
  3. factorvalue<angle>ならその数値部分、<number>ならvalue自身とする。
  4. CSS構文で<number>としてパースした場合、実装の実数精度factorに最も近い値を返す実装依存文字列をstringに追加。
  5. value<angle>なら、その単位の正規表記をstringに追加。
  6. stringを返す。

valueAsString を設定すると、次の手順が実行されます:

  1. SVGAngleオブジェクトが読み取り専用なら throw NoModificationAllowedError
  2. 設定値valuevalueAsStringに割り当てる。
  3. CSS構文 [ <number> | <angle> ] でvalueをパース。
  4. パース失敗した場合はthrow SyntaxError
  5. パース成功した場合はSVGAngleをパース値に設定。
  6. SVGAngle基本値を反映または基本値の要素を反映している場合は反映属性を再シリアル化してください。

newValueSpecifiedUnitsメソッドはSVGAngleの値を型付きで設定するために使用します。newValueSpecifiedUnits(unitType, valueInSpecifiedUnits)呼び出し時は以下手順:

  1. SVGAngleオブジェクトが読み取り専用なら throw NoModificationAllowedError
  2. unitTypeSVG_ANGLETYPE_UNKNOWNまたは上記角度単位定数表にない値ならthrow NotSupportedError
  3. unitType値に応じてSVGAngleを設定:
    SVG_ANGLETYPE_UNSPECIFIED
    <number>(値はvalueInSpecifiedUnits
    その他
    <angle>(数値部分はvalueInSpecifiedUnits、単位は上記角度単位定数表に従う)
  4. SVGAngle基本値を反映または基本値の要素を反映している場合は反映属性を再シリアル化してください。

convertToSpecifiedUnitsメソッドはSVGAngleの値を特定の型へ変換します。convertToSpecifiedUnits(unitType)呼び出し時は以下手順:

  1. SVGAngleオブジェクトが読み取り専用なら throw NoModificationAllowedError
  2. unitTypeSVG_ANGLETYPE_UNKNOWNまたは上記角度単位定数表にない値ならthrow NotSupportedError
  3. degreesvalueメンバーで返される値とする。
  4. unitTypeSVG_ANGLETYPE_UNSPECIFIEDなら:
    1. SVGAngledegrees値の<number>に設定。
  5. それ以外の場合:
    1. SVGAngledegreesを変換した<angle>(単位はunitType定数表に従う)に設定。
  6. SVGAngle基本値を反映または基本値の要素を反映している場合は反映属性を再シリアル化してください。

4.5.4. リストインターフェース

SVG 2 要件: SVGList*インターフェースを他のリスト/配列のように少し近づける。
決議: svgリスト型に配列スタイルのインデックス指定・.length・.itemを追加。
目的: 他の配列型(例:NodeList)と整合させるため。OperaとFirefoxでは既に実装済。
担当: Erik (ACTION-2975)
ステータス: 完了

いくつかのSVG属性は値リストを含み、これらの値を表すために、必要な要素型ごとにSVG DOMのリストインターフェースが複数あります。— SVGNumberList, SVGLengthList, SVGPointList, SVGTransformList, SVGStringList。 最初の4つはSVGAnimatedNumberList, SVGAnimatedLengthList, SVGAnimatedPoints, SVGTransformListオブジェクトの基本値・アニメーション値を表現するために使われます。 5つ目のSVGStringListは、文字列リストを取る非アニメ属性を反映するために使われます。

ほとんどのリストインターフェースは以下の形になります:

interface SVGNameList {

  readonly attribute unsigned long length;
  readonly attribute unsigned long numberOfItems;

  void clear();
  Type initialize(Type newItem);
  getter Type getItem(unsigned long index);
  Type insertItemBefore(Type newItem, unsigned long index);
  Type replaceItem(Type newItem, unsigned long index);
  Type removeItem(unsigned long index);
  Type appendItem(Type newItem);
  setter void (unsigned long index, Type newItem);
};

ここでNameはリスト要素型の記述名("Number"、"Length"、"Point"、"Transform"、"String")、Typeはリスト要素のIDL型(SVGNumberSVGLengthDOMPointSVGTransformDOMString)です。

SVGTransformListインターフェースは上記の形ですが、追加メソッドが2つあります。

リストインターフェースオブジェクトは、SVGTransformList以外は全て反映コンテンツ属性の基本値を反映します。SVGTransformListオブジェクトは提示属性(‘transform’, gradientTransform, patternTransform)を反映します。すべてのリストインターフェースオブジェクトは特定要素に関連付けられています。SVGLength等と違い、「切り離し」リストインターフェースオブジェクトはありません。

リストインターフェースオブジェクトは内部に要素リストを保持し、以下本文では単に「リスト」と呼びます。IDL属性やメソッドでリスト要素の検査・操作ができます。リストは反映コンテンツ属性や属性のアニメーション、(SVGTransformListならtransformプロパティの計算値変化)に応じて変更されます。

リストインターフェースオブジェクトは読み取り専用に指定でき、オブジェクトを変更しようとすると下記の通り例外がスローされます。animVal属性経由で反映されたリストインターフェースオブジェクトは常に読み取り専用です。

リストインターフェースオブジェクトは、以下の手順で同期されます:

  1. valueを反映コンテンツ属性の基本値とし(属性が存在しないか無効な場合は初期値を使う)。
  2. lengthをリスト要素数とする。
  3. new lengthvalue内の値数とする。 valueがキーワードnonetransformプロパティ対応)ならnew lengthは0。
  4. リスト要素型がSVGNumberSVGLengthDOMPointSVGTransformの場合:
    1. length > new lengthのとき:
      1. new length以上のインデックスのリスト内各オブジェクトを切り離し
      2. リストをnew lengthに切り詰める。
      3. lengthnew lengthに設定。
    2. length < new lengthの間:
      1. リスト要素型の新規オブジェクトitemを生成。
      2. itemをこのリストインターフェースオブジェクトに付加
      3. itemをリストに追加。
      4. lengthlength+1に。
    3. indexを0に。
    4. index < lengthの間:
      1. itemをリスト内インデックスindexのオブジェクトとする。
      2. vvalue内インデックスindexの値とする。
      3. itemの値をvに設定。
      4. itemSVGTransformオブジェクトなら、matrix objectの各成分を新しいtransform関数値に合わせて更新。
      5. indexindex+1に。
  5. それ以外の場合、リスト要素型はDOMString
    1. リストをvalueの値で構成される新しいリストで置換。

リスト要素オブジェクトを切り離す場合、要素型ごとに以下の手順:

SVGNumber
SVGNumber関連付けされなくなる。 読み取り専用なら読み取り専用解除。
SVGLength
SVGLength関連付けされなくなる。読み取り専用なら解除。SVGLengthの方向性も未指定になる。
DOMPoint
DOMPoint関連付けされなくなる。読み取り専用なら解除。
SVGTransform
SVGTransform関連付けされなくなる。読み取り専用なら解除。
DOMString
何もしない。

リスト要素オブジェクトを付加する場合、要素型ごとに以下の手順:

SVGNumber
関連付けをこのリストインターフェースオブジェクトの関連要素にする。さらに、どのIDL属性経由で反映されているかに応じて:
baseVal
SVGNumber基本値の要素を反映に設定。
animVal
SVGNumber基本値の要素を反映に設定。
SVGLength
関連付けをこのリストインターフェースオブジェクトの関連要素にし、方向性を反映対象属性で指定されたものに設定。さらに、どのIDL属性経由で反映されているかに応じて:
baseVal
SVGLength基本値の要素を反映に設定。
animVal
SVGLength基本値の要素を反映に設定。読み取り専用に設定。
DOMPoint
関連付けをこのリストインターフェースオブジェクトの関連要素にする。さらに、どのIDL属性経由で反映されているかに応じて:
baseVal
DOMPoint基本値の要素を反映に設定。
animVal
DOMPoint基本値の要素を反映に設定。
SVGTransform
関連付けをこのリストインターフェースオブジェクトの関連要素にする。SVGTransform提示属性値の要素を反映に設定。
DOMString
何もしない。

サポートされるプロパティインデックスは、リストインターフェースオブジェクトのリスト長未満のすべての非負整数です。

lengthnumberOfItemsIDL属性はリスト長を表し、取得時は単にリスト長を返します。

clearメソッドはリスト内すべての要素削除に使います。clear()呼び出し時は以下手順:

  1. リストが読み取り専用ならthrow NoModificationAllowedError
  2. 全要素を切り離し、削除。
  3. リストが属性を反映している、または反映属性の基本値オブジェクトの場合、反映属性を再シリアル化

initializeメソッドはリストをクリアし指定値1つだけ追加します。initialize(newItem)呼び出し時は以下手順:

  1. リストが読み取り専用ならthrow NoModificationAllowedError
  2. 全要素を切り離し、削除。
  3. newItemがオブジェクト型かつ切り離しオブジェクトでなければ、同型新規オブジェクトで(値は同じ番号や長さ)newItemとする。
  4. newItemをリストインターフェースオブジェクトに付加
  5. リストにnewItemを追加。
  6. リストが属性を反映している、または反映属性の基本値オブジェクトの場合、反映属性を再シリアル化
  7. newItemを返す。

getItemメソッドは指定位置のリスト要素取得に使います。getItem(index)呼び出し時は以下手順:

  1. indexがリスト長以上ならthrow IndexSizeError
  2. リストの位置indexの要素を返す。

    リスト要素型がオブジェクト型(例:SVGLength)なら、そのオブジェクトの参照が返りコピーではない。

insertItemBeforeメソッドは指定位置に要素挿入に使います。insertItemBefore(newItem, index)呼び出し時は以下手順:

  1. リストが読み取り専用ならthrow NoModificationAllowedError
  2. newItemがオブジェクト型かつ切り離しオブジェクトでなければ、同型新規オブジェクトで(値は同じ番号や長さ)newItemとする。
  3. indexがリスト長より大きい場合はリスト長とする。
  4. newItemindex位置に挿入。
  5. newItemをリストインターフェースオブジェクトに付加。
  6. リストが属性を反映している、または反映属性の基本値オブジェクトの場合、反映属性を再シリアル化。
  7. newItemを返す。

replaceItemメソッドは既存項目を新項目に置換します。replaceItem(newItem, index)呼び出し時は以下手順:

  1. リストが読み取り専用ならthrow NoModificationAllowedError
  2. indexがリスト長以上ならthrow IndexSizeError
  3. newItemがオブジェクト型かつ切り離しオブジェクトでなければ、同型新規オブジェクトで(値は同じ番号や長さ)newItemとする。
  4. リストのインデックスindexの要素を切り離し。
  5. indexの要素をnewItemで置換。
  6. newItemをリストインターフェースオブジェクトに付加。
  7. リストが属性を反映している、または反映属性の基本値オブジェクトの場合、反映属性を再シリアル化。
  8. newItemを返す。

removeItemメソッドはリストから項目を除去します。removeItem(index)呼び出し時は以下手順:

  1. リストが読み取り専用ならthrow NoModificationAllowedError
  2. indexがリスト長以上ならthrow IndexSizeError
  3. itemをリストのindex要素とする。
  4. itemを切り離し。
  5. indexの要素を削除。
  6. itemを返す。

appendItemメソッドはリスト末尾に項目追加に使います。appendItem(newItem)呼び出し時は以下手順:

  1. リストが読み取り専用ならthrow NoModificationAllowedError
  2. newItemがオブジェクト型かつ切り離しオブジェクトでなければ、同型新規オブジェクトで(値は同じ番号や長さ)newItemとする。
  3. indexをリスト長とする。
  4. newItemをリスト末尾に追加。
  5. newItemをリストインターフェースオブジェクトに付加。
  6. リストが属性を反映している、または反映属性の基本値オブジェクトの場合、反映属性を再シリアル化。
  7. newItemを返す。

インデックスプロパティsetterの動作はreplaceItemメソッドと同じです。

4.5.5. Interface SVGNumberList

SVGNumberListインターフェースは、要素がSVGNumberオブジェクトであるリストインターフェースです。SVGNumberListオブジェクトは数値リストを表します。

[Exposed=Window]
interface SVGNumberList {

  readonly attribute unsigned long length;
  readonly attribute unsigned long numberOfItems;

  void clear();
  SVGNumber initialize(SVGNumber newItem);
  getter SVGNumber getItem(unsigned long index);
  SVGNumber insertItemBefore(SVGNumber newItem, unsigned long index);
  SVGNumber replaceItem(SVGNumber newItem, unsigned long index);
  SVGNumber removeItem(unsigned long index);
  SVGNumber appendItem(SVGNumber newItem);
  setter void (unsigned long index, SVGNumber newItem);
};

SVGNumberListのすべてのインターフェースメンバーの動作は、上記リストインターフェース節で定義されています。

4.5.6. Interface SVGLengthList

SVGLengthListインターフェースは、要素がSVGLengthオブジェクトであるリストインターフェースです。SVGLengthListオブジェクトは長さリストを表します。

[Exposed=Window]
interface SVGLengthList {

  readonly attribute unsigned long length;
  readonly attribute unsigned long numberOfItems;

  void clear();
  SVGLength initialize(SVGLength newItem);
  getter SVGLength getItem(unsigned long index);
  SVGLength insertItemBefore(SVGLength newItem, unsigned long index);
  SVGLength replaceItem(SVGLength newItem, unsigned long index);
  SVGLength removeItem(unsigned long index);
  SVGLength appendItem(SVGLength newItem);
  setter void (unsigned long index, SVGLength newItem);
};

SVGLengthListのすべてのインターフェースメンバーの動作は、上記リストインターフェース節で定義されています。

4.5.7. Interface SVGStringList

SVGStringListインターフェースは、要素がDOMString値であるリストインターフェースです。SVGStringListオブジェクトは文字列リストを表します。

[Exposed=Window]
interface SVGStringList {

  readonly attribute unsigned long length;
  readonly attribute unsigned long numberOfItems;

  void clear();
  DOMString initialize(DOMString newItem);
  getter DOMString getItem(unsigned long index);
  DOMString insertItemBefore(DOMString newItem, unsigned long index);
  DOMString replaceItem(DOMString newItem, unsigned long index);
  DOMString removeItem(unsigned long index);
  DOMString appendItem(DOMString newItem);
  setter void (unsigned long index, DOMString newItem);
};

SVGStringListのすべてのインターフェースメンバーの動作は、上記リストインターフェース節で定義されています。

4.6. アニメーション可能なSVG属性を反映するDOMインターフェース

以下のインターフェースは、アニメーション可能なコンテンツ属性の反映値を表現するために使用されます。 それぞれ2つの構成オブジェクトから成り、同じデータを表します: baseValanimValです。 baseVal(基本値)オブジェクトは修正可能であり、対応する属性値を更新できます。

SVG 1.1では、SVG DOMインターフェースのanimVal属性が反映属性の現在のアニメーション値を表していました。本バージョンのSVGでは、 animValは現在のアニメーション値を表さず、代わりにbaseValのエイリアスとなっています。

4.6.1. Interface SVGAnimatedBoolean

SVGAnimatedBooleanオブジェクトは、真偽値を取るアニメーション可能属性を反映するために使用されます。

[Exposed=Window]
interface SVGAnimatedBoolean {
           attribute boolean baseVal;
  readonly attribute boolean animVal;
};

baseValanimValIDL属性は、反映属性の現在の非アニメ値を表します。 baseVal またはanimVal取得時には以下手順を実行します:

  1. valueを反映属性の値(存在しない場合は空文字列)とする。
  2. valueが"true"または"false"でない場合、valueを反映属性の初期値に設定する。
  3. valueが"true"ならtrue、そうでなければfalseを返す。

baseValを設定すると、値がtrueなら反映属性は"true"、それ以外は"false"に設定されます。

4.6.2. Interface SVGAnimatedEnumeration

SVGAnimatedEnumerationオブジェクトは、キーワード値を取るアニメーション可能属性(例:method属性)や、アニメーション可能属性の値型(orient属性のorientTypeIDL属性)を反映するために使用されます。

[Exposed=Window]
interface SVGAnimatedEnumeration {
           attribute unsigned short baseVal;
  readonly attribute unsigned short animVal;
};

SVGAnimatedEnumerationオブジェクトがキーワード値のみを取るアニメーション可能属性を反映する場合、 baseValanimValIDL属性は反映属性の現在の非アニメ値を表します。 orientTypeの場合は、反映orient属性の現在の値型を表します。baseValまたは animVal取得時は以下手順を実行します:

  1. valueを反映属性の値(存在しない・無効なら初期値)とする。
  2. valueに対応する数値型値を、反映IDL属性の定義に従って返す。

baseValを設定するときの手順:

  1. 設定値valuebaseValに割り当てる。
  2. valueが0または反映属性値のいずれにも該当しない数値型値なら、反映属性を空文字列に設定。
  3. 反映IDL属性がorientTypeかつvalueSVG_MARKER_ORIENT_ANGLEなら、反映属性を"0"に設定。
  4. それ以外の場合、valueが反映属性の特定キーワード値の数値型値なら、その値を反映属性に設定。

4.6.3. Interface SVGAnimatedInteger

SVGAnimatedIntegerオブジェクトは、整数値を取るアニメーション可能属性(例:numOctaves)や、整数+オプション整数(例:order)属性の一部を反映するために使用されます。

SVGAnimatedIntegerインターフェースは本仕様では使われていませんが、Filter Effects仕様では多数使用例があります。

[Exposed=Window]
interface SVGAnimatedInteger {
           attribute long baseVal;
  readonly attribute long animVal;
};

SVGAnimatedIntegerオブジェクトが単一整数値を取るアニメーション可能属性を反映する場合、 baseValanimValIDL属性は反映属性の現在の非アニメ値を表します。 整数+オプション整数属性の場合は、その2つのうちいずれかの現在値を表します。baseValまたはanimVal取得時は以下手順を実行します:

  1. valueを反映属性の値(存在しない・無効なら初期値)とする。
  2. 反映属性が整数+オプション整数なら:
    1. 本オブジェクトが最初の整数を反映する場合はvalueの1つ目を返す。
    2. そうでなければ2つ目を返す(明示指定なければ属性定義記載の暗黙値)。

      例えばorderの定義では2つ目の暗黙値は1つ目と同じ。

  3. それ以外なら単一整数属性なのでvalueを返す。

baseVal設定時の手順:

  1. 設定値valuebaseValに割り当てる。
  2. newを整数リストとする。
  3. 反映属性が整数+オプション整数なら:
    1. currentを反映属性の値(存在しない・無効なら初期値)とする。
    2. firstcurrentの1つ目の整数、secondを2つ目(明示指定なければ属性定義記載の暗黙値)とする。
    3. 本オブジェクトが1つ目を反映する場合はfirstvalueを、そうでなければsecondvalueを設定。
    4. firstnewに追加。
    5. secondnewに追加。
  4. それ以外なら単一整数属性なのでvaluenewに追加。
  5. 各整数を(CSS構文で<number>としてパースした場合その整数値になる実装依存文字列で)newの整数でU+0020 SPACE区切りで連結した文字列を属性値に設定。

4.6.4. Interface SVGAnimatedNumber

SVGAnimatedNumberオブジェクトは、数値値を取るアニメーション可能属性(例:pathLength属性)や、数値+オプション数値(例:kernelUnitLength)属性の一部を反映するために使用されます。

[Exposed=Window]
interface SVGAnimatedNumber {
           attribute float baseVal;
  readonly attribute float animVal;
};

SVGAnimatedNumberオブジェクトが単一数値属性を反映する場合、 baseValanimValIDL属性は反映属性の現在の非アニメ値を表します。 数値+オプション数値属性の場合は、その2つのうちいずれかの現在値を表します。baseValまたはanimVal取得時は以下手順を実行します:

  1. valueを反映属性の値(存在しない・無効なら初期値)とする。
  2. 反映属性が数値+オプション数値なら:
    1. 本オブジェクトが1つ目の数値を反映する場合はvalueの1つ目を返す。
    2. そうでなければ2つ目を返す(明示指定なければ属性定義記載の暗黙値)。

      例えばkernelUnitLengthの定義では2つ目の暗黙値は1つ目と同じ。

  3. それ以外なら単一数値属性なのでvalueを返す。

baseVal設定時の手順:

  1. 設定値valuebaseValに割り当てる。
  2. newを数値リストとする。
  3. 反映属性が数値+オプション数値なら:
    1. currentを反映属性の値(存在しない・無効なら初期値)とする。
    2. firstcurrentの1つ目の数値、secondを2つ目(明示指定なければ属性定義記載の暗黙値)とする。
    3. 本オブジェクトが1つ目を反映する場合はfirstvalueを、そうでなければsecondvalueを設定。
    4. firstnewに追加。
    5. secondnewに追加。
  4. それ以外なら単一数値属性なのでvaluenewに追加。
  5. 各数値を(CSS構文で<number>としてパースした場合最も近い値になる実装依存文字列で)newの数値でU+0020 SPACE区切りで連結した文字列を属性値に設定。

4.6.5. Interface SVGAnimatedLength

SVGAnimatedLengthオブジェクトは、(a) <length><percentage><number>値を取るアニメーション可能属性、または(b) これらの値を取るCSSプロパティおよび対応する提示属性を反映するために使用されます。

[Exposed=Window]
interface SVGAnimatedLength {
  [SameObject] readonly attribute SVGLength baseVal;
  [SameObject] readonly attribute SVGLength animVal;
};

baseValanimValIDL属性は反映コンテンツ属性の現在値を表します。 baseValまたは animVal取得時は、 以下の特徴を持つSVGLengthオブジェクトを返します:

4.6.6. Interface SVGAnimatedAngle

SVGAnimatedAngleオブジェクトは、orientAngleIDL属性を通じて、アニメーション可能なorient属性(marker要素上)の<angle>値を反映するために使用されます。

[Exposed=Window]
interface SVGAnimatedAngle {
  [SameObject] readonly attribute SVGAngle baseVal;
  [SameObject] readonly attribute SVGAngle animVal;
};

baseValanimValIDL属性は、反映orient属性の現在の非アニメ<angle>値を表します。取得時は以下の特徴を持つSVGAngleオブジェクトを返します:

4.6.7. Interface SVGAnimatedString

SVGAnimatedStringオブジェクトは、文字列値を取るアニメーション可能属性を反映するために使用されます。オプションで、2つ目の非推奨属性も反映するよう定義できます。

[Exposed=Window]
interface SVGAnimatedString {
           attribute DOMString baseVal;
  readonly attribute DOMString animVal;
};

baseValanimValIDL属性は反映属性の現在の非アニメ値を表します。 baseValまたはanimVal取得時は以下手順を実行します:

  1. 反映属性が存在しない場合:
    1. SVGAnimatedStringオブジェクトが追加で2つ目の非推奨属性も反映するよう定義されており、その属性が存在する場合はその値を返す。
    2. そうでなく反映属性に初期値がある場合はそれを返す。
    3. それ以外は空文字列を返す。
  2. それ以外(反映属性が存在する場合)はその値を返す。

hrefメンバー(SVGURIReferenceインターフェース)は、非推奨xlink:href属性が存在し‘href’属性が存在しない場合はそれを返し、それ以外は‘href’属性を返します。

baseVal設定時の手順:

  1. 反映属性が存在せず、SVGAnimatedStringオブジェクトが2つ目の非推奨属性も反映するよう定義されていてその属性が存在する場合は、その非推奨属性に指定値を設定。
  2. それ以外は反映属性に指定値を設定。

hrefメンバー(SVGURIReferenceインターフェース)は、非推奨xlink:href属性が存在し‘href’属性が存在しない場合はそれを設定し、それ以外は‘href’属性を設定します。

4.6.8. Interface SVGAnimatedRect

SVGAnimatedRectオブジェクトは、xywidthheightで指定される矩形値を取るアニメーション可能属性を反映するために使用されます。

本仕様でSVGAnimatedRectとして反映する唯一の属性はviewBoxです。

[Exposed=Window]
interface SVGAnimatedRect {
  [SameObject] readonly attribute DOMRect baseVal;
  [SameObject] readonly attribute DOMRectReadOnly animVal;
};

baseValanimValIDL属性は反映属性の現在の非アニメ矩形値を表します。baseValまたはanimVal取得時はDOMRectオブジェクトを返します。

baseValまたはanimValDOMRectオブジェクトの生成時や、その後反映コンテンツ属性が追加・削除・変更された際は以下手順を実行します:

  1. valueを反映属性の値(存在しない・無効なら初期値)とする。
  2. xywidthheightvalueの対応成分とする。
  3. DOMRectオブジェクトのx座標y座標widthheightをそれぞれxywidthheightに設定。

baseValanimValDOMRectx座標y座標widthheightプロパティが変更された場合(前述アルゴリズムで属性値を反映する場合を除く)、反映コンテンツ属性は再シリアル化されなければなりません。

4.6.9. Interface SVGAnimatedNumberList

SVGAnimatedNumberListオブジェクトは、反映<number>値のリストを取るアニメーション可能属性を表現するために使用されます。

[Exposed=Window]
interface SVGAnimatedNumberList {
  [SameObject] readonly attribute SVGNumberList baseVal;
  [SameObject] readonly attribute SVGNumberList animVal;
};

baseValanimValIDL属性は、反映属性の現在の非アニメ値を表します。baseValまたはanimVal取得時は反映属性の基本値を反映するSVGNumberListオブジェクトを返します。

4.6.10. Interface SVGAnimatedLengthList

SVGAnimatedLengthListオブジェクトは、反映<length><percentage><number>値のリストを取るアニメーション可能属性を表現するために使用されます。

[Exposed=Window]
interface SVGAnimatedLengthList {
  [SameObject] readonly attribute SVGLengthList baseVal;
  [SameObject] readonly attribute SVGLengthList animVal;
};

baseValanimValIDL属性は反映属性の現在の非アニメ値を表します。baseValまたはanimVal取得時は反映属性の基本値を反映するSVGLengthListオブジェクトを返します。

4.7. その他のDOMインターフェース

4.7.1. Interface SVGUnitTypes

SVGUnitTypesインターフェースは、gradientUnitspatternContentUnits、その他類似属性の反映に使われる定数セットを定義します。

[Exposed=Window]
interface SVGUnitTypes {
  // Unit Types
  const unsigned short SVG_UNIT_TYPE_UNKNOWN = 0;
  const unsigned short SVG_UNIT_TYPE_USERSPACEONUSE = 1;
  const unsigned short SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
};

SVGUnitTypesで定義される単位型定数の意味:

定数 意味
SVG_UNIT_TYPE_USERSPACEONUSE 'userSpaceOnUse'属性値に対応。
SVG_UNIT_TYPE_OBJECTBOUNDINGBOX 'objectBoundingBox'属性値に対応。
SVG_UNIT_TYPE_UNKNOWN その他の型の値。

4.7.2. Mixin SVGTests

SVGTestsインターフェースは、条件付き処理属性を反映するために使われ、これらの属性をサポートする要素の他のインターフェースにミックスインされます。

interface mixin SVGTests {
  [SameObject] readonly attribute SVGStringList requiredExtensions;
  [SameObject] readonly attribute SVGStringList systemLanguage;
};

requiredExtensionsIDL属性は、反映requiredExtensionsコンテンツ属性に対応します。

systemLanguageIDL属性は、反映systemLanguageコンテンツ属性に対応します。

4.7.3. Mixin SVGFitToViewBox

SVGFitToViewBoxインターフェースは、viewBoxpreserveAspectRatio属性を反映するために使われ、これら2属性をサポートする要素の他のインターフェースにミックスインされます。

interface mixin SVGFitToViewBox {
  [SameObject] readonly attribute SVGAnimatedRect viewBox;
  [SameObject] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
};

viewBoxIDL属性は、反映viewBoxコンテンツ属性に対応します。

preserveAspectRatioIDL属性は、反映preserveAspectRatioコンテンツ属性に対応します。

4.7.4. Mixin SVGZoomAndPan

SVGZoomAndPanインターフェースは、zoomAndPan属性を反映するために使われ、これをサポートする要素の他のインターフェースにミックスインされます。

interface mixin SVGZoomAndPan {

  // Zoom and Pan Types
  const unsigned short SVG_ZOOMANDPAN_UNKNOWN = 0;
  const unsigned short SVG_ZOOMANDPAN_DISABLE = 1;
  const unsigned short SVG_ZOOMANDPAN_MAGNIFY = 2;

  attribute unsigned short zoomAndPan;
};

SVGZoomAndPanで定義されるズーム・パン型定数の意味:

定数 意味
SVG_ZOOMANDPAN_DISABLE 'disable'属性値に対応。
SVG_ZOOMANDPAN_MAGNIFY 'magnify'属性値に対応。
SVG_ZOOMANDPAN_UNKNOWN その他の型の値。

zoomAndPanIDL属性はzoomAndPan属性値を表します。取得時は以下手順:

  1. valuezoomAndPan属性の現在値(存在しない・無効なら初期値)とする。
  2. valueに対応するズーム・パン型定数表の定数を返す。

zoomAndPan設定時の手順:

  1. 設定値valuezoomAndPanに割り当てる。
  2. valueSVG_ZOOMANDPAN_UNKNOWNまたはズーム・パン型定数表に該当しない場合はreturn。
  3. valueに対応するズーム・パン型定数表のキーワード値をzoomAndPan属性に設定。

4.7.5. Mixin SVGURIReference

SVGURIReferenceインターフェースは‘href’属性および非推奨xlink:href属性を反映するために使われます。

interface mixin SVGURIReference {
  [SameObject] readonly attribute SVGAnimatedString href;
};

hrefIDL属性は‘href’属性値、および定義要素の場合は非推奨xlink:href属性値を表します。取得時は以下の特徴を持つSVGAnimatedStringオブジェクトを返します:

SVGAnimatedStringインターフェースは、baseValanimVal経由で、非推奨xlink:href属性が存在し‘href’が存在しない場合はそれを反映し、それ以外は‘href’属性を反映します。アニメーション要素attributeName='xlink:href'‘href’属性のエイリアスとして扱います。