Synchronized Multimedia Integration Language (SMIL) 1.0本文档是W3C建议SMIL 1.0(1998年6月15日)的中文版,其中可能有错误和不妥之处。 英文版是唯一的正式版,位于: http://www.w3.org/TR/1998/REC-smil-19980615 本文档位于: http://lightning.prohosting.com/~qqiu/smil/trans/REC-smil-19980615-cn.html
著作权声明位于:http://www.w3.org/Consortium/Legal/copyright-documents.html Copyright © 1998 W3C (MIT, INRIA, Keio ), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply. |
W3C建议 1998年6月15日
本文档由World Wide Web Consortium的同步多媒体工作组提供。工作组包括下列成员:
致谢:除了工作组成员之外,还有下列各位为SMIL付出了各自的努力: Bert Bos (W3C), Dan Connolly (W3C), Patrick Deunhouwer (Philips), Martin D黵st (W3C), Al Gilman, H錵on 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
本规范的结构如下:第一部分给出了规范的表述方法。第二部分定义了“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找到.
SMIL文件是XML 1.0文件[XML10]。要求读者熟悉XML 1.0中定义的概念和术语。
在URL中定义的一些特性有可能无法用URN表示,本规范不基于这些特性。因此,本规范中统一使用更通用的术语URI[URI]。
SMIL文件的语法由5.2节中的DTD定义。不能用DTD记法定义的属性值 和第一个使用能以它为值的属性的元素一起定义。这些属性值用XML 1.0中定义的扩展范巴科斯范式(EBNF)定义。
元素定义的结构如下:首先,以字母顺序定义此元素的所有属性。属性用如下方法定义:如果此属性是第一次在本规范中被某个元素使用,则定义此属性的语义。如果此属性已被另一个元素使用,规范中引用第一个使用此属性的元素中此属性的定义。元素属性定义之后是任何不能用DTD记法定义其语法的属性值的定义。元素定义的最后部分规定了元素内容。
元素属性
“smil”元素可以有下列属性:
元素内容
“smil”元素可以包含下列子元素:
head元素“head”元素包含与演示的时序行为无关的信息。
元素属性
“head”元素可以有下列属性:
元素内容
“head”元素可以包含下列子元素:
“head”元素可以包含任意多个“meta”元素,并可以包含一个“layout”元素或一个“switch”元素。
“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>
(注意在这个例子中,两个可选布局的结果相同)
元素属性
元素内容
如果layout元素的type属性具有值“text/smil-basic-layout”,它可以包含下列元素:
如果“layout”元素的type属性具有其他值,元素中包含字符数据。
这一节定义用于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>
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”,且以上的两种情况之一适用,那么元素内容被忽略。如果值为“false”,元素内容被处理。
“skip-content”的缺省值是“true”。
元素内容
“region”是一个空元素。
root-layout元素 “root-layout”元素决定根元素的布局属性值,根元素的这些值又决定了视口(viewport,如SMIL演示播放的窗口)的大小。
如果文件包含一个以上“root-layout”元素,是一个错误,此文件不应被显示。
元素属性
“root-layout”可以有下列属性:
元素内容
“root-layout”是一个空元素。
“meta”元素可以用于定义文件的属性(如,作者,截止日期,关键字表,等等)并给这些属性赋值。每一个“meta”元素规定一个属性/属性值对。
元素属性
“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”。
关于子元素间同步的注解
在一个同步组中子元素的同步精确度与实现相关。以回放中的时延,即,“par”元素包含两种或多种连续媒体类型如视频或音频时的行为,作为同步的例子,其中的一个会出现时延。
播放器可以有两种同步行为:
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)。
有两类媒体对象:有时长概念的媒体对象(如视频,音频)(也称为“连续媒体”)和没有时长概念的媒体对象(如文本,图像)(也称为“离散媒体”)。
可以给可视媒体对象,即显示在可视抽象表示面上的媒体对象,加上链接,也可以将其作为链接的终点。
播放器在回放媒体对象时,绝不能从媒体对象元素的名字推断其实际类型。它必须完全依赖于其他有关类型的信息,如type属性中包含的类型信息或由服务器或操作系统给出的类型信息。
然而创作者应该确保元素名字反映出了媒体对象所属的组(animation,audio,img,video,text或textstream)。这是为了增加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
此属性的值包括一个计量单位说明符和其后的时间值,时间值的语法和语义取决于计量单位说明符。允许下列格式:
时间值的格式为时:分:秒:帧:子帧。如果帧的值为0,可以被省略。子帧以帧的百分之一为单位。
例子:
clip-begin="smpte=10:12:33:20"
clip-begin="npt=123.45s"
clip-begin="npt=12:05:35.3"
元素内容
媒体对象元素可以包含下列元素:
在下面的讨论中,术语“元素”仅指同步元素。
对于每一个元素我们定义其隐式,显式,期望和实际的开始,时长和结束。
实际开始/时长/结束指文件读者的实际所见。
隐式,显式和期望值是用于定义实际值的辅助值。
计算元素的各个定义在SMIL 1.0中的值的规则在下一节中描述。
begin = "显式开始的值"
如果元素的显式开始早于隐式开始,是一个错误。
end = "显式结束的值"
dur = "显式时长的值"
本节定义了在没有被4.2.4.1节中的规则所包括的情况下,如何计算SMIL 1.0的同步元素的时间模型值。
使用第一个与元素相匹配的描述:
确定元素的期望开始
元素的期望开始由4.2.4.1节中的规则7确定。
元素的实际开始等于元素的期望开始,除非其父元素的实际结束早于此期望开始,在这种情况下,此元素不被显示。
switch元素允许创作者规定一个可选的元素集合,只能从中选取一个可接受的元素。当一个元素是一个SMIL 1.0元素,它的媒体类型可以被解码,并且它所有的检测属性(参见4.4节)都得出值“true”时,称此元素是可接受的。
选择元素的过程如下:播放器依它们在switch元素中出现的次序逐个计算这些元素,选择第一个可接受的元素,其余元素被摈弃。
因此,作者应该按期望值从高到低排序这些可选元素。另外,作者应该在“switch”元素的最后放置一个相对保险的元素以保证<switch>中至少有一个元素会被选中(除非明确不想要)。在所有元素的检测属性都失败时,实现不应任意挑选<switch>中的一个对象。
注意http URI提供了内容协商机制,在某些情况下可以用于替代“switch”元素。
属性
“switch”元素可以有下列属性:
元素内容
如果“switch”被直接或间接地用作“body”元素的子元素,它可以包含下列子元素:
所有这些元素都可以作为“switch”元素的子元素任意多次。
如果“switch”元素被用于“head”元素中,它可以包含下列子元素:
本规范定义了可加在任何同步元素中用于检测系统功能和设置的一组检测属性。从概念上而言,这些属性表示布尔测试。当某元素中一个规定的检测属性得出值“false”时,此元素被忽略。
在下表中,可能会出现“用户喜好”的概念。用户喜好通常是由回放引擎给出一个喜好对话框来设定,但本规范不对用户将喜好传递给SMIL播放器的方式作任何限制。
SMIL 1.0中定义了下列检测属性:
如果用户喜好中指出的语言之一正好等于此参数中给出的一种语言,或者用户喜好中指出的语言之一正好等于此参数中给出的一种语言的前缀而此前缀后的第一个字母是“-”,结果为“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的最后包括一个“保险”选择,此选择在任何情况下都是可接受的。
screen-size-val ::= screen-height"X"screen-width
例子
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>
...
链接元素使得描述对象间的链接访问关系成为可能。
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文件中的一个元素。如果激活一个包含了片断部分的链接,演示应该从片断所指元素的实际开始那儿开始播放,就如同是将目标文件快进到那儿一样。
可能发生下列特殊情况:
“a”元素的功能与HTML 4.0[HTML40]中“a”元素的功能非常相似。SMIL增加了一个属性“show”用于在激活链接时控制源的时序行为。出于同步的考虑,“a”元素是透明的,即,它不影响它的子元素的同步。“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>
例子中的第二行可以替换成指向任何有效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>
...
anchor元素 “a”元素的功能是有限的,它只允许将链接和完整的媒体对象相关联。HTML中的image map已经说明了将链接与一个对象的空间局部相关联是有用的。anchor元素为SMIL实现了类似的功能:
属性
“anchor”元素可以有下列属性:
coords-value ::= left-x "," top-y "," right-x "," bottom-y
D
图4.5: “coords”属性的语义
例子
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>
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;
]>
<!--
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
>
(非正式)
SMIL 1.0可能会在将来被另一个W3C建议所扩展,或是出现专用扩展。
建议这些扩展遵循下列规则:
建议SMIL 1.0播放器应准备好处理包含遵循这两个规则的扩展的文件。
一旦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>
当XML名字空间机制被用于包含其他基于XML的文件中的SMIL元素和属性时,建议使用下面的名字空间标识符:http://www.w3.org/TR/REC-smil