Nel titolo della domanda, chiedi informazioni su HTML, SGML e XML come se fossero la stessa cosa, ma non lo sono. In realtà, sono molto diversi proprio in quell'area di cui stai chiedendo.
In particolare, SGML ha sia tag Null End che Tag impliciti (e anche elementi impliciti), e poiché HTML è un'applicazione di SGML, eredita quelli.
I tag di fine null ti consentono di omettere il nome del tag di fine. Invece di
<tag>content</tag>
Puoi anche scrivere
<tag/content/
I tag finali impliciti consentono di escludere del tutto il tag di chiusura, se è chiaro dal contesto che deve esserci un tag di chiusura. Ad esempio, in HTML, un elemento body
non può essere all'interno di un elemento title
o head
, quindi puoi scrivere
<html>
<head>
<title>The Title
<body>
e entrambi gli elementi title
e head
verranno chiusi implicitamente.
I tag di chiusura sono anche impliciti alla fine del documento: tutti gli elementi saranno chiusi in ordine inverso.
Con Elementi impliciti, puoi escludere entrambi Inizia e Tag finali: poiché p
è consentito solo all'interno di body
, il primo p
implicherà a body
:
<html>
<head>
<title>The Title
<p>
Qui, c'è è un elemento body
nel documento, anche se non ci sono tag body
.
Mettendo tutto insieme, ottieni qualcosa di simile a questo:
<HTML /
<HEAD /
<TITLE / > /
<P / >
Questo è un documento HTML completo, 100% ben formato e valido al 100%. (Beh, manca la dichiarazione DOCTYPE
, ma se ne aggiungi una, puoi eseguirla attraverso il validatore W3C come HTML 1.0, 2.0, 3.2 e 4.01, anche se rigorosa.)
È semanticamente equivalente al seguente XHTML:
<html>
<head>
<title>
>
</title>
</head>
<body>
<p>
>
</p>
</body>
</html>
Ora, quale dei due è più facile da leggere?
(In realtà, questa è una domanda seria. Sono particolarmente interessato a ciò che i programmatori Lisp esperti hanno da dire.)