Riprendiamo l'analisi delle quattro sezioni della nostra pagina XHTML. E consideramo
l'elemento radice:
Come abbiamo visto, l'elemento radice di un documento XHTML deve essere <html>, che deve a sua volta contenere tutti gli altri elementi. Niente di nuovo direte, tutte le pagine HTML iniziano più o meno così:
<html>
<head>
<title>Lezione 7 - L'elemento radice</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
......... Contenuto della pagina ..............
</body>
</html>
Ma le differenze ci sono e qui potete capire davvero cosa significa il rigore di XML.
<HTML> è obbligatorio
Perchè prima non lo era? Incredibilmente la risposta è: no! <html> era considerato di default. Piccola prova:
<head>
<title>Lezione 7 - L'elemento radice</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>Questo è HTML!</h1>
</body>
Copiate e incollate queste poche righe in Blocco Note; salvate come "prova.html". Aprite in un browser. La scritta "Questo è HTML!" comparirà bella ed evidente. Ma cosa volete farci, i nostri browser sono fatti così. Sanno perdonare molto, forse troppo. Si calcola che l'80% della potenzialità del parser HTML di un browser venga usata per risolvere gli errori di scrittura presenti nelle pagine. È evidente che sottoponendo questa pagina a validazione non sarete nemmeno presi in considerazione. Semplicemente questo non è un documento XHTML. Se un giorno i browser (come è auspicabile) effettueranno la verifica la nostra paginetta di test verrà sdegnosamente rifiutata perchè non corretta. Ma affronteremo l'argomento browser in una prossima lezione. Ora ribadiamo: <html> è obbligatorio.
Il namespace
L'elemento <html> può assumere questi attributi:
dir | Determina la direzione del testo |
lang | Specifica il linguaggio di base dell'elemento quando è interpretato come HTML |
xml:lang | Specifica il linguaggio di base dell'elemento quando è interpretato come XML |
xmlns | Specifica il namespace predefinito per XHTML |
L'unico attributo obbligatorio è xmlns. Il W3C, come visto, specifica anche il valore obbligatorio di tale attributo: "http://www.w3.org/1999/xhtml" (vedi figura 1).
La necessità di un namespace (spazio di nomi) dipende dalla derivazione da XML. Linguaggio estensibile per definizione. È possibile, infatti, estendere il set di tag di XHTML con elementi di altri linguaggi, anche creati personalmente. Specificare uno o più namespace evita la possibilità di conflitti tra i tag. Chiariamo anche qui con un esempio.
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//OVERFLOW//DTD XHTML-FML 1.0//EN"
"http://www.mozquito.org/dtd/xhtml-fml1.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:x="http://www.mozquito.org/xhtml-fml">
<head>
<title>Untitled</title>
</head>
<body>
<x:form>
</x:form>
</body>
</html>
Il codice riporta l'implementazione di FML (Form Markup Language) in un documento XHTML. FML, su cui torneremo, è un linguaggio che ridefinisce e potenzia l'uso dei form. Come si può notare all'interno dell'elemento <html> sono stati definiti due namespace: in rosso è evidenziato quello standard di XHTML, in blue quello di FML.
La differenza tra i due, a parte l'URI, sta nel prefisso. Il primo non ne ha. Il secondo ha come prefisso "x". Significa che i tag non preceduti da prefisso sono quelli standard di XHTML e come tali verranno intepretati. Ora date uno sguardo al codice. Nel corpo della pagina è stato inserito un form. Ma il tag è preceduto da x! Vuol dire che esso appartiene al namespace FML e come tale deve essere trattato dal browser. Senza specificare il prefisso avremmo avuto un classico form XHTML.
L'argomento namespace è attualmente uno dei più dibattuti nella comunità XML e dunque vi rimandiamo ad uno dei tanti siti sull'argomento o ad un manuale aggiornato per chiarificazioni e approfondimenti.
Riferimenti
Nozione e uso dei namespace: dal corso XML di HTML.it una buona introduzione all'argomento.
Form Markup Language: articoli e reference su questa interessante estensione di XHTML