3 Conformità: requisiti e raccomandazioni

Sommario

3.1 Definizioni

Con questa sezione hanno inizio le specifiche formali CSS2, a partire dal contratto tra autori, utenti ed implementatori.

Le parole chiave "DEVE" [="MUST", "SHALL"], "NON DEVE" [="MUST NOT", "SHALL NOT"], "OBBLIGATORIO" [="REQUIRED"], "DOVREBBE" [="SHOULD"], "NON DOVREBBE" [="SHOULD NOT"], "RACCOMANDATO" [="RECOMMENDED"], "PUÒ" [="MAY"] e "FACOLTATIVO" [="OPTIONAL"] devono essere interpretate in questo documento così come descritto in RFC 2119 (si veda [RFC2119]). Tuttavia, per ragioni di leggibilità, tali parole non appaiono in lettere tutte maiuscole all'interno di queste specifiche.

A volte le presenti specifiche raccomandano delle buone consuetudini per autori e programmi utente. Tali raccomandazioni non sono normative e la conformità a queste specifiche non dipende dalla loro attuazione. Simili raccomandazioni contengono espressioni come "Noi raccomandiamo ...", "Queste specifiche raccomandano ...", o altre formulazioni analoghe.

Foglio di stile
Un insieme di istruzioni che specifica la presentazione di un documento.

I fogli di stile possono avere tre differenti origini: l'autore, l'utente e il programma utente. L'interazione tra queste sorgenti è descritta nella sezione su collegamenti a cascata ed eredità.

Foglio di stile valido
La validità di un foglio di stile dipende dal livello di CSS usato per il foglio di stile. Tutti i fogli di stile CSS1 validi sono fogli di stile CSS2 validi. Tuttavia, in virtù di alcuni cambiamenti rispetto ai CSS1, alcuni fogli di stile CSS1 avranno una semantica leggermente differente in CSS2.

Un foglio di stile CSS2 valido deve essere scritto in modo conforme alla grammatica dei CSS2. Inoltre esso deve contenere solo regole-a, nomi di proprietà e valori di proprietà definiti in queste specifiche. Sono illegali (invalidi) una regola-a, un nome di proprietà o un valore di proprietà che non sono validi.

