Synchronized Multimedia Integration Language (SMIL) 1.0

本文檔是W3C建議SMIL 1.0(1998年6月15日)的中文版,其中可能有錯誤和不妥之處。

英文版是唯一的正式版,位于:

http://www.w3.org/TR/1998/REC-smil-19980615

本文檔位于:

http://chinese-school.netfirms.com/SMIL10-TC.html

譯者:
  • 裘強 (qqiu@yeah.net)
  • Traditional Chinese Code Conversion: Samuel Chong

著作權聲明位于:http://www.w3.org/Consortium/Legal/copyright-documents.html

Copyright  ©  1998 W3C (MITINRIA Keio ), All Rights Reserved. W3C liability, trademark document use and software licensing rules apply.

W3C REC-smil-19980615-cn


 

同步多媒体合成語言(SMIL) 1.0 規范

W3C建議 1998年6月15日

 

本版本:
http://www.w3.org/TR/1998/REC-smil-19980615
最新版本:
http://www.w3.org/TR/REC-smil
上一版本:
http://www.w3.org/TR/1998/PR-smil-19980409
 

關于本文檔

本文檔由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) and Koga Youichirou (W3C).

編輯:Philipp Hoschka, W3C (hoschka@w3.org)

摘要

本文檔規定了同步多媒体合成語言的版本1(SMIL 1.0,發“smile”的音)。SMIL能夠將一組獨立的多媒体對象合成為同步的多媒体演示。一個創作者可以用SMIL

  1. 描述演示的時序行為
  2. 屏幕上演示的布局
  3. 將媒体對象与超鏈接相關聯

本規范的結构如下:第一部分給出了規范的表述方法。第二部分定義了“smil”元素。第三部分定義了可以包含在SMIL文件頭中的元素。第四部分定義了可以包含在SMIL文件体中的元素。特別地,這部分定義了SMIL中使用的時間模型。第五部分描述了SMIL DTD。

本文檔的狀態

本文檔已由W3C組織成員和其他相關各方審閱,并已被組織理事批准為W3C建議。這是一個穩定的文檔,可以用作參考材料,也可以作為其他文檔的正式參考文獻。W3C在建議制定過程中的作用是吸引對本規范的注意并促進它的廣泛使用。這能增強Web的功能和互操作性。

對本規范的評注可以發往公共郵件列表 www-smil@w3.org.

語言版本

英文版是唯一的正式版。其他語言的翻譯位于http://www.w3.org/AudioVideo/SMIL/translations.

勘誤表

本規范的已知錯誤列表可以在http://www.w3.org/AudioVideo/SMIL/errata找到.

目錄

1 規范的表述方法

SMIL文件是XML 1.0文件[XML10]。要求讀者熟悉XML 1.0中定義的概念和術語。

在URL中定義的一些特性有可能無法用URN表示,本規范不基于這些特性。因此,本規范中統一使用更通用的術語URI[URI]

SMIL文件的語法由5.2節中的DTD定義。不能用DTD記法定義的屬性值和第一個使用能以它為值的屬性的元素一起定義。這些屬性值用XML 1.0中定義的擴展范巴科斯范式(EBNF)定義。

元素定義的結构如下:首先,以字母順序定義此元素的所有屬性。屬性用如下方法定義:如果此屬性是第一次在本規范中被某個元素使用,則定義此屬性的語義。如果此屬性已被另一個元素使用,規范中引用第一個使用此屬性的元素中此屬性的定義。元素屬性定義之后是任何不能用DTD記法定義其語法的屬性值的定義。元素定義的最后部分規定了元素內容。

2 smil元素

元素屬性

“smil”元素可以有下列屬性:

id
此屬性在一個文件中唯一地標識一個元素。它的值是一個XML標識符。

元素內容

“smil”元素可以包含下列子元素:

body
4.1節中定義
head
3.1節中定義

3 文件頭

3.1 head元素

“head”元素包含与演示的時序行為無關的信息。

元素屬性

“head”元素可以有下列屬性:

id
第2節中定義

元素內容

“head”元素可以包含下列子元素:

layout
3.2節中定義
meta
3.4節中定義
switch
4.3節中定義

“head”元素可以包含任意多個“meta”元素,并可以包含一個“layout”元素或一個“switch”元素。

3.2 layout元素

“layout”元素決定了文件体中的元素是如何在一個“抽象表示面”(視頻的或音頻的)上定位的。

如果文件中沒有layout元素,文件体中元素的定位与實現相關。

一個SMIL文件可以通過將多個layout元素封裝在一個“switch”元素(在4.3節中定義)中而包含多個可選的布局。舉例來說,這可以用于使用不同的布局描述語言來描述文件的布局。

下面的例子說明了如何用CSS2代替SMIL基本布局語言(在3.3節中定義):

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

(注意在這個例子中,兩個可選布局的結果相同)

元素屬性

id
第2節中定義
type
此屬性規定了layout元素中使用的布局語言。如果播放器不能理解這种語言,它必須跳過下一個“</layout>”標簽之前的所有內容。type屬性的缺省值是“text/smil-basic-layout”。

元素內容

如果layout元素的type屬性具有值“text/smil-basic-layout”,它可以包含下列元素:

region
3.3.1節中定義
root-layout
3.3.2節中定義

如果“layout”元素的type屬性具有其他值,元素中包含字符數据。

3.3 SMIL基本布局語言

這一節定義用于SMIL的基本布局語言。SMIL基本布局与CSS2中定義的視覺表示模型相一致,它重用了CSS2規范中定義的格式化屬性,同時引入了新的“fit”屬性[CSS2]。要求讀者熟悉CSS2中定義的概念和術語。

SMIL基本布局只控制媒体對象元素(在4.2.3節中定義)的布局。用于其他SMIL元素是非法的。

SMIL基本布局的類型標識符是“text/smil-basic-layout”。

固定的屬性值

下面的樣式表(stylesheet)定義了在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基本布局定義了所有与布局相關的屬性的缺省值。它們与CCS2中相應屬性的初始值一致。

