Perché XML è chiamato esattamente un "linguaggio"?


105

Mi chiedevo perché XML abbia una L nel suo nome.

Di per sé, XML non "fa" nulla. È solo un formato di archiviazione dei dati, non una lingua! Le lingue "fanno" le cose.

Il modo in cui si ottiene XML per "fare" cose, per trasformarlo in un linguaggio proprio, è quello di aggiungere xmlnsattributi al suo elemento radice. Solo allora racconta al suo ambiente di cosa si tratta.
Un esempio è XHTML. È attivo, ha collegamenti, ipertesto, stili ecc., Tutti attivati ​​da xmlns. Senza questo, un file XHTML è solo un mucchio di dati nei nodi di markup.

Allora perché allora XML è chiamato un linguaggio? Non descrive nulla, non interpreta, lo è e basta.

Modifica: forse la mia domanda avrebbe dovuto essere più ampia. Poiché la risposta è attualmente "perché XML è stato chiamato dopo SGML, che è stato chiamato GML, ecc." La domanda avrebbe dovuto essere, perché i linguaggi di markup (come XML) sono chiamati linguaggi?

Oh, e WRT i voti stretti: no, non sto chiedendo della X. Sto chiedendo della L!


128
Su cosa poni la tua esigenza che una lingua debba "fare" qualcosa? Non lo vedo in nessuna delle definizioni sul dizionario.com .
kdgregory,

10
Proprio come Swahili è compreso solo se entrambi lo capiscono. O un articolo di rivista medica è compreso se il lettore comprende quella parte della lingua. Non è diverso. E le persone compongono le definizioni.
Sami Kuhmonen,

42
Il linguaggio di markup è un termine comune en.wikipedia.org/wiki/Markup_language
paparazzo

37
@MrLister: "Questi sono linguaggi umani, non linguaggi informatici" Una lingua è una lingua. Nella sua forma più estrema, anche l'inglese richiede informazioni contestuali (quale dialetto viene utilizzato) per capire in modo inequivocabile. Non gli impedisce di essere una lingua. La tua domanda ha semplicemente una premessa errata.
Razze di leggerezza in orbita

68
Le lingue non fanno cose, esprimono e comunicano cose
Hagen von Eitzen,

Risposte:


238

La vera risposta è che XML ha una L nel nome perché un ragazzo di nome Raymond L orie è stato tra i progettisti del primo "linguaggio di marcatura" presso IBM negli anni '70. Gli sviluppatori hanno dovuto trovare un nome per la lingua, quindi hanno scelto GML perché erano le iniziali dei tre sviluppatori (Goldfarb, Mosher e Lorie). Hanno quindi creato il backronym Generalized Markup Language .

Questo in seguito divenne standardizzato come SGML ( Standard General Markup Language ), e quando fu creato XML, gli sviluppatori volevano mantenere il postfisso ML per indicare la relazione familiare con SGML, e aggiunsero la X di fronte perché pensavano che fosse bella. (Anche se in realtà non ha senso: XML è un meta linguaggio che consente di definire linguaggi estensibili, ma XML non è realmente estensibile in sé.)

Per quanto riguarda la tua seconda domanda se XML può legittimamente essere chiamato una lingua:

Qualsiasi formato testuale strutturato (o anche binario) che può essere elaborato computazionalmente può essere chiamato una lingua. Una lingua non "fa" nulla in quanto tale, ma alcuni software potrebbero elaborare input nella lingua e "fare" qualcosa basato su di essa.

Si noti che XML è un "formato di archiviazione" che è vero, ma un formato di archiviazione testuale può essere chiamato una lingua, questi termini non si escludono a vicenda.

I linguaggi di programmazione sono un sottoinsieme di lingue. Ad esempio HTML e CSS sono linguaggi ma non linguaggi di programmazione , mentre JavaScript è un vero linguaggio di programmazione. Detto questo, non esiste nemmeno una definizione formale del linguaggio di programmazione e esiste una vasta zona grigia di linguaggi che potrebbe essere chiamata formati di dati o linguaggi di programmazione a seconda del punto di vista.

Detto questo, XML è chiaramente un linguaggio. semplicemente non un linguaggio di programmazione, sebbene possa essere utilizzato per definire linguaggi di programmazione come XSLT.

Il tuo punto sugli spazi dei nomi è irrilevante. Gli spazi dei nomi sono una funzione opzionale di XML e non cambiano la semantica di un vocabolario XML. È necessario solo chiarire i nomi degli elementi se il formato può contenere più vocabolari.


