3. SMIL 2.0アニメーションモジュール

3.1 導入

3.は,BasicAnimationモジュール及びSplineAnimationモジュールから構成されるSMIL 2.0アニメーションモジュールを定義する。これらのモジュールは,時間軸上にアニメーションを組み込むための要素及び属性,並びに複数のアニメーションの効果を構成するための機構を含んでいる。これらの要素及び属性がモジュールの中で定義されるので,他のマーク付け言語の設計者は,それらの言語にこの機能を含ませるかどうかを決めることができる。他のSMILモジュールを組み込む言語設計者が,アニメーション機能を必要としない場合,アニメーションモジュールを含める必要はない。

ホスト言語のための構文を含むこの規定における例は,[SMIL10][SVG][HTML4],及び[CSS2]を使う。これらは,様々なホスト言語との可能な統合を示すために与えられる。

この規定はアニメーション能力の基底集合を定義している一方で,ホスト言語が,付加的な又はより特殊化されたアニメーション要素を定義するためのサポートを,その基底集合の上に構築してもよいと仮定する。アニメーションは,ターゲット要素の属性及び特性だけをの操作する。そこで,基本的な型情報以外のターゲット要素のセマンティクスについての知識は要求しない。

このモジュールは,SMIL 2.0 BasicInlineTimingモジュールに依存し,時間軸のためにそのTimingモジュールからの要素及び属性を使う。BasicInlineTimingモジュールは,SMIL アニメーションを使用するあらゆるプロファイルのための前提条件とする。読者は,SMIL 2.0 Timingモジュールを読んでいること,及びそれに精通していることを仮定する。

3.は,最初に,SMIL 2.0におけるアニメーションの基礎原理を示し,次に,BasicAnimationモジュール及びSplineAnimationモジュールの要素及び属性を与える。

3.2 アニメーションモデル

3.2は,SMIL 2.0アニメーションモジュールに基礎を与えるセマンティクスを記述する。特定の要素は,ここでは記述せずに,むしろアニメーションのためのモデルを構成する共通の概念及び構文を記述する。文書に関する問題は,アニメーション用の要素をターゲットとする手段と同様に記述される。アニメーションモデルは,最も単純な概念から最も複雑な概念へと構築されていくことによって定義される。すなわち,最初に,単純持続時間及び単純アニメーションの関数であるf(t)を,次に,全体的な効果であるF(t,u)を示す。

3.2.1 単純アニメーション関数f(t)

アニメーションは,ターゲット要素(又はより明確には,ターゲット要素のある属性,すなわち,ターゲット属性)の時間に基づく関数として定義される。アニメーションは,ターゲット属性に対する値への時間の対応付け(写像)を定義する。この対応付けは,アニメーション固有のセマンティクスだけでなく,タイミングのすべての様相を考慮する。全体的な対応付けは,要素の単純持続時間に渡るアニメーションについて記述する単純アニメーション関数f(t)に基づく。すべてのアニメーションは,単純持続時間内のどの時間に対してもターゲット属性のために値を生成する単純アニメーション関数を定義する。

定義

ターゲット属性は,ホスト言語文書の中で定義されるとおりのターゲット要素の機能の名前とする。

これは,例えば,要素に含まれるXML属性,又は要素に適用されるCSS特性であってよい。デフォルトでは,アニメーションのターゲット要素は,アニメーション要素の親になる。(典型的には,アニメーション要素は,ターゲット要素の子になっている。)しかし,ターゲットは,文書の中の,XMLのID参照によって又はXLink[XLINK]の位置指定子参照を経由して識別された任意の要素であってもよい。

単純な例として,次に,SVGの長方形のアニメーションを定義する。その長方形は,縦長から横長へと変化する。

<rect ...>
   <animate attributeName="width" from="10px" to="100px"
            begin="0s" dur="10s" />
   <animate attributeName="height" from="100px" to="10px"
            begin="0s" dur="10s" />
</rect>

長方形は,10画素の幅で始まり,その幅は,10秒間に100画素まで増加する。同じ10秒間に,長方形の高さは,100画素から10画素まで変わる。

アニメーションが実行されているときに,DOM[DOM2]における属性値を実際に変更することは望ましくない。アニメーションの実行時環境は,DOM,又はCSSオブジェクトモデル(CSS OM)とは別に,それぞれの活動させられている(アニメーションの)属性に対するプレゼンテーション値を保持することが望ましい。実装がオブジェクトモデルをサポートしない場合には,実装は,プレゼンテーション値だけではなく,文書によって定義されるとおりの元の値も保持することが望ましい。プレゼンテーション値は,文書の表示形式に反映される。このように,アニメーションは,プレゼンテーション値を操作し,DOM又はCSS OMによって示される基底値に影響を与えないほうがよい。このことは,アニメーションサンドイッチモデルにおいて詳しく示される。

定義

時間tにおけるターゲット属性a基底値 は,時間tでアニメーションに適用されるaの値とする。

時間tにおけるターゲット属性aプレゼンテーション値 は,時間tのアニメーションのアプリケーションから生じるaの値とする。

プレゼンテーション値は,基底値におけるアニメーションへの効果を反映する。効果は,任意の与えられた時点でのターゲット属性の基底値への変化とする。アニメーションが完了する場合,アニメーションの効果は,もはや適用されず,プレゼンテーション値は,デフォルトで基底値に戻される。アニメーションの効果を延長し,fill属性のセマンティクスによって決定される時間の長さの間,最終値を凍結することもできる。

アニメーション要素は,実装によって時間上は必要に応じて評価される単純アニメーション関数 を定義する。結果として生じる値は,ターゲット属性に対するプレゼンテーション値に適用される。アニメーション関数は,時間について連続的であって,レンダリングシステムに対して適切なあらゆるフレームレートで標本化できる。単純アニメーション関数の構文的な表現は,このモデルには独立とし,様々な方法で記述されてよい。この指定におけるアニメーション要素は,離散値又は補間値の集合,SVGパスに基づく動きのためのパス構文,タイミングに基づくキーフレーム,等間隔の補間,及びこれらの機能に関する変形に対する構文をサポートする。

先ほどの例では,'from="10px" to="100px" ... dur="10s"'によって指定された幅(width)属性に対する単純アニメーション関数は,次のとおりとなる。

f(t) = (10 + 90*t/10) px
ただし,tは秒で与えられる。

単純アニメーション関数は,付加パラメタをもつ,又は純粋に若しくは部分的にアルゴリズム的である,と定義されてもよい。例えば,"to"アニメーションは,現在値から"to"の値への補間をする。

<animate attributeName="top" to="10" dur="2.5s" />

アニメーション関数は,時間の関数だけでなく現在位置の関数でもある。

F(t,u) = (u*(2.5s-t)/2.5s) + 10*(t/2.5s)

すべての場合で,アニメーションは,これを時間の関数として見せる。

定義

アニメーション要素によって定義される単純アニメーション関数は,0<=t<=dである時間tに対して定義される,時間の関数,f(t)とする。ここでdは,要素の単純持続時間とする。

単純アニメーション関数は,時間に加えて(それ以外の)要因に依存する関数として定義してもよい。これは,直前の"to"アニメーションの例で使用されたF(t,u)のように,f(t)へ付加的パラメタを単純に付加する以外には,アニメーションのモデルに影響しない。

アニメーションは,属性の基底値を上書きするか又は加算するかのいずれかをすると定義できる。この文脈では,基底値は,DOM値,又は同じ属性もターゲットとする他のアニメーションの結果であってもよい。基底値のより一般的な概念を,基礎値という。基礎値に加算していくアニメーションは,加算アニメーションという。基礎値を上書きするアニメーションは,非加算アニメーションと呼ぶ。要素のアニメーション効果関数 は,基礎値の影響を含み,要素の繰返し及び凍結を考慮する関数とする。アニメーションの効果は,繰返し及び凍結によって影響されるので,その単純持続時間ではなく要素の活性持続時間上で定義される。

アニメーションは,ターゲット属性の領域の外側で中間値を生成する方法によって組合せ可能だが,この場合,生成されたプレゼンテーション値は妥当とする。ターゲット属性の は,このより大きな集合とする。このことは,アニメーションサンドイッチモデルの中で詳述される。

定義

ターゲット属性a は,aの領域が部分集合となる基底型とする。

活性持続時間ADを用いたアニメーション要素のアニメーション効果関数F(t,u)は,時間 t(tは,0<=t<=AD)及びターゲット属性aの値uを,aの型の値の中へ写像する関数とする。

時間tにおけるアニメーション要素のターゲット属性a基礎値 uは,アニメーション効果が時間tにおいて適用されるaの値とする。

アニメーション効果関数F(t,u)は,通常は,単純アニメーション関数f(t)の関数として定義される。f(t)は,F(t,u)が正しい型の値を生成するという手法で定義されなければならない。

3.2.2 セマンティクス記述で使用する記号の要約

a
アニメーション要素のターゲット属性。
d
要素の単純持続時間。
AD
要素の活性持続時間。
t
時間。文脈に依存して,tは,利用者に知覚された時間,要素の活性持続時間,又はその単純持続時間であってよい。
u
ターゲット属性aの,一般に特定の時間tにおける基礎値。
f(t)
単純持続時間内の時間の単純アニメーション関数。F(t,u)がアニメーション全体のための写像を定義する一方で,f(t)は,単純持続時間だけを取り扱う単純化されたモデルをもつことに注意すること。
F(t,u)
アニメーションの活性持続時間の中での任意の点に対するアニメーションの効果。これは,活性持続時間(t: 0<=t<=AD)及び基礎値をターゲット属性に対する値に写像する。時間値0は,アニメーションが開始する時間に対応する。F(t,u)は,単純アニメーション関数f(t)を,アニメーション及びタイミングの制御の他のすべての側面と組み合わせる

3.2.3 アニメーションサンドイッチモデル

アニメーションが動作しているとき,実際には,それは,DOMにおける属性値を変更しない。アニメーション実行時は,理想的には,ターゲット属性が定義されている,DOM,CSS又は他のオブジェクトモデルから分離して,ターゲット属性のプレゼンテーション値を保持することが望ましい。プレゼンテーション値は,文書の表示形式に反映される。アニメーションの効果は,このプレゼンテーション値を操作することであって,基礎となるDOM又はCSS OMの値には影響を与えないこととする。

以降では,XML DOM[DOM2]及びCSS-OMの両方のために共通的な用語OMを使用する。実装がオブジェクトモデルをサポートしない場合には,実装は,理想的には,プレゼンテーション値だけでなく文書によって定義とおりの元の値も保持することが望ましい。ここでの目的のためには,この元の値をOMにおける値と等価と考えることにする。

DOMの実装の中には,記述されるとおりのプレゼンテーション値を保持することは困難又は非実用的なものもある。CSS値は,常に,記述されるとおりにサポートされることが望ましい。これは,CSS-OMがそれを行う機構を提供していることによる。一般的なXML DOM特性に対して分離されたプレゼンテーション値をサポートしない実装では,アニメーションがもはや効果をもたない場合に,少なくとも元の値を復元しなければならない。

以降では,分離されたプレゼンテーション値を使用する望ましいアプローチを仮定する。

与えられた属性に対してOM及び並行的な活性又は凍結アニメーションを考慮するモデルは,"サンドイッチ"として記述される。これは,"サブマリンサンドイッチ"(パンの長さに沿って層になった多くの肉及びチーズの断片を用いて作られた長いサンドイッチ)における肉及びチーズの層とおおよそ類似していることによる。この類似では,時間がサンドイッチの長さに関連し,各々のアニメーションは(肉及びチーズの)層に覆われるパンの長さが表現する持続時間をもっている。サンドイッチの底には,OMから得られた基底値がある。各々の活性(又は凍結)アニメーションは,この上の層とする。その層(すなわちアニメーション)は,パンの長さに沿った時間だけ及び優先度に従った順番で,サンドイッチ上に置かれる。この場合,より低い優先度のアニメーションの上により高い優先度のアニメーションが置かれる。ある与えられた時点で,サンドイッチの一つの切り口を得ることができ,アニメーションの層がどのように積み重ねられているか見ることができる。

アニメーションは,属性が定義されているOMから生じるプレゼンテーション値を操作し,文書処理の次の層にその結果の値を渡すことに注意すること。これは,正常な文書OMの処理段階を置き換えることも上書きすることもしない。

特に,XMLで定義された属性のアニメーション化を行うことによって,プレゼンテーション値は,スタイルシートの段階を通じて渡される前に,XML DOMの値を基底として修正される。スタイルシート言語の中で定義された属性のアニメーション化は,段階の残りを通じて渡されるプレゼンテーション値を修正する。

