Sintassi dei linguaggi di markup

0

Se i computer sono in grado di analizzare i dati organizzati in parentesi graffe, perché stiamo utilizzando la sintassi <foo></foo> in alcune lingue? Solo a causa di legacy ecc o ci sono ulteriori ragioni alla base di questo?

Penso di parlare per molte persone se dico che sembra ridondante ed è scomodo lavorare con. In adition non fa "enforce" indentation come fanno i linguaggi basati su parentesi graffe.

Aggiornamento - Ho commesso l'errore di considerare le parentesi graffe e le coppie di valori-chiave (che non ho menzionato fino ad ora) come lo stesso concetto.

Tenendo conto di questo, vorrei fare di nuovo la mia domanda: la sintassi dei tag è davvero più comoda di un linguaggio simile a JSON?

    
posta vemv 13.07.2011 - 16:15
fonte

7 risposte

7

Le parentesi graffe vengono solitamente utilizzate per indicare l'inizio e la fine di un blocco. Non c'è semantica dietro la coppia, di solito viene catturata da altri simboli vicini come while , if , ecc ... tag come <foo></foo> indicano l'inizio e la fine del blocco e cattura la semantica.

Suppongo che tu possa modificare il markup basato su tag da

<ns:foo attrib="test" attrib2="123/>
   some values and nested elements can go here
</ns:foo>

a:

ns:foo(attrib="test" attrib2="123")
{ 
    some values and nested elements can go here
}

che contiene ancora la semantica del primo esempio (sappiamo che abbiamo a che fare con un elemento foo dallo spazio dei nomi ns e abbiamo i valori degli attributi dell'elemento) ma in un formato diverso.

Perché il markup è fatto con i tag è il massimo che posso dire per rendere più facile la lettura da parte degli umani. Scansionando una sequenza di chiusura di } con gli occhi, è facile perdersi su quale elemento viene chiuso. I fantasiosi editor che evidenziano e tengono traccia dell'elemento in cui si trova il cursore possono essere d'aiuto, ma non è sempre possibile mantenere questo valore (ad esempio quando si aggiusta un file di configurazione XML su un server remoto utilizzando pico).

Fondamentalmente, questo:

               </bar>
           </foo>
        </fizz>
     </bang>

È più facile da leggere rispetto a:

             }
           }
         }
       }

Ho visto XML con elementi nidificati > 10 livelli di profondità (molto più spesso di quanto abbia mai visto il codice annidato in quel modo), e quando si lavora con questi file, sapere quali elementi vengono chiusi aiuta davvero.

In risposta all'aggiornamento della domanda:

Non sono un esperto JSON ma un rapido google mi ha mostrato alcuni esempi. Le coppie chiave-valore di JSON sembrano un'alternativa migliore agli articoli a valore singolo, come <foo>some value</foo> , ma penso ancora che per gli oggetti profondamente annidati, il problema di non sapere dove ti trovi sullo schermo sia mitigato dall'avere i tag di chiusura.

Una combinazione ideale, teortica e fuori dalla testa, basata su un esempio di wikipedia:

<person>
     "firstName": "John",
     "lastName": "Smith",
     "age": 25,
     <address>
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": "10021"
     </address>
     <phoneNumbers>
         <phoneNumber>
           "type": "home",
           "number": "212 555-1234"
         </phoneNumber>,
         <phoneNumber>
           "type": "fax",
           "number": "646 555-4567"
         </phoneNumber>
     </phoneNumber>
 </person>

Naturalmente, avremmo potuto fare la maggior parte di quelle coppie chiave-valore come attributi, come ad esempio:

<person firstName="John"
        lastName="Smith"
        age="25">
     <address
         streetAddress="21 2nd Street ...>
     ...
</person>

Penso che sarebbe più pulito della maggior parte della sintassi JSON, e semplici elementi potrebbero essere fatti come

 <foo value="some value"/>
    
risposta data 13.07.2011 - 16:22
fonte
4

Un paio di motivi che mi vengono in mente:

    I linguaggi di markup
  • sono intesi per essere letti ed elaborati dalle macchine e anche (o anche più di) per gli esseri umani
  • i tag di apertura e di chiusura riducono la possibilità di errori e facilitano il recupero: la ridondanza è il prezzo da pagare per questo, ma in questa era di storage e larghezza di banda a basso costo, molti errori di recupero di valore sono superiori al salvataggio di pochi byte
  • i tag forniscono contesto , che non ha prezzo quando ad es. le versioni dei documenti possono cambiare frequentemente
  • consente anche la navigazione all'interno di un documento