如果創作者想給文件中的所有媒体對象元素選擇缺省的布局值,文件中必須包含一個類型為“text/smil-basic-layout”的空layout元素,如:

<layout type="text/smil-basic-layout"></layout>

3.3.1 region元素

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”元素可以有下列屬性:

background-color
除了SMIL基本布局不要求支持“系統顏色”外,此屬性的定義和使用与CSS2規范中的“background-color”屬性相同。
如果沒有background-color屬性,采用透明的背景。
fit
此屬性規定了可視媒体對象的真正高度和寬度不同于“region”元素中height和width屬性所規定的值時的行為。此屬性沒有直接對應的CSS2屬性,但是可以在CSS2中模擬。
此屬性可以有下列值:
fill
獨立地縮放對象的高度和寬度,使之正好与方框的各邊相接。
hidden
  • 如果媒体對象元素的真正高度(寬度)小于“region”元素中定義的高度(寬度),從上邊界(左邊界)開始顯示,余下的高度(寬度)用背景色填充。
  • 如果媒体對象元素的真正高度(寬度)大于“region”元素中定義的高度(寬度),從上邊界(左邊界)開始顯示,直到“region”元素中定義的值為止,切去在此高度(寬度)之下(之右)的對象的部分。
meet
保持長寬比縮放可視媒体對象,直到它的高度或寬度等于規定的高度或寬度,不切去其內容。對象的左上角置于方框的左上角,左邊或下邊的空余空間用背景色填充。
scroll
當元素要顯示的內容超出邊界時,提供滾動机制。
slice
保持長寬比縮放可視媒体對象,直到它的高度或寬度等于規定的高度或寬度,一部分內容可能會被切去。取決于實際情況,可以顯示可視媒体對象的水平或垂直的一部分。切去媒体對象右邊超出的寬度。切去媒体對象底部超出的高度。

“fit”的缺省值是“hidden”。

height
此屬性的定義和使用与CSS2規范中的“height”屬性相同。屬性值可以是“百分數”值,也可以是CSS2中“length”值的一种變化形式。對于“length”值,SMIL基本布局僅支持以CSS2中定義的象素為單位。它允許省略象素值中的“px”限定符(CSS2要求有“px”限定符)。
id
第2節中定義。
通過將有位置概念的元素的region屬性設為一個region元素的id值,可以將此region元素作用于此有位置概念的元素。
“id”屬性是“region”元素的必需屬性。
left
此屬性的定義和使用与CSS2規范中的“left”屬性相同。屬性值有与“height”屬性相同的限制。
缺省值是0。
skip-content
引入此屬性是為了SMIL以后的可擴展性(參見附錄)。它在下述兩种情況下被解釋:
  • 如果在SMIL的未來版本中引入了一個新元素,而此元素能以SMIL 1.0元素作為其元素內容,“skip-content”屬性控制一個SMIL 1.0播放器是否處理其內容。
  • 如果SMIL版本1.0中的一個空元素在未來的SMIL版本中不再為空,“skip-content”控制一個SMIL 1.0播放器是否忽略其內容,或是導致一個語法錯誤。

如果“skip-content”屬性的值是“true”,且以上的兩种情況之一适用,那么元素內容被忽略。如果值為“false”,元素內容被處理。
“skip-content”的缺省值是“true”。

title
此屬性提供了其所在元素的參考信息。title屬性的值可以被用戶代理(user agent)以各种不同的方式解釋。例如,可視瀏覽器經常將其作為“工具提示”(當定點設備停在一個對象之上時出現的一個簡短的消息)。
強烈建議所有的“region”元素都有“title”屬性,且其屬性值是一個有意義的描述。創作工具應該保証SMIL文件中引入的每一個元素都具有此屬性。
top
此屬性的定義和使用与CSS2規范中的“top”屬性相同。屬性值有与“height”屬性相同的限制。
缺省值是0。
width
此屬性的定義和使用与CSS2規范中的“width”屬性相同。屬性值有与“height”屬性相同的限制。
z-index
此屬性的定義和使用与CSS2規范中的“z-index”屬性相同,下列情況例外:
  • 如果元素A和元素B產生的兩個方框有相同的堆棧層次:
    1. 如果元素A的顯示遲于元素B的顯示,A的方框迭加于B的方框之上(時間次序)。
    2. 如果元素的顯示在同一時間開始,而元素A在SMIL文件文本中遲于元素B出現,A的方框迭加于B的方框之上(按CSS2中定義的文件樹次序)。

元素內容

“region”是一個空元素。

3.3.2 root-layout元素

“root-layout”元素決定根元素的布局屬性值,根元素的這些值又決定了視口(viewport,如SMIL演示播放的窗口)的大小。

如果文件包含一個以上“root-layout”元素,是一個錯誤,此文件不應被顯示。

元素屬性

“root-layout”可以有下列屬性:

background-color
3.3.1節中定義
height
3.3.1節中定義。
設定根元素的高度。只允許表示長度的值。
id
第2節中定義
skip-content
3.3.1節中定義
title
3.3.1節中定義
width
3.3.1節中定義。
設定根元素的寬度。只允許表示長度的值。

元素內容

“root-layout”是一個空元素。

3.4 meta元素

“meta”元素可以用于定義文件的屬性(如,作者,截止日期,關鍵字表,等等)并給這些屬性賦值。每一個“meta”元素規定一個屬性/屬性值對。

元素屬性

“meta”元素可以有下列屬性:

content
此屬性規定meta元素中定義的屬性的屬性值。
“content”屬性是“meta”元素的必需屬性。
id
第2節中定義
name
此屬性標識了meta元素中定義的屬性。
“name”屬性是“meta”元素的必需屬性。
skip-content
3.3.1節中定義

屬性列表是開放的。本規范中定義了下列屬性:

base
此屬性的值決定了文件中所有相對URI的基URI。
pics-label或PICS-Label
此屬性的值指出了PICS為此文件定義的有效評級標志[PICS]
title
此屬性的值包含了演示的標題。

元素內容

“meta”是一個空元素。

4 文件体

4.1 body元素

