13 Oggetti, immagini e applet

Argomenti

  1. Introduzione agli oggetti, immagini e applet
  2. Includere un'immagine: l'elemento IMG
  3. Inclusione generica: l'elemento OBJECT
    1. Regole per rendere gli oggetti
    2. Inizializzazione degli oggetti: l'elemento PARAM
    3. Schemi globali di denominazione per gli oggetti
    4. Dichiarazioni e istanziazioni degli oggetti
  4. Includere un'applet: l'elemento APPLET
  5. Note sui documenti incorporati
  6. Immagini sensibili
    1. Immagini sensibili sul lato client: gli elementi MAP e AREA
    2. Immagini sensibili sul lato server
  7. Visualizzazione di oggetti, immagini e applet
    1. Larghezza e altezza
    2. Spazio bianco attorno agli oggetti e alle immagini
    3. Bordi
    4. Allineamento
  8. Come specificare il testo alternativo

13.1 Introduzione agli oggetti, immagini e applet

Le caratteristiche multimediali dell'HTML consentono agli autori di includere immagini, applet (programmi che vengono automaticamente scaricati ed eseguiti sulla macchina dell'utente), video e altri documentoi HTML nelle loro

Per esempio, per includere un'immagine PNG in un documento, gli autori possono scrivere:


<BODY>
<P>Questo è un primo piano del Grand Canyon:
<OBJECT data="canyon.png" type="image/png">
Questo è un <EM>primo piano</EM> del Grand Canyon.
</OBJECT>
</BODY>

Le versioni precedenti dell'HTML consentivano agli autori di includere immagini (per mezzo di IMG) e applet (per mezzo di APPLET). Questi elementi hanno parecchi limiti:

Per ovviare a questi inconvenienti, l'HTML 4.0 introduce l'elemento OBJECT, che offre una soluzione multifunzionale al problema dell'inclusione generica. L'elemento OBJECT consente agli autori di HTML di specificare tutto ciò che è richiesto da un oggetto per la sua rappresentazione da parte dell'agente di un utente: codice-sorgente, valori iniziali e dati di run-time. In questa specificazione, il termine "oggetto" è usato per descrivere le cose che la gente vuole mettere nei documentoi HTML; altri termini comunemente usati per queste cose sono: applet, plug-in, gestori di media etc.

In questo modo il nuovo elemento OBJECT si assume i compiti svolti da altri elementi esistenti. consideri il seguente specchietto delle funzionalità:

Tipo di inclusione Elemento specifico Elemento generico
Immagine IMG OBJECT
Applicazione APPLET (disapprovato.) OBJECT
Un altro documento HTML IFRAME OBJECT

Lo specchietto indica che ogni tipo di inclusione ha una soluzione specifica e una generale. L'elemento generico OBJECT servirà come soluzione per implementare futuri tipi di media.

Per includere immagini, gli autori possono usare l'elementoOBJECT o l'elemento IMG.

Per includere applet, gli autori dovrebbero usare l'elemento OBJECT dato che l'elemento APPLET è disapprovato.

Per includere un documento HTML in un altro, gli autori possono usare sia il nuovo elemento IFRAME o l'elemento OBJECT. In entrambi casi, il documento incorporato resta independente dal documento principale. I browser visuali possono presentare il documento incorporato in una finestra distinta all'interno del documento. Consultare le note sui documenti incorporati per un paragone di OBJECT e IFRAME per l'inclusione dei documenti.

Le immagini e gli altri oggetti inclusi possono essere associati a collegamenti sia tramite il meccanismo di collegamento standard, sia anche attraverso immagini sensibili. Una immagine sensibile specifica regioni geometriche attive di un oggetto incluso e assegna un collegamento ad ognuna di tali regioni. Quando attivati, questi collegamenti possono far caricare un documento, eseguire un programma sul server etc.

Nei paragrafi seguenti discutiamo i vari meccanismi disponibili agli autori per includere elementi multimediali e creare immagini sensibili per quegli inserimenti.

13.2 Includere un'immagine: l'elemento IMG


<!-- Per evitare problemi ai browser testuali e anche per
   rendere comprensibile e navigabile
   ai browser non visuali, è neccessario provvedere
   una descrizione con ALT ed evitare immagini sensibili sul lato server -->
<!ELEMENT IMG - O VUOTO                -- Immagine incorporata -->
<!ATTLIST IMG
  %attrs;                              -- %coreattrs, %i18n, %events --
  src         %URI;          #REQUIRED -- URI dell'immagine da includere --
  alt         %Text;         #REQUIRED -- descrizione breve --
  longdesc    %URI;          #IMPLIED  -- collegamento alla descrizione estesa
                                          (è di complemento ad alt) --
  height      %Length;       #IMPLIED  -- dimensionamento in altezza --
  width       %Length;       #IMPLIED  -- dimensionamento in ampiezza --
  usemap      %URI;          #IMPLIED  -- usa immagine sensibile sul lato client --
  ismap       (ismap)        #IMPLIED  -- immagine sensibile sul lato server --
  >

Tag iniziale: richiesto, Tag finale: proibito

Definizioni degli attributi

src = uri [CT]
Questo attributo specifica la locazione della risorse d'immagini. Esempi di formati d'immagine ampiamente riconosciuti sono GIF, JPEG e PNG.
longdesc = uri [CT]
Questo attributo specifica un collegamento a una descrizione lunga dell'immagine. Questa descrizione dovrebbe integrare la descrizione breve fornita usando l'attributo alt. Quando l'immagine ha associata una immagine sensibile, questo attributo dovrebbe fornire informazioni circa i contenuti della immagine sensibile. È particolarmente importante per le immagini sensibili sul lato server.

Attributi definiti altrove

L'elemento IMG incorpora un'immagine nel documento corrente alla posizione indicata nella definzione. IMG non ha contenuto; è di solito rimpiazzato alla linea dall'immagine indicata dall'attributo src; fanno eccezione le immagini allineate a destra o a sinistra che sono "sospese" fuori

In un esempio precedente avevamo definito un collegamento a una foto di famiglia. Qui inseriamo una foto direttamente nel documento corrente:


<BODY>
<P>Sono appena tornato dalle vacanze! Ecco una foto della mia famiglia al lago:
<IMG src="http://www.somecompany.com/People/Ian/vacation/family.png"
     alt="Una foto della mia famiglia al lago.">
</BODY>

Tale inclusione può essere ottenuta anche coll'elemento OBJECT come segue:


<BODY>
<P>Sono appena tornato dalle vacanze! Ecco una foto della mia famiglia al lago:
<OBJECT data="http://www.somecompany.com/People/Ian/vacation/family.png"
        type="image/png">
Una foto della mia famiglia al lago.
</OBJECT>
</BODY>

L'attributo alt specifica un testo alternativo che viene reso quando l'immagine non può essere visualizzata (vedere sotto le informazioni su come specificare un testo alternativo). Gli interpreti devono visualizzare il testo alternativo quando non supportano le immagini, non supportano un certo tipo di immagine o quando sono configurati per non visualizzare le immagini.

L'esempio seguente mostra come l'attributo longdesc può essere usato per collegare una descrizione più completa:


<BODY>
<P>
<IMG src="sitemap.gif"
     alt="Mappa del sito degli HP Labs"
     longdesc="sitemap.html">
</BODY>

L'attributo alt fornisce una descrizione breve dell'immagine. Dovrebbe essere sufficiente per permettere agli utenti di decidere se vogliono seguire il collegamento indicato dall'attributo longdesc a una descrizione più estesa, in questo caso "sitemap.html".

Si prega di consultare il paragrafo sulla visualizzazione degli oggetti, immagini e applet per informazioni su dimensioni, allineamento e bordi delle immagini.

13.3 Inclusione generica: l'elemento OBJECT


<!ELEMENT OBJECT - - (PARAM | %flow;)*
 -- oggetto generico incorporato -->
<!ATTLIST OBJECT
  %attrs;                              -- %coreattrs, %i18n, %events --
  declare     (declare)      #IMPLIED  -- dichiara, ma non istanzia flag --
  classid     %URI;          #IMPLIED  -- identifica un'implementazione --
  codebase    %URI;          #IMPLIED  -- URI di base per classid, data, archive--
  data        %URI;          #IMPLIED  -- riferimento ai dati dell'oggetto --
  type        %ContentType;  #IMPLIED  -- tipo di contenuto per i dati --
  codetype    %ContentType;  #IMPLIED  -- tipo di contenuto per il codice --
  archive     %URI;          #IMPLIED  -- lista di archivi separata da spazi --
  standby     %Text;         #IMPLIED  -- messaggio da mostrare durante il caricamento --
  height      %Length;       #IMPLIED  -- altezza di sovrapposizione --
  width       %Length;       #IMPLIED  -- ampiezza di sovrapposizione --
  usemap      %URI;          #IMPLIED  -- immagine sensibile sul lato client --
  name        CDATA          #IMPLIED  -- inviare come parte di un modulo --
  tabindex    NUMBER         #IMPLIED  -- posizione nell'ordine di tabulazione --
  >

Tag iniziale: richiesto, Tag finale: richiesto

Definizioni degli attributi

classid = uri [CT]
Questo attributo può essere usato per specificare la locazione dell'implementazione di un oggetto per via di un URI. Può essere usato insieme con o in alternativa all'attributo data a seconda del tipo di oggetto in questione.
codebase = uri [CT]
Questo attributo specifica il percorso di base usato per gli URI relativi specificati dall'attributo classid, data e archive. Quando assente, il suo valore predefinito è l'URI di base del documento corrente.
codetype = content-type [CI]
Questo attributo specifica il tipo di contenuto dei dati che ci si aspetta quando si scarica un oggetto specificato da classid. Questo attributo è opzionale, raccomandato quando classid è specificato dato che permette all'utente di evitare di caricare informazioni relative a tipi di contenuto non supportati. Quando è assente, assume il valore predefinito dell'attributo type.
data = href="../types.html#type-uri">uri [CT]
Questo attributo può essere usato per specificare la locazione dei dati di un oggetto, per esempio i dati di un'immagine per oggetti che definiscono un'immagine o, più in generale, una maschera serializzata dì un oggetto che può essere usata per ricrearlo. Se fornito come URI relativo, dovrebbe essere interpretato come relativo all'attributo codebase.
type = content-type [CI]
Questo attributo specifica il tipo di contenuto per i dati specificati da data. Questo attributo è opzionale, ma raccomandato, quando data è specificato dato che permette all'agente dell'utente di evitare di caricare informazione relativa ai tipi di contenuto non supportati.
archive = uri list [CT]
Questo attributo può essere usato per specificare una lista separata da spazi di URI per archivi contenenti risorse rilevanti per l'oggetto, che possono includere le risorse specificate dagli attributi classid e data. Precaricare gli archivi si tradurrà generalmente in un tempo di caricamento ridotto per gli oggetti. Gli archivi specificati come URI relativi dovrebbero essere interpretati come relativi all'attributo codebase.
declare [CI]
Quando è presente, questo attributo booleano rende la definizione corrente di OBJECT un semplice dichiarazione. L'oggetto deve essere istanziato da una successiva definizione OBJECT riferita a questa dichiarazione.
standby = text [CS]
Questo attributo specifica un messaggio che un interprete può rendere mentre carica i dati e l'implementazione dell'oggetto.

Attributi definiti altrove

La maggior parte degli interpreti hanno meccanismi interni per rendere tipi di dati comuni come testo, immagini GIF, colori, font e certuni elementi grafici. Per rendere tipi di dati che non supportano nativamente, gli interpreti generalmente eseguono applet esterne. L'elemento OBJECT permette agli autori di controllare se i dati debbano essere resi esternamente da un qualche programma, specificato dall'autore che restituisce i dati all'interno dell'interprete.

Nel caso più generale, un autore può avere bisogno di specificare tre tipi di informazione:

L'elemento OBJECT permette agli autori di specificare tutti e tre i tipi di dati, ma gli autori possono non dovere specificarli tutti e tre allo stesso tempo. Per esempio, alcuni oggetti possono non richiedere alcuni dati (ad es. un'applet in sé conclusa che produce una piccola animazione). Altri possono non richiedere inizializzazione d'esecuzione. Ancora, altri possono non richiedere informazione addizionale di implementazione, cioè, l'interprete stesso può già sapere come rendere quel tipo di dati (ad es. immagini GIF).

