V tomto díle seriálu o XHTML si ukážeme element object, který představuje základní mechanismus pro vkládání externích objektů (obrázky, zvuk, video…) do stránky.

Element object – vkládání externích objektů

Povolený obsah: (#PCDATA | param | %block; | form | %inline; | %misc;)*

Atributy:

%attrs;
Tato parametrická entita obsahuje další parametrické entity:
%coreattrs; (atributy id, class, style a title),
%i18n; (atributy lang, xml:lang a dir) a
%events; (atributy onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown a onkeyup).
declare       (declare)       #IMPLIED
Pokud je tento boolean-atribut přítomen, je stávající element považován pouze za deklarační – k jeho aktivování musí být vyvolán některým z následujících elementů object.
codebase       %URI;       #IMPLIED
Tento atribut může specifikovat URI, od kterého budou potom odvozována relativní URI v atributech archive, classid a data. Pokud není nastaven, je s relativními URI v těchto atributech nakládáno běžným způsobem.
data       %URI;       #IMPLIED
Tento atribut udává URI adresu souboru s objektem, který má být nahrán. Jeho hodnotou mohou být i data samotná (např. kód v nějakém jazyce), ale tento postup není příliš častý a ani vám ho nedoporučuji – interpret XHTML v takovém případě musí přenést všechna data, ať s nimi umí či neumí nakládat, ať je smí či nesmí stahovat…
type       %ContentType;       #IMPLIED
Pomocí tohoto atributu můžete nastavit MIME-typ dat specifikovaných atributem data. Měli byste ho používat vždy, když je specifikován atribut data, aby interpret XHTML nestahoval data, s kterými neumí nakládat. Pokud server vrátí v HTTP hlavičce jiný MIME-typ než zde nastavený, má tato HTTP hlavička přednost.
classid       %URI;       #IMPLIED
Tento atribut může být použit k udání URI adresy implementace objektu.
codetype       %ContentType;       #IMPLIED
Tento atribut udává MIME-typ dat, která jsou specifikována atributem classid. Jeho používání není nutné, ale je silně doporučováno v případě, že je classid použit. Pokud není zadán, předpokládá se, že je tato hodnota stejná jako u atributu type.
archive       %UriList;       #IMPLIED
Hodnotou tohoto atributu je mezerami oddělený seznam URI, na kterých se nachází archivy k danému objektu – např. doplňující data, která by si objekt při svém běhu vyžádal. Tímto způsobem mohou být přednahrány a poté již uživatel nemusí na jejich nahrávání čekat.
standby       %Text;       #IMPLIED
Tento atribut může specifikovat text, který má interpret předložit uživateli při nahrávání objektu.
width       %Length;       #IMPLIED
Tento atribut specifikuje šířku objektu při vizuálním výstupu. Tato šířka je buď obyčejné číslo a udává hodnotu v pixelech nebo číslo následované znakem % – v tom případě se použije procentuální část dostupné šířky. Pokud je šířka menší či větší než je skutečná šířka objektu, musí být objekt odpovídajícím způsobem zmenšen/zvětšen. Tento atribut byste již neměli příliš používat, ale nahradit ho ve stylech nebo ponechat objektu jeho opravdovou šířku. Užitečnost atributu spočívá hlavně v tom, že prohlížeč může pro objekt rezervovat místo, i když není ještě nahraný, a pokračovat bez obav v zobrazování stránky.
height       %Length;       #IMPLIED
Tento atribut je shodný s atributem width, ale vztahuje se k výšce.
usemap       %URI;       #IMPLIED
Hodnotou tohoto atributu je odkaz na image-mapu, pokud má objekt jako image-mapa sloužit. Image-mapa se definuje buď v externím souboru (v tom případě je hodnotou URI adresa tohoto souboru) nebo přímo v dokumentu – potom je hodnotou odkaz na element map (o tom si ale ještě povíme v příštím dílu).
name       NMTOKEN       #IMPLIED
Tento atribut udává jméno elementu pro případ, že by byl tento element odesílán formulářem (k formulářům se ještě v našem seriálu dostaneme).
tabindex       %Number;       #IMPLIED
Pomocí tohoto atributu můžete změnit pořádek procházení dokumentu klávesnicí. Jeho popisu jsme se již věnovali v části o odkazech.

Element object v XHTML 1.0 Strict DTD

Jak už jsme si řekli, element object je základním mechanismem XHTML pro vkládání externích objektů. Jedná se o element párový, přičemž jeho obsahem je v podstatě parametrická entita %Flow;, zde navíc obohacená o speciální element param, který umožňuje nastavit vstupní parametry objektu (za chvilku si ho představíme). Uvnitř elementu object by se měl nacházet alternativní obsah pro případ, že interpret XHTML nemůže nebo neumí interpretovat objekt, na který se object odkazuje (definování alternativního obsahu se budeme věnovat v příštím dílu). Tento alternativní obsah by se ale nikdy neměl vyskytovat, pokud se element object nachází v sekci head dokumentu (zde se objekt může pouze inicializovat).

Většina vizuálních prohlížečů umí sama o sobě zobrazovat základní externí objekty – např. obrázky ve webových formátech PNG, JPEG a GIF nebo textové soubory. K vložení dalších objektů již prohlížeč většinou spouští externí aplikaci. Pomocí elementu object můžete sami definovat, jaká externí aplikace se má použít (pomocí atributu classid), případně můžete nastavit samotný spustitelný soubor, který se má zobrazit.

Nyní dva příklady na využití elementu object:

<object classid=’http://www.miamachina.it/analogclock.py‘>Analogové hodiny</object>

Tento příklad jsem si vypůjčil ze specifikace HTML 4.01. Vidíte zde, jak je předáván pouze osamocený spustitelný applet (v jazyce Python). V uživatelově prohlížeči může být ale spouštění takových souborů z bezpečnostních důvodů zakázáno. Pokud byste chtěli poskytnout opravdu dobrou alternativu, mohli byste v tomto případě nechat generovat serverovým skriptem do tohoto elementu aktuální čas. Další možností je ale např. poskytnout animaci analogových hodin pomocí jiných formátů:

<object classid=’http://www.miamachina.it/analogclock.py‘>
  <object data=’hodiny.mpeg‘ type=’video/mpeg‘>
    <object data=’hodiny.gif‘ type=’image/gif‘>
    Analogové hodiny
    </object>
  </object>
</object>

V tomto příkladě krásně vidíte, jak lze využít toho, že, pokud nelze nahrát objekt, vyzkouší se obsah elementu object. Zde se nejprve interpret XHTML pokusí nahrát soubor v Pythonu, poté video ve formátu MPEG (to by zobrazil pomocí programu, který má definován ve svém nastavení), poté obrázek GIF a až jako poslední se zobrazí alternativní text posledního objectu.

Element param – inicializace objektu

Povolený obsah: EMPTY (žádný obsah)

Atributy:

id       ID       #IMPLIED
Obsahem tohoto atributu je jméno elementu.
name       CDATA       #IMPLIED
Tento atribut obsahuje jméno parametru, který objektu předáváme. Ten by měl takový parametr očekávat a znát, na něm také záleží jestli jsou jeho jméno a hodnota citlivé na velikost písmen.
value       CDATA       #IMPLIED
Hodnota nastavovaného parametru.
valuetype       (data|ref|object)       'data'
Tento atribut udává typ hodnoty parametru, který předáváme. Možnosti jsou tyto tři:

  • data – hodnota bude po svém vyhodnocení parserem předána objektu jako řetězec
  • ref – hodnotou je URI adresa zdroje, kde se nacházejí parametry objektu
  • object – hodnotou je odkaz na v dokumentu dříve deklarovaný objekt. Hodnotou atributu value musí v tomto případě být hodnota atributu id tohoto objektu předcházená znakem #.
type       %ContentType;       #IMPLIED
Pokud je atribut valuetype nastaven na ref, potom tento atribut udává MIME-typ dat, který se nachází na předávané URI adrese.

Element param v XHTML 1.0 Strict DTD

Element param slouží k předání parametrů objektu či aplikaci, kterou vkládáme pomocí elementu object. Může se jednat např. o informace o tom, kde má začít přehrávání videoklipu, jak hlasitý má být zvuk u audio souboru apod. Jména i hodnoty parametrů záleží na konkrétní aplikaci.

Všechny elementy param se musí nacházet na začátku obsahu elementu object, ještě před jakýmkoli alternativním obsahem – v případě více objectů vnořených v sobě patří param vždy k tomu, jehož je dítětem (v němž je přímo vnořen). Nyní příklad:

<object data=’video.mpeg‘ type=’video/mpeg‘>
  <param name=’start‘ value=’5′ />
  <param name=’loop‘ value=’true‘ />
Videozáznam z naší dovolené.
</object>

Parametry, které zde aplikaci předáváme, jsou samozřejmě pouze fiktivní – u skutečných aplikací budou pravděpodobně jiné.

Jmenná schémata objektů

Nyní bych se chtěl ještě zastavit u atributu classid – můžete v něm použít URI začínající jak na klasická schémata (např. http), tak i URI se speciálními schématy – např. java pro Java Applety nebo clsid pro ActiveX komponenty. Pokud se program navíc nachází na nějakém URI, můžete použít toto schéma ve spojení s atributem codebase. Příklad:

<object classid=’java:program.start‘ codetype=’application/java-archive‘ codebase=’http://applets.com/code/‘ standby=’Probíhá nahrávání… Prosím čekejte.‘>
… alternativní obsah …
</object>

Předdeklarace objektu

V XHTML můžete také objekt předdeklarovat (tzn. že se nahraje, připraví k použití, ale ještě není spuštěn) a později se na něj v dokumentu odkazovat – to má výhodu v tom, že se objekt nahraje jen jednou a použít v dokumentu ho můžete kolikrát chcete. Předdeklarace objektu se provádí nastavením atributu declare a pojmenováním tohoto objektu pomocí atributu id:

<object declare=’declare‘ id=’muj_objekt‘ … ></object>
<!– Tato předdeklarace se může vyskytovat i v sekci head. –>

Poté se na tento objekt můžete odkazovat buď pomocí klasických odkazů (zde použijete odkaz na jeho id):

<a href=’#muj_objekt‘ … > … </a>

nebo z něj pomocí elementu param získat vstupní parametry jiného objektu:

<object … >
<param name=’parametr‘ value=’#muj_objekt‘ valuetype=’object‘>
… alternativní obsah …
</object>

Jak vidíte, element object nabízí poměrně rozsáhlé možnosti využití. Můžete ho použít jak k obecnému vložení nějakého objektu do stránky (kdy udáte pouze soubor s daty a jejich typ, interpret pak použije implicitní aplikaci k manipulaci s nimi), tak k zavolání aplikace uložené na serveru nebo specifické pro nějaký prohlížeč (např. ActiveX) – v tomto případě již definujete danou aplikaci a případně i vstupní parametry. Ať už ho ale využijete jakkoli, vždy byste se měli přesvědčit o dostatečné podpoře dané aplikace, plug-inu, objektu apod. v prohlížečích vašich uživatelů, protože tato oblast na tom není z hlediska kompatibility zrovna nejlépe.

Odkazy a zdroje

  • Bye Bye Embed – Elizabeth Castro (Interval.cz, 21. 7. 2006)

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět