W3C勧告 1998年6月15日
著作権 © 1998 W3C (マサチューセッツ工科大学, フランス国立情報処理自動化研究所, 慶應義塾大学), すべての権利が留保されている。W3Cの 免責、 商標、 文書利用、 ソフトウェア使用許諾 規則が適用される。このサイトとの相互交信は、我々の公開プライバシー条項および会員プライバシー条項に準拠する。
この文書は、W3C (the World Wide Web Consortium) 同期マルチメディアワーキンググループによって用意されているものである。ワーキンググループには、以下の個人が含まれていた。
謝辞: ワーキンググループのメンバーに加えて、以下の方々がSMILの努力にご貢献くださった。Bert Bos (W3C), Dan Connolly (W3C), Patrick Deunhouwer (Philips), Martin Dürst (W3C), Al Gilman, Håkon Lie (W3C), Chris Lilley (W3C), Curtis Reynolds (RealNetworks), Michael Riesman, Curtis Reynolds (RealNetworks), Henning Schulzrinne (Columbia University), Koga Youichirou (W3C).
編集者:Philipp Hoschka, W3C (hoschka@w3.org)
この文書は、同期マルチメディア統合言語 (the Synchronized Multimedia Integration Language) のバージョン1(SMIL 1.0.「スマイル」と発音する)を規定する。SMILは、1セットの独立したマルチメディアオブジェクトを1つの同期マルチメディア表現に統合することを可能にする。SMILを使って、制作者は次のようなことができる。
この仕様書は以下のように構築されている。1 は、仕様書のアプローチを表わす。2 は、"smil" エレメントを定義する。3 は、SMIL文書のヘッダ部分の内容にできるエレメントを定義する。4 は、SMIL文書の本体部分の内容にできるエレメントを定義する。とりわけこのセクションは、SMILで使われる時間モデル (time model) を定義する。5 は、SMIL DTDを記述する。
この文書は、W3Cメンバーおよびその他の利害関係者によって検討され、ディレクターによってW3C勧告として公布されているものである。この文書は安定した文書であって、参照資料として用いたり、他の文書からの規範的参照として引用してもよい。勧告の作成におけるW3Cの役割は、仕様書に注意をひき、その広範な普及を促進することである。これはウェブの機能性と相互運用性を拡張することである。
この勧告についてのコメントは 公開メーリングリスト www-smil@w3.org に送られたい。
この仕様書の英語版が唯一の規範的バージョンである。しかしながら、他の言語での翻訳を探すなら http://www.w3.org/AudioVideo/SMIL/translations を見ること。
この仕様書内の既知のエラーの一覧は http://www.w3.org/AudioVideo/SMIL/errata で入手可能である。
SMIL文書はXML 1.0 文書 [XML10] である。読者はXML 1.0 で定義されている概念と用語に馴染んでいることを期待される。
この仕様書は、URLにおいて定義されているが潜在的にURNを使って表現できない特定の機能には依存していない。したがって、仕様書を一貫して、より一般性を有する用語であるURI [URI] が使われる。
SMIL文書の文法は 5.2 のDTDによって定義される。DTD表記を用いて定義できないアトリビュート値の文法は、そのアトリビュート値を内容とすることができるアトリビュートを使う最初のエレメントと一緒に定義される。そうしたアトリビュート値の文法は、XML 1.0 仕様書で定義されているEBNF (the Extended Backus-Naur Form) を用いて定義される。
エレメントの定義は以下のように構築されている。まず、エレメントのアトリビュートすべてをアルファベット順に定義する。アトリビュートは以下の方法で定義されている。アトリビュートがあるエレメントによって仕様書内で初めて使われるのであれば、アトリビュートの意味が定義される。アトリビュートが既に他のエレメントで使われていれば、仕様書はそのアトリビュートが使われる最初のエレメントの中にある定義を参照する。エレメントアトリビュートの定義に続けて、その文法がDTD表記を用いて定義できないアトリビュート値の定義が置かれる。エレメント定義の最後のセクションは、エレメントの内容を規定する。
エレメントのアトリビュート
"smil" エレメントは、以下のアトリビュートをもつことができる。
エレメントの内容
"smil" エレメントは、以下の子を内容とすることができる。
head
エレメント
"head" エレメントは、表現の時間的挙動と関係しない情報を内容とする。
エレメントのアトリビュート
"head" エレメントは、以下のアトリビュートをもつことができる。
エレメントの内容
"head" エレメントは、以下の子を内容とすることができる。
"head" エレメントは、任意の個数の "meta" エレメントと、"layout" エレメントか "switch" エレメントかのいずれか一方とを包含してよい。
"layout" エレメントは、観念的な(視覚的または聴覚的な)レンダリング面の上で文書本体の中にあるエレメントがどのように位置決定されるかを決定する。
文書が layout エレメントを1つも含んでいなければ、body エレメントの位置決定は実装依存である。
SMIL文書は、"switch" エレメント(4.3 に定義されている)内部に数個の layout エレメントを囲い込むことにより、複数の代替的なレイアウトを包含することができる。これを使って、たとえば、異なるレイアウト言語を用いて文書のレイアウトを記述することができる。
以下の例は、どのようにすればSMIL基本レイアウト言語(3.3 に定義されている)の代替としてCSS2を使うことができるかを示す。
<smil> <head> <switch> <layout type="text/css"> [region="r"] { top: 20px; left: 20px } </layout> <layout> <region id="r" top="20" left="20" /> </layout> </switch> </head> <body> <seq> <img region="r" src="http://www.w3.org/test" dur="10s" /> </seq> </body> </smil>
(この例では両方の layout 選択肢がともに同じレイアウトを帰結することに注意すること。)
エレメントのアトリビュート
エレメントの内容
layout エレメントの type アトリビュートが "text/smil-basic-layout" という値をもてば、このエレメントは以下のエレメントを内容とすることができる。
"layout" エレメントの type アトリビュートが他の値をもつならば、このエレメントはキャラクタデータを内容とする。
この節はSMILのための基本的なレイアウト言語を定義する。SMIL基本レイアウト言語は、CSS2で定義されている視覚的レンダリングモデルと一致し、CSS2仕様書により定義されているフォーマットプロパティを再利用し、新しく "fit" アトリビュートを導入する [CSS2]。読者はCSS2で定義されている概念および用語に馴染んでいることを期待される。
SMIL基本レイアウト言語が制御するのはメディアオブジェクトエレメント(4.2.3 に定義されている)だけである。他のSMILエレメントのためにSMIL基本レイアウト言語を使うことは不法である。
SMIL基本レイアウトの型識別子は "text/smil-basic-layout" である。
固定プロパティ値
以下のスタイルシートはSMIL基本レイアウトにおいて合法なCSS2プロパティ "display"、"position" の値を定義する。これらのプロパティ値は固定される。
a {display:block} anchor {display:block} animation {display: block; position: absolute} body {display: block} head {display: none} img {display: block; position: absolute} layout {display: none} meta {display: none} par {display: block} region {display: none} ref {display: block; position: absolute} root-layout {display: none} seq {display: block} smil {display: block} switch {display:block} text {display: block; position: absolute} textstream {display: block; position: absolute} video {display: block; position: absolute}
これらの定義の結果として、すべての絶対的位置指定エレメント(animation、img、ref、text、textstream、video)は、ルートエレメント (smil) のコンテントエッジによって定義される単一の包含ブロック内部に包含されることに注意すること。
デフォルト値
SMIL基本レイアウトは、レイアウト関連のアトリビュートすべてにデフォルト値を定義する。これらはCSS2における対応するプロパティの初期値と一致する。
制作者が文書中のメディアオブジェクトすべてにデフォルトのレイアウト値を選びたいならば、文書は次のような "text/smil-basic-layout" という型の空 layout エレメントを含まなければならない。
<layout type="text/smil-basic-layout"></layout>
region エレメントは、メディアオブジェクトエレメントの位置やサイズ、スケーリングを制御する。
以下の例の断片では text エレメントの位置がレンダリング窓の上側ボーダーから5ピクセルの距離に設定される。
<smil> <head> <layout> <region id="a" top="5" /> </layout> </head> <body> <text region="a" src="text.html" dur="10s" /> </body> </smil>
エレメントのアトリビュート
"region" エレメントは、以下のアトリビュートをもつことができる。
"fit" のデフォルト値は "hidden" である。
"skip-content" アトリビュートの値が "true" であり、上記のケースのうちの1つが当てはまるならば、エレメントの内容は無視される。値が "false" ならばエレメントの内容は処理される。
"skip-content" のデフォルト値は "true" である。
エレメントの内容
"region" は空エレメントである。
root-layout
エレメント
"root-layout" エレメントは、ルートエレメントの layout プロパティの値を決定し、これが順々に、たとえばSMIL表現がレンダリングされるウィンドウといったようなビューポートのサイズを決定する。
文書が2つ以上の "root-layout" エレメントを含んでいれば、これはエラーであり、文書は表示されるべきではない。
エレメントのアトリビュート
"root-layout" エレメントは、以下のアトリビュートをもつことができる。
エレメントの内容
"root-layout" は空エレメントである。
"meta" エレメントは、文書のプロパティ(例.制作者、廃棄日、キーワード一覧など)を定義し、それらのプロパティに値を割り当てるために使うことができる。各 "meta" エレメントは単一の property/value の対を指定する。
エレメントのアトリビュート
"meta" は以下のアトリビュートをもつことができる。
プロパティのリストはオープンエンドである。この仕様書は以下のプロパティを定義する。
エレメントの内容
"meta" は空エレメントである。
body
エレメント
"body" エレメントは、文書の時間的な挙動およびリンクの挙動に関連する情報を包含する。このエレメントは黙示的に "seq" エレメント(4.2.2 で定義されている。"body" エレメントの時間的意味の定義については 4.2.4 を見ること)を定義する。
エレメントのアトリビュート
"body" エレメントは以下のアトリビュートをもつことができる。
エレメントの内容
"body" エレメントは以下の子を内容とすることができる。
par エレメントの子は時間的に重なり合うことができる。par 内の子のテキスト出現順は、その表現のタイミングにとって重要性を有しない。
エレメントのアトリビュート
"par" エレメントは以下のアトリビュートをもつことができる。
結果のセットSが「スコープ内」のエレメントのセットである。
<par> <audio id="a" begin="6s" src="audio" /> </par>
<seq> <audio src="audio1" /> <audio begin="5s" src="audio2" /> </seq>
<par> <audio id="a" begin="6s" ... /> <img begin="id(a)(4s)" ... /> </par>
id-ref ::= "id(" id-value ")"
"endsync" のデフォルト値は "last" である。
子の間の同期についての注意
パラレルグループ内の子の間での同期の正確さは、実装依存である。再生遅延の場合の同期、すなわち、"far" エレメントがオーディオやビデオといった継続的メディア型を2つ以上含みその1つが遅延を受ける場合を例に取る。プレーヤは以下の同期挙動を示すことができる。
a) 固い同期:ビデオの遅延:オーディオが停止され、あるいはいくつかのビデオフレームが落とされる。正確な挙動は実装依存である。
b) 柔らかい同期
図 4.4: 異なる同期政策を使うプレーヤの再生スケジュールに関する遅延の効果
アトリビュート値
Clock-val ::= Full-clock-val | Partial-clock-val | Timecount-val Full-clock-val ::= Hours ":" Minutes ":" Seconds ("." Fraction)? Partial-clock-val ::= Minutes ":" Seconds ("." Fraction)? Timecount-val ::= Timecount ("." Fraction)? ("h" | "min" | "s" | "ms")? ; デフォルトは "s". Hours ::= 2DIGIT; 任意の正の数 Minutes ::= 2DIGIT; 00 ~ 59 Seconds ::= 2DIGIT; 00 ~ 59 Fraction ::= DIGIT+ Timecount ::= DIGIT+ 2DIGIT ::= DIGIT DIGIT DIGIT ::= [0-9]
以下は、合法的なクロック値の例である。
n個の数字をもつ端数は、以下の値を表現する。
x * 1/10**n
例:
00.5s = 5 * 1/10 秒 = 500 ミリ秒
00:00.005 = 5 * 1/1000 秒 = 5 ミリ秒
Element-event ::= "id(" Event-source ")(" Event ")" Event-source ::= Id-value Event ::= "begin" | Clock-val | "end"
begin="id(x)(begin)"
使用例:begin="id(x)(45s)"
begin="id(x)(end)"
エレメントの内容
par エレメントは以下の子を内容とすることができる。
これらのエレメントはすべて、par エレメントの直接の子として複数回現れてもよい。
"seq" エレメントの子は、時間的な連なりを形成する。
アトリビュート
seq エレメントは以下のアトリビュートをもつことができる。
エレメントの内容
seq エレメントは以下の子を内容とすることができる。
animation
, audio,img, video,text, textstream
エレメント
メディアオブジェクトエレメントは、メディアオブジェクトをSMIL表現に取り込むことを可能にする。メディアオブジェクトは参照によって(URIを用いて)取り込まれる。
メディアオブジェクトには2つの型がある。本来的な持続期間のあるメディアオブジェクト(例.ビデオ、オーディオ)(「持続的メディア (continuous media) とも呼ばれる)と、本来的持続期間のないメディアオブジェクト(例.テキスト、画像)(「離散的メディア (discrete media) とも呼ばれる)とである。
アンカーとリンクは、視覚的メディアオブジェクト、すなわち、観念的な視覚的レンダリング面にレンダリングされるメディアオブジェクトに添付できる。
メディアオブジェクトを再生するとき、プレーヤはメディアオブジェクトエレメントの名前からメディアオブジェクトの正確な型を引き出してはならない。その代わりに "type" アトリビュートに含まれている型情報や、サーバやOSによってコミュニケートされる型情報のような、型についての他のソースだけに頼らなければならない。
しかしながら、制作者は、メディアオブジェクトが分類されるグループがエレメント名に反映されていることを確認するべきである。これはSMIL文書の可読性を高めるためである。メディアオブジェクトのグループについて疑問があるときは、制作者は一般的な "ref" エレメントを使うべきである。
エレメントのアトリビュート
メディアオブジェクトエレメントは以下のアトリビュートをもつことができる。
Clip-time-value ::= Metric "=" ( Clock-val | Smpte-val ) Metric ::= Smpte-type | "npt" Smpte-type ::= "smpte" | "smpte-30-drop" | "smpte-25" Smpte-val ::= Hours ":" Minutes ":" Seconds [ ":" Frames [ "." Subframes ]] Hours ::= 2DIGIT Minutes ::= 2DIGIT Seconds ::= 2DIGIT Frames ::= 2DIGIT Subframes ::= 2DIGIT
このアトリビュートの値は、メートル法の指定子 (specifier) に、文法および意味がそのメートル法の指定子に依存する時間値を続けたものからなる。以下の書式が認められる。
時間値は、hours:minutes:seconds:frames.subframes という書式をもつ。frame 値が 0 であればこれを省略してもよい。Subframes は1フレームの100分の1で測定される。
例:
clip-begin="smpte=10:12:33:20"
clip-begin="npt=123.45s"
clip-begin="npt=12:05:35.3
"
エレメントの内容
メディアオブジェクトエレメントは以下のエレメントを包含できる。
以下の議論において、「エレメント」という用語は同期エレメントだけをいう。
エレメントごとに、黙示的 (implicit)、明示的 (explicit)、要求的 (desired) あるいは実効的 (effective) な、開始点 (begin)、持続時間 (duration)、あるいは終了点 (end) を定義する。
実効的な開始点、持続時間、終了点は、文書の読者が実際に視聴するものを指定する。
黙示的な値、明示的な値、要求的な値は、実効的な値を定義するために用いられる補助的な値である。
SMIL 1.0 で定義されているエレメントのこれらの値のそれぞれを計算するための規則は、次のセクションに記述されている。
begin = "明示的開始点の値
"
明示的開始点がそのエレメントの黙示的開始点よりも早ければ、エラーである。
end = "明示的終了点の値"
dur = "明示的持続時間の値"
このセクションは、4.2.4.1 の規則でカバーされない場合において、SMIL 1.0 の同期エレメントについて時間モデル値がどのように計算されるのかを定義する。
エレメントに合致する最初の記述が使われるべき記述である。
エレメントの要求的開始点の決定
エレメントの要求的開始点は、4.2.4.1 の規則 7 によって決定される。
エレメントの実効的開始点は、親エレメントの実行終了点がそれより早くない限り、エレメントの要求的開始点に等しい。親エレメントの実効的終了点の方が早い場合にはエレメントはまったく示されない。
switch エレメントは、制作者が、受け付け可能なエレメントをそこから1つだけ選択するべき代替的エレメントのセットを指定することを可能にする。エレメントがSMIL 1.0 エレメントであって、media-type がデコードでき、そのエレメントのテストアトリビュート(4.4 を見ること)のすべてが "true" と評価されれば、エレメントは受付可能である。
エレメントは以下のようにして選択される。プレーヤは switch エレメント内で発生する順番にエレメントを評価する。switch 内部の他のエレメントすべてを排斥して、受け付け可能な最初のエレメントが選択される。
そこで、制作者は、もっとも好ましいものから最も好ましくないものへと選択肢を並べるべきである。さらに、制作者は、<switch> 中の最後の項目として比較的フェイルセーフ的な選択肢をおいて、(明示的に求められなくとも)少なくとも switch 内部の1つの項目が選ばれるようにするべきである。実装は、すべてについてテストアトリビュートが失敗であるときに、<switch> 内のオブジェクトを勝手に取り出すべきではない。
http URI がコンテントネゴシエーションを提供し、一定の場合にはこれが "switch" エレメントを使うことの代替策となる場合があることに注意すること。
アトリビュート
switch エレメントは以下のアトリビュートをもつことができる。
エレメントの内容
"switch" エレメントが "body" エレメントの直接または間接の子として使われるのであれば、以下の子を包含できる。
これらのエレメントはすべて "switch" エレメントの子として複数回現れてもよい。
"switch" エレメントが "head" エレメント内部で使われるのであれば、以下の子を包含できる。
この仕様書は、任意の同期エレメントに付加できる、システムの能力や設定をテストするテストエレメントのリストを定義する。概念的には、これらのアトリビュートは2値テストを表現する。エレメントに指定されているテストアトリビュートの1つが "false" と評価すれば、このアトリビュートをもつエレメントは無視される。
以下のリスト内部では「ユーザ設定」という概念が目立つかもしれない。ユーザ設定はたいていは設定ダイアログボックスを使って再生エンジンによって設定されるが、この仕様書は、そうした設定がどのようにしてユーザからSMILプレーヤにコミュニケートされるかについて何らの制限も設けない。
SMIL 1.0 では、以下のテストアトリビュートが定義される。
ユーザ設定で示されている言語のうちの1つが、このパラメータに与えられている言語の1つと正確に一致するか、
プレフィックスに続く最初のタグキャラクタが "-" であるようなこのパラメータの値の中に与えられている言語のうちの1つのプリフィックスに正確に一致すれば "true" と評価する。
それ以外の場合には、"false" と評価する。
注意:このプレフィックスのマッチング規則の利用は、言語タグが言語に対して、ユーザがあるタグをもつ言語を理解すればそのタグをプリフィックスとするタグをもつ言語をすべて理解できるということがつねに真であるような方法で割り当てられていることを示すものではない。
これがそうである場合、プレフィックス規則は単にプレフィックスタグの使用を許可するだけである。
実装の注意:ユーザに利用可能な言語設定の選択をするとき、実装者は、ユーザが上述の言語マッチングの詳細に詳しくないという事実を考慮に入れて、適切なガイダンスを提供するべきである。例としては、ユーザが "en-gb" を選択しているとすれば、イギリス英語が利用可能でなければ、ユーザに何らかの種類の英語の文書を配信されることを想定してよい。ユーザ設定の設定のためのユーザインターフェイスは、最善のマッチングの挙動を得るために "en" を付加することをユーザに案内するべきである。
複数の聴衆に向けられた内容については、複数の言語をリストしてもよい。たとえば "Treaty of Waitangi" の上演はオリジナルのマオリ語版と英語版とが同時に表示されるのであるが、こういったものが必要となろう。
<audio src="foo.rm" system-language="mi, en"/>
しかしながら、system-language テストアトリビュートが置かれたオブジェクト内部に複数の言語があるというだけのことから、それが複数言語の聴衆向けであるということにはならない。"A First Lesson in Latin" といったような、明らかに英語を読み書きできる聴衆によって利用される、初心者向けの語学入門書が例になるだろう。この場合には、system-language テストアトリビュートは "en" だけを取り込むべきである。
オーサリング上の注意:"switch" の中にいくつかの代替的言語のオブジェクトが囲い込まれており、そのどれもマッチしないならば、このことがオーディオトラックなしでビデオが表示されるという状況を導く場合があることを制作者は理解するべきである。そこで、そうした switch の末尾には、どの場合にも受け入れ可能な "catch-all" 選択を取り込むことが推奨される。
screen-size-val ::= screen-height"X"screen-width
例
1) 異なるビットレートをもつ内容からの選択
一般的なシナリオでは、実装は、エレメントの "system-bitrate" パラメータを経由して選択ができるものと思ってよい。メディアプレーヤは、「選択」(switch 内部のエレメント)のそれぞれを1つずつ評価して、メディアプレーヤとメディアサーバとの間のリンクの既知の特性によって与えられる受け付け可能なビットレートを探す。
... <par> <text .../> <switch> <par system-bitrate="40000"> ... </par> <par system-bitrate="24000"> ... </par> <par system-bitrate="10000"> ........ </par> </switch> </par> ...
2) 異なるビットレートをもつオーディオリソースの間の選択
switch 内部のエレメントはエレメントの任意の組み合わせであってもよい。たとえば、単に代替オーディオトラックを指定することもできる。
... <switch> <audio src="joe-audio-better-quality" system-bitrate="16000" /> <audio src="joe-audio" system-bitrate="8000" /> </switch> ...
3) 異なる言語によるオーディオリソースの間の選択
以下の例では、オーディオリソースはフランス語と英語とで利用可能である。ユーザの設定している言語に基づき、プレーヤはこれらのオーディオリソースから1つを選ぶことができる。
... <switch> <audio src="joe-audio-french" system-language="fr"/> <audio src="joe-audio-english" system-language="en"/> </switch> ...
4) 異なるスクリーンのために書かれた内容の間の選択
以下の例では、表現は異なる解像度とビット深度をもつスクリーンのためにデザインされた代替的部分を包含している。スクリーンの特定の特性によって、プレーヤは選択肢のうちの1つを選ぶことができる。
... <par> <text .../> <switch> <par system-screen-size="1280X1024" system-screen-depth="16"> ........ </par> <par system-screen-size="640X480" system-screen-depth="32"> ... </par> <par system-screen-size="640X480" system-screen-depth="16"> ... </par> </switch> </par> ...
5) キャプショントラックをストックティッカーから区別する
以下の例では、キャプションはユーザがキャプションがオンにしたい場合にだけ表示される。
... <seq> <par> <audio src="audio.rm"/> <video src="video.rm"/> <textstream src="stockticker.rtx"/> <textstream src="closed-caps.rtx" system-captions="on"/> </par> </seq> ...
6) 吹き替え、キャプショントラックの言語の選択
以下の例では、フランス語の映画が、英語、ドイツ語、オランダ語の吹き替えおよびキャプショントラックつきで利用可能である。以下のSMILセグメントはこれを表示し、ユーザが設定している選択肢をオンにする。
... <par> <switch> <audio src="movie-aud-en.rm" system-language="en" system-overdub-or-caption="overdub"/> <audio src="movie-aud-de.rm" system-language="de" system-overdub-or-caption="overdub"/> <audio src="movie-aud-nl.rm" system-language="nl" system-overdub-or-caption="overdub"/> <!-- French for everyone else --> <audio src="movie-aud-fr.rm"/> </switch> <video src="movie-vid.rm"/> <switch> <textstream src="movie-caps-en.rtx" system-language="en" system-overdub-or-caption="caption"/> <textstream src="movie-caps-de.rtx" system-language="de" system-overdub-or-caption="caption"/> <textstream src="movie-caps-nl.rtx" system-language="nl" system-overdub-or-caption="caption"/> <!-- French captions for those that really want them --> <textstream src="movie-caps-fr.rtx" system-captions="on"/> </switch> </par> ...
リンクエレメントは、オブジェクト間のナビゲーション的リンクの記述を可能にする。
SMILはインラインのリンクエレメントだけを提供する。リンクは一方通行であり、片側だけを頭にしたリンクに限定される(すなわち、すべてのリンクはちょうど1つのリンク元と1つのリンク目的地とをもつ)。SMILのリンクはすべてユーザによって作動させられる。
埋め込み文書内のリンクの扱い
その統合の性質上、SMIL文書の表現が、他の(非SMIL)アプリケーションやプラグインを呼び出す場合がある。たとえば、埋めこまれたHTMLページを表示するためにSMILブラウザが、HTMLプラグインを使う場合がある。その逆に、HTMLページ内に埋めこまれたSMIL文書を表示するためにHTMLブラウザがSMILプラグインを使う場合もある。
そうした表現の中で、異なるレベルの文書によってリンクが定義されて矛盾衝突が生じる場合がある。この場合には、埋めこみオブジェクトによって定義されたリンクよりもリンクを包含している側の文書によって定義されたリンクが優先する。このことはブラウザとプラグインとの間のコミュニケーションを要求する場合があるので、SMILの実装はこの勧告に従わないことを選んでもよいことに注意すること。
埋めこみSMIL文書内でリンクが定義されていれば、リンクのトラバーサルは埋めこみSMIL文書にだけ影響を及ぼす。
リンクがSMIL文書内に埋めこまれた非SMIL文書内で定義されていれば、リンクのトラバーサルは埋めこみ文書の表現にのみ影響を及ぼすことができ、包含側のSMIL文書の表現には影響を及ぼせない。この制限は、将来のバージョンのSMILで解放される場合がある。
アドレッシング
SMILは、ネームフラグメント識別子と "#" 接続子エレメントとをサポートする。これは、SMILが現在HTMLで用いられているようなロケータ(たとえば、HTMLは "http://foo.com/some/path#anchor1" という形式のロケータを用いる)をサポートすることを意味している。
SMILフラグメントへのリンク
SMIL文書を指すロケータは、フラグメント部を含んでもよい(例.http://www.w3.org/test.smi#par1)。フラグメント部は、参照先のSMIL文書内部のエレメントの1つを識別する id 値である。フラグメント部を含んでいるリンクがフォローされれば、あたかもユーザがフラグメントによって示されているエレメントの実効的開始点まで目的文書によって表わされている表現を早送りしたかのように表現が始まることになる。
以下の特別なケースが起こりうる。
"a" エレメントの機能はHTML 4.0 [HTML40] における "a" エレメントの機能ととてもよく似ている。SMILは、リンクがフォローされたときにソースの時間的な挙動を制御する "show" というアトリビュートを付加する。同期目的のため、"a" エレメントは透過的である。すなわち、その子の同期に影響しないのである。"a" エレメントは href をもたなくてはならない。
アトリビュート
"a" エレメントは以下のアトリビュートをもつことができる。
"show" のデフォルト値は "replace" である。
エレメントの内容
"a" エレメントは、以下の子を包含できる。
例
例 1
リンクは、再生中の表現を置き換える新しい表現を開始する。
<a href="http://www.cwi.nl/somewhereelse.smi"> <video src="rtsp://foo.com/graph.imf" region="l_window"/> </a>
この例では、2行目はSMIL表現の合法的な任意のサブツリーへの参照によって置き換えることができる。
例 2
リンクは、再生中の表現に追加して新しい表現を開始する。
<a href="http://www.cwi.nl/somewhereelse.smi" show="new"> <video src="rtsp://foo.com/graph.imf" region="l_window"/> </a>
たとえば、これは、SMILプレーヤがHTMLブラウザを生み散らすことを可能にする。
例 3
リンクは、新しい表現を開始し、再生中の表現を停止する。
<a href="http://www.cwi.nl/somewhereelse.smi" show="pause"> <video src="rtsp://foo.com/graph.imf" region="l_window"/> </a>
例 4
以下の例は、ある表現Aの中のエレメントから他の表現Bの途中へのリンクを包含する。これは、表現Bを "next" という id をもつエレメントの実効的開始点から始めて再生することになる。
表現A : <a href="http://www.cwi.nl/presentationB#next"> <video src="rtsp://foo.com/graph.imf"/> </a> 表現B (http://www.cwi.nl/presentation): ... <seq> <video src="rtsp://foo.com/graph.imf"/> <par> <video src="rtsp://foo.com/timbl.rm" region="l_window"/> <video id="next" src="rtsp://foo.com/v1.rm" region="r_window"/> ^^^^^^^^^ <text src="rtsp://foo.com/caption1.html" region="l_2_title"/> <text src="rtsp://foo.com/caption2.rtx" region="r_2_title"/> </par> </seq> ...
anchor
エレメント
"a" エレメントの機能は、リンクを完全なメディアオブジェクトと関連づけることを可能にするだけである点で、制限されている。HTMLイメージマップは、リンクをオブジェクトの空間的なサブパートに関連づけることが便利であることを示している。anchor エレメントは、SMILについて同様の機能を実現する。
アトリビュート
anchor エレメントは以下のアトリビュートをもつことができる。
coords-value ::= left-x "," top-y "," right-x "," bottom-y
図 4.5: "coords" アトリビュートの意味
例
1) リンクを空間的サブパートに関連づける
以下の例では、ビデオクリップによって占められるスクリーン空間が、2つの部分に分割されている。これらの部分のそれぞれに異なるリンクが関連づけられている。
<video src="http://www.w3.org/CoolStuff"> <anchor href="http://www.w3.org/AudioVideo" coords="0%,0%,50%,50%"/> <anchor href="http://www.w3.org/Style" coords="50%,50%,100%,100%"/> </video>
2) リンクを時間的サブパートに関連づける
以下の例では、ビデオクリップの持続時間が2つのサブインターバルに分割されている。これらのサブインターバルのそれぞれに異なるリンクが関連づけられている。
<video src="http://www.w3.org/CoolStuff"> <anchor href="http://www.w3.org/AudioVideo" begin="0s" end="5s"/> <anchor href="http://www.w3.org/Style" begin="5s" end="10s"/> </video>
3) オブジェクトのサブパートへ飛ぶ
以下の例は、ある表現Aのエレメントから他の表現Bに包含されているビデオオブジェクトの中間へのリンクを包含している。これはビデオの5秒目から始まる表現Bを再生することになる。(すなわち、表現は、あたかもユーザが "CoolStuff" というビデオのなかの指されたフラグメントが開始する点へ表現全体を早送りしたかのように開始する。)
表現A: <a href="http://www.cwi.nl/mm/presentationB#tim"> <video id="graph" src="rtsp://foo.com/graph.imf" region="l_window"/> </a> 表現B: <video src="http://www.w3.org/CoolStuff"> <anchor id="joe" begin="0s" end="5s"/> <anchor id="tim" begin="5s" end="10s"/> </video>
4) リンクの異なる使用法を組み合わせる
以下の例は、結び付けられたリンクの異なる使用法がどのようにして組み合わせて使うことができるかを示している。
表現A: <a href="http://www.cwi.nl/mm/presentationB#tim"> <video id="graph" src="rtsp://foo.com/graph.imf" region="l_window"/> </a> 表現B: <video src="http://www.w3.org/CoolStuff"> <anchor id="joe" begin="0s" end="5s" coords="0%,0%,50%,50%" href="http://www.w3.org/"/> <anchor id="tim" begin="5s" end="10s" coords="0%,0%,50%,50%" href="http://www.w3.org/Tim"/> </video>
SMIL 1.0 文書は、オプション的に文書型宣言を含んでよい。これは文書が利用する文書型定義(DTD)を指名するものである。SMILについては文書型宣言は以下のように見えるべきである。(二重引用符は単引用符で置き換えることができる)。
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 1.0//EN"
"http://www.w3.org/TR/REC-smil/SMIL10.dtd">
XML 1.0 仕様書は、<!DOCTYPE> エレメントを使って、たとえば新しいエンティティ定義セットを付加するなどのようにDTDを拡張する方法を提供している。これをサポートしないSMILプレーヤも多いであろうから、制作者はSMILについてこの機能を用いてはならない。
以下はSMILにおいては違法である。
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 1.0//EN"
"http://www.w3.org/TR/REC-smil/SMIL10.dtd" [
<!ENTITY % AcmeCorpSymbols PUBLIC
"-//Acme Corp//ENTITIES Corporate Symbols//EN"
"http://www.acme.com/corp_symbols.xml"
>
%AcmeCorpSymbols;
]>
<!-- これはSMIL 1.0 のためのXML文書型定義(DTD)である。 日付: 1998/06/15 08:56:30 作成者: Jacco van Ossenbruggen <jrvosse@cwi.nl> Sjoerd Mullender <sjoerd@cwi.nl> SMILについての踏み込んだ情報は http://www.w3.org/AudioVideo/ で入手可能である。 --> <!-- 一般的に使われるエンティティ --> <!ENTITY % id-attr "id ID #IMPLIED"> <!ENTITY % title-attr "title CDATA #IMPLIED"> <!ENTITY % skip-attr "skip-content (true|false) 'true'"> <!ENTITY % desc-attr " %title-attr; abstract CDATA #IMPLIED author CDATA #IMPLIED copyright CDATA #IMPLIED "> <!--=================== SMIL文書 =====================================--> <!-- ルートエレメント SMIL は、その他すべてのエレメントを内包する。 --> <!ELEMENT smil (head?,body?)> <!ATTLIST smil %id-attr; > <!--=================== 文書ヘッダ ========================================--> <!ENTITY % layout-section "layout|switch"> <!ENTITY % head-element "(meta*,((%layout-section;), meta*))?"> <!ELEMENT head %head-element;> <!ATTLIST head %id-attr;> <!--=================== layout エレメント =================================--> <!-- layout は、SMIL基本レイアウトによって定義された region エレメント および root-layout エレメント、または外部レイアウト機構によって定義さ れたその他のエレメントを内包する。 --> <!ELEMENT layout ANY> <!ATTLIST layout %id-attr; type CDATA "text/smil-basic-layout" > <!--=================== region エレメント =================================--> <!ENTITY % viewport-attrs " height CDATA #IMPLIED width CDATA #IMPLIED background-color CDATA #IMPLIED "> <!ELEMENT region EMPTY> <!ATTLIST region %id-attr; %title-attr; %viewport-attrs; left CDATA "0" top CDATA "0" z-index CDATA "0" fit (hidden|fill|meet|scroll|slice) "hidden" %skip-attr; > <!--=================== root-layout エレメント ============================--> <!ELEMENT root-layout EMPTY> <!ATTLIST root-layout %id-attr; %title-attr; %viewport-attrs; %skip-attr; > <!--=================== meta エレメント ===================================--> <!ELEMENT meta EMPTY> <!ATTLIST meta name NMTOKEN #REQUIRED content CDATA #REQUIRED %skip-attr; > <!--=================== 文書本体 ==========================================--> <!ENTITY % media-object "audio|video|text|img|animation|textstream|ref"> <!ENTITY % schedule "par|seq|(%media-object;)"> <!ENTITY % inline-link "a"> <!ENTITY % assoc-link "anchor"> <!ENTITY % link "%inline-link;"> <!ENTITY % container-content "(%schedule;)|switch|(%link;)"> <!ENTITY % body-content "(%container-content;)"> <!ELEMENT body (%body-content;)*> <!ATTLIST body %id-attr;> <!--=================== 同期アトリビュート ================================--> <!ENTITY % sync-attributes " begin CDATA #IMPLIED end CDATA #IMPLIED "> <!--=================== switch パラメータアトリビュート ===================--> <!ENTITY % system-attribute " system-bitrate CDATA #IMPLIED system-language CDATA #IMPLIED system-required NMTOKEN #IMPLIED system-screen-size CDATA #IMPLIED system-screen-depth CDATA #IMPLIED system-captions (on|off) #IMPLIED system-overdub-or-caption (caption|overdub) #IMPLIED "> <!--=================== fill アトリビュート ===============================--> <!ENTITY % fill-attribute " fill (remove|freeze) 'remove' "> <!--=================== パラレルエレメント ================================--> <!ENTITY % par-content "%container-content;"> <!ELEMENT par (%par-content;)*> <!ATTLIST par %id-attr; %desc-attr; endsync CDATA "last" dur CDATA #IMPLIED repeat CDATA "1" region IDREF #IMPLIED %sync-attributes; %system-attribute; > <!--=================== シーケンシャルエレメント ==========================--> <!ENTITY % seq-content "%container-content;"> <!ELEMENT seq (%seq-content;)*> <!ATTLIST seq %id-attr; %desc-attr; dur CDATA #IMPLIED repeat CDATA "1" region IDREF #IMPLIED %sync-attributes; %system-attribute; > <!--=================== スイッチエレメント ================================--> <!-- head の中では、switch が内包してよいのはレイアウトエレメントだけで あり、body の中ではコンテナエレメントだけである。しかしながら、この制 約はDTDでは表現できないので、我々は両方とも許容する。 --> <!ENTITY % switch-content "layout|(%container-content;)"> <!ELEMENT switch (%switch-content;)*> <!ATTLIST switch %id-attr; %title-attr; > <!--=================== メディアオブジェクトエレメント ====================--> <!-- SMILは構造を定義するだけである。実際のメディアデータは、メディ アオブジェクトの src アトリビュートによって参照される。 --> <!-- さらに、SMIL仕様書で定義されているように、それらは以下のアトリ ビュートを有する。 --> <!ENTITY % mo-attributes " %id-attr; %desc-attr; region IDREF #IMPLIED alt CDATA #IMPLIED longdesc CDATA #IMPLIED src CDATA #IMPLIED type CDATA #IMPLIED dur CDATA #IMPLIED repeat CDATA '1' %fill-attribute; %sync-attributes; %system-attribute; "> <!-- ほとんどの情報はアトリビュートの中にあり、メディアオブジェクトは空であ るか結び付けられたリンクエレメントを含んでいるかである。 --> <!ENTITY % mo-content "(%assoc-link;)*"> <!ENTITY % clip-attrs " clip-begin CDATA #IMPLIED clip-end CDATA #IMPLIED "> <!ELEMENT ref %mo-content;> <!ELEMENT audio %mo-content;> <!ELEMENT img %mo-content;> <!ELEMENT video %mo-content;> <!ELEMENT text %mo-content;> <!ELEMENT textstream %mo-content;> <!ELEMENT animation %mo-content;> <!ATTLIST ref %mo-attributes; %clip-attrs;> <!ATTLIST audio %mo-attributes; %clip-attrs;> <!ATTLIST video %mo-attributes; %clip-attrs;> <!ATTLIST animation %mo-attributes; %clip-attrs;> <!ATTLIST textstream %mo-attributes; %clip-attrs;> <!ATTLIST text %mo-attributes;> <!ATTLIST img %mo-attributes;> <!--=================== リンクエレメント ==================================--> <!ENTITY % smil-link-attributes " %id-attr; %title-attr; href CDATA #REQUIRED show (replace|new|pause) 'replace' "> <!--=================== インラインリンクエレメント ========================--> <!ELEMENT a (%schedule;|switch)*> <!ATTLIST a %smil-link-attributes; > <!--=================== 結び付けられたリンクエレメント ====================--> <!ELEMENT anchor EMPTY> <!ATTLIST anchor %skip-attr; %smil-link-attributes; %sync-attributes; coords CDATA #IMPLIED >
(非規範的)
将来、SMIL 1.0 は、他のW3C勧告によって、あるいは私的な拡張によって拡張されてもよい。
これらの拡張については、以下の規則に従うことが推奨される。
SMIL 1.0 プレーヤは、これら2つの規則に従う拡張を含む文書を扱うように準備されることが推奨される。
いったんそうしたXMLネームスペース機構がW3C勧告となれば、拡張はこれを使って扱われるべきである。セクションの残りでは、W3Cノート [NAMESPACE} において定義されているXMLネームスペースの文法および意味は、デモンストレーション目的でのみ用いられるべきである。
以下のケースが発生しうる。
<?xml:namespace ns="http://www.acme.com/new-smil" prefix="new" ?> <?xml:namespace ns="http://www.w3.org/TR/PR-smil" ?> <smil> <body> <par> <new:a> ... </new:a> <mytags:a ... /> ... </mytags:a>
<b> ... </b> </par> </body> </smil>
SMILエレメントやアトリビュートを他のXMLベースの文書に取り込むためにXMLネームスペース機構が使われるときは、以下のネームスペース識別子を使うことが推奨される。http://www.w3.org/TR/REC-smil