Índice
As características multimédia da HTML permiten-lles aos autores incluir imaxes, applets (programas que se descarregan e rodan automaticamente na máquina do usuário), clips de video e outros documentos HTML nas suas páxinas.
Por exemplo, para incluir unha imaxe PNG nun documento, os autores poden escreber:
<BODY>
<P>Velaqui un primeiro plano do Gran Canón:
<OBJECT data="canon.png" type="image/png">
Este é un <EM>primeiro plano</EM> do Gran Canón.
</OBJECT>
</BODY>
As versións anteriores da HTML permitian-lles aos autores incluir imaxes (por meio IMG ) e applets (por meio de APPLET ). Estes elementos teñen várias limitacións:
Para confrontar estes temas, HTML 4 introduce o elemento OBJECT , que agora oferece unha solución ampla à inclusión de obxectos xenéricos. O elemento OBJECT permite que os autores de HTML especifiquen todo o que un obxecto requira para ser mostrado por un axente de usuário: código fonte, valores iniciais e dados de tempo de execución. Nesta especificación, o termo "obxecto" usa-se para descreber as cousas que a xente quere incluir nos documentos HTML; outros termos usados habitualmente para estas cousas son: applets, módulos, plug-ins, manipuladores de médios, etc.
Deste xeito, o novo elemento OBJECT subsume algunhas das tarefas realizadas por outros elementos existentes. Considere-se a seguinte tabela de funcionalidades:
| Tipo de inclusión | Elemento específico | Elemento xenérico |
|---|---|---|
| Imaxe | IMG | OBJECT |
| Applet | APPLET (Desaprovado ) | OBJECT |
| Outro documento HTML | IFRAME | OBJECT |
A tabela indica que cada tipo de inclusión ten unha solución específica e outra xeral. O elemento xenérico OBJECT servirá como solución para incorporar tipos de médios futuros.
Para incluir imaxes, os autores poden usar o elemento OBJECT ou o elemento IMG .
Para incluir applets , os autores deberian usar o elemento OBJECT , dado que elemento APPLET está desaprovado .
Para incluir un documento HTML noutro, os autores poden tanto usar o novo elemento IFRAME como o elemento OBJECT . Nos dous casos, o documento embedido permanece independente do documento principal. Os axentes de usuário poden mostrar o elemento embebido nunha xanela diferente dentro do documento principal. Consulte as notas sobre documentos embebidos para unha comparación entre OBJECT e IFRAME para inclusión de documentos.
As imaxes e outros obxectos incluídos poden ter hipervínculos asociados con eles, tanto através dos mecanismos de vinculación habituais, como tamén através de mapas de imaxes . Un mapa de imaxes especifica rexións xeométricas activas nun obxecto incluído e lle asigna un vínculo a cada rexión. Ao activá-los, estes vínculos poden facer que se recupere un documento, poden facer correr un programa no servidor, etc.
Nas seccións que seguen, tratamos os diversos mecanismos de que dispoñen os autores para a inclusión de multimédia e a creación de mapas de imaxes para esas inclusións.
<!-- Para evitar problemas con axentes de usuário de só texto,
asi como para facer o conteúdo das imaxes comprensíbel e
navegábel para os usuários con axentes de usuários non visuais,
ten que fornecer unha descrición con ALT e evitar mapas de imaxes do lado do servidor -->
<!ELEMENT IMG - O EMPTY -- Imaxe incluída -->
<!ATTLIST IMG
%attrs; -- %coreattrs, %i18n, %events --
src %URI; #REQUIRED -- URI de imaxe a incluir --
alt %Text; #REQUIRED -- descrición breve --
longdesc %URI; #IMPLIED -- vínculo a descrición longa
(complementa alt) --
name CDATA #IMPLIED -- nome da imaxe para scripts --
height %Length; #IMPLIED -- indicar o alto --
width %Length; #IMPLIED -- indicar o ancho --
usemap %URI; #IMPLIED -- usar un mapa de imaxes do lado do cliente --
ismap (ismap) #IMPLIED -- usar un mapa de imaxes do lado do servidor --
>
Etiqueta inicial: requerida, Etiqueta final: proibida
Definicións dos atributos
Atributos que se definen noutro lugar
O elemento IMG embebe unha imaxe no documento actual na localización da definición do elemento. O elemento IMG non ten conteúdo; substitue-se na liña pola imaxe designada co atributo src , sendo a exceición as imaxes aliñadas à esquerda ou à direita que se fan "flotar" fora da liña.
Nun exemplo anterior, definimos un vínculo cunha foto de família. Aqui insertamos a foto directamente no documento actual:
<BODY>
<P>Acabo de voltar das vacacións! Velaqui unha foto da miña família no lago:
<IMG src="http://www.unhaempresa.com/Xente/Ian/vacacions/familia.png"
alt="Foto da miña família no lago.">
</BODY>
Esta inclusión pode-se lograr tamén co elemento OBJECT como segue:
<BODY>
<P>Acabo de voltar das vacacións! Velaqui unha foto da miña família no lago:
<OBJECT data="http://www.unhaempresa.com/Xente/Ian/vacacions/familia.png"
type="image/png">
Foto da miña família no lago.
</OBJECT>
</BODY>
O atributo alt especifica un texto alternativo que se apresenta cando non se pode mostrar a imaxe (ver máis abaixo para información sobre como especificar un texto alternativo ). Os axentes de usuário deben mostrar un texto alternativo cando non aceiten imaxes, non aceiten determinado tipo de imaxe ou cando estiveren configurados para non mostrar imaxes.
O exemplo seguinte mostra como se pode usar o atributo longdesc para vincular cunha descrición máis longa.
<BODY>
<P>
<IMG src="mapadositio.gif"
alt="Mapa do Sítio de HP Labs"
longdesc="mapadositio.html">
</BODY>
O atributo alt fornece unha descrición breve da imaxe. Isto deberia ser suficiente para permitir-lles aos usuários decidir se queren seguir o vínculo dado polo atributo longdesc , neste caso "mapadositio.html".
Consulte a sección sobre apresentación visual de obxectos, imaxes e applets para máis información sobre tamaño, aliñamento e bordes.
<!ELEMENT OBJECT - - (PARAM | %flow;)*
-- obxecto embebido xenérico -->
<!ATTLIST OBJECT
%attrs; -- %coreattrs, %i18n, %events --
declare (declare) #IMPLIED -- declarar mais non crear --
classid %URI; #IMPLIED -- identifica unha implementación --
codebase %URI; #IMPLIED -- URI base para for classid, data, archive--
data %URI; #IMPLIED -- referéncia aos dados do obxecto --
type %ContentType; #IMPLIED -- tipo de conteúdo dos dados --
codetype %ContentType; #IMPLIED -- tipo de conteúdo do código --
archive CDATA #IMPLIED -- lista de URI separados por espazos --
standby %Text; #IMPLIED -- mensaxe para mostrar ao carregar --
height %Length; #IMPLIED -- indicar o alto --
width %Length; #IMPLIED -- indicar o ancho --
usemap %URI; #IMPLIED -- usar un mapa de imaxes do lado do cliente client-side image map --
name CDATA #IMPLIED -- remeter como parte dun formulário --
tabindex NUMBER #IMPLIED -- posición na orde de tabulación --
>
Etiqueta inicial: requerida, Etiqueta final: requerida
Definicións dos atributos
Atributos que se definen noutro lugar
A maioria dos axentes de usuário teñen mecanismos incorporados para mostrar tipos de dados comuns, como texto, imaxes GIF, cores, tipos de letras e unha variedade de elementos gráficos. Para mostraren tipos de dados que non aceiten en princípio, os axentes de usuário normalmente fan correr aplicativos externos. O elemento OBJECT permite-lles aos autores controlar se os dados deberian ser mostrados externamente ou con algun programa, especificado polo autor, que mostre os dados dentro do axente de usuário.
No caso máis xeral, un autor pode necesitar especificar tres tipos de información:
O elemento OBJECT permite que os autores especifiquen os tres tipos de dados, mais os autores non teñen que especificá-los os tres a un tempo. Por exemplo, alguns obxectos poden non requerir dados (p.ex., unh applet completo que realiza unha animación pequena). Outros poden non requerir información de implementación adicional, isto é, o axente de usuário mesmo pode saber xa como mostrar ese tipo de dados (p.ex., imaxes GIF).
Os autores especifican a implementación dun obxecto e a localización dos dados que se han de mostrar mediante o elemento OBJECT . Para especificar valores de tempo de execución, porén, os autores usan o elemento PARAM , que se trata na sección sobre inicialización de obxectos.
O elemento OBJECT pode aparecer tamén no conteúdo do elemento HEAD . Dado que os axentes de usuário normalmente non mostran os elementos do cabezallo ( HEAD ), os autores deberian-se asegurar de que nengun elemento OBJECT de HEAD especifique conteúdo que poida ser mostrado. Consulte a sección sobre exemplos de como incluir o elemento OBJECT no elemento HEAD .
Consulte a sección sobre contróis de formulários para información sobre os elementos OBJECT nos formulários.
Este documento non especifica o comportamento dos elementos OBJECT que usan o atributo tanto o atributo classid para identificar unha implementación como o atributo data para especificar dados para esa implementación. Para asegurar-se a portabilidade, os autores deberian usar o elemento PARAM para indicar-lles às implementacións onde recoller dados adicionais.
Un axente de usuário debe mostrar un elemento OBJECT dacordo coas seguintes regras de precedéncia:
Os autores non deberian incluir conteúdo nos elementos OBJECT que aparezan no elemento HEAD .
No exemplo seguinte, inserimos un applet dun relóxio analóxico nun documento mediante o elemento OBJECT . O applet, escrito na linguaxe Python, non require dados adicionais ou valores de tempo de execución. O atributo classid especifica a localización do applet:
<P><OBJECT classid="http://www.miamachina.it/reloxioanaloxico.py">
</OBJECT>
Observe-se que o relóxio se mostrará axiña que o axente de usuário interprete esta declaración OBJECT . É posíbel adiar a representación dun obxecto declarando primeiro o obxecto (descrito máis abaixo).
Os autores deberian completar esta declaración incluindo un texto alternativo como conteúdo de OBJECT por se o axente de usuário non pode representar o relóxio.
<P><OBJECT classid="http://www.miamachina.it/reloxioanaloxico.py">
Reloxio animado.
</OBJECT>
Unha consecuéncia significativa do deseño do elemento OBJECT é que oferece un mecanismo para especificar representacións de obxectos alternativas; cada declaración OBJECT alternativa pode especificar tipos de conteúdo alternativos. Se un axente de usuário non pode mostrar o OBJECT máis externo, tenta mostrar o conteúdo, que poden ser outro elemento OBJECT , etc.
No exemplo seguinte, embebemos várias declaracións OBJECT para ilustrar como funcionan as representacións alternativas. Un axente de usuário tentará mostrar o primeiro elemento OBJECT se pode, na seguinte orde: (1) un applet Terra escrito na linguaxe Python, (2) unha animación MPEG da Terra, (3) unha imaxe GIF da terra, (4) texto alternativo.
<P> <!-- Primeiro, tenta o applet Python -->
<OBJECT title="A Terra vista desde o espazo"
classid="http://www.observer.mars/ATerra.py">
<!-- Se non, tenta o video MPEG -->
<OBJECT data="ATerra.mpeg" type="application/mpeg">
<!-- Se non, tenta a imaxe GIF-->
<OBJECT data="ATerra.gif" type="image/gif">
<!-- Se non, mostra o texto -->
A <STRONG>Terra</STRONG> vista desde o espazo.
</OBJECT>
</OBJECT>
</OBJECT>
A declaración exterior especifica un applet que re non require dados ou valores iniciais. A segunda declaración especifica unha animación MPEG e, dado que non define a localización dunha implementación que trate MPEG, confia no axente de usuário para tratar a animación. Tamén indicamos o atributo type para que un axente de usuário que saiba que non pode mostrar MPEG non se moleste en traer "ATerra.mpeg" da rede. A terceira declaración especifica a localización dun ficheiro GIF e fornece texto alternativo no caso de que fallen todos os demáis mecanismos.
Dados na liña frente a externos. Os dados que haxa que mostrar poden-se fornecer de duas maneiras: na liña e dunha fonte externa. Mentres que o primeiro método normalmente producirá unha representación máis rápida, non é conveniente ao mostrar cantidades grandes de dados.
Velaqui un exeemplo que ilustra como se lle poden pasar dados na liña a un OBJECT :
<P>
<OBJECT id="reloxio1"
classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502"
data="data:application/x-oleobject;base64, ...base64 data...">
Un relóxio.
</OBJECT>
Consulte a sección sobre representación visual de obxectos, imaxes e applets para información sobre tamaño, aliñamento e bordes de obxectos.
<!ELEMENT PARAM - O EMPTY -- valor de propriedade con nome -->
<!ATTLIST PARAM
id ID #IMPLIED -- id único para todo o documento --
name CDATA #REQUIRED -- nome da propriedade --
value CDATA #IMPLIED -- valores da propriedade --
valuetype (DATA|REF|OBJECT) DATA -- Como interpretar os valores --
type %ContentType; #IMPLIED -- tipo de conteúdo para o valor
cando valuetype=ref --
>
Etiqueta inicial: requerida , Etiqueta final: proibida
Definicións dos atributos
Atributos que se definen noutro lugar
Os elementos PARAM especifican un conxunto de valores que poden ser requeridos por un obxecto durante o seu tempo de execución. Pode aparecer calquer número de elementos PARAM no conteúdo dun elemento OBJECT ou APPLET , en calquer orde, mais deben ir colocados no comezo do conteúdo do elemento OBJECT or APPLET que os engloba.
Asume-se que a sintaxe dos nomes e valores é comprendida pola implementación do obxecto. Este documento non especifica como deberian os axentes de usuário recuperar os pares nome/valor nen como deberian interpretar nomes de parámetros que aparezan duas veces.
Tornamos ao exemplo do relóxio para ilustar o uso de PARAM : supoña que o applet pode tratar dous parámetros de tempo de execución que definen a sua altura e ancho iniciais. Podemos designar as dimensións iniciais como 40x40 píxeis con dous elementos PARAM.
<P><OBJECT classid="http://www.miamachina.it/reloxioanaloxico.py">
<PARAM name="alto" value="40" valuetype="data">
<PARAM name="ancho" value="40" valuetype="data">
Este axente de usuário non pode mostrar aplicacións Python.
</OBJECT>
No exemplo seguinte, os dados de tempo de execución para o parámetro "Val_iniciais" do obxecto especifican-se como un recurso externo (un ficheiro GIF). O valor do atributo valuetype fai-se asi "ref" e o value é un URI que designa o recurso.
<P><OBJECT classid="http://www.cousasderegalo.com/aplicacionderegalo"
standby="A carregar Elvis...">
<PARAM name="Val_iniciais"
value="./imaxes/elvis.gif">
valuetype="ref">
</OBJECT>
Observe-se que tamén indicamos o atributo standby para que o axente de usuário poida mostrar unha mensaxe mentres o mecanismo de representación se carrega.
Cando se mostra un elemento OBJECT , os axentes de usuário deben procurar o conteúdo só para os elementos PARAM que son fillos directos e "pasar-llos" ao OBJECT .
Asi, no exemplo seguinte, se se mostra "obx1", "param1" aplica-se a "obx1" (e non "obj2"). Se "obx1" non se mostra e "obx2" si, ignora-se "param1"e "param2" aplica-se a "obx2". Se non se mostrar nengun OBJECT , non se aplica nengun PARAM ..
<P>
<OBJECT id="obx1">
<PARAM name="param1">
<OBJECT id="obx2">
<PARAM name="param2">
</OBJECT>
</OBJECT>
A localización da implementación dun obxecto dá-se como un URI. Como se dixo na Introdución aos URI , o primeiro segmento dun URI absoluto especifica o esquema de nomes usado para transferir os dados designados polo URI. Para os documentos HTML, este esquema é habitualmente "http". Alguns applets poden empregar outros esquemas de nomes. Por exemplo, ao especificar un applet Java, os autores poden usar URI que comecen con "java" e para applets ActiveX, os autores poden usar "clsid".
No seguinte exemplo, inserimos un applet Java nun documento HTML.
<P><OBJECT classid="java:program.start">
</OBJECT>
Ao incluir o atributo codetype , un axente de usuário pode decidir se recuperar unha aplicación Java baseado na sua capacidade de facé-lo.
<OBJECT codetype="application/java-archive"
classid="java:program.start">
</OBJECT>
Alguns esquemas de representación requiren información adicional para identificar a sua implementación e hai-lles que indicar onde atopar esa información. Os autores poden dar información do camiño à implementación do obxecto mediante o atributo codebase.
<OBJECT codetype="application/java-archive"
classid="java:program.start">
codebase="http://foooo.bar.com/java/aminhaimplementacion/"
</OBJECT>
O exemplo seguinte exemplifica (co atributo classid ) un obxecto ActiveX mediante un URI que comeza co esquema de nomes "clsid". O atributo data localiza os dados que hai que mostrar (outro relóxio).
<P><OBJECT classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502"
data="http://www.acme.com/ole/reloxio.stm">
Non se pode usar esta aplicación.
</OBJECT>
Para declarar un obxecto de maneira que non se execute ao ser lido polo axente de usuário, inclua o atributo booleano declare no elemento OBJECT . Ao mesmo tempo, os autores deben identificar a declaración asignando o atributo id do elemento OBJECT a un valor único. As creacións posteriores do obxecto referirán-se a este identificador.
Un OBJECT declarado debe aparecer nun documento antes da primeira aparición dese OBJECT .
Un obxecto definido co atributo declare crea-se cada vez que un elemento que se refire a ese obxecto requira que se mostre (p.ex. activa-se un vínculo que se refire a el, activa-se un obxecto que se refire a el, etc.).
No seguinte exemplo, declaramos un OBJECT e facemos que se cree referindo-nos a el desde un vínculo. Asi, o obxecto pode-se activar facendo clic sobre un texto resaltado, por exemplo.
<P><OBJECT declare
id="terra.declaration"
data="ATerra.mpeg"
type="application/mpeg">
A <STRONG>Terra</STRONG> vista desde o espazo.
</OBJECT>
...máis abaixo no documento... <P>Interesante <A href="#terra.declaration"> animación da Terra!</A>
O exemplo seguinte ilustra como especificar valores de tempo de execución que son outros obxectos. Neste exemplo, enviamos texto (de feito, un poema) a un mecanismo hipotético para ver poemas. O obxecto recoñece un parámetro de tempo de execución chamado "fonte" (para, por exemplo, mostrar o texto do poema nun tipo de letra determinado). O valor deste parámetro é el mesmo un obxecto que insire (mais que non mostra) o obxecto fonte. A relación entre o obxecto fonte e o visualizador de poemas consegue-se (1) asignando-lle o "tribuno" id à declaración do obxecto fonte e (2) referindo-o desde o elemento PARAM do obxecto visualizador de poemas (con valuetype e value).
<P><OBJECT declare
id="tribuno"
type="application/x-webfont"
data="tribuno.gif">
</OBJECT>
...ver o poema en KublaKhan.txt aqui... <P><OBJECT classid="http://foo.bar.com/visualizador_poemas" data="KublaKhan.txt"> <PARAM name="fonte" valuetype="object" value="#tribuno"> <P>Estás-te a perder un visualizador de poemas estupendo... </OBJECT>
Os axentes de usuário que non aceiten o atributo declare deben mostrar os conteúdos da declaración OBJECT.
Ver a DTD transicional para a definición formal.
Definicións dos atributos
Cando se "deserializa" o applet, invoca-se o método start() mais non o método init().Os atributos válidos cando se serializou o obxecto inicial non se restauran. Todos os atributos pasados a ese APPLET estarán disponíbeis para o applet. Os autores deberian usar esta característica con moito coidado. Un applet deberia ser detido antes de que se serialice.
Un dos dous, code ou object , debe estar presente. Se se dan os dous, code e object , é un erro se fornecen nomes de clases diferentes.
Atributos que se definen noutro lugar
Este elemento, aceitado por todos os navegadores que dispoñen de Java, permite-lles aos deseñadores embeber un applet Java nun documento HTML. Foi desaprovado en favor do elemento OBJECT .
O conteúdo do elemento APPLET actua como información alternativa para axentes de usuário que non aceiten este elemento ou que actualmente estexan configurados para non aceitar applets. Os axentes de usuário deben ignorar o conteúdo de non ser asi.
EXEMPLO DESAPROVADO:
No seguinte exemplo, o elemento
APPLET
inclui un applet Java no documento. Dado que non se fornece
codebase
, asume-se que o applet está no mesmo directório que o
documento actual.
<APPLET code="Burbullas.class" width="500" height="500">
Applet Java que deseña burbullas animadas.
</APPLET>
Este exemplo pode ser ré-escrito con OBJECT como segue:
<P><OBJECT codetype="application/java"
classid="java:Burbullas.class"
width="500" height="500">
Applet Java que deseña burbullas animadas.
</OBJECT>
Poden-se-lle pasar os valores iniciais ao applet mediante o elemento PARAM .
EXEMPLO DESAPROVADO:
O applet Java seguinte:
<APPLET code="AudioItem" width="15" height="15">
<PARAM name="snd" value="Ola.au|Benvida.au">
Applet Java que toca un son de benvida.
</APPLET>
pode-se ré-escreber como segue con OBJECT :
<OBJECT codetype="application/java"
classid="AudioItem"
width="15" height="15">
<PARAM name="snd" value="Ola.au|Benvida.au">
Applet Java que toca un son de benvida.
</OBJECT>
Un documento embebido é completamente independente do documento no que vai incluído. Por exemplo, os URI relativos dentro do documento embebido resolven-se dacordo co URI base do documento embebido, non do documento principal. Un documento embebido só se mostra dentro doutro documento (p.ex., unha sub-xanela); doutro modo fica independente.
Por exemplo, a liña seguinte embebe os conteúdos de embebe_me.html na localización na que aparece a definición OBJECT .
...texto anterior... <OBJECT data="embebe_me.html">
Atención: embebe_me.html non se pudo incluir.
</OBJECT>
...texto posterior...
Lembre que os conteúdos de OBJECT só se deben mostrar se o non se pode carregar o ficheiro especificado polo atributo data .
Non se define o comportamento dos axentes de usuário nos casos nos que un ficheiro se inclui a si mesmo.
Un mapa de imaxes crea-se asociando un obxecto a unha especificación de áreas xeométricas do obxecto sensíbeis.
Hai dous tipos de mapas de imaxes: