[webaccessibile] axis

Michele Diodati michele a diodati.org
Mar 8 Giu 2004 12:25:03 CEST


Maurizio:
A proposito dell'attributo 'axis', io ho l'impressione che sia un po' 
l'equivalente di una classe. Funziona insomma allo stesso modo, e serve 
alle stesse cose, anche se solo nell'ambito dei dati.

Volevo chiedervi (per chi ci ha riflettuto, naturalmente, o vuole farlo) 
se la mia impressione è corretta, e se l'introduzine di 'axis' non sia 
in effetti una complicazione non necessaria. Non per nulla gli 'id' 
vengono usati per le intestazioni, bastava limitarsi ad usare anche 
'class'. O c'è qualcosa che mi sfugge?

Michele:
Come tu stesso scrivi, 'axis' agisce "nell'ambito dei dati": è un attributo a cui si legano valori semantici, non presentazionali come sono invece i valori di 'class'. Dunque non si poteva utilizzare 'class' per fargli fare le stesse cose che dovrebbe fare 'axis', visto che 'class' già porta una sua connotazione specifica che è puramente presentazionale (definire, tramite CSS, l'aspetto visuale o acustico della resa degli elementi HTML). 

Perciò l'introduzione di 'axis', posto che si voleva creare un meccanismo per categorizzare a n-dimensioni i contenuti di una tabella, era una complicazione necessaria. Il paragone con 'id', che fai tu, secondo me non vale, perché 'id'  non è usato nella relazione id/headers per il valore semantico del suo contenuto (che è nullo, come quello di 'class'), ma per il fatto che, essendo per definizione ciascun id unico all'interno del documento, questa caratteristica poteva essere sfruttata per creare associazioni biunivoche con i valori di corrispondenti attributi headers. Ora, che nei valori di una coppia id/headers sia scritto "pippo" piuttosto che "mitocondrio", ai fini del funzionamento del meccanismo è esattamente la stessa cosa: il valore semantico del contenuto è indifferente.

Invece il contenuto di 'axis' deve essere significativo, perché deve fornire la base di una serie di possibili interrogazioni da parte dell'utente. Per comprendere bene l'uso di axis non si può che fare riferimento alla tabella di esempio riportata in http://www.w3.org/TR/html401/struct/tables.html#h-11.4.2 (o nella mia traduzione in italiano: http://www.diodati.org/w3c/html401/struct/tables.html#multi-dimension ) e soprattutto alle spiegazioni che precedono e seguono il codice della tabella.

Esaminando quella tabella, si capisce perché il solo meccanismo delle associazioni id/headers non è sufficiente a creare delle interrogazioni complete sui dati. Mettiamo che esista un programma utente in grado di supportare tali interrogazioni. Se (rfierendomi sempre alla tabella nell'esempio) io volessi che il programma estraesse dalla tabella l'elenco delle località in cui ho soggiornato, tramite il solo uso di id/headers questo sarebbe impossibile. Infatti gli id sono unici e indipendenti: non c'è un modo di far capire ad un programma, basandosi solo sul loro valore, che due o più id appartengono ad una medesima categoria e che perciò le relative celle devono essere presentate insieme in una lista unica. L'unica cosa che si può fare (ed è stata fatta) è introdurre un nuovo attributo - axis, appunto - che identifica la categoria comune a cui appartengono due o più celle: nel nostro caso il valore di 'axis' sarà "località", in modo che un programma utente conforme possa selezionare tutte le celle che hanno axis="località".

Si potrebbe utilizzare 'class' per svolgere lo stesso ruolo di 'axis'? No, per varie ragioni:

1. class è utilizzabile nell'intero ambito di un documento, dunque va ben al di là dell'uso ristretto delle tabelle di dati (proprio di axis): non sarebbe perciò possibile - se non introducendo nuovi artifici - restringere l'interrogazione fatta in base ai valori di class ai soli dati contenuti in una tabella.

2. le classi svolgono una funzione di presentazione: se le si usa anche con un valore semantico, ciò potrebbe andare in conflitto con l'uso degli stili ad esse associate (nel senso che si potrebbe voler formattare diversamente delle celle che appartengono invece alla stessa classe concettuale).

3. se, per evitare i conflitti descritti al punto 2, si evita di associare a degli stili le classi usate con valore semantico, nei valori di uno stesso attributo class potrebbero trovarsi classi che hanno valore semantico e classi che hanno valore presentazionale, il che danneggerebbe la coerenza e la comprensibilità del codice.

4. l'attributo class è stato progettato per contenere una serie di nomi separati da spazi, il che restringe la possibilità di nominare le categorie a delle parole uniche. Invece il valore di axis può essere un elenco di voci separate da virgola, il che rende possibile anche la definizione di nomi di categoria composti da più parole separate da spazi, allargando di fatto la gamma dei nomi possibili.

Insomma, l'introduzione di axis è stata secondo me un modo per avvicinare il più possibile una tabella di dati ad una tabella di database: posto che gli autori abbiano attribuito alle celle opportuni valori di axis, si potrebbe infatti - usando dei programmi utente conformi - generare delle interrogazioni in tutto analoghe e a quelle che è possibile eseguire su un normale database.  Almeno credo... ;-)

Ciao,
Michele



Maggiori informazioni sulla lista webaccessibile