Pourquoi XML est-il appelé un «langage» exactement?

105

Je me demandais pourquoi XML avait un L dans son nom.

En soi, XML ne "fait" rien. C'est juste un format de stockage de données, pas une langue! Les langues "font" des choses.

Pour que XML fasse "faire" des choses, pour en faire un langage propre, vous devez ajouter des xmlnsattributs à son élément racine. Alors seulement, il dit à son environnement de quoi il parle.
Un exemple est XHTML. Il est actif, il contient des liens, des liens hypertextes, des styles, etc., tous déclenchés par le fichier xmlns. Sans cela, un fichier XHTML ne représente qu'un ensemble de données dans des nœuds de balisage.

Alors pourquoi XML est-il appelé langage? Il ne décrit rien, il n'interprète pas, c'est juste.

Edit: Peut-être que ma question aurait dû être plus large. Comme la réponse est actuellement "parce que XML a été nommé d'après SGML, qui s'appelle GML, etc.", la question aurait dû être de savoir pourquoi les langages de balisage (comme XML) sont appelés langages?

Oh, et WRT les votes serrés: non, je ne parle pas du X. Je parle du L!

M. Lister
la source
128
Sur quoi basez-vous votre exigence selon laquelle une langue doit "faire" quelque chose? Je ne vois cela dans aucune des définitions de dictionary.com .
kdgregory
10
Tout comme le swahili n'est compris que si les deux le comprennent. Ou un article de revue médicale est compris si le lecteur comprend cette partie de la langue. Ce n'est pas différent. Et les gens inventent les définitions.
Sami Kuhmonen
42
Le langage de balisage est un terme courant fr.wikipedia.org/wiki/Markup_language
paparazzo
37
@MrLister: "Ce sont des langues humaines, pas des langages informatiques" Une langue est une langue. À l'extrême, même l'anglais nécessite des informations contextuelles (quel dialecte est utilisé) pour comprendre sans ambiguïté. Cela ne l'empêche pas d'être une langue. Votre question a simplement une fausse prémisse.
Courses de légèreté en orbite
68
Langues don'rt font les choses, ils expriment et communiquent les choses
Hagen von Eitzen

Réponses:

238

La vraie réponse est que XML a un L dans son nom car un gars nommé Raymond L orie faisait partie des concepteurs du premier "langage de balisage" chez IBM dans les années 1970. Les développeurs ont dû trouver un nom pour le langage, ils ont donc choisi GML, car ce sont les initiales des trois développeurs (Goldfarb, Mosher et Lorie). Ils ont ensuite créé le langage de balisage généralisé backronym .

Ceci est devenu plus tard normalisé sous le nom de SGML ( Standardized General Markup Language ), et lors de la création de XML, les développeurs ont voulu conserver le suffixe ML pour indiquer la relation familiale avec SGML et ils ont ajouté le X devant parce qu'ils le trouvaient cool. (Même si cela n'a pas vraiment de sens - XML ​​est un méta-langage qui permet de définir des langages extensibles, mais XML n'est pas vraiment extensible lui-même.)

En ce qui concerne votre deuxième question si XML peut légitimement être appelé un langage:

Tout format textuel structuré (ou même binaire) pouvant être traité par calcul peut être appelé langage. Une langue ne "fait" rien en tant que tel, mais certains logiciels peuvent traiter les entrées dans la langue et "faire" quelque chose en fonction de celle-ci.

Vous notez que XML est un "format de stockage" ce qui est vrai, mais un format de stockage textuel peut être appelé langage, ces termes ne s'excluant pas mutuellement.

Les langages de programmation sont un sous-ensemble de langages. Par exemple, HTML et CSS sont des langages mais pas des langages de programmation , alors que JavaScript est un vrai langage de programmation. Cela dit, il n’existe pas non plus de définition formelle du langage de programmation et il existe une grande zone grise de langages que l’on peut appeler soit formats de données, soit langages de programmation, selon votre point de vue.

Compte tenu de cela, XML est clairement un langage. Ce n’est tout simplement pas un langage de programmation - bien qu’il puisse être utilisé pour définir des langages de programmation tels que XSLT.

Votre remarque sur les espaces de noms est sans importance. Les espaces de noms sont une fonctionnalité facultative de XML et ne modifient pas la sémantique d'un vocabulaire XML. Il suffit de lever l’ambiguïté des noms d’élément si le format peut contenir plusieurs vocabulaires.


