SMIL 1.0は,メディア同期の基礎的な問題を解決し,マルチメディア内容を振り付けする強力な方法を定義した。SMIL 2.0は,タイミング及び同期のサポートを拡張し,タイミングモデル及び関連する構文に能力を追加する。SMIL 1.0の構文の幾つかは,変更されるか又は非推奨とされた。10.では,タイミング及び同期モジュールを規定する。
このモジュールのために意図された利用者は,二つに分けられる。すなわち,SMIL 2.0文書ビューア又は制作ツールの実装者,並びにタイミング及び同期のサポートの統合を望む他のXML言語の作成者である。このモジュールが統合される言語のことを,ホスト言語と呼ぶ。SMILのタイミング及び同期の要素及び属性を含む文書のことを,ホスト文書と呼ぶ。
このモジュールは,異なるプロファイル(すなわち,ホスト言語)で使われるので,関連する構文の要件は,変わってもよい。構文における相違点は,実用的であるように最小化されることが望ましい。
SMIL 2.0のタイミング及び同期のサポートは,15個のモジュールに分割され,この機能を統合する言語設計者のために広範囲の柔軟性を可能にする。これらのモジュールについては,10.7 SMILタイミング及び同期モジュールで記述される。
SMILタイミングは,メディアのプレゼンテーションを時間にわたって調整及び同期するための要素及び属性を定義する。メディアという用語は,広い意味をもち,静止画像,テキスト及び幾何図形といった離散メディア型,並びに映像,音声及びアニメーションといった本来的に時間に基づく連続メディア型を含む。
三つの同期要素が,共通的なタイミングについての事例をサポートする。
これらの要素は,時間コンテナと呼ばれる。これらの要素は,それらが含む子要素を調整された時間軸へとグループ化する。
SMILタイミングは,要素のタイミング振る舞いを指定するために使用できる属性も提供する。要素は,開始点及び単純持続時間をもつ。開始点は,様々な方法で指定できる。例えば,要素は,ある与えられた時点で開始できるし,他の要素が開始する時点又は(マウスクリックといった)何らかのイベントが発生した時点に基づいても開始できる。単純持続時間は,要素の基本的なプレゼンテーション持続時間を定義する。要素は,多くの回数又はある量の時間の間,単純持続時間を繰り返すと定義できる。単純持続時間及び繰返しの効果が,活性持続時間を定義するために組み合わされる。要素の活性持続時間が終了した時点で,要素は,プレゼンテーションから取り除かれるか,又は例えばプレゼンテーションにおける隙間を埋めるために凍結(終了時の状態で保持)される。
要素は,活性持続時間を開始する時に,活性化し,活性持続時間が終了する時に非活性化する。活性持続時間内で要素は活性であって,活性持続時間外で要素は非活性とする。
図10.1は,単純な<par>時間コンテナ内での繰返し要素の基本的なサポートを例示している。対応する構文が,図中に含まれる。
<par begin="0s" dur="33s"> <video begin="1s" dur="10s" repeatCount="2.5" fill="freeze" .../> </par>
図10.1 基本的なタイミングのサポートの帯状図。星印の付いた"単純*"持続時間は,その単純持続時間が部分的なこと(すなわち,早く切り取られること)を示す。
タイミングのこれらの様相を制御する属性は,メディア要素だけでなく,時間コンテナに対しても同様に適用できる。このことによって,例えば,シーケンス全体が,繰り返されること,並びに一つの単位として他のメディア及び時間コンテナと調整されることが可能となる。制作者は時間コンテナのために特定の単純持続時間を指定できるが,持続時間を指定しないでおくほうが容易なことが多い。指定しない場合には,単純持続時間は,(その時間コンテナに)含まれる子要素によって定義される。要素が単純持続時間を指定しない場合には,時間モデルは,その要素の暗黙的単純持続時間を定義する。例えば,シーケンスの暗黙的単純持続時間は,すべての子要素の活性持続時間の総和に基づく。
各々の時間コンテナは,含まれる子要素に対して,あるデフォルト及び制約も課す。例えば,<seq>では,要素は,デフォルトで前の要素が終了した直後に開始し,すべての時間コンテナにおいて,子要素の活性持続時間は,時間コンテナの単純持続時間の終了点を超えて拡張されないと制約される。図10.2は,繰り返す<par>時間コンテナが<video>子要素を制約する場合のその効果を例示している。
<par begin="0s" dur="12s" repeatDur="33s" fill="freeze" > <video begin="1s" dur="5s" repeatCount="1.8" fill="freeze" .../> </par>
図10.2 子要素に対する時間コンテナ制約の帯状図。星印の付いた"単純*"持続時間は,その単純持続時間が部分的なこと(すなわち,早く切り取られること)を示す。
SMILタイミングモデルは,時間コンテナ要素及びタイミング属性がどのように時間グラフを構成するために解釈されるかを定義する。時間グラフは,プレゼンテーションスケジュール及び同期関係のモデルとする。時間グラフは,動的な構造であって,利用者イベント,メディア配布,プレゼンテーションのDOM制御の効果を反映するために変化する。与えられた任意の瞬間において,時間グラフは,その瞬間での文書,及びこのモジュールで記述されるセマンティクスをモデル化する。しかし,利用者イベント又は他の要因が要素に変化を引き起こすので,セマンティクス規則は,更新された時間グラフを産出するように再評価される。
begin又はendの値が,イベント,又は他の要素の開始点又は活性終了点を参照する場合,時点の値を計算できないことがある。例えば,要素があるイベントが発生したときに開始すると定義されている場合,開始時点は,イベントが発生するまで分からない。このような開始点及び終了点の値は,未解決として記述される。そのような時点が分かるとき(すなわち,プレゼンテーション時間として計算できるとき),この時点は,解決されたという。解決された時点は,その値が"indefinite(不定)"でない場合には,確定的という。スケジュールされた対話的なタイミングの統一も参照すること。
理想的な環境では,プレゼンテーションは,指定されたとおりに正確に動作する。しかし,(ネットワークの遅延といった)様々な実世界の制限が,メディアの実際の再生に影響する可能性がある。プレゼンテーションアプリケーションが,メディア再生問題に対応してプレゼンテーションをどのように適応させ管理するかを,実行時同期振る舞いという。SMILは,制作者がプレゼンテーションのための実行時同期振る舞いを制御できるようにする属性を含む。
タイミングモデルは,最も単純な概念から最も複雑な概念を構築することによって定義される。最初に,基本的タイミング及び単純持続時間制御について定義し,次に,繰返し及び活性持続時間制約を制御する属性を定義する。最後に,時間コンテナを定義する要素を示す。
時間モデルは,ホスト文書のための幾つかの定義に依存する。ホスト文書は,ある時間間隔にわたって提示される。
10.3.1は,SMIL同期要素のすべてに共通するタイミング属性の集合を定義する。
以降では特に指定されない場合,属性のための引数値構文に誤りがあるときには,その属性は,(指定されなかったものとして)無視される。
要素のための基本タイミングは,begin属性及びdur属性を用いて記述される。制作者は,要素の開始時点を,単純な時計値からイベント(例えば,マウスクリック)が発生した時点まで,様々な方法で指定できる。要素の単純持続時間は,単純な時間値として指定される。begin属性の構文を次に示す。各々の属性値が取りうる値についての規定としての構文は,タイミング属性値の文法で記述される。属性値構文のまとめを,この文書の読者の理解を助けるために次に示す。
id(Id-value)(begin)は,Id-value.beginと等価とする。
id(Id-value)(end)は,Id-value.endと等価とする。
id(Id-value)(Clock-value)は,Id-value.begin+Clock-valueと等価とする。 parの子どもは,デフォルトで,parが開始する時点(begin="0s"と等価)で開始する。seqの子どもは,デフォルトで,前の子がその活性持続時間を終了した時点(begin="0s"と等価)で開始する。最初の子は,デフォルトで,親のseqが開始する時点で開始する。exclの子どもは,"indefinite"の開始点値をデフォルトとする。
begin値は,時点のリストを指定できる。これは,例えば,幾つかのイベントのうちの一つが挙げられた場合など,要素を開始する複数の"方法"又は"規則"を指定するために使用する。時点のリストは,複数の開始時点を定義することもでき,要素を1回より多く再生可能にする。この振る舞いは,例えば,最も早い開始点だけを実際には使用可能とするように,制御することができる。restart属性も参照すること。
一般的には,リストの中の最も早い時点が要素の開始時点を決定する。開始時点リストの評価に関する追加的な制約が存在する。その詳細は,開始時点及び終了時点のリストの評価で示す。
beginのための値のリストの中に"indefinite"を含むことは文法に合っているが,"indefinite"は,(それがリストの中にある)唯一つの値の場合にだけ有用となることに注意すること。"indefinite"を他の値と組み合わせることは,開始タイミングには影響を与えない。これは,DOMのbeginメソッドはbeginに対して"indefinite"を指定してもしなくても呼び出すことができることによる。
開始時点が,同期基底で変動するもの,マーカ値又は掛け時計値として指定される場合,その定義された時点は,実装によって親時間コンテナを基準にした時間に変換されなければならない。すなわち,オフセット値と等価とする。このことは,時間空間変換として知られ,その詳細は,局所的時間と大域的時間との間の変換で示される。
開始時点を定義するために負のオフセットを用いるのは,単に要素の同期関係を定義するだけとする。どのような場合でも,それは,要素に関する時間コンテナ制約を上書きしないし,プレゼンテーション時間の制約を上書きできない。
計算された開始時点は,計算された時点で要素を開始できない場合であっても,要素のスケジュールされた同期関係を定義する。時間モデルは,要素開始点の観測された時点ではなく,計算された開始時点を使う。
要素が,親時間コンテナが開始するより前の時点に解決される開始時点をもつ場合でも,親時間コンテナの制約は適用される。次に例を示す。
<par> <video id="vid" begin="-5s" dur="10s" src="movie.mpg" /> <audio begin="vid.begin+2s" dur="8s" src="sound.au" /> </par>
video要素は,par要素が開始する前には開始できない。parが開始した時,開始点は単に"過去に"発生したものと定義される。ビューアは,videoがメディアの5秒目から開始し5秒後に終了するのを観察することになる。audio要素はvideoの開始点を基準にして開始し,計算された開始時点が使用され,親によって制約されるとおりの観測される開始時点は使用されないことに注意すること。そのために,audioは,メディアの3秒目から開始し,同様に5秒間継続する。
その振る舞いは,要素にclipBegin値が適用されるものと考えることができる。この場合,このclipBeginは,要素の繰返しの最初の反復だけに適用される。この例では,どちらかのメディアが繰り返すと定義された場合には,メディアの2回目及びそれ以降の反復では,メディアの最初から再生される(repeatCount属性,repeatDur属性及びrepeat属性: 繰返し要素も参照すること。)。
このことを,次に規定として明示しておく。
その振る舞いは,要素にclipBegin値が適用されるものとして考えることができる。この場合,このclipBeginは,要素の繰返しの最初の反復だけに適用される。
要素は,実際には,次のアルゴリズムに従って計算された時点に開始する。
oは,与えられた開始点の値のオフセット値とし, dは,関連する単純持続時間とし, ADは,関連する活性持続時間とする。 rAtは,開始時点が解決される時点とする。 rToは,オフセットなしの,解決された同期基底又はイベント基底とする。 rDは,rTo - rAtとする。rD < 0の場合,rDは,0に設定する。 ADが不定の場合,o又はABS(o)のいずれの値よりも大きいものとする。 REM( x, y )は,x - (y * floor( x/y ))と定義する。 yが不定又は未解決の場合には,REM( x, y )は,単にxとする。 mb = REM( ABS(o), d ) - rDとする。ABS(o) >= AD の場合,要素は,開始しない。 mb >= 0の場合,メディアは,mbで開始する。 それ以外の場合,メディアは,mb + dで開始する。
要素が繰り返す場合,repeatイベントの反復値は,観測された繰返し回数ではなく,このアルゴリズムで計算された開始時点に基づいて計算された値をもつ。
次に例を示す。
<smil ...> ... <ref begin="foo.activateEvent-8s" dur="3s" repeatCount="10" .../> ... </smil>
要素は,利用者が要素"foo"を活性化した時(例えば,要素"foo"をクリックした時),開始する。その計算された開始時点は実際には8秒早いので,3回目の繰返し反復における,3秒の単純持続時間の2秒目で再生を開始する。1秒後,要素の4回目の反復が開始し,関連するrepeatイベントは,(0を最初としているので)反復値を3に設定する。要素は,活性化の後,22秒後に終了する。要素が開始する時,beginEventイベントが挙げられるが,そのイベントは,定義された開始時点に対応するタイムスタンプ値,すなわち8秒前の値,をもつ。(この要素の)あらゆる時間従属要素は,観測された開始時点ではなく,計算された開始時点を基準にして活性化される。
備考 スクリプト制作者は,計算された繰返し反復と観測された繰返し反復とを区別したいと望む場合,関連するイベントハンドラの中で実際のrepeatイベントを計数することができる。
開始時点は,要素と親時間コンテナとの間の同期関係を指定する。同期基底に類するもの,イベント基底,マーカ及び掛け時計のタイミングは,親時間コンテナのオフセットに暗黙的に変換され,オフセット値が直接にそのタイミングを指定するのと同じようにする。 seqの子どもについては,その結果は,常にseq時間コンテナの開始点からの正のオフセットとする。 しかし,par時間コンテナ及びexcl時間コンテナについては,親の開始時点を基準として計算されたオフセットが,負になってもよい。
要素は,実際には,親時間コンテナが開始するまでは開始できないことに注意すること。負の時間遅延をもつ要素は,それが(親要素よりも)早く開始したものとして振る舞う。 要素に対するプレゼンテーション効果(例えば,視覚メディアの表示)は,繰り返される要素の最初の反復及びそれだけに対して(同じオフセット分の)clipBegin値を与えたものと等価とする。繰返し振る舞いが指定されない場合には,負の開始点オフセットの要素のプレゼンテーション効果は,そのオフセット値と同じ大きさをもつclipBegin指定と等価とする。しかしながら,タイミングの副作用は,記述されたとおりのclipBegin値とは等価ではない。開始点値の時間従属要素は,要素がより早く開始したものとして振る舞う。
単純持続時間の長さは,dur属性を使って指定される。 dur属性の構文を次に示す。
durの引数値の構文に誤りがある場合,その属性は,(指定されなかったものとして)無視される。
属性値"media"が,メディアを定義しない要素(例えば,SMIL 2.0の時間コンテナ要素であるpar,seq及びexcl)において使われた場合,その属性は,(指定されなかったものとして)無視される。parの子どもなどの含まれるメディアは,そうした要素と直接に関連するメディアとはみなされない。
要素が(妥当な)dur属性をもたない場合,要素の単純持続時間は,要素の暗黙的持続時間と定義する。 暗黙的持続時間は,要素の型に依存する。基本的な区別は,メディア要素及び時間コンテナの異なる型の間にある。 メディア要素が時間付けされた子どもをもたない場合,その要素は,単純メディア要素と記述される。
制作者がdurに対して暗黙的持続時間よりも短い値を指定した場合,暗黙的持続時間は,指定された単純持続時間によって短縮される。
制作者が要素の暗黙的持続時間よりも長い単純持続時間を指定した場合,要素の暗黙的持続時間は,指定された単純持続時間にまで延長される。
単純持続時間が"indefinite"(不定)の場合,単純な事例が驚く結果をもたらすことがある点に注意すること。10.8.4の例4を参照すること。
次の例は,単純なオフセットの開始点タイミングを示す。<audio>要素は,<par>時間コンテナの開始5秒後に開始し,その4秒後に終了する。
<par> <audio src="song1.au" begin="5s" dur="4s" /> </par>
次の例は,同期基底の開始点タイミングを示す。<img>要素は,<audio>要素の開始2秒後に開始する。
<par> <audio id="song1" src="song1.au" /> <img src="img1.jpg" begin="song1.begin+2s" /> </par>
要素は,イベントに応答して開始すると指定することもできる。次の例では,image要素は,利用者が"show"要素をクリックした時に開始(表示)される。imageは,3.5秒後に終了(消滅)する。
<smil ...> ... <text id="show" ... /> <img begin="show.activateEvent" dur="3.5s" ... /> ... </smil ...>
SMIL 2.0は,活性持続時間について付加的な制御を提供する。end属性は,制作者が,単純なオフセット,時間基底,イベント基底,同期基底又はDOMメソッド呼出しを用いて終了点値を指定することによって制約できるようにする。活性持続時間を計算するために属性を組み合わせる規則は,活性持続時間の計算で記述される。
各々の属性値の異形についての規定としての構文規則は,タイミング属性値の文法で示される。構文のまとめを,読者への支援として次に示す。
endElement()メソッド呼出しによって決定される。end属性が指定されるが,dur,repeatCount及びrepeatDurのいずれもが指定されない場合,単純持続時間は,不定(indefinite)と定義され,終了点値が,活性持続時間が定義するために,この不定を制約する。この場合の単純持続時間の振る舞いは,durが"indefinite"として指定されているものとして,dur値のセマンティクスで定義される。
end値が,要素が活性化されている間に解決され,その解決された時点が過去にある場合,その要素は,活性持続時間をただちに終了することが望ましい。この要素の終了点を基準にして定義される時間従属は,観測された活性終了点ではなく(過去にあってもよい)計算された活性終了点を用いて解決されることが望ましい。
非推奨とされたsmil-1.0-syncbase-valuesは,意味的には,次のSMIL 2.0のend-value型に等価とする。
id(Id-value)(begin)は,Id-value.begin に等価とする。
id(Id-value)(end)は,Id-value.endに等価とする。
id(Id-value)(Clock-value)は,Id-value.begin+Clock-valueに等価とする。終了点値は,時点のリストを指定できる。これを使用して,例えば,幾つかのイベントのうちの一つが挙げられた場合に,要素を終了させるための複数の"方法"又は"規則"を指定できる。時点のリストは,複数の開始時点に対応可能な複数の終了時点を定義することもでき,これによって要素を複数回再生することができる。(この振る舞いは,制御できる。restart属性も参照すること。)
次のでは,dur属性は指定されていない。そのために,単純持続時間は,メディアの暗黙的持続時間と定義される。この場合(及びこの場合にだけ),endの値が,活性持続時間が暗黙的持続時間よりも長い持続時間を指定しているとき,その活性持続時間を延長する。ビデオは,8秒間表示され,その後,最終フレームが2秒間表示される。
<video end="10s" src="8-SecondVideo.mpg" .../>
制作者が,終了点制約だけでなく暗黙的持続時間を指定することを望む場合,dur属性を"media"と指定できる。次の例では,要素は,メディアの本来的持続時間(の終了)又はマウスクリックの早い方の時点で終了する。
<html ...> ... <video dur="media" end="click" src="movie.mpg" .../> ... </html>
これらの場合は,同期基底及びイベント基底の形式で負のオフセットを使用することから生じる。制作者は,このことが引き起こす可能性がある複雑さを意識することが望ましい。終了点(end)のための負のオフセットの処理も参照すること。
次の例では,活性持続時間は,10秒又は"foo"要素の終了の早い方の時点で終了する。これは,特に,"foo"がイベントを基準として開始又は終了すると定義される場合に,役に立つ。
<audio src="foo.au" dur="2s" repeatDur="10s" end="foo.end" .../>
次のでは,活性持続時間は,10秒で終了し,20秒と定義された単純持続時間を短縮する。その効果によって,要素の前半だけが実際には再生される。単純なメディア要素に対しては,制作者は,単にdur属性を使ってこれを指定できる。しかし,それ以外の場合,単純持続時間を活性持続時間とは独立して指定することは重要になる。
<par> <audio src="music.au" dur="20s" end="10s" ... /> </par>
次に示す例では,要素は,利用者が"gobtn"要素を活性化(例えば,クリック)した時点で開始する。活性持続時間は,親時間コンテナが開始した後の30秒後に終了する。
<smil ...>
...
<par>
<audio src="music.au" begin="gobtn.activateEvent" repeatDur="indefinite"
end="30s" ... />
<img src="foo.jpg" dur="40s" ... />
</par>
...
</smil>
利用者が30秒が経過する前にターゲットの要素をクリックしない場合,要素は決して開始しないことに注意すること。この場合,要素は,活性持続時間も活性終了点ももたない。
イベント構文のデフォルトが,単純な対話的振る舞いの定義を容易にする。次に,利用者が要素をクリックした時にイメージが停止する例を示す。
<html ...> ... <img src="image.jpg" end="click" /> ... </html>
endをイベント値とともに使用して,制作者は,対話的なイベント又は最大活性持続時間のどちらかに基づいて要素を終了できる。これは,怠惰な対話(lazy interaction)として知られることがある。
この例では,プレゼンテーションは,工場の処理工程を示す。各々の工程は,ビデオであって,要点を明確にするために3回繰り返すように設定されている。各々の要素は,ビデオをクリックするか,又は次の工程を表示するのが望ましいことを利用者に指示する"next"要素をクリックすることによって終了することもできる。
<smil ...> ... <seq> <video dur="5s" repeatCount="3" end="activateEvent; next.activateEvent" .../> <video dur="5s" repeatCount="3" end="activateEvent; next.activateEvent" .../> <video dur="5s" repeatCount="3" end="activateEvent; next.activateEvent" .../> <video dur="5s" repeatCount="3" end="activateEvent; next.activateEvent" .../> <video dur="5s" repeatCount="3" end="activateEvent; next.activateEvent" .../> </seq> ... </smil>
この場合,各々の要素の活性終了点は,開始後15秒(5秒の持続時間が3回)又は"next"のクリックの早い方と定義される。これによって,閲覧者は,座って見ているか,より早いペースでプレゼンテーションを進めることができる。
min属性及びmax属性は,制作者に要素の活性持続時間の上限及び下限を制御する方法を提供する。
minの引数値の構文に誤りがある場合,この属性は,(指定されなかったものとして)無視される。
minのデフォルトの値は"0"とする。これは,活性持続時間を一切制約しない。
maxの引数値の構文に誤りがある場合,この属性は,(指定されなかったものとして)無視される。
maxのデフォルト値は,"indefinite"とする。これは,活性持続時間を一切制約しない。
引数値"media"が,メディアを定義しない要素(例えばSMIL 2.0時間コンテナ要素であるpar,seq及びexcl)に関するmin又はmaxのいずれかに対して指定された場合,これらの属性は,それぞれ,(指定されなかったものとして)無視される。parの子どもなどの含まれるメディアは,要素と直接に関連するメディアとは見なされない。
min属性及びmax属性の両方が指定される場合,max値は,min値以上でなければならない。この要件が満たされない場合,両方の属性が無視される。
min又はmaxが指定された要素の活性持続時間を計算するために適用する規則は,次のとおりとする。要素の活性持続時間が計算されるごとに(すなわち,要素が複数回開始される場合はその要素の各間隔ごとに),min属性及びmax属性を考慮せずに(活性持続時間の計算で示すアルゴリズムを適用することによって)計算を行う。この段階の結果を,min及びmaxの境界に照らして検査する。結果が境界内の場合は,この最初に計算された値は正しい。それ以外の場合には,次に示す二つの状況が起こり得る。
最初に計算された持続時間がmax値よりも大きい場合,その要素の活性持続時間は,max値と等しくなるように定義される。次の最初の例を参照すること。
最初に計算された持続時間がmin値よりも小さい場合,その要素の活性持続時間は,min値に等しくなり,その要素の振る舞いは,次に示すいずれかとする。
例1。次の例では,ビデオは10秒間だけ再生される。
<smil ...> ... <par > <video id="video_of_15s" max="10s".../> </par> ... </smil>
例2。次の例では,活性化イベントが10秒経過する前に発生する場合には,この活性化(例えば,クリック)は,ビデオをすぐには中断しないが,ビデオは10秒経過するまで再生し,その後停止する。10秒経過した後にクリックイベントが発生する場合には,ビデオは,クリックが発生するまで(繰返し)再生される。endEventは,それぞれの繰返しの単純な終了点ではなく,10秒経過した後でクリックが発生する場合だけに,挙げられることに注意すること。
<smil ...> ... <par > <video id="video_of_15s" repeatDur="indefinite" end="activateEvent" min="10s".../> </par> ... </smil>
例3。次の例では,活性化イベントが要素"foo"に5秒目に発生する場合には,このイベントは,時間コンテナをすぐには終了しないで,むしろ12秒目で終了させる。単純持続時間は,"indefinite"と定義される。これは,end属性が,dur属性なしで指定されていることによる。そのために,時間コンテナは,12秒目で終了するまで,正常に再生される。
<smil ...> ... <par end="foo.activateEvent" min="12s" > <video id="video_of_15s" .../> <video id="video_of_10s" .../> </par> ... </smil>
例4。次の例では,クリックイベントが最初のビデオ上で5秒目に発生する場合,時間コンテナの単純持続時間は,5秒と計算される。単純持続時間の終了点と活性持続時間の終了点との間の時点でのfill属性を考慮して,二つのビデオは,5秒目〜12秒目の間凍結される。
<html ...> ... <par endsync="first" min="12s" fill="freeze" > <video id="video_of_15s" end="click" ...> <video id="video_of_10s" .../> </par> ... </html>
例5。次の例では,時間コンテナの単純持続時間は5秒と定義され,min属性の制約が活性持続時間を12秒と定義している。この場合のfillのデフォルト値は,"remove"なので,5秒目〜12秒目の間は,この時間コンテナに関しては何も表示されない。
<par dur="5s" min="12s" > <video id="video_of_15s"/> <video id="video_of_10s" /> </par>
要素がその親よりも前に開始すると定義されている場合(例えば,単純な負のオフセット値をもつ場合),minの持続時間は,観測された開始点ではなく計算された開始時点から計測される(次の例1を参照)。これは,(次の例2のとおりに)min値が,観測される効果をもたないかもしれないことを意味する。
例1。次に示す例では,画像は時間コンテナの最初から2秒間表示される。
<par> <img id="img" begin="-5s" min="7s" dur="5s" .../> </par>
例2。次に示す例では,画像は全く表示されない。
<par> <img id="img" begin="-5s" min="4s" dur="2s" .../> </par>
min属性及び再起動及び子の持続時間に関する時間コンテナ制約も参照すること。
構文規定は,[XML10]で定義されるとおりのEBNFを用いて定義される。
次に示す構文規定では,許容される空白は,"S"として示される。"S"は,([XML10]の"S"のための定義から取ってきた)次に従うとして定義される。
S ::= (#x20 | #x9 | #xD | #xA)+
begin-value-listは,タイミング指定子をセミコロンで区切ったリストとする。
begin-value-list ::= begin-value (S? ";"S? begin-value-list )? begin-value ::= (offset-value | syncbase-value | event-value | repeat-value | accesskey-value | media-marker-value | wallclock-sync-value | "indefinite" )
end-value-listは,タイミング指定子をセミコロンで区切ったリストとする。
end-value-list ::= end-value (S? ";"S? end-value-list )? end-value ::= (offset-value | syncbase-value | event-value | repeat-value | accesskey-value | media-marker-value | wallclock-sync-value | "indefinite" )
幾つかのタイミング指定値は,類似の構文をもつ。値リスト(value-list)の中の個々の項目を構文解析するためには,次の方法が正しい解釈を定義する。さらに,Id-values及びEvent-symbolsは,XML NMTOKEN値であって,"full stop"文字('.')及び"hyphen-minus"文字('-')を含むことが許される。"reverse solidus"文字('\')(1)は,Id-values及びEvent-symbolsの内部でこれらの文字を別扱いするために用いられなければならない。それ以外の場合には,これらの文字は,"full stop"区切り子(ドット区切り子)及び"hyphen-minus"記号(ハイフン又はマイナスの記号)として,それぞれ解釈される。これらの規則が一度解釈されたならば,ただし,同期基底値,イベント値又はメディアマーカ値の中のId-valuesがさらに処理される前に,先行する別扱い文字及び埋め込まれた別扱い文字はすべて取り除かれることが望ましい。
'+'又は'-')で始まる場合,その値はオフセット値として構文解析される。
\'別扱い文字が前置されるあらゆる'.'文字は,区切り子として扱わないほうがよく,通常のトークン文字として扱うことが望ましい。
.'区切り子文字を含まない場合,値は,eventbase-elementが指定されない(すなわち,デフォルトの)event-valueとして構文解析されることが望ましい。
.begin"又は".end"で終わる場合,値は,syncbase-valueとして構文解析されることが望ましい。
.marker("を含む場合,値は,media-marker-valueとして構文解析されることが望ましい。
この手法によって,実装は,wallclockトークン及びindefiniteトークンを予約済み要素IDとして,begin,end及びmarkerを予約済みイベント名として,取り扱うことができる。その一方で,これらの名前をもつ要素及びイベントを参照してもよいという別扱い機構は,保持される。
クロック値は,次の構文をもつ。
Clock-value ::= ( Full-clock-value | Partial-clock-value | Timecount-value ) Full-clock-value ::= Hours ":" Minutes ":" Seconds ("." Fraction)? Partial-clock-value ::= Minutes ":" Seconds ("." Fraction)? Timecount-value ::= Timecount ("." Fraction)? (Metric)? Metric ::= "h" | "min" | "s" | "ms" Hours ::= DIGIT+; any positive number Minutes ::= 2DIGIT; range from 00 to 59 Seconds ::= 2DIGIT; range from 00 to 59 Fraction ::= DIGIT+ Timecount ::= DIGIT+ 2DIGIT ::= DIGIT DIGIT DIGIT ::= [0-9]
Timecount値について,デフォルト単位添え字は,(秒を示す)"s"とする。 クロック値の中では,(その中に)埋め込まれた空白は許可しない。ただし,先行する空白文字及び後続する空白文字は,無視される。
文法に合ったクロック値の例を次に示す。
02:30:03 = 2時間30分3秒
50:00:10.25 = 50時間10秒250ミリ秒
02:33
= 2分33秒
00:10.5 = 10.5秒 = 10秒500ミリ秒
3.2h
= 3.2時間 = 3時間12分
45min = 45分
30s = 30秒
5ms = 5ミリ秒
12.467 = 12秒467ミリ秒
小数値は,秒の(10を基底とする)浮動小数点値の定義だけとする。許される桁数に制限はない。ただし,実際の精度は実装によって変わってもよい。
次に例を示す。
00.5s = 500ミリ秒 00:00.005 = 5ミリ秒
オフセット値は,要素がその同期基底を基準にして開始又は終了するのが望ましい場合に指定するために使用する。
オフセット値は,次の構文をもつ。
offset-value ::= (( S? "+" | "-" S? )? ( Clock-value )
オフセット値のための暗黙的同期基底は,時間コンテナに依存する。
非推奨とする。
smil-1-syncbase-value ::= "id(" Id-value ")" ( "(" ( "begin" | "end" | Clock-value) ")" )?
ID参照値は,文書中の他の要素の"id"属性の値への参照とする。
Id-value ::= Id-ref-value
Id-ref-value ::= IDREF | Escaped-Id-ref-value
Escaped-Id-ref-value ::= Escape-Char NMTOKEN
Escape-Char ::= "\"
IDREFによって参照された要素が,内容制御モジュールで記述されたとおりに無視される場合(例えば,その要素が偽と評価される試験属性を指定する場合),関連付けられた時間値(すなわち,Id-valueを指定する同期基底値又はイベント基底値)は,無効とみなされる。
無視される要素のセマンティクスは,SMILの将来の版で変更されるかもしれない。可能性があるセマンティクスとしては,関連する同期弧の引数が無効ではないが,その代わり常に"未解決"となっていることがある。この振る舞いをSMILタイミング及び同期のこの版でシミュレートする必要がある場合,制作者は,値"indefinite"をbegin属性又はend属性のリストの中に含めることができる。
同期基底値は,同期基底要素として参照される,他の要素の"id"属性の値を定義するSyncbase-element項で始まる。
同期基底値は,次の構文をもつ。
Syncbase-value ::= ( Syncbase-element "." Time-symbol )
( S? ("+"|"-")
S? Clock-value )?
Syncbase-element ::= Id-value
Time-symbol ::= "begin" |
"end"
同期基底要素は,次の時間記号の一つを用いて限定される。
例
begin="x.end-5s" :
"x"が終了する5秒前に開始する。
begin=" x.begin " :
"x"が開始する時に開始する。
end="x.begin + 1min" :
"x"が開始して1分後に終了する。
イベント値は,イベント基底要素を指定するEventbase-element項で始まる。イベント基底要素は,イベントが観測される要素とする。DOMのイベントバブル動作が与えられた場合,イベント基底要素は,イベントを挙げた要素か,又はバブル動作イベントが観測できる先祖要素かのいずれかであってよい。詳細は,DOM水準2 イベント規定[DOM2Events]を参照すること。
イベント値は,次の構文をもつ。
Event-value ::= ( Eventbase-element "." )?
Event-symbol
( S?
("+"|"-") S?
Clock-value )?
Eventbase-element ::= ID
イベント基底要素(eventbase-element)は,ホスト文書に含まれる他の要素でなければならない。
Eventbase-element項が存在しない場合,イベント基底要素は,イベント基底タイミングが指定されている要素(現在の要素)をデフォルトとする。
イベント値は,Event-symbolを指定しなければならない。この項は,イベント基底要素上で挙げられるイベントの名前を指定するXMLのNMTOKENとする。ホスト言語設計者は,どのイベントが指定できるかを指定しなければならない。
統合する側の言語がサポートするイベントを指定しない場合,イベント基底時間値は,実効的にはその言語について未サポートとする。
ホスト言語は,イベント値をもつオフセットのサポートを含まないことを選択してよい。ホスト言語は,このサポートが省略されるかどうかを指定しなければならない。
ホスト言語が,(DOM水準2 イベント規定[DOM2Events]がサポートするとおりの)動的に生成されるイベントを許可する場合,すべての可能性のあるEvent-symbol名を指定することはできないので,認識されない名前をエラーとみなしてはならない。
ホスト言語が明示的に規定しない場合には,(audio要素又はその他の非視覚要素のactivateEvent又はクリックといった)イベント基底要素上で挙げることができないイベントの指定は,エラーとはみなされない。そのイベントは指定された要素で挙げられることは決してないので,そのイベント基底値が解決されることは決してない。
構文の最後の項は,オプションのオフセット値を指定する。オフセット値は,イベントの時点からのオフセットとする。
(例えば,SMIL文書の中の時間コンテナのように)イベント基底要素が関連するレイアウトをもたない場合,(例えば,マウスクリックのように)利用者インタフェースイベントの中には定義されないものがあってもよい。ホスト言語設計者は,デフォルトのイベント基底要素の定義を上書きしてもよい。この例として,SMILアニメーションの要素(animate,animateMotionなど)は,デフォルトのイベント基底要素をアニメーションのターゲット要素とすると規定する。[[SMIL Animation]]も参照すること。
このモジュールは,beginEvent及びendEventを含んだ,ホスト言語のためにサポートされる集合の中に含まれてもよい幾つかのイベントを定義する。これらを同期基底時点値と混乱しないことが望ましい。イベント及びイベントモデルについての箇条を参照すること。
イベントに基づくタイミングのセマンティクスの詳細は,スケジュール及び対話型タイミングの統合で示す。イベント感度に関する制約の詳細は,イベント感度で示される。
例
begin=" x.load " :
"load"が"x"上で観測された時に開始する。
begin="x.focus+3s" :
"x"上で"focus"イベントが発生した3秒後に開始する。
begin="x.endEvent+1.5s" :
"x"上で"endEvent"イベントが発生した1.5秒後に開始する。
begin="x.repeat" :
"x"上でrepeatイベントが観測ざれるごとに開始する。
Begin each time a repeat event is observed on "x"
次に,限定された繰返しをもつイベント基底値の例を示す。
<html ...> ... <video id="foo" repeatCount="10" end="endVideo.click" ... /> <img id="endVideo" begin="foo.repeat(2)" .../> ... </html>
画像"endVideo"は,ビデオ"foo"の2回目の繰返しの時に表示される。この例では,ビデオが少なくとも2回再生された後,利用者はビデオを停止できる。
繰返し値は,イベント値の変形であって,限定された繰返しイベントをサポートする。イベント及びイベントモデルで定義されるrepeatイベントは,反復値にもとづいてイベントを限定するために添え字を追加できる。
繰返し値は,次の構文をもつ。
Repeat-value ::= ( Eventbase-element "." )?
"repeat(" iteration
")"
( S?
("+"|"-") S?
Clock-value )?
iteration ::=
DIGIT+
この限定形式が使われる場合,イベント基底値は,指定された反復に一致する反復値をもつ繰返しが観測された場合だけ,解決される。
限定された繰返しイベント構文によって,制作者は,要素の個々の繰返しだけに対応することができる。
アクセスキー値によって,制作者は,注目点に関連することとは独立に,開始時点又は終了時点を特定のキーの押下に結び付けることができる。これは,HTMLアクセスキーサポートに基づいてモデル化されている。HTMLの場合とは異なり,利用者エージェントは,アクセスキーを活性化するために,修飾キー(例えば,"ALT")が必要と要求しないことが望ましい。
アクセスキー値は,次の構文をもつ。
Accesskey-value ::= "accesskey(" character
")"ここで,characterは,[ISO10646]による単一の文字とする。
( S?
("+"|"-") S?
Clock-value )?
時点値(Clock-value)は,利用者によってアクセスキー文字が入力された時点と定義する。
ある種のメディアは,そのメディアにおける特定の点(すなわち,時点)と名前を関連付ける関連するマーカ値をもつことができる。メディアマーカ値は,これらのマーカ値によって,開始時点又は終了時点を定義する手段を提供する。参照された識別子がマーカをサポートするメディア要素と関連付けられていない場合,又は指定されたマーカ名がそのメディア要素によって定義されていない場合,関連する時点は,決して解決されないことに注意すること。
Media-Marker-value ::= Id-value ".marker(" S? marker-name S? ")"
掛け時計同期値は,次の構文をもつ。許可される値は, [DATETIME]において示される幾つかの"プロファイル"に基づく。ただし,[DATETIME]は,[ISO8601]に基づく。
wallclock-sync-value ::= "wallclock(" S? (DateTime | WallTime | Date) S? ")" DateTime ::= Date "T" WallTime Date ::= Years "-" Months "-" Days WallTime ::= (HHMM-Time | HHMMSS-Time)(TZD)? HHMM-Time ::= Hours24 ":" Minutes HHMMSS-Time ::= Hours24 ":" Minutes ":" Seconds ("." Fraction)? Years ::= 4DIGIT; Months ::= 2DIGIT; range from 01 to 12 Days ::= 2DIGIT; range from 01 to 31 Hours24 ::= 2DIGIT; range from 00 to 23 4DIGIT ::= DIGIT DIGIT DIGIT DIGIT TZD ::= "Z" | (("+" | "-") Hours24 ":" Minutes )
完全な日付,時及び分は次のとおり。 YYYY-MM-DDThh:mmTZD (例えば,1997-07-16T19:20+01:00) 完全な日付,時,分及び秒は次のとおり。 YYYY-MM-DDThh:mm:ssTZD (例えば,1997-07-16T19:20:30+01:00) 完全な日付,時,分,秒及び小数点以下の秒は次のとおり。 YYYY-MM-DDThh:mm:ss.sTZD (例えば,1997-07-16T19:20:30.45+01:00)
Minutes,Seconds,Fraction,2DIGIT及びDIGITの構文は,Clock-valuesに対して定義されるとおりとすることに注意すること。日付及び時刻の指定の内部では,空白は許可されないことに注意すること。
時間帯オフセットを取り扱う三つの方法がある。
プレゼンテーションエンジンは,掛け時計値を文書内の時間に変換できなければならない。
結果としての開始時点又は終了時点は,親時間コンテナの開始点以前又は終了点以後となってもよいことに注意すること。これはエラーとしないが,その場合でも時間コンテナ制約は適用される。いずれにしても,begin属性及びend属性のセマンティクスが,掛け時計値の解釈を支配する。
次の例は,すべて,開始点を,UTCの2000年1月1日の真夜中に指定している。
begin="wallclock( 2000-01-01Z )" begin="wallclock( 2000-01-01T00:00Z )" begin="wallclock( 2000-01-01T00:00:00Z )" begin="wallclock( 2000-01-01T00:00:00.0Z )" begin="wallclock( 2000-01-01T00:00:00.0Z )" begin="wallclock( 2000-01-01T00:00:00.0-00:00 )"
次の例は,開始点を,アメリカ合衆国の太平洋時間帯における1990年7月28日午後3時30分に指定している。
begin="wallclock( 1990-07-28T15:30-08:00 )"
次の例は,開始点を,文書が表示される場所の午前8時に指定している。
begin="wallclock( 08:00 )"
endsync属性は,子ども(要素)の関数として,時間コンテナの暗黙的持続時間を制御する。endsync属性は,時間コンテナ要素であるpar及びexcl,並びに時間付けされた子どもをもつメディア要素(例えば,animate要素又はarea要素)に対してだけ有効とする。統合言語は,endsync属性を,時間コンテナセマンティクスをもついかなる要素において許可してもよい。endsync属性は,"未知(unknown)"の持続時間をもつ子ども,例えば,持続時間を決定するためには通しで再生しなければならないMPEG映像又はイベントに基づく終了タイミングをもつ要素,と共に用いると特に有用になる。
endsync及び再始動のセマンティクス
endsync及び一時停止された要素
pause()メソッドによって一時停止された要素は,その活性持続時間を完了していない。(少なくとも一回は活性持続時間を完了することをまだ行っていない)一時停止された要素は,endsyncの評価において考慮されなければならない。例えば,endsync=lastをもつ時間コンテナが子要素を一時停止させた場合,時間コンテナの単純持続時間は,一時停止された要素が再開するか,又はそうでなければ終了するまで,終了しない。
endsync及び解決されない子時間のセマンティクス
次の擬似コードは,endsyncのアルゴリズムを示している。
// // boolean timeContainerHasEnded() // // method on time containers called to evaluate whether // time container has ended, according to the rules of endsync. // Note: Only supported on par and excl // // A variant on this could be called when a child end is updated to // create a scheduled (predicted) end time for the container. // // Note that we never check the end time of children - it doesn't matter. // // Assumes: // child list is stable during evaluation // isActive state of children is up to date for current time. // [In practice, this means that the children must all be // pre-visited at the current time to see if they are done. // If the time container is done, and repeats, the children // may be resampled at the modified time.] // // Uses interfaces: // on TimedNode: // isActive() tests if node is currently active // hasStarted() tests if node has (ever) begun // begin and end begin and end TimeValues of node // // on TimeValue (a list of times for begin or end) // is Resolved(t) true if there is a resolved time // at or after time t // boolean timeContainerHasEnded() { TimeInstant now = getCurrentTime(); // normalized for time container boolean assumedResult; // For first or ID, we assume a false result unless we find a child that has ended // For last and all, we assume a true result unless we find a disqualifying child if( ( endsyncRule == first ) || ( endsyncRule == ID ) ) assumedResult = false; else assumedResult = true; // Our interpretation of endsync == all: // we're done when all children have begun, and none is active // // loop on each child in collection of timed children, // and consider it in terms of the endsyncRule foreach ( child c in timed-children-collection ) { switch( endsyncRule ) { case first: // as soon as we find an ended child, return true. if( c.hasStarted() & !c.isActive() ) return true; // else, keep looking (assumedResult is false) break; case ID: // if we find the matching child, just return result if( endsyncID == c.ID ) return( c.hasStarted() & !c.isActive() ); // else, keep looking (we'll assume the ID is valid) break; case last: // we just test for disqualifying children // If the child is active, we're definitely not done. // If the child has not yet begun but has a resolved begin, // then we're not done. if( c.isActive() || c.begin.isResolved(now) ) return false; // else, keep checking (the assumed result is true) break; case all: // we just test for disqualifying children // all_means_last_done_after_all_begin // If the child is active, we're definitely not done. // If the child has not yet begun then we're not done. // Note that if it has already begun, // then we still have to wait for any more resolved begins if( c.isActive() || !c.hasStarted() || c.begin.isResolved(now) ) return false; // else, keep checking (the assumed result is true) break; } // close switch } // close foreach loop return assumedResult; } // close timeContainerHasEnded()
SMIL 1.0は,repeat属性を導入した。これは,メディア要素又は時間コンテナ全体を繰り返すために使用される。SMIL 2.0は,SMIL 1.0 repeat属性を置き換える,繰返し機能のための二つの新しい制御を導入する。その新しい属性,repeatCount及びrepeatDurは,典型的な使用事例により近く一致するセマンティクスを提供し,それら新しい属性は,繰返し振る舞いの持続時間についてより多くの制御を提供する。
要素の繰返しは,単純持続時間が直列的に数回"再生"されるようにする。これは,要素メディア(又は時間コンテナの場合は時間軸全体)の内容を,実効的にコピーするか,又はループさせる。制作者は,repeatCountを使用して何回繰り返すか,又はrepeatDurを使用してどのくらいの間 繰り返すかのどちらかを指定できる。各々の繰返し反復は,単純持続時間を"再生"する一つのインスタンスとする。
次の例では,audioの暗黙的持続時間はrepeatCountによって制約される。クリップの最初の半分だけが再生される。活性持続時間は,1.5秒になる。
<audio src="3second_sound.au" repeatCount="0.5" />
この例では,3秒の(暗黙的)単純持続時間は,3回通して再生されるが,親のpar上のdur属性によって制約される。活性持続時間は,9秒になる。
<par dur="9s">
<audio src="3second_sound.au" repeatCount="100" />
</par>
次の例では,2.5秒の単純持続時間は,二回繰り返される。活性持続時間は,5秒になる。
<audio src="background.au" dur="2.5s" repeatCount="2" />
次の例では,3秒の(暗黙的)単純持続時間は,2回完全に繰り返され,さらに,最初の半分がもう一度繰り返される。活性持続時間は,7.5秒になる。
<audio src="3second_sound.au" repeatCount="2.5" />
次の例では,audioは,全体で7秒間繰り返す。それは,完全に2回再生され,その後に,2秒の断片的な部分が続く。これは,repeatCountを2.8とした場合と等価になる。
<audio src="music.mp3" dur="2.5s" repeatDur="7s" />
単純持続時間が不定な場合,繰返し振る舞いが定義されないことに注意すること。(ただし,それでも,repeatDurは,活性持続時間に寄与することにも注意すること。)次の例では,単純持続時間は,それぞれ,0及び不定であって,repeatCountは無視される。しかし,これはエラーとは考えない。活性持続時間は,単純持続時間に等しい。すなわち,最初の要素については,活性持続時間は0であって,第2の要素については,活性持続時間は不定になる。
<img src="foo.jpg" repeatCount="2" /> <img src="bar.png" dur="indefinite" repeatCount="2" />
次の例では,単純持続時間は,画像(img)については0であって,テキスト(text)要素については不定になり,繰返し振る舞いは意味がない。活性持続時間は,最初の要素については0だが,第2の要素については,活性持続時間は,repeatDur値によって決定されるので,10秒になる。その効果によって,テキストは10秒間表示される。
<img src="foo.jpg" repeatDur="10s" /> <text src="intro.html" dur="indefinite" repeatDur="10s" />
次の例では,音声(audio)メディアが5秒のrepeatDurよりも長い場合,活性持続時間が,実効的にその単純持続時間を短くする。
<audio src="8second_sound.au" repeatDur="5s" />
次の例にあるとおり,repeatCount属性及びrepeatDur属性は,時間軸全体(すなわち,時間コンテナの単純持続時間)を繰り返すためにも使用できる。その繰返しの列は,13秒の暗黙的持続時間をもつ。それは,5秒後に再生を開始し,三つの画像の列を3回繰り返す。活性持続時間は,このようにして39秒間になる。
<seq begin="5s" repeatCount="3" > <img src="img1.jpg" dur="5s" /> <img src="img2.jpg" dur="4s" /> <img src="img3.jpg" dur="4s" /> </seq>
min属性は,最小活性持続時間に到達する前には,要素を再始動させないわけではない。次の例で,"user.activateEvent"が2秒で一度発生し,5秒で再び発生する場合,"image"要素は2秒で開始し,3秒間再生し,5秒で再始動する。(5秒で開始する)再始動された間隔は,12秒まで画像を表示する。
<smil ...>
...
<par>
<img id="image" begin="user.activateEvent" min="7s" dur="5s"
restart="always" fill="freeze".../>
</par>
...
</smil>
SMIL 1.0のrepeat属性は,repeatCountと同じように振る舞う。しかし,それは,repeat属性がない場合の要素のコピーを指定された回数だけ含む列を用いてその機能を定義する。この定義は,制作者及び実装者の間で幾つかの混乱を引き起こした。SMIL 1.0規定[SMIL10]も参照すること。
特に,SMIL 1.0 end属性がrepeat属性と共に使用された場合に,その振る舞いに関して混乱した。SMIL 2.0は,非推奨のrepeat属性が使用された場合,end属性に要素の単純持続時間を定義させるという通常行われていることに準拠する。SMIL文書利用者エージェントだけが,end属性についてのこのセマンティクスをサポートしなければならない。単一のSMIL 1.0の"end"値(すなわち,offset-value又はsmil-1.0-syncbase-valueであって,新しいSMIL 2.0タイミングではないもの)だけが,非推奨のrepeat属性と共に使用される場合に許される。repeatが要素上のrepeatCount又はrepeatDurと共に使用される場合,又はrepeatが文法に合わないend値と共に使用される場合,repeat値は,無視される。
要素の活性持続時間が終了するとき,最終状態で凍結してもよいし,もはや表示されなくてもよい。後者は,すなわち,その効果はプレゼンテーションから取り除かれる。要素の凍結要素は,単純持続時間の最後のインスタンスにおいて定義された最終状態を使用して,拡張される。これは,プレゼンテーションにおける隙間を埋めるために,又は要素をプレゼンテーションにおける文脈として拡張するために使用できる。後者は,例えば,追加アニメーションを用いて行える。[SMIL-ANIMATION]を参照すること。
fill属性は,制作者が,要素の最終状態を凍結することによって,要素が活性持続時間を越えて拡張されることが望ましいと指定できるようにする。fill属性は,活性持続時間がmin属性で指定された持続時間未満である場合,その振る舞いを決定するためにも使用される。この理由のために,この記述は,活性持続時間の終了を参照するのではなく,"単純持続時間の最後のインスタンス(繰返し)"を参照する。
fill属性の構文は,二つの拡張があるが,SMIL 1.0と同じとする。さらに,fill属性は,時間コンテナを含んだあらゆる時間付けされた要素に適用してよいようになっている。