“body”元素包含与此文件的時序和鏈接行為有關的信息。它隱含地定義了一個“seq”元素(在4.2.2節中定義,“body”元素的時序語義定義參見4.2.4節)。

元素屬性

“body”元素可以有下列屬性:

id
第2節中定義

元素內容

“body”可以包含下列子元素:

a
4.5.1節中定義
animation
4.2.3節中定義
audio
4.2.3節中定義
img
4.2.3節中定義
par
4.2.1節中定義
ref
4.2.3節中定義
seq
4.2.2節中定義
switch
4.3節中定義
text
4.2.3節中定義
textstream
4.2.3節中定義
video
4.2.3節中定義

4.2 同步元素

4.2.1 par元素

par元素的子元素可以在時間上重疊。par中子元素的文本次序對它們演示的次序沒有意義。

元素屬性

“par”元素可以有下列屬性:

abstract
元素所包含內容的簡短描述。
author
元素內容作者的名字。
begin
此屬性規定了元素顯式開始的時間。其語義參見4.2.4節
此屬性可以包含下列兩類值:
延時值
延時值是用于計量演示時間的時鐘值。演示時間以演示播放的速度增加。它的行為如同錄像播放設備上計數器的時間數碼。它可以被用戶或播放器停止,減少或增加。
延時值的語義取決于此元素的第一個為同步元素(即,祖元素中的“a”元素和“switch”元素被忽略)的祖元素:
  • 如果此祖元素是一個“par”元素,此屬性值定義了從元素的實際開始起的一個延時(參見圖4.1)。
  • 如果此祖元素是一個“seq”元素(在4.2.2中定義),此屬性值定義了從第一個為同步元素的詞法前趨的實際結束起的一個延時(參見圖4.2)。
事件值
當某些特定事件發生時此元素開始(參見圖4.3)。屬性的值是一個元素事件(參見下面的定義)。
產生事件的元素必須“在作用域內”。“在作用域內”的元素的集合S如下決定:
  1. 將此元素的第一個為同步元素的祖元素的所有子元素加入S中。
  2. 從S中去掉所有“a”元素和“switch”元素。將所有“a”元素的子元素加入S中,子元素是“switch”的情況例外。

得到的集合S即“在作用域內”的元素的集合。

 


<par>
  <audio id="a" begin="6s" src="audio" />
</par>

delay in 'par' element D

 


圖4.1: 在“par”元素中使用延時值。


<seq>
  <audio src="audio1" />
  <audio begin="5s" src="audio2" />
</seq>

delay in 'seq' element D


圖4.2: 在“seq”元素中使用延時值


<par>
  <audio id="a" begin="6s" ... />
  <img  begin="id(a)(4s)" ... />
</par>

element with event value D

 


圖4.3:值為元素事件值的同步屬性

copyright
元素所包含內容的版權聲明。
dur
此屬性規定了元素的顯式時長。其語義的定義參見4.2.4節。此屬性可以是一個時鐘值或字符串“indefinite”。
end
此屬性規定了元素的顯式結束。其語義的定義參見4.2.4節。此屬性可以包含与“begin”屬性相同的屬性值類型。
endsync
此屬性的語義定義參見4.2.4節。此屬性可以有下列取值:
  • first
    此屬性值的語義定義參見4.2.4節
  • id-ref
    此屬性值有如下的語法:

    id-ref ::= "id(" id-value ")"
    其中“id-value”必須是一個合法的XML標識符。
    此屬性值的語義定義參見4.2.4節
  • last
    此屬性值的語義定義參見4.2.4節

“endsync”的缺省值是“last”。

id
第2節中定義
region
此屬性指定了在文件布局部分定義一個抽象表示面(視頻的或音頻的)。它的值必須是一個XML標識符。如果在布局部分沒有定義表示面,此元素的格式化屬性的值由缺省布局決定。
本規范中定義的SMIL基本布局語言不能在“par”元素中使用“region”屬性。加入此屬性是為了保証完整性,因為其他布局語言有可能需要。
repeat
此屬性的語義定義參見4.2.4節。此屬性的值可以是整數或字符串“indefinite”。缺省值是1。
system-bitrate
4.4節中定義
system-captions
4.4節中定義
system-language
4.4節中定義
system-overdub-or-caption
4.4節中定義
system-required
4.4節中定義
system-screen-size
4.4節中定義
system-screen-depth
4.4節中定義
title
3.3.1節中定義
強烈建議所有的“par”元素都有“title”屬性,且其屬性值是一個有意義的描述。創作工具應該保証SMIL文件中引入的每一個元素都具有此屬性。

關于子元素間同步的注解

在一個同步組中子元素的同步精确度与實現相關。以回放中的時延,即,“par”元素包含兩种或多种連續媒体類型如視頻或音頻時的行為,作為同步的例子,其中的一個會出現時延。
播放器可以有兩种同步行為:

硬同步
播放器將“par”元素的所有子元素与一個共同時鐘同步(參見圖4.4 a)。
軟同步
“par”元素的每個子元素有自己的時鐘,獨立于“par”元素中其他子元素的時鐘運行(參見圖4.4 b)。

 


hard synchronization D

a) 硬同步:視頻中的延時:或是停止音頻,或是視頻掉幀。确切的行為与實現有關。

soft synchronization D

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]

下面是一些合法的時鐘值的例子:

  • 完整的時鐘值:02:30:03 = 2小時30分3秒
  • 部分的時鐘值:02:33 = 2分33秒
  • 計時值:
    3h = 3小時
    45min = 45分
    30s = 30秒
    5ms = 5毫秒


有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
在元素的實際開始處產生此事件。
用法舉例:begin="id(x)(begin)"
clock-val
當与某元素相關聯的時鐘到達某個特定值時產生此事件。這個時鐘在元素實際開始時從0開始。對于“par”和“seq”元素,此時鐘給出了從元素實際開始計起的演示時間。對于媒体對象元素,它的語義与實現相關。可以給出從元素實際開始時計起的演示時間,也可以給出對象的媒体時間。后者可因顯示時延或网絡時延等原因不同于對象開始顯示后所經過的演示時間。后者是推荐的方法。
使用超出產生此事件的元素的實際時長的時鐘值是一個錯誤。