risposta data 13.07.2011 - 16:22
fonte
3

Prima di tutto, in che modo un linguaggio di markup basato su coppie rinforza il rientro più di uno basato su tag? L'indentazione, a meno che non venga riconosciuta dal parser (come in Python, YAML o CoffeeScript) è in gran parte una preferenza per chi scrive il codice.

In secondo luogo, che tipo di sintassi proporresti sarebbe molto più conciso e leggibile? Come notato da FrustratedWithFormsDesigner, il finale </foo> è utile perché denota che stai chiudendo. Se hai mai messo in giro le lingue basate su C, sai che tipo di confusione sta avendo

        }
      }
    }
  }
}

conduce a. Certo, puoi commentare ogni parentesi finale con il blocco a cui appartiene, ma qual è la differenza tra } //foo e </foo> ? Almeno il parser sa cosa c'è di sbagliato con </foo> .

    
risposta data 13.07.2011 - 16:30
fonte
2

È solo un altro modo di fare le cose. Esistono altri linguaggi che indicano blocchi di codice con parole chiave, come i BASIC IF ... ENDIF. Alcuni, come Lisp, usano le parentesi. Qualunque sia il delimitatore utilizzato da una lingua, è definito dai gusti dell'autore e da ciò che ritiene più appropriato.

La sintassi della parentesi angolare viene generalmente utilizzata nei linguaggi di markup. Queste lingue hanno radici negli editor che utilizzano i tag per applicare la formattazione (markup) al testo. La mia ipotesi è che gli autori hanno ritenuto che fosse più leggibile chiudere sempre un blocco di markup in modo esplicito. In HTML, ad esempio, un tag di chiusura potrebbe essere molto lontano dal suo tag di apertura, quindi visualizzare un tag "corpo vicino" può essere più facile da leggere rispetto a una parentesi graffa.

Per quanto riguarda l'indentazione ... Sono sorpreso che non ci sia stata ancora una sanguinosa crociata. XML ben formato si presta a indentazioni buone e leggibili. Anche i formati XML più imperativi, come gli script ANT, possono essere rientrati in modo molto naturale. Solo una lingua che conosco (Python) applica l'indentazione. Gli altri ignorano qualcosa di più di un singolo spazio.

    
risposta data 13.07.2011 - 16:30
fonte
2

Prima di tutto, è una questione di gusti. Non c'è alcun vantaggio intrinseco dei "linguaggi di supporto".

Tuttavia, ritengo che il più importante sia che le lingue basate su SGML hanno due stili di utilizzo diversi: dati strutturati e documenti contrassegnati.

Per i dati strutturati, sì, il rientro è di grande aiuto per la leggibilità, e talvolta una coppia è accolta perché è più piccola, altre volte, un tag è più bello perché indica il tipo di blocco ad entrambe le estremità.

Ma è su documenti contrassegnati in cui l'indentazione risulta meno utile. Quale è più leggibile?:

<p>This is a <strong>short</strong> paragraph, with only a <i>few</i> words.</p>

vs

<p>
  This is a
  <strong>
    short
  </strong> 
  paragraph, with only a 
  <i>
    few
  </i>
  words.
</p>
    
risposta data 13.07.2011 - 17:32
fonte
2

Puoi eseguire la seguente trasformazione su html ben formato:

<foo>  --> (foo
</foo> --> )

(più alcune virgolette) e il tuo html diventa un'espressione s, il che significa che la tua pagina può essere elaborata da un interprete Lisp.

Qualche tempo fa ho usato uno schema simile per tradurre html in Tcl e poi ho usato un interprete incorporato per elaborare pagine web.

link

link

    
risposta data 13.07.2011 - 19:39
fonte
1

Utilizzare le parentesi o i caratteri simili a una contrazione per limitare a quattro diversi tipi di blocchi ( (...) , [...] , {...} e <...> ) e escluderebbe altri usi per quei caratteri.

Il formato <foo> ... </foo> corrente che trovi in HTML e XML ha le sue radici in Structured Generalized Markup Language , che ha stato negli anni '80.

    
risposta data 13.07.2011 - 17:44
fonte

Leggi altre domande sui tag