10. SMIL 2.0 タイミング及び同期モジュール

10.1 導入

SMIL 1.0は,メディア同期の基礎的な問題を解決し,マルチメディア内容を振り付けする強力な方法を定義した。SMIL 2.0は,タイミング及び同期のサポートを拡張し,タイミングモデル及び関連する構文に能力を追加する。SMIL 1.0の構文の幾つかは,変更されるか又は非推奨とされた。10.では,タイミング及び同期モジュールを規定する。

このモジュールのために意図された利用者は,二つに分けられる。すなわち,SMIL 2.0文書ビューア又は制作ツールの実装者,並びにタイミング及び同期のサポートの統合を望む他のXML言語の作成者である。このモジュールが統合される言語のことを,ホスト言語と呼ぶ。SMILのタイミング及び同期の要素及び属性を含む文書のことを,ホスト文書と呼ぶ。

このモジュールは,異なるプロファイル(すなわち,ホスト言語)で使われるので,関連する構文の要件は,変わってもよい。構文における相違点は,実用的であるように最小化されることが望ましい。

SMIL 2.0のタイミング及び同期のサポートは,15個のモジュールに分割され,この機能を統合する言語設計者のために広範囲の柔軟性を可能にする。これらのモジュールについては,10.7 SMILタイミング及び同期モジュールで記述される。

10.2 SMILタイミングの概要

SMILタイミングは,メディアのプレゼンテーションを時間にわたって調整及び同期するための要素及び属性を定義する。メディアという用語は,広い意味をもち,静止画像,テキスト及び幾何図形といった離散メディア型,並びに映像,音声及びアニメーションといった本来的に時間に基づく連続メディア型を含む。

三つの同期要素が,共通的なタイミングについての事例をサポートする。

これらの要素は,時間コンテナと呼ばれる。これらの要素は,それらが含む子要素を調整された時間軸へとグループ化する。

SMILタイミングは,要素のタイミング振る舞いを指定するために使用できる属性も提供する。要素は,開始点及び単純持続時間をもつ。開始点は,様々な方法で指定できる。例えば,要素は,ある与えられた時点で開始できるし,他の要素が開始する時点又は(マウスクリックといった)何らかのイベントが発生した時点に基づいても開始できる。単純持続時間は,要素の基本的なプレゼンテーション持続時間を定義する。要素は,多くの回数又はある量の時間の間,単純持続時間を繰り返すと定義できる。単純持続時間及び繰返しの効果が,活性持続時間を定義するために組み合わされる。要素の活性持続時間が終了した時点で,要素は,プレゼンテーションから取り除かれるか,又は例えばプレゼンテーションにおける隙間を埋めるために凍結(終了時の状態で保持)される。

要素は,活性持続時間を開始する時に,活性化し,活性持続時間が終了する時に非活性化する。活性持続時間内で要素は活性であって,活性持続時間外で要素は非活性とする。

図10.1は,単純な<par>時間コンテナ内での繰返し要素の基本的なサポートを例示している。対応する構文が,図中に含まれる。

Basic strip illustration of timing

<par begin="0s" dur="33s">
   <video begin="1s" dur="10s" repeatCount="2.5" fill="freeze" .../>
</par>

図10.1 基本的なタイミングのサポートの帯状図。星印の付いた"単純*"持続時間は,その単純持続時間が部分的なこと(すなわち,早く切り取られること)を示す。

タイミングのこれらの様相を制御する属性は,メディア要素だけでなく,時間コンテナに対しても同様に適用できる。このことによって,例えば,シーケンス全体が,繰り返されること,並びに一つの単位として他のメディア及び時間コンテナと調整されることが可能となる。制作者は時間コンテナのために特定の単純持続時間を指定できるが,持続時間を指定しないでおくほうが容易なことが多い。指定しない場合には,単純持続時間は,(その時間コンテナに)含まれる子要素によって定義される。要素が単純持続時間を指定しない場合には,時間モデルは,その要素の暗黙的単純持続時間を定義する。例えば,シーケンスの暗黙的単純持続時間は,すべての子要素の活性持続時間の総和に基づく。

各々の時間コンテナは,含まれる子要素に対して,あるデフォルト及び制約も課す。例えば,<seq>では,要素は,デフォルトで前の要素が終了した直後に開始し,すべての時間コンテナにおいて,子要素の活性持続時間は,時間コンテナの単純持続時間の終了点を超えて拡張されないと制約される。図10.2は,繰り返す<par>時間コンテナが<video>子要素を制約する場合のその効果を例示している。

More complex strip illustration of timing

<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 言語定義

タイミングモデルは,最も単純な概念から最も複雑な概念を構築することによって定義される。最初に,基本的タイミング及び単純持続時間制御について定義し,次に,繰返し及び活性持続時間制約を制御する属性を定義する。最後に,時間コンテナを定義する要素を示す。

時間モデルは,ホスト文書のための幾つかの定義に依存する。ホスト文書は,ある時間間隔にわたって提示される。

10.3.1 属性

10.3.1は,SMIL同期要素のすべてに共通するタイミング属性の集合を定義する。

以降では特に指定されない場合,属性のための引数値構文に誤りがあるときには,その属性は,(指定されなかったものとして)無視される。

begin属性及びdur属性: 基本タイミング支援

要素のための基本タイミングは,begin属性及びdur属性を用いて記述される。制作者は,要素の開始時点を,単純な時計値からイベント(例えば,マウスクリック)が発生した時点まで,様々な方法で指定できる。要素の単純持続時間は,単純な時間値として指定される。begin属性の構文を次に示す。各々の属性値が取りうる値についての規定としての構文は,タイミング属性値の文法で記述される。属性値構文のまとめを,この文書の読者の理解を助けるために次に示す。

begin : smil-1.0-syncbase-value | begin-value-list
要素が活性化する時点を定義する。
属性値は,SMIL 1.0での同期基底宣言又はセミコロンで区切られた値のリストとする。
smil-1.0-syncbase-value : "id(" Id-value ")" ( "(" ( "begin" | "end" | Clock-value ) ")" )?
これは,非推奨とする。同期基底及びその同期基底からのオフセットを記述する。要素開始点は,他の要素の開始点又は活性終了点を基準にして定義される。
begin-value-list : begin-value (";" begin-value-list )?
セミコロンで区切られた開始点の値のリストとする。開始時点のリストの解釈は,開始時点及び終了時点のリストの評価で詳細に示される。
begin-value : ( offset-value | syncbase-value | event-value | repeat-value | accesskey-value | media-marker-value | wallclock-sync-value | "indefinite" )
要素開始点を記述する。
offset-value : ( "+" | "-" )? Clock-value
要素開始点を同期基底からの暗黙的オフセットとして記述する。暗黙的同期基底の定義は,その要素の親となる時間コンテナに依存する。オフセットは,親の単純時間で計測される。
syncbase-value : ( Id-value "." ( "begin" | "end" ) ) ( ( "+" | "-" ) Clock-value )?
同期基底及びその同期基底からのオフセットを記述する。要素開始点は,他の要素の開始点又は活性終了点を基準にして定義される。
event-value : ( Id-value "." )? ( event-ref  ) ( ( "+" | "-" ) Clock-value )?
要素開始点を決定するイベント及びオプションのオフセットを記述する。要素開始点は,イベントが挙げられる時点を基準にして定義される。イベントは,[DOM2Events]に従ってホスト言語に対して定義されるイベントであってよい。これには,利用者インタフェースイベント,ネットワークを介して伝送されるイベントトリガなどが含まれる。イベントに基づくタイミングの詳細は,イベントに基づくスケジュールされたタイミングの統一で記述される。
repeat-value : ( Id-value "." )? "repeat(" integer ")" ( ( "+" | "-" ) Clock-value )?
限定された繰返しイベントを記述する。要素開始点は,繰返しイベントが指定された反復値付きで挙げられた時点を基準に定義される。
accesskey-value : "accesskey(" character ")"( ( "+" | "-" ) Clock-value )?
要素開始点を決定するアクセスキーを記述する。要素開始点は,利用者がアクセスキー文字を入力する時点を基準に定義される。
media-marker-value : Id-value ".marker(" marker-name ")"
要素開始点を,メディア要素が定義する名前付きマーカ時間として定義する。
wallclock-sync-value : "wallclock(" wallclock-value ")"
要素開始点を,実世界の時計時間として記述する。掛け時計時間の構文は,[ISO8601]で定義された構文に基づく。
"indefinite"
要素の開始点は,"beginElement()"メソッド呼出し又はその要素をターゲットとするハイパリンクによって決定される。
SMILのタイミング及び同期のDOMメソッドは,予約されたDOMメソッドで記述される。
ハイパリンクに基づくタイミングは,ハイパリンク及びタイミングで記述される。
開始点(begin)値のセマンティクス

parの子どもは,デフォルトで,parが開始する時点(begin="0s"と等価)で開始する。seqの子どもは,デフォルトで,前の子がその活性持続時間を終了した時点(begin="0s"と等価)で開始する。最初の子は,デフォルトで,親のseqが開始する時点で開始する。exclの子どもは,"indefinite"の開始点値をデフォルトとする。

begin値は,時点のリストを指定できる。これは,例えば,幾つかのイベントのうちの一つが挙げられた場合など,要素を開始する複数の"方法"又は"規則"を指定するために使用する。時点のリストは,複数の開始時点を定義することもでき,要素を1回より多く再生可能にする。この振る舞いは,例えば,最も早い開始点だけを実際には使用可能とするように,制御することができる。restart属性も参照すること。

一般的には,リストの中の最も早い時点が要素の開始時点を決定する。開始時点リストの評価に関する追加的な制約が存在する。その詳細は,開始時点及び終了時点のリストの評価で示す。

beginのための値のリストの中に"indefinite"を含むことは文法に合っているが,"indefinite"は,(それがリストの中にある)唯一つの値の場合にだけ有用となることに注意すること。"indefinite"を他の値と組み合わせることは,開始タイミングには影響を与えない。これは,DOMのbeginメソッドはbeginに対して"indefinite"を指定してもしなくても呼び出すことができることによる。

開始時点が,同期基底で変動するもの,マーカ値又は掛け時計値として指定される場合,その定義された時点は,実装によって親時間コンテナを基準にした時間に変換されなければならない。すなわち,オフセット値と等価とする。このことは,時間空間変換として知られ,その詳細は,局所的時間と大域的時間との間の変換で示される。

開始点(begin)のための負のオフセットの処理

開始時点を定義するために負のオフセットを用いるのは,単に要素の同期関係を定義するだけとする。どのような場合でも,それは,要素に関する時間コンテナ制約を上書きしないし,プレゼンテーション時間の制約を上書きできない。

計算された開始時点は,計算された時点で要素を開始できない場合であっても,要素のスケジュールされた同期関係を定義する。時間モデルは,要素開始点の観測された時点ではなく,計算された開始時点を使う。

要素が,親時間コンテナが開始するより前の時点に解決される開始時点をもつ場合でも,親時間コンテナの制約は適用される。次に例を示す。

<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イベントを計数することができる。

負の開始点(begin)の遅延

開始時点は,要素と親時間コンテナとの間の同期関係を指定する。同期基底に類するもの,イベント基底,マーカ及び掛け時計のタイミングは,親時間コンテナのオフセットに暗黙的に変換され,オフセット値が直接にそのタイミングを指定するのと同じようにする。 seqの子どもについては,その結果は,常にseq時間コンテナの開始点からの正のオフセットとする。 しかし,par時間コンテナ及びexcl時間コンテナについては,親の開始時点を基準として計算されたオフセットが,負になってもよい。

要素は,実際には,親時間コンテナが開始するまでは開始できないことに注意すること。負の時間遅延をもつ要素は,それが(親要素よりも)早く開始したものとして振る舞う。 要素に対するプレゼンテーション効果(例えば,視覚メディアの表示)は,繰り返される要素の最初の反復及びそれだけに対して(同じオフセット分の)clipBegin値を与えたものと等価とする。繰返し振る舞いが指定されない場合には,負の開始点オフセットの要素のプレゼンテーション効果は,そのオフセット値と同じ大きさをもつclipBegin指定と等価とする。しかしながら,タイミングの副作用は,記述されたとおりのclipBegin値とは等価ではない。開始点値の時間従属要素は,要素がより早く開始したものとして振る舞う。

区間(dur)値のセマンティクス

単純持続時間の長さは,dur属性を使って指定される。 dur属性の構文を次に示す。

dur
単純持続時間を指定する。
その属性の値は,次のいずれかとすることができる。
Clock-value
単純持続時間の長さを,要素の活性時間で計測して指定する。
値は,0よりも大きくなければならない。
"media"
単純持続時間を,メディアの本来的持続時間として指定する。これは,メディアを定義する要素だけについて妥当とする。
"indefinite"
単純持続時間を,不定(indefinite)として指定する。

durの引数値の構文に誤りがある場合,その属性は,(指定されなかったものとして)無視される。

属性値"media"が,メディアを定義しない要素(例えば,SMIL 2.0の時間コンテナ要素であるparseq及び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 ...>

end属性: 活性持続時間の制御

SMIL 2.0は,活性持続時間について付加的な制御を提供する。end属性は,制作者が,単純なオフセット,時間基底,イベント基底,同期基底又はDOMメソッド呼出しを用いて終了点値を指定することによって制約できるようにする。活性持続時間を計算するために属性を組み合わせる規則は,活性持続時間の計算で記述される。

各々の属性値の異形についての規定としての構文規則は,タイミング属性値の文法で示される。構文のまとめを,読者への支援として次に示す。

end : smil-1.0-syncbase-value | end-value-list
要素のための活性持続時間を制約できる終了点値を定義する。
属性値は,SMIL 1.0の同期基底宣言又はセミコロンで区切った値のリストのいずれかとする。
smil-1.0-syncbase-value : "id(" Id-value ")" ( "(" ( "begin" | "end" | Clock-value ) ")" )?
これは,非推奨とする。同期基底及びその同期基底からのオフセットを記述する。終了点値は,他の要素の開始点又は活性終了点を基準にして定義される。
end-value-list : end-value (";" end-value-list )?
セミコロンで区切った終了点値のリスト。終了時点のリストの解釈は,開始時点リスト及び終了時点リストの評価で示す。
end-value : ( offset-value | syncbase-value | event-value | repeat-value | accesskey-value | media-marker-value | wallclock-sync-value | "indefinite" )
要素の終了点値を記述する。
offset-value : ( "+" | "-" )? Clock-value
終了点値を暗黙的同期基底からのオフセットとして記述する。暗黙的同期基底の定義は,その要素の親時間コンテナに依存する。オフセットは,親の単純時間単位で計測される。
syncbase-value : ( Id-value "." ( "begin" | "end" ) ) ( ( "+" | "-" ) Clock-value )?
同期基底及びその同期基底からのオフセットを記述する。終了点値は,他の要素の開始点又は活性終了点を基準として定義される。
event-value : ( Id-value "." )? ( event-ref  ) ( ( "+" | "-" ) Clock-value )?
終了点値を決定するイベント及びオプションのオフセットを記述する。終了点値は,イベントが挙げられる時点を基準として定義される。イベントは,[DOM2Events]に従ったホスト言語に対して定義されるいかなるイベントであってもよい。これらのイベントには,利用者インタフェースイベント,ネットワーク経由で伝送されるイベントトリガなどが含まれる。イベントに基づいたタイミングの詳細は,イベントに基づくスケジュールされたタイミングの統一/A>で記述される。
repeat-value : ( Id-value "." )? "repeat(" integer ")" ( ( "+" | "-" ) Clock-value )?
限定された繰返しイベントを記述する。終了点値は,繰返しイベントが指定された反復値付きで挙げられる時点を基準として定義される。
accesskey-value : "accesskey(" character ")"( ( "+" | "-" ) Clock-value )?
終了点値を決定するアクセスキーを記述する。終了点値は,アクセスキー文字が利用者によって入力された時点として定義される。
media-marker-value : Id-value ".marker(" marker-name ")"
終了点値をメディア要素で定義される名前付きマーカ時点として記述する。
wallclock-sync-value : "wallclock(" wallclock-value ")"
実世界の時計時間(時刻)を終了点値として記述する。掛け時計の時刻は,[ISO8601]で定義される構文に基づく。
"indefinite"
要素の終了点値は,endElement()メソッド呼出しによって決定される。
SMILタイミング及び同期のDOMメソッドは,予約されたDOM メソッドで示される。

end属性が指定されるが,durrepeatCount及びrepeatDurのいずれもが指定されない場合,単純持続時間は,不定(indefinite)と定義され,終了点値が,活性持続時間が定義するために,この不定を制約する。この場合の単純持続時間の振る舞いは,durが"indefinite"として指定されているものとして,dur値のセマンティクスで定義される。

end値が,要素が活性化されている間に解決され,その解決された時点が過去にある場合,その要素は,活性持続時間をただちに終了することが望ましい。この要素の終了点を基準にして定義される時間従属は,観測された活性終了点ではなく(過去にあってもよい)計算された活性終了点を用いて解決されることが望ましい。

非推奨とされたsmil-1.0-syncbase-valuesは,意味的には,次のSMIL 2.0のend-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"のクリックの早い方と定義される。これによって,閲覧者は,座って見ているか,より早いペースでプレゼンテーションを進めることができる。

終了点(end)のための負のオフセットの処理

min属性及びmax属性属性: 活性持続時間における更なる制御

min属性及びmax属性は,制作者に要素の活性持続時間の上限及び下限を制御する方法を提供する。

min
活性持続時間の最小値を指定する。
属性値は,次に示すいずれかになることができる。
Clock-value
要素の活性時間で計測される,活性持続時間の最小値の長さを指定する。
値は,0以上でなければならない。
"media"
活性持続時間の最小値をメディアの本来的持続時間として指定する。これは,メディアを定義する要素だけに妥当とする。

minの引数値の構文に誤りがある場合,この属性は,(指定されなかったものとして)無視される。

minのデフォルトの値は"0"とする。これは,活性持続時間を一切制約しない。

max
活性持続時間の最大値を指定する。
属性値は,次に示すいずれかになることができる。
Clock-value
要素の活性時間で計測される,活性持続時間の長さの最大値を指定する。
値は,0より大きくなければならない。
"media"
活性持続時間の最大値をメディアの本来的持続時間として指定する。これは,メディアを定義する要素だけに妥当とする。
"indefinite"
持続時間の最大値は不定とし,制約を受けない。

maxの引数値の構文に誤りがある場合,この属性は,(指定されなかったものとして)無視される。

maxのデフォルト値は,"indefinite"とする。これは,活性持続時間を一切制約しない。

引数値"media"が,メディアを定義しない要素(例えばSMIL 2.0時間コンテナ要素であるparseq及びexcl)に関するmin又はmaxのいずれかに対して指定された場合,これらの属性は,それぞれ,(指定されなかったものとして)無視される。parの子どもなどの含まれるメディアは,要素と直接に関連するメディアとは見なされない。

min属性及びmax属性の両方が指定される場合,max値は,min値以上でなければならない。この要件が満たされない場合,両方の属性が無視される。

min又はmaxが指定された要素の活性持続時間を計算するために適用する規則は,次のとおりとする。要素の活性持続時間が計算されるごとに(すなわち,要素が複数回開始される場合はその要素の各間隔ごとに),min属性及びmax属性を考慮せずに(活性持続時間の計算で示すアルゴリズムを適用することによって)計算を行う。この段階の結果を,min及びmaxの境界に照らして検査する。結果が境界内の場合は,この最初に計算された値は正しい。それ以外の場合には,次に示す二つの状況が起こり得る。

次にmin属性及びmax属性の簡単な利用例を示す。

例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属性及び負の開始時点

要素がその親よりも前に開始すると定義されている場合(例えば,単純な負のオフセット値をもつ場合),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値)

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値)

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がさらに処理される前に,先行する別扱い文字及び埋め込まれた別扱い文字はすべて取り除かれることが望ましい。

  1. あらゆる先行する空白文字,後続する空白文字又は挿入されている空白文字を取り除く。
  2. 値が数字又は数値符号指示子(すなわち,'+'又は'-')で始まる場合,その値はオフセット値として構文解析される。
  3. それ以外の場合であって,値が別扱いされていないトークン"wallclock"で始まる場合,その値は,wallclock-sync-valueとして構文解析されることが望ましい。
  4. それ以外の場合であって,値が別扱いされていないトークン"indefinite"で始まる場合,その値は,値"indefinite"として構文解析されることが望ましい。
  5. それ以外の場合,符号指示子までのただし符号指示子を含まない,トークンの部分文字列を構築する。すなわち,オフセット(offset)は取り除き,それを別々に構文解析し,それをこのステップの結果に追加する。次に示すステップでは,'\'別扱い文字が前置されるあらゆる'.'文字は,区切り子として扱わないほうがよく,通常のトークン文字として扱うことが望ましい。
    1. トークンが'.'区切り子文字を含まない場合,値は,eventbase-elementが指定されない(すなわち,デフォルトの)event-valueとして構文解析されることが望ましい。
    2. それ以外の場合であって,トークンが別扱いされていない文字列".begin"又は".end"で終わる場合,値は,syncbase-valueとして構文解析されることが望ましい。
    3. それ以外の場合であって,トークンが別扱いされていない文字列".marker("を含む場合,値は,media-marker-valueとして構文解析されることが望ましい。
    4. それ以外の場合,値は,(eventbase-elementが指定された)event-valueとして構文解析されることが望ましい。

この手法によって,実装は,wallclockトークン及びindefiniteトークンを予約済み要素IDとして,beginend及びmarkerを予約済みイベント名として,取り扱うことができる。その一方で,これらの名前をもつ要素及びイベントを参照してもよいという別扱い機構は,保持される。

クロック値(Clock-value)

クロック値は,次の構文をもつ。

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"とする。 クロック値の中では,(その中に)埋め込まれた空白は許可しない。ただし,先行する空白文字及び後続する空白文字は,無視される。

文法に合ったクロック値の例を次に示す。

小数値は,秒の(10を基底とする)浮動小数点値の定義だけとする。許される桁数に制限はない。ただし,実際の精度は実装によって変わってもよい。
次に例を示す。

00.5s = 500ミリ秒
00:00.005 = 5ミリ秒
オフセット値(offset-value)

オフセット値は,要素がその同期基底を基準にして開始又は終了するのが望ましい場合に指定するために使用する。

オフセット値は,次の構文をもつ。