Edit: Reinierpost a fait remarquer que vous aviez peut-être eu autre chose à dire avec la question que ce que j'ai compris. Peut-être avez-vous voulu dire que les vocabulaires spécifiques tels que XHTML, RSS, XSLT, etc. sont des langages, car ils associent des éléments et des attributs à une sémantique particulière, mais le standard XML lui-même ne définit aucune sémantique pour des éléments et des attributs spécifiques. vrai langage ".

Ma réponse à cette situation serait que XML ne définir à la fois la syntaxe et la sémantique, il définit simplement à un niveau différent. Par exemple, il définit la syntaxe des éléments et des attributs, ainsi que des règles sur la manière de les traiter. XML est un "métalangage" qui est toujours une sorte de langage (tout comme les métadonnées sont encore des données!). A titre d'exemple, EBNF est aussi clairement un langage, mais son but est de définir la syntaxe d'autres langages, il s'agit donc également d'un métalangage.

JacquesB
la source
19
@Snowman: Un "langage formel" ne correspond pas nécessairement à ce qu'on appelle habituellement un langage informatique. Par exemple, un "langage formel" n'a pas besoin d'être textuel - le code machine est aussi formel que la plupart des formats et protocoles binaires. Donc, je ne dirais pas que le terme "langage formel" recouvre le même sens que "langage" en informatique.
JacquesB
15
Je ne suis au courant d'aucune exigence selon laquelle une langue doit être textuelle ou ne pas être textuelle. L’idée de construire une phrase à partir de terminaux n’a rien à voir avec une interprétation arbitraire des bits de ces terminaux, ni avec les types d’ordinateurs (silicium ou à carbone) capables de les lire.
4
@ NicolBolas: Bon point, le code machine est un langage. Je pense simplement qu'il est plus courant d'appeler des "formats" de langages binaires, par exemple vous dites que le format GIF n'est pas le langage GIF.
JacquesB
3
@ BenCottrell: Ne s'agirait-il pas d'un graphique, puisqu'il peut y avoir des boucles?
JacquesB
181

Parce que c'est une langue. Un langage de balisage , pas un langage de programmation.

Notez que les langues humaines naturelles comme l'anglais et l'espagnol ne «font» rien non plus. En fait, techniquement, C ++, Java, etc., ne "font" rien tant qu'ils ne sont pas introduits dans un compilateur et que la sortie est exécutée. Faire des choses et être une langue sont en grande partie orthogonaux les uns aux autres.

Ixrec
la source
43
Remplacez "interprète" par "compilateur". Etre alimenté par un compilateur ne leur fait pas "faire" quoi que ce soit, il les traduit simplement dans une langue différente, ce qui, encore une fois, ne "fait" rien. Toute exécution est interprétation. Parfois, l'interprète peut être extrêmement simple et implémenté en silicium, auquel cas nous l'appelons une "unité d'exécution", mais il s'agit toujours d'un interprète. </nitpick>Quoi qu'il en soit, bonne réponse!
Jörg W Mittag
8
@ JörgWMittag Bon point. Depuis que j'ai choisi au hasard des langues qui sont normalement compilées, ajouté "et la sortie est exécutée".
Ixrec
1
Un langage de balisage extensible , si vous voulez.
doppelgreener
1
Je dirais que les langues humaines font des choses "font". Voir la théorie parole-acte ...
Ray
2
Orthogonalité douce et douce. Exécutez le langage dans une algèbre différente et un nouvel ensemble d'actions se déploie. En théorie, de toute façon.
Kenogu Labz
103

Soit Σ un ensemble fini de symboles non vides, appelé alphabet . Alors Σ * est l’ensemble infini dénombrable de mots finis qui peuvent être formés en concaténant zéro ou plusieurs symboles de. Tout sous-ensemble bien défini L * est un langage .

Appliquons ceci à XML. Son alphabet est le jeu de caractères Unicode U , qui est non vide et fini. Toute concaténation de zéro ou de plusieurs caractères Unicode n’est pas un document XML bien formé, par exemple, la chaîne

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

est clairement pas. Le sous-ensemble XML ⊂ U * qui forme des documents XML bien formés est décidable (ou «récursif»). Il existe une machine (algorithme ou programme informatique) qui prend en entrée n'importe quel mot wU * et après un laps de temps fini, renvoie 1 si w ∈ XML et 0 sinon. Un tel algorithme est une sous-routine de tout logiciel de traitement XML. Toutes les langues ne sont pas décidables. Par exemple, l’ensemble des programmes C valides qui se terminent dans un laps de temps déterminé n’est pas (c’est ce que l’on appelle le problème d’arrêt). Lorsque l’on conçoit une nouvelle langue, il est important de décider si elle doit être aussi puissante que possible ou si l’expressivité serait mieux restreinte en faveur de la décidabilité.