Modifica: reinierpost ha sottolineato che potresti aver significato qualcosa di diverso con la domanda rispetto a quello che ho capito. Forse intendevi dire che vocabolari specifici come XHTML, RSS, XSLT ecc. Sono linguaggi perché associano elementi e attributi a una semantica particolare, ma lo stesso standard XML non definisce alcuna semantica per elementi e attributi specifici, quindi non sembra un " linguaggio reale ".

La mia risposta a questo è che XML fa definire sia sintassi e la semantica, è solo la definisce ad un livello diverso. Ad esempio, definisce la sintassi di elementi, attributi e regole su come elaborarli. XML è un "metalinguaggio" che è ancora una specie di linguaggio (proprio come i metadati sono ancora dati!). Ad esempio, EBNF è anche chiaramente una lingua, ma il suo scopo è definire la sintassi di altre lingue, quindi è anche un metalinguaggio.



19
@Snowman: un "linguaggio formale" non corrisponde necessariamente a quello che di solito viene chiamato un linguaggio nell'informatica. Ad esempio, un "linguaggio formale" non deve necessariamente essere testuale: il codice macchina è un linguaggio formale come la maggior parte dei formati e dei protocolli binari. Quindi non direi che il termine "linguaggio formale" copre lo stesso significato di "linguaggio" nell'informatica.
Jacques B

15
Non sono a conoscenza di alcun requisito secondo cui una lingua deve essere testuale o non testuale. L'idea di costruire una frase dai terminali non ha nulla a che fare con un'interpretazione arbitraria dei bit in quei terminali, o quali tipi di computer (a base di silicio o carbone) sono in grado di leggerli.

4
@NicolBolas: buon punto, il codice macchina è sicuramente una lingua. Penso solo che sia più comune chiamare "formati" di linguaggi binari, ad esempio si dice che il formato GIF non è il linguaggio GIF.
JacquesB,

3
@BenCottrell: Non sarebbe un grafico allora, dato che potrebbe avere dei loop?
JacquesB,

181

Perché è una lingua. Un linguaggio di markup , non un linguaggio di programmazione.

Si noti che anche le lingue umane naturali come l'inglese e lo spagnolo non "fanno" nulla. In effetti, tecnicamente C ++ e Java e simili non "fanno" nulla finché non vengono inseriti in un compilatore e l'output non viene eseguito. Fare cose ed essere una lingua sono in gran parte ortogonali tra loro.


43
Sostituire "interprete" con "compilatore". Essere nutriti con un compilatore non li costringe a "fare" nulla, ma li traduce semplicemente in una lingua diversa, che, di nuovo, non "fa" nulla. Tutta l'esecuzione è interpretazione. A volte, l'interprete potrebbe essere estremamente semplice e implementato in silicio, nel qual caso lo chiamiamo "unità di esecuzione", ma è ancora un interprete. </nitpick>Comunque, buona risposta!
Jörg W Mittag,

8
@ JörgWMittag Ottimo punto. Dato che ho scelto casualmente le lingue che sono normalmente compilate, ho aggiunto "e l'output viene eseguito".
Ixrec,

1
Un linguaggio di markup estensibile , se vuoi.
doppelgreener,

1
Direi che i linguaggi umani "fanno" cose. Vedi teoria del discorso-atto ...
Ray

2
Ortogonalità dolce e dolce. Esegui la lingua in una diversa algebra e si sviluppa una serie completamente nuova di azioni. In teoria, comunque.
Kenogu Labz,

103

Sia Σ un insieme di simboli finito non vuoto, chiamato alfabeto . Quindi Σ * è l'insieme infinito numerabile di parole finite che può essere formato concatenando zero o più simboli da Σ. Qualsiasi sottoinsieme ben definito L ⊆ Σ * è una lingua .

Appliciamo questo a XML. Il suo alfabeto è il set di caratteri Unicode U , che è non vuoto e finito. Non tutte le concatenazioni di zero o più caratteri Unicode sono un documento XML ben formato, ad esempio la stringa

<tag> soup &; not <//good>

chiaramente non lo è. Il sottoinsieme XML ⊂ U * che forma documenti XML ben formati è decidibile (o "ricorsivo"). Esiste una macchina (algoritmo o programma per computer) che accetta come input qualsiasi parola wU * e dopo un tempo limitato, genera 1 se w ∈ XML e 0 altrimenti. Tale algoritmo è una sub-routine di qualsiasi software di elaborazione XML. Non tutte le lingue sono decidibili. Ad esempio, l'insieme di programmi C validi che terminano in un tempo limitato, non lo è (questo è noto come problema di arresto). Quando si progetta un nuovo linguaggio, una decisione importante da prendere è se dovrebbe essere il più potente possibile o se l'espressività sarebbe meglio essere limitata a favore della decidibilità.