Gli autori specificano un'implementazione dell'oggetto e la locazione dei dati da rendere tramite l'elemento OBJECT. Per specificare i valori di esecuzione, comunque, gli autori usano l'elemento PARAM, che è discusso nel paragrafo inizializzazione degli oggetti.

L'elemento OBJECT può apparire anche contenuto dell'elemento HEAD. Dato che gli interpreti generalmente non rendono elementi nell'HEAD, gli autori dovrebbero assicurarsi che ognuno degli elementi OBJECT nell'HEAD non specifichino contenuto da rendere. Si prega di consultare il paragrafo sulla condivisione di dati tra frame data per un esempio di come includere un elemento OBJECT nell'elemento HEAD.

Si prega di consultare il paragrafo controlli del modulo per informazioni su elementi OBJECT nelle

13.3.1 Regole per rendere gli oggetti

Un interprete deve interpretare un elemento OBJECT secondo le seguenti regole di precedenza:

  1. L'interprete deve prima tentare di rendere l'oggetto. Non dovrebbe rendere i contenuti dell'elemento, ma deve esaminarli nel caso che un elemento contenga un elementi "figli" diretti che siano elementi PARAM (vedere inizializzazione degli oggetti) o elementi MAP (vedere immagini sensibili sul lato client).
  2. Se l'interprete non è in grado di rendere l'oggetto per una qualunque ragione (non configurato per mancanza risorse, architettura errata etc.), deve tentare di rendere i suoi contenuti.

Gli autori non dovrebbero includere contenuto negli elementi OBJECT che compaiono nell'elemento HEAD.

Nell'esempio seguente, inseriamo un'applet di orologio analogico in un documento tramite l'elemento OBJECT. L'applet, scritta in linguaggio Python, non richiede dati aggiuntivi per i valori di esecuzione. L'attributo classid specifica la locazione dell'applet:

    

<P><OBJECT classid="http://www.miamacchina.it/analogclock.py">

</OBJECT>

Si noti che l'orologio sarà visualizzato non appena l'interprete elabora questa dichiarazione OBJECT. È possibile ritardare la resa di un oggetto dichiarando prima l'oggetto (come descritto sotto).

Gli autori dovrebbero completare questa dichiarazione includendo testo alternativo come contenuto dell'OBJECT nel caso l'interprete non possa rendere l'orologio.

    

<P><OBJECT classid="http://www.miamacchina.it/analogclock.py">
Un orologio animato.
</OBJECT>

Una conseguenza significativa della struttura dell'elemento OBJECT è che offre un meccanismo per specificare visualizzazioni alternative per l'oggetto; ciascuna dichiarazione di OBJECT incorporato può specificare alternativi tipi di contenuto. Se un interprete non può rendere l'OBJECT più esterno, tenta di rendere i contenuti, che possono essere un altro elemento OBJECT etc.

Nell'esempio seguente, incorporiamo parecchie dichiarazioni OBJECT per illustrare come funzionano le rese alternative. Un interprete cercherà di rendere il primo elelemnto OBJECT che può, nel seguente ordine: (1) un'applet Terra scritta in linguaggio Python, (2) un'animazione MPEG della Terra, (3) un'immagine GIF della Terra, (4) testo alternativo.


<P>                 <!-- Prima, prova coll'applet in Python-->
<OBJECT title="La Terra vista dallo spazio" 
        classid="http://www.observer.mars/TheEarth.py">
                    <!-- Altrimenti, prova col video MPEG  -->
  <OBJECT data="TheEarth.mpeg" type="application/mpeg">
                    <!-- Altrimenti, prova coll'imagine GIF 
    <OBJECT data="TheEarth.gif" type="image/gif">
                    <!-- Altrimenti visualizza il testo -->
     La <STRONG>Terra</STRONG> vista dallo spazio.
    </OBJECT>
  </OBJECT>
</OBJECT>

La dichiarazione più esterna specifica un'applet che non richiede dati o valori iniziali. La seconda dichiarazione specifica un'animazione MPEG e, dato che non definisce una locazione di implementazione per gli MPEG, si affida all'interprete per gestire l'animazione. Abbiamo impostato anche l'attributo type così che l'interprete che sappia che non può rendere gli MPEG non perderà tempo a recuperare "TheEarth.mpeg" dalla rete. La terza dichiarazione specifica la locazione del file GIF e fornisce del testo alternativo in caso tutti gli altri meccanismi falliscano.

Dati in linea piuttosto che esterni. I dati da rendere possono essere forniti in due modi: contestualmente e da una risorsa esterna. Mentre il primo metodo generalmente porterà a una resa più rapida, non è conveniente quando si debba rendere una grande quantità di dati.

Ecco un esempio che illustra come dati contestuali possano essere passati a un OBJECT:


<P>
<OBJECT id="clock1"
        classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502"
        data="data:application/x-oleobject;base64, ...base64 data...">
    Un orologio.
</OBJECT>

Si prega di consultare il paragrafo sulla visualizzazione di oggetti, immagini e applet per informazioni sulle dimensioni, l'allineamento e i bordi di un oggetto.

13.3.2 Inizializzazione degli oggetti: l'elemento PARAM


<!ELEMENT PARAM - O VUOTO              -- valore di proprietà denominato -->
<!ATTLIST PARAM
  id          ID             #IMPLIED  -- identificativo unico per tutto il documento --
  name        CDATA          #REQUIRED --nome di proprietà --
  value       CDATA          #IMPLIED  -- valore di proprietà --
  valuetype   (DATA|REF|OBJECT) DATA   -- Come interpretare il valore --
  type        %ContentType;  #IMPLIED  -- tipo di contenuto per il valore
                                          quando valuetype=ref --
  >

Tag iniziale: richiesto, Tag finale: proibito

Definizioni degli attributi

