属性やプロパティの初期値は、その属性やプロパティが指定されていない場合、または無効な値が指定された場合に使用される値です。 この値はレンダリング、アニメーション値の計算、DOMインターフェース経由で属性やプロパティにアクセスする際に使用されます。
この仕様では、属性は属性定義テーブルで定義されます。例は以下の通りです:
名前 | 値 | 初期値 | アニメーション可能 |
---|---|---|---|
exampleattr | <length> | none | none | yes |
値の列には属性の構文の説明が記載されています。属性の構文を記述する方法は6通りあります:
SVG 2要件: | 提示属性値の大文字小文字の区別を緩和することを検討。 |
---|---|
決議: | プロパティ値を大文字小文字を区別しないようにします。 |
目的: | 提示属性構文のパースを対応するCSSプロパティのパースと整合させるため。 |
担当: | Cameron (ACTION-3276) |
ステータス: | 完了 |
提示属性がCSS値定義構文で定義されている場合のパースは、以下の通りです:
<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"を指定するとoverflowがvisibleとなり、ユーザーエージェントスタイル値を上書きします。
アニメーション可能の列は、属性がアニメーション要素(SVG Animationモジュールで定義)によってアニメーション可能かを示します。
特に明記されていない限り、SVG属性やSVG要素に効果のあるプロパティの数値値は、ホストアーキテクチャがサポートする全ての有限な単精度値を少なくともサポートしなければなりません。
座標系変換などの演算時には、より高精度な浮動小数点での保存や計算を推奨します。これにより精度が向上し、丸め誤差を防げます。
適合SVGビューアは、適合基準に記載の適合クラスに従って数値計算を行う必要があります。
一部の数値属性・プロパティ値は範囲が制限されています。その他の値はデバイスの能力によって制限されます。特に明記されていない場合、ユーザーエージェントは範囲外エラーの検査をできるだけレンダリング処理の後半まで遅延させなければなりません。これはデバイス制限に特に重要で、複合操作により途中で範囲外値が出ても最終値が範囲内になる場合があるためです。
適合する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(アクションなし) |
SVG DOMは Web IDL インターフェースで定義されています。本仕様のすべてのIDL断片は、Web IDL仕様に記載された 適合IDL断片として解釈されなければなりません。[WebIDL]
SVG DOMは多数のDOM仕様の上に構築されています。特に:
SVG DOMはHTMLやDOM標準([HTML]、[DOM])に類似した命名規則に従います。
すべての名前は英単語1個以上を連結した文字列です。プロパティやメソッド名は最初のキーワードが小文字、以降の単語は大文字で始まります。例えば、ファイル作成日などのメタ情報を返すプロパティは "fileDateCreated" となります。
本仕様で定義されるインターフェース名はほぼすべて "SVG" で始まります。SVG名前空間要素のDOM Element オブジェクトを表すインターフェースは
SVGElementNameElement
形式で、ElementName
はタグ名の先頭大文字です。よって SVGRadialGradientElement は
‘radialGradient’要素のインターフェースとなります。
この命名規則の例外は SVGSVGElement で、タグ名全体が大文字になります。
SVG DOMをサポートするSVGソフトウェアは、SVG文書フラグメントで作成されたDOM要素を以下のように拡張しなければなりません:
サポートされるSVG要素(すなわち名前空間URI "http://www.w3.org/2000/svg" で、ローカル名が本仕様または実装仕様で定義されている要素)に対応するすべての Element オブジェクトは、要素定義で指定されたDOMインターフェースも実装しなければなりません。
SVG名前空間でローカル名が実装仕様で定義されていない要素は、SVGUnknownElement インターフェースを実装すべきであり、さらに SVGElement インターフェースも必ず実装しなければなりません。
SVGUnknownElementインターフェースは「リスクあり」です。
‘rect’要素では、SVGRectElementインターフェースが指定されています。つまり、名前空間URIが "http://www.w3.org/2000/svg" かつローカル名が "rect" の Element オブジェクトは必ず SVGRectElementも実装する必要があります。
多くのSVG DOMプロパティ(IDL属性)は、対応する要素上のコンテンツ属性またはプロパティを反映します。つまり、コンテンツ属性とIDL属性は同じ基礎データを表します。 例えば、SVGAnimatedLength ry(SVGRectElement内)は、対応する‘rect’要素のry提示属性を反映します。
反映方法はIDL属性型によって異なります:
大まかには、オブジェクトのbaseVal
がコンテンツ属性値の反映に使われます。CSSプロパティ反映の場合はbaseVal
が提示属性値の反映に使われます。
この関係はライブであり、属性または反映プロパティが変更された場合は(反映値の同期の規則に従い)値を同期しなければなりません。
属性が文書マークアップで明示的に指定されていなくても、反映オブジェクトはアクセス時に属性の初期値で初期化されます。初期値が(none)の場合は空の初期値の反映で定義されるように初期化されます。この新しく構築されたオブジェクトは、初回変更が行われるまで要素上に属性を生成しません。対応属性への変更は即座にオブジェクトに反映されます。
例えばlineElement.x1.baseVal
(lineElement
はSVGLineElementのインスタンス)にアクセスし、‘x1’属性が文書で指定されていない場合、返されるSVGLengthオブジェクトは0ユーザー単位を表します。これは属性の初期値が0だからです。
反映されたコンテンツ属性の基本値が変更された場合は、反映オブジェクトを同期しなければならず、値変更直後に以下の手順を実行します:
反映されたコンテンツ属性を、必要に応じて特定の値で再シリアル化する場合は、以下の手順を実行します:
つまり、列挙値が"unknown"の時は属性値は空文字列になります。
値は型に応じてSVGNumber、SVGLength、DOMPoint、SVGTransformオブジェクト、またはDOMString値です。
nullまたは空の初期値を反映するSVG DOM属性の初期化時は、本節で定義するデータ型に応じてプロパティを初期化しなければなりません。 これは反映コンテンツ属性に明示値がなく、属性定義テーブルの初期値が(none)の場合のみ発生します。
以下に記載がないインターフェースは、そのインターフェースが含むオブジェクトの値を使って初期化されます。例えば、SVGAnimatedStringは2つのDOMStringメンバーで構成され、DOMRectは複数のdoubleを持ちます。
例えばtextElement.dx.baseVal
(textElement
はSVGTextElementのインスタンス)にアクセスし、‘dx’属性が文書で指定されていない場合、返されるSVGLengthListオブジェクトは空になります。
スクリプトが反映DOM属性に対してコンテンツ属性の無効な値(例:非負でなければならない属性に負数、列挙値で範囲外など)を設定した場合、この仕様で別途指定がない限り、設定時に例外はスローされませんが、そのドキュメントフラグメントは技術的にエラー状態となります(エラー処理参照)。
現在多くのブラウザは、範囲外の列挙値や列挙型にUNKNOWN値を明示設定した場合にエラーをスローします。 GitHub上の議論は 列挙IDLに無効値設定時に例外を投げるべきか? を参照。
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を返します。
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辞書引数のfill、stroke、markers、clippedメンバーで含める部分を制御します。要素のユーザー座標系を返す座標系として使用し、計算結果を定義する新規DOMRectオブジェクトを返します。
getCTMメソッドは 現在の要素の座標系をSVGビューポートの座標系に変換する行列を取得します。getCTM()呼び出し時は以下手順:
getScreenCTMメソッドは 現在の要素の座標系をSVG文書フラグメントのSVGビューポート座標系に変換する行列を取得します。getScreenCTM()呼び出し時は以下手順:
これには以下が含まれる:
このメソッドは本来getClientCTM
という名前が適切だが、歴史的理由でgetScreenCTM
の名前を維持しています。
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-width、stroke-linecap、stroke-linejoin、stroke-miterlimit、stroke-dasharray、stroke-dashoffset等を考慮します。 返り値はこれらストロークプロパティ以外のCSSプロパティには依存しません。 pointのxまたはyが無限大またはNaNの場合はfalseを返します。
isPointInStrokeは、SVG文脈が許す限り、CanvasDrawPathミックスインのisPointInPath
メソッドと整合しています。
pathLength IDL属性は 反映で、‘pathLength’コンテンツ属性に対応します。
getTotalLengthメソッドは パスの長さを計算するために使います。getTotalLength()呼び出し時、ユーザーエージェントが計算したパス全体の長さ(ユーザー単位)を返します。
ユーザーエージェントが計算するパス長は‘pathLength’属性を考慮しません。
getPointAtLengthメソッドは パス上の指定距離の点を返します。getPointAtLength(distance)呼び出し時、以下手順:
getTotalLength同様‘pathLength’属性は考慮しません。
SVGNumberインターフェースは主に<number> 値をSVGNumberListの一部として表現するために使われます。 個別のSVGNumber オブジェクトはスクリプトで作成することもできます。
SVGNumberオブジェクトは読み取り専用に指定できます。 この場合、オブジェクトを変更しようとすると例外がスローされます(下記参照)。 animVal IDL属性経由で反映されるSVGNumberオブジェクトは常に 読み取り専用です。
SVGNumberオブジェクトは 特定の要素に関連付けられることがあります。関連付けられた要素は、 オブジェクトが属性を反映する場合に、どの要素のコンテンツ属性を更新するかを決定するために使われます。 特に記載がない限り、SVGNumberオブジェクトはどの要素にも関連付けられていません。
すべてのSVGNumberオブジェクトは、2つのモードのいずれかで動作します:
SVGNumberオブジェクトは内部に数値値を保持し、これをvalueと呼びます。
[Exposed=Window] interface SVGNumber { attribute float value; };
value IDL属性は 数値を表します。value取得時は、 SVGNumberのvalueが返されます。
value設定時は以下の手順が実行されます:
SVGLengthインターフェースは、 <length>、 <percentage>または <number>値を表すために使われます。
SVGLengthオブジェクトは読み取り専用に指定できます。 この場合、オブジェクトを変更しようとすると例外がスローされます(下記参照)。 animVal IDL属性経由で反映されるSVGLengthオブジェクトは常に 読み取り専用です。
SVGLengthオブジェクトは 特定の要素に関連付けられることがあり、さらに方向性も指定できます(水平・垂直・未指定)。 関連付け要素と長さの方向性は、パーセンテージ値をユーザー単位に変換する際や、オブジェクトが属性を反映する場合にどの要素のコンテンツ属性を更新するかを決定する際に使われます。 特に記載がない限り、SVGLengthオブジェクトはどの要素にも関連付けられておらず、方向性も未指定です。
すべてのSVGLengthオブジェクトは、4つのモードのいずれかで動作します:
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で定義される数値型長さ単位定数は、 SVGLengthのvalue型を表します。 それぞれの意味は下記の通りです:
定数 | 意味 |
---|---|
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がサポートする他の単位や長さ型に対して新たな定数値は導入されません。 他の型の長さがサポート・利用される場合、SVGLengthは SVG_LENGTHTYPE_UNKNOWN単位型を使います。 他の型の長さの扱い詳細は下記参照。
unitType IDL属性は SVGLengthのvalue型を表します。 unitType取得時は以下手順:
例えば、ch単位や、calc()等非スカラー値の場合は SVG_LENGTHTYPE_UNKNOWNが返されます。
value IDL属性は SVGLengthのvalue(ユーザー単位)を表します。 value取得時は以下手順:
value設定時は以下手順:
valueInSpecifiedUnits IDL属性は SVGLengthのvalueの数値係数を表します。 valueInSpecifiedUnits取得時は以下手順:
valueInSpecifiedUnitsは'12%'や12emなら12を返し、calc(12px + 5%)のような非スカラー値なら0を返します。
valueInSpecifiedUnits設定時は以下手順:
valueAsString IDL属性は SVGLengthのvalueを文字列で表します。 valueAsString取得時は以下手順:
valueAsString設定時は以下手順:
newValueSpecifiedUnits メソッドはSVGLengthの値を型付きで設定するために使います。 newValueSpecifiedUnits(unitType, valueInSpecifiedUnits)呼び出し時は以下手順:
convertToSpecifiedUnits メソッドはSVGLengthの値を特定の型に変換するために使います。 convertToSpecifiedUnits(unitType)呼び出し時は以下手順:
SVGAngleインターフェースは、<angle>値または<number>値を表すために使用されます。
SVGAngleオブジェクトは読み取り専用に指定できます。これは、オブジェクトを変更しようとすると下記の通り例外がスローされることを意味します。animVal属性経由で反映されたSVGAngleは常に読み取り専用です。
SVGAngleオブジェクトは、特定の要素に関連付けることができます。関連付けられた要素は、そのオブジェクトが反映する属性の更新先要素を決定するために使用されます。特に記載がない限り、SVGAngleオブジェクトは要素に関連付けられていません。
すべてのSVGAngleオブジェクトは2つのモードのいずれかで動作します:
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でサポートされる他の単位や角度型のために新しい定数値は導入されません。他の角度型がサポートされて使用される場合は、SVGAngleはSVG_ANGLETYPE_UNKNOWN単位型を使用します。その他のプロパティの動作詳細は下記参照。
unitType IDL属性は、SVGAngleの値の型を表します。取得時は以下手順:
例えば、turn単位の<angle>ではSVG_ANGLETYPE_UNKNOWNが返されます。
value IDL属性はSVGAngleの値(度単位)を表します。取得時は以下手順:
value を設定すると、次の手順が実行されます:
valueInSpecifiedUnits IDL属性はSVGAngleの値の数値部分を表します。取得時は以下手順:
valueInSpecifiedUnits を設定すると、次の手順が実行されます:
valueAsString IDL属性はSVGAngleの値を文字列で表します。取得時は以下手順:
valueAsString を設定すると、次の手順が実行されます:
newValueSpecifiedUnitsメソッドはSVGAngleの値を型付きで設定するために使用します。newValueSpecifiedUnits(unitType, valueInSpecifiedUnits)呼び出し時は以下手順:
convertToSpecifiedUnitsメソッドはSVGAngleの値を特定の型へ変換します。convertToSpecifiedUnits(unitType)呼び出し時は以下手順:
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型(SVGNumber、SVGLength、DOMPoint、SVGTransform、DOMString)です。
SVGTransformListインターフェースは上記の形ですが、追加メソッドが2つあります。
リストインターフェースオブジェクトは、SVGTransformList以外は全て反映コンテンツ属性の基本値を反映します。SVGTransformListオブジェクトは提示属性(‘transform’, ‘gradientTransform’, ‘patternTransform’)を反映します。すべてのリストインターフェースオブジェクトは特定要素に関連付けられています。SVGLength等と違い、「切り離し」リストインターフェースオブジェクトはありません。
リストインターフェースオブジェクトは内部に要素リストを保持し、以下本文では単に「リスト」と呼びます。IDL属性やメソッドでリスト要素の検査・操作ができます。リストは反映コンテンツ属性や属性のアニメーション、(SVGTransformListならtransformプロパティの計算値変化)に応じて変更されます。
リストインターフェースオブジェクトは読み取り専用に指定でき、オブジェクトを変更しようとすると下記の通り例外がスローされます。animVal属性経由で反映されたリストインターフェースオブジェクトは常に読み取り専用です。
リストインターフェースオブジェクトは、以下の手順で同期されます:
リスト要素オブジェクトを切り離す場合、要素型ごとに以下の手順:
リスト要素オブジェクトを付加する場合、要素型ごとに以下の手順:
サポートされるプロパティインデックスは、リストインターフェースオブジェクトのリスト長未満のすべての非負整数です。
lengthと numberOfItemsIDL属性はリスト長を表し、取得時は単にリスト長を返します。
clearメソッドはリスト内すべての要素削除に使います。clear()呼び出し時は以下手順:
initializeメソッドはリストをクリアし指定値1つだけ追加します。initialize(newItem)呼び出し時は以下手順:
getItemメソッドは指定位置のリスト要素取得に使います。getItem(index)呼び出し時は以下手順:
リスト要素型がオブジェクト型(例:SVGLength)なら、そのオブジェクトの参照が返りコピーではない。
insertItemBeforeメソッドは指定位置に要素挿入に使います。insertItemBefore(newItem, index)呼び出し時は以下手順:
replaceItemメソッドは既存項目を新項目に置換します。replaceItem(newItem, index)呼び出し時は以下手順:
removeItemメソッドはリストから項目を除去します。removeItem(index)呼び出し時は以下手順:
appendItemメソッドはリスト末尾に項目追加に使います。appendItem(newItem)呼び出し時は以下手順:
インデックスプロパティsetterの動作はreplaceItemメソッドと同じです。
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のすべてのインターフェースメンバーの動作は、上記リストインターフェース節で定義されています。
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のすべてのインターフェースメンバーの動作は、上記リストインターフェース節で定義されています。
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のすべてのインターフェースメンバーの動作は、上記リストインターフェース節で定義されています。
以下のインターフェースは、アニメーション可能なコンテンツ属性の反映値を表現するために使用されます。
それぞれ2つの構成オブジェクトから成り、同じデータを表します:
baseVal
とanimVal
です。
baseVal
(基本値)オブジェクトは修正可能であり、対応する属性値を更新できます。
SVG 1.1では、SVG DOMインターフェースのanimVal
属性が反映属性の現在のアニメーション値を表していました。本バージョンのSVGでは、
animVal
は現在のアニメーション値を表さず、代わりにbaseVal
のエイリアスとなっています。
SVGAnimatedBooleanオブジェクトは、真偽値を取るアニメーション可能属性を反映するために使用されます。
[Exposed=Window] interface SVGAnimatedBoolean { attribute boolean baseVal; readonly attribute boolean animVal; };
baseValと animValIDL属性は、反映属性の現在の非アニメ値を表します。 baseVal またはanimVal取得時には以下手順を実行します:
baseValを設定すると、値がtrueなら反映属性は"true"、それ以外は"false"に設定されます。
SVGAnimatedEnumerationオブジェクトは、キーワード値を取るアニメーション可能属性(例:‘method’属性)や、アニメーション可能属性の値型(‘orient’属性のorientTypeIDL属性)を反映するために使用されます。
[Exposed=Window] interface SVGAnimatedEnumeration { attribute unsigned short baseVal; readonly attribute unsigned short animVal; };
SVGAnimatedEnumerationオブジェクトがキーワード値のみを取るアニメーション可能属性を反映する場合、 baseValと animValIDL属性は反映属性の現在の非アニメ値を表します。 orientTypeの場合は、反映‘orient’属性の現在の値型を表します。baseValまたは animVal取得時は以下手順を実行します:
baseValを設定するときの手順:
SVGAnimatedIntegerオブジェクトは、整数値を取るアニメーション可能属性(例:‘numOctaves’)や、整数+オプション整数(例:‘order’)属性の一部を反映するために使用されます。
SVGAnimatedIntegerインターフェースは本仕様では使われていませんが、Filter Effects仕様では多数使用例があります。
[Exposed=Window] interface SVGAnimatedInteger { attribute long baseVal; readonly attribute long animVal; };
SVGAnimatedIntegerオブジェクトが単一整数値を取るアニメーション可能属性を反映する場合、 baseValと animValIDL属性は反映属性の現在の非アニメ値を表します。 整数+オプション整数属性の場合は、その2つのうちいずれかの現在値を表します。baseValまたはanimVal取得時は以下手順を実行します:
例えば‘order’の定義では2つ目の暗黙値は1つ目と同じ。
baseVal設定時の手順:
SVGAnimatedNumberオブジェクトは、数値値を取るアニメーション可能属性(例:‘pathLength’属性)や、数値+オプション数値(例:‘kernelUnitLength’)属性の一部を反映するために使用されます。
[Exposed=Window] interface SVGAnimatedNumber { attribute float baseVal; readonly attribute float animVal; };
SVGAnimatedNumberオブジェクトが単一数値属性を反映する場合、 baseValと animValIDL属性は反映属性の現在の非アニメ値を表します。 数値+オプション数値属性の場合は、その2つのうちいずれかの現在値を表します。baseValまたはanimVal取得時は以下手順を実行します:
例えば‘kernelUnitLength’の定義では2つ目の暗黙値は1つ目と同じ。
baseVal設定時の手順:
SVGAnimatedLengthオブジェクトは、(a) <length>、<percentage>、<number>値を取るアニメーション可能属性、または(b) これらの値を取るCSSプロパティおよび対応する提示属性を反映するために使用されます。
[Exposed=Window] interface SVGAnimatedLength { [SameObject] readonly attribute SVGLength baseVal; [SameObject] readonly attribute SVGLength animVal; };
baseValと animValIDL属性は反映コンテンツ属性の現在値を表します。 baseValまたは animVal取得時は、 以下の特徴を持つSVGLengthオブジェクトを返します:
SVGAnimatedAngleオブジェクトは、orientAngleIDL属性を通じて、アニメーション可能な‘orient’属性(‘marker’要素上)の<angle>値を反映するために使用されます。
[Exposed=Window] interface SVGAnimatedAngle { [SameObject] readonly attribute SVGAngle baseVal; [SameObject] readonly attribute SVGAngle animVal; };
baseValと animValIDL属性は、反映‘orient’属性の現在の非アニメ<angle>値を表します。取得時は以下の特徴を持つSVGAngleオブジェクトを返します:
SVGAnimatedStringオブジェクトは、文字列値を取るアニメーション可能属性を反映するために使用されます。オプションで、2つ目の非推奨属性も反映するよう定義できます。
[Exposed=Window] interface SVGAnimatedString { attribute DOMString baseVal; readonly attribute DOMString animVal; };
baseValと animValIDL属性は反映属性の現在の非アニメ値を表します。 baseValまたはanimVal取得時は以下手順を実行します:
hrefメンバー(SVGURIReferenceインターフェース)は、非推奨‘xlink:href’属性が存在し‘href’属性が存在しない場合はそれを返し、それ以外は‘href’属性を返します。
baseVal設定時の手順:
hrefメンバー(SVGURIReferenceインターフェース)は、非推奨‘xlink:href’属性が存在し‘href’属性が存在しない場合はそれを設定し、それ以外は‘href’属性を設定します。
SVGAnimatedRectオブジェクトは、x、y、width、heightで指定される矩形値を取るアニメーション可能属性を反映するために使用されます。
本仕様でSVGAnimatedRectとして反映する唯一の属性は‘viewBox’です。
[Exposed=Window] interface SVGAnimatedRect { [SameObject] readonly attribute DOMRect baseVal; [SameObject] readonly attribute DOMRectReadOnly animVal; };
baseValと animValIDL属性は反映属性の現在の非アニメ矩形値を表します。baseValまたはanimVal取得時はDOMRectオブジェクトを返します。
baseValまたはanimValDOMRectオブジェクトの生成時や、その後反映コンテンツ属性が追加・削除・変更された際は以下手順を実行します:
baseValやanimValDOMRectのx座標、y座標、width、heightプロパティが変更された場合(前述アルゴリズムで属性値を反映する場合を除く)、反映コンテンツ属性は再シリアル化されなければなりません。
SVGAnimatedNumberListオブジェクトは、反映で<number>値のリストを取るアニメーション可能属性を表現するために使用されます。
[Exposed=Window] interface SVGAnimatedNumberList { [SameObject] readonly attribute SVGNumberList baseVal; [SameObject] readonly attribute SVGNumberList animVal; };
baseValと animValIDL属性は、反映属性の現在の非アニメ値を表します。baseValまたはanimVal取得時は反映属性の基本値を反映するSVGNumberListオブジェクトを返します。
SVGAnimatedLengthListオブジェクトは、反映で<length>、<percentage>、<number>値のリストを取るアニメーション可能属性を表現するために使用されます。
[Exposed=Window] interface SVGAnimatedLengthList { [SameObject] readonly attribute SVGLengthList baseVal; [SameObject] readonly attribute SVGLengthList animVal; };
baseValやanimValIDL属性は反映属性の現在の非アニメ値を表します。baseValまたはanimVal取得時は反映属性の基本値を反映するSVGLengthListオブジェクトを返します。
SVGUnitTypesインターフェースは、‘gradientUnits’、‘patternContentUnits’、その他類似属性の反映に使われる定数セットを定義します。
[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 | その他の型の値。 |
SVGTestsインターフェースは、条件付き処理属性を反映するために使われ、これらの属性をサポートする要素の他のインターフェースにミックスインされます。
interface mixin SVGTests { [SameObject] readonly attribute SVGStringList requiredExtensions; [SameObject] readonly attribute SVGStringList systemLanguage; };
requiredExtensionsIDL属性は、反映で‘requiredExtensions’コンテンツ属性に対応します。
systemLanguageIDL属性は、反映で‘systemLanguage’コンテンツ属性に対応します。
SVGFitToViewBoxインターフェースは、‘viewBox’と‘preserveAspectRatio’属性を反映するために使われ、これら2属性をサポートする要素の他のインターフェースにミックスインされます。
interface mixin SVGFitToViewBox { [SameObject] readonly attribute SVGAnimatedRect viewBox; [SameObject] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio; };
viewBoxIDL属性は、反映で‘viewBox’コンテンツ属性に対応します。
preserveAspectRatioIDL属性は、反映で‘preserveAspectRatio’コンテンツ属性に対応します。
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’属性値を表します。取得時は以下手順:
zoomAndPan設定時の手順:
SVGURIReferenceインターフェースは‘href’属性および非推奨‘xlink:href’属性を反映するために使われます。
interface mixin SVGURIReference { [SameObject] readonly attribute SVGAnimatedString href; };
hrefIDL属性は‘href’属性値、および定義要素の場合は非推奨‘xlink:href’属性値を表します。取得時は以下の特徴を持つSVGAnimatedStringオブジェクトを返します:
SVGAnimatedStringインターフェースは、baseVal・animVal経由で、非推奨‘xlink:href’属性が存在し‘href’が存在しない場合はそれを反映し、それ以外は‘href’属性を反映します。アニメーション要素はattributeName='xlink:href'を‘href’属性のエイリアスとして扱います。