用法舉例:begin="id(x)(45s)"

end
在元素的實際結束處產生此事件。
用法舉例:begin="id(x)(end)"

元素內容

par元素可以包含下列子元素:

a
4.5.1節中定義
animation
4.2.3節中定義
audio
4.2.3節中定義
img
4.2.3節中定義
par
4.2.1節中定義
ref
4.2.3節中定義
seq
4.2.2節中定義
switch
4.3節中定義
text
4.2.3節中定義
textstream
4.2.3節中定義
video
4.2.3節中定義

所有這些元素可以直接作為par元素的子元素出現任意多次。

4.2.2 seq元素

“seq”元素的子元素构成一個時間序列。

屬性

“seq”元素可以有下列屬性:

abstract
4.2.1節中定義
author
4.2.1節中定義
begin
4.2.1節中定義
copyright
4.2.1節中定義
dur
4.2.1節中定義
end
4.2.1節中定義
id
第2節中定義
region
4.2.1節中定義
本規范中定義的SMIL基本布局語言不能在“seq”元素中使用“region”屬性。加入此屬性是為了保証完整性,因為其他布局語言有可能需要。
repeat
4.2.1節中定義
system-bitrate
4.4節中定義
system-captions
4.4節中定義
system-language
4.4節中定義
system-overdub-or-caption
4.4節中定義
system-required
4.4節中定義
system-screen-size
4.4節中定義
system-screen-depth
4.4節中定義
title
3.3.1節中定義
強烈建議所有的“seq”元素都有“title”屬性,且其屬性值是一個有意義的描述。創作工具應該保証SMIL文件中引入的每一個元素都具有此屬性。

元素內容

“seq”元素可以包含下列子元素:

a
4.5.1節中定義
animation
4.2.3節中定義
audio
4.2.3節中定義
img
4.2.3節中定義
par
4.2.1節中定義
ref
4.2.3節中定義
seq
4.2.2節中定義
switch
4.3節中定義
text
4.2.3節中定義
textstream
4.2.3節中定義
video
4.2.3節中定義

4.2.3 媒体對象元素:refanimationaudio,imgvideo,texttextstream元素

媒体對象元素允許在SMIL演示中包括進媒体對象。媒体對象通過引用包含(用URI)。

有兩類媒体對象:有時長概念的媒体對象(如視頻,音頻)(也稱為“連續媒体”)和沒有時長概念的媒体對象(如文本,圖像)(也稱為“离散媒体”)。

可以給可視媒体對象,即顯示在可視抽象表示面上的媒体對象,加上鏈接,也可以將其作為鏈接的終點。

播放器在回放媒体對象時,絕不能從媒体對象元素的名字推斷其實際類型。它必須完全依賴于其他有關類型的信息,如type屬性中包含的類型信息或由服務器或操作系統給出的類型信息。

然而創作者應該确保元素名字反映出了媒体對象所屬的組(animation,audio,img,video,text或textstream)。這是為了增加SMIL文件的可讀性。當作者不确定應屬于哪一組時,他應該使用通用的“ref”元素。

元素屬性

媒体對象元素可以有下列屬性:

abstract
4.2.1節中定義
alt
對于不能顯示一個特定媒体對象的用戶代理,此屬性指明了替代文本。強烈建議所有的媒体對象元素都有“alt”屬性,且其屬性值是一個有意義的描述。創作工具應該保証SMIL文件中引入的每一個元素都具有此屬性。
author
4.2.1節中定義
begin
4.2.1節中定義
clip-begin
clip-begin屬性規定了連續媒体對象的子片斷的開始,偏移量從媒体對象的頭部計起。
clip-begin屬性的屬性值有如下的語法:
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

此屬性的值包括一個計量單位說明符和其后的時間值,時間值的語法和語義取決于計量單位說明符。允許下列格式:

SMPTE時戳
SMPTE時間碼[SMPTE]可以用于得到幀一級的存取精确度。計量單位說明符可以是下列值:
smpte
smpte-30-drop
這兩個值指明使用每秒29.97幀的“SMPTE 30 drop”格式。時間值的“frames”域可以取值0到29。對每秒30幀和每秒29.97幀的差別的處理是跳掉每分鐘的頭兩幀(索引為00和01),為10整數倍的分鐘除外。
smpte-25
時間值的“frames”域可以取值0到24。

時間值的格式為時:分:秒:幀:子幀。如果幀的值為0,可以被省略。子幀以幀的百分之一為單位。
例子:
clip-begin="smpte=10:12:33:20"

正常播放時間
正常播放時間用SMIL時鐘值表示時間。計量單位說明符為“npt”,時間值的語法与SMIL時鐘值的語法相同。
例子:
clip-begin="npt=123.45s"
clip-begin="npt=12:05:35.3
"
clip-end
clip-end屬性規定了應播放的連續媒体對象(如聲頻,視頻或其他演示)的子片斷的結束。它使用与clip-begin屬性值相同的語法。
如果“clip-end”屬性的值超過了媒体對象的時長,它的值被忽略,片斷的結束被設為媒体對象的實際結束。
copyright
4.2.1節中定義
dur
4.2.1節中定義
end
4.2.1節中定義
fill
此屬性的語義定義參見4.2.4節。此屬性可以取值為“remove”或“freeze”。
id
第2節中定義
longdesc
此屬性指出了指向媒体對象詳細描述的一個鏈接(URI)。此描述應補充說明alt屬性提供的簡短說明。當媒体對象被關聯為鏈接終點時,此屬性應提供与此鏈接終點相關的信息。
region
4.2.1節中定義
src
src屬性的值是媒体對象的URI。
system-bitrate
4.4節中定義
system-captions
4.4節中定義
system-language
4.4節中定義
system-overdub-or-caption
4.4節中定義
system-required
4.4節中定義
system-screen-size
4.4節中定義
system-screen-depth
4.4節中定義
title
3.3.1節中定義
強烈建議所有的媒体對象元素都有“title”屬性,且其屬性值是一個有意義的描述。創作工具應該保証SMIL文件中引入的每一個元素都具有此屬性。
type
用“src”屬性引用的媒体對象的MIME類型。