name = cdata
Questo attributo definisce il nome di un parametro run-time che si assume noto all'oggetto inserito. Se il nome della sia sensibile alle maiuscole dipende dalla implementazione specifica dell'oggetto.
value = cdata
Questo attributo specifica il valore di un parametro di esecuzione specificato da name. I valori della proprietà non hanno significato per l'HTML; il loro significato è determinato dall'oggetto in questione.
valuetype = data|ref|object [CI]
Questo attributo specifica il tipo dell'attributo value. Valori possibili:
  • data: Questo è il valore predefinito per l'attributo. Significa che il valore specificato da value sarà valutato e passato all'implementazione dell'oggetto come stringa.
  • ref: Il valore speficicato da value è un URI che designa una risorsa dove i valori di esecuzione sono salvati. Ciò permette agli strumenti di supporto di indentificare gli URI dati come parametri. L'URI deve essere passato all'oggetto così com'è, cioè, non risolto.
  • object: Il valore specificato davalue è un identifcativo che si riferisce a una dichiarazione OBJECT nello stesso documento. L'identifcativo deve essere il valore dell'attributo id impostato per l'elemento OBJECT dichiarato.
type = content-type href="../types.html#case-insensitive">[CI]
Questo attributo specifica il tipo di risorsa designata dall'attributo value solo nel caso in cui valuetype sia impostato su "ref". Questo attributo così specifica all'interprete, il tipo di valori che si troveranno all'URI designato da value.

Attributi definiti altrove

Gli elementi PARAM specificano un insieme di valori che può essere richiesto da un oggetto al momento dell'esecuzione. Un numero qualunque di elementi PARAM può comparire nel contenuto di un elemento OBJECT o APPLET, in qualunque ordine, ma deve essere posto all'inizio del conteunto dell'elemento OBJECT o APPLET che li include.

La sintassi dei nomi e dei valori si assume sia intesa dall'implementazione dell'oggetto. Questo documento non specifica come gli interpreti dovrebbero recuperare le coppie nome/valore né come dovrebbero interpretare i nomi dei parametri che compaiono due volte.

Torniamo all'esempio dell'orologio per illustrare l'uso di PARAM: supponiamo che l'applet sia in grado di gestire due parametri di esecuzione che definiscono la sua inziale altezza e ampiezza. Possiamo impostare le dimensioni iniziali a 40x40 pixel con due elementi PARAM.

    

<P><OBJECT classid="http://www.miamacchina.it/analogclock.py">
<PARAM name="height" value="40" valuetype="data">
<PARAM name="width" value="40" valuetype="data">
Questo interprete non può rendere le applet in Python.
</OBJECT>

Nell'esempio seguente, i dati di esecuzione per il parametro "Init_values" dell'oggetto sono specificati come risorsa esterna (un file GIF). Il valore dell'attributo valuetype è così impostato a "ref" e il value è un URI che designa la risorsa.


<P><OBJECT classid="http://www.gifstuff.com/gifappli"
       standby="Carica Elvis...">
<PARAM name="Init_values"
       value="./images/elvis.gif">
       valuetype="ref">
</OBJECT>

Si noti che abbiamo anche impostato l'attributo standby in modo tale che l'interprete possa restituire un messaggio mentre il meccanismo di visualizzazione carica.

Quando un elemento OBJECT viene visualizzato, gli interpreti devono cercare il contenuto solo per quegli elementi PARAM che sono "figli" diretti e passarli all'OBJECT.

Perciò, nell'esempio seguente, se "obj1" viene reso, "parama1" si applica a "obj1" (e non a "obj2"). Se "obj1" non viene reso e "obj2" sì, "param1" viene ignorato e "param2" si applica a "obj2". Se nessuno dei due OBJECT viene reso, nessuno dei due PARAM si applica.


<P>
<OBJECT id="obj1">
   <PARAM name="param1">
   <OBJECT id="obj2">
      <PARAM name="param2">
   </OBJECT>
</OBJECT>

13.3.3 Schemi globali di denominazione per gli oggetti

La locazione dell'implementazione di un oggetto è data da un URI. Come abbiamo discusso nell'introduzione agli URI, il primo segmento di un URI assoluto specifica lo schema di denominazione usato per trasferire i dati designati dall'URI. Per i documenti HTML questo schema frequentemente è "http". Alcune applet potrebbero impiegare altri schemi di denominazione. Per esempio, specificando un'applet Java, gli autori possono usare URI che comincino con "java" e per i controlli ActiveX, gli autori possono usare "clsid".

Nell'esempio seguente, inseriamo un'applet Java in un documento HTML.


<P><OBJECT classid="java:program.start">
</OBJECT>

Impostando l'attributo codetype, un interprete può decidere se recuperare l'applet Java in base alla sue possibilità di farlo.


<OBJECT codetype="application/java-archive"
        classid="java:program.start">
</OBJECT>

Alcuni schemi di visualizzazione richiedono informazioni addizionali per identificare la loro implementazione e devono essere istruiti su dove trovare questa informazione. Gli autori possono dare l'informazione di percorso all'implementazione dell'oggetto tramite l'attributo codebase.


<OBJECT codetype="application/java-archive"
        classid="java:program.start">
        codebase="http://foooo.bar.com/java/myimplementation/"
</OBJECT>

L'esempio seguente specifica (coll'attributo classid) un oggetto ActiveX tramite un URI che comincia con uno schema di denominazione "clsid". L'attributo data localizza i dati da rendere (un altro orologio).


<P><OBJECT classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502"
        data="http://www.acme.com/ole/clock.stm">
Questa applet non è supportata.
</OBJECT>

13.3.4 Dichiarazioni e istanziazioni degli oggetti

Gli esempi precedenti hanno solo illustrato definizioni isolate d'oggetti. Quando un documento deve contenere più di un'istanza dello stesso oggetto, è possibile separare la dichiarazione di un oggetto dalle sue istanziazioni. Così facendo si hanno diversi vantaggi:

Per dichiarare un oggetto in modo che non sia eseguito, quando letto da un interprete, impostare l'attributo booleano declare nell'elemento OBJECT. Allo stesso tempo, gli autori devono identificare la dichiarazione, impostando l'attributo id nell'elemento OBJECT su un valore unico. Le istanziazioni successive dell'oggetto faranno riferimento a questo identificativo.

Un OBJECT dichiarato deve comparire in un documento prima della prima istanza di tale OBJECT.

Un oggetto definito coll'attributo declare è istanziato ogni volta che l'elemento che si riferisce a tale oggetto richiede che sia reso (ad es. un collegamento che vi si riferisce è attivato etc.).