CSS2及びDOM 2 CSS-OMでは,"specified(指定された)","computed(計算された)"及び"actual(実際の)"という用語が,構文,段階,及びプレゼンテーションのレンダリングの評価結果を記述するために使用される。アニメーションが特定の要素のCSS特性に適用される場合,アニメーション化される基底値は,その要素上の(読取り専用の)getComputedStyle()メソッドを使用して読み取られる。アニメーションが生成する値は,getOverrideStyle()メソッドを使用して取得してもよい,その要素のための上書きスタイルシートに書き込まれる。これらの新しい値は,段階に影響し,新しく計算された値(及びしたがって修正されたプレゼンテーション)に反映される。これは,アニメーションの効果が,!important特性を用いた利用者規則以外のすべてのスタイルシート規則を上書きすることを意味している。これによって,!important利用者スタイル設定は,アニメーションよりも高い優先度をもつことができる。これは,アクセス可能性のためには重要な要件である。アニメーションは,文書レイアウトに関して副作用をもってもよいことに注意すること。[CSS2]6.1 "指定値,計算値及び実際値"及び[DOM2CSS]5.2.1 "上書き及び計算されたスタイルシート"を参照すること。

OM内では,各々のアニメーションが開始する時に従って,それらのアニメーションに優先度が与えられる。最初に開始したアニメーションは最も低い優先度をもち,最も最近に開始したアニメーションは最も高い優先度をもつ。二つのアニメーションが同じ瞬間に始動した場合,活性化順序(優先度)は,次のとおりに解決される。

アニメーションが再始動される場合(再始動アニメーションも参照),最も最近に活性化されたアニメーションになるにつれて,それは常に優先度リストの最上位へと移動することに注意すること。すなわち,アニメーションが再始動する場合,その層は,サンドイッチから引き出され,その最上位に戻される。対照的に,要素が繰り返される場合には,優先度は影響されない。繰返しの振舞いは,再始動としては定義されない。

各々の加算的アニメーションは,その下にあるすべてのサンドイッチ層の結果にその効果を追加する。加算的でないアニメーションは,それより下位のすべてのサンドイッチ層の結果を単に上書きする。サンドイッチの最上位にある最終結果は,文書ビューにおいて反映されなければならないプレゼンテーション値とする。

加算的アニメーションをサポートする幾つかの属性は,値のために定義された合法な範囲をもっている。例えば,不透明属性には,0と1との間の値が許される。アニメーション関数が範囲外の値を産出するかもしれない場合もある。実装は,その結果を,プレゼンテーション値に適用する前のできるだけ後に合法な範囲へと強制的に固定することが望ましい。理想的には,強制的固定化が実行される前に,与えられた点でのすべての活性又は凍結アニメーションの効果が,組み合わされることが望ましい。個々のアニメーション関数は範囲外の値を産出してもよいが,加算的アニメーションの組合せはそれでも合法であってよい。これらの場合に対するサポートは,個々のアニメーション関数の最終結果だけを強制的に固定し,個々のアニメーション関数の効果は固定しないことによって提供される。最適ではないが,必要な場合には,中間結果を強制的に固定してもよい。ホスト言語は,アニメーション化できる各々の属性に対して強制的固定化のセマンティクスを定義しなければならない。例えば,これは,animateColor要素によって定義される。

最初,与えられた属性に対するアニメーションが活性化する前,プレゼンテーション値は,文書の中で指定された元の値(OM値)と同一になっている。

与えられた属性に対するアニメーションのすべてが完了しており,関連するアニメーション効果がもはや適用されない場合,プレゼンテーション値は,再びOM値と等しくなる。アニメーションがfill="freeze"をもって定義される場合,アニメーション要素が凍結状態にある限り,アニメーションの効果が適用されることに注意すること。すなわち,プレゼンテーション値は,アニメーション効果を反映し続ける。"凍結アニメーション"も参照すること。

幾つかのアニメーション(例えば,animateMotion)は,一つの属性,又は場合によっては幾つかの属性(例えば,あるレイアウトモデルの"posX"属性及び"posY"属性)を,暗黙的に,ターゲットとする。これらのアニメーションは,影響される各属性に対する他のアニメーションと組み合わせられなければならない。したがって,例えば,animateMotionアニメーションは,(ホスト言語のレイアウトモデルに依存して)一つより多いアニメーションサンドイッチの中にあってもよい。暗黙的に属性をターゲットとするアニメーション要素に対しては,ホスト言語設計者が,どの属性が暗黙的にターゲットとされるかを指定しなければならないし,実行時は,それに応じて,それぞれの属性に対するアニメーションを組み合わせなければならない。

ターゲット属性に関する(DOMインターフェース経由の)いかなる問合せも,OM値を反映し,アニメーションの効果を反映しないことに注意すること。この場合でも,OM値は,(例えば,スクリプトを使用する)OMインタフェース経由で変更されてもよいことに注意すること。すべてのアニメーション効果が適用された後に,最終プレゼンテーション値へのアクセスを提供することは有用又は望ましいことであってもよいが,それらインタフェースは,SMILアニメーションの一部としては提供されない。将来の版では,これを議論するかもしれない。

アニメーションは,OM値を操作しないが,文書ディスプレイは,OM値への変更を反映しなければならない。ホスト言語は,OMの中で直接に属性値を操作できるスクリプト言語をサポートできる。OM値への変更が行なわれる間,アニメーションが活性又は凍結になっている場合,その振る舞いは,アニメーションが加算的と定義されるかどうか依存し,次のとおりとなる。(加算的アニメーションも参照すること。)

3.2.4 "連続メディア"としてのアニメーション要素

タイミングモデル内では,アニメーションは,"連続的"メディアとみなされる。SMILアニメーションで定義されるアニメーション要素は,自然な本来的持続時間をもたない。したがって,それらは,不定の(indefinite) 本来的持続時間を割り当てられる。

このことから,以下の様々な箇条で注意を促される幾つかの結果が生じる。特に,大部分のアニメーション要素は,dur属性を用いた明示的持続時間をもつ。これは,有限で既知の持続時間が補間のために要求されることによる。

3.2.5 アニメーション効果関数F(t,u)

先に記述されたとおり,単純アニメーション関数f(t)は,単純持続時間dに対してアニメーションを定義する。しかし,SMILタイミングは,制作者が単純持続時間を繰り返すことを許している。SMILタイミングは,活性な持続時間が完了する時にアニメーションが単に終了するのがよいかどうか,又は最後の値で凍結とするのがよいかどうかを,制作者が指定することも可能にする。SMILアニメーションは,アニメーションが凍結するとは何を意味するかを指定する。さらに,制作者は,各々のアニメーションを,他のアニメーション及び元のDOM値とどのように組み合わせるのがよいかを指定できる。

3.2.5では,アニメーションの組合せのための詳細なモデルを含む,追加機能についてのセマンティクスを示す。これは,単純アニメーション関数の上の一連の関数(構築)として提供される。

これらの関数は,単純持続時間に外側のアニメーションを記述するので,非負の時間tに対して定義される。

繰返しアニメーション

BasicInlineTimingモジュールの間隔タイミングに示されるとおり,要素を繰り返すと,その要素は順番に数回"再生される"。繰返し期間は,要素の単純持続時間に対して0とする。アニメーションは,アニメーションの"再生"は,次のモデルに従う。ただし,アニメーションの"再生"とは,単純アニメーション関数f(t)を繰り返し適用することを意味する,

定義

任意の単純アニメーション関数f(t)に対する,繰返しアニメーション関数fr(t),は,次による。

fr(t) = f( REMAINDER( t, d ) )

ただし,t>=0, dは,単純持続時間であって,REMAINDER( t, d )は,(t - d*floor(t/d))として定義される。

この定式化は,間隔タイミングに記述された終了点除外モデルに従う。アニメーションは,繰り返す度に,f(0)から始動し,標本化され,終了点f(d)まで(ただし終了点を含まない。),適用される。単純持続時間の終了点,すなわち次の反復の開始点,で,アニメーションは,戻ってf(0)から始動する。f(d)は,実際には決して適用されない。

次の例において,2.5秒のアニメーション関数は,2度繰り返される。すなわち,活性持続時間は,5秒になる。属性topは,0から(約)10まで進み,2.5秒毎に0まで戻り,り繰返す。

<animate attributeName="top" from="0" to="10" dur="2.5s"
         repeatCount="2"
/>

次の例において,アニメーション関数は,完全に2回繰り返され,さらに,その最初の半分がもう一度繰り返される。活性持続時間は,7.5秒になる。

<animate attributeName="top" from="0" to="10" dur="3s"
         repeatCount="2.5"
/>

次の例において,アニメーション関数は,合計7秒間繰り返す。それは,完全に2回再生され,2秒の素片的な部分がそれに続く。これは,2.8(回)のrepeatCountと同じになる。最後の(部分的な)反復は,範囲"0"〜"8"の中の値を適用する。

<animate attributeName="top" from="0" to="10" dur="2.5s"
         repeatDur="7s" />

次の例において,単純持続時間は,repeatDurによって指定された持続時間より長く,したがって,活性持続時間は,実効的には,単純持続時間を切り捨て短くする。しかし,アニメーション関数は,それでも指定された単純持続時間を使用する。アニメーションの効果は,5秒の経過に渡って,10〜15に対応する"top"の値を補間することとする。

<animate attributeName="top" from="10" to="20" 
         dur="10s" repeatDur="5s"
/>

単純持続時間が定義されない場合(例えば,不定の場合),繰返しの振る舞いは,定義されない(ただし,repeatDurは,それでもまだ活性持続時間を定義している)ことに注意すること。次の例において,単純持続時間は,不定とする。したがって,repeatCountは,実効的には無視される。しかし,これは,エラーとは考えない。活性持続時間も不定になる。アニメーションの効果は,単に,f(0)に対する値を使用することとし,アニメーション要素の持続時間の残りに対してfill属性の値の色を赤に設定する。

<animate attributeName="fill" from="red" to="blue" repeatCount="2" />

次の例において,単純持続時間は,不定とするが,それでもrepeatDurは,活性持続時間を決定する。アニメーションの効果は,fill属性の値の色を10秒間赤に設定する。

<animate attributeName="fill" from="red" to="blue" repeatDur="10s" />

次の例において,単純持続時間は,repeatDurによって指定された持続時間より長い。したがって,活性持続時間は,実効的には,単純持続時間を切り捨て短くする。しかし,アニメーション関数は,それでもまだ指定された単純持続時間を使用して補間する。アニメーションの効果は,7秒の経過に渡って,10〜17に対応する"top"の値を保管することとする。

<animate attributeName="top" from="10" to="20" 
         dur="10s" repeatDur="7s"
/>

繰返しアニメーションの振る舞い制御 - 累積アニメーション

繰返しアニメーションが,各反復に対して元の振る舞いを繰り返すのがよいかどうか,又は以前の結果の上に各反復を用いた蓄積を構築するのがよいかどうかを,制作者は,選択してもよい。例えば,弧を示す動き経路は,同じ弧に沿って何度もその上を動くことによって繰り返すことができるし,又はアニメーション要素をウィンドウを横切って跳ね返らせ,最後に止まった場所で各々の繰返し反復を開始することもできる。これを,累積アニメーションと呼ぶ。

定義

すべてのアニメーション要素は,累積的又は非累積的として,定義されなければならない。加算がターゲット属性に対して定義される場合にだけ,アニメーション要素を累積的と定義してよい。単純アニメーション関数 f(t) に対する累積アニメーション関数 fc(t) は,次のとおりとする。

要素が非累積的である場合。 fc(t) = fr(t)

要素が累積的である場合。

fi(t)が,与えられた反復 i に対する累積アニメーション関数を表すとする。

最初の反復f0(t)は,accumulateによって影響されないので,元の単純アニメーション関数の定義と同じになる。その後の各反復は,以前の反復の結果に加算される。

f0(t) = f(t)

i > 0 となる任意の整数に対して, fi(t) = (f(d) * i) + f(t - (i*d))  

このとき,累積アニメーション関数は,次のとおりとする。

fc(t) = fi(t)    ただし,i = floor(t/d)

f(d)*i + f(0)において,fi+1(t)が始動することに注意すること。跳越しを回避するために,制作者は,通常は,0で始動するアニメーション関数を選ぶ。

例えば,(animateMotion要素の中で詳しく示されている)単純な弧のための経路記法を,跳返りの動きを記述するために使用できる。

<img ...>
   <animateMotion path="m 0 0 c 30 50 70 50 100 0 z"
dur="5s"
accumulate="sum" repeatCount="4"
/>
</img>

画像は,5秒の経過に渡って,弧に沿って元の位置から移動する。アニメーションは,繰り返す度に,以前の値に基づいて構築され,図3.1で例示されるとおり,最初の弧が終了した場所で,第2の弧を開始する。この方法で,画像は,スクリーンを横切って"跳ね返る"。同じアニメーションを四つの弧をもつ一つの完全な経路として記述することのできるが,一般の場合,経路記述が,編集するためには非常に大きく及び厄介になる可能性がある。

図3.1 accumulate="sum"を用いた繰返しアニメーションの実例

Diagram showing accumlating animation

図3.1は,累積繰返しアニメーションを示す。各繰返し反復は,その一つ前の反復に基づいて構築される。