元素內容

媒体對象元素可以包含下列元素:

anchor
4.5.2節中定義

4.2.4 SMIL時間模型

4.2.4.1 時間模型中的各個值

在下面的討論中,術語“元素”僅指同步元素。

對于每一個元素我們定義其隱式,顯式,期望和實際的開始,時長和結束。

實際開始/時長/結束指文件讀者的實際所見。

隱式,顯式和期望值是用于定義實際值的輔助值。

計算元素的各個定義在SMIL 1.0中的值的規則在下一節中描述。

  1. SMIL中的每個元素都有一個隱式開始
  2. 通過給元素加上“begin”屬性可以給每個元素指定一個顯式開始

    begin = "顯式開始的值"

    如果元素的顯式開始早于隱式開始,是一個錯誤。

  3. SMIL的每一個元素有一個隱式開始
  4. 通過給元素加上“end”屬性可以給每個元素指定一個顯式結束

    end = "顯式結束的值"

  5. 元素的隱式時長是隱式結束和隱式開始間的差值。
  6. 通過給元素加上“dur”屬性可以給每個元素指定一個顯式時長

    dur = "顯式時長的值"

  7. 如果給出了顯式開始的話,元素的期望開始等于顯式開始,否則期望開始等于隱式開始。
  8. 每個元素有一個期望結束
  9. 元素的期望時長是期望結束和期望開始間的差值。
  10. 每個元素有一個實際開始
  11. 每個元素有一個實際結束。(注意:子元素的實際結束不能晚于父元素的實際結束。)
  12. 元素的實際時長是實際結束和實際開始間的差值。
4.2.4.2 确定SMIL 1.0元素的各個時間模型值

本節定義了在沒有被4.2.4.1節中的規則所包括的情況下,如何計算SMIL 1.0的同步元素的時間模型值。

确定元素的隱式開始

确定元素的隱式結束

使用第一個与元素相匹配的描述:

确定元素的期望結束

确定元素的期望開始

元素的期望開始由4.2.4.1節中的規則7确定。

确定元素的實際開始

元素的實際開始等于元素的期望開始,除非其父元素的實際結束早于此期望開始,在這种情況下,此元素不被顯示。

确定元素的實際結束

4.3 switch元素

switch元素允許創作者規定一個可選的元素集合,只能從中選取一個可接受的元素。當一個元素是一個SMIL 1.0元素,它的媒体類型可以被解碼,并且它所有的檢測屬性(參見4.4節)都得出值“true”時,稱此元素是可接受的。

選擇元素的過程如下:播放器依它們在switch元素中出現的次序逐個計算這些元素,選擇第一個可接受的元素,其余元素被擯棄。

因此,作者應該按期望值從高到低排序這些可選元素。另外,作者應該在“switch”元素的最后放置一個相對保險的元素以保証<switch>中至少有一個元素會被選中(除非明确不想要)。在所有元素的檢測屬性都失敗時,實現不應任意挑選<switch>中的一個對象。

注意http URI提供了內容協商机制,在某些情況下可以用于替代“switch”元素。

屬性

“switch”元素可以有下列屬性:

id
第2節中定義
title
3.3.1節中定義。
強烈建議所有的“switch”元素都有“title”屬性,且其屬性值是一個有意義的描述。創作工具應該保証SMIL文件中引入的每一個元素都具有此屬性。

元素內容

如果“switch”被直接或間接地用作“body”元素的子元素,它可以包含下列子元素:

a
4.5.1節中定義
animation
4.2.3節中定義
audio
4.2.3節中定義
img
4.2.3節中定義
par
4.2.1節中定義
ref
4.2.3節中定義
seq
4.2.2節中定義
switch
4.3節中定義
text
4.2.3節中定義
textstream
4.2.3節中定義
video
4.2.3節中定義

所有這些元素都可以作為“switch”元素的子元素任意多次。

如果“switch”元素被用于“head”元素中,它可以包含下列子元素:

layout
3.2節中定義
switch元素中可以出現多個layout元素。

4.4 檢測屬性

本規范定義了可加在任何同步元素中用于檢測系統功能和設置的一組檢測屬性。從概念上而言,這些屬性表示布爾測試。當某元素中一個規定的檢測屬性得出值“false”時,此元素被忽略。

在下表中,可能會出現“用戶喜好”的概念。用戶喜好通常是由回放引擎給出一個喜好對話框來設定,但本規范不對用戶將喜好傳遞給SMIL播放器的方式作任何限制。

SMIL 1.0中定義了下列檢測屬性:

system-bitrate
此屬性以位/秒為單位規定了系統可用的近似帶寬。帶寬的度量方法与應用相關,這意味著應用可以使用端到端連接的复雜度量方法,也可以使用由用戶控制的簡單靜態設置。例如,第二种情況可用于根据用戶与网絡的連接狀況作出選擇。使用調制解調器的用戶的典型值會是14400,28800和56000等。如果可用的系統比特率大于或等于給出的值,結果為“true”。如果可用的系統比特率小于給出的值,結果為“false”。
此屬性可以取任何大于0的整數值。如果其值超出了實現定義的最大帶寬值,此屬性的結果總是為“false”。
system-captions
此屬性允許創作者區分對應于演示的聲頻部分的額外文字(面向有听力障礙或想學習閱讀而想要或需要這些信息的觀眾)和面向大部分觀眾的文字。如果用戶指明希望看到閉路字幕信息,其值為“on”。如果用戶指明不希望看到這些信息,其值為“off”。當其值為“on”時,結果為“true”。其值為“off”時,結果為“false”。
system-language
此屬性是一個以逗號分隔的語言名的列表,語言名在[RFC1766]中定義。

如果用戶喜好中指出的語言之一正好等于此參數中給出的一种語言,或者用戶喜好中指出的語言之一正好等于此參數中給出的一种語言的前綴而此前綴后的第一個字母是“-”,結果為“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的最后包括一個“保險”選擇,此選擇在任何情況下都是可接受的。