Nell'esempio seguente, dichiariamo un OBJECT e lo facciamo istanziare facendovi riferimento da un collegamento. Così, l'oggetto può essere attivato cliccando su del testo evidenziato, per esempio.


<P><OBJECT declare
        id="earth.declaration" 
        data="TheEarth.mpeg" 
        type="application/mpeg">
   La <STRONG>Terra</STRONG> vista dallo spazio.
</OBJECT>
...il resto del documento...
<P>Una graziosa <A href="#earth.declaration"> animazione della Terra!</A>

L'esempio seguente illustra come specificare i valori di esecuzione che sono altri oggetti. In questo esempio, inviamo del testo (una poesia, nella fattispecie) ad un ipotetico meccanismo per visionare poesie. L'oggetto riconosce un parametro di esecuzione chiamato "carattere" (diciamo, per rendere il testo della poesia con un determinato carattere). Il valore di questo parametro è in sé un oggetto che inserisce (ma non rende) l'oggetto carattere. La relazione fra l'oggetto carattere e l'oggetto che visiona la poesia messa in atto (1) assegnando l'id "tribune" alla dichiarazione dell'oggetto carattere e (2) riferendosi ad esso dall'elemento PARAM dell'oggetto che visiona la poesia (con valuetype e value).


<P><OBJECT declare
     id="tribune"
     type="application/x-webfont"
     data="tribune.gif">
</OBJECT>
...veduta del poema in KublaKhan.txt qui...
<P><OBJECT classid="http://foo.bar.com/poem_viewer" 
           data="KublaKhan.txt">
<PARAM name="font" valuetype="object" value="#tribune">
<P>Vi siete persi un visore di poesie molto carino ...
</OBJECT>

Gli interpreti che non supportano l'attributo declare devono rendere i contenuti della dichiarazione di OBJECT.

13.4 Includere un'applet: l'elemento APPLET

APPLET (con tutti i suoi attributi) è disapprovato in favore di OBJECT.

Vedere la DTD Transitoria per la definizione formale.

Definizioni degli attributi

codebase = uri [CT]
Questo attributo specifica l'URI di base per l'applet. Se questo attributo non è specificato, allora preimposta lo stesso URI di base del documento corrente. I valori per quest'attributo possono solo riferirsi alle sottodirectory della directory che contiene il documento corrente.
code = cdata [CS]
Questo attributo specifica sia il nome del file della classe che contiene la sottoclasse dell'applet compilata dell'applet o il percorso per raggiungere la classe, includendo il file di classe stesso. Viene interpretato in relazione al codebase dell'applet. Uno dei due fra code e object deve essere presente.
name = cdata [CS]
Questo attributo specifica un nome per l'istanza dell'applet, che rende possibile alle applet sulla stessa pagina di trovare (e comunicare con) l'una con l'altra.
archive = uri-list [CT]
Questo attributo specifica una lista separata da virgole di URI per archivi contenenti classi ed altre risorse che saranno "precaricate". Le classi sono caricate usando un'istanza di un AppletClassLoader col codebase dato. Gli URI relativi agli archivi sono interpretati in relazione al codebase dell'applet. Precaricare le risorse può significativamente migliorare le prestazione delle applet.
object cdata [CS]
Questo attributo denomina una risorsa che contiene la rappresentazione serializzata dello stato di un'applet. Viene intepretato relativamente al codebase dell'applet. I dati serializzati contengono il nome di classe dell'applet, ma non l'implementazione. Il nome di classe è usato per recuperare l'implementazione da un file di classe o da un archivio.

Quando l'applet è "deserializzata" il metodo start() è invocato, ma non il metodo init(). Attributi validi quando l'oggetto originale era serializzato non sono ripristinati. Ogni attributo passato a questa istanza di APPLET saranno disponibili all'applet. Gli autori dovrebbero usare questa possibilità con estrema cautela. Un'applet dovrebbe essere fermata prima che sia serializzata.

O code o object devono essere presenti. Se entrambi code e object sono dati, ne risulta un errore se indicano differenti nomi di classe.

width = length [CI]
Questo attributo specifica l'ampiezza iniziale dell'area in cui l'applet viene visualizzata (escludendo ogni finestra o dialogo che l'appplet crei).
height = length [CI]
Questo attributo specifica l'altezza iniziale dell'area in cui l'applet viene visualizzata (escludendo ogni finestra o dialogo che l'appplet crei).

Attributi definiti altrove

Questo elemento, supportato da tutti i browser compatibili con Java, permette ai progettisti di incorporare un'applet a Java applet in un documento HTML. È stato disapprovato in favore dell'elemento OBJECT.

Il contenuto dell'elemento APPLET agisce come informazione alternativa per gli interpreti che non supportano questo elemento o sono correntemente configurati per non supportare le applet. Altrimenti, gli interpreti devono ignorare il contenuto.

ESEMPIO DISAPPROVATO:
Nell'esempio seguente, l'elemento APPLET include un'applet Java nel documento. Dal momento che nessun codebase è fornito, si assume che l'applet sia nella stessa directory del documento corrente.


<APPLET code="Bubbles.class" width="500" height="500">
Applet Java che disegna bolle animate.
</APPLET>

Questo esempio può essere riscritto come segue con OBJECT :


<P><OBJECT codetype="application/java"
        classid="java:Bubbles.class"
        width="500" height="500">
Applet Java che disegna bolle animate.
</OBJECT>

I valori iniziali possono essere forniti all'applet tramite l'elemento PARAM.

ESEMPIO DISAPPROVATO:
La seguente applet Java d'esempio:


<APPLET code="AudioItem" width="15" height="15">
<PARAM name="snd" value="Hello.au|Welcome.au">
Applet Java che emette un saluto di benvenuto.
</APPLET>

Può essere riscritto come segue con OBJECT:


<OBJECT codetype="application/java"
        classid="AudioItem" 
        width="15" height="15">
<PARAM name="snd" value="Hello.au|Welcome.au">
Applet Java che emette un saluto di benvenuto.
</OBJECT>

13.5 Note sui documenti incorporati