Certaines langues peuvent être définies à l'aide d'une grammaire dite productrice . Une grammaire comprend

  • un ensemble fini de littéraux (également appelés symboles terminaux ),
  • un ensemble fini disjoint de variables de la grammaire (également appelé symboles non terminaux ),
  • un symbole de départ distingué , tiré de l'ensemble des variables et
  • un ensemble fini de règles (dites productions ) autorisant certains types de remplacement.

Tout mot composé exclusivement de littéraux et pouvant être dérivé en commençant par le symbole de départ, puis en appliquant les règles données, appartient à la langue produite par la grammaire.

Par exemple, la grammaire suivante (en notation plutôt informelle) vous permet de dériver exactement les entiers en notation décimale.

  1. Les littéraux de la grammaire sont les chiffres 1, 2, 3, 4, 5, 6, 7, 8, 9et 0.
  2. Les variables sont les symboles S et D .
  3. S est le symbole de départ.
  4. Toute occurrence de la variable S peut être remplacée
    • avec le littéral 0ou
    • par l' un des littéraux autres que 0suivie par la variable D .
  5. Toute occurrence de la variable D peut être remplacée
    • par l'un des littéraux suivi d'une autre instance de la variable D ou
    • par la chaîne vide.

Voici comment nous dérivons 42:

S - (applique la règle 4, 2 ème variante) → 4 D - (applique la règle 5, 1 re variante) → 42 D - (applique la règle 5, 2 ème variante) → 42.

Selon les règles élaborées que vous autorisez dans votre grammaire, des machines sophistiquées différentes sont nécessaires pour prouver qu'un mot donné peut réellement être produit par la grammaire. L'exemple donné ci-dessus est une grammaire régulière , la plus simple et la moins puissante. La prochaine classe puissante de grammaires s'appelle sans contexte . Ces grammaires sont également très simples à vérifier. XML (à moins que j'ignore une fonction obscure dont je ne suis pas au courant) peut être décrit par une grammaire sans contexte. La classification des grammaires forme la hiérarchie de Chomsky des grammaires (et donc des langues). Toute langue pouvant être décrite par une grammaire est au moins semi-décidable(ou "récursivement énumérable"). C'est-à-dire qu'il existe une machine qui, étant donné un mot qui appartient réellement à la langue, tire la preuve qu'elle peut être produite par la grammaire en un temps fini et ne produira jamais une preuve fausse. Une telle machine s'appelle un vérificateur . Notez que la machine peut ne jamais s'arrêter quand on vous donne un mot qui n'appartient pas réellement à la langue. Il est clair que nous souhaitons que nos langages de programmation soient décrits par des grammaires moins puissantes, afin de pouvoir rejeter les programmes non valides dans un temps fini.

Les schémas sont un ajout au XML qui permet d'affiner l'ensemble des documents bien formés. Un document bien formé qui suit un certain schéma est appelé valide en fonction de ce schéma. Par exemple, la chaîne

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

est un document XML bien formé mais pas un document XHTML valide. Il existe des schémas pour XHTML , SVG , XSLT et quoi encore. La validation de schéma peut également être effectuée par un algorithme dont l’arrêt après chaque étape est limité pour chaque entrée. Un tel programme s'appelle un validateur ou un analyseur de validation. Les schémas sont définis par les langages de définition de scema , qui permettent de définir formellement les grammaires. XSD est le langage officiel de définition de schéma pour XML et est lui-même basé sur XML. RELAX NG est une alternative plus élégante, beaucoup plus simple et légèrement moins puissante que XSD.

Comme vous pouvez définir vos propres schémas, XML est appelé un langage extensible , qui est l’origine du «X» dans «XML».

Vous pouvez définir un ensemble de règles donnant une interprétation aux documents XML sous forme de descriptions de programmes informatiques. XSLT, mentionné précédemment, est un exemple d'un tel langage de programmation construit avec XML. Plus généralement, vous pouvez sérialiser l'arborescence de syntaxe abstraite de presque tous les langages de programmation en XML, si vous le souhaitez.

