Este documento é uma versão traduzida da Synchronized Multimedia Integration Language (SMIL) 1.0 Specification, do W3C, podendo conter erros de tradução. A versão normativa, no idioma inglês, pode ser encontrada no endereço:
Recomendação da W3C - 15 de Junho de 1998
Copyright © 1998 W3C (MIT, INRIA, Keio), todos os direitos reservados. Aplicam-se a este documento todas as normas da W3C relativas a licenciamento de software, utilização de documentos, marcas e responsabilidades. A utilização deste sítio é efectuada ao abrigo dos nossos compromissos de privacidade para com os membros e para com o público.
Este documento foi elaborado pelo Grupo de Trabalho (GT) do World Wide Web Consortium dedicado ao Multimédia Sincronizado. O GT incluía os seguintes indivíduos:
Agradecimentos:
além dos membros do grupo de trabalho, contribuíram para o esforço de desenvolvimento de 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) e Koga Youichirou (W3C).Editor: Philipp Hoschka, W3C (hoschka@w3.org)
Este documento especifica a versão 1 de SMIL - Synchronized Multimedia Integration Language (pronúncia: "smáile"). SMIL permite integrar um conjunto de objectos multimédia independentes numa apresentação multimédia sincronizada. Utilizando SMIL, um autor pode:
A presente especificação encontra-se estruturada da seguinte forma: a secção 1 apresenta a abordagem utilizada. A secção 2 define o elemento "smil". A secção 3 define os elementos que podem constar do cabeçalho de um documento em SMIL. A secção 4 define os elementos que podem constar do corpo de um documento em SMIL. Mais concretamente, esta secção define o modelo temporal utilizado em SMIL. A secção 5 descreve o DTD de SMIL.
Este documento foi analisado pelos membros do W3C e por outras partes interessadas, tendo sido aprovado pelo Director como Recomendação do W3C. É um documento estável e pode ser utilizado como material de referência e citado noutro documento na qualidade de referência normativa. O papel do W3C, ao efectuar a Recomendação, consiste em atrair as atenções sobre a presente especificação e promover a respectiva utilização. Esta especificação melhora a funcionalidade e interoperabilidade da Web.
Atributos do elemento
O elemento "smil" (código SMIL) pode possuir o seguinte atributo:
Conteúdo do elemento
O elemento "smil" pode conter os seguintes dependentes:
headO elemento "head" (cabeçalho) contém informação desassociada do comportamento temporal da apresentação.
Atributos do elemento
O elemento "head" pode possuir o seguinte atributo:
Conteúdo do elemento
O elemento "head" pode conter os seguintes dependentes:
O elemento "head" pode conter qualquer número de elementos "meta"; pode igualmente conter um elemento "layout" ou um elemento "switch".
O elemento "layout" (disposição) especifica o posicionamento dos elementos constituintes do corpo do documento, quando colocados numa superfície de reprodução abstracta (seja ela visual ou acústica).
Se um documento não contiver um elemento "layout", o posicionamento dos elementos do corpo é dependente da implementação.
Um documento em SMIL pode conter várias disposições alternativas, agrupando vários elementos "layout" dentro de um elemento "switch" (definido na secção 4.3). Isto permite, por exemplo, descrever a disposição do documento por meio de diferentes linguagens de disposição.
O exemplo que se segue mostra como utilizar CSS2 em alternativa à linguagem básica de SMIL para disposição (definida na secção 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>
>(Repare-se que neste exemplo ambas as alternativas de disposição apresentam o mesmo resultado final.)
Atributos do elemento
Conteúdo do elemento
Se o atributo "type" do elemento "layout" tiver o valor "text/smil-basic-layout", contém os seguintes elementos:
Se o atributo "type" do elemento "layout" tiver qualquer outro valor, o elemento contém dados sobre a forma de caracteres.
Esta secção define uma linguagem básica de disposição para SMIL. A disposição básica de SMIL é consistente com o modelo de reprodução visual definido para CSS2, reutilizando as propriedades de formatação definidas pela especificação CSS2, introduzindo como novidade o atributo "fit" [CSS2]. Pressupõe-se que o leitor está familiarizado com os termos e conceitos definidos na CSS2.
A disposição básica de SMIL controla unicamente a disposição dos elementos que sejam objectos multimédia (definidos na secção 4.2.3). A utilização da disposição básica de SMIL para outros elementos de SMIL não é válida.
O identificador de tipo para a disposição básica de SMIL é "text/smil-basic-layout".
Valores de propriedade fixos
A folha de estilos que se segue define os valores das propriedades de CSS2 "display" e "position" que permanecem válidos na disposição básica de SMIL. Os seguintes valores de propriedade são fixos:
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}
Repare-se que, como consequência destas definições, todos os elementos com posicionamento em termos absolutos (animation, img, ref, text, textstream e video) são contidos num único bloco definido pelo limite de conteúdo do elemento-raiz (smil).
Valores predefinidos
A disposição básica de SMIL define valores predefinidos para todos os atributos relacionados com a disposição. Tais valores são consistentes com os valores iniciais das propriedades correspondentes em CSS2.
Se o autor deseja seleccionar os valores de disposição predefinidos para todos os elementos de um documento que sejam objectos multimédia, o documento tem de conter um elemento de disposição vazio do tipo "text/smil-basic-layout", como por exemplo:
<layout type="text/smil-basic-layout"></layout>
O elemento "region" (região) controla a posição, tamanho e escala dos elementos que são objectos multimédia.
No fragmento de exemplo que se segue, a posição de um elemento de texto é definida como sendo a uma distância de 5 pixels do limite superior da janela de reprodução:
<smil>
<head>
<layout>
<region id="a" top="5" />
</layout>
</head>
<body>
<text region="a" src="text.html" dur="10s" />
</body>
</smil>
Atributos do elemento
O elemento "region" pode possuir os seguintes atributos:
O valor predefinido para "fit" é "hidden".
Se o valor do atributo "skip-content" for "true" (verdadeiro) e
estivermos perante um dos casos indicados acima, o conteúdo do elemento é ignorado. Se o
valor for "false", o conteúdo do elemento é processado.
O valor predefinido para "skip-content" é "true".
Conteúdo do elemento
"region" é um elemento vazio.
root-layoutO elemento "root-layout" (disposição da raiz) especifica o valor das propriedades de disposição do elemento-raiz, que por sua vez especifica o tamanho da área de visualização - a janela onde é reproduzida a apresentação em SMIL.
Se um documento contém mais do que um elemento "root-layout", trata-se de um erro, pelo que nesta situação o documento não pode ser apresentado.
Atributos do elemento
O elemento "root-layout" pode possuir os seguintes atributos:
Conteúdo do elemento
"root-layout" é um elemento vazio.
O elemento "meta" pode ser utilizado para definir propriedades de um elemento (por exemplo: o autor, a data de validade, uma lista de palavras-chave, etc.) e atribuir-lhes valores. Cada elemento "meta" especifica um só par propriedade/valor.
Atributos do elemento
O elemento "meta" pode possuir os seguintes atributos:
A lista de propriedades não é exclusiva, podendo ser alargada. A presente especificação define as seguintes propriedades:
Conteúdo do elemento
"meta" é um elemento vazio.
bodyO elemento "body" (corpo) contém informação associada ao comportamento temporal e relacional do documento. Define implicitamente um elemento "seq" (definido na secção 4.2.2; consulte a secção 4.2.4 para encontrar uma definição da semântica temporal do elemento "body").
Atributos do elemento
O elemento "body" pode possuir o seguinte atributo:
Conteúdo do elemento
O elemento "body" pode possuir os seguintes dependentes:
Os dependentes do elemento "par" (paralelo) podem sobrepor-se no tempo. A ordem textual pela qual são expressos os dependentes de um elemento "par" não acarreta qualquer significado relativamente à temporização da respectiva apresentação.
Atributos do elemento
O elemento "par" pode possuir os seguintes atributos:
O conjunto P resultante é o conjunto de elementos "próximos".
<par> <audio id="a" begin="6s" src="audio" /> </par>
Figura 4.1: Utilização de um valor de atraso num elemento "par"
<seq> <audio src="audio1" /> <audio begin="5s" src="audio2" /> </seq>
Figura 4.2: Utilização de um valor de atraso num elemento "seq"
<par> <audio id="a" begin="6s" ... /> <img begin="id(a)(4s)" ... /> </par>
Figura 4.3: Atributo de sincronização com elemento com valor de acontecimento
id-ref ::= "id(" id-value ")"O valor predefinido para "endsync" é "last".
Comentários relativos à sincronização entre dependentes
A precisão da sincronização entre os dependentes de um grupo paralelo depende da
aplicação. Tome-se o exemplo da sincronização entre atrasos de reprodução, ou seja,
o comportamento que ocorre quando um elemento "par" dois (ou mais) tipos de
conteúdo contínuo, como áudio ou vídeo, ocorrendo um atraso num deles.
Um reprodutor pode apresentar os seguintes comportamentos de sincronização:
a) Sincronização geral: ocorre um atraso no vídeo: ou o áudio pára ou se perdem algumas imagens do vídeo. O comportamento concreto depende da implementação.
b) Sincronização individual
Figura 4.4: Efeito de um atraso durante a reprodução, em reprodutores com diferentes métodos de sincronização
Valores de atributos
Valor-de-relógio ::= Valor-completo | Valor-parcial | Valor-da-contagem
Valor-completo ::= Horas ":" Minutos ":" Segundos ("." Fracção)?
Valor-parcial ::= Minutos ":" Segundos ("." Fracção)?
Valor-da-contagem ::= Contagem-do-tempo ("." Fracção)?
("h" | "min" | "s" | "ms")? ; o valor predefinido é "s"
Horas ::= 2DIGITOS; qualquer número positivo
Minutos ::= 2DIGITOS; desde 00 até 59
Segundos ::= 2DIGITOS; desde 00 até 59
Fracção ::= DIGITO+
Contagem-do-tempo ::= DIGITO+
2DIGITOS ::= DIGITO DIGITO
DIGITO ::= [0-9]
Seguem-se exemplos de valores de relógio válidos:
Uma fracção x com n dígitos representa o seguinte valor:
x * 1/10**n
Exemplos:
00.5s = 5 * 1/10 segundos = 500 milissegundos
00:00.005 = 5 * 1/1000 segundos = 5 milissegundos
Acontecimento-elemento ::= "id(" Origem-do-acontecimento ")(" Acontecimento ")"
Origem-do-acontecimento ::= Valor-de-Id
Acontecimento ::= "begin" | Valor-de-relógio | "end"
begin="id(x)(begin)"Exemplo de utilização: begin="id(x)(45s)"
begin="id(x)(end)"Conteúdo do elemento
O elemento "par" pode conter os seguintes dependentes:
Todos estes elementos podem aparecer várias vezes como dependentes directos de um elemento "par".
Os dependentes de um elemento "seq" (sequência) constituem uma sequência temporal.
Atributos
O elemento seq pode possuir os seguintes atributos:
Conteúdo do elemento
O elemento "seq" pode conter os seguintes dependentes:
animation, audio, img, video, text e textstreamOs elementos que são objectos multimédia possibilitam a inclusão de objectos multimédia numa apresentação em SMIL. Os objectos multimédia são incluídos por referência (através de um URI).
Há dois tipos de objectos multimédia: objectos multimédia com uma duração intrínseca (ex.: vídeo, áudio) (a que também se chama "multimédia contínuo") e objectos multimédia sem duração intrínseca (ex.: texto, imagem) (a que também se chama "multimédia discreto").
Podem-se associar âncoras e ligações aos objectos multimédia visuais, ou seja, objectos multimédia reproduzidos numa superfície visual abstracta de reprodução.
Ao reproduzir um objecto multimédia, o reprodutor não deve determinar o tipo concreto de objecto multimédia a partir do nome do elemento. Deve sim basear-se exclusivamente noutras fontes de informação, tais como a informação de tipo contida no atributo "type" ou a informação de tipo que lhe seja comunicada pelo servidor ou pelo sistema operativo.
No entanto, os autores devem certificar-se de que o grupo a que pertencer o objecto multimédia ("animation", "audio", "img", "video", "text" ou "textstream") se reflicta no nome do elemento. Deve assim ser para maior facilidade de leitura do documento em SMIL. Em situações de dúvida quanto ao agrupamento de um objecto multimédia, os autores devem utilizar o elemento genérico "ref".
Atributos do elemento
Os elementos que são objectos multimédia podem possuir os seguintes atributos:
Valor-temporal-para-secção ::= Métrica "=" ( Valor-de-relógio | Valor-smpte )
Métrica ::= Tipo-smpte | "npt"
Tipo-smpte ::= "smpte" | "smpte-30-drop" | "smpte-25"
Valor-smpte ::= Horas ":" Minutos ":" Segundos
[ ":" Imagens [ "." Sub-imagens ]]
Horas ::= 2DIGITOS
Minutos ::= 2DIGITOS
Segundos ::= 2DIGITOS
Imagens ::= 2DIGITOS
Sub-imagens ::= 2DIGITOS
O valor deste atributo consiste numa especificação de métrica, seguido por um valor temporal cuja sintaxe e semântica depende da especificação métrica. São permitidos os seguintes formatos:
O valor temporal possui o formato horas:minutos:segundos:imagns.sub-imagens. Se o valor
de imagens for zero, pode ser omitido. As sub-imagens são medidas em termo de um
centésimo de uma imagem.
Exemplos:
clip-begin="smpte=10:12:33:20"
clip-begin="npt=123.45s"
clip-begin="npt=12:05:35.3"Conteúdo do elemento
Os elementos que são objectos multimédia podem conter o seguinte elemento:
Na explanação que se segue, o termo "elemento" refere-se exclusivamente aos elementos de sincronização.
Para cada elemento são definidos o início, duração e final implícitos, explícitos, desejados e concretos.
O início/duração/final concreto especifica a percepção do leitor do documento.
Os valores implícitos, explícitos e desejados são valores auxiliares que se utilizam para definir os valores concretos.
As regras de cálculo de cada um destes valores, no caso dos elementos definidos em SMIL 1.0, são descritas na próxima secção.
begin = "valor do início explícito
"
É considerado um erro explicitar um início anterior ao início implícito do elemento.
end = "valor do final explícito"
dur = "valor da duração explícita"
Esta secção define o método de cálculo dos valores do modelo temporal para os elementos de sincronização de SMIL 1.0, nos casos não abrangidos pelas regras da secção 4.2.4.1.
A primeira descrição que corresponder ao caso do elemento é a que deve ser utilizada:
Determinar o início desejado de um elemento
O início desejado de um elemento é determinado pela regra 7 da secção 4.2.4.1.
O início concreto de um elemento é o respectivo início desejado, excepto quando o final concreto do supra-elemento é anterior a esse momento, sendo que neste caso o elemento não chega a ser apresentado.
O elemento "switch" (comutador) possibilita a um autor especificar um conjunto de elementos alternativos de entre os quais apenas um elemento aceitável deve ser escolhido. Um elemento é considerado aceitável se for um elemento de SMIL 1.0, o tipo de dados puder ser descodificado e a avaliação de todos os atributos de teste (consultar a secção 4.4) do elemento resultar em "true".
Um elemento é seleccionado da seguinte forma: o reprodutor avalia os elementos pela ordem em que ocorrem no elemento "switch". O primeiro elemento aceitável é seleccionado, por exclusão dos restantes elementos do comutador.
Assim, os autores devem ordenar as alternativas da mais para a menos desejável. Mais, devem colocar uma alternativa relativamente à prova de falhas como último item de <switch> para que pelo menos um dos items do comutador seja escolhido (a menos que tal seja algo que, explicitamente, não é desejado). As implementação NÃO devem seleccionar arbitrariamente um dos objectos do <switch> quando os atributos de teste de todos falham.
Repare-se que os URI do HTTP permitem efectuar negociação de conteúdos, o que em alguns caso pode funcionar como alternativa ao elemento "switch".
Atributos
O elemento "switch" pode possuir os seguintes atributos:
Conteúdo do elemento
Se o elemento "switch" for utilizado como dependente directo ou indirecto de um elemento "body", pode conter os seguintes dependentes:
Todos estes elementos podem aparecer várias vezes como dependentes de um elemento "switch".
Se o elemento "switch" for utilizado dentro de um elemento "head", pode conter o seguinte dependente:
Esta especificação define uma lista de atributos de teste que podem ser acrescentados a qualquer elemento de sincronização, para testar as capacidades e definições do sistema. De uma forma conceptual, estes atributos representam testes lógicos. Quando um dos atributos de teste especificado para um elemento resulta em "false" (falso), o elemento que possui esse atributo é ignorado.
Na lista abaixo, pode surgir o conceito de "preferência do utilizador". Em geral, as preferências do utilizador são definidas pelo sistema de reprodução, utilizando uma caixa de diálogo de preferências. No entanto, esta especificação não coloca quaisquer restrições quanto à forma de comunicação dessas preferências ao reprodutor de SMIL por parte do utilizador.
Em SMIL 1.0 encontram-se definidos os seguintes atributos de teste:
É avaliado como "true" se um dos idiomas indicados pelas preferências do utilizador for exactamente igual a um dos idiomas presentes no valor deste parâmetro, mas também se um dos idiomas indicados pelas preferências do utilizador for exactamente igual ao prefixo de um dos idiomas presentes no valor deste parâmetro quando o primeiro carácter de marca a seguir ao prefixo for "-".
Nos restantes caso é avaliado como "false".
Nota: esta utilização de uma regra de correspondência de prefixos não implica que as marcas de idiomas sejam atribuídas aos idiomas por forma a que no caso de um utilizador compreender um idioma com uma determinada marca, possa também compreender todos os idiomas com marcas para os quais esta marca seja um prefixo.
A regra do prefixo permite simplesmente utilizar as marcas de prefixo, se tal for necessário.
Nota de implementação: ao efectuar a escolha das preferências linguísticas disponíveis ao utilizador, os implementadores devem tomar em linha de conta o facto de que os utilizadores não estão familiarizados com as questões de correspondência de idiomas acima descritas, pelo que lhes deve ser fornecida assistência adequada. A título de exemplo: os utilizadores poderão assumir que ao seleccionar "en-gb", obterão qualquer tipo de documento em inglês, no caso de não haver uma versão disponível em inglês britânico. O interface de utilizador para definição das preferências do utilizador deve indicar ao utilizador a necessidade de acrescentar "en" para obter a melhor correspondência possível.
PODEM ser listados vários idiomas, quando o conteúdo se destina a públicos variados. Por exemplo: para apresentar uma versão do "Tratado de Waitangi", simultaneamente nas versões originais em maori e em inglês, seria necessário:
<audio src="foo.rm" system-language="mi, en"/>
No entanto, o facto de existirem vários idiomas num objecto no qual seja colocado o atributo de teste "system-language" não significa que se destine a públicos de vários idiomas. Como exemplo temos a aprendizagem de idiomas para principiantes, como "A Minha Primeira Lição de Latim", que se destina claramente a um público com conhecimentos de português. Neste caso, o atributo de teste "system-language" deve incluir apenas "pt".
Nota aos autores: deve-se ter presente que se vários idiomas alternativos forem encapsulados num elemento "switch", sem que nenhum deles obtenha uma correspondência, tal poderá conduzir a situações tais como um vídeo ser apresentado, mas sem som. Assim, recomenda-se que seja incluída uma opção "vale-tudo" no final de um desses comutadores, que seja sempre aceitável.
valor-tamanho-do-ecrã ::= altura-do-ecrã"X"largura-do-ecrãExemplos
1) Escolher entre conteúdos com taxas de bits diferentes
É cenário comum as implementações desejarem permitir a selecção através da inclusão nos elementos de um parâmetro "system-bitrate". O reprodutor multimédia avalia uma "opção" (elementos dentro do comutador) de cada vez, em busca de uma taxa de bits aceitável para as características conhecidas da ligação entre o reprodutor multimédia e o servidor multimédia.
...
<par>
<text .../>
<switch>
<par system-bitrate="40000">
...
</par>
<par system-bitrate="24000">
...
</par>
<par system-bitrate="10000">
........
</par>
</switch>
</par>
...
2) Escolher entre recursos de áudio com taxas de bits diferentes
Os elementos no interior do comutador podem constituir uma qualquer combinação de elementos. Por exemplo: pode-se simplesmente especificar uma faixa de áudio alternativa:
... <switch> <audio src="áudio-do-zé-boa-qualidade" system-bitrate="16000" /> <audio src="áudio-do-zé" system-bitrate="8000" /> </switch> ...
3)Escolher entre recursos de áudio em idiomas diferentes
No exemplo que se segue, um recurso de áudio está disponível tanto em francês como em inglês. Com base no idioma preferido pelo utilizador, o reprodutor pode escolher um dos recursos de áudio.
... <switch> <audio src="áudio-do-zé-francês" system-language="fr"/> <audio src="áudio-do-zé-inglês" system-language="en"/> </switch> ...
4) Escolher entre conteúdo escrito a pensar em ecrãs diferentes
No exemplo que se segue, a apresentação contém partes alternativas, concebidas para ecrãs com resoluções e precisão de cor diferentes. Conforme as características particulares do ecrã, o reprodutor pode escolher uma das alternativas.
...
<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) Não misturar a faixa das legendas com indicadores de cotações
No exemplo que se segue, as legendas só aparecem se o utilizador as desejar.
...
<seq>
<par>
<audio src="audio.rm"/>
<video src="video.rm"/>
<textstream src="cotações.rtx"/>
<textstream src="legendas.rtx" system-captions="on"/>
</par>
</seq>
...
6) Escolher o idioma das dobragem e das legendas
No exemplo que se segue, um filme em francês encontra-se disponível com dobragem e legendas em inglês, alemão e holandês. O segmento de SMIL que se apresenta de seguida exprime esta situação, activando as alternativas preferidas pelo utilizador.
...
<par>
<switch>
<audio src="filme-aud-ing.rm" system-language="en"
system-overdub-or-caption="overdub"/>
<audio src="filme-aud-alm.rm" system-language="de"
system-overdub-or-caption="overdub"/>
<audio src="filme-aud-hol.rm" system-language="nl"
system-overdub-or-caption="overdub"/>
<!-- Para todos os restantes, francês -->
<audio src="filme-aud-fr.rm"/>
</switch>
<video src="filme-vid.rm"/>
<switch>
<textstream src="filme-legs-ing.rtx" system-language="en"
system-overdub-or-caption="caption"/>
<textstream src="filme-legs-alm.rtx" system-language="de"
system-overdub-or-caption="caption"/>
<textstream src="filme-legs-hol.rtx" system-language="nl"
system-overdub-or-caption="caption"/>
<!-- Legendas em francês para quem as desejar -->
<textstream src="filme-legs-fr.rtx" system-captions="on"/>
</switch>
</par>
...
Os elementos de ligação permitem descrever ligações de navegação entre objectos.
Em SMIL só existem elementos de ligação inseridos nas linhas. As ligações estão limitadas a ligações unidireccionais um-para-um (ou seja, todas as ligações têm unicamente um recurso de origem e um de destino). Todas as ligações de SMIL são activadas pelo utilizador.
Tratamento de ligações em documentos incorporados
Devido a ser de natureza integradora, a apresentação de um documento em SMIL pode recorrer a outras aplicações ou suplementos (não-SMIL). Por exemplo: um navegador de SMIL pode utilizar um suplemento de HTML para apresentar uma página em HTML incorporada. Por sua vez, um navegador HTML poderá utilizar um suplemento de SMIL para apresentar, incorporado numa página em HTML, um documento em SMIL.
Neste tipo de apresentações, as ligações podem ser definidas pelos documentos a diferentes níveis, dando origem a conflitos. Neste caso, a ligação definida pelo documento-contentor toma precedência sobre a ligação definida pelo objecto incorporado. Repare-se que uma vez que isto pode exigir comunicação entre o navegador e o suplemento, as implementações de SMIL podem optar por não seguir esta recomendação.
Se uma ligação estiver definida num documento em SMIL, incorporado, o percorrer dessa ligação só afecta o documento em SMIL que está incorporado.
Se uma ligação estiver definida num documento não-SMIL que esteja incorporado num documento em SMIL, o percorrer dessa ligação só pode afectar a apresentação do objecto incorporado, nunca a do documento em SMIL que o contém. Este restrição poderá ser eliminada em versões futuras de SMIL.
Endereçamento
Em SMIL existe suporte para identificadores com fragmentos de nomes e o conector '#'. Isto significa que os posicionadores suportados em SMIL são idênticos aos que se utilizam actualmente em HTML (ou seja, utiliza posicionadores na forma "http://foo.pt/algo/caminho#ponto1").
Ligar a fragmentos em SMIL
Um posicionador que aponta para um documento em SMIL pode conter uma parte fragmentária (por ex.: http://www.w3.org/test.smi#par1). A parte fragmentária é um valor de identificação que identifica um dos elementos no interior do documento em SMIL que é referenciado. Se uma ligação que contenha uma parte fragmentária for percorrida, a apresentação deve iniciar-se como se o utilizador tivesse avançado rapidamente pela apresentação representada pelo documento de destino até chegar ao início concreto do elemento designado pelo fragmento.
Podem ocorrer os seguintes casos especiais:
A funcionalidade do elemento "a" é muito semelhante à do elemento "a" de HTML 4.0 [HTML40] . Em SMIL acrescenta-se um atributo"show" que controla o comportamento temporal da origem quando se percorre a ligação. Para efeitos de sincronização, o elemento "a" é transparente, ou seja, não influencia a sincronização dos elementos que lhe são dependentes. Os elementos "a" não podem ser colocados uns dentro dos outros nem cruzar-se. Um elemento "a" tem de possui um atributo href .
Atributos
O elemento "a" pode possuir os seguintes atributos:
O valor predefinido para "show" é "replace".
Conteúdo do elemento
O elemento "a" pode conter os seguintes dependentes:
Exemplos
Exemplo 1
A ligação inicia a apresentação nova, substituindo a apresentação que estava a ser reproduzida.
<a href="http://www.cwi.nl/noutrolugar.smi">
<video src="rtsp://foo.pt/grafismo.imf" region="l_window"/>
</a>
No exemplo dado, a segunda linha pode ser substituída por uma referência para qualquer sub-árvore válida de uma apresentação em SMIL.
Exemplo 2
A ligação inicia uma apresentação nova para além da que está a ser reproduzida.
<a href="http://www.cwi.nl/noutrolugar.smi" show="new">
<video src="rtsp://foo.pt/grafismo.imf" region="l_window"/>
</a>
Isto permite, por exemplo, que um reprodutor de SMIL lance um navegador de HTML.
Exemplo 3
A ligação inicia uma apresentação nova e interrompe a apresentação que estava a ser reproduzida.
<a href="http://www.cwi.nl/noutrolugar.smi" show="pause">
<video src="rtsp://foo.pt/grafismo.imf" region="l_window"/>
</a>
Exemplo 4
O exemplo seguinte contém uma ligação originária de uma apresentação A que liga ao interior de uma apresentação B. Este código executa a apresentação B a partir do início concreto do elemento com a identificação "seguinte".
Apresentação A:
<a href="http://www.cwi.nl/ApresentaçãoB#seguinte">
<video src="rtsp://foo.pt/grafismo.imf"/>
</a>
Apresentação B (http://www.cwi.nl/apresentação):
...
<seq>
<video src="rtsp://foo.pt/grafismo.imf"/>
<par>
<video src="rtsp://foo.pt/timbl.rm" region="l_window"/>
<video id="seguinte" src="rtsp://foo.pt/v1.rm" region="r_window"/>
^^^^^^^^^
<text src="rtsp://foo.pt/legendas1.html" region="l_2_title"/>
<text src="rtsp://foo.pt/legendas2.rtx" region="r_2_title"/>
</par>
</seq>
...
anchorA funcionalidade do elemento "a" é restrita, por só permitir associar uma ligação a um objecto multimédia completo. Os mapas de imagem, em HTML, demonstraram que é útil associar ligações a pedaços espaciais de um objecto. O elemento "anchor" (âncora) permite obter em SMIL uma funcionalidade semelhante:
Atributos
O elemento "anchor" pode possuir os seguintes atributos:
valor-de-coords ::= x-esquerdo "," y-superior "," x-direito "," y-inferior
Figura 4.5: Semântica do atributo "coords"
Exemplos
1) Associar ligações a pedaços espaciais
No exemplo que se segue, o espaço de ecrã ocupado pelo clip de vídeo é dividido em duas secções. A cada uma dessas secções é associada uma ligação diferente.
<video src="http://www.w3.org/MaterialInteressante"> <anchor href="http://www.w3.org/Audiovisual" coords="0%,0%,50%,50%"/> <anchor href="http://www.w3.org/Estilo" coords="50%,50%,100%,100%"/> </video>
2) Associar ligações a pedaços temporais
No exemplo que se segue, a duração de um clip de vídeo é dividida em dois sub-intervalos. A cada um desses sub-intervalos é associada uma ligação diferente.
<video src="http://www.w3.org/MaterialInteressante"> <anchor href="http://www.w3.org/Audiovisual" begin="0s" end="5s"/> <anchor href="http://www.w3.org/Estilo" begin="5s" end="10s"/> </video>
3) Passar para um pedaço de um objecto
O exemplo que se segue contém uma ligação a partir de um elemento de uma apresentação A até ao meio de um objecto de vídeo contido noutra apresentação B. O resultado é a reprodução da apresentação B a partir do segundo 5 do vídeo (ou seja, a apresentação inicia-se como se o utilizador tivesse avançado rapidamente a apresentação até alcançar o ponto em que se inicia o fragmento designado no vídeo "MaterialInteressante").
Apresentação A: <a href="http://www.cwi.nl/mm/ApresentaçãoB#tó"> <video id="grafismo" src="rtsp://foo.pt/grafismo.imf" region="l_window"/> </a> Apresentação B: <video src="http://www.w3.org/MaterialInteressante"> <anchor id="zé" begin="0s" end="5s"/> <anchor id="tó" begin="5s" end="10s"/> </video>
4) Combinar diferentes empregos das ligações
O exemplo seguinte mostra como as diferentes formas de utilização de ligações associadas podem ser combinadas.
Apresentação A:
<a href="http://www.cwi.nl/mm/ApresentaçãoB#tó">
<video id="grafismo" src="rtsp://foo.pt/grafismo.imf" region="l_window"/>
</a>
Apresentação B:
<video src="http://www.w3.org/MaterialInteressante">
<anchor id="zé" begin="0s" end="5s" coords="0%,0%,50%,50%"
href="http://www.w3.org/"/>
<anchor id="tó" begin="5s" end="10s" coords="0%,0%,50%,50%"
href="http://www.w3.org/Tó"/>
</video>
Um documento em SMIL 1.0 pode conter, opcionalmente, uma declaração de tipo de documento, que indica a declaração de tipo de documento (DTD) que é utilizada para o documento. Em SMIL, a declaração de tipo de documento deve ter o seguinte aspecto (as aspas podem ser substituídas por plicas):
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 1.0//EN"
"http://www.w3.org/TR/REC-smil/SMIL10.dtd">
A especificação de XML 1.0 fornece uma forma de expandir o DTD utilizando o elemento <!DOCTYPE>, para acrescentar conjuntos novos de definições de entidades, por exemplo. Os autores não devem utilizar esta funcionalidade em SMIL, visto que muitos reprodutores de SMIL não a suportarão.
O código que se segue é inválido em SMIL:
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 1.0//EN"
"http://www.w3.org/TR/REC-smil/SMIL10.dtd" [
<!ENTITY % SímbolosDaAcmeCorp PUBLIC
"-//Acme Corp//ENTITIES Símbolos da Empresa//EN"
"http://www.acme.pt/símbolos_da_empresa.xml"
>
%SímbolosDaAcmeCorp;
]>
<!--
Esta é a definição de tipo de documento (DTD), de XML, para SMIL 1.0.
Data: 1998/06/15 08:56:30
Autores:
Jacco van Ossenbruggen <jrvosse@cwi.nl>
Sjoerd Mullender <sjoerd@cwi.nl>
Mais informações acerca de SMIL estão disponíveis em:
http://www.w3.org/AudioVideo/
-->
<!-- Entidades de utilidade geral -->
<!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
">
<!--=================== Documento de SMIL =====================================-->
<!--
O elemento-raiz de SMIL, contém todos os outros elementos.
-->
<!ELEMENT smil (head?,body?)>
<!ATTLIST smil
%id-attr;
>
<!--=================== O cabeçalho do documento =================================-->
<!ENTITY % layout-section "layout|switch">
<!ENTITY % head-element "(meta*,((%layout-section;), meta*))?">
<!ELEMENT head %head-element;>
<!ATTLIST head %id-attr;>
<!--=================== Elemento "layout" ====================================-->
<!--
O "layout" contém os elementos "region" e "root-layout", definidos através de
smil-basic-layout ou de outros elementos definidos através de um mecanismo de
disposição externo.
-->
<!ELEMENT layout ANY>
<!ATTLIST layout
%id-attr;
type CDATA "text/smil-basic-layout"
>
<!--=================== Elemento "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;
>
<!--=================== Elemento "root-layout" ================================-->
<!ELEMENT root-layout EMPTY>
<!ATTLIST root-layout
%id-attr;
%title-attr;
%viewport-attrs;
%skip-attr;
>
<!--=================== Elemento "meta" =======================================-->
<!ELEMENT meta EMPTY>
<!ATTLIST meta
name NMTOKEN #REQUIRED
content CDATA #REQUIRED
%skip-attr;
>
<!--=================== O corpo do documento =================================-->
<!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;>
<!--=================== Atributos de sincronização ========================-->
<!ENTITY % sync-attributes "
begin CDATA #IMPLIED
end CDATA #IMPLIED
">
<!--=================== Atributos-parâmetros do "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
">
<!--=================== Atributo "fill" ====================================-->
<!ENTITY % fill-attribute "
fill (remove|freeze) 'remove'
">
<!--=================== O elemento paralelo ==============================-->
<!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;
>
<!--=================== O elemento sequencial ============================-->
<!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;
>
<!--=================== O elemento "switch" ================================-->
<!-- No cabeçalho, um comutador só pode conter elementos de disposição;
no corpo, só elementos-contentores. Contudo, não é possível expressar
esta limitação no DTD (?), pelo que aqui ambas as situações são possíveis:
-->
<!ENTITY % switch-content "layout|(%container-content;)">
<!ELEMENT switch (%switch-content;)*>
<!ATTLIST switch
%id-attr;
%title-attr;
>
<!--=================== Elementos que são objectos multimédia =============================-->
<!-- Em SMIL só se define a estrutura. Os dados multimédia são referenciados
pelo atributo "src" dos objectos multimédia.
-->
<!-- Além deste, constam deles os seguintes atributos, definidos
na especificação de 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;
">
<!--
A maior parte da informação encontra-se nos atributos: os objecto multimédia
encontram-se vazios ou contendo elementos de ligação associados:
-->
<!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;>
<!--=================== Elementos de ligação =====================================-->
<!ENTITY % smil-link-attributes "
%id-attr;
%title-attr;
href CDATA #REQUIRED
show (replace|new|pause) 'replace'
">
<!--=================== Elemento de ligação entre linhas ===============================-->
<!ELEMENT a (%schedule;|switch)*>
<!ATTLIST a
%smil-link-attributes;
>
<!--=================== Elemento de ligação associado ===========================-->
<!ELEMENT anchor EMPTY>
<!ATTLIST anchor
%skip-attr;
%smil-link-attributes;
%sync-attributes;
coords CDATA #IMPLIED
>
(não-normativo)
Futuramente, SMIL 1.0 pode-se expandir através de outra recomendação do W3C ou por expansões privadas.
Para estas expansões, recomenda-se aderência às seguintes regras:
Recomenda-se que os reprodutores de SMIL 1.0 estejam preparados para processar documentos que contenham expansões que obedeçam a ambas estas regras.
As expansões devem ser processadas utilizando um mecanismo de espaço de nomes de XML, assim que um tal mecanismo venha a ser uma recomendação da W3C. No restante desta secção, a sintaxe e a semântica dos espaços de nomes de XML definidas na nota [NAMESPACE] do W3C serão utilizadas apenas a título de exemplo.
Podem ocorrer os seguintes casos:
<?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>
<minhasmarcas:a ... />
...
</minhasmarcas:a>
<b>
...
</b>
</par>
</body>
</smil>
Quando o mecanismo de espaço de nomes de XML é utilizado para incluir elementos e
atributos de SMIL noutros documentos baseados em XML, recomenda-se a utilização do
seguinte identificador de espaço de nomes: http://www.w3.org/TR/REC-smil