Tavolta, piuttosto che un collegamento a un documento, un autore può volerlo incorporare direttamente in un documento HTML primario. Gli autori possono usare sia l'elemento IFRAME che l'elemento OBJECT a questo proposito, ma gli elementi differiscono per certi versi. Non solo i due elementi hanno diversi modelli di contenuto, l'elemento IFRAME può essere la destinazione di un frame (vedi il paragrafo su come specificare l'informazione sulla destinazione dei frame per dettagli) e può essere "selezionato" da un interprete, come fosse il focus, per la stampa, la visione del sorgente HTML etc. Gli interpreti possono rendere gli elementi dei frame selezionati in modi che li distinguano dai frame non selezionati (ad es., disegnando un bordo attorno al frame selezionato).

Un documento incorporato è interamente indipendente dal documento in cui è incorporato. Per esempio, gli URI relativi all'interno del documento incorporato si risolvono secondo l'URI di base del documento incorporato, non di quello dell'intero documento. Un documento incorporato è reso solo all'interno di un altro documento (ad es., in una sottofinestra); per il resto rimane independente.

Per esempio, la riga seguente incorpora i contenuti di incorporami.html alla locazione in cui ricorre la definizione di OBJECT.


...testo che viene prima...
<OBJECT data="incorporami.html">
Attenzione: incorporami.html potrebbe non incorporarsi.
</OBJECT>
...testo che viene dopo...

Si tenga presente che i contenuti di un OBJECT devono solo essere resi se il file specificato dall'attributo data non possono essere caricati.

Il comportamento di un interprete nei casi in cui un file include se stesso non è definito.

13.6 Immagini sensibili

Le immagini sensibili permettono agli autori di specificare regioni di un'immagine o un oggetto e assegnano un'azione specifica ad ogni regione (ad es., recupera un documento, esegui un programma etc.) quando la regione è attivata da un utente, l'azione è eseguita.

Una immagine sensibile si crea associando a un oggetto una specificazione di aree geometriche sensibili sull'oggetto.

Ci sono due tipi di immagini sensibili:

Le immagini sensibili sul lato client sono preferite a quelle sul lato server per almeno due ragioni: sono accessibili a chi naviga con interpreti non grafici e offrono un riscontro immediato al dubbio se il puntatore sia o meno sulla regione attiva.

13.6.1 Immagini sensibili sul lato client: gli elementi MAP e AREA


<!ELEMENT MAP - - ((%block;)+ | AREA+) -- immagine sensibile sul lato client-->
<!ATTLIST MAP
  %attrs;                              -- %coreattrs, %i18n, %events --
  name        CDATA          #REQUIRED -- per referenza da usemap --
  >

Tag iniziale: richiesto, Tag finale: richiesto


<!ELEMENT AREA - O VUOTO               -- area di immagine sensibile sul lato client  -->
<!ATTLIST AREA
  %attrs;                              -- %coreattrs, %i18n, %events --
  shape       %Shape;        rect      -- interpretazione di coordinate --
  coords      %Coords;       #IMPLIED  -- lista di lunghezze separate da virgola --
  href        %URI;          #IMPLIED  -- URI per risorsa collegata --
  nohref      (nohref)       #IMPLIED  -- questa regione non ha azioni --
  alt         %Text;         #REQUIRED -- descrizione breve --
  tabindex    NUMBER         #IMPLIED  -- posizione in ordine di tabulazione (TAB) --
  accesskey   %Character;    #IMPLIED  -- tasti di scelta rapida per l'accessibilità --
  onfocus     %Script;       #IMPLIED  -- l'elemento è ottiene il focus --
  onblur      %Script;       #IMPLIED  -- l'elemento perde il focus --
  >

Tag iniziale: richiesto, Tag finale: proibito

MAP - Definizioni degli attributi

name = cdata [CI]
Questo attributo assegna un nome alla mappa sensibile definita da un elemento MAP.

AREA - Definizioni degli attributi

shape = default|rect|circle|poly [CI]
Questo attributo specifica la forma di una regione. Valori possibili:
  • default: specifica l'intera regione.
  • rect: definisce una regione rettangolare.
  • circle: definisce una regione circolare.
  • poly: definisce una regione poligonale.
coords coordinates [CN]
Questo atributo specifica la posizione di una forma sullo schermo. Il numero e l'ordine dei valori dipende sulla forma che viene definita. Combinazioni
  • rect: sinistra-x, sopra-y, destra-x, sotto-y.
  • circle: centro-x, centro-y, raggio. Nota. Quando il valore del raggio è in percentuale, gli interpreti dovrebbero calcolare il valore finale del raggio basato sull'altezza e l'ampiezza associate all'oggetto. Il raggio dovrebbe essere il valore più piccolo delle due.
  • poly: x1, y1, x2, y2, ..., xN, yN.

Le coordinate sono relative al lato superiore sinistro dell'oggetto. Tutti i valori sono lunghezze. Tutti i valori sono separati da virgole.

nohref [CI]
Quando è impostato, questo attributo booleano specifica che una regione non ha associato alcun collegamento.

Attributo per associare un'immagine sensibile ad un elemento

usemap = uri [CT]
Questo attributo associa un'immagine sensibile ad un elemento. L'immagine sensibile è definita da un elemento MAP. Il valore di usemap deve coincidere col valore dell'attributo name dell'elemento associato MAP.

Attributi definiti altrove

L'elemento MAP specifica un'immagine sensibile sul lato client che può essere associata ad uno o più elementi (IMG, OBJECT, o INPUT). Una immagine sensibile è associata ad un elemento tramite l'attributo usemap

La presenza dell'attributo usemap per un OBJECT implica che l'oggetto che viene incluso è un'immagine. Per di più, quando l'elemento OBJECT ha associata un'immagine sensibile sul lato client, gli interpreti possono implementare l'interazione dell'utente coll'elemento OBJECT esclusivamente nei termini della immagine sensibile sul lato client. Questo permette agli interpreti (come un browser audio o un robot) di interagire coll'elemento OBJECT senza doverlo processare; l'interprete può anche scegliere di non recuperare (o processare) l'oggetto. Quando un OBJECT ha associata un'immagine sensibile, gli autori non dovrebbero aspettarsi che l'oggetto sarà recuperato o processato da ogni interprete.