5gon12eder
la source
7
@Giorgio: En mathématiques, "bien défini" est en grande partie un intensificateur: tout ce qui existe mathématiquement est déjà bien défini.
Kevin
9
@Giorgio Par «bien défini», je veux dire qu'il existe un prédicat formel qui indique si un élément appartient ou non à l'ensemble. Ce prédicat ne sera en général pas calculable, mais il doit être clairement spécifié sans contradiction. Sinon, de mauvaises choses pourraient arriver . «Les paires de chaînes ( w , M ), où M est la plus petite description d'une machine de Turing générant w puis s'arrêtant» est un prédicat bien défini mais non calculable (voir Complexité de Kolmogorov ). …
5gon12eder
2
@ 5gon12eder: cet ensemble n'existe pas sous ZFC (car le schéma de séparation axiome n'est pas assez puissant pour le décrire); si vous utilisez une autre théorie des ensembles, vous devez la spécifier.
Kevin
5
@ 5gon12eder: "Le jeu contenant toutes les chaînes qui ne sont pas contenues dans le jeu" n'existe pas. Le terme "bien défini" n’est ironiquement pas bien défini.
Kevin
3
La propriété bien formée ou la validation est effectuée par une grammaire . Cette réponse avait été parfaite si vous l'aviez mentionné.
Thibault D.
31

En informatique, le langage formel n'est qu'un ensemble de chaînes, généralement infinies et souvent décrites à l'aide de règles (deux versions courantes de ces règles sont les expressions régulières et les grammaires formelles ).

Notez que cela signifie que tout ce dont une langue a besoin est sa syntaxe , elle n'a pas besoin de décrire ce que chaque chaîne valide signifie (cela s'appelle une sémantique ).

Maintenant, cela signifie que les langages de programmation sont des langages formels qui ont aussi une sémantique, qui décrit certains calculs. Par exemple, XHTML est un langage formel dont la sémantique décrit (de manière approximative et informelle) l’aspect et le comportement d’un document hypertexte.

XML est toujours un langage, même s'il ne possède pas de sémantique (contrairement à de nombreux langages dérivés de XML, comme XHTML et XAML).

Techniquement, les formats binaires sont aussi des langages, mais ils ne s'appellent pas ainsi. Le terme "langue" est réservé aux formats lisibles par l'homme.

svick
la source
10
@MrLister Parce qu'ils ne sont pas lisibles par l'homme. Lorsqu'ils ne sont pas lisibles par l'homme, nous avons plutôt tendance à les appeler formats ou formats de données .
Mason Wheeler
3
@JamesSnell À ne pas confondre avec l'autre famille de langues ML, bien sûr. Yay pour les acronymes surchargés!
Mason Wheeler
3
Si l’on utilise des outils formels pour construire un analyseur syntaxique (ou surtout un validateur) pour JFIF, etc., les ingénieurs peuvent en effet le qualifier de "langage". Plus probablement comme une "grammaire".
JDługosz
3
@MrLister: Ce sont des langages, mais comme ils définissent des structures de données réutilisables, ils ont un nom spécial: formats . Mais, oui, ce sont aussi des langues.
Courses de légèreté en orbite
4
@MrLister: Nommer un format est davantage une question de marketing. Les personnes XML appelées XML pour XML parce que "* ML" indique une relation de famille avec le format de prédécesseur, tel que GML et SGML, et parce qu'elles pensaient que le résultat était cool avec un X devant. Et GML s'appelait GML parce qu'il s'agissait d'un langage de balisage généralisé, mais aussi parce que c'était les initiales des trois concepteurs de langage. Donc, fondamentalement, le L en XML est dû au fait qu'un gars appelé Raymond L orie faisait partie des concepteurs du premier langage de balisage.
JacquesB
12

Une langue est une méthode de transmission d'informations.

Un langage de programmation est une méthode de transmission d’algorithmes.

Un langage de balisage tel que XML est un langage de transmission de données.

Philipp
la source
... et ces données peuvent très bien être une description d'un algorithme.
Luaan
@Luaan ... et un langage de programmation peut également être utilisé pour transmettre des données. Comme avec JSON, par exemple.
Philipp
2
Vous pouvez même recurse. J'ai vu des scripts NAnt (un langage basé sur XML) contenant du code C #, utilisé uniquement pour le stockage de données. Utilisation de littéraux de chaîne contenant du XML. Oui, c'est le genre de chose qui fait pleurer les hommes adultes: P
Luaan
2

XML est une méta-langue. Vous l'utilisez pour définir des langues spécifiques. Les langues ne font jamais rien, elles nous permettent simplement d'exprimer des choses. En outre, il n'est pas vrai que XML soit un "langage de stockage". Tout le contraire, en fait. Vous pouvez stocker des documents XML comme bon vous semble. XML est mieux considéré comme un langage de transfert. PS Si vous pensez que XML ne "fait" rien, vous devrez expliquer comment de nombreux systèmes (par exemple, une jetée) utilisent XML comme (mauvais) langage de programmation. C'est un abus lamentable de XML, mais il existe à l'état sauvage, et ce n'est qu'un exemple parmi d'autres.


la source