累積アニメーションは,単一アニメーションが繰り返される度に単純アニメーション関数の結果をどのように蓄積するかだけを制御することに注意すること。それは,特に,プレゼンテーション値を生成するために,あるアニメーションが他のアニメーションとどのように相互作用するかを制御はしない。この振る舞いは,加算的アニメーションで記述される。同様に,要素が再始動する場合,最初の動作からの蓄積は,2番目の動作に適用されない。再始動アニメーションを参照すること。

加算をサポートするいかなる数値属性も累積アニメーションをサポートできる。例えば,50秒で100画素だけSVGの<rect>要素の"width"(幅)を成長させる"脈動する"アニメーションを定義できる。

<rect width="20px"...>
   <animate attributeName="width" dur="5s"
values="0; 15; 10" additive="sum"
accumulate="sum" repeatCount="10"
/>
</rect>

各単純持続時間において,長方形の幅は,15画素だけ膨れ上がり,最終的に最初と比べて10画素だけ大きくなる。その形は,最初は20画素の幅だが,5秒後に30画素の幅になる。アニメーションは繰返し,以前の値に基づいて構築される。今回は,その形は,45画素まで膨れ上がり,10秒後に40画素の幅になって終了する。10回すべて繰り返した後には,結局,120(=20+100)画素の幅になる。

凍結アニメーション

アニメーション要素は,タイミングモジュールの中のfillの定義に従う。ここでは,アニメーション指定のセマンティクスを取り扱うためにその規定を拡張する。

アニメーション要素が終了する場合,デフォルトによって,その効果は,ターゲット属性に対するプレゼンテーション値にもはや適用されない。例えば,アニメーションが画像を動かし,アニメーション要素が終了する場合,画像は,その元の位置へと"跳び戻る"。

<img top="3" ...>
   <animate begin="5s" dur="10s"
attributeName="top" by="100"/>
</img>

図3.2で示すとおり,画像は,3の"top"値で5秒間静止し,次に10秒の間に100画素だけ下へ移動する。文書が開始して15秒後にアニメーションは終了し,その効果はもはや適用されず,画像は103から始動場所の3(すなわち,top属性の基礎DOM値)へと跳び戻る。

図3.2 凍結のないアニメーションの実例

Diagram showing an animation with default fill.

図3.2は,凍結のない単純アニメーションを示す。animate要素の終了後に,アニメーションの効果は取り除かれる。

fill属性は,アニメーション要素の活性持続時間が終了した後,アニメーションの値を保持するために使用できる。

<img top="3" ...>
   <animate begin= "5s" dur="10s"
attributeName="top" by="100"
fill="freeze" />
</img>

文書が開始してから15秒後に,アニメーションは終了する。しかし,画像は103の"top"値に残る(図3.3)。属性は,凍結効果の持続時間の間,アニメーションの最後の値を凍結する。この持続時間は,時間コンテナによって制御される。(詳細については,SMILタイミング及び同期を参照すること。)

図3.3 fill="freeze"をもつアニメーションの実例

Diagram showing a frozen animation.

図3.3は,単純凍結アニメーションを示す。animate要素の終了後に,アニメーションの効果は保持される。

活性持続時間が単純持続時間を短くする場合(これには部分的な繰返しも含まれる。),凍結されたアニメーションの効果値は,短くされた単純持続時間によって定義される。次の例において,単純アニメーション関数は,完全に2回繰り返し,さらに単純持続時間の半分をもう一度繰り返す。この場合,凍結されている間の値は,53となる。

<img top="3" ...>
   <animate begin= "5s" dur="10s"
attributeName="top" by="100"
repeatCount="2.5"
fill="freeze" />
</img>

図3.4 部分的なrepeatfill="freeze"とを組み合わせるアニメーションの実例

Diagram showing an animation with a partial repeat and freezing.

次の例では,dur属性が失われており,したがって,単純持続時間は不定になる。活性持続時間は,endによって10秒と制約される。補間は定義されておらず,凍結されている間の値は,from値の10となる。

<animate from="10" to="20"
end="10s" fill="freeze" .../> 

これを形式的に述べると次のとおりとなる。

定義

凍結アニメーション関数 ff(t)は,活性持続時間AD0<=t<=AD,をもつ要素に対して,次のとおりとする。

0<=t<AD となるすべての時間tに対しては,ff(t) = fc(t) とする。

ADが単純持続時間dの倍数でない場合,

ff(AD) = fc(AD) とする。

ADdの倍数(すなわち,ある正の整数iに対してAD = d*i)であって,アニメーションが非累積的な場合,

ff(AD) = f(d) とする。

ADdの倍数(すなわち,ある正の整数iに対してAD = d*i)であって,アニメーションが累積的な場合,

ff(AD) = f(d) * i とする

3.2.6 加算的アニメーション

単一のアニメーションの値の繰返し及び蓄積に加えて,アニメーションは,絶対値ではなく属性値への差分として表現してもよい。これは,基礎的なDOM値を修正するために単一のアニメーションの中で使用できる。複雑なアニメーションは,幾つかの単純アニメーションを組み合わせることによって制作できる。

例えば,単純な"grow"アニメーションは,10画素だけ,オブジェクトの幅を増加できる。

<rect width="20px" ...>
   <animate attributeName="width"
from="0px" to="10px" dur="10s"
additive="sum"/>
</rect>

幅は,20画素で開始し,10秒の経過に渡って,30画素まで増加する。アニメーションが非加算と宣言されていた場合には,同じfrom値及びto値によって,幅は,10秒間に0画素から10画素までになる。

多くの複雑なアニメーションは,より単純アニメーションの組合せとして最もよく表現される。例えば,"振動する"経路は,他の運動に追加された上下運動の繰返しとして記述できる。

<img ...>
   <animateMotion from="0,0" to="100,0"
dur="10s" />
   <animateMotion values="0,0; 0,5; 0,0"
dur="1s"
repeatDur="10s"
additive="sum"/>
</img>

アニメーション効果関数は,単純アニメーション要素に対するこれのセマンティクスを捕らえている。

定義

単純持続時間x及び活性持続時間yをもつアニメーション要素に対するアニメーション効果関数 F(t,u) は,t(0<=t<=AD)及びu(アニメーションのターゲット属性の型の値)をその同じ型へと写像する関数とする。

すべてのアニメーション要素は,加算的又は非加算的のいずれかとして定義されなければならない。加算がターゲット属性の型に対して定義される場合にだけ,要素は,加算的として定義してよい。

アニメーションが加算的である場合, F(t,u) = u + ff(t) とする。

アニメーションが非加算的である場合, F(t,u) = ff(t) とする。

一つの与えられた属性に対して定義された複数のアニメーションがある瞬間に重複する場合,その二つは,一緒になり加算されるか,又は片方が他方を上書きするかのいずれかとする。アニメーションが同じ瞬間に両方とも活性又は凍結のいずれかとなる場合,アニメーションは重複する。アニメーションの順序付け(例えば,どのアニメーションがどのアニメーションを上書きするか)は,各々のアニメーションと関連する優先度によって決定される。各々のアニメーションが開始する時点に従って,それらは,優先度を付けられる。最初に開始されたアニメーションは,最低の優先度をもち,最も最近に開始されたアニメーションは,最高の優先度をもつ。

加算的でないより高い優先度のアニメーションは,すべてのそれよりも早く開始された(より低い優先度の)アニメーションを上書きし,単にその属性値を設定する。加算的アニメーションは,より早く活性化されたアニメーションの結果に適用される(すなわち,加算される)。アニメーションがどのように組み合わせられるかに関する詳細については,アニメーションサンドイッチモデルを参照すること。

加算的アニメーションは,数値属性,及び加算関数が定義される他のデータ型に対して定義される。これには,位置,幅及び高さ,サイズなどといった概念のための数値属性が含まれる。さらに,これには,色(animateColor要素参照)も含まれ,ホスト言語が指定するとおりの他のデータ型が含まれてもよい。

例えば,お互いに基づいて構築されることが望ましい一連の運動が定義される場合,加算的アニメーション及びfill振る舞いの組合せが有用となる場合が多い。

<img ...>
   <animateMotion begin="0" dur="5s"
path="[some path]"
additive="sum" fill="freeze" />
   <animateMotion begin="5s" dur="5s"
path="[some path]"
additive="sum" fill="freeze" />
   <animateMotion begin="10s" dur="5s"
path="[some path]"
additive="sum" fill="freeze" />
</img>

画像は,最初の経路に沿って移動し,次に最初の経路の最後から2番目の経路を始動し,さらに2番目の経路の最後から3番目の経路に従って動き,最終点で留まる。

数値属性のアニメーションの多くは加算的だが,常にそうであるわけではない。非加算的と定義されるアニメーションの例として,オブジェクトにマウスを追跡させる拡張アニメーション"mouseFollow"を考える。

<img ...>
<animateMotion dur="10s" repeatDur="indefinite"
path="[some nice path]" />
<mouseFollow begin="mouseover" dur="5s"
additive="replace"
fill="remove" />
</img>

このマウスを追跡するアニメーションは,画像上で5秒間いつでも利用者マウスを追いかける。それは,加算的であってはならず,単に何らかの普通ではない方法で動きの経路をずらす。活性化してる間,mouseFollowは,animateMotionを上書きする必要がある。mouseFollowが完了する時,その効果は,もはや適用されず,animateMotionは,再び位置に対するプレゼンテーション値を制御する。

さらに,(例えば電話番号属性など,)数値属性の中には,加算をサポートしてはならないものもある。どの属性が加算的アニメーションをサポートするかを指定するのは,ホスト言語に任される。文字列及び論理型(Boolean)といった加算が定義されない属性型は,加算的アニメーションをサポートできない。

加算的及び累積的なアニメーション

accumulate属性を,additive属性と混同しないほうがよい。additive属性は,あるアニメーションを他のアニメーション及び属性の基底値と組み合わせる方法を定義する。accumulate属性は,単純アニメーション関数が反復繰返しに渡ってそれ自体と相互作用する方法を定義する。

通常,制作者は,(先のaccumulateに対して示された例におけるとおりに,)累積アニメーションは加算的であると期待するが,これは必須ではない。次の例は,累積的だが加算的ではない。

<img ...>
<animate dur="10s" repeatDur="indefinite"
attributeName="top" from="20"
by="10"
additive="replace" accumulate="sum"
/>
</img>

このアニメーションは,"top"に対して設定されている元の値が何であっても上書きし,値20で開始する。それは,10画素だけ30まで下へ移動し,それを繰り返す。これは累積的であって,したがって,2回目の反復は50(一つ前の反復からの値30にfrom値20を加えたもの)で始動し,もう一回10画素60まで下へ移動し,それらが続く。

累積アニメーションが加算的でもあると定義される場合,二つの機能(累積性及び加算性)は,正常に機能する。F(t,u)に対する蓄積された効果は,アニメーションに対する値として使用され,ターゲット属性に対する基礎値に加算される。次に例を示す。

<img top="10" ... >
<animate dur="10s" repeatdur="indefinite"

attributename="top" from="20"
by="10"

additive="sum"
accumulate="sum" />
</img>

アニメーションは,"top"に対して設定されている元の値10に(20を)加算し,値30で開始する。それは,10画素だけ40まで下へ移動し,それを繰り返す。これは累積的であって,したがって,2回目の反復は60(一つ前の反復からの値40に20を加えたもの)で始動し,もう一回10画素だけ70まで下へ移動し,それらが続く。

アニメーションサンドイッチモデルも参照すること。

3.2.7 再始動アニメーション

アニメーション要素は,SMIL Timing モジュールにおける再始動の定義に従う。

アニメーションが再始動する場合,その意味は,それよりも前の振る舞いとは無関係に,これがアニメーションが開始した最初の回であるものとして振る舞うと定義する。アニメーション効果関数F(t,u)は,再始動の振る舞いとは無関係に定義される。より早い時点で再生しているアニメーションのいかなる効果ももはや適用されず,現在のアニメーション効果F(t,u)だけが適用される。

加算的アニメーションが,活性又は凍結の状態にある間に,再始動される場合,アニメーションの以前の効果(すなわち再始動の前の効果)は,もはや属性に適用されない。累積アニメーションは,アニメーションの活性持続時間内でだけ定義されることに特に注意すること。アニメーションが再始動する場合,すべての蓄積された内容は廃棄され,アニメーション効果F(t,u)は,再始動された活性持続時間の最初の反復から再び蓄積を開始する。

3.2.8 アニメーション関数値の詳細

多くのアニメーションは,時間の渡って適用される値の列として単純アニメーション関数f(t)を指定する。属性の幾つかの型(例えば,数)に対しては,値の間の補間関数について記述することも可能とする。

値を記述する単純形式として,アニメーション要素は,from値及びto値を指定できる。属性が補間をサポートする値(例えば,数)をとる場合,単純持続時間の経過に渡って,from及びtoによって定義された範囲の中で値を補間できる。この変形として,to値の代わりに,by値を使い,属性への加算的な変更を示すこともある。

より複雑な形式は,値のリスト,又は運動のための経路記述さえも指定する。制作者は,"keyframe"アニメーションを記述するために値のタイミングも制御し,さらに,より複雑な関数をも制御できる。