Ognuno degli elementi MAP può contenere entrambi o uno solo dei seguenti:

  1. Uno o più elementi AREA. Questi elementi non hanno contenuto, ma specificano le regioni geometriche della immagine sensibile e il collegamento associato ad ogni regione. Si noti che quando si usa questo metodo, l'elemento MAP non ha contenuto da rendere. Perciò, gli autori devono provvedere testo alternativo per ognuno degli elementi AREA coll'attributo alt (vedere sotto per informazioni sul come specificare testo alternativo).
  2. Contenuto a livello blocco. Questo contenuto dovrebbe includere elementi A che specifichino le regioni geometriche della immagine sensibile e il collegamento associato ad ogni regione. Si noti che quando si usa questo metodo, il contenuto dell'elemento MAP può essere reso dall'interprete. Gli autori dovrebbero usare metodo per creare documenti più accessibili.

Se due o più regioni definite si sovrappongono, l'elemento di definizione di regione che compare per primo nel documento ha la precedenza (cioè, corrisponde all'input dell'utente).

Gli interpreti e gli autori dovrebbero offrire alternative testuali alle immagini sensibili grafiche per i casi in cui la grafica non è disponibile o l'utente non può accedervi. Per esempio, gli interpreti possono usare il testo in alt per creare collegamenti testuali in luogo di un'immagine sensibile grafica. Tali collegamenti possono essere attivati in una varietà di modi (tastiera, attivazione vocale etc).

Nota. MAP non è compatibile all'indietro coi browser HTML 2.0.

Esempi di immagini sensibili sul lato client 

Nell'esempio seguente, creiamo un'immagine sensibile sul lato client per l'elemento OBJECT. Non vogliamo rendere i contenuti della immagine sensibile quando l'elemento OBJECT è reso, così "nascondiamo" l'elemento MAP all'interno del contenuto dell'elemento OBJECT . Di conseguenza, i contenuti dell'elemento MAP saranno resi solo se l'elemento OBJECT non può essere reso.


<HTML>
   <HEAD>
      <TITLE>Il sito carino!</TITLE>
   </HEAD>
   <BODY>
     <P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1">
     <MAP name="map1">
       <P>Naviga il sito:
       <A href="guide.html" shape="rect" coords="0,0,118,28">Guida all'accesso</a> |
       <A href="shortcut.html" shape="rect" coords="118,0,184,28">Vai</A> |
       <A href="search.html" shape="circle" coords="184,200,60">Cerca</A> |
       <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,276,0">Top Ten</A><
     </MAP>
     </OBJECT>
   </BODY>
</HTML>

Possiamo volere rendere i contenuti della immagine sensibile anche quando un interprete può rendere l'OBJECT. Per esempio possiamo volere associare un'immagine sensibile con un elemento OBJECT e includere una barra di testo di navigazione in fondo alla pagina. Per farlo, definiamo l'elemento MAP all'esterno dell'OBJECT:


<HTML>
   <HEAD>
      <TITLE>Il sito carino!</TITLE>
   </HEAD>
   <BODY>
     <P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1">
     </OBJECT>

     ...qui il resto della pagina...

     <MAP name="map1">
       <P>Naviga il sito:
       <A href="guide.html" shape="rect" coords="0,0,118,28">Guida all'accesso</a> |
       <A href="shortcut.html" shape="rect" coords="118,0,184,28">Vai</A> |
       <A href="search.html" shape="circle" coords="184,200,60">Cerca</A> |
       <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,276,0">Top Ten</A>
     </MAP>
   </BODY>
</HTML>

Nell'esempio seguente, creiamo una immagine sensibile simile, questa volta usando l'elemento AREA. Si noti l'uso di testo alt :


<P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1">
   <P>Questa è una barra di navigazione.
   </OBJECT>

<MAP name="map1">
 <AREA href="guide.html" 
          alt="Guida all'accesso" 
          shape="rect" 
          coords="0,0,118,28">
 <AREA href="search.html" 
          alt="Cerca" 
          shape="rect" 
          coords="184,0,276,28">
 <AREA href="shortcut.html" 
          alt="Vai" 
          shape="circle"
          coords="184,200,60">
 <AREA href="top10.html" 
          alt="Top Ten" 
          shape="poly" 
          coords="276,0,373,28,50,50,276,0">
</MAP>

Qui c'è una versione simile usando l'elemento IMG invece di OBJECT (con la stessa dichiarazione MAP ):


<P><IMG src="navbar1.gif" usemap="#map1" alt="barra di navigazione">

L'esempio seguente illustra come le immagini sensibili possano essere condivise.

Gli elementi OBJECT annidati sono utili per provvedere un ripiego nel caso un interprete non supporti certi formati. Per esempio:


<P>
<OBJECT data="navbar.png" type="image/png">
  <OBJECT data="navbar.gif" type="image/gif">
    Testo descrittivo dell'immagine...
  </OBJECT>
</OBJECT>

Se l'interprete non supporta il formato PNG, cerca di rendere l'immagine GIF. Se non supporta i GIF (ad es., è un interprete a base vocale), si imposta sulla descrizione testuale provvista come contenuto dell'elemento OBJECT più all'interno. Quando gli elementi OBJECT sono annidati in questo modo, gli autori possono condividere le immagini sensibili fra questi:


<P>
<OBJECT data="navbar.png" type="image/png" 
  <OBJECT data="navbar.gif" type="image/gif" usemap="#map1">
     <MAP name="map1">
     <P>Naviga il sito:
      <A href="guide.html" shape="rect" coords="0,0,118,28">Guida all'accesso</a> |
      <A href="shortcut.html" shape="rect" coords="118,0,184,28">Va</A> |
      <A href="search.html" shape="circle" coords="184,200,60">Cerca</A> |
      <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,276,0">Top Ten</A>
     </MAP>
  </OBJECT>
</OBJECT>

L'esempio seguente illustra come i riferimenti possano essere specificati per creare zone inattive dentro un'immagine sensibile. Il primo riferimento specifica una piccola regione circolare a cui non è associato alcun collegamento. Il secondo riferimento specifica una regione circolare più grande con le stesse coordinate di centro. Combinate, le due formano un anello il cui centro è inattivo e il cui orlo è attivo. L'ordine delle definizioni dei riferimenti è importante, dato che il circolo più piccolo deve stare sopra il più grande.