offset-value   ::= (( S? "+" | "-" S? )? ( Clock-value )

オフセット値のための暗黙的同期基底は,時間コンテナに依存する。

SMIL 1.0の開始点(begin)値及び終了点(end)値

非推奨とする。

smil-1-syncbase-value  ::= "id(" Id-value ")" 
                           ( "(" ( "begin" | "end" | Clock-value) ")" )?
ID参照値(ID-Reference値)

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属性のリストの中に含めることができる。

同期基底値(Syncbase-value)

同期基底値は,同期基底要素として参照される,他の要素の"id"属性の値を定義するSyncbase-element項で始まる。

同期基底値は,次の構文をもつ。

 Syncbase-value   ::= ( Syncbase-element "." Time-symbol )
                      ( S? ("+"|"-") S? Clock-value )? 
 Syncbase-element ::= Id-value
 Time-symbol      ::= "begin" | "end"

同期基底要素は,次の時間記号の一つを用いて限定される。

begin
同期基底要素の開始時点を指定する。
end
同期基底要素の活性終了点を指定する。

  begin="x.end-5s"        : "x"が終了する5秒前に開始する。
  begin=" x.begin "       : "x"が開始する時に開始する。
  end="x.begin + 1min"    : "x"が開始して1分後に終了する。

イベント値(Event-value)

イベント値は,イベント基底要素を指定する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とする。ホスト言語設計者は,どのイベントが指定できるかを指定しなければならない。

構文の最後の項は,オプションのオフセット値を指定する。オフセット値は,イベントの時点からのオフセットとする。

(例えば,SMIL文書の中の時間コンテナのように)イベント基底要素が関連するレイアウトをもたない場合,(例えば,マウスクリックのように)利用者インタフェースイベントの中には定義されないものがあってもよい。ホスト言語設計者は,デフォルトのイベント基底要素の定義を上書きしてもよい。この例として,SMILアニメーションの要素(animateanimateMotionなど)は,デフォルトのイベント基底要素をアニメーションのターゲット要素とすると規定する。[[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-value)

繰返し値は,イベント値の変形であって,限定された繰返しイベントをサポートする。イベント及びイベントモデルで定義されるrepeatイベントは,反復値にもとづいてイベントを限定するために添え字を追加できる。

繰返し値は,次の構文をもつ。

  Repeat-value       ::= ( Eventbase-element "." )? "repeat(" iteration ")"
                        ( S? ("+"|"-") S? Clock-value )? 
  iteration        ::= DIGIT+ 

この限定形式が使われる場合,イベント基底値は,指定された反復に一致する反復値をもつ繰返しが観測された場合だけ,解決される。

限定された繰返しイベント構文によって,制作者は,要素の個々の繰返しだけに対応することができる。

アクセスキー値(Accesskey-value)

アクセスキー値によって,制作者は,注目点に関連することとは独立に,開始時点又は終了時点を特定のキーの押下に結び付けることができる。これは,HTMLアクセスキーサポートに基づいてモデル化されている。HTMLの場合とは異なり,利用者エージェントは,アクセスキーを活性化するために,修飾キー(例えば,"ALT")が必要と要求しないことが望ましい。

アクセスキー値は,次の構文をもつ。

  Accesskey-value  ::= "accesskey(" character ")"
                       ( S? ("+"|"-") S? Clock-value )? 

ここで,characterは,[ISO10646]による単一の文字とする。

時点値(Clock-value)は,利用者によってアクセスキー文字が入力された時点と定義する。

メディアマーカ値(Media-Marker-value)

ある種のメディアは,そのメディアにおける特定の点(すなわち,時点)と名前を関連付ける関連するマーカ値をもつことができる。メディアマーカ値は,これらのマーカ値によって,開始時点又は終了時点を定義する手段を提供する。参照された識別子がマーカをサポートするメディア要素と関連付けられていない場合,又は指定されたマーカ名がそのメディア要素によって定義されていない場合,関連する時点は,決して解決されないことに注意すること。

 Media-Marker-value ::= Id-value ".marker(" S? marker-name S? ")"

掛け時計同期値(wallclock-sync-value)

掛け時計同期値は,次の構文をもつ。許可される値は, [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に対して定義されるとおりとすることに注意すること。日付及び時刻の指定の内部では,空白は許可されないことに注意すること。

時間帯オフセットを取り扱う三つの方法がある。

  1. 時間は,UTC(Coordinated Universal Time,協定世界時)で表現され,特殊なUTC指示子("Z")をともなう。
  2. 時間は,局所時間(local time,通常,現地時間)で表現され,時及び分で表される時間帯オフセットをともなう。時間帯オフセット"+hh:mm"は,日付及び時間が,UTCより"hh"時間"mm"分だけ進んでいる局所時間帯を使うことを示す。時間帯オフセット"-hh:mm"は,日付及び時間が,UTCより"hh"時間"mm"分だけ遅れている局所時間を使うことを示す。
  3. 時間は,プレゼンテーションが行なわれる位置に対して定義されるとおりの局所時間とする。末端利用者のプラットフォームの局所時間帯が使われる。

プレゼンテーションエンジンは,掛け時計値を文書内の時間に変換できなければならない。

結果としての開始時点又は終了時点は,親時間コンテナの開始点以前又は終了点以後となってもよいことに注意すること。これはエラーとしないが,その場合でも時間コンテナ制約は適用される。いずれにしても,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属性は,子ども(要素)の関数として,時間コンテナの暗黙的持続時間を制御する。endsync属性は,時間コンテナ要素であるpar及びexcl,並びに時間付けされた子どもをもつメディア要素(例えば,animate要素又はarea要素)に対してだけ有効とする。統合言語は,endsync属性を,時間コンテナセマンティクスをもついかなる要素において許可してもよい。endsync属性は,"未知(unknown)"の持続時間をもつ子ども,例えば,持続時間を決定するためには通しで再生しなければならないMPEG映像又はイベントに基づく終了タイミングをもつ要素,と共に用いると特に有用になる。

endsync = " first | last | all | media | Id-value | smil1.0-Id-value"

属性の文法に合った値を次に示す。

first
par要素,excl要素又はメディア要素の暗黙的持続時間は,すべての子要素の中で最も早い活性終了点を用いて終了する。これは,字句の並びで最初の子又は最初に開始した子のことを指すのではなく,その(最初の)活性持続時間を終了する最初の子のことを指す。
last
par要素,excl要素又はメディア要素の暗黙的持続時間は,子要素の活性持続時間のうち最後の活性持続時間を用いて終了する。これは,字句の並びで最後の子又は最後に開始した子のことを指すのではなく,解決された確定開始時点をもつすべての子どもの最後の活性終了点を指す。時間コンテナが解決された開始時点をもつ子どもをもたない場合,時間コンテナは,ただちに終了する。子要素が複数の開始時点をもつ又は再起動する場合,子要素は,解決された開始時点に対する活性持続時間のすべてのインスタンスを完了しなければならない。
この値は,par要素及びexcl要素についてデフォルト値とする。
all
par要素,excl要素又はメディア要素の暗黙的持続時間は,すべての子要素がそれぞれの活性持続時間で終了する時に終了する。不定又は解決されない開始時点をもつ要素は,時間コンテナの単純持続時間を終了しないようにする
すべての要素が一度以上完了した時,親時間コンテナは終了できる。
media
要素の本来的なメディア持続時間が終了する時,時間コンテナ要素の暗黙的持続時間は終了する。時間コンテナ要素がメディアの本来的持続時間を定義しない場合,ホスト言語は,その要素のために単純持続時間を定義しなければならない。
これはメディア時間コンテナ要素についてデフォルト値とする。
Id-value
par要素,excl要素又はメディア要素の時間コンテナの暗黙的持続時間は,指定された子要素がその(最初の)活性持続時間を終了する時に終了する。その識別子(id)は,時間コンテナの直下の時間付けされた子どもの一つと一致しなければならない。
smil1.0-Id-value
これは,"id(" IDREF ")"という形式のSMIL 1.0識別子値とする。そのセマンティクスは,直上のId-valueのものと同一とする。この構文は,非推奨とする。

endsyncdur及びendとに関するセマンティクス

endsync及び再始動のセマンティクス

endsync及び一時停止された要素

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()

repeatCount属性,repeatDur属性及びrepeat属性: 繰返し要素

SMIL 1.0は,repeat属性を導入した。これは,メディア要素又は時間コンテナ全体を繰り返すために使用される。SMIL 2.0は,SMIL 1.0 repeat属性を置き換える,繰返し機能のための二つの新しい制御を導入する。その新しい属性,repeatCount及びrepeatDurは,典型的な使用事例により近く一致するセマンティクスを提供し,それら新しい属性は,繰返し振る舞いの持続時間についてより多くの制御を提供する。

要素の繰返しは,単純持続時間が直列的に数回"再生"されるようにする。これは,要素メディア(又は時間コンテナの場合は時間軸全体)の内容を,実効的にコピーするか,又はループさせる。制作者は,repeatCountを使用して何回繰り返すか,又はrepeatDurを使用してどのくらいの間 繰り返すかのどちらかを指定できる。各々の繰返し反復は,単純持続時間を"再生"する一つのインスタンスとする。

repeatCount
単純持続時間の反復の回数を指定する。次の属性値をもつことができる。
数値
これは,反復の回数を指定する(10を基底とする)"浮動小数点"の数値とする。小数点以下の値として表現される部分的な反復を含むことができる。小数点以下の値は,単純持続時間の一部を示す。値は0より大きくなければならない。
"indefinite"
要素は,(親時間コンテナの制約に従って)不定に繰り返すと定義される。
repeatDur
繰返しのための全体の持続時間を指定する。次の属性値をもつことができる。
Clock-value
単純持続時間を繰り返すために要素活性時間でその持続時間を指定する。
"indefinite"
要素は,(親時間コンテナの制約に従って)不定に繰り返すと定義される。

次の例では,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属性及び再起動

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属性(非推奨)

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値は,無視される。

repeat
この属性は,SMIL 2.0では非推奨とされた。新しいrepeatCount属性及びrepeatDur属性を使うほうがよい。
これは,指定された繰返し回数だけ要素が繰り返して再生するようにする。それは,子どもとして,"repeat"属性なしの要素のコピーを示された数だけもつseq要素と等価とする。開始点の遅延を含むその要素のすべての他の属性が,そのコピーの中に含まれる。
文法に合った値は0より大きい整数の繰返し,及び"indefinite"とする。

fill属性: 要素の拡張化

要素の活性持続時間が終了するとき,最終状態で凍結してもよいし,もはや表示されなくてもよい。後者は,すなわち,その効果はプレゼンテーションから取り除かれる。要素の凍結要素は,単純持続時間の最後のインスタンスにおいて定義された最終状態を使用して,拡張される。これは,プレゼンテーションにおける隙間を埋めるために,又は要素をプレゼンテーションにおける文脈として拡張するために使用できる。後者は,例えば,追加アニメーションを用いて行える。[SMIL-ANIMATION]を参照すること。

fill属性は,制作者が,要素の最終状態を凍結することによって,要素が活性持続時間を越えて拡張されることが望ましいと指定できるようにする。fill属性は,活性持続時間がmin属性で指定された持続時間未満である場合,その振る舞いを決定するためにも使用される。この理由のために,この記述は,活性持続時間の終了を参照するのではなく,"単純持続時間の最後のインスタンス(繰返し)"を参照する。

fill属性の構文は,二つの拡張があるが,SMIL 1.0と同じとする。さらに,fill属性は,時間コンテナを含んだあらゆる時間付けされた要素に適用してよいようになっている。

fill = ( remove | freeze | hold | transition | auto | default )
この属性は,次の値をもつことができる。
remove
要素が,単純持続時間の最後のインスタンスの終了点を過ぎて拡張されないことを指定する。
freeze
要素が,単純持続時間の最後のインスタンスの終了点を過ぎて,その時点での要素状態を"凍結する"ことによって,拡張されることを指定する。要素の親時間コンテナが,要素が凍結される時間の長さを(すぐ下で示すとおりに)決定する。
hold
"hold"の設定は,要素が,(時間コンテナの型とは無関係に)その要素の親時間コンテナの単純持続時間の終了点まで拡張されるために常に凍結されることを除いて,"freeze"の設定と同じ効果をもつ。階層的レイアウトモデルをサポートするプロファイル(例えば,SMIL 2.0 Languageプロファイル)に対しては,保持された要素(fill="hold"をもつ要素)は,層が最上位に追加されその後に取り除かれるとき,その表示領域をリフレッシュすることになる。
transition
"transition"の設定は,要素が,その遷移(transition)の終了点で取り除かれることを除いて,"freeze"の設定と同じ効果をもつ。この値は,直接に関連するメディアをもつ要素上だけで許可される。(例えば,SMIL言語プロファイルにおける時間コンテナ要素などの)他の要素上で指定される場合には,属性は,無視される。SMIL 遷移モジュールを参照すること。
auto
この要素についてのfillの振る舞いは,要素が単純持続時間又は活性持続時間を定義する属性のどれを指定するかに依存する。
  • dur属性,end属性,repeatCount属性又はrepeatDur属性のいずれもが要素上で指定されていない場合,要素は,"freeze"が指定されたときと同じfill振る舞いをもつ。
  • そうでない場合,要素は,"remove"が指定されたときと同じfill振る舞いをもつ。
default
要素についてのfill振る舞いは,fillDefault属性の値によって決定される。
これは,デフォルト値とする。
要素への
fillDefaultの適用の結果,その要素上で許可されないfillの値をもつ要素が生じる場合,要素は,その代わりに"auto"のfill値をもつ。

fill属性及びfillDefault属性に対してデフォルト値が与えられた場合であって,fill属性が要素に対して指定されていなくて,fillDefault属性が要素のあらゆる先祖について指定されていない場合,その振る舞いは,"auto"のセマンティクスを使用することに注意すること。

"freeze"の振る舞いをもつ要素は,親時間コンテナに従って次のとおりに拡張される。

メディアに適用される場合には,fillは,視覚メディアにおけるプレゼンテーションだけに効果をもつ。非視覚メディア(音声)では,単に無音になる。(ただし,タイミングの観点からはそれでも凍結されている。)

fillDefault属性
fillDefault = ( remove | freeze | hold | transition | auto | inherit )
要素及びすべての子孫のためにfill振る舞いについてのデフォルト値を定義する。
値"remove","freeze","hold","transition"及び"auto"は,要素のfill振る舞いがそれぞれの値(のとおり)であると指定する。
inherit
この属性(及びfill振る舞い)の値は,親要素のfillDefault値から継承されることを指定する。親要素が存在しない場合,値は,"auto"とする。
これは,デフォルト値とする。
 
イベント感度及びfill属性

fill属性の効果は,タイミングセマンティクスだけに適用される。要素が凍結の間でも見える場合,利用者イベント処理といった他のセマンティクスに関しては,要素は正常に振る舞う。特に,a及びareaといった要素は,凍結された場合でも,利用者活性化(例えば,クリック)に対して敏感とする。SMIL 1.0規定[SMIL10]も参照すること。

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

<par endsync="last">
   <video src="intro.mpg" begin= "5s" dur="30s" fill="freeze" />
   <audio src="intro.au"  begin= "2s" dur="40s"/>
</par>

video要素は,親時間コンテナが開始した後に35秒で終了するが,(videoのメディアが開始して)30秒目のvideoフレームが,audio要素が終了するまで表示され続ける。属性は,時間コンテナの単純持続時間の残りに対して要素の最後の値を"凍結(freeze)"する。

この機能は,次の例のとおりに,seq時間コンテナの次の項目が表示される準備をしている間,スクリーン上に以前の要素を保持するためにも有用である。

<seq>
   <video id="v1" fill="freeze" src.../>
   <video id="v2" begin="2s" src.../>
</seq>

最初のビデオが表示され,その最後のフレームが,2秒間,次の要素が開始するまで,凍結される。再生のためにビデオ"v2"をダウンロードするか又はバッファに保持するために余分な時間がかかる場合には,ビデオ"v2"が実際に開始するまで,最初のビデオ"v1"が凍結され続けるということに注意すること。

restart属性

要素が再起動されてもよい方法は幾つか存在することに注意すること。すべての場合における振る舞い(すなわち,再始動されるか又は再始動されないか)は,restart属性によって制御される。異なる再始動の場合は,次による。

いかなる開始時点をもっていても,要素が親時間コンテナの単純持続時間の終了点の後で再始動するとスケジュールされている場合,要素は,再始動しない。

restart = "always | whenNotActive | never | default"

always
要素は,いかなる時点でも再始動できる。
whenNotActive
要素は,活性でない場合だけに再始動できる。(すなわち,活性終了点の後に再始動できる。)活性持続時間の間に要素を再始動する試みは,無視される。
never
要素は,親時間コンテナの現在の単純持続時間の残りに対して再始動できない。 
default
要素についての再始動振る舞いは,restartDefault属性の値によって決定される。
これは,デフォルト値とする。
 

restartDefault属性は,restart属性のデフォルト振る舞いを制御するために使用できる。これは,再始動のデフォルト振る舞いの制御で示される。

restart属性がいつどのように評価されるかについての詳細は,開始時点及び終了時点のリストの評価を参照すること。

切替え活性化のための再始動の使用

共通的な使用事例から,要素を開始し要素の活性持続時間を終了するために,同じUIイベントが使用されることが要求されている。このことは,UIイベントが要素を"on"及び"off"に切り替えるので,"切替え"活性化として記述されることがある。restart属性は,次のとおりに,これを編集するために使用できる。

<smil ...>
...
<img id="foo" begin="bar.activateEvent" end="bar.activateEvent"
              restart="whenNotActive" ... />
</smil ...>              

"foo"がデフォルト再始動振る舞いを"always"として定義される場合,"bar"要素上の二番目のactivateEventは,単に要素を再始動する。しかし,restart"whenNotActive"に設定される場合には,二番目のactivateEventは要素を再始動できないので,要素は,activateEventイベントの"begin"指定を無視する。その後,要素は,活性持続時間を終了し要素を停止するためにactivateEventイベントを使用できる。

SMIL言語文書では,SMIL要素は,開始する前には見えないので,begin="activateEvent"をもつことは,決して開始しないことを意味することに注意すること。timeActionのサポートをもつ言語では,これは正しくなくてもよい。例えば,次は,もっともらしい。

<html ...>
...
<span begin="click" end="click" timeAction="class:highlight" restart="whenNotActive">
  Click here to highlight. Click again to remove highlight.
</span>
...
</html>

これは,イベント感度及びスケジュール及び対話的タイミングの統一で示されるイベント感度のセマンティクスに基づく。

再始動のデフォルト振る舞いの制御

次の属性は,restartのためのデフォルト振る舞いを指定するために提供される。

restartDefault = "always | whenNotActive | never | inherit"
要素のための再始動振る舞いのデフォルト値を定義する。
"always","whenNotActive"及び"never"の値は,要素の再始動振る舞いがそれぞれの値(が示す振る舞い)になることを指定する。
inherit
この属性(及び再始動振る舞い)の値は,親要素のrestartDefault値から継承されることを指定する。親要素が存在しない場合,値は,"always"とする。
これは,デフォルト値とする。
 

この属性のデフォルト値("inherit")及びrestart属性のデフォルト値("default")が与えられた場合,これらの属性を指定しない文書は,すべての時間付けされた要素についてrestart="always"振る舞いをもつ。

要素状態の再設定

時間コンテナが繰り返す又は再始動する場合,すべての子孫になる子どもは,ある状態に関して"再設定"される。

  1. 過去のevent-values,repeat-values,accesskey-values,又はDOMメソッド呼出し経由で追加された値と関連するインスタンス時間は,依存する開始インスタンス時点及び終了インスタンス時点のリストから取り除かれる。実効的に,過去におけるすべてのイベント及びDOMメソッド呼出しは,消し去られる。これは,現在の間隔の開始点を定義するインスタンス時点には適用されない。
  2. あらゆる同期基底時点は,再評価される。(すなわち,時間空間の間の変換は,再計算されなければならない。局所的時間と大域的時間との間の変換を参照すること。)
  3. 同期基底及び従属要素の共通の先祖が再始動又は繰り返す場合,解決された同期基底時点は,従属インスタンス時間のリストから取り除かれる。
  4. restartセマンティクスの解釈に関連したあらゆる状態は,再設定される。

このように,例えば,要素がrestart="never"を指定している場合には,その要素は,再設定後に再び開始できる。restart="never"設定は,親時間コンテナ単純持続時間の範囲だけに対して定義される。

要素が再始動する場合には,規則4(再始動振る舞いの制御)は適用されないが,規則1及び2は,要素それ自体に対しても適用される。

時間コンテナがその単純持続時間を終了する場合(これには,繰り返す場合が含まれる。),まだ活性であるすべての時間付けされた子どもは終了されることに注意すること。子の持続時間に関する時間コンテナ制約も参照すること。

excl時間コンテナが再始動又は繰り返す場合,あらゆる活性な子どもを終了するのに加えて,exclのための一時停止待ち行列が,クリアされる。

syncBehavior属性,syncTolerance属性及びsyncMaster属性: 実行時同期の制御

SMIL 2.0における新しいサポートでは,文書の実行時同期振る舞いに関してより細かい制御が導入される。syncBehavior属性は,制作者が,それぞれの要素に対して,その要素が親時間コンテナに対する厳密な同期関係の状態を維持しなければならないかどうか,又はその要素が時間コンテナに関してずれること(slip)が許可されるかどうかを,記述することを可能にする。したがって,ネットワークの輻輳が要素のためのメディアの配布を遅らせる又は中断する場合,syncBehavior属性は,文書の残りが再生され続けている間にメディア要素がずれることが可能かどうか,又はメディア配布が追いつくまで時間コンテナも待たなければならないのかどうかを,制御する。

syncBehavior属性は,時間コンテナにも適用できる。これは,時間コンテナによって定義される時間軸全体の同期関係を制御する。次の例では,audio要素及びvideo要素は,リップ同期(lip sync,ビデオにおける唇の動きと音声との同期)を維持するために,厳密な同期,すなわち"locked"同期を用いて定義される。しかし,"speech"というpar時間コンテナは,ずれることを許可されている。

<par>
   <animation src="..." />
   ...
   <par id="speech" syncBehavior="canSlip" >
      <video src="speech.mpg" syncBehavior="locked" />
      <audio src="speech.au"  syncBehavior="locked" />
   </par>
   ...
</par>

video又はaudioのどちらかが配布の問題によって一時停止しなければならない場合,"speech"というpar全体は,時間軸全体を同期状態に保つために一時停止する。しかし,アニメーション要素を含む文書の残りは,正常に再生し続ける。要素及び時間コンテナにおけるsyncBehavior属性を使用すれば,制作者は,実行時同期振る舞いの"有効範囲"を効果的に記述でき,文書全体が厳密な同期を使用すると要求することなく,文書の一部を厳密な同期で再生するように定義できる。

この機能は,要素が最初に開始する時にも適用され,メディアは再生を開始しなければならない。メディアがまだ準備できていない場合(例えば,画像ファイルがまだダウンロードされていない場合),syncBehavior属性は,要素メディアが準備ができるまで時間コンテナが待たなければならないかどうか,又はメディアがダウンロードされるまで要素開始点がずれることが可能かどうかを,制御する。

追加拡張によって,制作者は,特定の要素が時間コンテナのための同期を定義又は制御することが望ましいと指定できる。これは,音声ハードウェアの不正確さ及び音声再生の中断に対する聴者の感度を受け入れるために,ビデオ及び他の要素を音声に"従わせている"多くの利用者エージェントのデフォルト振る舞いに類似している。syncMaster属性によって,制作者は,要素が時間コンテナのための再生用"時計"を定義することを明示的に定義できる。すべての他の要素は,syncMaster要素を基準にして同期状態を保持することが望ましい。

実際上,線形メディアがsyncMasterになる必要があることが多い。この場合,非線形メディアは,厳密な同期を維持するためにより容易に調節できる。しかし,利用者エージェントは,どのメディアが線形の方法で振る舞い,どのメディアが非線形の方法で振る舞うかを必ずしも決定できない。さらに,与えられた時点で活性になっている複数の線形要素が存在する場合,利用者エージェントは,同期矛盾を解決するために必ずしも"正しい"決定を行うことができない。syncMaster属性によって,制作者は,線形メディアをもつ要素,又は"最も重要"であって他の要素のsyncBehaviorによって妥協させられることが望ましくない要素を指定できる。

syncBehavior = ( canSlip | locked | independent | default )
要素のための実行時同期振る舞いを定義する。
文法に合った値は,次による。
canSlip
関連する要素が親時間コンテナに関してズレを生じることを許す。
この値が使用される場合,いかなるsyncTolerance属性も無視される。
locked
関連する要素が親時間コンテナに関して同期を維持することを強制する。これは,syncTolerance属性を用いることで緩和できる。
independent
時間グラフを用いてスケジュールされているが,親における検索操作を無視する独立な時間軸を宣言する。
default
要素のための実行時同期振る舞いは,syncBehaviorDefault属性の値によって決定される。
これは,デフォルト値とする。
 

引数値independentは,要素が時間グラフ内でスケジュールされるが他の実行時同期の問題に影響されないように,syncBehavior="canSlip"及びsyncMaster="true"の設定と等価とする。syncBehavior="canSlip"及びsyncMaster="trueの設定は,要素を同期主体の時計であるとし,その要素が親時間軸に対してズレを生じてもよいことを宣言する。

syncTolerance = ( Clock-value | default
時間付けられた要素及び時間コンテナにおけるこの属性は,関連する要素に対する同期(ズレ)許容を定義する。属性は,要素の実行時同期振る舞いが"locked"場合だけに,効果がある。これは,ロックされた同期関係が,再同期を強制することなしに与えられた一定量のズレ(slew)を無視することを許可する。
Clock-value
同期許容を値として指定する。時計値は,要素の単純時間で測定される。
default
要素のための同期許容は,syncToleranceDefault属性の値によって決定される。
これは,デフォルト値とする。
 
syncMaster
メディア要素及び時間コンテナにおける論理型属性であって,時間コンテナの中の他の要素がその再生をこの要素に対して同期することを強制することを示す。
デフォルト値は,falseとする。
関連する特性は,読取り専用であって,スクリプトによって設定できない。

syncBehaviorのセマンティクスは,同期を維持するための特定の手法を記述しないし要求もしないことに注意すること。手法は,実装依存になる。同期矛盾を解決する可能な方法には,次がある。

追加的な制御が,syncTolerance属性を使用して,厳密な同期モデルについて提供される。これは,要素に対して無視できるズレの量を指定する。(例えば,ハードウェアの不正確さのために)メディア再生で生じる小さな変動は,無視できることが多く,実行全体がより滑らかに見えるようにできる。

要素が一時停止される場合(これには,実行時同期振る舞いのための上記の場合が含まれる。),要素のための計算された終了時点は,変更されてもよいし,解決されるようになってもよいが,時間モデルは,これを反映しなければならない。これは,一時停止された要素及び活性持続時間で詳しく示される。

デフォルト振る舞いの制御

次の二つの属性が,実行時同期のためのデフォルト振る舞いを指定するために定義される。

syncBehaviorDefault = ( canSlip | locked | independent | inherit )
要素についての実行時同期振る舞いのためのデフォルト値を定義する。
"canSlip","locked"及び"independent"の値は,要素の実行時同期振る舞いがそれぞれの値(の示すとおりの振る舞い)であることを指定する。
inherit
この属性(及び要素の実行時同期振る舞い)の値が,親要素のsyncBehaviorDefault値から継承されることを指定する。親要素が存在しない場合,値は,実装依存とする。
これは,デフォルト値とする。
syncToleranceDefault = ( Clock-value | inherit )  
要素についての実行時同期許容値のためのデフォルト値を定義する。
時計値は,要素の実行時同期許容値がそれが示す値であることを指定する。
inherit
この属性の値(及び要素の実行時同期許容値)が,親要素のsyncToleranceDefault値から継承されることを指定する。親要素が存在しない場合,値は,実装依存とする。
これは,デフォルト値とする。
蓄積同期オフセット

要素がその親を基準にした同期からずれる場合,任意の時点でのこのずれの量は,蓄積同期オフセットとして記述される。このオフセットは,ずれに関係した性能又は配布だけでなく一時停止のセマンティクスも考慮するために使用される。局所的時間と大域的時間との間の変換で示されるとおり,この値は,要素時間と親時間との間の変換を調整するために使用される。オフセットは,次のとおりに計算される。

tc(tps)を,要素についての定義された同期関係に従って,親単純時間tpsにおける要素についての計算された要素活性時間とする。

to(tps)を,親単純時間tpsにおける要素についての観測される要素活性時間とする。

蓄積同期オフセットOは,次のとおりになる。

O = to(tps) - tc(tps)

このオフセットは,親単純持続時間で測定される。

したがって,1秒の蓄積同期オフセットは,それがスケジュールされたよりも1秒"後に"再生する要素に対応する。-0.5秒のオフセットは,スケジュールされることが望ましい時点よりも0.5秒"前に"再生する要素に対応する。

タイミング統合のための属性: timeContainer及びtimeAction

SMIL 2.0機能のモジュール化は,言語設計者が,あらゆるXML言語にSMILタイミング及び同期のサポートを統合することを可能にする。SMIL言語文書におけるようにスケジュールされるメディア要素に加えて,タイミングは,ホスト言語の要素に適用できる。例えば,HTML(すなわちXHTML)要素へのタイミングの追加は,時間にわたってのHTML文書のプレゼンテーションを制御し,テキスト及び表示を音声及びビデオといった連続メディアと同期するをテキスト及びプレゼンテーションを同期する。

二つの属性が,これらの統合の場合をサポートするために導入される。timeContainer属性は,制作者が,任意のXML言語要素が時間コンテナ振る舞いをもつことを指定できるようにする。例えば,HTML<ol>順序付きリスト要素は,直列的な時間コンテナとして振る舞うように定義できる。timeAction属性は,制作者が,与えられた要素にタイミングを適用するとは何を意味するかを指定できるようにする。

timeContainer属性

XML言語要素は,timeContainer属性を加えることによって,時間コンテナのセマンティクスをもつと宣言できる。構文は,次による。

timeContainer = ( par | seq | excl | none )
par
並列的な時間コンテナを定義する。
seq
直列的な時間コンテナを定義する。   
excl
排他的な時間コンテナを定義する。
none
現在の要素を時間コンテナの振る舞いをもたない(すなわち,単純な時間グラフ上の葉として振る舞う)と定義する。
これは,デフォルトとする。

timeContainer属性の使用上の制約は,次による。

timeAction属性

timeAction属性は,属性におけるタイミングの効果に関する制御を提供する。ホスト言語は,言語における各々の要素にどの値が許されるかを指定しなければならない。ホスト言語は,timeActionが適用されてもよい各々の要素の本来的タイミング振る舞いを指定しなければならない。さらに,ホスト言語は,追加のtimeAction値を指定してもよい。 構文は,

timeAction = ( intrinsic | display | visibility | style | class | none )
intrinsic
タイミングが要素の本来的な振る舞いを制御することを指定する。
これは,デフォルトとする。
display
タイミングが,CSSによって定義されるとおりに,要素の表示を制御することを指定する。要素のタイミングは,プレゼンテーションのレイアウトに影響を及ぼすことができる。CSSを組み入れる言語に対しては,CSSの"display"特性が,時間にわたって制御されることが望ましい。
visibility
タイミングが,CSSによって定義されるとおりに,要素の可視性を制御することを指定する。要素のタイミングは,プレゼンテーションのレイアウトに影響を及ぼさないことが望ましい。CSSを組み入れる言語に対しては,CSSの"visibility"特性が,時間にわたって制御されることが望ましい。
style
タイミングが,行内の"style"属性によって定義されるスタイルの適用を制御することを指定する。
class:classname
タイミングが,要素に関連付けられたクラスの集合(すなわち,XMLのclass属性値リスト)の中の指定されたclass-nameの取込みを制御することを指定する。
none
タイミングが,要素のプレゼンテーションに関して効果がないことを指定する。

intrinsicの振る舞いは,ホスト言語によって定義される。例えば,SMIL言語では,メディア要素のintrinsicの振る舞いは,メディアの可視性をスケジュールし制御する。幾つかの要素又は言語のために,intrinsicの振る舞いが,他の振る舞いの一つに対してデフォルトとなっていてもよい

追加のtimeActionセマンティクス及び制約は,次による。

ある特殊な要素は,特定のintrinsicのセマンティクスをもっていてもよい。例えば,a及びareaのようなリンク付け要素は,利用者による操作への要素の感度を制御するintrinsicの振る舞いをもつことができる。これは,同様にプレゼンテーションの副作用をもってもよい。例えば,XHTMLでは,これらの要素に感度を失わせることは,感度のあるリンクへ適用されるデフォルトのスタイル(例えば,色又は下線)が,要素が活性でも凍結でもない場合には,取り除かれるという効果ももつ。

ホスト言語設計者は,要素にタイミングを適用するのに関連した振る舞いを,注意深く,考慮及び定義することが望ましい。例えば,script要素は,要素が開始するときに実行すると定義できるし,言語は,要素上のtimeAction属性を許可できないと定義できる。同様に,link要素は,要素が開始するときに,リンク付けされたスタイルシートを適用できるし,言語は,link上のtimeAction属性を許可できない,とすることもできる。

CSS特性であるvisibility及びdisplayの詳細は,[CSS2]を参照すること。

次の例は,時間にわたって可視性を制御する単純な場合を示す。テキストは0秒から3秒まで隠され,5秒間正常に表示され,再び隠される。

<span timeAction="visibility" begin="3s" dur="5s">
   Show this text for a short period.
</span>

次の例は,時間にわたって表示を制御する単純な場合を示す。各々のリスト要素は,5秒間表示され,活性でも凍結でもない場合には,レイアウトから取り除かれる。順序付きリスト要素は,直列的(seq)時間コンテナに設定される。(各々のリスト要素は,他が表示されていなくても,その順序数を保持していることに注意すること。)

<ol timeContainer="seq" repeatDur="indefinite">
   <li timeAction="display" dur="5s">
      This is the first thing you will see. </li>
   <li timeAction="display" dur="5s">
      You will see this second. </li>
   <li timeAction="display" dur="5s">
      Last but not least, you will see this. </li>
</ol>

次の例は,要素の特定のスタイルが時間にわたってどのように適用されるかを示している。それぞれのスタイルは,要素に注目点(focus)イベントが挙げられた後,5秒間,各々のHTMLのlabelに適用される。

<form ...>
...
   <label for="select_red" begin="focus" dur="5s" timeAction="style"
          style="color:red; font-weight:bold" >
      Make things RED.
   </label>
   <input id="select_red" .../>
   <label for="select_green" begin="focus" dur="5s" timeAction="style"
          style="color:green; font-weight:bold" >
      Make things GREEN.
   </label>
   <input id="select_green" .../>
...
</form>

10.3.2 要素

SMIL 2.0は三つの型の時間コンテナを指定する。これらは,要素parseq及び excl,又はtimeContainer属性についてのいくつかの統合プロファイルで宣言することができる。時間子どもについてのメディア要素は"メディア時間コンテナ"で定義され,及びparセマンティクスに基づくセマンティクスを持つ(タイミング統合のための属性: timeContainer 及び timeAction及び メディア要素時間コンテナの暗黙的持続時間 も参照すること)。

この文書は,一般的に要素への参照によって時間コンテナを参照するが,属性及びメディア時間コンテナのために宣言される時も,同じセマンティクスが適用される。

par要素

par
parコンテナは,複数の要素を同時に再生する単純時間グループを定義する。これは"parallel"の短縮名とする。

parの子要素の暗黙的同期基点はparの開始点とする。parの子どものためのbeginのデフォルト値は"0"とする。 これはSMIL 1.0に導入された要素と同じとする。 

par要素はすべての要素タイミングをサポートする。

parの暗黙的持続時間

parの暗黙的持続時間は endsyncによって制御される。デフォルトでは,parの暗黙的持続時間はendsync="last"セマンティクスによって定義される。暗黙的持続時間は子要素の最後の活性終了点で終了する。

seq要素

seq
seqコンテナは,連続して再生する要素の連鎖を定義する。

これはSMIL 1.0に導入された要素と同じとするが,seqの子要素のためのセマンティクス(及び許される構文)が明確化された。

seq要素自身が,endsyncを除くすべての要素タイミングをサポートする。

ハイパリンクを辿るとseqの子であり,及びターゲット子が現在活性でない時,探索動作の一部は,指定された時間で活性になるかもしれない単一の子のseqの基本セマンティクスにしなければならない。詳細はseq及び exclタイムコンテナにおけるハイパリンク及びタイミング及び特にbeginElement()関数及びハイパリンクの含みを見ること。

seqコンテナの暗黙的持続時間

excl要素

SMIL 2.0は新しい時間コンテナとしてexclを定義する。

excl
これはparに基づいたセマンティクスを持ち,さらに任意の指定された時間に単一の子要素だけを再生してよいという付加制約を持つ時間コンテナを定義する。もし別の要素がすでに再生している間に任意の要素が再生を開始するならば,再生している要素は一時停止又は停止する。exclの要素はカテゴリごとにグループ化され,及び各カテゴリの一時停止/中断振舞いは新しいグループ要素priorityClassで制御できる。

exclの子要素の暗黙的同期基点は,exclbeginとする。exclの子どものbeginのデフォルト値は,"indefinite"とする。これは,exclの子を時間グラフに加えない限りは,exclは0の持続時間を持つことを意味する。

excl要素自身はすべてのタイミング要素をサポートする。

excl時間コンテナについては,共通使用は困難又は不可能とするが,制作者にとっては容易で,作成も可能とする。excl時間コンテナは相互排他的なクリップの集合を定義するため及びこれらのクリップの間で一時停止及び再開の振舞いを記述するために使用される。例は次のように含む。

対話型再生リスト
利用者はメディアクリップを選択することができるが,一度に一つしか再生されない,新しい選択は,現在の選択を置換する。
音声記述
弱視の利用者に対して,ビデオを一時停止して,現在の場面の音声記述を再生する。音声記述が終了した時,ビデオを再開する。
対話型ビデオ字幕
ビデオで複数の言語の字幕が利用できる。選択した言語の字幕が存在すれば,前の選択を置換して,1つの言語バージョンだけを再生することができる。

上の場合で使用される対話型再生リストは,他のすべての情報源に対する対話に基づく開始時間及びendイベントを持つ情報源を含むparを使用して実現できる。しかし,これは保持するべきendによる値の法外に長いリストを要求する。excl時間コンテナは,これを簡潔に記述する便利な方法を提供する。つまり,要素開始時間はまだ対話的とするが,定義によりexclは一度に一つの子要素の再生しか許可しないので,endイベントを指定する必要がない。

音声記述を使用する場合は,excl及び priorityClassによって一時停止/再開の振舞いが提供されなくては不可能とする。これを使用する場合は,exclの子どもとしてビデオ及び各音声記述を作成する。ビデオ要素は,excl開始点,音声記述及びビデオ要素の隣接が,予定された開始時間又は指定時間に挙げられたストリームイベントに応じて開始すると予定される。

動的なビデオ字幕を使用する場合は,exclの"一度に一つだけ再生する"振舞いを要求する。さらに,子要素は次に示すようにビデオとの同期関係を保存するような方法で宣言される。

<smil ...>
...
<par>
   <video id="vid1" .../>
   <excl>
      <par begin="englishBtn.activateEvent" >
         <audio begin="vid1.begin" src="english.au" />
      </par>
      <par begin="frenchBtn.activateEvent" >
         <audio begin="vid1.begin" src="french.au" />
      </par>
      <par begin="swahiliBtn.activateEvent" >
         <audio begin="vid1.begin" src="swahili.au" />
      </par>
   </excl>
</par>
...
</smil>

三つのpar要素はexclの子どもであり,一度に一つだけ再生できる。各parでの音声の子はビデオの開始と同時に開始するように定義される。親時間コンテナ(par)が活性な時に限り,各音声は活性になるが,その開始点はまだ同期関係を指定している。これは,各parが開始する時,音声クリップの途中及びビデオに同期したいくつかの点で音声が再生し始めることを意味する。

excl時間コンテナは,複雑なクリップ間の相互作用について記述する宣言的な手段の提供するために,多くの製作シナリオにおいて有用とする。

exclコンテナの暗黙的持続時間

priorityClass要素

exclの子どもの一時停止する振舞いを制御するために優先クラスを使用すると,制作者が内容のカテゴリに内容をグループ化し,さらに各カテゴリーがどのように中断するか,又は他のカテゴリーによって中断されるかの規則について記述することを可能にする。新しいグループ化要素priorityClassの属性は,意図した相互作用について記述する。

priorityClass要素は,子どものグループ及びexclの他の時間子どもによって中断された時のこれらの子どもの振舞いについて記述する。その振舞いは,peershigher及びlower優先要素を用いて記述される。peersは,同じpriorityClass要素の内の要素とする

別の要素がすでに活性な間にexcl内のある要素が開始する(又は普通に開始する)時,いくつかの振舞いが生じてもよい。活性な要素が一時停止または停止される,その要素の中断が延期される,又は単に開始点からブロックされてもよい。

デフォルトを注意深く選択することで,共通使用の場合を非常に単純になる。下記の例を参照すること。

priorityClass
excl時間子どものグループ及び子どもの一時停止/中断の振舞いを定義する。もしpriorityClass要素がexclの子として現れるならば,exclpriorityClass要素だけを含むことができる(つまり,制作者はexcl内の時間子ども及びpriorityClass要素を混合できない)。

もし priorityClass 要素が使用されないならば,exclのすべての子どもは,デフォルトのpeers振舞い"stop"を持つpeersとすると考えられる。

peershigher及び lower属性

この規則が現在の活性要素及び中断している要素の振舞いを定義することに注意すること。一時停止待ち行列のどの要素も,(待ち行列でそれらの位置が新しい待ち行列への挿入によって変更されるかもしれないことを除いて)影響されない。

peers = " stop | pause | defer | never "
このpriorityClassの子要素がどのように互いに中断するかを制御する。
この属性の文法に合った値は次の通りとする。
stop
ある子要素が活性な間に別の子要素が開始するならば,その活性要素は単に停止する。
これは peersのデフォルトとする。
pause
ある子要素が活性な間に別の子要素が開始するならば,その活性要素が一時停止され,新しい(中断しようとした)要素がその活性持続時間(excl時間コンテナの制約に従う)を終了した時,再開される。一時停止された要素は,一時停止待ち行列に加えられる。
defer
ある子要素が活性な間に別の子要素が(正常に)開始を試みるならば,その新しい(中断しようとした)要素は,活性要素が活性持続時間を終了するまで延期される。
never
ある子要素が活性な間に別の子要素が(正常に)開始を試みるならば,その新しい(中断しようとした)要素の開始は妨げられる。新しい(中断しようとした)要素の開始は無視される。
higher = " stop | pause "
より高い優先度を持つ要素が,このpriorityClassの子要素を中断する方法を制御する。
文法に合った属性の値は次の通りとする。
stop
このpriorityClassの子要素が活性な間により高い優先度の要素が開始するならば,活性な子要素は単に停止する。
pause
このpriorityClassの子要素が活性な間に,より高い優先度の要素が開始するならば,その活性子要素は一時停止され,新しい(中断しようとした)要素がその活性持続時間(excl時間コンテナの制約に従う)を終了する時に再開する。一時停止された要素は,一時停止待ち行列に加えられる。
これは higher属性のデフォルトとする。
lower = " defer | never "
より低い優先度で定義された要素がこのpriorityClassの子要素を中断する方法を制御する。
文法に合った属性の値は次の通りとする。
defer
このpriorityClass子要素が活性な間に,より低い優先度の要素を(正常に)開始することを試みるならば,その活性要素がその活性持続時間を完成するまで,新しい(中断)要素は延期される。待ち行列に要素を加えるための規則は下に記述される。
これはlower属性のためのデフォルトとする。
never
このpriorityClassの子要素が活性な間に,より低い優先度の要素を開始することを試みるならば,新しい(中断しようとした)要素は開始点から妨げられる。新しい(中断しようとした)要素の開始点は無視され,及び待ち行列に加えられない。

"never"属性値が指定されたために要素開始点がブロックされる(無視される)時,そのブロックされた要素は時間モデルで開始されない。この時間モデルは,時間依存への開始点又は終了点活性化に伝播するべきではないし,beginendイベントを挙げるべきでもない。

pauseDisplay属性

pauseDisplay属性は,priorityClass要素の子どもの一時停止された時の振舞いを制御する。priorityClass要素の子がexcl及びpriorityClassセマンティクスに従って一時停止される時,pauseDisplay属性は一時停止された要素が要素にshow又はapplyに続く(つまり一時停止された時の時間における要素の状態)かどうか又は一時停止されてる間のプレゼンテーションからすべて移動される(つまり無効になった)かどうかを制御する。

pauseDisplay = " disable | hide | show "
一時停止された時priorityClass要素の子要素がどのように振舞うかを制御する。もしpeers="pause"又はhigher="pause"とするならば,属性だけが適用される。     
文法に合った属性の値は次の通りとする。
 
disable
excl及びpriorityClassによって要素が一時停止される時,視覚的なメディアを表示し続けるが,無効になったように見える。無効になった要素がどのように見えるかは実装依存とする(活性状態と区別するために,例えば,グレーアウトのように異なる方法でレンダリングされる).無効になった要素はマウスイベントに反応しない。
hide
excl及び priorityClassセマンティクスによって要素が一時停止される時,要素の効果(いくつかのレンダリングを含む)を取除く。
show
excl及び priorityClassによって要素が一時停止される時,要素の効果(いくつかのレンダリングを含む)を示し続ける。この値は聴覚メディアに効果がない。
これをデフォルトとする。
excl及び priorityClassの使用例

デフォルトであるので,この単純な場合は付加的な構文なしで動作することに注意すること。この基礎的な場合では,すべての要素が隣接に対するデフォルトであり,及び互いに停止する。

<excl dur="indefinite">
   <audio id="song1" .../>
   <audio id="song2" .../>
   <audio id="song3" .../>
   ...
   <audio id="songN" .../>
</excl>

これは次のように明示的な設定をした場合と同じである。

<excl dur="indefinite">
   <priorityClass peers="stop">
     <audio id="song1" .../>
     <audio id="song2" .../>
     <audio id="song3" .../>
     ...
     <audio id="songN" .../>
   </priorityClass>
</excl>

もし制作者が要素に停止するのではなく,一時停止して欲しいならば,構文は次のようになる。

<excl dur="indefinite">
   <priorityClass peers="pause">
     <audio id="song1" .../>
     <audio id="song2" .../>
     <audio id="song3" .../>
     ...
     <audio id="songN" .../>
   </priorityClass>
</excl>

視覚障害のある利用者のために音声記述を使用する場合は,この前の例に非常に似ているように見える。

<excl dur="indefinite">
   <priorityClass peers="pause">
     <video id="main_video" .../>
     <audio id="scene1_description" begin="20s"  dur="30s".../>
     <audio id="scene2_description" begin="2min" dur="30s" .../>
     ...
     <audio id="sceneN_description" .../>
   </priorityClass>
</excl>

この例は,番組の素材及び広告を挿入するより複雑な場合を示す。番組のビデオは互いに中断する。広告はプログラムを一時停止するが,互いに中断しない。

<excl dur="indefinite">
   <priorityClass id="ads" peers="defer">
     <video id="advert1" .../>
     <video id="advert2" .../>
   </priorityClass>
   <priorityClass id="program" peers="stop" higher="pause">
     <video id="program1" .../>
     <video id="program2" .../>
     <video id="program3" .../>
     <video id="program4" .../>
   </priorityClass>
</excl>

次の例は,セマンティクス及び優先度グループの相互作用を先送りする方法を説明する。"alert1"が5秒目で開始しようとする時,その"program" priorityClass は"alert1"を先送りし,"alert1"は待ち行列に配置される。"alert2"が6秒目で開始しようとする時,同じセマンティクスで"alert2"を待ち行列上に配置しようとする。"alerts" priorityClassは"never"のようにpeers規則を定義するが,"alert1"は6秒目で活性化されず,よって,"alert1"及び"alert2"の間の中断セマンティクスは評価されないことに注意すること。この結果,20秒目で"prog1"が終了する時"alert1"は再生され,"alert1"が終了する時"alert2"は再生されるように振舞う。

<excl dur="indefinite">
   <priorityClass id="program" lower="defer">
     <video id="prog1" begin="0" dur="20s" .../>
   </priorityClass>
   <priorityClass id="alerts" peers="never">
     <video id="alert1" begin="5s" .../>
     <video id="alert2" begin="6s" .../>
   </priorityClass>
</excl>

次の例はpauseDisplay制御について説明する。要素が隣接によって中断される時,その中断された要素は一時停止し,無効状態で示される。それは無効になったビデオがどのようにレンダリングされるかは実装依存とする。無効になった要素は,マウスイベントに応答しない。

<excl dur="indefinite">
   <priorityClass peers="pause" pauseDisplay="disable">
      <video id="video1" .../>
      <video id="video2" .../>
      <video id="video3" .../>
      ...
      <video id="videoN" .../>
   </priorityClass>
</excl>

次の例で,より高いpriorityClass要素の子が"program" priorityClassの子を中断する時,その"program"の子は一時停止し,スクリーン上にとどまる。もし"program" priorityClassの隣接がある隣接を中断するならば,再生中の要素は停止し,もはや表示されない。

<excl dur="indefinite">
   <priorityClass id="ads" peers="defer">
      <video id="advert1" .../>
      <video id="advert2" .../>
   </priorityClass>
   <priorityClass id="program" peers="stop" higher="pause" pauseDisplay="show">
      <video id="program1" .../>
      <video id="program2" .../>
      <video id="program3" .../>
      <video id="program4" .../>
   </priorityClass>
</excl>
一時停止(pause)待ち行列セマンティクス

一時停止されるか又は延期される要素は,優先度順にソートされた待機要素の待ち行列に置かれる。活性要素がその活性持続時間を終了し,及び待ち行列が空でない時,待ち行列での最初の(つまり最高優先度の)要素は待ち行列から引かれ,再開又は活性化される。

待ち行列のセマンティクスは,要素の挿入及び削除のための不変式及び規則の組として記述される。議論するために,priorityClass要素の子要素は,そのpriorityClassの優先度を持ち,priorityClassにおけるpeershigher及び lower属性によって記述される振舞いを持つと考える。

待ち行列不変式
  1. 待ち行列は,優先度に従って,より低い優先要素の前により高い優先要素が並ぶようにソートされる。
  2. 要素は,待ち行列に二度以上現われない。
  3. 待ち行列の中の要素は,同時に活性化されない。
要素挿入及び取除き
  1. 要素は,優先度(不変式1による)に従ってソートされた待ち行列に挿入される。
    1. 一時停止された要素は,同じ優先度を持つ要素の前に挿入される。
    2. 延期された要素は,同じ優先度を持つ要素の後に挿入される。
  2. 活性要素が一時停止しなければならないとセマンティクスが定義する個所で,その要素が待ち行列上で位置付けされる時,現在の単純時間(位置)で一時停止される。一時停止された要素が待ち行列から正常に取り除かれる時,それは一時停止された個所から再開する。
  3. 要素が延期しなければならないとセマンティクスが定義する個所で,その要素は待ち行列に挿入されるが,開始しない。 その要素が待ち行列から正常に引かれる時,開始する(つまり,活性化する)。
  4. 要素が待ち行列に置かれる時,その要素の前の任意のインスタンスは待ち行列(不変式2による)から取除かれる。
  5. exclの活性子(つまり時間子)が正常終了する(つまり別の中断しようとする要素によって停止される時ではない)時,待ち行列の先頭の要素は待ち行列から除かれ,再開又は開始される(支配2あるいは3による)。

もし要素が(再起動規則に従って)活性化及び再開するならば,それを中断しようとする隣接という点で,それ自身を中断しない。より正確に言えば,それは単に再開し,待ち行列には影響しない。

実行時同期振舞い及び一時停止/延期セマンティクス

要素の実行時同期振舞い( syncBehaviorsyncTolerance及び syncMaster 属性: 実行時同期の制御で記述されている)は待ち行列セマンティクスに影響しない。待ち行列セマンティクスに従って,一時停止又は延期される任意の要素は,記述されたように振舞う。一時停止された要素が再開される時,同期関係は実行時同期セマンティクスに従って再確立される。延期された要素が実際に開始する時,その要素のための同期関係が確立される。

計算された時間及び一時停止/延期セマンティクス

ある要素が一時停止される時,要素のために計算された終了時間が変更又は解決してよいが,その時間モデルはこれを反映しなければならない。これは一時停止された要素及び活性持続時間で詳述されている。ある場合では,その終了時間は,一時停止待ち行列セマンティクスに影響されない他の要素によって定義される。次の例において,"foo"要素は,8秒目で一時停止されるが,さらに10秒目(一時停止中)で終了する。

<img "joe" end="10s" .../>
<excl dur="indefinite">
   <priorityClass peers="pause">
      <img id="foo" end="joe.end" .../>
      <img id="bar" begin="8s" dur="5s" .../>
   </priorityClass>
</excl>

もしある要素が一時停止待ち行列の中にある間に終了するならば,それは単に一時停止待ち行列から取除かれる。すべての時間依存は正常に通知され,終了イベントは通常通りに終了時間に挙げられる。

ある要素が延期される時,その開始時間は同様に延期される。一時停止された要素及び活性持続時間に記述されている通りに,延期された要素の開始時間は未解決又は単に延期されてもよい。次の例において,"bar"要素は最初は未解決の開始時間を持つ。もし利用者が8秒目に"foo"をクリックすれば,"bar"は8秒目に解決されるが,10秒目("foo"が終了する時)まで延期される。

<html ...>
...
<excl dur="indefinite">
   <priorityClass peers="defer">
      <img id="foo" begin="0s" dur="10s" .../>
      <img id="bar" begin="foo.click" .../>
   </priorityClass>
</excl>
...
</html>

もし(上記の例のように)新しい開始時間を決定するために十分な情報があるならば,要素が延期された時実装は現在の正しい開始時間を計算しなければならない。 一時停止される要素に起因する開始時間の変更は,任意の同期弧時間依存(つまり,延期された要素の開始点と関係して定義された開始点又は終了点を持つ他の要素)に伝播されなければならない。時間変化の波及節も参照すること。

正常な処理に対する例外は,モデルを単純化するために延期された要素のために作られる。延期された要素は,その開始時間に伝播された変更を無視する。これは延期された要素及び開始点変化の波及で詳述される。

スケジュールされた開始時間及びexcl

exclの子どものデフォルトの開始時間は不定とするが,スケジュールされた開始時間は許される。exclの子どもにおけるスケジュールされた開始時間は,その要素を指定された時間に開始し,priorityClass設定(及びデフォルト値)に依存して,他の兄弟を一時停止又は停止する。

excl内の同時開始点の取扱い

exclの子どもが同時に開始することを試みれば,この評価は文書順に進行する。各要素に対して順番にpriorityClassセマンティクスは考えられ,要素は一時停止,延期,又は停止されてもよい。

次の例は,どちらも(スケジュールされた時間,対話型タイミング,ハイパリンク,又はDOM活性化から生じる)この振舞いを禁じる。

<smil ...>
...
<excl>
   <img src="image1.jpg" begin="0s" dur="5s"/>
   <img src="image2.jpg" begin="0s" dur="5s"/>
   <img src="image3.jpg" begin="0s" dur="5s"/>
</excl>

<excl>
   <img id="img1" src="image1.jpg" begin="foo.activateEvent" dur="5s"/>
   <img id="img2" src="image2.jpg" begin="img1.begin" dur="5s"/>
   <img id="img3" src="image3.jpg" begin="img2.begin" dur="5s"/>
</excl>
...
</smil>

第1の例では,画像はただちに開始するためにスケジュールされ,第2の例では,一旦利用者が"foo"要素を活性化すれば,それらはすべて同時に開始される。この二つの例の最終結果は(開始時間以外は)同じとする。exclにデフォルト割込みセマンティクスを指定するので,第1の画像は開始し,次に第2の画像によってただちに停止され,さらに順番に従って第3の画像によって停止される。この最終結果は,第3の画像だけが見られ,5秒後に終了する。最初の二つの画像の開始及び終了イベントは,すべての時間依存に挙げられ伝播されることに注意すること。この例の振舞いが"pause"に設定されるならば,宣言された順序は効果的に逆になる。

<excl>
   <priorityClass peers="pause">
      <img src="image1.jpg" begin="0s" dur="5s"/>
      <img src="image2.jpg" begin="0s" dur="5s"/>
      <img src="image3.jpg" begin="0s" dur="5s"/>
   </priorityClass>
</excl>

この場合では,第1の画像は開始し,次にただちに第2の画像によって一時停止され,さらに順番に従ってただちに第3の画像によって一時停止される。最終結果は,第1の画像が5秒間,続いて第2の画像が5秒間,続いて第3の画像が5秒間見られる。exclが開始する時,最初の二つの画像における開始イベントがすべての時間依存に挙げられ,及び伝播されることに注意すること。

次のスライドショーの例において,画像はスケジュールされた時間より早く,又は利用者入力イベントによって活性化された時,開始する。

<html ...>
...
<excl>
   <img src="image1.jpg" begin="0s".../>
   <img src="image2.jpg" begin="10s; image1.click".../>
   <img src="image3.jpg" begin="20s; image2.click".../>
</excl>
...
</html>

excl内のスケジュールされた及び対話型タイミングを結びつける時,いくつかの驚くべき結果が生じることに注意すること。上記の例において,利用者が画像1をクリックしてから10秒経過する前に画像2をクリックするならば,画像2は10秒目で再び現れる。画像3は20秒に現れる。この特殊に使用する場合の大体の意図は,seq時間コンテナでより良く表される。

活性副作用

exclの子どもは,スケジュールされたタイミング,ハイパリンク,イベント又はDOMメソッド呼出しによって活性化される。ほとんどのハイパリンクの活性化については,excl時間コンテナはexclの子要素を活性化するために活性されなければならない。ハイパリンクの活性化によって,その文書は親exclを活性化させることを要求するために探索し,及びもし開始時間ターゲット子が解決された開始時間を持っているならば,探索結果がそれになってもよい。つまり,正規のハイパリンク探索セマンティクスを,exclの時間子に適用する。

DOMメソッド呼出し(例えばbeginElement()メソッド)による活性化について,たとえ要素がスケジュールされた開始時間を持っても,その要素は現在の時間(priorityClassセマンティクスに従って)に活性化される。それでもなお,時間コンテナの(一度に単に1つの活性要素しか許さない)排他的なセマンティクス及びすべてのpriorityClassセマンティクスを守る。

ハイパリンク及びタイミング 及び特にseq及び excl時間コンテナのためのbeginElement()関数及びハイパリンクの含みを参照すること。

メディア要素時間コンテナの暗黙的持続時間

メディア時間コンテナの暗黙的持続時間は,暗黙的単純持続時間を定義するために,子供のメディアの固有の持続時間を組合わせる。endsyncの "ID-REF"値の場合は,このセマンティクスは正規時間コンテナと同様とする。endsyncの "media"値の場合は,暗黙的持続時間はその要素に直接関連したメディアの固有の持続時間と等しい。値"first""last"及び"all"の場合は,メディア要素はpar 時間コンテナとして作用するが,"first""last"及び"all"のendsync値の基準が満足する時に決定するまで補足条件として要素の関連メディアを扱う。

endsyncによって定義された暗黙的持続時間が,連続メディア要素の固有の持続時間より長いならば,メディア(例えばビデオの最後のフレーム)の終了状態は,暗黙的持続時間の残りの時間表示される。これは視覚メディアにだけ適用され,聴覚メディアは単に再生を停止する。

このセマンティクスは,制作者が連続メディア要素のための固有の持続時間より長い単純持続時間を指定した場合に似ている。どちらの場合も,メディア要素は単純持続時間の残りのために効果的に凍結されるが,この期間は時間コンテナ単純時間は凍結されなく,及び任意の子どもはメディア固有の持続時間による影響を受けずに普通に起動することに注意すること。

次の例では,"vid1"が長さ10秒と仮定する。

メディア要素のためのendsyncのデフォルト値は"media"であり,よって次の例の単純持続時間は10秒とする。これはanimate子の8秒をその単純持続時間に切上げる。

<video src="vid1.mpg" >
   <animate begin="2s" dur="12s" .../>
</video>

下の例で, endsync="first"と指定すると,子がアニメーション化する前にメディアが終了するので,ビデオ要素の単純持続時間を10秒する。

<video src="vid1.mpg" endsync="first" >
   <animate begin="2s" dur="12s" .../>
</video>

次の例で, endsync="last"と指定すると,ビデオ要素の単純持続時間が14秒になる。このビデオは最後の4秒間は静止フレーム(最後のフレーム)を表示する。

<video src="vid1.mpg" endsync="last" >
   <set dur="8s" .../>
   <animate begin="2s" dur="12s" .../>
</video>

次の例で, endsync="all"と指定すると,ビデオ要素の単純持続時間が少なくとも10秒(ビデオの固有の持続時間)続き,及び利用者がビデオをクリックした後は,多くても5秒まで続く。このビデオの持続時間が10秒を越える時には静止フレーム(最後のフレーム)を表示する。

<html ...>
...
<video src="vid1.mpg" endsync="all" >
   <set dur="8s" .../>
   <animate begin="click" dur="5s" .../>
</video>
...
</html>

したがって,もし利用者が1秒後にビデオをクリックすれば,単純持続時間は10秒になる。もし利用者が15秒目までクリックしなければ,単純持続時間は20秒であり,及び最後のフレームは10〜20秒間表示される。たとえ10秒目に普通に再生を停止しても,ビデオを今までどおりクリックすることができる。

他の型のメディア時間コンテナ

いくつかの言語統合では,上に記述されたデフォルトの並列セマンティクスに加えて,連続又は排他的なセマンティクスを持つメディア時間コンテナを宣言することができる。例えば,

<html ...>
...
<video src="vid1.mpg" timeContainer="seq" endsync="first" >
   <animate dur="4s" .../>
   <animate end="click" .../>
</video>
...
</html>

videoのアニメーション化する子どもは連続的に動作する。もし最後のanimate開始点と同時に利用者がvideo上でクリックするならば,endsyncセマンティクスは,ちょうど4秒以上から多くても10秒(ビデオの固有の持続時間)の videoのための単純持続時間を定義する。

10.3.3 タイミングモデルのセマンティクス

時点の解決

関連する開始イベント及び終了イベントのどちらも(イベント感度の制約内で)まだ生じていない場合,又は開始時点若しくは終了時点が他の要素の未解決の開始時点又は終了時点に依存する場合,その開始時点又は終了時点は,未解決という。同期基底要素の時間が解決されるとすぐに,又はイベントが(イベント感度の制約内で)生じる時に開始時点又は終了時点は解決される。

開始点又は終了点の値が既に過ぎた時点として解決する場合,この値は他の同期する従属関係にあるものに伝播される。同様に,単純持続時間又は活性持続時間は未解決の可能性があるが,終了条件が満たされる場合,又は親時間コンテナが要素の持続時間を制約する場合に,解決されることが可能になる。

確定的時点

解決された時点が,値"indefinite"でない場合確定的という。

単純持続時間の定義

要素の単純持続時間は, dur属性,要素の暗黙的持続時間,及びSMIL 1.0後方互換性を保証する,ある特殊な場合の法則によって決定される。次の表の中の与えられた基準と一致する最初の規則を適用すること。

単純持続時間の計算は,計算される時点で利用可能な情報に基づく。未解決の量は,未解決の量が解決される時に単純持続時間を再計算することを要求してもよい。

 
dur 暗黙的要素持続時間 repeatDur及びrepeatCount 単純持続時間
未指定 (無視する) 未指定,end 指定 不定
Clock-value (無視する) (無視する) dur 又は Clock-value
不定 (無視する) (無視する) 不定
未指定 解決済み (無視する) 暗黙的要素持続時間
又はClock-value
未指定 未解決 (無視する) 未解決
メディア 解決又は未解決 (無視する) 暗黙的要素持続時間

単純持続時間表

repeatCount及び未解決の単純持続時間

repeatCountが指定された場合,それは,単純持続時間の反復の回数を表現するためと理解される。単純持続時間の各々の反復(の経過時間)は異なってもよく,したがって, repeatCount及び与えられた単純持続時間の単純な乗算は,正確な活性持続時間を産出しなくてもよい。 部分的なrepeatCount及び解決されない単純持続時間の場合には,最後の単純持続時間を制約するために,最も新しい単純持続時間にrepeatCountの小数部分をかけることが望ましい。単純持続時間の最後の反復がこの時点の前に他の方法で終了する場合,repeatCountは,完了したと考えることが望ましい。repeatCountが1未満であって,単純持続時間が未解決の場合,repeatCountは正確に評価できず,"1"のrepeatCountが指定されているものとして振る舞う。

音声メディアを指定する要素が(例えばclipBegin値及び clipEnd値のために)0の単純持続時間をもっている場合,たとえrepeatDurが活性持続時間を指定していても,何も再生されないことが望ましい。時間モデルはその記述に従って振る舞うが,音声は再生されないことが望ましい。

repeatDurが単純持続時間より短いか,又はrepeatCountが1未満の場合,活性持続時間は定義された単純持続時間を切って短くすることができる。

repeatDurが"indefinite"であって,repeatCount又はendのどちらも指定されない場合,活性持続時間は不定とする。repeatCountが不定であって,単純持続時間は0より大きく,repeatDur又は endのどちらも指定されていない場合,活性持続時間は不定とする。

要素がrepeatCount又はrepeatDurを用いて開始点オフセット及び繰返し振る舞いを定義する場合,SMIL1とは違って,開始点オフセットは各々の繰返しには含まれていないことに注意すること。

活性持続時間の計算

要素の活性持続時間は,要素の時間軸が活性である全期間を定義する。それには,上記で評価された要素の単純持続時間end属性,並びにrepeatDur属性及びrepeatCount属性によって定義された任意の繰返し振る舞いが,考慮に入れられる。

活性持続時間の算術規則

活性持続時間を計算するには,単純持続時間がもつ可能性のある値のすべてに対して,次の算術演算を定義することが必要になる。

乗算
加算及び減算
最小化関数

ここで任意は,"0","0でない値","不定","未解決"を意味する。

最大化関数
活性持続時間のアルゴリズム

本節では,begin値及びend値の参照は,各々の値のリスト中の現在の実効値として理解されることが望ましい。これらの値は,開始時点及び終了時点のリストの評価によって決定される。

次のシンボルは簡略記述としてアルゴリズムの中で使用される。

B
要素の開始点
d
要素の単純持続時間
PAD
minセマンティクス及び maxセマンティクスを評価する前の要素の仮の活性持続時間
AD
要素の活性持続時間

活性持続時間の計算は,計算が行われる時点で利用可能な情報に基づく。未解決の数量がある場合,未解決の数量が解決した時に,活性持続時間を再計算してもよい。

活性持続時間を計算するには,次のアルゴリズムを使用すること。

endが指定され,durrepeatDur及び repeatCountがいづれも指定されない場合,上記の単純持続時間表から単純持続時間は不定であり,活性持続時間はend値によって次のように定義される。

endが値に解決されている場合, PAD = end - Bとする。

それ以外であって,end 不定の場合,PAD = 不定とする。

それ以外であって,end が未解決の場合, PADは未解決とし,さらに情報が適用可能になる時点で再計算が必要になる。

それ以外であって,end 値が指定されないか,又はend値が不定と指定される場合,活性持続時間は,以下に与えられる中間活性持続時間計算法から決定される。

PAD = 中間活性持続時間の計算結果 

そうでなければ,不定と等価でないend 値はdurrepeatDur及び repeatCountの少なくとも一つに従って指定される。そのときに,PADend及び要素の開始点との間の持続時間,並びに次に与えられる中間活性持続時間の計算法からの結果との最小値とする。

PAD = MIN( 中間活性持続時間の計算結果, end - B)

最終的に,計算された活性持続時間ADは,仮の活性持続時間PADminセマンティクス及び maxセマンティクスを適用することによって得られる。次の式において,min値がない場合,0の値を代入し,max値がない場合,"indefinite"の値を代入する。

AD = MIN( max, MAX( min, PAD ))
中間活性持続時間の計算

ここでは,三つの中間生成される数量,p0,p1及びp2を定義し,上記の計算で使用される中間結果である中間活性持続時間(IAD)を生成する。

p0は上記で与えられた単純持続時間表にある単純持続時間とする。

repeatCountが指定されていない場合,p1不定の値をもつ。そうでなければ, p1はこの要素の単純持続時間の指定された反復回数分の蓄積合計とする。p1は,各々の反復に対する単純持続時間が解決されるまで未解決の値をもつ。部分的な反復は,単純持続時間の指定された一部分を合計に寄与する。この生成物は,既知のメディアの固定した単純持続時間,又は,未知の場合,現時点の繰返しの集合でのこれまでの反復からの単純持続時間に基づく。一般に,固定した単純持続時間のないメディアのために,単純持続時間の指定された回数が整数回分過ぎるまで,p1は解決されない。

p2repeatDurの値とする。repeatDur が指定されない場合,p2不定の値をもつ。

IADは次によって与えられる。

p0が0と等価な場合,

IAD = 0

それ以外であって,repeatDur 及び repeatCount が指定されない場合,

IAD = p0

そうでない場合,

 IAD = MIN( p1, p2, 不定)

例えば,要素が次のように指定されている場合

<smil ...>
...
<audio dur="5s" end="foo.activateEvent" .../>
...
</smil>

活性持続時間は指定された単純持続時間に基づいて,最初に5秒として定義される。利用者が5秒間より前に"foo"を活性化すれば,end値は解決し,活性持続時間は再評価される。この結果,活性化の時点で要素は終了する。

アルゴリズムにおいて規則及び結果のうちの幾つかは暗黙的で,特に注意することが望ましいものは次に示す。

スケジュールされた対話型のタイミングを結合することがあり得る。例を次に示す。

<smil ...>
...
<par dur="30s">
   <img id="mutebutton" src="mute.jpg"/>
   <text  src="description.html" />
   <audio src="audio.au" end="mutebutton.activateEvent"/>
</par>
...
</smil>

画像及びテキストは,parの指定された持続時間(30秒)の間,現れる。音声の終了時点が未解決なので,音声の活性持続時間は最初に不定であると定義される。音声の暗黙の終了点の前に(例えば,クリックされて)画像が活性化される場合,音声は早く停止する。画像が活性化されない場合,親時間コンテナのdur属性はが再生を制約する。

イベントに基づく活性終了点と同様にスケジュールされた持続時間を両方とも宣言することがあり得る。これは,"怠惰な相互作用"としばしば呼ばれる使用事例で,利用者のクリックに応じて進行する,又は指定された時間後に自ら進行するスライドショーのような使用事例を容易にする。

<html ...>
...
<seq>
   <img src="slide1.jpg" dur="10s" end="click" />
   <img src="slide2.jpg" dur="10s" end="click" />
   <img src="slide3.jpg" dur="10s" end="click" />
   <!-- etc., etc. -->
</seq>
...
</html>

この場合,各々の要素の活性終了点は,指定された持続時間又は要素上のクリックのどちらか早いものと定義される。視聴者はなにもせずに見ていられる,又はより速い変化率でスライドを進められる。

一時停止された要素及び活性持続時間

要素はそれが活性な間,一時停止させることができる。これは,DOMメソッド呼出しによるもの,又はexclのセマンティクスのためのものを含む多くの方法で起こってもよい。要素が一時停止されるならば,その要素の解決された終了時点は変わってもよいし,又は未解決になってもよい。一時停止された要素が再開されるときに,一時停止された要素及びその親時間コンテナとの間の同期関係が再確立される。例えば,次の要素がDOMメソッド呼出しで一時停止されるならば,要素がいつ終了するかを知る方法はなく,終了時点は未解決であると考えられなければならない。

<img dur="30s" .../>

しかしながら,次の場合では,たとえ"bar"要素が8秒で一時停止したとしても,依然として"bar"要素は10秒で終了する。この場合,終了時点は変わらない。

<img id="foo" dur="10s" .../>
<img id="bar" end="foo.end" .../>

最後に,次の場合では,"foo"要素は最初10秒で終了すると計算される。"bar"要素が8秒で開始する(すなわち利用者が"foo"を活性化するか又はクリックする)場合,"foo"は一時停止される。しかしながら,"bar"の持続時間は既知で,excl一時停止待ち行列のセマンティクスは明確なので,"foo"の終了点は15秒と計算することができる。

<smil ...>
...
<excl dur="indefinite">
   <priorityClass peers="pause">
      <img id="foo" dur="10s" .../>
      <img id="bar" begin="foo.activateEvent" dur="5s" .../>
   </priorityClass>
</excl>
...
</smil>

新しい終了時点(上記の例のように)を決定する十分な情報があるならば,要素が一時停止されたときに,実装は正確な終了時点を計算しなければならない。一時停止された要素に起因する終了時点への変化はすべて,任意の同時弧時間従属(すなわち,一時停止した要素の活性終了点に関連して定義される開始点又は終了点を伴う他の要素)に伝播しなければならない。時間変化の伝播の節も参照すること。

さらに,要素が一時停止されるときに,蓄積同期化オフセットは変化した同期関係を反映するために増加する。蓄積同期化オフセットも参照すること。

最後に,要素が一時停止されるときに,要素は親時間コンテナが終了するので終了してもよい。この場合,要素が終了するときに,任意のfill(埋め)属性の振る舞いは要素活性時間を使用して解釈される。(すなわち,何を表示するのか決定するために一時停止される際に,要素活性時間を使用する。 )

開始時点及び終了時点のリストの評価

par及びexclの時間コンテナの子どもは複数の開始点の値及び終了点の値をもつことができる。複数の開始時点及び終了時点に関連したセマンティクス及び動的時間グラフモデルがこの複数の時点でどのように働くかを指定する必要がある。

モデルは,各々の要素の間隔についての考え方などに基づく。間隔は開始時点及び終了時点によって定義される。時間グラフが再生されるとき,ひとつ以上の間隔が,複数の開始時点及び終了時点を伴う要素のために生成されてもよい。任意の瞬間において,各々の要素に関連した,ひとつの現在の間隔が存在する。要素のための開始属性及び終了属性に記述された条件に各々が基づいている開始時点のリスト及び終了時点のリストの評価によって,間隔は生成される。

新しい間隔を計算するために使用される開始時点のリスト及び終了時点のリストは"インスタンス存在時間"のリストとして参照される。リストの一つに含まれる各々のインスタンス存在時間は,属性構文に定義される開始条件又は終了条件の規定に関連付けられる。幾つかの条件(例えばoffset-value)はリストにただ一つのインスタンスだけをもつ。条件が二度以上起こることができる場合,他の条件は複数のインスタンスをもっていてもよい。例えば,同期基底要素が幾つかの間隔で再生した場合,syncbase-valueは複数のインスタンス存在時間をもつことができる。また,イベントが二度以上起こった場合,event-valueは複数のインスタンス存在時間をもっていてもよい。

時間グラフが初期化されるときに,各々の要素のためのインスタンス存在時間は,初期化され,時間グラフの全寿命のために存在する。offset-valueによって定義されるような幾つかのインスタンス存在時間は,一覧に永久に残る。その一方で,他は移り変わってもよい。例えば,関連したイベントが起こるときに,event-valueに関連する時点は,追加されるだけであり,要素が再設定するときに,要素状態の再設定で記述されるように,event-valueに関連する時点は削除される。同様に,新しい間隔が同期基底要素のために生成されるごとに,syncbase-valueのためのインスタンス存在時間は一覧に加えられる。しかし,これらのインスタンス存在時間は再設定によって削除されず,一覧に残る。

時間グラフが初期化されるときに,各々の要素は最初の現在の間隔を生成することを試みる。開始時点は一般に解決されるが,終了時点は多くの場合未解決であってよい。要素が活性な間に再開することができる場合,現在の間隔は次の開始時点において(早期に)終了することができる。この間隔は再生し,その後それが終了するときに,要素は開始インスタンス存在時間及び終了インスタンス存在時間のリストを再吟味する。要素が再び再生する場合,別の間隔が生成され,この新しい間隔は現在の間隔になる。要素の履歴は,一つの間隔の集合と見なすことができる。

開始時点及び終了時点は,変更できる他の時点に従属してもよいので,現在の間隔は時間とともに,変更される可能性がある。例えば,終了点変更に関わるインスタンス存在時間のうちのどれかが現在の間隔の間,再生している場合,現在の間隔終了点は再計算され変わってもよい。しかしながら,いったん時間が起こったならば,それは固定される。すなわち,いったん現在の間隔が開始したならば,その開始時点はもはや変わることができない。また,いったん現在の間隔が終了したならば,その終了時点はもはや変わることができない。要素が再始動するために,それは現在の間隔を終了しなければならず,その後,再始動を起こすために新しい現在の間隔を作らなければならない。

開始条件又は終了条件が(例えばsync-valueについての)別の要素への時間従属性を定義するときに,時間従属性は二つの要素間の関係と一般に見なされる。要素が,新しい現在の間隔を作るときに,この従属性のレベルはモデルにとって重要である。しかしながら,個々の時間の変更を伝播する目的のために,時間従属性は,与えられた同期基底要素の間隔から,従属する要素のインスタンス存在時間の一覧の一つにある特定のインスタンス存在時間まで,より特有な従属性がある。現在の間隔の開始時点及び終了時点だけが変更できるので,現在の間隔だけが時間変更通知を生成し,従属する要素のインスタンス存在時間をこれらに伝播させる。

この節が要素のために開始時点及び終了時点を参照するときに,時点は親単純持続時間のスペースにあると記述される。同期弧値,イベント弧値,掛け時計値などはすべて,比較を容易にするためにこの時間スペースに変換されなければならない。開始時点が"0より前"と参照されるときに,"0"が親単純持続時間の開始点だと想定されるということは特に重要である。モデルはこの定義に依存しない。例えば,実装は,大域的文書時間ですべてのことをすることができる。

時間グラフ中のサイクルは,実装の合理的な機能性を保証するために検知され,壊されなければならない。一般的な場合において,これを行う方法のためのモデルは記述されている(それは実際,SMIL 1.0にも適用される問題である)。ある有用な循環的従属性を支援するための機構はモデルから外れる。

この節の残りは,インスタンス存在時間の一覧,要素のライフサイクル,及び,従属関係及びサイクルの扱いにおける機構のセマンティクスを詳述する。

インスタンス存在時間の一覧

インスタンスの一覧は各々の要素に関連していて,文書の持続時間のために存在する(すなわちインスタンスの一覧のためのライフサイクルはない)。インスタンスの一覧は変更されてもよいし,幾つかの時点が加えられたり,削除されたりしてよい。しかし,開始インスタンス存在時間及び終了インスタンス存在時間の一覧は永続している。

各々の要素は,要素を開始できる一つ以上の条件を定義する開始属性をもつことができる。さらに,タイミングモデルは,複数の条件をもつことができる終了属性の影響を含む,要素の終了を決定するための規則の集合を記述する。与えられた要素の間隔のために使われることが望ましい時点を計算するために,開始時点及び終了時点を親単純時間に変換しなければならず,時点の各一覧を(独立して)ソートしなければならず,間隔を定義するための適切な対の時点を見つけなければならない。

インスタンス存在時間は,解決されるか又は未解決とすることができる。終了点の一覧の場合,付加された特別な値"indefinite"が許される。リストはソートされた順序が保持され,"indefinite"以外の全ての解決された時点がソートされた後に"indefinite"がソートされ,その後ろに未解決の時点が最後までソートされて並ぶ。

開始点については,開始時点が属性中の条件又は属性がない場合デフォルト開始値のみに基づくので,一覧の解釈は簡単である。しかしながら,開始条件がsyncbase-valueである場合,同期基底要素は複数の間隔を持っていてもよい。また,条件に関連した開始時点の一覧中でこれを計算しなければならない。

終了点については,終了条件が活性持続時間の終了点の計算の一部でしかないので,多少複雑である。終了点についてのインスタンス存在時間の一覧は,間隔のための実際の終了時点を計算するために別のSMILタイミングセマンティクスと一緒に使用される。

インスタンス存在時間がsyncbase-valueとして定義される場合,インスタンス存在時間は,同期基底要素のための関連する間隔との時間的に従属な関係を保持する。これは,同期基底の現在の間隔の関連する開始時点又は終了時点が変わる場合,この要素のための従属するインスタンス存在時間が同様に変わるということを意味する。

要素が新しい間隔を作る場合,それは時間に従属する要素を通知し,"活性持続時間の計算"の節で記述されたセマンティクスに従い計算された開始時点及び終了時点を提供する。各々の従属する要素は,新しい同期基底の現在の間隔に結び付けられた(つまり,従属関係を持った)新しいインスタンス存在時間を生成する。

インスタンス存在時間の一覧の構築

インスタンス存在時間への開始条件又は終了条件の翻訳は条件の型に依存する。

属性がない場合,デフォルト開始値は評価されなければならない。parの子どもにとって,これは0のoffset-valueと等価であり,ある永続したインスタンス値を産出する。exclの子どもにとって,これは"indefinite"と等価であり,したがって,インスタンス値を産出しない。

DOMメソッド呼出しが,要素の開始点又は終了点に対して行われる場合(beginElement(), beginElementAt() endElement()又は endElementAt()),各々のメソッド呼出しは,(適切なインスタンス存在時間の一覧中の)単一のインスタンス存在時間を生成する。これらの時間インスタンスは,イベント時間についてだけ言えば,再設定でクリアされる。 要素状態の再設定の節を参照すること。

新しい時間インスタンスが開始点の一覧に加えられる場合,現在の間隔は,再始動セマンティクスを評価し,新しい時間を無視してもよいし,又はそれは,現在の間隔を終了してもよい(これは再始動セマンティクスの相互作用の節で詳述される)。対照的に,同期基底(現在の間隔)時間が移動するので,開始点の一覧中のインスタンス存在時間が変わる場合,これは再始動セマンティクスを起動しないが,しかし現在の開始時点を変更してもよい。現在の間隔がまだ開始していない場合,開始点の一覧中のインスタンス存在時間への変更は,開始点インスタンスの一覧の再評価を引き起こし,間隔の開始時点の変更を引き起こしてもよい。間隔の開始時点を変更する場合,時間変更通知はすべての依存に伝播されなければならず,及び現在の間隔の終了点も再評価されなければならない。

新しいインスタンス存在時間が終了点の一覧に加えられる,又は終了点の一覧中のインスタンス存在時間が変わる場合,現在の間隔はその終了時点を再評価する。それが変わる場合,依存を通知しなければならない。

要素がすでにすべての間隔を再生した場合,現在の間隔はなくなってもよい。この場合,いずれかの一覧での任意のインスタンス存在時間の変更と同様に,インスタンス存在時間のいずれかの一覧への追加は,要素に対し,ちょうど各々の間隔の終了点であるように一覧を再評価させることを引き起こす。(下記の間隔の終了点の節で記述される)。これは,要素のための新しい間隔の生成を導いてもよいし,又は導かなくてもよい。

未解決のインスタンス存在時間及び関連するインスタンスをもっていない開始条件又は終了条件の間には違いがある。例えば,イベント値条件が終了属性で指定されるが,そのようなイベントは起こっていない場合,関連するインスタンス存在時間は終了点の一覧にはない。しかしながら,同期基底値条件が終了点に対して指定される場合,及び同期基底要素が現在の間隔をもっている場合,終了点の一覧中には,関連するインスタンス存在時間があることになる。同期基底値条件が同期基底要素の終了を基準とし,同期基底の現在の間隔の終了が解決されなくてもよいので,終了点の一覧中の関連するインスタンス存在時間は未解決でもよい。一旦,同期基底の現在の間隔が実際に終了すれば,終了点の一覧中の従属するインスタンス存在時間は解決された同期基底の間隔の終了点のために時間変更の通知を得る。従属するインスタンス存在時間は,新しく解決された同期基底時間を親単純時間において解決された時間に変換する。インスタンス一覧が未解決のインスタンス存在時間を含んでいない場合,いくつかの付加的な機構は同期基底要素の現在の間隔が実際に終了した終了インスタンス存在時間を加えることを定義されなければならないし,その終了時点を解決しなければならない。

解決された時間の一覧は,同期ベース要素を基準として定義された過去の実績的な時間を含んでおり,同期ベースが多くの間隔を持っている場合,時間とともに成長することができる。それがここに定義されたセマンティクスに影響しない限り,実装は最適化のために時間の一覧をフィルタしてもよい。

間隔の構築及び切詰めのための原則

次に示す原則の集合は間隔モデルの基礎となる。これは完全なモデルではない。それは単にモデルの付加的な見解を提供することを意味する。

最初に,間隔の切詰め及び間隔の切取りという用語を定義する。これらの概念を混乱させてはならない。

幾つかの場合には,間隔が作られた後,より多くの情報が知られるようになるにつれて,切り詰められること(時間グラフから,抹消されること/削除されること)はより遅れなければならず,セマンティクス制約は適用されなければならない。間隔が切り詰められている場合,それは示されないし,それは開始イベント又は終了イベントを挙げないし,同期基底時間に従属する要素のための任意の関連するインスタンス存在時間は,それぞれのインスタンス存在時間の一覧から削除されなければならない。それは,あたかも切り詰められた間隔のように,指定されない。

他の場合には,特に親時間コンテナ上の負の開始時点に関連して,たとえそれが親時間制約に対して合法でなくても,子のための妥当な間隔は示されなくてもよい。例えば次のようになる。

<par begin="-10s" dur="20s">
   <img id="slide1" src="slide1.jpg" dur="3s" />
   <img id="slide2" src="slide2.jpg" begin="slide1.end+3s" dur="10s" />
   <img id="note1" src="note1.jpg" begin="slide1.beginEvent" dur="20s" />
</par>

"slide1"画像は切り取られるが,しかし切り詰められない。parは親時間コンテナの10秒前で開始することはできず,その代わり,その単純持続時間での10秒後に同期し,親時間における0秒で開始するため,それは,切り取られる。parにおける(開始時点から)10秒前にその"slide1"画像は開始して,終了し,よって示すことができなく,切り取られる切り取られた間隔は示されないし,開始イベント又は終了イベントを挙げないが,同期基底の時間従属についての妥当なインスタンス存在時間を依然として作る。したがって,"slide2"は示される(間隔は文書時間でマイナス4秒から6秒まで,よって0秒から6秒まで6秒間示される)。しかし,"note1"は示されない。

間隔ライフサイクルモデルの基礎となる原則は次のとおりとする。

  1. できるだけ早く現在の間隔の構築を試みること。
    1. "次の"間隔は現在の間隔の終了より早く計算されることはない。
  2. 過去にある間隔時間は,どれも変更してはいけない。すでに開始した間隔を切り詰めてはいけない。これは間隔を参照し,インスタンス存在時間を参照しないことに注意すること。
  3. インスタンス存在時間の集合の一つから間隔を構築する場合,持続時間が解決され,値が負の場合は,間隔を棄却すること。時間従属する要素への間隔を伝播しないこと。
    1. 現在の間隔がまだ開始していない場合,持続時間が負とするように間隔時間を変更する場合は,間隔を切り詰めること。
  4. インスタンス存在時間の集合の一つから間隔を構築する場合,終了点が解決され,(親単純時間において)0以下の場合は,間隔を棄却する。時間従属する要素への間隔を伝播しないこと。
    1. 現在の間隔がまだ開始していない場合,終了点を0以下とするように,間隔時間を変更し,間隔を切り詰める。
  5. インスタンス存在時間の集合の一つから間隔を構築する場合,間隔開始点が,親時間コンテナの(解決された)単純終了点以上の場合は,間隔を棄却する。
    1. 現在の間隔がまだ開始していない場合,開始点が親時間コンテナの単純終了点以上となるように間隔時間を変更する場合は,間隔を切り詰める。
    2. 現在の間隔がまだ開始していない場合,現在の間隔時間が親時間コンテナの単純終了点以上となるように親単純終了時点を変更する場合は,間隔を切り詰める。

未解決の開始時点は間隔を生じないということを法則5では暗黙に意味する。なぜならば,未解決の開始時点は必ず親単純終了点以上となるからである。

要素のライフサイクル

要素のライフサイクルは,次の基本的な手順だと考えられる。

  1. 始動—最初の間隔を得ること。
  2. 現在の間隔の開始を待つこと。
  3. 活性時間—間隔を再生すること。
  4. 間隔の終了点—次のものを計算し,従属する要素を通知する。
  5. ポスト活性—任意のfill(埋め)を実行し,次の間隔を待つ。

手順2から5は親単純持続時間の終了点の前に定義される,間隔の回数分ループすることができる。手順2の間はいつでも,現在の間隔についての開始時点は変わることができ,手順2又は3の間はいつでも,現在の間隔についての終了時点は変わることができる。どちらかが起こる場合,変更は時間に従属する要素へ伝播される。

文書及び関連する時間グラフが初期化される場合,インスタンス一覧は空とする。それらが,親単純時間の開始時点と独立するように,単純なオフセット値及び終了属性中のいづれの"indefinite"値も,初期化の一部としてそれぞれの一覧に加えられることができる。

要素が許可されたインスタンスをすべて再生した場合,手順5に留まっていると考えることができる。しかしながら,この期間中のインスタンス一覧への任意の変更は,要素を手順4に差し戻し,新しい現在の間隔の生成を考慮する。

始動—最初の間隔を得ること

要素のライフサイクルは,要素の親時間コンテナについての単純持続時間の始めから開始する。すなわち,親時間コンテナ(又はより一般に任意の先祖時間コンテナ)の時間ごとに繰り返すか又は再始動し,要素の再設定(要素状態の再設定節も参照すること)を行い,"ライフ"を新たに開始する。

ライフサイクルの始まりにおいて重要なことは,次の三つとする。

  1. event-value,repeat-value,accesskey-value又はDOMメソッド呼出し経由で付加されたものとして定義される任意の及びすべての解決された時間は,クリアされる。
  2. syncbase-value,wallclock-sync-value又はmedia-marker-valueで定義された任意の及びすべての解決された時間は,同期基底時間スペースから親単純時間スペースへ再変換されなければならない。
  3. 最初の現在の間隔は,計算される。

動作1は,また, 要素状態の再設定節でも記述される。この場合,要素は,現在の間隔の開始点で定義されるイベント時間をクリアしてはならないが,この動作は要素の再始動の際の度にも起こる。

動作2は,文書の残りへの親単純持続時間の現在の同期関係を反映するように単純に値を更新する。

第三の動作は,時間の一覧のある特別の考察を要求するが,まだ,比較的簡単である。要素が終了する場合(これは間隔の終了点節に記述される。)に適用することは,動作と同様ではないが,類似している。基本的な考え方は,要素のための最初の間隔を見つけて,それを現在の間隔にすることである。しかしながら,モデルは三つの先端的な事例を扱うことが望ましい。

  1. 要素は親単純開始時点の前(すなわち親単純時間での0の前)で開始することができ,したがって,(メディア要素におけるclipBegin効果のように)局所的時間軸への(要素の)一部分を開始するように見える。モデルは,親開始点より前の開始時点を扱わなければならない。
  2. 要素は,親単純開始点の前(0の前)の開始点及び終了点で定義される一つ以上の間隔をもつ。これらは,モデルからはみ出る。
  3. 要素は,親単純終了点の後の開始点で定義される一つ以上の間隔をもつ。これらはモデルからはみ出る。親単純終了点が未解決の場合,解決された開始時点はどれも,親時間終了点の前に起こることに注意すること。

したがって,要素における最初の受理可能な間隔の厳密な定義は,親単純開始点の後に終了し,親単純終了点の前で開始する最初の間隔とする。ここに,要素における最初の間隔を得る,ある擬似コードがある。それは,比較する機能をサポートする抽象型"Time"を仮定する。それは,解決された数値,特別な値INDEFINITE(終了点についてのみ使用される),及び特別な値UNRESOLVEDとなり得る。不定は,すべての解決された値"より大きい"と比較し,そして,UNRESOLVEDは,解決された値及びINDEFINITEの両方"より大きい"。コードは,前の節に記述されるように,開始属性及び終了属性に関連したインスタンス存在時間の一覧を用いる。

// Utility function that returns true if the end attribute specification
// includes conditions that describe event-values, repeat-values or accesskey-values.
boolean endHasEventConditions();
// Calculates the first acceptable interval for an element
// Returns:
//    Interval if there is such an interval
//    FAILURE if there is no such interval
Interval getFirstInterval()
{
Time beginAfter=-INFINITY;

while( TRUE ) // loop till return
{
   Set tempBegin = the first value in the begin list that is >= beginAfter.
   If there is no such value  // No interval
      return FAILURE;

   If tempBegin >= parentSimpleEnd // Can't begin after parent ends
      return FAILURE;

   If there was no end attribute specified
      // this calculates the active end with no end constraint
      tempEnd = calcActiveEnd( tempBegin );
   else
   {
      // We have a begin value - get an end
      Set tempEnd = the first value in the end list that is >= tempBegin.
      // Allow for non-0-duration interval that begins immediately
      // after a 0-duration interval.
      If tempEnd == tempBegin && tempEnd has already been used in 
        an interval calculated in this method call
      {
         set tempEnd to the next value in the end list that is > tempEnd
      }         
      If there is no such value
      {
         // Events leave the end open-ended. If there are other conditions
         // that have not yet generated instances, they must be unresolved.
         if endHasEventConditions()
            OR if the instance list is empty
            tempEnd = UNRESOLVED;
         // if all ends are before the begin, bad interval
         else
            return FAILURE;
      }
      // this calculates the active dur with an end constraint
      tempEnd = calcActiveEnd( tempBegin, tempEnd );
   }

   // We have an end - is it after the parent simple begin?
   if( tempEnd > 0 )
      return( Interval( tempBegin, tempEnd ) );

   else
      // Change beginAfter to find next interval, and loop
      beginAfter = tempEnd;

} // close while loop

} // close getFirstInterval

restart=whenNotActiveの場合とrestart=alwaysの場合を別々に考慮してしてもよい一方で,tempEnd後に開始する間隔を見つける必要があるので,実に忙しい仕事になることに注意すること。

モデルが要素のための最初の間隔を産出しない場合,それは始まらない。したがって,この点で行うことはこれ以上何もない。しかしながら,妥当な間隔がある場合,要素の新しい間隔があるとすべての時間従属する要素に通知しなければならない。これは,この要素から直接的に時間従属するすべての要素への通知とする。これは変更された時間の伝播とは異なる。

従属要素が"新しい間隔"の通知を得る場合,これは新しい間隔への参照を含む。新しい間隔は,一般に解決された開始時点をもつし,解決された終了時点をもっていてもよい。関連するインスタンス存在時間は,従属要素のための開始インスタンス存在時間の一覧又は終了インスタンス存在時間の一覧に加えられる。また,この新しいインスタンス存在時間は,同期基底間隔との時間従属関係を保持する。

間隔の開始を待つこと

この期間は,それが作成される場合に(又は前に),現在の間隔がただちに開始しない場合にのみ生じる。間隔が開始するのを待っている間,同期基底要素の現在の間隔時間の変更は,いづれもインスタンスの一覧に伝播され,現在の間隔への変更に帰着してもよい。

要素が開始するのを待っている間に,要素が"新しい間隔"通知を受け取る場合,解決された時間の適切な一覧に関連する時間(つまり同期基底間隔の開始時点又は終了時点)を加える

インスタンス存在時間が変わる場合,又は新しいインスタンス存在時間が一覧の一つに加えられる場合,要素は,現在の間隔の開始時点又は終了時点を再評価する(前の節に記述された同じアルゴリズムを使用して)。この再評価が変更された間隔を産出する場合,時間変更の通知は関連する従属する要素へ送られる。

この段階中に,間隔が始まらないように,(例えば,間隔の終了点を間隔の開始点の前とするように)開始時点及び終了時点を変更するという可能性がある。この場合,間隔は切り詰められなければならない。そしてすべての従属するインスタンス存在時間は,従属する要素のインスタンス一覧から,おのおの取除かれなければならない。インスタンス一覧のこれらの変更は,変更されたインスタンス存在時間が行うのと同じ方法で,従属する要素の現在の間隔の再評価を引き起こす。

正常な処理のある例外は,excl割込みセマンティクスに従って延期される要素のために作られる。延期された要素は,その開始時点へ伝播された変更を無視する。これは延期された要素及び開始時点の変化の伝播節で詳述される。

活性時間—間隔を再生すること

現在の間隔が活性な場合(つまり,一旦それが開始したならば,終了するまで),この期間が生じる。 この期間の間,間隔の終了時点は変わることができるが,開始時点は変わることができない。現在の間隔が開始した後の開始点の一覧中のインスタンス存在時間のどれかを変更する場合,変更は現在の間隔に影響しない。再始動を引き起こしうる開始点の一覧へ新しいインスタンス存在時間を追加する場合とは,これは異なる。

それが活性な間に,要素が"新しい間隔"の通知を受け取る場合,解決された時間の適切な一覧へ関連する時間(つまり同期基底間隔の開始時点又は終了時点)を加える。 新しい間隔が開始時点の一覧に時間を加える場合,再始動セマンティクスが考慮され,これは現在の間隔を終了してもよい。

現在の間隔のために定義された終了点の前に(つまり,より早く)ある開始点の一覧にインスタンス存在時間がある場合で,再始動が"always"と設定されている場合,現在の間隔は早く終了する。この方法で終わることは,現在の間隔の終了点のためのすべての時間従属する要素へ時間の変更通知を送ることもする。再始動セマンティクスについての相互作用も参照すること。

間隔の終了点

要素がrestart="never"を指定する場合,間隔の終了点では,これ以上動作は行われない。上位の時間コンテナが繰り返す又は再始動するまで,要素は"ポスト間隔"状態のままとする。

要素がrestartのために他の値を指定する場合で,現在の間隔を終了する場合,要素は解決された開始時点及び終了時点の一覧を再考しなければならない。ちょうど完了した終了時点で,または,その後で開始すると定義された別の文法に合った間隔がある場合,新しい間隔が作られる。新しい間隔が作られる場合,それは現在の間隔になり,及び新しい間隔の通知はすべての時間依存する要素へ送られる。

使われているアルゴリズムは,最も最近の終了点の後に開始する間隔を見つけることに私たちが興味をもっていることを除いて,手順1での使用しているものに非常に似ている。

// Calculates the next acceptable interval for an element
// Returns:
//    Interval if there is such an interval
//    FAILURE if there is no such interval
Interval getNextInterval()
{
// Note that at this point, the just ended interval is still the "current interval"
Time beginAfter=currentInterval.end;

   Set tempBegin = the first value in the begin list that is >= beginAfter.
   If there is no such value  // No interval
      return FAILURE;

   If tempBegin >= parentSimpleEnd // Can't begin after parent ends
      return FAILURE;

   If there was no end attribute specified
      // this calculates the active end with no end constraint
      tempEnd = calcActiveEnd( tempBegin );
   else
   {
      // We have a begin value - get an end
      Set tempEnd = the first value in the end list that is >= tempBegin.
      // Allow for non-0-duration interval that begins immediately
      // after a 0-duration interval.
      If tempEnd == currentInterval.end
      {
         set tempEnd to the next value in the end list that is > tempEnd
      }         
      If there is no such value
      {
         // Events leave the end open-ended. If there are other conditions
         // that have not yet generated instances, they must be unresolved.
         if endHasEventConditions()
            OR if the instance list is empty
            tempEnd = UNRESOLVED;
         // if all ends are before the begin, bad interval
         else
            return FAILURE;
      }
      // this calculates the active dur with an end constraint
      tempEnd = calcActiveEnd( tempBegin, tempEnd );
   }

   return( Interval( tempBegin, tempEnd ) );

} // close getNextInterval
活性終了後

この期間は間隔の終了点から次の間隔の開始点まで,又は親単純持続時間の終了点まで(どちらが先にくるとしても)伸びることができる。この期間の間,どんなfill(埋め)の振る舞いも要素に適用される。この間隔のための時間はもはや変わることができない。実装は,それらがもはや変更を生み出すことができないので時間従属の関係を断つことを最適化するために選んでもよい。

再始動セマンティクスについての相互作用

再始動セマンティクスが考慮されなければならない二つの事例がある。

  1. 現在の間隔が再生している場合,restart="always"であれば,開始点の一覧にあるインスタンス存在時間(Tと呼ぶ)はどれも,現在の間隔開始点の後(つまり,より遅い)であるが,現在の間隔終了点が現在の間隔を時間Tで終了させるよりは早い。これは,要素の再始動の最初の手順とする。現在の間隔が終了する場合,それは次に任意の次の間隔を作る。
  2. 新しいインスタンス存在時間が,インスタンス存在時間の開始点の一覧に加えられる場合,再始動規則が適用される。新しいインスタンスの通知が受け取られるために,新しいインスタンス存在時間は,同期基底値条件のうちの一つを指定する開始条件から生じてもよい。さらに,関連するイベントが起こるために,イベント値条件のうちの一つを指定する開始条件から生じてもよい。
    いずれの場合も,再始動設定及び現在の間隔の状態は,生じる振る舞いを制御する。新しいインスタンス存在時間は計算され(例えば,現在の同期基底間隔時間から,又はイベント時間から計算される。そして,どんなオフセットも含んでいる),開始点の一覧が追加される。
時間グラフにおける循環的従属性

SMIL 2.0で作成することができる二つの型のサイクル,閉じた(closed)サイクル及び開いた(open)サイクル又は伝播(propagating)サイクルがある。一つの集合の要素が相互に依存する時間条件をもっており,影響を受けた要素に関する他の条件が下記の例1及び例2にあるように,この依存関係に影響する又は変更することができない場合,閉じたサイクルが生じる。一つの集合の要素が相互に依存する時間条件をもっているが,含まれていた条件の少なくとも一つは二つ以上の解決された条件をもっている場合,開いたサイクル又は伝播サイクルが生じる。サイクル中の要素のうちのいずれか一つが,二つ以上の間隔を生成することができる場合,サイクルは伝播できる。例3において例証されるような幾つかの場合では,これが非常に有用である。

ある外部の機構が要素時間の値のうちの一つを解決しなければ,閉じたサイクルで定義された時間は未解決である(例えば,DOMメソッド呼出し又は要素の一つをターゲットとするハイパリンクの辿り)。これが起こる場合,解決された時間はすべての関連する時間値を解決して,サイクルを通じて伝播する。

閉じたサイクルはエラーとし,全文書を失敗させてもよい。幾つかの実装では,サイクル中の要素は,単に開始しなくてもよいし,又は正しく終了しなくてもよい。例1及び例2は最も許される振る舞いについて記述するが,実装は,閉じたサイクルの文書を単純に拒絶してもよい。

サイクルの検出

実装は,時間従属する要素の変更を伝播する処理の一部として,各々の要素上を訪れたフラグを使用して,時間グラフ中のサイクルを検出できる。変更された時間の通知が伝播されるとともに,各々の従属する要素は訪れたとしてマークされる。従属インスタンス存在時間への変更が,その要素のための現在の間隔への変更に帰着する場合,この変更はその従属する要素に順番に伝播する。この第2の連鎖した通知は,それを引き起こした最初の時間変更の通知の情況の中で起こる。効果は,変更がグラフの全体にわたって伝播するとともに構築するスタックのようであり,変更がすべて伝播した時点で,ほどける。従属性サイクルがある場合,伝播のパスは与えられた伝播の鎖の間に要素を二回辿る。これはグラフ辿りで用いられる共通の技術である。

時間グラフの初期化中に従属の鎖を構築する場合及び新しい間隔通知を伝播する場合,同様のアプローチを使用することができる。この趣旨における様々な亜種は個々の実装で規定する。

サイクルが検出された場合,変更の伝播は無視される。二回目の訪問を検知した要素は,二回目の変更の通知を無視するのでサイクルを壊す。

例1 次の例において,二つの画像は相互に依存する開始時点を定義する。これらを解決する方法はなく,したがって,画像は開始しない。

<img id="foo" begin="bar.begin" .../>
<img id="bar" begin="foo.begin" .../>

例2 次の例において,三つの画像は相互に依存する開始時点及び終了時点のより少ない明らかなサイクルを定義する。これらを解決する方法はない。画像"joe"は始まるが,終了しないし,また画像"foo"及び"bar"は開始しない。

<img id="foo" begin="joe.end" .../>
<img id="bar" begin="foo.begin" dur="3s" .../>
<img id="joe" begin="0" end="bar.end" .../>

例3 次の例において,二つの画像は相互に依存する開始時点を定義するが,最初は,前方へ伝播するサイクルを許可する多数の開始条件をもつ。2秒から5秒まで表示された第2の画像"bar"と共に,画像"foo"は,0秒から3秒まで最初に表示される。"foo"及び"bar"の各々の新しい現在の間隔が作られるとともに,それらは別の要素の開始一覧に新しいインスタンス存在時間を加える,したがって,サイクルは前方に行き続ける。この重なり合う"ping-pong"の振る舞いが作者にとって容易でないように,サイクルのこれらの型は排除されない。

<img id="foo" begin="0; bar.begin+2s" dur="3s" .../>
<img id="bar" begin="foo.begin+2s" dur="3s" .../>

例4 次の例において,後方に伝播する開いたサイクルが記述される。意図した振る舞いは,モデルにそぐわず支援されない。この例において,親時間コンテナが繰り返すごとに,しかしながら,ビデオ要素はそれらが前の親反復で行ったより1秒前に開始する。これは,親が繰り返す場合,同期基底値条件に関連した開始インスタンス存在時間がクリアされないからである。親時間コンテナの最後の反復によって,両方のビデオ要素が非常に早く始まるので,それらは,親が制約を開始することによって完全に遮断される。

<par dur="10s" repeatCount="11" >
   <video id="foo" begin="0; bar.begin-1s" dur="10s" .../>
   <video id="bar" begin="foo.begin-1s" dur="10s" .../>
</par>

タイミング及び現実世界の時計時間

この規定では,要素が局所的な"時間"をもっていると記述される。多くのオフセットが,特に,親時間コンテナの単純時間で計算される。しかしながら,単純持続時間は繰り返すことができ,要素は,多くの方法で開始し,再始動することができる。

間隔のタイミング

SMILタイミングモデルは,間隔のタイミングにおける最も一般的なモデルを仮定する。

これは,終点排他的タイミングとも呼ばれる。このモデルは,間隔が正確に働くために算術計算を作り,そして間隔のシーケンスのための理にかなったモデルを提供する。

背景にある理論的説明

現実世界において,秒の合計は分になり,及び分の合計は時になる。1分は60秒と記述されるが,デジタル時計は59秒をこえる時間を表示することはない。 "00:59"にさらにもう1秒加えても,"00:60"を産出することはないが,"01:00"又は1分0秒を産出する。分の間隔について記述する60秒の理論的な終了時点は,実際の間隔から除外される。

メディア及び時間軸の世界では,同様なことが適用される。"A"をビデオ,音声のクリップ又はアニメーションとする。"A"が10で開始し,15まで動作すると仮定する(任意の単位でよく,それは重要ではない)。 "B"が"A"に続くと定義される場合,それは15で開始する(15にある最小の間隔を加えたものではない)。実行時,実際にフレーム(又は音声における標本)をレンダリングし,時点"15"をレンダリングしなければならない場合,"A"のフレーム及び"B"のフレームの両方を示してはならないが,新しい要素"B"はむしろ示すことが望ましい。これは,音声に対して,あるいは時間軸上の任意の間隔に対して同様とする。モデルが終点排他的タイミングを使用しない場合,それは重なり合うフレームを描くか,又は音声の標本及び順番に並べられたアニメーションの重なり合いをもつ。

"A"から"B"の遷移も間隔タイミングモデルに従うことに注意すること。遷移は,"A"が実際には15に終了せず,両方の要素が実際には重なり合うことを要求する。しかしながら,"A"の持続時間は,遷移持続時間(例えば1秒)までに単純に拡張される。"A"のためのこの新しい持続時間もまた,終点排他的とし,(この新しい持続時間の終了点で,遷移は完結され,"B"だけがレンダリングされることが望ましい。)"A"はもはや必要ない。

時間モデルのための含意

時間モデルについては,繰返しの定義及び要素が"凍結した"の時に,適用又は表示される要素の状態といった,幾つかの結果が重要である。

要素の単純持続時間を繰り返す場合,算術計算は終点排他的モデルに従う。次の例を考慮すること。

<video dur="4s" repeatCount="4" .../>

時間が0で,単純持続時間もまた0のときに,ビデオの最初のフレームが提示される。これは,間隔の包括的開始点とする。単純持続時間は通常4秒まで進む。

これを使用して,4 (又は8,もしくは12)の時間は,単純持続時間における0の時間に対応付けする。単純持続時間の終了点は,単純持続時間から除外される(すなわち,実際に標本化されていない。)。

ほとんどの連続的なメディアについては,これは内部メディアモデルによりそろえられ,したがって,フレーム(又は音声標本)は除外されることはない。しかしながら,標本化された(アニメーションのような)時間軸メディアについては,その区別は重要で,凍結されている要素については特定のセマンティクスを要求する。

アニメーション機能における,このセマンティクスの効果は,[SMIL-ANIMATION]モジュールで詳述される。

イベント感度

SMIL 2.0タイミングモデルは,DOMイベント又は利用者インタフェースが生成したイベントのような出現予測不能なイベントに基づいた同期をサポートする。イベントを扱うためのモデルは,イベントの通知がタイミング要素に配送されるということとし,タイミング要素は,イベントに依存するどんな同期も解決する規則の一つの集合を使用する。

イベントへの要素の感度のセマンティクスは,次の規則の集合によって記述される。

  1. 時間コンテナが活性でない間(つまり,時間コンテナの開始点の前,又は時間コンテナ活性終了点の後に),子要素はイベントに応答しない(時間モデルに関して)。親時間コンテナが凍結である間,それは活発ではなく,よって,子どもは,開始イベント又は終了イベントの規定を扱わないことに注意すること。
    1. 要素及び先祖の時間コンテナが両方とも同じイベントで開始すると指定される場合,振る舞いは(DOMイベントのセマンティクスに基づいて)予測可能ではない。制作者はこれらの場合を制作するのは勧めない。
  2. 要素が活性でない(しかし,親時間コンテナは活性である)場合,イベントは開始点の規定を扱うだけとする。したがって,イベントが挙げられ,beginがイベントを指定する場合,要素は開始する。要素が活性でない間,イベントのendの規定はどれも無視される。
  3. イベントが挙げられた時に,要素は(すでに)活性で, beginがイベントを指定する場合, 振る舞いは再始動の値に依存する。
    1. restart="always"の場合,イベント時間に基づいた要素のために新しい開始時点は,解決される。endでの任意のイベントの規定は,このイベントインスタンスのために無視される。
    2. restart="never" 又は restart="whenNotActive"の場合,任意のイベントのbegin規定は,イベントのこのインスタンスのために無視される。endがイベントを指定する場合,終了値は,イベント時間に基づいて解決され,そして,活性持続時間は(活性持続時間の計算の規則に従って)再評価される。

単一のイベント発生が同じ要素上の開始時点及び終了時点の両方を解決するために使用されることはないということに気づくことは重要である。

規則 1a は,次のような場合の使用を勧めない。

<smil ...>
...
<par id="bad_example" begin="link9.activateEvent">
   <img begin="link9.activateEvent" .../>
</par>
...
</smil>

様々な代替アプローチを使用することができる。一つの考えられるアプローチは,次の例(画像における開始規則は,単純であるが,これは一般的な要点を明らかにする)のような先祖の開始点を基準として開始する子孫の要素を定義することとする。

<smil ...>
...
<par id="better_example" begin="link9.activateEvent">
   <img begin="better_example.begin" .../>
</par>
...
</smil>

イベント感度の規則は,切替え活性化のための再始動の使用節で記述されるような"切替え"活性化の使用事例で記述される再始動属性で使用される。

単一の要素上の開始時点及び終了時点の両方を解決するためには同じイベントインスタンスを使用することができないので,次のような使用は,ある人々には直感的でないように思える振る舞いをもつ。

<html ...>
...
<audio src="bounce.wav" begin="foo.click" 
        end="foo.click+3s" restart="whenNotActive"/>
...
</html>

この例は,"foo"がクリックされる場合,音声クリップを繰り返し始め,二回目に"foo"がクリックされた3秒後に音声クリップを止める。"foo"がクリックされる後に,3秒間の音声クリップが再生するというように,この例を解釈することは,正しくない。その振る舞いについては,次のマークアップが使用されることが望ましい。

<html ...>
...
<audio src="bounce.wav" begin="foo.click" dur="3s"
        restart="whenNotActive"/>
...
</html>
利用者のイベント感度及びタイミング

タイミングモデル及び利用者イベントモデルは大部分は直交する。タイミングモデルが利用者イベントを参照している間,これらのイベントがどのように生成されるかは定義されなく,特に,キーボード注目点,マウス封込め,"クリック可能性"及び関連する項目のセマンティクスを定義しない。タイミングが要素のプレゼンテーションに影響することができるので,それは利用者イベント処理のための規則に影響を与えてもよい。しかしながら,それは要素のプレゼンテーションが影響されるという拡張の効果だけとする。

多くの利用者イベントモデルが,特に"再生中" 及び"凍結"の要素を区別しない。fill (埋め)属性の効果はタイミングセマンティクスにだけ当てはまる。凍結中に,要素がまだ目に見える場合,利用者イベント処理のような他のセマンティクスに関して通常通り振る舞う。特に,a及びareaのような要素は,凍結している場合でも,利用者活性化(例えばクリック)に依然として感度が高い。

イベント活性化と比較したリンク活性化

リンク活性化はイベント活性化に関連づけられる。ハイパリンクを張ることは,時を違えずに文書を探すためにSMIL 1.0でのセマンティクスを定義した。対話型タイミング(begin="indefinite")と結合した場合,ハイパリンクを張ることは利用者対話型の内容の変形を産出する。

ハイパリンクがいつ要素を活性化するか,それらがいつ文書時間軸を探索するかの詳細は, ハイパリンク及びタイミングの節で示される。

局所的時間と大域的時間の間の変換

文書時間を要素局所的時間に変換するために,元の時間は,ルート時間コンテナから要素のための親時間コンテナに至るまで各々の時間コンテナの単純時間に変換される。この再帰的なアルゴリズムは,親単純時間から要素活性時間及び要素単純時間までの変換という単純なモデルを考慮に入れる。最初の手順として,要素活性時間を計算し,第二の手順として,要素単純時間を計算する。

下記の手順は,関連する時間が解決され,不定でないと仮定する。要求される時間が解決されないか又は不定の場合,変換は定義されず,実行することができない。

要素活性時間の計算

入力時間は親単純時間における,ある時間とする。これは蓄積同期化オフセット(蓄積同期化オフセット節に記述される)に合わせて調節し,要素活性持続時間を正規化する。

tpsを親単純時間での時間とする。Bを要素の開始時点とし,Oを親単純時間で測られる,要素の蓄積同期化オフセットとする。

任意の子要素における要素活性時間taは次のとおり。

ta = tps - B - O
要素単純時間の計算

要素単純時間は,メディア要素のための実行時同期を確立する又はアニメーション機能の入力値又は標本時間を計算するために使用される時間である。要素が時間コンテナである場合,これも時間コンテナのすべての子どもによって(時間コンテナ要素の単純時間として)見られる時間である。

要素活性時間taからの要素単純時間tsを計算するために,任意の繰返し振る舞いを明らかにする。

繰返し振る舞いがない場合
ts = ta

そうでない場合,要素単純時間は,最も最近の反復の開始時点から計算される。これは,tlast-repeatと呼ばれる。単純持続時間が終了し,tlast-repeatの値を再始動する場合,幾つかの(endsync論理又はメディアプレーヤーのような)他の機構は,注意しなければならない。要素がまだ繰り返していない場合,tlast-repeatに置き代わって0の値が使用される。

ts = ta - tlast-repeat

単純持続時間durが固定され,変わらない場合,上記のセマンティクスが特別な(理想的な)場合であることに注意すること。この場合(及びこの場合だけ),tlast-repeatは,単純持続時間durのために直接得ることができ,したがって,表現は次のようになる。

REMAINDER( t, d )(t - d*floor(t/d))として定義される場合において

ts = REMAINDER( ta, dur )

掛け時計値の変換

文書が開始する場合,現在の掛け時計時間は,twallclock-beginのように,注記され保存される。掛け時計値twcを要素活性単純持続時間tsに変換するために,活性単純時間twcを文書大域的時間traに最初に変換する(つまり,ルート時間コンテナにおける要素活性時間)。

tra = twc - twallclock-begin

掛け時計値が文書が開始した時間の前である場合,これは負の時間を産出してもよい。しかしながら,これは文法に合った値とする。

時間tra は,通常,必要とされる要素活性時間又は要素局所的時間に変換される。

イベント時間から要素時間への変換

イベント時間は,一般的にシステム時間又は文書が開始する時間を基準にしてタイムスタンプが押される。その変換は,イベント時間がルート時間コンテナのための活性時間に変換され,次に通常は要素時間に変換されるという点で掛け時計値に関するものとする。

要素時間から要素時間への変換

ある要素の時間空間からもう一つの時間空間に変換するために,最初の要素te1のための時間は最初に両方の要素を含んでいる最も近い先祖の時間コンテナ上の単純時間に変換されなければならない。要素時間から親時間に変換することは,上に記述された処理を逆に行う。繰り返すが,それは再起的であり,したがって,変換は,要素単純時間から要素活性時間へ,及び要素活性時間から親単純時間へ,一般的には記述される。

要素単純時間から要素活性時間に変換することは,最も最近の反復の開始時点tlast-repeatを要求する。要素が繰り返さないか,又はまだ繰り返していない場合,0の値がtlast-repeatに置き代わって使用される。

ta = ts + tlast-repeat

要素活性時間から親単純時間への変換は,関連する要素の開始点及び蓄積同期化オフセットを使用する。

tps = ta + B + O
時間変換及び時間グラフの標本化

純粋な変換が,活性持続時間の強制的な固定,及びfill(埋め)の効果を(時間が凍結の場合に)考慮しないことに注意すること。時間空間の間で使用される大域的時間から局所的時間への変換は,これらの問題を無視しなければならず,したがって,要素の単純持続時間の非常に前又は非常に後であるリンク先局所的時間空間での時間を産出してもよい。

実際に時間グラフを標本化する場合,変換の代替の形式が使用される。それが活性又は凍結の場合,時間コンテナは標本化されるだけであり,したがって,時間コンテナが開始する前に,時間は生成されない。時間コンテナにおいての大域的時間から局所的時間への変換が,時間コンテナが凍結されている時間を産出する場合,時間は活性終了点の値に強制的に固定される。

ハイパリンク及びタイミング

ハイパリンクを行うというセマンティクスは,予測可能な振る舞いを保証するために時間モデルの範囲内で特別に定義されなければならない。 SMIL 1.0によって定義されたような,初期のハイパリンクを行うというセマンティクスは,それらが未解決の時間を扱わず,それらが制作者時間の再始動制限を扱わないので,不十分とする。ここで,未解決のタイミング(対話型タイミングを含む)及び制作者時間の再始動制限を伴う要素を使用して,プレゼンテーションで使用されるSMIL 1.0セマンティクスを拡張する。

ハイパリンクは,リンク位置指定子の断片部分での要素のid属性の値を指定することにより,要素をターゲットとしてもよい。時間付けされた要素を参照するハイパリンクの辿りは次の規則に従って振る舞う。

  1. ターゲット要素が活性な場合は,要素のための現在の間隔の開始時点に戻って文書時間を探索すること。
  2. それ以外の場合で,ターゲット要素の開始時点が解決される(つまり,要素のために定義された少なくとも一つの間隔がある)場合,ターゲット要素のための最初の間隔の開始時点への文書時間(必要に応じて前方に又は後方に)を探索する。初期のハイパリンク,DOM又はイベント活性化の結果として開始時点が解決されてもよいことに注意すること。いったん,開始時点が解決される(及び要素が再設定されるまで,例えば,親が繰り返す場合)場合,ハイパリンク辿りは常に探索する。"再設定"の議論については,要素状態の再設定節を参照すること。解決される要素開始点について,全ての祖先要素の開始時点は,解決されなければならないことにも注意すること。
  3. その他(つまり,要素のための定義された間隔がない)場合,ターゲット要素の開始時点は,解決されなければならない。これは同様に祖先要素を探索すること及び/又は解決することを要求してもよい。これはターゲット要素から解決された開始時点をもっている最も近い祖先要素までを再帰することによって成される(繰り返す注意するが,要素のために解決された開始時点をもつためには,その祖先のすべてが解決された開始時点をもたなければならない)。そして,再帰は"巻きが解けた状態"であり,各々の祖先のために順番に(解決された祖先の下に),ターゲット要素と同様に,次の手順が実行される。
    1. 要素開始時点が解決される場合,ターゲット要素のために最初の間隔の開始時点に文書時間(必要に応じて,前方に又は後方に)を探索する。
    2. その他の(開始時点が解決されない)場合,その親時間コンテナ(現在の文書位置を与えられた)上の現在の時間で要素開始時点をちょうど解決する。要素の同期基底又はイベント基底は無視し,要素を解決するためにいかなるタイミング論理をも"逆伝播"しないが,begin="indefinite"が定義され,現在の親時間への開始時点を解決しているものとして扱う。これは間隔を作ることが望ましく,時間に従属する要素を伝播することが望ましい。

上記の規則では,次の付加的な制約も尊重されなければならない。

  1. ターゲットを探索するために使用される開始時点が親時間コンテナの始まりの前に生じる場合,時間を探索することは,親時間コンテナの開始時点に強制的に固定される。この制約は,すべての先祖の時間コンテナにおいて再帰的に適用される。
  2. ターゲットを探索するとして使用される開始時点が任意の先祖の時間コンテナの単純持続時間の終了の後に生じる場合,時間を探索することは,時間コンテナ単純終了時点に強制的に固定される。

最初の制約が,時間コンテナの子へのハイパリンクが時間コンテナの始まりより早く時間を探索しないことを意味することに注意すること。第二の制約は,親単純持続時間の終了点の後に開始する子へのハイパリンクは,親の終了点へ探索し,そこから進むことを含意する。これが驚くべき結果を生んでもよい一方,それは,プレゼンテーションにおける本質的にエラーであるもののための最も妥当な後退のセマンティクスとする。

プレゼンテーション時間を探索することが要求される場合,要素の解決された開始時点及びハイパリンク辿りの瞬間での現在の時間のプレゼンテーションに依存して,前方へ又は後方へのどちらかを探索することを必要としてもよい。

実質の効果は,あたかも探索時間に達することに妨げられず文書プレゼンテーション時間が進むように, 大部分が同一である状態に文書がなっているプレゼンテーション時間を前方に探索することになる。 プレゼンテーションがbeginEventendEvent又は タイミングに基づいたrepeatEvent及び自動ハイパリンクを使わずに制作される場合,探索の後の文書の状態は探索される時間に達することに妨げられず文書プレゼンテーション時間が進んだ場合と同一であることが望ましい。

ハイパリンク辿りのターゲットである要素のための解決された活性化時間が,過去に生じる場合,プレゼンテーション時間は後方に探索しなければならない。後方に探索することは,ハイパリンクを張る時間に任意の要素を活性に巻き戻す。

これらハイパリンクを張ることというセマンティクスは,全ての要素における解決された開始時点を保った記録を仮定する。この記録は,探索する正確なプレゼンテーション時間の決定のために使用することができる。例えば,

<html ...>
...
<par begin="0">
   <img id="A" begin="10s" .../>
   <img id="B" begin="A.begin+5s" .../>
   <img id="C" begin="B.click" .../>
   <img id="D" begin="C.begin+5s" .../>
   ...
   <a href="#D">Begin image D</a>
</par>
...
</html>

要素A及び Bの開始時点はそれぞれ10秒及び15秒と,ただちに解決される。文書が開始する場合,C及びDの開始点は解決されない。したがって,ハイパリンクの活性化はプレゼンテーション時間上で,又は要素C及びD上で効果がない。今,Bがプレゼンテーションに入ってから25秒でクリックされると仮定する。Bでのクリックは,Cの開始点を解決する。これは,次に30秒に開始するDを解決する。この点から,ハイパリンク辿りは,プレゼンテーション時間に30秒まで探索させる。

プレゼンテーションに入ってから60秒で,利用者がBを再びクリックする場合,Dは65秒のプレゼンテーション時間に再度解決されるようになる。Dが活性な間,ハイパリンクの後に続く活性化は65秒までプレゼンテーションを探索することに帰着する。Dがもはや活性でない場合に,ハイパリンクが活性化される場合,プレゼンテーションは,30秒で,Dの最も初期に解決された開始時点まで探索する。

seq及びexcl時間コンテナのためのbeginElement()及びハイパリンクの含意

シーケンス時間コンテナの子のために,子にターゲットとされたハイパリンクが辿られる場合,これは子の始まりへのシーケンスを探索する。

別の要素Bが終了する場合に,開始されると定義される要素Aをハイパリンクがターゲットとし(又はbeginElement()又はbeginElementAt()が要求され),及び他の要素Bが(例えば)イベントに基づく又は同期終了点をもつ場合,ハイパリンク又はメソッド呼出しは要素Bを終了しないことに注意すること。それは要素Aをただ活性化する。seq又は excl時間コンテナ内で二つの要素が兄弟である場合,親時間コンテナは,そのセマンティクスを実施し,動作している要素を停止させる(又は休止させる)。

ハイパリンクが excl時間コンテナの子をターゲットとする場合,リンクの活性化は最も初期に計算された開始点まで探索する。これは,休止/遅延スタックのセマンティクスが要素へのリンク付けがいつされたかを説明する必要がないことを意味する。代わりに,文書時間軸は,単に要素のために最初に解決された時間まで探索されるか,又は時間コンテナの開始及び解決された開始時点がない場合,ターゲット要素が単に開始するまで探索される。

時間変化の伝播

文書が示されるとともに,時間が変化してもよい幾つかの場合がある。特に要素時間がイベントを基準として定義される場合に,イベントが生じる場合,時間(つまり,要素開始点又は活性終了点)が解決される。他の場合は,再始動振る舞いとともに起こる。要素が再始動する場合,要素は新しい開始点及び活性終了時点を得る。ひとつの要素の開始点及び活性終了点は,他の要素の開始点又は活性終了点を基準にして定義することができるので,時間への任意の変更は文書の全体にわたって伝播されなければならない。

要素"foo"が開始点又は活性終了時点をもつ場合,同期基底要素(例えば,以下のような"bar")を指定する。

<img id="foo" begin="bar.end" .../>

"foo"は,"bar"の時間に従属する要素と言える。つまり,"foo"の開始時点は,"bar"の活性終了点に依存している。"bar"が終了する場合,"foo"が適切に開始するように,"bar"の活性終了時点への任意の変更は,"foo"の開始点に伝播されなければならない。変更が起こる場合,伝播された変更の"foo"に対する効果は,"foo"の状態に依存する。

延期された要素及び開始時点の変化の伝播

ある正常な処理の例外は,excl割込みセマンティクスによって延期される要素のために作られる。この例外はモデルを単純化するために作られる。いったん,要素が延期される場合,同期基底要素の時間従属する要素によって,要素開始条件に伝播される時間変更の通知の正常な取扱いを停止する。すなわち,時間従属する要素としての要素の振る舞いに関して,それがすでに開始しているものとして,要素は振る舞う。それが延期される間に,延期された要素が同期基底要素変更によりその開始時点を変更することができないように,この例外が作られる。事実,要素は,それが延期された時に開始していることが望ましい。したがって,それはもはや変更された時間通知を扱ってはならない。

再始動及び時間変化の伝播

幾つかの場合には,次の例でのように,再始動セマンティクスは時間の変更の正確な伝播を排除してもよい。

<html ...>
...
<par>
   <img id="img1" dur="10s" end="click" .../>
   <video begin="img1.end-3s" restart="whenNotActive" .../>
</par>
...
</html>

利用者が8秒に画像をクリックすれば,画像はその時点で終了するし,及び変更された終了時点は,ビデオに伝播する。しかしながら,ビデオは,7秒(10秒の計算された終了点の前の3秒)に開始し,再始動することができない。開始時点及び終了時点の一覧の評価の章での 再始動セマンティクスについての相互作用も参照すること。

時間コンテナの持続時間

時間コンテナの暗黙的持続時間は,コンテナの子どもという観点で定義される。その子どもは,時間コンテナ要素によって"再生される""メディア"と見なすことができる。そのセマンティクスは,定義された時間コンテナの変形の各々について指定され,それぞれの章par要素, seq要素,及び excl要素に記述される。

時間グラフ内での動的な時間の値と用語"計算された値"を混同してはいけないことに注意すること。次の例において,利用者が10秒の前にそれを活性化する(例えば,クリックする)場合,ビデオは短く切り抜かれる。利用者がクリックしない場合,parは10秒の単純持続時間をもっている。利用者が5秒にビデオを活性化する場合, parは8秒の単純持続時間をもっている。 10秒の実装によってビデオのための元の終了時点を計算することができてもよいが,endsyncセマンティクスは,利用者イベントを説明する最新の時間で評価されなければならない。

<smil ...>
...
<par endsync="last" >
   <audio dur="8s" .../>
   <video begin="0" dur="10s" end="click" .../>
</par>
...
</smil>

子の持続時間に関する時間コンテナ制約

時間コンテナは,子要素上のある上書きする制約を置く。これらの制約は,任意の子要素の活性持続時間を切って短くすることができる。

時間コンテナはすべて基礎的な上書きする制約を共有する。

子が親開始点の前で開始点を置く同期関係を定義してもよい一方,親が開始するまで,その子は活性ではない。これは,負の開始点の遅延節に記述されるセマンティクスと等価とする。

子が親単純持続時間の終了をこえて拡張する活性持続時間(同じ理由で単純持続時間)を定義する場合に,親単純持続時間が終了する場合,子の活性持続時間は,切って短くされる。子持続時間が自動的に短くされるか,又は親単純持続時間が子によって"継承される"ことを暗に意味することに注意すること。

例えば:

<par dur="10s" repeatDur="25s">
   <video dur="6s" repeatCount="2" .../>
   <text id="text1" begin="5s" dur="indefinite" .../>
   <audio begin="text1.end" .../>
</par>

ビデオは,6秒間,いったん再生するが,最後の2秒間は,切って短くされ,見えないので,4秒間だけとなる。テキストは,parの最後の5秒に表示され,不定の持続時間は,parの単純持続時間の終了点で切って短くされる。それが,前の要素(text要素)の活性持続時間の終了で開始すると定義されるので,音声は全く聞こえない。時間コンテナが終了する場合,テキスト要素は終了するので,時間コンテナが終了した後,音声は開始し,したがって,聞こえることはない。parが最初の時間を繰り返す場合,ちょうど最初の時間で行ったように,起こる。しかしながら,最後の繰返しは,部分的な繰返し(5秒間)であり,したがって,ビデオだけが表示されるが,繰返しは表示されないし,ビデオの最後の1秒は切り取られる。

加えて,excl時間コンテナは,ある子だけがただちに再生することを許可する。priorityClassセマンティクスに従うので,時間コンテナ中の別の要素が開始する場合,要素の活性持続時間は切って短くされてもよい。

min属性及び子の持続時間に関する時間コンテナの制約

min属性は,子の持続時間における時間コンテナ制約上の影響をもたない。たとえ,子の活性持続時間がmin値の制約を満たさなくても,この制約はまだ適用される。次の例において,画像は0秒から5秒の間で表示される。

<par dur="5s">
   <img id="img" min="7s" dur="4s" .../> 
</par> 

同期弧及びイベントに関する時間コンテナの制約

SMIL 1.0は,限定された兄弟へだけ参照を許可して,同期弧の定義(例えばbegin="id(image1)(begin)")上の制約を定義した。SMIL 2.0は明示的にこの制約を削除する。 SMIL 2.0はさらにイベントに基づいたタイミングを加える。同期弧及びイベントタイミングの両方は,上に記述されるような関連する要素の親時間コンテナによって制約される。

同期弧のための指定

同期弧が明示的に特定の要素を基準として定義されている間,この要素が兄弟要素でない場合,同期は親への同期関係(つまり,親の開始点からのオフセット)として解決される。

同期弧開始点を伴い定義された要素は,自動的に親又は任意の祖先時間コンテナを開始させないことに特に注意すること。

同期弧をもつ要素が繰り返す親(又は祖先)時間コンテナ内である場合のために,つまり,親又は祖先の各々の繰返しのために,親時間軸が再生している最初の時間になっているものとして,要素は再生される。親の各々の繰返しで,同期弧は親時間コンテナを基準とした開始時点を産出するために再計算される。要素状態の再設定節も参照すること。

イベントに基づくタイミングのための指定

イベントに基づくタイミングにおける指定はイベント感度節で議論される。

持続時間が0の要素の振る舞い

0の持続時間についてのメディア及びfill(埋め)期間が取得されない及び/又は簡潔にレンダリングされるかどうかは,実装依存とする。

10.3.4 明確化及び思いがけない結果

要素が開始する場合,任意のイベントに基づく開始時点は,クリアされる。次の例では,活性イベントが生じ,続いて1秒後のbarが終了する場合,fooがただちに開始し,及び要素は4秒後に再始動設定にかかわらず再始動しない。しかしながら,活性イベントが生じて,barが次の5秒間終了しない場合,要素はその時間の終了点で再始動する。

<audio id="foo" begin="bar.end; activateEvent+5s".../>

開始時点及び終了時点の一覧の評価の節を参照すること。

10.4 SMILタイミング及び同期のホスト言語への統合

この節は,言語設計者がSMILタイミング及び同期サポートをホスト言語に統合するために指定しなければならないことを記述する。 これは,基本定義,規定の制約,及び許可された/サポートされたイベントを含んでいる。

10.4.1 必須のホスト言語定義

ホスト言語設計者は,特定のホスト言語の文脈において,いくつかの基本概念を定義しなければならない。 これらはタイミング及びプレゼンテーションセマンティクスのための基底を提供する。

10.4.2 要素タイミングにおける必須の定義及び制約

イベントに基づくタイミングのイベントのサポート

10.4.3 エラー処理のセマンティクス

10.5 文書オブジェクトモデルのサポート

SMILタイミングを統合する任意のXMLに基づいた言語は,DOM[DOM2]に定義された基礎インターフェースを継承する。SMILタイミングは,タイミング機能及びDOMの相互作用を指定する。SMILタイミングは,さらに基礎DOMインターフェース上の制約を定義する。個別の文書は,SMILタイミングをサポートする特定のDOMインターフェースを定義する。しかし,この文書は,要素を開始及び終了する機構,そしてそれらを休止及び再開する機構があると推定する。

DOMメソッドによって初期化されるタイミングを記述するために開始点属性及び終了点属性の"indefinite"引数値を使用することができるが,推定されたインターフェースを利用するために構文サポートは要求されない。どんな場合も,この文書に記述されているように,DOMタイミングメソッドの動作は時間モデルの制約に従う。

SMILタイミング及び同期を統合する言語はDOM実装を要求する必要はない。

10.5.1 要素及び属性の操作,変異及び制約

時間グラフが動作している間に,時間付け要素のタイミング属性がDOMインターフェースを通して操作される場合,この振舞いはこの文書によって定義されない。同様に,時間グラフが起動している間に,時間付け要素が文書へ挿入されるか,又は文書から削除される場合,この振舞いは定義されない。この振舞い,及びこれと関係する任意の制約は,将来の文書の中で指定される。

10.5.2 イベント及びイベントモデル

SMILイベントタイミングは,ホスト言語がイベントをサポートし,及びイベントが宣言的な方法で束縛されることができると仮定する。DOMレベル2イベント([DOM2Events]は,これをサポートするための機能を記述する。

サポートされた特定のイベントは,ホスト言語によって定義される。イベントがホスト言語によって定義されない場合,イベントタイミングは効果的に省略される。

このモジュールは,ホスト言語が含んでよいイベントの集合を定義する。これらは次のものを含んでいる。

beginEvent
このイベントは要素局所時間軸が再生を開始する時に挙げられる。要素が活性持続時間を開始する(つまり,それが繰返す場合ではなくて,それが再起動する場合)ごとに,それは挙げられる。DOMメソッドについて開始された要素の場合と同様に,正常な(つまり,スケジュールされている又は双方向的な)時間軸の再生の両方でこのイベントは挙げてもよい。
endEvent
このイベントは要素の活性終了点で挙げられる。このイベントは各繰返しの単純終了点では挙げられないことに注意すること。DOMメソッドについて終了された要素の場合と同様に,正常な(つまり,スケジュールされている又は双方向的な)時間軸の再生の両方でこのイベントは挙げてもよい。
repeat
このイベントは要素局所時間軸が繰返す時に挙げられる。これは最初の反復の後に要素を繰返すごとに挙げられる。繰返しイベントには,繰返し反復が開始していることを示す整数が関連づけられている。この値は0に基づいた整数とするが,繰返しイベントは最初の反復では挙げられないので,観察された値は>= 1とする。

要素が現在再生している間に,それが再起動される場合,その要素は endEventを挙げ,次に要素が再起動する時にbeginEventを挙げる。

モデルを一貫して作動させ,一連のイベント時間の同期回転の効果を除去するために,beginEvent endEvent及びrepeatイベントのようなイベントに関連したタイムスタンプ値は,(必ずしも)イベントが挙げられた実際の時間ではなく,時間依存が現実にイベントの通知を受ける時間でもない。 イベントのタイムスタンプは,(指定されたタイミングモデルセマンティクスで,要素が定義された時に,正確に開始及び終了すると仮定して)イベントが挙げられることができる最も早い時間でよい。 0,正,負のオフセットのそれぞれについて開始条件及び終了条件に対応する三つの基礎ケースがある。

例1

これらの例は,互いに正確に同期して記録されているビデオ及び音声メディアを仮定している。

<par dur="indefinite">
  <img id="foo" end="click" .../>
  <video id="bar" begin="foo.endEvent" .../>
  <audio id="copy" begin="foo.end" .../>
</par>

利用者が画像"foo"をクリックした時に,これは終了する。終了点として定義された時間は,(プレゼンテーション機構を通してクリックイベントを伝播するために少し時間が掛かったとしても)実際のクリックイベントの時間とする。"foo"要素は,クリックイベントの時間と同じタイムスタンプでendEvent を挙げる。この例における振る舞いは,(システムを通してイベントを伝播するために少し時間が掛かるかもしれないので,"bar"は現実には,ほんの少し遅れて開始するかもしれないが)"bar"及び"copy"が正確に同期していることとする。

例2

<par dur="indefinite">
  <img id="foo" .../>
  <video id="bar" begin="foo.click+3s" .../>
  <audio id="copy" begin="bar.beginEvent" .../>
</par>

ビデオ"bar"は,利用者が"foo"をクリックした3秒後に開始する。"bar"のbeginEventは,"foo.click"イベントタイムスタンプに3秒を加算した時刻と等しいタイムスタンプを持つ。この振る舞いは,上記の例において,(イベントがシステムを通して伝播するために少し時間が掛かるので,"bar"は現実には,ほんの少し遅れて開始するかもしれないが)"bar"及び"copy"が正確に同期するということとする。

例3

<par dur="indefinite">
  <img id="foo" .../>
  <video id="bar" begin="foo.click-3s" .../>
  <audio id="copy" begin="bar.beginEvent" .../>
</par>

利用者が"foo"をクリックした時に,ビデオ"bar"は開始する。このビデオはクリックする3秒前で開始されると定義されるので,実際の内容に3秒のオフセットで再生を開始する。しかし,"bar"はイベントが挙げられる"現在"より早く開始できないので,"foo.click"イベントと同じ時間を持つbeginEventを挙げる。したがって,この場合は,音声要素"copy"は,ビデオに(との同期が)正確に3秒遅れる。

付加時間モデル制約がbeginEvent(又はendEvent)イベントタイムスタンプを要素に対して計算された開始時間(又は終了時間)と異なった値を持つことができる。例えば,この要素はその親時間コンテナの開始の前の開始時間を(負オフセット値又は親が開始する前の時間を解決する同期基底時間のいずれか)指定することができる。この場合,begin同期基底時間の時間依存は,計算された開始時間に関連があると定義される。しかし,要素は,実際には親時間コンテナの前に開始することができないように制約される。要素が開始する時,これはこの例では親時間コンテナが開始する時,beginEventが挙げられる。同様に,要素が実際に終了する時に,endEvent は挙げられる。それは,計算された終了時間(例えば,親単純持続時間の終了点後の終了時間)と異なってもよい。

同期基底時間及びイベント時間の区別は,ある状況で有用とする。次の例を考慮すること。

<par>
  <par begin="5s">
    <par begin="-5s">
      <img id="foo" begin="1s; 8s" dur="3s" .../>
    </par>
  </par>
  <img id="bar" begin="foo.begin" dur="1s" .../>
  <audio id="beep" begin="foo.beginEvent" dur="1s" .../>
</par>

"foo"要素は二つの間隔を定義する。最も内側のparが中央のparによって抑制され,実際に文書にはいってから5秒目まで開始することができないので,内部のparは第1の間隔を切り離すが除去しない。しかし,この内部のparは,0秒目の文書時間と同期される。同期基底値が計算された間隔時間を使用するため,"bar"は2度(1秒目及び8秒目で)再生される。しかし,切り離される間隔がイベントを挙げないので,"beep"音声は,"foo"が実際に表示される8秒目に一度だけ再生する。

制作者が恐らく上記の例を著さない間,同様の場合は容易に同期基底タイミングを使用して発生することができる。スケジュールされた開始時間から観察された開始時間を区別することが重要な場合,beginEvent又はendEventについてのイベント値タイミングは使用される。しかし,制作者は,イベント値タイミング上の制約に気づいているに違いない。これらはイベント感度の制約及び多くの実装がスケジュール及びスケジュールされた同期基底値タイミングについての要素と同様のイベント値タイミングについての要素におけるメディア準備を最適化しないという現実を含む。時間変化への伝播も参照すること。

10.5.3 予約されたDOMメソッド

SMILタイミングは,要素のタイミングを制御する四つのDOMメソッド(beginElement()beginElementAt(), endElement(),及び endElementAt())を持ち,タイミングモデルにおけるそれらの効果を記述する。これらのメソッドの十分な定義はDOM機能について記述する将来の文書に残されている。

四つのDOMメソッドは要素の活性持続時間を開始及び終了するために使用される。制作者は,次の構文を使用して,DOMに応答するためにタイミングを宣言することができる(しかし要求されない)。

<img begin="indefinite" end="indefinite" .../>

beginElement()beginElementAt(), endElement(),及びendElementAt() メソッドは,イベントに基づいた時間が従うのとほとんど同じ方法で時間コンテナ制約にすべて従う。親時間コンテナが活性でない時にこれらの方法のどれかが呼ばれる場合,そのメソッドは無効とする。

要素(beginElement()beginElementAt()endElement()又はendElementAt())を開始又は終了するためにDOMメソッド呼出しをする場合,各メソッド呼出しは,単一のインスタンス時間(適切なインスタンス時間リストの中に)を作成する。そして,開始時間及び終了時間のリストの評価に記述したように,これらの時間は時間リストのセマンティクスの一部として解釈される。これらの時間インスタンスはちょうどイベント時間に再設定され取り除かれる。

10.6 定義

10.6.1 一般概念

次の概念は,タイミングモデルを記述するために使用する基本的な用語とする。

同期関係(synchronization relationship)

同期関係は,二つ以上の要素の再生が同期されることを表すために,制作者によって定義される。

時間グラフ(time graph)

時間グラフは,SMILタイミングを用いた文書の中で要素の時間的関係を表現するために使用する。時間グラフのノードは,文書の中の要素を表現する。親ノードは子どもを"含む"ことができ,子どもは一つの親をもつ。兄弟は,一つの共通の親をもつ要素とする。 時間グラフのリンク又は"弧"は,グラフにおけるノード間の同期関係を表現する。

時間のための記述的用語(descriptive terms for times)

時間モデル記述は,タイミングの特定の概念を記述するために,形容詞の集合を使用する。

暗黙的な(implicit)
これは,要素メディアによって本来的に定義される時間(例えば,動画の長さに基づいた時間),又は時間モデルセマンティクスによって本来的に定義される時間(例えば,par時間コンテナの持続時間)を記述する。
明示的な(explicit)
これは,SMIL構文を使用して制作者によって指定された時間を記述する。
要望的な(desired)
これは,制作者が意図した時間とする。それは,一般的に,存在する場合には明示的な時間とし,明示的な時間が存在しない場合には暗黙的な時間とする。
実効的な(effective)
これは,文書再生において実際的に観察される時間とする。それは,タイミングモデルの制約,及びメディア配布といった現実世界に関連する問題の両方を反映する。
確定的な(definite)
時間は,それが有限であって不定ではない値に解決される場合に,確定的とする。  

局所的時間及び大域的時間(local time and global time)

大域的時間は,すべての要素の共通参照,すなわち文書ルート,を基準にして定義される。これは,文書時間として参照されることもある。

文書内では,与えられた要素が活性又は"再生中"の場合,その要素の内容は,活性持続時間の開始点から活性持続時間の終了点まで進行する。各々の単純な持続時間の開始点から終了点の進行も存在する。その区別は,要素が繰り返される場合に,最も明確になる。与えられた要素の単純持続時間又はその活性持続時間を用いて時間について語ることが便利なことが多い。一般的に,これは,局所的時間として参照され,時間が要素局所的な参照を基準にしていることを意味する

次の用語は,より精密に局所的時間を限定するために使用する。

活性時間(active time)
要素の活性持続時間を基準にして計られる時間。時間は,要素の活性開始点からのオフセットとして計られる。
単純時間(simple time)
要素の単純持続時間を基準にして計られる時間。時間は,単純持続時間の特定のインスタンスの開始からのオフセットとして計られる。
メディア時間(media time)
要素のメディア持続時間を基準にして計られる時間。時間は,clipBegin属性又はclipEnd属性によって修飾されるとおりの,メディアの開始からのオフセットとして計られる。

意味があるものとするために,これらの用語は,ある要素を基準にして記述される。例えば,タイミングセマンティクスを記述する場合,要素活性時間は,議論中の要素についての活性時間を参照し,親単純時間は,要素の親についての単純時間を参照する。  

大域的(文書)時間からある要素時間への変換,又はある要素時間から他の要素時間への変換は,局所的時間と大域的時間との間の変換に記述される。

時間を計る又は計算する場合,参照要素及び局所的時間の形式(活性時間,単純時間又はメディア時間)が指定される。計られた時間又は持続時間は,要素時間の進行によって定義される。例えば,参照要素が一時停止する場合,これは,その要素を基準にして計られた時間又は持続時間のセマンティクスに影響を与えてもよい。

線形メディア及び非線形メディア(linear and non-linear media)

線形メディアは,ランダムアクセス方式で再生できない連続メディアとする。例えば,ほとんどのインターネットストリーミングビデオ及び音声は,線形である。

非線形メディアは,ランダムアクセス方式で再生できる。例えば,アルゴリズム的なアニメーションは,非線形である。離散メディアは,非線形方式で振る舞ってもよい。

メディアの線形又は非線形な振る舞いは,メディア型で決まるものではなく,むしろレンダリング処理系又は再生エンジンによって決まり,メディアの配布機構に依存することが多い。

スケジュールされたタイミング(scheduled timing)

要素は,その要素の始動時間が他の要素の開始又は活性終了を基準にして与えられた場合,スケジュールされたタイミングをもつと考えられる。スケジュールされた要素は,時間グラフへと直接に挿入できる。

文書開始点(document begin)

文書がプレゼンテーションされる間隔の開始は,文書開始点として参照される。

文書終了点(document end)

文書がプレゼンテーションされる間隔の終了は,文書終了点として参照される。

文書持続時間(document duration)

終了と開始との間の差は,文書持続時間として参照される。

イベント及び対話型タイミング(events and interactive timing)

SMIL 2.0における開始時間及び活性終了時間は,文書の再生環境において挙げられるイベントを基準にして指定できる。これは,宣言的であって対話的なタイミングをサポートする。この意味での対話的とは,マウスのクリックなどの利用者イベント,mediaCompleteイベントのようなメディアプレ−ヤによって挙げられるイベント,及びpauseイベントといったプレゼンテーションエンジンそれ自体によって挙げられるイベントを含む。

同期基底(syncbase)

スケジュールされたタイミングにおいて,要素は,他の要素を基準にして時間付けされる。要素Aに対する同期基底は,要素Aが基準とする他の要素Bとする。より正確には,それは,その他の要素の開始点又は活性終了点とする。同期基底は,時間の中で単にスケジュールされた点ではなく,時間グラフ中の点とする。

同期弧(sync arc)

"同期弧(sync-arc)"は,"synchronization arc"の略とする。同期弧は,時間グラフにおけるノードを関係付け,ノード間のタイミング関係を定義するために使用する。同期弧は,要素をその同期基底に関係付ける。同期弧は,文脈によって暗黙的に定義されたり,識別子値(Id-value)又はイベント名によって明示的に定義されたり,又は特殊な構文を用いて論理的に定義されたりしてよい。

時計(clock)

時計は,同期のために使用できる特定の時間軸の参照とする。実世界の局所的(現地)時間を使う共通の例は,掛け時計タイミング(例えば,局所的時間の10:30を指定すること)として参照される。他の時計が,与えられたプレゼンテーション環境によってサポートされてもよい。

UTC: 協定世界時(Coordinated Universal Time)

"世界時(Universal Time)"(短縮形はUT)は,(正しくはないが)"グリニッチ標準時(Greenwich Mean Time)"(短縮形はGMT)として参照されることもある。これら二つの用語は,グリニッチの子午線(経度0度)上で保持される時間を大雑把に参照するために使われることも多く,(米国の)東部標準時間(Eastern Standard Time)の5時間前になる。UTで与えられる時間は,ほとんど常に24時表示時計によって与えられる。例えば,14:42は2:42 p.m.であって,21:17は9:17 p.m.である。

ハイパリンク付け及びタイミング(hyperlinking and timing)

時間付けられた文書への又はその内部でのハイパリンクは,現在のプレゼンテーション時間の探索を引き起こしてもよいし,(いかなるタイミングモデル規則にも違反しない場合には,)ある要素を活性化してもよい。

活性化(activation)

再生中,要素は,ハイパリンク経由又はイベントへの応答で,時間の進行によって自動的に活性化されてもよい。要素が活性化されるとき,その要素の再生が始まる。

離散メディア及び連続メディア(discrete and continuous media)

SMILは,"SMILメディアオブジェクトモジュール"の中で定義された要素構文を使用して,メディア宣言のためのサポートを含んでいる。これらの要素によって記述されるメディアは,離散的(discrete)又は連続的(continuous)のどちらかとして記述される。

離散的(discrete)
このメディアは,本来的タイミング又は本来的持続時間をもたない。これらのメディアは,"レンダリングされる(rendered)"メディア又は"合成的(synthetic)"メディアとして記述されることもある。これは,画像,テキスト,及びある種の幾何メディアを含む。
連続的(continuous)
このメディアは,本来的に時間に基づいており,一般的に,本来的タイミング及び持続時間の本来的概念をサポートする。(ただし,その持続時間は不定であってもよい。) これらのメディアは,"時間に基づく(time-based)"メディア又は"再生される(played)"メディアとして記述されることもある。これは,ほとんどの音声,動画,及び時間に基づくアニメーションを含む。

10.6.2 タイミングの概念

時間コンテナ(time container)

時間コンテナは,時間の中に要素を一緒にしてグループ化する。それは,グループ化された子要素の間に,共通の単純な同期関係を定義する。さらに,時間コンテナは,子どもが活性であってよい時間を制約する。各々がその子どもに関して特定のセマンティクス及び制約をもった幾つかのコンテナが定義される。

内容要素又はメディア要素(content/media elements)

SMILのタイミング及び同期のサポートは,内容要素又はメディア要素の集合を制御する。この内容は,テキスト内容又はHTML内容だけでなく,動画及び音声,画像及び幾何図形のようなものも含む。SMIL文書は,この内容を参照するために,SMILメディア要素を使用する。SMIL 2.0の機能を統合するXML及びHTMLの文書は,その統合化言語によって記述されるSMILのメディア要素及び/又はメディア内容(例えば,HTMLにおける段落など)を使用してもよい。

基本マーク付け(basic markup)

すべての要素,すなわち,内容,メディア及び時間コンテナは,開始時点,持続時間,及び繰返し再生の能力を記述するためにタイミングマーク付けをサポートする。開始時間を定義するには幾つかの方法がある。そのセマンティクスは,要素の時間コンテナに依存して幾分か変化する。

単純持続時間及び活性持続時間(simple and active durations)

時間モデルは,各々の要素の対して持続時間の二つの概念,単純持続時間及び活性持続時間,を定義する。これらの定義は,何かを繰返し再生する概念と密接に関係している。

単純持続時間(simple duration)
これは,基本的な開始点及び持続時間のマーク付けによって定義される持続時間とする。繰返し再生又はfill(生め)の効果は含めない。単純持続時間は,あるものが指定される場合,明示的な開始点及び持続時間によって定義される。明示的な時間が指定されていない場合,単純持続時間は,要素の暗黙的持続時間と定義される。
活性持続時間(active duration)
これは,要素が通常再生している間の持続時間とする。繰返し振る舞いが指定されず,終了点が指定されない場合,活性持続時間は,単純持続時間と同じとする。要素が繰返し再生するように設定されている場合,単純持続時間は,繰返しのマーク付けによって定義されるとおりに,活性持続時間について繰り返される。 
活性持続時間は,min属性の効果がより短い活性持続時間を延長する場合以外は,埋めの効果を含まない。min属性及びmax属性: 活性持続時間上の更なる制御を参照すること。

親時間コンテナの制約が,その子どもの持続時間を上書きしてもよい。特に,子要素は,親時間コンテナの単純終了点を越えて再生されてはならない。

これらの持続時間のための用語は,時間グラフの様相を更に区別するために,時間のための記述的用語を用いて変更できる。

厳密な同期及び厳密でない同期(hard and soft sync)

SMIL 1.0は,利用者エージェントの振る舞いを"厳密な同期"又は"厳密でない同期"のいずれかとして記述するために,同期の概念を導入した。厳密な同期を使用することによって,プレゼンテーション全体は,時間グラフの中の同期関係の厳密な記述に制約される。厳密でない同期によって,文書のより緩い(実装に依存した)動作が可能になる。

文書が再生されている間に,ネットワークの輻輳及び他の要因が,メディアの正常な再生を妨げることがある。SMIL 1.0の厳密な同期の環境では,これは,文書全体の振る舞いに影響を及ぼす。制作者に対してより大きな制御能力を提供するために,SMIL 2.0は,厳密な同期及び厳密でない同期のモデルを個々の要素に拡張する。このサポートは,どの要素及び時間コンテナが厳格に(strict)又は"厳密に(hard)"同期し続けなければならないか,及びどの要素及び時間コンテナが親時間コンテナに対して"厳密でない(soft)"又はズレがある(slip)同期関係をもつことができるかを,制作者が定義すること可能にする。

syncBehavior属性,syncTolerance属性及びsyncMaster属性: 実行時同期の制御も参照すること。

間隔の切詰め及び切捨て(pruning and cutting off an interval)

間隔の切詰め(pruning)及び切捨て(cutting off)の概念は,違うものであって,混同しないことが望ましい。

間隔が生成された後,より多くの情報が既知となり意味的な制約が適用されなければならないために,その間隔が後に切り詰められる(時間グラフから削除される又は取り除かれる)ことをしなければならない場合がある。間隔が切り詰められる場合,そのことは表示されず,それによって開始イベント又は終了イベントが生じることはなく,同期基底時間に依存するもののための関連するインスタンス時間は,それぞれのインスタンス時間リストから取り除かれなければならない。切り詰められた間隔は,指定されていなかったものとされる。

特に親時間コンテナ上の負の開始時点に関係して,その子の有効な間隔が,親の時間制約に関しては合法であったとしても,表示されない場合もある。これらの間隔は,切り捨てられたという。 

次に例を示す。

<par begin="-10s" dur="20s">
   <img id="slide1" src="slide1.jpg" dur="3s" />
   <img id="slide2" src="slide2.jpg" begin="slide1.end+3s" dur="10s" />
   <img id="note1" src="note1.jpg" begin="slide1.beginEvent" dur="20s" />
</par>

"slide1"画像は切り捨てられるが,切り詰められない。それが切り捨てられるのは,parは,親時間コンテナより前の10秒の時点では始動できなかったが,その代わりに,(parの)単純持続時間の10秒目で同期する親時間の0秒目に始動されることによる。"slide1"画像は,(始動されない)parに入って10秒経つ前に開始し終了するので,表示することができず,切り捨てられる切り捨てられた間隔は,表示されないし,開始イベントも終了イベントも発生させない。しかしその間隔は,それでも,同期基底時間に依存するもののために有効なインスタンス時間を生成する。このために,"slide2"は,表示されるだろう。(その間隔は,文書時間の-4秒から6秒までであって,0秒から6秒までの6秒間は表示される。) しかし,"note1"は表示されない。

10.7 付録A SMILタイミング及び同期モジュール

この節は,BasicInlineTimingモジュール及び完全なSMIL 2.0タイミングサポートを提供するために組合わせる他の18のモジュールを含む19のSMIL 2.0タイミングモジュールを定義する。 SMIL 2.0タイミングモジュールの分類は,要素,属性及び属性値を用いた特徴の構文表現の含有を基礎としている。 あるプロファイル内にあるモジュールを含めることにより,この規定のどこかで定義されている構文及び関連するセマンティクスの両方がそのプロファイルに加わる。

AccessKeyTiming
このモジュールは,利用者によって実際に指定されたアクセスキーを基に開始及び終了する要素を許可するbegin及びend属性の属性値の構文を定義する。
モジュール依存
なし。
取り込まれた機能
アクセスキー値をもつbegin及びend
モジュール固有の他の統合要件
制作者によって要求されるアクセスキーが,プレーヤによって利用できないかもしれない(例えば,使用される装置上に存在しないかもしれない,又は利用者エージェント自身によって使用されるかもしれない)。 それゆえに,利用者エージェントは,指定されたキーを利用できるようにするべきとするが,そのアクセスキーを異なる相互作用振る舞いに対応付けてもよい。 その利用者エージェントは,プレゼンテーションで使われることができるアクセスキーを識別する手段を提供しなければならない。 これは,例えば,アプリケーション直接相互作用又は利用者ガイド経由のように,実装ごとに異なる方法で達成してもよい。
BasicInlineTiming
このモジュールは,XML要素にタイミングを加えるための基本タイミングサポートを構成する属性を定義する。
モジュール依存
なし。
取り込まれた機能
すべての許可された値をもつdurbegin及びend属性の単純オフセット値,並びに"未定義"。
統合要求を指定する他のモジュール
なし
BasicTimeContainers
このモジュールは,基本時間コンテナ要素,時間コンテナ内での要素の表示振る舞いを記述する属性,及び時間コンテナの終了状態を定義する。
モジュール依存
なし。
取り込まれた機能
parseq要素,fillendsync属性
モジュール固有の他の統合要件
fill=transitionは,BasicTransitions又はInlineTransitionsがその言語プロファイルに含まれているときにだけサポートされる。 もし,FillDefaultがそのプロファイルに含まれていないならば,fill=defaultは,fill=autoと同様に解釈される。
EventTiming
このモジュールは,要素をイベントに応じて開始及び終了できるようにするbegin及びend属性のための属性値構文を定義する。
モジュール依存
なし。
取り込まれた機能
イベント値をもつ begin及びend
モジュール固有の他の統合要件
なし。 ホスト言語は,イベント値のオフセットをサポートしないことを指定してもよい。
ExclTimeContainers
このモジュールは,要素の相互排他な集合を定義する時間コンテナを含み, これらの要素の割込みセマンティクスを記述する。
モジュール依存
なし。
取り込まれた機能
exclpriorityClass要素,fillendsync属性。
モジュール固有の他の統合要件
fill=transitionは,BasicTransitions又はInlineTransitionsがその言語プロファイルに含まれているときに限りサポートされる。 もし,FillDefaultがそのプロファイルに含まれていないならば,fill=defaultは,fill=autoと同様に解釈される。
FillDefault
このモジュールは,要素のデフォルトの表示振る舞いを指定する構文を定義する。
モジュール依存
BasicTimeContainers,ExclTimeContainers又はTimeContainerAttributes。
取り込まれた機能
fillDefault属性。
モジュール固有の他の統合要件
fill=transitionは,BasicTransitions又はInlineTransitionsがその言語プロファイルに含まれているときに限りサポートされる。
MediaMarkerTiming
このモジュールは, 源内容に含まれているマーカを基に要素を開始及び終了できるようにするbegin及びend属性の属性値構文を定義する。
モジュール依存
なし。
取り込まれた機能
メディアマーカ値をもつbegin及びend
モジュール固有の他の統合要件
なし。
MinMaxTiming
このモジュールは,要素の活性持続時間の最小及び最大の範囲を設定できるようにする属性を定義する。
モジュール依存
なし
取り込まれた機能
max及びmin属性。
モジュール固有の他の統合要件
なし
MultiArcTiming
このモジュールは,begin及びend属性の属性値構文を,セミコロンで区切られた複数の値が指定できるように拡張する。 そのプロファイルに含まれる他のタイミングモジュールによって提供される単純begin及びend値型の任意の組合せが許される。
モジュール依存
AccessKeyTiming,BasicInlineTiming,EventTiming, MediaMarkerTiming,RepeatValueTiming,SyncbaseTiming,WallclockTimingの内の少なくとも一つ。
取り込まれた機能
そのプロファイルに含まれる個々のbegin及びend属性値の任意組合せであり,セミコロンで区切られている。
モジュール固有の他の統合要件
なし。
RepeatTiming
このモジュールは, 要素を指定された持続時間又は反復数だけ繰り返せるようにする属性を定義する。
モジュール依存
なし。
取り込まれた機能
repeatDurrepeatCount及びrepeat属性。
モジュール固有の他の統合要件
repeatは非推奨であり,SMILホスト言語適応プロファイルに限り取り込みを要求する。
RepeatValueTiming
このモジュールは,要素をある特定の反復値のイベントの繰返しに応じて開始及び終了できるようにするbegin及びend属性の属性値構文を定義する。
モジュール依存
なし。
取り込まれた機能
繰返し値をもつbegin及び,end
モジュール固有の他の統合要件
なし。
RestartDefault
このモジュールは,要素にデフォルトの再起動セマンティクスを指定するための構文を定義する。
モジュール依存
RestartTiming。
取り込まれた機能
restartDefault属性。
モジュール固有の他の統合要件
なし。
RestartTiming
このモジュールは,すでに以前に開始された要素の開始振る舞いを制御するための属性を定義する。
モジュール依存
なし。
取り込まれた機能
restart属性。
モジュール固有の他の統合要件
もし,このモジュールが含まれないなら,その統合プロファイルは,再起動を試み及びすでに以前に開始された要素のセマンティクスを定義しなければならない。
SyncBehavior
このモジュールは,要素の中の実行時同期振る舞いを指定するための構文を定義する。
モジュール依存
BasicTimeContainers,ExclTimeContainers又はTimeContainerAttributes。
取り込まれた機能
syncBehavior及びsyncTolerance属性。
モジュール固有の他の統合要件
なし。
SyncBehaviorDefault
このモジュールは,要素及びすべての子孫のためのデフォルトの同期振る舞いを指定するための構文を定義する。
モジュール依存
SyncBehavior
取り込まれた機能
syncBehaviorDefault及びsyncToleranceDefault属性。
モジュール固有の他の統合要件
なし。
SyncbaseTiming
このモジュールは,要素の開始及び終了が互いに関連できるようにするbegin及びend属性のための属性値構文を定義する。
モジュール依存
なし。
取り込まれた機能
同期基底値をもつbegin及び end
モジュール固有の他の統合要件
なし。
SyncMaster
このモジュールは,時間軸のための同期マスタを指定するための構文を定義する。
モジュール依存
SyncBehavior。
取り込まれた機能
syncMaster属性。
モジュール固有の他の統合要件
なし。
TimeContainerAttributes
このモジュールは,時間コンテナが任意のXML言語要素に対して時間制約サポートを加えるための属性を定義する。
モジュール依存
なし。
取り込まれた機能
timeContainertimeActionfill及びendsync属性。
モジュール固有の他の統合要件
そのプロファイルは,どの要素でこれらの属性が正等であるかを定義しなければならない。fill=transitionは,BasicTransitions又はInlineTransitionsがその言語プロファイルに含まれているときに限りサポートされる。 もし,FillDefaultが,そのプロファイルに含まれないならば,fill=defaultは,fill=autoと同様に解釈される。
WallclockTiming
このモジュールは,要素を実世界時間に関連して開始及び終了できるようにするbegin及びend属性の属性値構文を定義する。
モジュール依存
なし。
取り込まれた機能
掛け時計時間をもつbegin及びend
モジュール固有の他の統合要件
なし。

10.8 付録B 例

10.8.1 例1 並列時間コンテナ内の単純タイミング

この節は,特定の構築のセマンティクスと同様にSMIL構文の両方の使用法を例証する例の組を含んでいる。

備考:下記の例において,レイアウト及び個々の文書型に特有の他の問題と関係する付加構文は,単純性のために省略される。

parが開始する場合,デフォルトによってparの子どもは,開始する。例えば,次の通り。

<par>
   <img id="i1" dur="5s"  src="img.jpg" />
   <img id="i2" dur="10s" src="img2.jpg" />
   <img id="i3" begin="2s" dur="5s" src="img3.jpg" />
</par>

parが開始する場合,要素"i1"及び"i2"は両方ともただちに開始し,それはデフォルト開始時間とする。"i1"の活性持続時間は,parに入って5秒後に終了する。"i2"の活性持続時間は,parに入って10秒後に終了する。最後の要素"i3"は,明示的開始オフセットをもつので,2秒後から開始し,及び5秒の持続時間をもつ。これは,parが開始した後,7秒後に終了する活性持続時間を意味する。

10.8.2 例2 直列時間コンテナ内の単純タイミング

前の要素が終了する場合,デフォルトによってseqの各々の子は開始する。例えば,次の通り。

<seq>
   <img id="i1" begin="0s" dur="5s" src="img1.jpg" />
   <img id="i2" dur="10s" src="img2.jpg" />
   <img id="i3" begin="1s" dur="5s" src="img3.jpg" />
</seq>

要素"i1"は,seqのスタートで,ただちに開始し,5秒後に終了する。備考:0秒の開始時間の指定はデフォルト開始オフセットがいつも0秒であるので,省略可能とする。前の要素"i1"がseqに入って5秒後に終了した後の0秒目に,第2の要素"i2"はデフォルトによって開始する。要素"i2"は10秒後に終了する。それは,seqに入って15秒後とする。最後の要素"i3"は,1秒の開始オフセットの指定がある。したがって,それは前の要素"i2"終了の1秒後に開始し,5秒の持続時間をもつ。よって,seqに入って21秒後に終了する。

10.8.3 3 子タイミングの変形をもつexcl時間コンテナ

  1. 排他的な要素,子供はリンクに基づく活性化によって活性化される場合
    <par>
        <excl>
            <par id="p1"> 
            ...  
            </par>
            <par id="p2">
            ...  
            </par>
        </excl>
        <a href="p1"><img src="Button1.jpg"/></a>
        <a href="p2"><img src="Button2.jpg"/></a>
    </par>
    

    この例はジュークボックスのような振る舞いをモデル化する。最初の画像ハイパーリンクの活性化は,並列コンテナ"p1"のメディア項目を活性化する。第2の画像上のリンクがたどられる場合,"p2"は時間0からスタートする(そのため,まだ活性な場合,"p1"を非活性化させる)。

  2. 排他的な要素がイベントに基づく活性化によって結び付けられる場合
    <smil ...>
    ...
    <par>
        <excl>
            <par begin="btn1.activateEvent"> 
            ...  
            </par>
            <par begin="btn2.activateEvent">
            ...  
            </par>
        </excl>
        <img id="btn1" src=... />
        <img id="btn2" src=... />
    </par>
    ...
    <smil>
    

    イベントに基づく活性化を使用する同じジュークボックスの例

  3. スケジュールされたタイミングを使用する排他的要素の場合
    <excl>
        <ref id="a" begin="0s" ... />
        <ref id="b" begin="5s" ... />
    </excl>
    

    上記の例において,"b"の開始は"a"(aは5秒後にまだ活性であると仮定して)を非活性化する。子どもにおける明示持続時間の連続を使用して,これをモデル化することができるかもしれないことに注意すること。スケジュールされた構文が許可されている場合,これは共通の使用ケースのシナリオであるとは予想されない。

10.8.4 例4 離散メディアのデフォルト持続時間

離散メディアに参照される単純メディア要素(つまり時間コンテナでないメディア要素)については,暗黙持続時間が0秒であると定義される。この例のように,これは驚くべき結果を導くことができる。

<seq>
   <img src="img1.jpg" />
   <video src="vid2.mpg" />
   <video src="vid3.mpg" />
</seq>

連続の暗黙同期基点は連続の前の要素の効果的な活性終了点であると定義される。例において,画像の暗黙持続時間は単純持続時間及び活性持続時間を定義するために使用される。その結果,第2の要素のデフォルト開始点は,それを画像として同時に開始させる。したがって,画像は全く表示されない。制作者は,一般に任意の離散メディア要素のための明示持続時間を指定する。

10.8.5 例5 単純持続時間の終了ではなく活性持続時間の終了を指定するendの例

終了及び持続時間のセマンティクスの間には,重要な違いがある。dur属性は,開始時間と接続することで,要素のための単純持続時間を指定する。

要素がさらに繰り返し振る舞いを指定する場合,これは,繰り返される持続時間とする。属性終了は,他方では要素の活性持続時間を無視する。要素が指定される繰返し属性をもっていない場合,活性持続時間は,単純持続時間と同様とする。しかし,要素が繰返し振る舞いを指定する場合,終了は繰返しを無視するが,単純持続に影響しない。例えば,次の通り。

<html ...>
...
<seq repeatCount="10" end="stopBtn.click">
   <img src="img1.jpg" dur="2s" />
   <img src="img2.jpg" dur="2s" />
   <img src="img3.jpg" dur="2s" />
</seq>
...
</html>

連続は反復を繰り返しで,6秒間再生する。60秒が経過する前に,利用者が"stopBtn"要素をクリックしない場合,それは10回再生する。

10.8.6 例6 DOMによって呼び出されるタイミング

実装がこの文書に記述されるDOMメソッドをサポートする場合,スクリプト又は他のあるブラウザ拡張を使用して,要素に活性持続時間を開始させるか又は終了させることができる。この方法において双方向として要素を記述したいと制作者が期待している場合,次の構文は使用することができる。

<audio src="song1.au" begin="indefinite" />

要素は,beginElement()メソッドが呼ばれるまで開始されない。

10.9 付録C SMIL 1.0との相違点

SMIL 1.0は,要素タイミングを定義するためのマーク付け,及び並列及び連続時間コンテナを定義する要素を含んでいるタイミングのためのモデルを定義する。この版では,以下のことを含む様々な及び付加的な機能の構文を導入する。

完全な構文は,ここに記述される。SMIL 1.0から変更されていない構文も含む。

10.10 付録D イベントに基づくスケジュールされたタイミングの統一

SMIL 2.0の重要な動機は,宣言性の統合,相互作用を持つスケジューリングの決定性,スケジューリングの非決定性の要望による.このゴールは,共通で,矛盾のないモデル及び単純な構文を提供することとする.

"相互作用した"内容は,特に(activateEvent"又は"click"のような利用者入力イベントのような)ある対話型機構によって活性化されるプレゼンテーション(つまり,文書)のような,文書間のリンク付けをサポートしているハイパメディアを単に参照したりしないことに注意すること。

SMIL 2.0は,要素の相互作用するタイミングをサポートするため,SMIL1.0の拡張を記述する。これらの拡張は,制作者が,要素が("activateEvent"又は"click"のような利用者入力イベントのような)イベントに,ハイパリンクの活性化,又はDOMメソッドに応じて開始又は終了するのが望ましいと指定することを許す。

これを記述する構文は,event-value規定,並びにbegin及びend属性値の特別な引数値"indefinite"を使用する。イベント値は,ユーザインタフェース及び他のイベントを記述する。もし要素が,DOMメソッドを呼び出してただ開始(又は終了)するのが望ましいなら,begin及びend属性は,これを示すための特別な値"indefinite"を許可する。ハイパリンクが要素を開始する時,begin="indefinite"と設定することもできる。この要素は,ハイパリンクが作動された(たいてい利用者によってアンカーがクリックされた)時開始する。ハイパリンクを使用して,要素の活性終了点を制御することはできない。

10.10.1 背景

SMIL 2.0は,初期のマルチメディアランタイムからの発展を表現する。これらは,典型的に純粋で静的スケジューラ又は純粋なイベントに基づくシステムのどちらかとする。スケジューラモデルは,不連続及び連続メディアの両方を統合する線形のタイムラインを提供する。スケジューラモデルは,物語を話すことに役立つ傾向があるが,利用者の相互作用のサポートには制限がある。一方,イベントに基づくシステムは,イベント束縛グラフとしてマルチメディアをモデル化する。イベントに基づくシステムは,利用者相互作用の柔軟なサポートを提供するが,一般的に乏しいスケジューリング機能しか持っていない。そこで,より高い対話的及び実験的なマルチメディアのためには,どちらも適用するのが最善である。

SMIL 1.0モデルは,主としてスケジューリングモデルとするが,未知の持続時間を持つ連続メディアをサポートするための柔軟性は持っている。利用者の相互作用は,時間付けされたハイパリンク付けセマンティクスの形式でサポートされているが,相互作用によって個々の要素を活性化することはサポートしていない。

10.10.2 SMILにおける対話的であってイベントに基づく内容のモデル化

対話型内容をSMILタイミングに統合するために,非決定タイミング及びイベント活性化のようないくつかの新しい概念をサポートするように,SMIL 1.0スケジューラモデルを拡張した。

非決定タイミングでは,要素は不定のbegin又はend時間を持っている。この要素は,まだ文書の制約なしで存在しているが,begin又はend時間は,ある外部の活性化によって決定される。活性化はおそらく,イベント(利用者入力イベントによる),ハイパリンク(要素をターゲットにするハイパリンクを持つ),又はDOM(beginElement()又はbeginElementAt()メソッドの呼出しによる)に基づいてよい。スケジューリングの観点からは,時間はunresolvedとして記述される。

イベント活性化サポートは,要素に対してbegin又はend時間をもつイベントを関連づける手段を提供する。そのイベントが起きたとき(例えば,利用者が何かをクリックしたとき),関連付けられた時間は,決定的な時間として解決される。実際のbegin又はend時間は,イベントの挙げられた時間に,指定されたオフセットを加算又は減算して計算される。

計算された時間は,親時間コンテナに対する要素の同期を定義する。過去に起こったbegin又はend時間を計算することは可能とする。例えば,負のオフセット値が指定された又はイベントが挙げられた時間とSMIL実装が処理する時間との間に明らかな遅れがある時とする。 開始点のための負のオフセットの処理の節を参照すること。

イベントに基づくendは,その要素が開始されるまで活性化されないということに注意すること。要素が開始する前は,どの指定されたendイベントも無視される。

時間コンテナによって要素に課された制約は,イベント活性化モデルの重要な特徴とする。特に,時間コンテナ自身が不活性の時(例えば,それが開始する前又はそれが終了した後),その子どもによってイベントは処理されない。もし時間コンテナが凍結されたら,子どもによってイベントは処理されない。要素の時間コンテナが活性でない限りは,イベント活性化は起らない。 例えば,次の通りとする。

<smil ...>
...
<par begin="10s" dur="5s">
   <audio src="song1.au" begin="btn1.activateEvent" />
</par>
...
</smil>

利用者が10秒目より前又は15秒より後に"btn1"要素を活性化(例えば,クリックする)するならば,音声要素は再生されない。さらに,もし音声要素が開始されるが,parコンテナの指定された活性終了点を越えるかもしれない時,parコンテナの活性終了点は効率的に切り取られる。

イベント感度の議論も参照すること。