すべての場合に,アニメーション効果関数 F(t,u) は,ターゲット属性に対する文法に合った値を産出しなければならない。次に,値の三つのクラスを示す。

  1. 単位なしスカラ値。 これは,意味的制約なしに構文解析され設定できる単純スカラ値とする。このクラスは,(10を基数とする)整数及び(フォーマットはホスト言語によって指定される)浮動小数点数を含む。
  2. 文字列値。 これは,単純文字列とする。
  3. 言語抽象値。 これは,より複雑な構文解析を必要とするが,補間可能な値を産出できる,CSS-length値及びCSS-angle値のような値とする。

animate要素は,単位なしスカラ値を補間でき,animate要素及びset要素の両方は,ターゲット要素又はターゲット属性の意味的な知識なしに文字列値を取り扱うことができる。animate要素及びset要素は,単位なしスカラ値及び文字列値をサポートしなければならない。ホスト言語は,これらの要素がどの付加的言語抽象値を取り扱うのがよいかを定義しなければならない。animateColor要素が色値に対する抽象値を暗黙的に取り扱い,animateMotion要素が位置及び経路の値を暗黙的に取り扱うことに注意すること。

ある種の単位又は限定子をもつ数値(例えば,"10画素","2.3フィート","2.99ドル"など)を定義する属性の補間をサポートするためには,これらの値を構文解析し補間するための追加的サポートが必要になる。アニメーションフレームワークが単位限定された値の型について組込み知識をもっていると要求する可能性がある。しかし,これは,カプセル化の原理に違反し,この形式の新しい属性値型を定義するXML言語へとCSSを越えて拡張することはできない。

推薦するアプローチは,与えられたホスト環境に対するアニメーション実装が,言語抽象値の取扱いを抽象する次の二つのインターフェースをサポートすることとする。これらのインターフェースは,形式的には規定せず,単に次のとおりとする。

  1. 最初のインターフェースは,文字列(アニメーション関数値)を単位なし正準的数(整数値又は浮動小数点値)に変換する。これによって,アニメーション要素は,CSS-lengthといったデータ型の特定知識を要求することなしに,値の間を補間できるようになる。このインターフェースは,文法に合った抽象値を決定するために,ターゲット属性への参照を要求することが多い。渡された文字列が単位なしスカラに変換できない場合,アニメーション要素は,そのアニメーション関数値を文字列として取り扱い,calcModeは,デフォルトで"discrete"とする。
  2. 2番目のインターフェースは,単位なし正準数をターゲット属性のための文法に合った文字列値へと変換する。例えば,これは,単に数を文字列へと変換し,正準的単位のための添え字を(後ろに)追加してもよい。アニメーション要素は,実際にプレゼンテーション値を設定するためにこの結果を使用する。

これらの二つのインターフェースのサポートは,アニメーションエンジンが,パーサ,及び言語抽象値に関連する付加的な意味的な論理を複製しなくてよいことを保証する。

これらのことは,実装がこのサポートを提供する方法を規定する試みではなく,むしろ,値が解釈される方法に対する要件とする。例えば,アニメーションの振る舞いが,すべてのCSS-lengthの単位を理解し,それらの間の変換を実行できなければならないのは望ましくない。さらに,この機構は,言語のための実装が属性値に対する構文解析及び変換のサポートを提供できる場合,アニメーションの新しいXML言語への適用を考慮している。

こうした推奨にもかかわらず,特定の単位空間で値を補間し,正準的単位ではなく指定された単位を使用して結果を適用することが,有用な場合がある。これは,CSSが定義するような相対的単位(例えばem単位)に対して,特に正しい。アニメーションが同じ単位ですべての値を指定する場合,実装は,単位空間での補間に関連する構文の知識を使用し,正準的単位ではなく指定された単位を用いて,アニメーションサンドイッチ内の結果を適用してもよい。先に注意したとおり,この解決は,一般的な場合へと拡張できない。しかし,(CSS特性といった)ある適用においては,このアプローチをとることが望ましいこともある。

補間及び不定単純持続時間

アニメーションの単純持続時間が不定の場合(例えば,dur値が指定されない場合),補間は,一般に意味がない。定義された単純持続時間に基づかないアニメーション関数を定義するは可能だが(例えば,何らかの乱数アルゴリズムによる場合),大部分のアニメーションは,単純持続時間を用いて関数を定義する。アニメーション関数が単純持続時間を用いて定義されていて,単純持続時間が不定の場合,アニメーション関数(すなわち,f(0))の最初の値が,アニメーション関数のために(実効的には定数として)使用されることが望ましい。

3.3 SMIL 2.0 BasicAnimationモジュールの概要

SMIL 2.0 BasicAnimationモジュールは,次を提供する。

BasicAnimationは,アニメーションモデルの箇条で示すモデルに従う属性及び要素を定義する。

3.4 SMIL 2.0 BasicAnimationモジュールの共通属性

BasicAnimationモジュールの要素は,ターゲット属性を識別するために使用する属性を共通的にもち,さらに,あまり普遍的ではないが,アニメーション関数を指定する属性をもつ。

3.4.1 アニメーションターゲットの指定

アニメーションターゲットは,特別な要素の特定の属性として定義される。ターゲット属性及びターゲット要素を指定することの意味を,3.4.1で詳細に示す。

ターゲット属性

アニメーション化されるターゲット属性は,attributeNameを用いて指定される。この属性の値は,ホスト言語によって定義されるとおりの,ターゲット属性の名前を指定する文字列とする。

アニメーション化できる要素の属性は,異なる言語によって及び/又は異なる名前空間の中で定義されることが多い。例えば,多くのXMLアプリケーションにおいて,要素の位置(これは,典型的なターゲット属性である。)は,XML属性ではなくCSS特性として定義される。同じ属性名が,二つ以上の言語又は名前空間における属性又は特性と関連付けられる場合がある。制作者が名前対応付けをあいまい性なしに行えるために,意図する名前空間を指定する追加属性attributeTypeが,提供される。

attributeType属性は,オプションとする。デフォルトで,アニメーション実行時(プロセス)は,次の規則に従って名前を解決する。名前の衝突が存在せずattributeTypeが指定されていない場合には,ホスト言語によってサポートされるCSS特性のリストを,(CSSがホスト言語でサポートされている場合,)最初に照合する。CSSの照合が成功しない場合(,又はCSSが適用されない場合),ターゲット要素に対するデフォルト名前空間が照合される。

ターゲット属性がターゲット要素のためのデフォルトの名前空間ではなくXML名前空間の中で定義されている場合,制作者は,アニメーション要素の有効範囲の中で定義されているとおりの関連する名前空間接頭語を使用して,ターゲット属性の名前空間を指定しなければならない。その接頭語は,attributeNameのための値の前に置かれる。

XML名前空間に関するより詳しい情報については,[XML-NS]を参照すること。

ターゲット属性に関する属性
attributeName
ターゲット属性の名前を指定する。属性に対するXML名前空間を示すために,xmlns接頭辞を使用してもよい[XML-NS]。その接頭辞は,アニメーション要素の有効範囲の中で解釈される。
 
attributeType
ターゲット属性及びその関連した値が定義される名前空間を指定する。その属性値は,次のうちの一つとする。ただし,値は,大文字・小文字を区別する。
CSS
これは,attributeNameの値が,ホスト文書に対して定義されているとおりのCSS特性の名前であることを指定する。この値は,CSSをサポートするホスト言語環境の中だけで意味がある。
XML
これは,"attributeName"の値が,ターゲット要素に対するデフォルトのXML名前空間の中で定義されるXML属性の名前であることを指定する。attributeNameの値がXMLNS接頭辞をもっている場合,実装は,アニメーション要素の有効範囲の中で定義されるとおりの関連する名前空間を使わなければならない。
auto
実装は,attributeNameをターゲット要素のための属性と照合することが望ましい。実装は,照合する特性名を求めて最初にCSS特性のリストを検索しなければならない。見つからない場合には,その要素に対するデフォルトXML名前空間を検索しなければならない。
これを,デフォルトとする。

ターゲット要素

アニメーション要素は,アニメーションのターゲット要素を,明示的又は暗黙的のいずれかで定義できる。明示的な定義は,ターゲット要素を指定するために属性を使用する。このための構文を以下で示す。

明示的なターゲットが指定されない場合,暗示的なターゲット要素は,文書木のアニメーション要素の親要素とする。アニメーション要素はアニメーション化される要素の子として宣言されるのが共通的と期待される。この場合,明示的なターゲットを指定する必要はない。

明示的なターゲット要素の参照が解決できない場合(例えば,そのような要素が存在しない場合),そのアニメーションは,効果をもたない。さらに,その(明示的又は暗黙的のいずれかの)ターゲット要素が指定されたターゲット属性をサポートしていない場合,そのアニメーションは,効果をもたない。構文エラーの取扱いを参照すること。

次の二つの属性は,ターゲット要素を明示的に識別するために使用できる。

ターゲット要素に関する属性
targetElement
この属性は,アニメーション化するターゲット要素を指定する。その属性値は,ホスト文書内の要素のXML識別子属性(例えば,"IDREF")の値でなければならない。IDREFの形式的定義については,XML 1.0 [XML10]を参照すること。
href
この属性は,アニメーション化するターゲット要素を指定する。その属性値は,アニメーション化するターゲット要素を参照しているXLink位置指定子でなければならない。

アニメーション要素をホスト言語に統合する場合,言語設計者は,これらの属性の両方を含めることは避けるほうがよい。しかし,ホスト言語設計者がホスト言語の中に両方の属性を含めることを選択する場合,一つの与えられたアニメーション要素に対して両方を指定するときには,XLinkのhref属性が,targetElement属性よりも高い優先度をもつとする。

targetElement属性を使用する利点は,その属性値の構文が,hrefと比較して単純なことにある。XLinkhref属性を使用する利点は,それがSMILアニメーションの将来の版における完全なリンク付け機構へと拡張可能なこと,及びそのアニメーション要素が一般的なXLinkプロセサによって処理可能なことにある。XLink形式は,それら参照すべてのためにXLinkを使うように設計されたホスト言語に対しても提供される。次の二つの例は,この二つのアプローチを示している。

次の例は,より単純なtargetElement構文を使用している。

<animate targetElement="foo" attributeName="bar" .../> 

次の例は,等価なターゲットを用いて,より柔軟なXLink位置指定子構文を使用している。

<foo xmlns:xlink="http://www.w3.org/1999/xlink">
   ...
   <animate xlink:href="#foo" attributeName="bar" .../>
   ...
</foo>

アニメーション要素上でXLink href属性を使う場合,次の付加的なXlink属性をホスト言語で定義する必要がある。これらの属性は,DTDの中で定義してもよいし,ホスト言語が一般的なXLinkプロセサをサポートするために文書構文の中で要求してもよい。より多くの情報については,[XLINK]を参照すること。

次のXLink属性は,XLink規定によって要求される。その値は,固定的であって,したがって,DTDなどの中で指定されてよい。他のすべてのXLink属性はオプションであって,SMILアニメーションセマンティクスに影響を与えない。

hrefのためのXLink属性
type
simpleとしなければならない。使用しているXLinkの型を識別する。
actuate
onLoadとしなければならない。ターゲット要素へのリンクが(例えば利用者の動作なしに)自動的にたどられることを示す。
show
embedとしなければならない。参照がファイルの中に追加内容を含まないことを示す。

ホスト文書及び言語と関係するターゲット要素指定に関する追加の詳細は,アニメーションターゲットに関して要求される定義及び制限で示される。

3.4.2 単純アニメーション関数f(t)の指定

すべてのアニメーション関数は,特定の瞬間における属性の値を定義する。アニメーション関数が定義されている時間範囲を,単純持続時間とする。アニメーション関数は,0から単純持続時間までの範囲の外部の時間に対しては,定義された結果を生成しない。

アニメーションは,のリスト,又はfrom値,to値及びby値を記述した単純な形式のいずれかとして記述される。from,to及びbyの形式は,from,to及びbyによって定義される単純アニメーション関数で定義される。

単純アニメーション関数に関する属性
values
一つ以上の値をセミコロンで区切ったリスト。その各々の値は,指定された属性に対して文法に合った値でなければならない。ベクトル値の属性は,attributeType領域のベクトル構文を使用してサポートされる。先行又は後続する空白,及びセミコロンの区切り子の前後の空白は,無視される。

値が文法に合っていない場合,アニメーションは,無効となる(構文エラーの取扱いも参照)。

calcMode
アニメーションの補間モードを指定する。ターゲット属性が線形補間をサポートしていない場合(例えば文字列の場合),又はvalues属性が一つの値だけをもつ場合,calcMode属性は無視され,discrete補間が使用される。calcMode属性は,次の値を取ることができる。
discrete
これは,アニメーション関数がいかなる補間もなしにある値から次の値へと跳び越すことを指定する。
linear
値の間の単純な線形補間が,アニメーション関数を計算するために使用される。
これは,デフォルトとする。
paced
アニメーションに渡って一定の変化率を生成する補間を定義する。これは,線形な数値範囲を定義する値であって,点の間の"距離"について何らかの概念(位置,幅,高さなど)を計算できる場合にだけ,サポートされる。