<MAP name="map1">
<P>
<A shape="circle" coords="100,200,50">Sono inattivo.</A>
<A href="outer-ring-collegamento.html" shape="circle" coords="100,200,250">Sono attivo.</A>
</MAP>

Allo stesso modo, l'attributo nohref per l'elemento AREA dichiara che la regione geometrica non ha associato alcun collegamento.

13.6.2 Immagini sensibili sul lato server

Le immagini sensibili sul lato server possono essere interessanti nei casi in cui la immagine sensibile sia troppo complicata per un'immagine sensibile sul lato client.

È possibile definire solo un'immagine sensibile sul lato server per gli elementi IMG e INPUT. Nel caso di IMG, l'IMG deve essere racchiuso da un elemento A e dev'essere impostato l'attributo booleano ismap. Nel caso di INPUT, l'INPUT deve essere del tipo "immagine".

Quando l'utente attiva il collegamento cliccando sull'immagine, le coordinate dello schermo sono inviate direttamente al server su cui risiede il documento. Le coordinate dello schermo sono espresse in valori pixel di schermo relativi all'immagine. Per informazione normativa sulla definizione di un pixel e su come scalarlo, si prega di consultare [CSS1].

Nell'esempio seguente, la regione attiva definisce un collegamento sul lato del server. Così, un clic ovunque sull'immagine farà sì che le coordinate del clic siano inviate al server.


<P><A href="http://www.acme.com/cgi-bin/competition">

        <IMG src="game.gif" ismap alt="target"></A>

La locazione cliccata è passata al server come segue. L'interprete deriva un nuovo URI dall'URI specificato dall'attributo href dell'elemento A, appendendo `?' seguito dalle coordinate x e y, separate da una virgola. Il collegamento allora viene seguito utilizzando il nuovo URI. Per esempio, nell'esempio dato, se l'utente clicca alle coordinate x=10, y=27, l'URI che ne risulta è "http://www.acme.com/cgi-bin/competition?10,27".

Gli interpreti che non offrono all'utente mezzi per selezionare coordinate specifiche (ad es., interpreti non grafici basati su input da tastiera o su comandi vocali, etc.) dovrebbero inviare le coordinate "0,0" al server, quando il collegamento è attivato.

13.7 Visualizzazione di oggetti, immagini e applet

Tutti gli attributi IMG e OBJECT che riguardano l'allineamento e la presentazione sono stati disapprovati in favore dei fogli di stile.

13.7.1 Larghezza e altezza

Definizioni degli attributi

width = length [CN]
Dimensionamento di un'immagine o un oggetto.
height = length [CN]
Dimensionamento di un'immagine o un oggetto.

Quando specificati, gli attributi width e height dicono all'interprete di forzare le dimensioni naturali di un'immagine o un oggetto in favore di questi valori.

Quando l'oggetto è un'immagine, viene scalato. Gli interpreti dovrebbero fare del proprio meglio per scalare un oggetto o un'immagine al punto da collimare coll'ampiezza e l'altezza specificati dall'autore. Si noti che le lunghezze espresse in percentuali sono basate sullo spazio orizzontale o verticale disponibile, non sulle dimensioni naturali dell'immagine, oggetto o applet.

Gli attributi height e width danno agli interpreti un'idea delle dimensioni di un'immagine o un oggetto così che possano riservare dello spazio per questi e continuare a rendere il documento mentre aspettano per i dati dell'immagine.

13.7.2 Spazio bianco attorno agli oggetti e alle immagini

Gli attributi vspace e hspace specificano quanto spazio bianco viene inserito alla sinistra e alla destra (hspace), sopra e sotto (vspace) un IMG, APPLET, OBJECT. Il valore predefinito per questi attributi non è specificato, ma è generalmente una lunghezza piccola, non nulla. Entrambi gli attributi prendono valori di tipo length.

13.7.3 Bordi

Un'immagine o un oggetto possono essere circondati da un bordo (ad es., quando un bordo è specificato dall'utente o quando l'immagine è il contenuto di un elemento A).

Definizioni degli attributi

border = pixels
disapprovato. L'attributo border specifica l'ampiezza del bordo in pixel. Il valore predefinito per questo attributo dipende dall'interprete.

13.7.4 Allineamento

L'attributo align specifica la posizione di un IMG, OBJECT o APPLET in relazione al proprio contesto.

I valori seguenti per align riguardano la posizione di un oggetto in relazione al testo che li circonda:

Due altri valori, left e right, fanno sì che l'immagine si allineino al margine destro o sinistro correnti. Sono discussi nel paragrafo sugli oggetti posizionabili.

Differenti interpretazioni dell'allineamento. Gli interpreti variano quanto alla maniera di rendere l'attributo align. Alcuni tengono conto solo di ciò che è occorso nella linea di testo precedente l'elemento, altri tengono conto del testo su entrambi i lati dell'elemento.

13.8 Come specificare il testo alternativo

Definizioni degli attributi

alt = text [CS]
Per interpreti che non possono visualizzare immagini, moduli o applet, questo attributo specifica del testo alternativo. La lingua del testo alternativo è specificata dall'attributo lang.

Alcuni elementi non testuali (IMG, AREA, APPLET, e INPUT) permettono agli autori di specificare del testo alternativo che serva da contenuto, quando l'elemento non può essere reso normalmente. Specificare del testo alternativo aiuta gli utenti sprovvisti di terminali a interfaccia grafica, gli utenti i cui browser non supportano moduli, gli utenti con deficienze visive, coloro che usano sintetizzatori vocali, quelli che hanno configurato i propri interpreti così da non visualizzare le immagini etc.

L'attributo alt deve essere specificato per gli elementi IMG e AREA. È opzionale per gli elementi INPUT e APPLET.

Se il testo alternativo può essere molto utile, deve però essere gestito con attenzione. Gli autori dovrebbero seguire le seguenti linee di guida:

Gli sviluppatori dovrebbero consultare il paragrafo sulla generazione di testo alternativo per informazioni su come gestire casi di omissione di testo alternativo.

Nota. Per ulteriori informazioni sul disegno di documenti HTML accessibili, si prega di consultare [WAIGUIDE].