Alcune lingue possono essere definite mediante una grammatica che si dice produca la lingua. Una grammatica è composta da

  • un insieme finito di letterali (chiamati anche simboli terminali ),
  • un insieme finito disgiunto di variabili della grammatica (chiamato anche simboli non terminali ),
  • un distinto simbolo iniziale , preso dall'insieme di variabili e
  • un insieme finito di regole (le cosiddette produzioni ) che consentono determinati tipi di sostituzioni.

Qualsiasi parola che consiste esclusivamente di letterali e può essere derivata iniziando con il simbolo iniziale e quindi applicando le regole date appartiene alla lingua prodotta dalla grammatica.

Ad esempio, la seguente grammatica (in notazione piuttosto informale) consente di derivare esattamente gli interi in notazione decimale.

  1. I letterali della grammatica sono le cifre 1, 2, 3, 4, 5, 6, 7, 8, 9, e 0.
  2. Le variabili sono i simboli S e D .
  3. S è il simbolo iniziale.
  4. Qualsiasi occorrenza della variabile S può essere sostituita
    • con il letterale 0o
    • da qualsiasi letterali diversi 0seguita dalla variabile D .
  5. Qualsiasi occorrenza della variabile D può essere sostituita
    • da uno qualsiasi dei letterali seguito da un'altra istanza della variabile D o
    • dalla stringa vuota.

Ecco come deriviamo 42:

S - (applicare regola 4, 2 ° variante) → 4 D - (applicare regola 5, 1 st variante) → 42 D - (applicare regola 5, 2 nd variante) → 42.

A seconda di come regole elaborate consentite nella vostra grammatica, sono necessarie macchine diversamente sofisticate per dimostrare che una determinata parola può effettivamente essere prodotta dalla grammatica. L'esempio sopra riportato è una grammatica regolare , che è la più semplice e meno potente. La prossima potente classe di grammatiche è chiamata senza contesto . Queste grammatiche sono anche molto semplici da verificare. XML (a meno che non stia trascurando alcune funzionalità oscure di cui non sono a conoscenza) può essere descritto da una grammatica senza contesto. La classificazione delle grammatiche costituisce la Gerarchia delle grammatiche di Chomsky (e quindi le lingue). Ogni lingua che può essere descritta da una grammatica è almeno semi-decidibile(o "ricorsivamente enumerabile"). Cioè, esiste una macchina che, data una parola che appartiene effettivamente alla lingua, deriva una prova che può essere prodotta dalla grammatica entro un tempo finito e non produrrà mai una prova sbagliata. Tale macchina si chiama verificatore . Si noti che la macchina potrebbe non arrestarsi mai quando viene data una parola che non appartiene alla lingua. Chiaramente, vogliamo che i nostri linguaggi di programmazione siano descritti da grammatiche meno potenti a beneficio della possibilità di rifiutare programmi non validi entro un tempo limitato.

Gli schemi sono un'aggiunta a XML che consente di perfezionare l'insieme di documenti ben formati. Un documento ben formato che segue un determinato schema viene chiamato valido secondo tale schema. Ad esempio, la stringa

<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>

è un documento XML ben formato ma non un documento XHTML valido. Esistono schemi per XHTML , SVG , XSLT e cos'altro. La convalida dello schema può anche essere eseguita da un algoritmo che è garantito per arrestarsi dopo una quantità finita di passaggi per ogni input. Tale programma è chiamato validatore o parser di validazione. Gli schemi sono definiti dai cosiddetti linguaggi di definizione scema , che sono un modo per definire formalmente le grammatiche. XSD è il linguaggio ufficiale di definizione dello schema per XML ed è esso stesso basato su XML. RELAX NG è un'alternativa più elegante, molto più semplice e leggermente meno potente a XSD.

Poiché è possibile definire i propri schemi, XML è chiamato un linguaggio estensibile , che è l'origine della "X" in "XML".

È possibile definire un insieme di regole che dia ai documenti XML un'interpretazione come descrizioni di programmi per computer. XSLT, menzionato in precedenza, è un esempio di tale linguaggio di programmazione creato con XML. Più in generale, è possibile serializzare l'albero di sintassi astratto di quasi tutti i linguaggi di programmazione in modo abbastanza naturale in XML, se questo è ciò che si desidera.


7
@Giorgio: in matematica, "ben definito" è in gran parte solo un intensificatore: tutto ciò che esiste matematicamente è già ben definito.
Kevin,