アニメーションは,その経過に渡って順番に値を適用する。discreteを指定されているアニメーション及びlinearを指定されているアニメーションに対しては,values属性における値は,アニメーションの持続時間を通じて(時間的に)等しく配置される。pacedが指定されているアニメーションに対しては,その値は,一定な変化率が得られるように配置される。

values構文を使った次の例は,10秒の経過に渡って,SVG形状の幅をアニメーション化しており,幅を40から100まで補間し,その後40に戻る。

<rect ...>
   <animate attributeName="width" 
values="40;100;40" dur="10s"/>
</rect>

この例のための単純アニメーション関数(時間は秒単位)は,次のとおり。

f(t) = 40 + 60*t/5,       0 <= t < 5,
f(t) = 100 - 60*(t-5)/5,  5 <= t <= 10

values属性及びcalcMode属性によって定義される単純アニメーション関数は,形式的には,次のとおりとできる。

定義

i = floor((t*n)/d)dはアニメーション要素の単純持続時間,nvalues属性のエントリの数,及びvalue[i]は(0から数えた)i番目のエントリとする。

最初の値が最後の値として繰り返される場合,線形な又は一定変化率のアニメーションは,滑らかに閉じたループとなることに注意すること。

補間モードによる描画

次の三つの図3.5a,図3.5b,及び図3.5cは,異なる補間モードを与えた場合に,同じ基本アニメーションが時間の経過でどのように値を変化さるかを示す。すべての例は,次の例に基づいているが,calcModeに異なる値を与えている。

<animate dur="30s" values="0; 6; 5; 11; 10; 16" calcMode="[as specified]" />

図3.5 離散(discrete),線形(linear)及び一定変化率(paced)のアニメーション
Diagram of linear
        interpolation

図3.5a デフォルトの離散アニメーション

calcMode="discrete"

等しい持続時間の六つの区分が存在する。値ごとに一つの区分がある。

Diagram of linear interpolation

図3.5b デフォルトの線形アニメーション.

calcMode="linear"

等しい持続時間の五つの区分が存在する。n個の値に対してn-1個の区分がある。

Diagram of linear interpolation

図3.5c デフォルトの一定変化率アニメーション

calcMode="paced"

変化する持続時間の五つの区分が存在する。n個の値に対してn-1個の区分があり,その値において一定の変化率を生じるように計算されている。

calcModeの例

次の例は,単純離散アニメーションを記述している。

<animate attributeName="foo" dur="8s" 
     values="bar; fun; far; boo" />

属性"foo"の値は,各2秒間に,それぞれの四つの文字列に設定される。文字列の値は補間できないので,離散アニメーションだけが可能になる。いかなるcalcMode属性も無視される。

次の例は,単純線形アニメーションを記述している。

<animate attributeName="x" dur="10s" values="0; 10; 100" 
     calcMode="linear"/>

この例での"x"の値は,最初の5秒で0から10まで変化し,それから次の5秒で10から100まで変化する。values属性における値は,時間的に一定の間隔となるように配置されていることに注意すること。この場合,その結果は,アニメーションの後半の間に,値において非常に大きな実際的変化を生じている。"一定変化率(paced)"補間を使うように変更された次の例とこれを比較すること。

<animate attributeName="x" dur="10s" values="0; 10; 100" 
     calcMode="paced"/>

この例では,属性"x"の変化を一定変化率で行うために,値リストによって定義された2番目の区分が,単純持続時間の大部分を獲得する。"x"の値は,最初の1秒で0から10まで変化し,それから次の9秒で10から100まで変化する。この例は,一定変化率補間を用いずにfrom-toを使ったアニメーションとして簡単に制作できるが,(動き経路などの)多くの例では,calcModeに対してpaced値を用いずに制作することは非常に難しい。

3.4.3 アニメーション効果関数F(t,u)の指定

3.2.5 アニメーション効果関数F(t,u)で示したとおり,単純アニメーション関数は,次のとおりであってよい。

3.2.5 アニメーション効果関数F(t,u)は,これらの属性のセマンティクスを定義し,例を与えている。3.4.3では,その構文だけを与える。

repeatCount属性,repeatDur属性及びfill属性の定義については,BasicInlineTimingモジュ-ルを参照すること。

繰返しアニメーションの加算的及び累積的振る舞いは,それぞれ,additive属性及びaccumulate属性を用いて制御される。

アニメーション効果関数に関する属性
accumulate
アニメーションが累積的かどうかを制御する。次の二つの値のいずれか一つとなってよい。
sum
アニメーションは累積的と指定する。すなわち,最初以外の各々の繰返し反復は,一つ前の反復の最終値に基づいて構築される。
none
アニメーションは非累積的と指定する。すなわち,繰返し反復は,単に,アニメーション関数f(t)を繰り返す。
これをデフォルトとする。
ターゲット属性の値が加算をサポートしていない場合,又はアニメーション要素が繰り返さない場合,この属性は,無視される。
additive
アニメーションが加算的かどうかを指定する。
sum
アニメーションは加算的と指定する。すなわち,アニメーションは,属性の基礎値及び他のより優先度が低いアニメーションに加算される。
replace
アニメーションは非加算的と指定する。すなわち,アニメーションは,属性の基礎値及び他のより優先度の低いアニメーションを上書きする。
これがデフォルトとする。
ターゲット属性が加算的アニメーションをサポートしない場合,その属性は,無視される。

3.4.4 from,to及びbyによって指定される単純アニメーション関数

アニメーションは,先に示したとおりのvaluesのリストとして,又はfromto及びbyの値を使う単純化された形式のいずれかで,記述される。

単純アニメーション関数のfrom属性,to属性及びby属性
from
アニメーションの始動値を指定する。その値は,指定された属性に対する文法に合った値でなければならない。values属性が指定されている場合には,無視される。
to
アニメーションの終了値を指定する。その値は,指定された属性に対する文法に合った値でなければならない。values属性が指定されている場合には,無視される。
by
アニメーションのための相対的オフセット値を指定する。その値は,attributeType領域への加算が定義されattributeType領域に値を産出するために,領域の文法に合った値でなければならない。values属性が指定されている場合には,無視される。

より単純なfromto及びbyの構文は,幾つかの変形のために用意されている。これらの変形の一つを使うためには,by又はtoのうちの一つを指定しなければならない。from値は,オプションとする。by属性及びto属性の両方を指定するのは,文法に合わない。両方が指定された場合には,to属性だけが使われる。by属性は,無視される。属性の組合せは,次のアニメーションのクラスを与える。

from-toアニメーション
from値及びto値を指定することによって,単純アニメーションの定義をする。そのアニメーション関数は,from値で始動し,to値で終了すると定義される。

定義
fromvf及びtovtをもつfrom-toアニメーションは,vf及びvtの二つの値をもつvaluesリストを用いた同じアニメーションに等価とする。


from-byアニメーション
from値及びby値を指定することによって,単純アニメーションを定義する。そのアニメーション関数は,from値で始動し,by属性を用いて指定される差分だけ単純持続時間の経過に渡って変化すると定義される。これは,加算をサポートする属性(例えば,大部分の数値属性)だけを用いて使用してよい。

定義
fromvf及びbyvbをもつfrom-byアニメーションは,vf及び(vf+vb)の二つの値をもつvaluesリストを用いた同じアニメーションに等価する。


byアニメーション
by値だけの指定は,アニメーション関数が属性の基礎値を与えられたオフセット分だけずらすと定義される単純アニメーションを定義する。そのオフセットには,単純持続時間の経過に渡って変化する差分を使い,差分0から始動して,by属性を用いて指定される差分で終了する。これは,加算的アニメーションをサポートする属性だけ用いて使用してよい。

定義
byvbをもつbyアニメーションは,0及びvbの二つの値をもつvaluesリスト,並びにadditive="sum"を用いた同じアニメーションに等価とする。byアニメーションにおけるadditive属性の他のいかなる指定も,無視される。

toアニメーション
これは,アニメーション関数が属性の基礎値で始動to属性を用いて指定される値で終了すると定義されるアニメーションを記述する。この形式を使用して,制作者は,属性に対する任意の現在値で始動し,望ましいto値で終了するアニメーションを記述できる。

toアニメーションの規定としての定義は,toアニメーションで与えられる。

次の"from-toアニメーション"の例は,SVG形状の幅を,10秒の経過に渡って50から100までアニメーション化する。

<rect ...>
   <animate attributeName="width" from="50" to="100" dur="10s"/>
</rect>

次の"from-byアニメーション"の例は SVG形状の幅を,10秒間の経過に渡って50から75までアニメーション化する。

<rect ...>
   <animate attributeName="width" from="50" by="25" dur="10s"/>
</rect>

次の"byアニメーション"の例は SVG形状の幅を,10秒間の経過に渡って40から70までアニメーション化する。

<rect width="40"...>
   <animate attributeName="width" by="30" dur="10s"/>
</rect>

from-toアニメーション及びfrom-byアニメーションは,次の例にあるとおり,累積アニメーションもサポートする。

<rect width="20px"...>
   <animate attributeName="width" dur="5s" from="10px" to="20px"
      accumulate="sum" repeatCount="10" />
</rect>

長方形は,最初の5秒で10画素から20画素まで成長し,次の5秒で20画素から30画素まで,さらに同じように10回の繰返し後に110画素まで成長する。additiveに対するデフォルト値はreplaceなので,元の値は,無視されることに注意すること。次の例は,アニメーションを明示的に加算的としている。

<rect width="20px"...>
   <animate attributeName="width" dur="5s" from="10px" to="20px"
      accumulate="sum" additive="sum" repeatCount="10" />
</rect>

結果は,すべての値が元の値20によってずらされていること以外は,先の例と同じとする。長方形は,5秒後には30画素の幅になり,10回の繰返し後には130画素の幅になる。

toアニメーション

加算をサポートする属性のtoアニメーションは,ある種の加算的及び非加算的なアニメーションの混合とする。基礎値は,加算的アニメーションを用いた場合と同様の始動点として使われるが,to属性によって指定された終了値は,アニメーションが非加算であるものとして,基礎値を上書きする。

次の"toアニメーション"の例は,SVG形状の幅を,10秒間の経過に渡って40から100までアニメーション化する。

<rect width="40"...>
   <animate attributeName="width" to="100" dur="10s"/>
</rect>

toアニメーションは一つの値だけをもつので,離散的なtoアニメーションは,単に,単純持続時間に対するto値を設定する。次の例では,rectは,アニメーション要素の10秒の持続時間の間,青色になっている。

<rect color="red"...>
   <animate attributeName="color" to="blue" dur="10s" calcMode="discrete"/>
</rect>

toアニメーションのセマンティクスは,一般的なアニメーションモデルに見合っているが,幾つかの特殊な場合がある。次に示す規定としての定義は,アニメーションモデルにおいて示されたアニメーションの他の型に対する定義と対応している。

定義

tovtをもつtoアニメーションの単純アニメーション関数F(t,u)は,基礎値uto値との間の線形補間とする。

F(t,u) = (u * (d-t)/d) + (vt * t/d),ただし t: 0<=t<=d,及びdは単純持続時間とする。

他の(より低い優先度の)アニメーションが活性でも凍結でもない場合,これは,単純な補間を定義する。しかし,他のアニメーションが基礎値を操作している場合には,toアニメーションは,最初は,そのより低い優先度のアニメーションの効果に加算し,単純持続時間の終了点に近づくにつれて徐々に優位を占めるようにし,最後には,完全に低い優先度のアニメーションの効果を上書きする。単純持続時間の終了点でのF(t,u)の値は,ちょうどtoになる。

toアニメーションの繰返しは,他のアニメーションの繰返しと同じとする。

定義

繰返しアニメーション関数fr(t,u)は,次の標準的な定義をもつ。
fr(t,u) = f( REMAINDER(t,d), u )

toアニメーションはターゲット属性の絶対的な値を用いて定義されるので,累積アニメーションは,定義されない。

定義

toアニメーションに対する累積アニメーション関数fc(t)は,次による。
fc(t,u) = fr(t,u)

凍結したtoアニメーションは,それが凍結された時点での値を取り,基礎値における更なる変化は見えないようにする。これは,単純持続時間の終了点でのto値の優位性と合致する。toアニメーションが凍結されている間,他のより低い優先度のアニメーションが活性であっても,値は,変化しない。

定義

to二メーションに対する凍結アニメーション関数ff(t)は,次による。
アニメーションが時間tにおいて凍結されていない場合,ff(t,u) = fc(t,u)

アニメーションが時間tにおいて凍結されている場合,ff(t,u) = vf,ただし,vfは,アニメーションが凍結された瞬間のff(t,u)の値とする。

例えば,次を考える。

<rect width="40"...>
   <animate attributeName="width" to="100" dur="10s" repeatCount="2.5" fill="freeze"/>
</rect>

幅は,最初の10秒で40画素から100画素までとアニメーション化され,次の10秒で40画素から100画素までのアニメーション化が繰り返され,最後の5秒で40画素から70画素までになり,70画素で凍結する。