system-overdub-or-caption
此屬性作為一個設置,确定如果可選的話,用戶喜好配音還是字幕。此屬性可以有值“caption”和“overdub”。如果用戶喜好匹配此屬性值,結果為“true”。如果不匹配的話結果為“false”。
system-required
此屬性指定了一個擴展的名字。如果具体實現支持此擴展,結果為“true”,否則結果為“false”。在SMIL的未來版本中,此屬性會是一個XML名字空間[NAMESPACES]
system-screen-size
其值有如下的語法:
screen-size-val ::= screen-height"X"screen-width
各個值是象素值,而且必須是一個大于0的整數。如果SMIL回放引擎能夠以給定的大小播放,結果為“true”。如果SMIL回放引擎只能在更小的尺寸播放,結果為“false”。
system-screen-depth
此屬性以位為單位規定了顯示某元素所需的屏幕調色板的深度。屬性值必須大于0。典型的值有1,8,24...。如果SMIL回放引擎能夠以給定的深度播放圖像或視頻,結果為“true”。如果SMIL回放引擎只能在更小的深度播放,結果為“false”。

例子

1) 在不同的比特率中選擇

通常情況下,實現可能希望允許通過使用“system-bitrate”參數來選擇不同的元素。媒体播放器每次查看一個“選擇”(switch內的元素),根据媒体播放器和媒体服務器間連接的已知特性查找一個可接受的比特率。

...
<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) 在不同語言的音頻源中選擇

下面的例子中,某個音頻源既有法語版,又有英語版。根据用戶所喜好的語言,播放器可以選擇其中之一。

...
<switch>
   <audio src="joe-audio-french" system-language="fr"/>
   <audio src="joe-audio-english" system-language="en"/>
</switch>
...

4) 在為不同屏幕設置創作的內容中選擇

下面的例子中,演示中包含為不同分辯率和位深度而設計的几個可選的部分。根据屏幕的特性,播放器可以選擇其中之一。

...
<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>
...

4.5 超鏈接元素

鏈接元素使得描述對象間的鏈接訪問關系成為可能。

SMIL只提供內嵌的鏈接元素。鏈接僅限于單向單端鏈接(即,所有的鏈接有且僅有一個源和一個終點)。SMIL中的所有鏈接由用戶激活。

內嵌文件中的鏈接的處理

由于其合成性,SMIL文件的演示可能會涉及其他(非SMIL)應用和插件。例如,SMIL瀏覽器可能會使用一個HTML插件去顯示內嵌的HTML頁。反過來,HTML瀏覽器可能會用一個SMIL插件顯示HTML頁中內嵌的SMIL文件。

在這樣的演示中,可以在文件不同的層次定義鏈接,有可能會產生衝突。在這种情況下,包含文件中定義的鏈接优先于內嵌對象中定義的聯接。注意因為這可能會要求瀏覽器和插件間的通信,SMIL的實現可能選擇不遵循本規范。

如果鏈接在內嵌的SMIL文件中定義,此鏈接只影響這個內嵌的SMIL文件。

如果鏈接在SMIL文件中內嵌的非SMIL文件中定義,鏈接只影響內嵌文件的播放而不影響SMIL包含文件的播放。此限制在以后的SMIL版本中可能會取消。

尋址