9
@Giorgio Con "ben definito" intendo che esiste un predicato formale che dice se un oggetto appartiene o meno al set. Questo predicato non sarà generalmente calcolabile, ma deve essere chiaramente specificato senza contraddizioni. Altrimenti, potrebbero succedere cose brutte . "Le coppie di stringhe ( w , M ) in cui M è la più piccola descrizione di una macchina di Turing che produce w e quindi si ferma" è un predicato ben definito ma non calcolabile (vedi complessità di Kolmogorov ). …
5gon12eder

2
@ 5gon12eder: quel set non esiste in ZFC (perché lo schema assiomatico di separazione non è abbastanza potente per descriverlo); se stai usando qualche altra teoria degli insiemi, dovresti specificarla.
Kevin,

5
@ 5gon12eder: "L'insieme contenente tutte le stringhe che non sono contenute nell'insieme" non esiste. Il termine "ben definito" non è ironicamente ben definito.
Kevin,

3
La proprietà o la validazione ben formata viene eseguita da una grammatica . Questa risposta sarebbe stata perfetta se l'avessi menzionato.
Thibault D.

31

Nell'informatica, il linguaggio formale è solo un insieme di stringhe, generalmente infinite e spesso descritte usando regole (due versioni comuni di tali regole sono espressioni regolari e grammatiche formali ).

Nota che questo significa che tutto ciò di cui una lingua ha bisogno è la sintassi , la lingua non ha bisogno di descrivere cosa significa ogni stringa valida (che si chiama semantica ).

Ora, questo significa che i linguaggi di programmazione sono linguaggi formali che hanno anche una semantica, che descrive alcuni calcoli. E ad esempio XHTML è un linguaggio formale, la cui semantica descrive (in modo approssimativo e informale) l'aspetto e il comportamento di un documento ipertestuale.

XML è ancora un linguaggio, anche se non ha la semantica stessa (ma molti linguaggi derivati ​​da XML lo fanno, come XHTML e XAML).

Tecnicamente, anche i formati binari sono lingue, ma non sono chiamati in questo modo. Il termine "lingua" è riservato ai formati leggibili dall'uomo.


10
@MrLister Perché non sono leggibili dall'uomo. Quando non sono leggibili dall'uomo, tendiamo invece a chiamarli formati o formati di dati .
Mason Wheeler,

3
@JamesSnell Ovviamente da non confondere con l'altra famiglia di lingue ML. Sì per acronimi troppo affollati!
Mason Wheeler,

3
Se uno sta usando strumenti formali per costruire un parser (o soprattutto un validatore) per JFIF ecc., Gli ingegneri potrebbero effettivamente chiamarlo "linguaggio". Più probabilmente però come una "grammatica".
JDługosz,

3
@MrLister: Beh, sono lingue, ma poiché definiscono strutture di dati riutilizzabili hanno un nome speciale: formati . Ma sì, anche queste sono lingue.
Razze di leggerezza in orbita

4
@MrLister: nominare un formato è più una questione di marketing. Le persone XML hanno chiamato XML per XML perché "* ML" indica una relazione familiare con un formato precedente come GML e SGML, e perché hanno pensato che fosse bello con una X nella parte anteriore. E GML si chiamava GML perché era un linguaggio di markup generalizzato, ma anche perché era la sigla dei tre designer linguistici. Quindi sostanzialmente la L in XML è perché un ragazzo chiamato Raymond L orie era tra i progettisti del primo linguaggio di markup.
Jacques B

12

Una lingua è un metodo per trasmettere informazioni.

Un linguaggio di programmazione è un metodo per trasmettere algoritmi.

Un linguaggio di markup come XML è un linguaggio per il trasferimento di dati.


... e quei dati potrebbero benissimo essere una descrizione di un algoritmo.
Luaan,

@Luaan ... e un linguaggio di programmazione possono anche essere abusati per trasmettere dati. Come con JSON, per esempio.
Philipp

2
Puoi persino fare ricorso. Ho visto script NAnt (un linguaggio basato su XML) che conteneva codice C #, che veniva utilizzato solo per l'archiviazione dei dati. Utilizzo di valori letterali stringa contenenti XML. Sì, è il genere di cosa che fa piangere gli uomini adulti: P
Luaan,

2

XML è un meta-linguaggio. Lo usi per definire lingue specifiche. Le lingue non fanno mai nulla, ci permettono solo di esprimere le cose. Inoltre, non è vero che XML sia un "linguaggio di archiviazione". Esattamente l'opposto, infatti. Puoi archiviare documenti XML come preferisci. XML è meglio pensato come un linguaggio di trasferimento. PS. Se non pensate che XML "faccia" qualcosa, dovrete spiegare come molti sistemi (ad esempio il molo) usano XML come un (cattivo) linguaggio di programmazione. È un deplorevole abuso di XML, ma esiste in natura e questo è solo uno dei tanti esempi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.