Toアニメーションは,それ自体の種類の加算的セマンティクスを定義する。そのために,additive属性は,無視される。

定義

toアニメーションに対するアニメーション効果関数F(t,u)は,次による。
F(t,u) = ff(t,u)

複数のtoアニメーションも,これらのセマンティクスに従って組み合わされる。アニメーションが進行するにつれて,より高い優先度のアニメーションがより大きな効果をもつようになり,終了点での結果では,属性がより高い優先度のtoアニメーションの最終値に設定される。

加算的toアニメーションの例として,次の二つの加算的アニメーションを考える。最初に,byアニメーションが,差分を属性"x"に適用し0から-10まで変化させる。次に,toアニメーションが,最終値10までアニメーション化する。

 <foo x="0" ...>
    <animate id="A1" attributeName="x" 
        by="-10" dur="10s" fill="freeze" />
    <animate id="A2" attributeName="x" 
        to="10"  dur="10s" fill="freeze" />
 </foo>

この例での10秒の経過に渡る"x"のプレゼンテーション値は,図3.6で提示される。これらの値は,先に示された公式を使用して単に計算される。A2に対するF(t,u)の値は,A2がより高い優先度のアニメーションなので,"x"に対するプレゼンテ-ション値になることに注意すること。

図3.6 加算的toアニメーションの例における効果

Time A1のF(t,u) A2のF(t,u)
 0 0 0
 1 -1 0.1
 2 -2 0.4
 3 -3 0.9
 4 -4 1.6
 5 -5 2.5
 6 -6 3.6
 7 -7 4.9
 8 -8 6.4
 9 -9 8.1
10 -10 10

3.5 SMIL 2.0 BasicAnimation要素

SMIL BasicAnimaionモジュールは,四つの要素,animatesetanimateMotion及びanimateColorを定義する。

3.5.1 animate要素

animate要素は,アニメーション化されている属性の意味的な理解をほとんど又は全く要求しない一般的な属性アニメーションを導入する。それは,数値スカラも数値ベクトルもアニメーション化できる。値の離散的な集合を通じて単一の数値的でない属性もアニメーション化できる。animate要素は,空要素とする。すなわち,子要素をもつことができない。

この要素は,アニメーション関数に対する,from,to,by,及びvaluesの記述だけでなく,計算モードのすべても同様にサポートする。それは,すべての記述されたタイミング属性をサポートする。これらは,先に示したそれぞれの箇条ですべて記述される。

要素の属性
attributeName及びattributeType
アニメーション化される属性。ターゲット属性を参照すること。attributeNameは必須とする。attributeTypeはオプションとする。

targetElementhrefactuateshow,及びtype
ターゲット要素。ターゲット要素を参照すること。すべてオプションとする。

fromtobyvaluescalcModeaccumulate及びadditive
アニメーション関数及び効果を指定する。3.4.2 単純アニメーション関数f(t)の指定及び3.4.3 アニメーション効果関数F(t,u)の指定を参照すること。

animateによってサポートされるすべての属性のセマンティクスの規定としての定義のとおりに,多くの例が先に提供されている。

3.5.2 set要素

set要素は,指定された持続時間に対して属性の値を単に設定する単純な手段を提供する。すべてのアニメーション要素と一緒に使うとき,これは,プレゼンテーション値だけを操作し,アニメーションが完了するとき,その効果は,もはや適用されない。すなわち,setは,属性の値を永久的に設定するものではない。

set要素は,合理的には補間可能ではない属性,及び(例えば,文字列及び論理値といった)単純に値を設定するセマンティクスをより重要視してサポートする属性を含むすべての属性型をサポートする。set要素は,非加算的とする。加算的属性及蓄積的属性は,許可されず,指定されて場合には無視される。

set要素は,単純持続時間及び活性持続時間を指定するために,すべてのタイミング属性をサポートする。しかし,repeatCount属性及びrepeatDur属性は,setの効果を拡張するが,(静的な操作を"繰り返す"ことは意味がないので,)単にsetの活性持続時間に影響を与える。setと共にfill="freeze"を用いることによって,活性持続時間を不定とするためにタイミングを定義することと同じ効果が得られる。

set要素は,animate要素よりも制限された属性の集合をサポートする。ただ一つの値だけが指定され,補間制御も加算的アニメーション又は累積アニメーションもサポートされない。

要素の属性
attributeName及びattributeType
アニメーション化される属性。ターゲット属性を参照すること。attributeNameは必須とする。attributeTypeはオプションとする。

targetElementhref actuateshow,及びtype
ターゲット要素。ターゲット要素を参照すること。すべてオプションとする。

to
set要素の活性持続時間の間におけるターゲット属性のための値を指定する。引数値は,ターゲット属性の型と一致しなければならない。

定義

set要素によって定義される単純アニメーション関数は,次による。
f(t) = v

ここで,vは,to属性の値とする。

set要素は,非累積的及び非加算的とする。

次の例は,SVG長方形のstroke-widthを元の値から5画素の幅まで変化させる。その効果は,5秒の時点で開始し10秒間続き,その後,元の値が再び使用される。

<rect ...>
   <set attributeName="stroke-width" to="5px"
            begin="5s" dur="10s" fill="remove" />
</rect>

次の例は,マウスが要素の上に移動するときに,テキスト要素のclass属性を文字列"highlight"へと設定し,マウスが要素から離れるときに,その効果を取り除く。

<text>This will highlight if you mouse over it...
   <set attributeName="class" to="highlight" 
            begin="mouseover" end="mouseout" />
</text>  

3.5.3 animateMotion要素

animateMotion要素は,経路に沿ってある要素を移動する。animateMotion要素は,様々なレイアウト機構に渡った動き及び位置の概念を抽象化する。ホスト言語が,レイアウトモデルを定義し,位置及び動きの精密なセマンティクスを指定しなければならない。経路は,次の二つの方法のいずれかで記述可能とする。

すべての値は,x及びyの値の対でなければならない。それぞれのx及びyの値には,ホスト言語が要素の位置指定のためにサポートするいかなる単位を指定してもよい。ホスト言語は,デフォルト単位を定義する。さらに,ホスト言語は,要素の位置指定のために参照点を定義する。これは,動きアニメーションが記述する位置へと揃えられた要素内の点とする。幾つかの言語では,参照点は,要素境界ボックスの左上隅をデフォルトとする。他の言葉では,参照点は,暗黙的であってもよいし,又は要素に対して指定してもよい。

x及びyの値の対に対する構文は,次による。

coordinate-pair ::= ( coordinate comma-wsp coordinate )
coordinate      ::= num
num             ::= Number 

座標値(coordinate value)は,少なくとも一つの空白文字又はコンマで区切る。区切り子の回りには付加的な空白が存在してもよい。coordinateの値は,ホスト言語において何らかの種類の数として定義されなければならない。

attributeName属性及びattributeType属性は,animateMotionと一緒には使用しない。これは,操作される位置属性はホスト言語によって定義されることによる。位置がアニメーション化も可能な属性として(例えば,"top"及び"left",又は"posX"及び"posY"として)示される場合,実装は,animateMotionアニメーションを,個々の位置属性を操作する他のアニメーションと組み合わせなければならない。アニメーションサンドイッチモデルも参照すること。

from属性,to属性,by属性及びvalues属性のいずれもが指定されない場合,アニメーションは,いかなる効果ももたない。

animateMotionのためのデフォルト計算モード(calcMode)は,paced(一定変化率)とする。これは,指定された経路に沿った一定速度の動きを生成する。animateMotion要素は加算的とすることが可能だが,二つ以上のpaced(一定速度)のアニメーションの加算は,一つの組み合わされた一定速度の動きアニメーションを生じないかもしれないことに注意すること。

要素の属性
targetElementhrefactuateshow,及び type
ターゲット要素。ターゲット要素を参照すること。すべて,オプションとする。

fromtobyvaluesaccumulate,及び additive
アニメーション関数及び効果を指定する。3.4.2 単純アニメーション関数f(t)の指定及び3.4.3 アニメーション効果関数F(t,u)の指定を参照すること。

calcMode 
3.4.2 単純アニメーション関数f(t)の指定の中で定義されている。しかし,animateMotionに対するデフォルトのcalcModepaced(一定変化率)とすることに注意すること。これは,一定速度の動きを生成する。

values属性に記述されている二つより多くの点と共にcalcModeに対してlinear(線形)を使用した場合には,可変速度の動きが生じてもよい。linear(線形)なcalcModeは,valuesによって定義された幾つかの区分の間で,時間が等分に分けられることを指定する。linearの使用は,時間が,各々の区分が記述する距離(範囲)に従って等分に分けられることを指定しない。

一定速度の動きのためには,calcModepacedと設定することが望ましい。

origin
アニメーションに対する動きの起点を指定する。この属性の値及びセマンティクスは,ホスト言語のレイアウト及び配置のモデルに依存する。幾つかの言語では,ただ一つだけのオプション,すなわちデフォルトだけがあってもよい。しかし,例えばCSSの位置指定では,コンテナブロックを基準にして,又は要素のレイアウト位置を基準にして,動き経路を指定できる。要素がレイアウトされるときの要素の位置を基準にして動きを記述することは有用な場合が多い。例えば,from="(-100,0)"及びto="(0,0)"として指定し,スクリーン外の左からレイアウト位置までを記述する。制作者は,コンテナブロックを基準にするだけでなく,この方法でも動きを記述できなければならない。origin属性は,この区別(コンテナブロックを基準にするか又は要素のレイアウト位置を基準にするか)をサポートする。それにもかかわらず,ホスト言語がレイアウトモデルを定義するので,ホスト言語は,サポートされるいかなる付加的な属性の値だけでなく,"デフォルト"の振る舞いも指定しなければならない。
ホスト言語におけるレイアウトモデルの定義が,コンテナが境界をもっているかどうか,及び要素がレイアウトコンテナの境界の外に動かされる場合の振る舞いを指定することに注意をすること。例えば,CSS2[CSS2]では,これは,"clip"特性を用いて制御できる。
加算的アニメーションに対しては起点の区別は意味がないことに注意をすること。additivereplaceに設定されている場合にだけ,この属性は適用される。

3.5.4 animateColor要素

animateColor要素は,色属性のアニメーションを指定する。ホスト言語は,色値を記述し色アニメーションをサポートできるそれらの属性を指定しなければならない。

すべての値は,[sRGB]色値を表現しなければならない。属性値のための文法にあった値の構文は,ホスト言語によって定義される。

補間は,色チャネルごと(per-color-channel)を基礎として定義される。

要素の属性
attributeName及び attributeType
アニメーション化される属性。ターゲット属性を参照すること。attributeNameは,必須とする。attributeTypeは,オプションとする。

targetElementhrefactuateshow,及び type
ターゲット要素。ターゲット要素を参照すること。すべて,オプションとする。

fromtoby valuescalcModeaccumulate,及び additive
アニメーション関数及び効果を指定する。3.4.2 単純アニメーション関数f(t)の指定及び3.4.3 アニメーション効果関数F(t,u)の指定を参照すること。

from属性,to属性,by属性及びvalues属性における値は,色に対して負の値及び範囲外の値を指定してもよい。個々のanimateColorによって定義された関数は,負の値又は範囲外の値を産出してもよい。実装は,結果として生じるプレゼンテーション値を,到達先(ディスプレイ)の色空間にとって合法となるように補正しなければならない。しかし,アニメーションサンドイッチモデルの中で記述されるとおり,実装は,与えられた属性の対するすべてのアニメーションの最終的な組み合わされた結果だけを補正することが望ましく,個々のアニメーションの効果を補正しないほうがよい。

値は,正しい範囲にその値を"強制的に固定すること(clamping)"によって補正される。最小許容値より小さい値は,最小値(通常は0。しかし,幾つかの色プロファイルに対しては必ずしもそうではない。)に強制的に固定される。定義された最大よりも大きい値は,(ホスト言語によって定義された)最大値に強制的に固定される。

色値は,到達先(ディスプレイ)色空間の全色値範囲にそれらを強制的に固定することによって,補正されることに注意すること。到達元(sRGB)色空間の範囲外の値を処理できず,到達元色空間への強制的固定を実行し,その後に到達先色空間へ変換し,その全色値範囲へ強制的に固定しなければならない実装が存在してもよい。重要な点は,到達元全色値範囲と到達先全色値範囲とを区別すること,強制的固定は可能な限り遅く行うこと,及び一見はRGB装置のように見えるインクジェットプリンタなどの装置の中には3次元的な全色値範囲をもたないものがあることを理解することである。

実装者への備考 animateColortoアニメーションとして指定されている場合,アニメーション関数は,差分が計算されなければならないユークリッド的RGB 3次元距離を仮定するすることが望ましい。3.4.2 単純アニメーション関数f(t)の指定及び3.4.4 from,to及びbyによって指定される単純アニメーション関数も参照すること。同様に,animateColorに対するcalcMode属性がpacedに設定される場合,アニメーション関数は,距離及び変化率を計算するために,ユークリッド的RGB 3次元距離を仮定することが望ましい。

