Scopo del tag finale in SGML / HTML / XML?

6

Ci sono quei tag che hanno effetto immediato (< br >) e quelli che influenzano ciò che c'è tra loro (< a > < / a >).

Il tag di chiusura è verbose e credo anche ridondante :

<tag parameters> ... </tag>

verbose

Confronta con le espressioni di LISP.

(tag parameters)

ridondante

I tag finali non sono nemmeno necessari. Queste lingue sono senza contesto e questo non è possibile lì:

<tag1> <tag2> </tag1> </tag2>

Fondamentalmente dovrebbero essere equivalenti:

<tag1> <tag2> </> </>
<tag1> <tag2> </tag2> </tag1>       

domande

I tag finali sono lì per facilitare la leggibilità? Qual è lo scopo della ridondanza nei tag di chiusura? Voglio capire dentro la logica dietro il proposito di questo. Grazie. :)

    
posta user712092 27.10.2011 - 01:41
fonte

3 risposte

10

Nel caso di XML, Tim Bray delinea gli obiettivi di progettazione nella sua versione annotata della specifica XML link .

The design goals for XML are:

  1. XML shall be straightforwardly usable over the Internet.
  2. XML shall support a wide variety of applications.
  3. XML shall be compatible with SGML.
  4. It shall be easy to write programs which process XML documents.
  5. The number of optional features in XML is to be kept to the absolute minimum, ideally zero.
  6. XML documents should be human-legible and reasonably clear.
  7. The XML design should be prepared quickly.
  8. The design of XML shall be formal and concise.
  9. XML documents shall be easy to create.
  10. Terseness in XML markup is of minimal importance.

L'annotazione per l'obiettivo 10 è:

Terseness is of Minimal Importance

The historical reason for this goal is that the complexity and difficulty of SGML was greatly increased by its use of minimization, i.e. the omission of pieces of markup, in the interest of terseness. In the case of XML, whenever there was a conflict between conciseness and clarity, clarity won.

Rick Jelliffe ha un ulteriore background in link

    
risposta data 27.10.2011 - 12:17
fonte
12

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>
      &gt;
    </title>
  </head>
  <body>
    <p>
      &gt;
    </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.)

    
risposta data 27.10.2011 - 02:54
fonte
3

Sì, i tag finali sono lì per aiutare la leggibilità e la chiarezza in caso di errore. Se un documento è malformato e manca un tag di chiusura, in che modo lo sviluppatore si assicurerà quale tag manca?

Inoltre, ho il sospetto che il nome nel tag finale aiuti in analisi di tipo SAX, consentendo al parser di identificare facilmente il tipo di nodo che si sta terminando.

    
risposta data 27.10.2011 - 01:52
fonte

Leggi altre domande sui tag