Quali sono i vantaggi dell'XML rispetto alla notazione S-express (-ish)?

10

Vorrei fare una domanda sulla notazione XML e S-expressions (-ish). Le espressioni S sono piuttosto vecchie; sono anche molto semplici. Potremmo considerare due forme che hanno un significato uguale, diverse nella sintassi:

(codice xml tratto da Wikipedia polacco )

<?xml version="1.0" encoding="UTF-8"?>
<ksiazka-telefoniczna kategoria="bohaterowie książek">
 <!-- komentarz -->
  <osoba charakter="dobry">
    <imie>Ambroży</imie>
    <nazwisko>Kleks</nazwisko>
    <telefon>123-456-789</telefon>
  </osoba>
  <osoba charakter="zły">
    <imie>Alojzy</imie>
    <nazwisko>Bąbel</nazwisko>
    <telefon/>
  </osoba>
</ksiazka-telefoniczna>

Versione S-Expression (-ish):

(:version "1.0" :encoding "utf-8")
(ksiazka-telefoniczna :category "bohaterowie książek"
  ; komentarz(a comment)
  (osoba :charakter "dobry"
    (imie Ambroży)
    (nazwisko Kleks)
    (telefon 123-456-789))
  (osoba :charakter "zły"
    (imie Alojzy)
    (nazwisko Bąbel)
    (telefon)))

La versione S-Expression è molto più concisa. Evitiamo la ridondanza usando le semplici notazioni delle liste, tuttavia possiamo ancora definire la sintassi per includere le cose che vogliamo avere (ad esempio proprietà). Naturalmente, questo è solo un esempio e lo standard attuale avrebbe potuto essere migliore o semplicemente diverso; tuttavia, è più breve e più facile da analizzare. Perché XML ha vinto?

    
posta MatthewRock 28.07.2016 - 19:21
fonte

3 risposte

13

Sappiamo che i progettisti di XML avevano familiarità con le espressioni S, poiché XML è basato su SGML e SGML ha un linguaggio di stile, DSSSL, che utilizza la sintassi dell'espressione S (e lo schema come linguaggio di scripting incorporato).

Tuttavia hanno scelto una sintassi diversa rispetto alle espressioni S a causa dei casi d'uso per XML. Inizialmente, XML è stato progettato per supportare sia i dati strutturati generati dalle macchine che i linguaggi di marcatura come HTML, che sono creati manualmente e contengono contenuti misti (testo mescolato con elementi con metadati).

Ridondanza

I documenti di markup sono spesso più lunghi di una schermata. Se vedi ) e non vedi l'inizio della struttura, sei piuttosto perso; non sai se era un capitolo o una barra laterale che è appena finita. La ridondanza di ripetere il tagname nei tag di chiusura in XML come </sidebar> rende questo molto più facile per lo scrittore umano. Lo rende anche più robusto: se elimini accidentalmente un tag di chiusura, puoi spesso dedurre quale tag di fine manca.

SGML (il predecessore di XML) ti permetteva di accorciare opzionalmente il tag di estremità in un singolo carattere, ma questa funzionalità era lasciata fuori da XML per semplicità.

Quindi, in breve, XML è più prolisso in base alla progettazione, perché è progettato per supportare documenti modificabili dall'utente. Oggi XML viene utilizzato per una vasta gamma di scopi, anche per la pura comunicazione machine-to-machine, in cui questa ridondanza non è necessaria.

Contenuti misti

La sintassi suggerita non supporta molto bene i contenuti misti. Prendi questo esempio in HTML:

<p>Hi! <a href="example.com">Click here</a>!</p>

Come lo esprimeresti nella tua sintassi? È necessario un qualche tipo di delimitatore aggiuntivo per distinguere tra attributi e contenuto del testo. All'improvviso non è più così conciso.

Caratteri speciali

Le parentesi angolari sono molto più rare nel testo ordinario rispetto alle parentesi e ai due punti.

Compatibilità

L'HTML era già di grande successo al momento della progettazione dell'XML e aveva senso scegliere una sintassi simile.

Perché XML ha vinto?

Le espressioni S non sono mai state un'alternativa all'XML. Le specifiche XML sono molto più che parentesi angolari; Definisce una sintassi per elementi e attributi e contenuto misto, escape, codifica dei caratteri, sintassi DTD e convalida e così via. Non esisteva nulla di simile per le espressioni s. Ovviamente è possibile definire uno standard simile, come si propone qui, ma nessuno lo aveva fatto in quel momento. L'XML è stato benedetto dal W3C ed è stato quindi adottato dai principali attori e divenne lo standard defacto per lo scambio di dati.

    
risposta data 28.07.2016 - 22:11
fonte
9

Personalmente, ritengo che la parte migliore di XML siano le funzionalità dello schema ben definite, piuttosto che la sua sintassi. Il meccanismo dello schema consente agli utenti di pubblicare il loro formato di documento per condividere ciò che considerano un documento valido. Esistono anche validatori automatici. Inoltre, i tipi e gli schemi creati da un utente possono essere estesi da altri utenti.

Per quanto ne so nessuno ha mai fatto lo sforzo di standardizzare un meccanismo di schema generale per l'espressione s, eccetto per il linguaggio LISP stesso (che l'esempio nella domanda dell'OP non sta usando).

    
risposta data 28.07.2016 - 20:25
fonte
1

Ecco due motivi per scegliere XML su qualcosa "S-expression-ish":

Un modello sintattico e semantico ben definito

XML non è semplicemente un albero di nodi, ma un albero di nodi categorizzati che hanno diverse rappresentazioni sintattiche e comportamenti diversi. Ad esempio, un attributo con un determinato nome può apparire solo una volta per un dato nodo, mentre i nodi figli possono apparire più volte.

Potresti definire un modello sopra a espressioni S generiche. I tuoi esempi mostrano uno schema per la categorizzazione di attributi ed elementi figlio. Aggiungi la semantica per il testo, i commenti e le istruzioni di elaborazione e avrai qualcosa che è isomorfo con XML.

Tooling

Dal modello sintattico e semantico standard, puoi costruire strumenti - e molte persone hanno. È possibile trovare qualche forma di parser XML / serializzatore, XPath e processore XSLT per ogni lingua / piattaforma comune. E sai che si comportano tutti allo stesso modo su ogni piattaforma.

E qui ci sono alcune altre cose da considerare:

Nel grande schema, XML non è così dettagliato

Nel tuo esempio, cosa hai effettivamente eliminato? Mentre lo leggo, hai:

  • Eliminato il tag di chiusura per ogni espressione.
  • Eliminato il > che normalmente separerebbe il tag di apertura dai suoi figli.
  • Sostituito il = che separa il nome e il valore dell'attributo con un : per indicare che il figlio è un attributo; nessun risparmio.

Penso che sia anche importante riconoscere che le rappresentazioni interne ed esterne di XML sono molto diverse. Internamente, un albero XML è molto compatto. E poiché i vari elementi sono già categorizzati, è molto efficace da manipolare. Esternamente, beh, sì, ottieni tutti quei tag di chiusura, ma si comprimono bene.

"verbosity" è il vero problema?

Penso che la vera domanda non sia se l'XML sia "verboso", ma se sia più espressivo di quanto sia necessario per un determinato scopo. Alcuni esempi:

  • La possibilità per un elemento di contenere attributi, che sono semanticamente diversi dagli elementi figli. Utile per informazioni fuori banda, come la descrizione del tipo di dati nativi, del contenuto dell'elemento. Ma forse non ti serve, perché le specifiche esterne definiscono il contenuto.
  • Contenuti misti, in cui un elemento può contenere sia elementi figlio che testo (nonché commenti e istruzioni di elaborazione). Utile per il markup, ma forse non per una semplice rappresentazione dei dati.
risposta data 30.07.2016 - 14:51
fonte

Leggi altre domande sui tag