3.6 SMIL 2.0 BasicAnimationモジュールの詳細

3.6.1 BasicAnimation統合要件

3.6.1では,言語設計者がSMILアニメーションのホスト言語への統合を規定するために実際に行わなければならないことを示す。これには,アニメーションに関する基本的定義及び制約が含まれる。

3.6.1で一覧として示される要件に加えて,共通アニメーション統合要件で一覧として示されるものも満足されなければならない。

アニメーションターゲットに関して要求される定義及び制約

ターゲット要素の指定

ホスト言語設計者は,ターゲット要素の指定のためにtargetElement属性又はXLink属性をサポートするかどうか選択しなければならない。XLink構文が使用される場合,ホスト言語設計者は,関連付けられた属性のためにXLink名前空間を表示する方法を決定しなければならないことに注意すること。名前空間はDTDの中で固定できるが,言語設計者は,その属性に対するXLink名前空間を表示するためにコロン付き属性名(qnames)を要求することもできる。要求されたXLink属性は値を固定しDTDの中で指定してもよいし,又はアニメーション要素上で要求することもできる。ホスト言語設計者が,オプションのXLink属性を指定することを要求してもよい。これらの決定は,ホスト言語設計者に任される。XLink属性のための構文の詳細は,SMILアニメーションのセマンティクスに影響を与えない。

一般に,ターゲット要素は,文書の中のどんな要素であってもよい。ホスト言語設計者は,これに対する例外を指定しなければならない。アニメーション要素がそのアニメーション要素の定義されている文書の外部の要素をターゲットとすることを,ホスト言語設計者が許すことは推奨されない。ターゲット要素のためのXLink構文はこれを許すことが可能だが,これについての,SMILのタイミング及びアニメーションのセマンティクスは,SMILアニメーションのこの版では定義されない。

ターゲット属性に関する課題

このモジュールにおける定義は,ホスト文書の中のいかなる要素のいかなる属性をアニメーション化するためにも使用できる。しかし,SMILアニメーションを統合するホスト言語設計者は,どの要素及び属性がアニメーションをサポートできるかを制約することを選択してもよい。例えば,ホスト言語は,script要素のlanguage属性のアニメーションをサポートしないことを選択してもよい。DOM機能のための規定を含んだホスト言語が,DOMを通じて合法的に修正してよい属性に,アニメーションを制限してもよい。

ホスト言語によってアニメーションから明確に排除されたわけではない,いかなる要素のいかなる属性も,(その属性のためにホスト言語によって定義されたとおりの)基礎データ型が(離散アニメーションのための)離散値及び/又は(補間された,加算的であって累積的なアニメーションのための)加算をサポートする限りは,アニメーション化されてよい。

アニメーションに関するすべての制約は,ホスト言語規定の中で又は適切なスキーマの中で記述されなければならない。これは,DTDだけではこれを合理的に表現できないことによる。

ホスト言語は,アニメーション化される属性のためにどの言語抽象値が処理されるのが望ましいかを定義しなければならない。例えば,CSSを取り込むホスト言語は,CSSの長さの値がサポートされることを要求してよい。このことは,3.2.8 アニメーション関数値の詳細でさらに詳しく示される。

ホスト言語は,相対的な値の解釈を指定しなければならない。例えば,値がコンテナの大きさの百分率として指定されている場合,ホスト言語は,コンテナの大きさがアニメーション化されるにつれて,この値を動的に解釈するかどうかを指定しなければならない。

ホスト言語は,属性のために値を強制的に固定する場合のセマンティクスを指定しなければならない。その言語は,値に対して何らかの定義済み範囲を指定し,範囲外の値を処理する方法を指定しなければならない。

ホスト言語は,数値属性値のためにサポートされるフォーマットを指定しなければならない。これは,整数値及び浮動小数点値の両方を含む。最小限,ホスト言語設計者は,[CSS2]4.3.1 "整数及び実数"で記述されたフォーマットをサポートすることが望ましい。

animateMotion機能の統合

ホスト言語規定は,どの要素がanimateMotionのターゲットとなることができるかを定義しなければならない。さらに,ホスト言語規定は,要素のための位置決めモデルを記述しなければならないし,この文脈におけるanimateMotionのためのモデルを記述しなければならない。すなわち,origin属性のためのデフォルト値のセマンティクスを定義しなければならない。位置を記述するために異なる方法が存在する場合には,origin属性に対する付加的な属性値を,制作者が位置決めモデルを制御できるように定義することが望ましい。

3.6.2 BasicAnimationモジュールのための文書型定義(DTD)

SMILアニメーションモジュールのための完全なDTD参照すること。

3.7 SMIL 2.0 SplineAnimationモジュールの概要

3.7は,SMIL 2.0 SplineAnimationモジュールの機能を定義する。このモジュールは,スプライン補間のためであって時間における点に関し一定ではない間隔あけを行う属性を追加する。これらの属性は,animate要素,animateMotion要素及びanimateColor要素において使用してよい。

3.7.1 SMIL 2.0 SplineAnimationモジュール属性

スプラインアニメーション関数の計算モード

SplineAnimationモジュールは,BasicAnimationモジュールのdiscrete(離散)linear(線形)及びpaced(一定変化率)の計算モードを拡張し,補間及びタイミングに関する追加的な制御を提供する。

計算モードの属性
calcMode
BasicAnimationモジュールのdiscrete値,linear値及びpaced値に加えて,AdvanceAnimationモジュールは,次の値をサポートする。
spline
3次のBezierスプラインが定義する時間関数に従って,valuesリストの一つの値から次の値までを補間する。スプラインの点は,keyTimes属性で定義され,それぞれの間隔のための制御点は,keySplines属性で定義される。

calcModediscretepath指定と一緒に使用することは許されるが,それは,点から点へと単に跳び越すだけとする。時間は,3.7.4のpath属性の中で記述されるとおりに,path指定における点から導出される。

keyTimes
アニメーションの一定変化率を制御するために使用するセミコロンで区切られた時間値のリスト。リストの中の各々の時間(値)は,values属性リストの中の値に対応し,その値がアニメーション関数で使用されることが望ましい時点を定義する。keyTimesリストの中の各々の時間(値)は,0と1との間(ただし両端を含む)浮動小数点値として指定され,animation要素の単純持続時間に比例したオフセットを表現する。

keyTimesのリストが指定される場合,valuesリストの中の値とちょうど同じ数のkeyTimesリストの中の値が存在しなければならない。

keyTimes属性が指定されない場合,3.2.1 単純アニメーション関数f(t)で記述されるとおりに,単純持続時間は,等分の区分に分けられる。

各々の後続の時間値は,それに先行する時間値より大きいか又は同じでなければならない。

keyTimesリストのセマンティクスは,補間モードに依存する。

  • 線形であるスプラインアニメーションに対しては,リストの中の最初の時間値は,0でなければならず,リストの中の最後の時間値は,1でなければならない。各々の値と関連付けられたkeyTimeは,その値が設定された時点を定義する。値は,keyTimesの間で補間される。
  • 離散アニメーションに対しては,リストの中の最初の時間値は,0でなければならない。各々の値と関連付けられる時間は,その値が設定された時点を定義する。アニメーション関数は,keyTimesで定義される次の時間まで,その値を使用する。

補間モードがpacedの場合,keyTimes属性は,無視される。

keyTimes指定にエラーがある場合(例えば,間違った値,多過ぎる値又は少な過ぎる値など),アニメーションは,効果をもたない。

単純持続時間が不定であって,補間モードがlinear又はsplineの場合,いかなるkeyTimes指定も,無視される。

keySplines
keyTimesリストと関連付けられたBezier制御点の集合。これは,間隔の(一定)変化率を制御する3次のBezier関数を定義する。属性値は,制御点記述のセミコロンによって区切られたリストとする。各々の制御点記述は,四つの浮動小数点値の集合,x1 y1 x2 y2,とする。これは,一つの時間区分に対するBezier制御点を記述する。関連する区分を定義するkeyTimes値は,Bezier"アンカ点"とし,keySplines値は,制御点とする。したがって,keyTimes属性の場合よりも一つ少ないkeySplines属性の制御点の集合が存在しなければならない。

値は,すべて0〜1の範囲になければならない。

calcModesplineに設定されていない場合には,この属性は無視される。


keySplines指定にエラーがある場合(例えば,間違った値,多過ぎる値又は少な過ぎる値など),アニメーションは効果をもたない。

このセマンティクス(持続時間はn-1個の等分の期間に分けられるというもの)は,keySplines属性が指定される場合と同様に適用される。しかし,keyTimesはそうではない。keySplines値に関連付けられた時間は,上に記述されるとおりに決定される。

keySplinesリストにおける制御点集合のための構文は,次による。

control-pt-set ::= ( fpval comma-wsp fpval comma-wsp fpval comma-wsp fpval ) 

使用法