Documento sorgente
Il documento a cui uno o più fogli di stile si riferiscono. Questo è codificato in un qualsiasi linguaggio che rappresenti il documento come un albero di elementi. Ciascun elemento consiste di un nome che identifica il tipo di elemento, di un numero facoltativo di attributi e di un contenuto (che può essere vuoto).
Linguaggio del documento
Il linguaggio in cui è codificato il documento sorgente (p.es., HTML o un'applicazione XML).
Elemento
(Termine di SGML, si veda [ISO8879].) I costrutti sintattici primari del linguaggio del documento. La maggior parte delle regole dei fogli di stile CSS usa i nomi di questi elementi (come "P", "TABLE" e "OL" per l'HTML), allo scopo di specificare informazioni per la loro riproduzione.
Elemento rimpiazzato
Un elemento di cui il formattatore CSS conosce soltanto le dimensioni intrinseche. In HTML gli elementi IMG, INPUT, TEXTAREA, SELECT e OBJECT possono essere esempi di elementi rimpiazzati. Per esempio, il contenuto dell'elemento IMG è spesso rimpiazzato dall'immagine che l'attributo "src" designa. I CSS non definiscono il modo in cui le dimensioni intrinseche sono reperite.
Dimensioni intrinseche
La larghezza e l'altezza così come definite dall'elemento stesso, non imposte dalle condizioni circostanti. In CSS2 si assume che tutti gli elementi rimpiazzati -- e soltanto gli elementi rimpiazzati -- possiedono dimensioni intrinseche.
Attributo
Un valore associato con un elemento, consistente di un nome e di un valore (testuale) associato.
Contenuto
Il contenuto associato con un elemento nel documento sorgente; non tutti gli elementi hanno un contenuto, nel qual caso sono chiamati vuoti. Il contenuto di un elemento può includere del testo, e può includere un certo numero di sottoelementi, nel qual caso l'elemento è chiamato il genitore di quei sottoelementi.
Contenuto riprodotto
Il contenuto di un elemento dopo che è stato riprodotto conformemente agli appropriati fogli di stile che gli sono stati applicati. Il contenuto riprodotto di un elemento rimpiazzato proviene dall'esterno del documento sorgente. Contenuto riprodotto può essere anche del testo alternativo per un elemento (p.es., il valore dell'attributo HTML "alt"), e può includere parti inserite implicitamente o esplicitamente dal foglio di stile, quali pallini, numerazione, ecc.
Albero del documento
L'albero degli elementi codificati nel documento sorgente. Ciascun elemento in questo albero ha esattamente un genitore, con l'eccezione dell'elemento radice, che non ne ha nessuno.
Figlio
Un elemento A è detto figlio dell'elemento B se, e soltanto se, B è il genitore di A.
Discendente
Un elemento A è detto discendente dell'elemento B, se (1) A è figlio di B o se (2) A è figlio di un qualsiasi elemento C che è discendente di B.
Progenitore
Un elemento A è detto progenitore di un elemento B, se e solo se B è un discendente di A.
Fratello [= Sibling]
Un elemento A è detto fratello di un elemento B, se e solo se B ed A condividono lo stesso elemento genitore. L'elemento A è un fratello precedente se esso viene prima di B nell'albero del documento. L'elemento B è un fratello seguente se esso viene dopo A nell'albero del documento.
Elemento precedente
Un elemento A è detto elemento precedente di un elemento B, se e solo se (1) A è un progenitore di B o se (2) A è un fratello precedente di B.
Elemento seguente
Un elemento A è detto elemento seguente di un elemento B, se e solo se B è un elemento precedente di A.
Autore
Un autore è una persona che scrive documenti e fogli di stile ad essi associati. Uno strumento autoriale genera documenti e fogli di stile associati.
Utente
Un utente è una persona che interagisce con un programma utente per vedere, ascoltare o utilizzare in altro modo un documento ed il foglio di stile che gli è associato. L'utente può utilizzare un foglio di stile personale che codifica le sue preferenze personali.
Programma utente (PU) [= User agent (UA)]
Un programma utente è un qualsiasi programma che interpreta un documento scritto nel linguaggio del documento ed applica i fogli di stile associati in conformità con quanto stabiliscono queste specifiche. Un programma utente può mostrare un documento, leggerlo ad alta voce, generarne la stampa, convertirlo ad un altro formato, ecc.

Ecco un esempio di documento sorgente codificato in HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>   
  <TITLE>Il mio sito</TITLE>
  <BODY>
    <H1>Il mio sito</H1>
    <P>Benvenuti nel mio sito! Lasciate che vi 
       elenchi i miei compositori preferiti:
    <UL>
      <LI> Elvis Costello
      <LI> Johannes Brahms
      <LI> Georges Brassens
    </UL>
  </BODY>
</HTML>

Ciò produce il seguente albero:

Esempio di albero del documento   [D]

Conformemente alla definizione di HTML, l'elemento HEAD sarà desunto durante l'analisi e diverrà parte dell'albero del documento, anche se nel codice sorgente non sono presenti marcatori HEAD. Analogamente, l'analizzatore sa dove i P e i LI terminano, anche se nel sorgente mancano i marcatori </P> e </LI>.

3.2 Conformità

Questa sezione definisce la conformità alle sole specifiche CSS2. Potranno esserci in futuro altri livelli di CSS, che richiederanno ad un programma utente di implementare un differente insieme di caratteristiche allo scopo di risultare conforme.

In generale, i punti successivi devono essere osservati da un programma utente che si dichiara conforme alle presenti specifiche:

  1. Deve supportare uno o più dei tipi di media CSS2.
  2. Per ciascun documento sorgente, deve cercare di reperire tutti i fogli di stile che sono appropriati per i tipi di media supportati. Se non può reperire tutti i fogli di stile associati (ad esempio a causa di errori di rete), deve mostrare il documento usando quelli che può reperire.
  3. Deve analizzare i fogli di stile in modo conforme a queste specifiche. In particolare, deve riconoscere tutte le regole-at, i blocchi, le dichiarazioni e i selettori (si veda la grammatica dei CSS2). Se un programma utente incontra una proprietà che si applica ad un tipo di media supportato, il programma utente deve analizzare il valore in base alla definizione della proprietà. Ciò implica che il programma utente deve accettare tutti i valori validi e deve ignorare le dichiarazioni contenenti valori invalidi. I programmi utente devono ignorare le regole che si applicano a tipi di media non supportati.
  4. Per ciascun elemento in un albero del documento, deve assegnare un valore a ciascuna proprietà applicabile in base alla definizione della proprietà e alle regole di cascata ed eredità.
  5. Se il documento sorgente presenta un foglio di stile alternativo (come per esempio uno con la parola chiave "alternate" in HTML 4.0 [HTML40]), il PU [= UA] deve consentire all'utente di selezionare uno tra questi fogli di stile e deve applicare quello selezionato.

Non tutti i punti devono essere osservati da tutti i programmi utente, tuttavia:

L'impossibilità da parte di un programma utente di attuare parte di queste specifiche a causa delle limitazioni di un particolare dispositivo (p.es., un programma utente non può riprodurre colori su un monitor o su una pagina monocromatici) non implica la non-conformità.

Queste specifiche raccomandano che i programmi utente permettano all'utente di specificare un foglio di stile dell'utente.

3.3 Condizioni di errore

In generale, questo documento non specifica come i programmi utente devono comportarsi nel gestire gli errori (p.es., come si comportano quando non possono trovare una risorsa designata da un URI).

Tuttavia, i programmi utente devono osservare le regole per gestire gli errori di analisi.

Dal momento che i programmi utente possono variare nel modo in cui trattano le condizioni di errore, autori ed utenti non devono basarsi su alcuno specifico comportamento di recupero degli errori.

3.4 Il tipo di contenuto text/css

I fogli di stile CSS che esistono come file separati, sono trasmessi attraverso la Rete come sequenze di byte accompagnate da informazioni di codifica (si veda [HTML40], capitolo 5). La struttura della trasmissione, denominata entità messaggio, è definita da RFC 2045 e RFC 2068 (si veda [RFC2045] e [RFC2068]). Un'entità messaggio con un tipo di contenuto "text/css" rappresenta un documento CSS indipendente. Il tipo di contenuto "text/css" è stato registrato da RFC 2318 ([RFC2318]).