SMIL支持命名片斷標識符和'#'連接符。這意味著SMIL支持當前在HTML中使用的定位符(例如,它使用“http://foo.com/some/path#anchor1”形式的定位符)。

連接到SMIL片斷

指向SMIL文件的定位符可以包含片斷部分(例如,http://www.w3.org/test.smi#par1)。片斷部分是一個標識符值,標識了所引用的SMIL文件中的一個元素。如果激活一個包含了片斷部分的鏈接,演示應該從片斷所指元素的實際開始那儿開始播放,就如同是將目標文件快進到那儿一樣。

可能發生下列特殊情況:

  1. 鏈接所指的元素有“repeat”屬性。
    1. 如果“repeat”屬性的值是N,播放N次此元素。
    2. 如果“repeat”屬性的值是“indefinite”,回放的結束由針對“indefinite”重复值定義的規則決定。
  2. 鏈接所指元素被包含在另一個有“repeat”屬性的元素中。
    1. 如果“repeat”屬性的值是N,回放在鏈接所指元素的開頭開始,然后重复播放N-1次包含“repeat”屬性的元素。
    2. 如果“repeat”屬性的值是“indefinite”,回放在鏈接所指元素的開頭開始。回放的結束由針對“indefinite”重复值定義的規則決定。
  3. 鏈接所指元素是一個“switch”元素的內容:不允許鏈接所指元素為“switch”元素的內容。

4.5.1 a元素

“a”元素的功能与HTML 4.0[HTML40]中“a”元素的功能非常相似。SMIL增加了一個屬性“show”用于在激活鏈接時控制源的時序行為。出于同步的考慮,“a”元素是透明的,即,它不影響它的子元素的同步。“a”元素不應該嵌套。“a”元素必須有href屬性。

屬性

“a”元素可以有下列屬性:

id
第2節中定義
href
此屬性包含了鏈接終點的URI。
“href”屬性是“a”元素必需的。
show
此元素在激活鏈接時,控制包含此鏈接的源文件的行為。它可以有下列值:
  • “replace”: 當前的演示暫停在當前狀態,被鏈接終點的資源所代替。如果播放器提供了一种歷史記錄机制,當用戶返回到源文件時,源演示從暫停的狀態恢复播放。
  • “new”:目的資源的播放在一個新的上下文中開始,不影響源資源。
  • “pause”:當前的演示暫停在當前狀態,目的資源在一個新的上下文中開始。當目的資源的顯示結束后,源演示從暫停的狀態恢复播放。

“show”的缺省值是“replace”。

title
3.3.1節中定義
強烈建議所有的“a”元素都有“title”屬性,且其屬性值是一個有意義的描述。創作工具應該保証SMIL文件中引入的每一個元素都具有此屬性。

元素內容

“a”元素可以包含下列子元素:

animation
4.2.3節中定義
audio
4.2.3節中定義
img
4.2.3節中定義
par
4.2.1節中定義
ref
4.2.3節中定義
seq
4.2.2節中定義
switch
4.3節中定義
text
4.2.3節中定義
textstream
4.2.3節中定義
video
4.2.3節中定義

例子

例1

激活鏈接會開始新的演示,代替正在播放的演示。

<a href="http://www.cwi.nl/somewhereelse.smi">
     <video src="rtsp://foo.com/graph.imf" region="l_window"/>
</a>

例子中的第二行可以替換成指向任何有效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”的元素的實際開始那儿開始播放。

演示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>
      ...

4.5.2 anchor元素

“a”元素的功能是有限的,它只允許將鏈接和完整的媒体對象相關聯。HTML中的image map已經說明了將鏈接与一個對象的空間局部相關聯是有用的。anchor元素為SMIL實現了類似的功能:

  1. anchor使用的“href”屬性允許以媒体對象的空間和時間局部作為鏈接的終點。(相比之下,“a”元素只允許將鏈接和完整的媒体對象相關聯)。
  2. anchor元素用“id”屬性將媒体對象的局部作為鏈接的終點。
  3. anchor元素允許用“coords”將對象分成空間局部。
  4. anchor元素允許用“begin”和“end”屬性將對象分成時間局部。begin和end屬性的值相對于媒体對象的開始。

屬性

“anchor”元素可以有下列屬性:

begin
4.2.1節中定義
coords
此屬性在一個可視媒体對象的演示區域定義了一個矩形。如果鏈接与一個矩形區域相關聯,此屬性的語法和語義類似于HTML中image map的coords屬性。矩形用四個長度值來說明:頭兩個值說明了矩形左上角的坐標。后兩個值說明了矩形右下角的坐標。坐標值相對于可視媒体對象的左上角(參見圖4.5)。如果坐標以百分數的形式給出,則是相對于媒体對象顯示區域的整個寬和高而言。
包含錯誤坐標的屬性被忽略(right-x小于或等于left-x,bottom-y小于或等于top-y)。如果坐標值定義的矩形超出了媒体對象覆蓋的范圍,超出的寬度和高度在媒体對象的邊界被切去。
coords屬性值的語法如下:
 
coords-value ::= left-x "," top-y "," right-x "," bottom-y

 


semantics of coords attribute D

 


圖4.5: “coords”屬性的語義

end
4.2.1節中定義
id
第2節中定義
show
4.5.1節中定義
skip-content
3.3.1節中定義
title
3.3.1節中定義
強烈建議所有的“anchor”元素都有“title”屬性,且其屬性值是一個有意義的描述。創作工具應該保証SMIL文件中引入的每一個元素都具有此屬性。

例子

1) 將鏈接与空間局部相關聯

下面的例子中,一個視頻片斷所占的屏幕空間被分為兩個部分。兩個部分有各自關聯的鏈接。

<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) 將鏈接与時間局部相關聯

下面的例子中,一個視頻片斷的時長被分為兩個子間隔。兩個子間隔有各自關聯的鏈接。

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

5 SMIL DTD

5.1 与XML的關系

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;
]>

5.2 DTD

<!--

    This is the XML document type definition (DTD) for SMIL 1.0.

    Date: 1998/06/15 08:56:30

    Authors: 
        Jacco van Ossenbruggen <jrvosse@cwi.nl> 
        Sjoerd Mullender       <sjoerd@cwi.nl>
        
    Further information about SMIL is available at:

          http://www.w3.org/AudioVideo/

-->

<!-- Generally useful entities -->
<!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 Document =====================================-->
<!--
     The root element SMIL contains all other elements.
-->
<!ELEMENT smil (head?,body?)>
<!ATTLIST smil
        %id-attr;
>

<!--=================== The Document Head =================================-->
<!ENTITY % layout-section "layout|switch">

<!ENTITY % head-element "(meta*,((%layout-section;), meta*))?">

<!ELEMENT head %head-element;>
<!ATTLIST head %id-attr;>


<!--=================== Layout Element ====================================-->
<!--
     Layout contains the region and root-layout elements defined by
     smil-basic-layout or other elements defined an external layout 
     mechanism.
-->
<!ELEMENT layout ANY>
<!ATTLIST layout
        %id-attr;
        type CDATA      "text/smil-basic-layout"
>


<!--=================== Region Element ===================================-->
<!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 ================================-->
<!ELEMENT root-layout EMPTY>
<!ATTLIST root-layout
        %id-attr;
        %title-attr;
        %viewport-attrs;
        %skip-attr;
>


<!--=================== Meta Element=======================================-->
<!ELEMENT meta EMPTY>
<!ATTLIST meta
        name    NMTOKEN #REQUIRED
        content CDATA   #REQUIRED
        %skip-attr;
>

<!--=================== The Document Body =================================-->
<!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;>

<!--=================== Synchronization Attributes ========================-->
<!ENTITY % sync-attributes "
        begin   CDATA   #IMPLIED
        end     CDATA   #IMPLIED
">

<!--=================== Switch Parameter Attributes =======================-->
<!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 Attribute ====================================-->
<!ENTITY % fill-attribute "
        fill    (remove|freeze)    'remove'
">


<!--=================== The Parallel Element ==============================-->
<!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;
>

<!--=================== The Sequential Element ============================-->
<!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;
>

<!--=================== The Switch Element ================================-->
<!-- In the head, a switch may contain only layout elements,
     in the body, only container elements. However, this
     constraint cannot be expressed in the DTD (?), so
     we allow both:
-->
<!ENTITY % switch-content "layout|(%container-content;)">
<!ELEMENT switch (%switch-content;)*>
<!ATTLIST switch
        %id-attr;
        %title-attr;
>

<!--=================== Media Object Elements =============================-->
<!-- SMIL only defines the structure. The real media data is
     referenced by the src attribute of the media objects.
-->

<!-- Furthermore, they have the following attributes as defined
     in the SMIL specification:
-->
<!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;
">

<!--
     Most info is in the attributes, media objects are empty or
     contain associated link elements:
-->
<!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;>

<!--=================== Link Elements =====================================-->

<!ENTITY % smil-link-attributes "
        %id-attr;
        %title-attr;
        href            CDATA                   #REQUIRED
        show            (replace|new|pause)     'replace'
">


<!--=================== Inline Link Element ===============================-->
<!ELEMENT a (%schedule;|switch)*>
<!ATTLIST a
        %smil-link-attributes;
>


<!--=================== Associated Link Element ===========================-->
<!ELEMENT anchor EMPTY>
<!ATTLIST anchor
        %skip-attr;
        %smil-link-attributes;
        %sync-attributes;
        coords          CDATA                   #IMPLIED
>

參考文獻

[CSS2]
"Cascading Style Sheets, level 2", B. Bos, H. Lie, C. Lilley, I. Jacobs, 12 May 1998.
Available at http://www.w3.org/TR/REC-CSS2/.
[HTML40]
"HTML 4.0 Specification", D. Raggett, A. Le Hors, I. Jacobs, 24 April 1998.
Available at http://www.w3.org/TR/REC-html40.
[ISO/IEC 10646]
ISO (International Organization for Standardization). ISO/IEC 10646-1993 (E). Information technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International Organization for Standardization, 1993 (plus amendments AM 1 through AM 7).
[NAMESPACES]
"Namespaces in XML", T. Bray, D. Hollander, A. Layman, 27 March 1998
W3C working draft. Available at http://www.w3.org/TR/WD-xml-names.
[PICS]
"PICS 1.1 Label Distribution -- Label Syntax and Communication Protocols", 31 October 1996, T. Krauskopf, J. Miller, P. Resnick, W. Trees
Available at http://www.w3.org/TR/REC-PICS-labels-961031
[RFC1738]
"Uniform Resource Locators", T. Berners-Lee, L. Masinter, and M. McCahill, December 1994.
Available at ftp://ftp.isi.edu/in-notes/rfc1738.txt.
[RFC1766]
"Tags for the Identification of Languages", H. Alvestrand, March 1995.
Available at ftp://ftp.isi.edu/in-notes/rfc1766.txt.
[RFC1808]
"Relative Uniform Resource Locators", R. Fielding, June 1995.
Available at ftp://ftp.isi.edu/in-notes/rfc1808.txt.
[RFC2045]
"Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", N. Freed and N. Borenstein, November 1996.
Available at ftp://ftp.isi.edu/in-notes/rfc2045.txt. Note that this RFC obsoletes RFC1521, RFC1522, and RFC1590.
[SMPTE]
"Time and Control Codes for 24, 25 or 30 Frame-Per-Second Motion-Picture Systems - RP 136-1995".  Society of Motion Picture & Television Engineers.
[URI]
"Uniform Resource Identifiers (URI): Generic Syntax and Semantics", T. Berners-Lee, R. Fielding, L. Masinter, 4 March 1998.
Available at http://www.ics.uci.edu/pub/ietf/uri/draft-fielding-uri-syntax-02.txt. This is a work in progress that is expected to update [RFC1738] and [RFC1808].
[XML10]
"Extensible Markup Language (XML) 1.0", T. Bray, J. Paoli, C.M. Sperberg-McQueen, editors, 10 February 1998.
Available at http://www.w3.org/TR/REC-xml

附錄

擴展SMIL 1.0

(非正式)

SMIL 1.0可能會在將來被另一個W3C建議所擴展,或是出現專用擴展。

建議這些擴展遵循下列規則:

建議SMIL 1.0播放器應准備好處理包含遵循這兩個規則的擴展的文件。

一旦XML名字空間机制成為W3C建議,擴展應該用此机制處理。在本節的余下部分,W3C記錄[NAMESPACE]中定義的XML名字空間的語法和語義只用于說明性的目的。

可能會出現下列情況:

  1. 文件中包含SMIL 1.0規范的名字空間聲明,定義了一個空前綴。在這种情況下,非SMIL 1.0元素和屬性只在聲明為使用XML名字空間時才能出現在文件中。文件不應包含SMIL 1.0的文件類型聲明。如果它包含了,那么它是無效的。
    下面的例子中,元素“new:a”是一個合法的擴展。元素“mytags:a”和“b”是語法錯誤,因為它們沒有使用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>
    
  2. 文件不包括文件類型聲明,或是它包含高于版本1的SMIL文件類型聲明,或是它包含高于版本1的SMIL規范的名字空間聲明。為了能使SMIL 1.0播放器能夠識別這樣一個名字空間聲明,建議未來SMIL版本的URI以http://www.w3.org/TR/REC-smil開頭,后跟更多的字符,如版本號。
    在這种情況下,SMIL 1.0播放器應該假設它在處理一個版本高于1.0的SMIL文件。
    可能發生下列情況:
    未知元素
    未知元素被忽略
    未知元素可能包含由SMIL 1.0元素組成的內容。這樣的內容是否被忽略取決于“skip-content”屬性的值。如果屬性被設為“true”,或是沒有此屬性,內容被忽略。如果它被設為“false”,內容被處理。
    元素內容被聲明為“empty”
    未來版本的SMIL也許會允許SMIL 1.0中聲明為“empty”的元素包含內容。
    這樣的內容是否被忽略取決于原為空元素的元素中“skip-content”屬性的值。如果屬性被設為“true”,內容不被處理。如果它被設為“false”,內容被處理。
    未知屬性
    未知屬性被忽略
    未知屬性值
    包含未知屬性值的屬性被忽略。
  3. 文件包含一個SMIL 1.0文件類型聲明。在這种情況下,它不應包含任何非SMIL 1.0的元素,即使它們被聲明為使用XML名字空間。這是因為這些擴展可能會使文件無效。

將SMIL 1.0作為擴展使用

當XML名字空間机制被用于包含其他基于XML的文件中的SMIL元素和屬性時,建議使用下面的名字空間標識符:http://www.w3.org/TR/REC-smil