fpval          ::= Floating point number
S              ::= spacechar*
comma-wsp      ::= S (spacechar|",") S
spacechar      ::= (#x20 | #x9 | #xD | #xA) 

制御点の値は,少なくとも一つの空白文字又はコンマによって区切られる。区切り子の回りの付加的な空白は,許される。浮動小数点数のための許された構文は,ホスト言語で定義されなければならない。

keyTimes又はkeySplinesのための引数値が文法に合わない場合(これには,どちらの属性に対しても少な過ぎる値又は多過ぎる値が含まれる。),アニメーションは,効果をもたない(構文エラーの取扱い参照)。

calcMode属性,keyTimes属性及びkeySplines属性の値において,先行又は後続する空白,及びセミコロンの前後の空白は,無視される。

calcModeの高度な使用の例

次の例にあるとおり,離散アニメーションは,keyTimesと一緒に使うことができる。

<animateColor attributeName="color" dur="10s" calcMode="discrete"
     values="green; yellow; red" keyTimes="0.0; 0.8;" /> 

この例は,keyTimes値が不定の持続時間とどのように相互作用できるかも示す。"color"属性の値は,5秒間,緑(green)に設定され,次に5秒間,黄(yellow)に設定され,さらに文書の残りの間は赤(red)を維持する。これは,(指定されていない)持続時間は"不定(indefinite)"をデフォルトとすることによる。

次の例は,keyTimesの使用を例示する。

<animate attributeName="x" dur="10s" values="0; 50; 100" 
     keyTimes="0; .8; 1" calcMode="linear"/> 

keyTimes値は,"x"属性を,アニメーションの始動時に"0"に,8秒後(単純持続時間の80%の時点)に"50"に,アニメーションの終了時に"100"にする。値は,アニメーションの前半ではよりゆっくり変化し,後半ではより速く変化する。

keySplinesを用いた補間

幾つかの属性については,変化の変化率が,見る者には容易に認識できないことがあってもよい。しかし,動きのようなアニメーションのためには,動きの速さを徐々に変化させ,急激に段階的には変化させないという能力が,重要となる。keySplines属性は,この制御を提供する。

keySplinesを使用するために,先の例を拡張する。

<animate attributeName="x" dur="10s" values="0; 50; 100" 
     keyTimes="0; .8; 1" calcMode="spline" 
     keySplines=".5 0 .5 1; 0 0 1 1" /> 

この場合も,keyTimes 値は,"x"属性を,アニメーションの始動時に"0"に,8秒後に"50"に,アニメーションの終了時に"100"にする。しかし,値の間の補間を一定の変化とするために,keySplines値が,曲線を定義する。この例では,スプラインは,時間0秒及び8秒の間(すなわち,keyTimesの0と.8との間,及びvaluesの"0"と"50"との間)で,イーズイン(ease-in,ゆっくりと開始)しイーズアウト(ease-out,ゆっくりと終了)する効果を引き起こすが,8秒と終了時点との間(すなわち,keyTimesの.8と1との間,及びvaluesの"50"と"100"との間)は,厳密な線形を引き起こす。図3.7は,これらのkeySplines値が定義する曲線を示す。

図3.7 keySplinesの効果の例示

Example keySplines01 -         
               keySplines of 0 0 1 1 (the default)
keySplines = "0 0 1 1"
(デフォルト)
Example keySplines02 -         
               keySplines of .5 0 .5 1
keySplines = ".5 0 .5 1"
Example keySplines03 - keySplines of 0 .75 .25
                        1
keySplines = "0 .75 .25 1"
Example keySplines04 - keySplines of 1 0 .25  
                      .25
keySplines = "1 0 .25 .25"

図3.7の中で各々の図が,一つの間隔(すなわち,keyTimes及びvaluesのリストにおける値の関連する対の間)におけるkeySplinesの設定の効果を例示する。水平軸は,与えられた間隔内における補間の単位進行状況,すなわち,与えられた間隔に沿って補間が進行する際の変化率に対する入力値と考えることができる。垂直軸は,keySplines関数によってもたらされる単位進行状況に対する結果値とする。これを記述するには,水平軸を間隔に対する入力単位時間とし,垂直軸を出力単位時間とする他の方法もある。10.におけるタイミング及び実世界時計時間に関する箇条も参照すること。

計算を例示するために,単純な例を考える。

<animate dur="4s" values="10; 20" keyTimes="0; 1"
     calcMode="spline" keySplines={表3.1にあるとおり} /> 

図3.7の四つの場合の各々に対するkeySplines 値を使用すると,アニメーションが進行するにつれての大体の補間された値は,次の表3.1のとおりとなる。

表3.1 keySplines値による補間
keySplines値 初期値 1秒後 2秒後 3秒後 最終値
0 0 1 1 10.0 12.5 15.0 17.5 20.0
.5 0 .5 1 10.0 11.0 15.0 19.0 20.0
0 .75 .25 1 10.0 18.0 19.3 19.8 20.0
1 0 .25 .25 10.0 10.1 10.6 16.9 20.0

Bezierスプラインの計算の形式的な定義については,[COMP-GRAPHICS]の488ページ〜491ページを参照すること。

keyTimes属性及びkeySplines属性は,次の例にあるとおりに,指定する値のためにfrom,to及びbyによる簡略記述形式を用いて使用することもできる。

<animate attributeName="foo" from="10" to="20" 
     dur="10s" keyTimes="0.0; 0.7"
     calcMode="spline" keySplines=".5 0 .5 1" /> 

keySplines値によって指定された"イーズイン(ease-in,ゆっくりと開始)しイーズアウト(ease-out,ゆっくりと終了)する"曲線を使って,値は,10から20まで変化する。keyTimes値によって,値は,7秒の時点で20に到達し,10秒間の単純持続時間の残りの間,そこに留まる。

次の例は,多少普通ではない用法,離散アニメーションを用いたfrom-toアニメーション,を記述する。SVG要素のstroke-linecap属性は文字列をとり,そのために,discretecalcModeを暗示している。アニメーションは,stroke-linecap属性を5秒(単純持続時間の半分)の間はroundに設定し,その次に5秒間はstroke-linecapsquareに設定する。

<rect stroke-linecap="butt"...>
   <animate attributeName="stroke-linecap" 
      from="round" to="square" dur="10s"/>
</rect> 

3.7.2 SMIL 2.0 SplineAnimationモジュール要素

SplineAnimationモジュールは,BasicAnimationモジュールのanimate要素,animateMotion要素及びanimateColor要素を,keyTimes属性及びkeySplines属性を加え,さらにcaclMode属性に対してspline値を加えて,拡張したものとする。

3.7.3 スプラインanimate要素

SplineAnimationモジュールは,BasicAnimationモジュールによって定義されたanimate要素を,次の属性及び値を加えることで,拡張する。

要素の属性
BasicAnimationにおけるanimate要素のすべての属性及び関連する要素
3.5.1 animate要素を参照すること。

keyTimeskeySplines及びcalcMode
 
 
アニメーション関数及び効果の規定を拡張する。3.5.1 animate要素及びスプラインアニメーション関数の計算モードを参照すること。

例は,animateがサポートする属性すべてのセマンティクスの規定としての定義と同様に,先に示した。

3.7.4 スプラインanimateMotion要素

SplineAnimationモジュールは,BasicAnimationモジュールによって定義されたanimateMotion要素を,次の属性及び値を加えることで,拡張する。

要素の属性
BasicAnimationにおけるanimateMotion要素のすべての属性及び関連する要素。
3.5.3 animateMotion要素を参照すること。

keyTimeskeySplines及びcalcMode
アニメーション関数及び効果の規定を拡張する。3.5.3 animateMotion要素及びスプラインアニメーション関数の計算モードを参照すること。

path
時間の関数として属性値を記述する曲線を指定する。サポートされる構文は,SVG経路構文の部分集合とする。サポートするものには,線を記述するコマンド("MmLlHhVvZz")及びBezier曲線を記述するコマンド("Cc")が含まれる。詳細は,SVG[SVG]における経路規定を参照すること。
SVGは,経路命令の二つの形式,"絶対的(absolute)"及び"相対的(relative)",を提供することに注意すること。これらの用語は加算的アニメーションの定義,及び/又はfrom属性と関係があるように思えるが,それらは別の概念であって無関係とする。"絶対的"及び"相対的"は,経路それ自体の定義だけに適用され,アニメーションの操作には適用されない。"相対的"命令は,以前に指定した点を基準にして経路点を定義する。"絶対的"及び"相対的"の用語は,"加算的"アニメーション,及びoriginのいかなる規定の両方の定義とは無関係とする。
  • "絶対的"命令("MLHVZC")のために,ホスト言語は,経路値の座標系を指定しなければならない。
  • "相対的"命令("mlhvzc")を使用する場合,それらは,経路上の以前の点からのオフセットとして,点を定義する。これは,"加算的",又はanimateMotion要素のためのoriginの定義に影響を与えない。

経路データ区分は,次の"moveto"関連の命令のうちのどれか一つを用いて開始しなければならない。

Move To(移動)命令:"M <x> <y>"又は"m <dx> <dy>"
与えられた(x,y)座標において新しい部分経路を始める。movetoに座標の複数の対が続く場合,後続の対は,暗黙的なlineto命令として扱われる。
Line To(描線)命令:"L <x> <y>"又は"l <dx> <dy>"
現在点から,新たな現在点となる与えられた(x,y)座標まで,線を描く。多くの座標対を,多角形を描くために指定してもよい。
Horizontal Line To(左右方向描線)命令:"H <x>"又は"h <dx>"
現在点(cpx,cpy)から(x,cpy)まで左右方向の線を描く。多数のx値を提供可能とする。
Vertical Line To(上下方向描線)命令:"V <y>"又は"v <dy>"
現在点(cpx,cpy)から(cpx,y)まで上下方向の線を描く。多数のy値を提供可能とする。
Closepath(閉経路)命令:"Z" or "z"
"closepath"は,現在点から現在部分経路の初期点まで,直線を自動的に描く。
Cubic Bezier Curve To(3次のBezier曲線)命令:
  "C <x1> <y1> <x2> <y2> <x> <y>" 又は 
  "c <dx1> <dy1> <dx2> <dy2> <dx> <dy>"
現在点から(x,y)まで,曲線の開始の制御点として(x1,y1)を使用し,曲線の終了の制御点として(x2,y2)を使用して,3次のBezier曲線を描く。座標の多数の集合を,複数Bezierを描くために指定してもよい。

すべてのcalcMode設定に対して,単純なアニメーション関数f(t)の定義は,単純持続時間dがどのように区分に分割されるかを決定するために,values属性における値の個数を使用する。path属性が使用される場合,経路内に"move to"(関連)命令が存在しなければ,値の個数は,経路が定義する点の個数になると定義される。"move to"命令は,タイミング又は補間の目的で,追加の"区分"を定義しない。"move to"命令は,持続時間を分けるとき,追加の点としては見なされない。pathpacedcalcMode設定と組み合わされる場合,すべての"move to"命令は,0の持続時間を持つと考えられ(すなわち,それらは常にすぐに発生する。),変化率を計算する際に考慮しないほうがよい。

path属性が指定される場合,from属性,to属性及びby属性,又はvalues属性の値は無視される。

animateがサポートするすべての属性のセマンティクスの規定としての定義と同様に,例は,先に示している。

完全な速度制御のために,calcModeはsplineに設定することが可能であって,制作者は,keyTimes及びkeySplinesを用いて速度制御スプラインを指定できる。

3.7.5 スプラインanimateColor要素

SplineAnimationモジュールは,BasicAnimationモジュールによって定義されたanimateColor要素を,次の属性及び値を追加することで,拡張する。

要素の属性
BasicAnimationにおけるanimateColor要素のすべての属性及びそれに関連する要素
3.5.4 animateColor要素を参照すること。

keyTimeskeySplines及びcalcMode
アニメーション関数及び効果の規定を拡張する。3.5.4 animateColor要素及びスプラインアニメーション関数の計算モードを参照すること。

3.8 SMIL 2.0 SplineAnimationモジュールの詳細

3.8.1 SplineAnimation統合要件

SMIL 2.0 SplineAnimationモジュールのホスト言語への統合を指定するために,言語設計者は,BasicAnimation統合要件の中で一覧として示されたすべての要件を満足することで,SMIL 2.0 BasicAnimationを(ホスト)言語へと統合しなければならない。

BasicAnimationを統合することに加えて,共通アニメーション統合要件の中で一覧として示された要件が,SplineAnimationモジュールに対して満たされなければならない。

3.8.2 SplineAnimationモジュールのための文書型定義(DTD)

SMILアニメーションモジュールのための完全なDTDを参照すること。

3.9 共通アニメーション統合要件

3.9は,BasicAnimationモジュール及びSplineAnimationモジュールに対して同じであるホスト言語統合の課題を提示する。

3.9.1 統合要件

ホスト言語プロファイルは,SMIL 2.0 BasicInlineTimingモジュールのすべての要件を満たすことで,SMIL 2.0 BasicInlineTiming モジュールをホスト言語に統合しなければならない。さらに,SMIL 2.0タイミング及び同期モジュール及びSMIL 2.0時間操作モジュールのうちでホスト言語に統合されるすべてのモジュールは,BasicAnimationモジュールの要素上で利用可能でなければならない。

特に,ホスト言語がBasicInlineTimingモジュールに加えてSMIL 2.0 BasicTimeContainersモジュールを統合する場合に限り,fill属性は,アニメーション要素上でサポートされる。

ホスト言語プロファイルは,アニメーション要素に付加的な属性を追加してもよい。何らかのアニメーション要素に追加された属性は,すべてのアニメーション要素に追加されなければならない。特に,このモジュールは,XMLのID属性を定義しない。ホスト言語プロファイルが,XMLのID属性をアニメーション要素に追加するものと期待される。

アニメーションの拡張

SMILアニメーションを統合する言語設計者は,これらの追加が制作者にとって便利になる新しいアニメーション要素を定義するのがよい。新しい要素は,SMILアニメーション及びSMILタイミング及び同期に基づいていなければならず,SMILタイミング及び同期,並びにSMILアニメーションが提供するフレームワーク内に留まらなければならない。

言語設計者は,加算が定義できる非数字データ型に対して,加算的であって累積的なアニメーションのためのサポートを定義するのもよい。

アニメーション要素の操作に関する制約

SMIL アニメーションを統合する言語設計者は,文書が開始した後,アニメーション要素の属性の操作を許可しないほうがよい。これは,タイミング属性だけでなく,ターゲット及び値を指定する属性の両方を含む。特に,すべてのアニメーション要素上の(ID型の)id属性は,変更可能としてはならない。すなわち,読取り専用とすることが望ましい。アニメーション実行時にid値への変化の追跡を要求することは,かなりの複雑さを生じ,最善でも疑問のある機能といえる。

言語の規定は,文書が開始した後,DOMインタフェースを通じてアニメーション要素の属性の操作を許可しないことが望ましい。言語の規定は,他のアニメーション要素をターゲットととするアニメーション要素の使用も許可しないことが望ましい。

特に,attributeName属性が(アニメーション又はスクリプトのいずれかによって)変更できる場合,ターゲット属性が名前空間修飾名をもっているときには,問題が起こるかもしれないことに注意すること。現在のDOM規定は,この結合を処理するために機構を含まない。

アニメーション要素の属性値を動的に変更することは,まだ十分には解決されていない意味的な複雑さをモデルに導入してしまう。この制約は,SMILアニメーションの将来の版で取り除かれるかもしれない。

構文エラーの取扱い

各々の属性のために特定のエラーを取り扱う機構は,個々の構文記述と一緒に記述されている。これらの規定の中には,構文エラーをもつアニメーションの振る舞いを"効果をもたない"として記述しているものがある。これは,アニメーションがタイミングに関しては正常に振る舞い続けるが,プレゼンテーション値を操作することはなく,したがってそのプレゼンテーションに目に見える影響をもたないことを意味する。

特に,これは,他のアニメーション要素が"効果をもたない"アニメーションを基準にして開始又は終了すると定義されている場合,その他のアニメーション要素は,構文エラーが存在しないものとして開始し終了することを意味している。プレゼンテーション実行時は,エラーを示すてもよいが,文書のプレゼンテーション又はアニメーションを停止する必要はない。

ホスト言語及び/又は実行時の中には,より厳しいエラーの取扱いを課すことを選ぶものがあってもよい。エラーの取扱いを行うホスト言語の課題については,エラー取扱いセマンティクスを参照すること。エラーが検出される場合,制作環境は,より多くの対応の実施を選択してもよい。

エラー取扱いセマンティクス

ホスト言語設計者は,エラー取扱いセマンティックスに関してより厳しい制約を課してもよい。すなわち,構文エラーがある場合,ホスト言語は,エラーを示すために使用する付加的な又はより厳しい機構を指定してもよい。これには,例えば,文書のすべての処理を停止するとか,すべてのアニメーションを停止するなどがある。

ホスト言語設計者は,(構文エラーの取扱いで示されるとおりの)エラー取扱い規定又はエラー取扱い応答を緩和してはならない。例えば,ホスト言語設計者は,values属性又はkeyTimes属性の値における欠損又は誤った値のために,エラー回復セマンティクスを定義してはならない。