web-dev-qa-db-fra.com

Pourquoi XML est-il appelé un "langage" exactement?

Je me demandais pourquoi XML a 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.

La façon dont vous obtenez XML pour "faire" des choses, pour le transformer en un langage propre, est d'ajouter des attributs xmlns à son élément racine. Ce n'est qu'alors qu'il dit à son environnement de quoi il s'agit.
Un exemple est XHTML. Il est actif, il contient des liens, des hypertextes, des styles, etc., tous déclenchés par le xmlns. Sans cela, un fichier XHTML n'est qu'un tas de données dans des nœuds de balisage.

Alors pourquoi XML est-il appelé un 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. Puisque la réponse est actuellement "parce que XML a été nommé d'après SGML, qui a été nommé d'après GML, etc.", la question aurait dû être, pourquoi les langages de balisage (comme XML) sont-ils appelés langages?

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

107
Mr Lister

La vraie réponse est XML a un L dans le nom parce qu'un gars nommé Raymond [~ # ~] l [~ # ~] orie était parmi les concepteurs du premier "langage de balisage" chez IBM dans les années 70. Les développeurs ont dû trouver un nom pour la langue alors ils ont choisi [~ # ~] gml [~ # ~] parce que c'était les initiales des trois développeurs (Goldfarb, Mosher et Lorie). Ils ont ensuite créé le backronym Generalized Markup Language.

Cela est devenu plus tard standardisé en SGML ( Standardized General Markup Language), et lorsque XML a été créé, les développeurs ont voulu conserver le ML-postfix pour indiquer la relation familiale avec SGML, et ils ont ajouté le X devant parce qu'ils trouvaient ça cool. (Même si cela n'a pas de sens - XML ​​est un méta-langage qui vous permet de définir des langues extensibles, mais XML n'est pas vraiment extensible lui-même.)

Quant à votre deuxième question si XML peut légitimement être appelé un langage:

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

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

Les langages de programmation sont un sous-ensemble de langages. Par exemple. HTML et CSS sont langages mais pas langages de programmation, alors que JavaScript est un vrai langage de programmation. Cela dit, il n'y a pas non plus de définition formelle de langage de programmation, et il y a une grande zone grise de langages qui pourraient être appelés formats de données ou langages de programmation selon votre point de vue.

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

Votre point sur les espaces de noms n'est pas pertinent. Les espaces de noms sont une fonctionnalité facultative de XML et ne changent 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 souligné que vous aviez peut-être voulu dire quelque chose de différent avec ce que j'avais compris. Peut-être que vous vouliez dire que des vocabulaires spécifiques comme XHTML, RSS, XSLT, etc. sont des langages car ils associent des éléments et des attributs à une sémantique particulière, mais la norme XML elle-même ne définit aucune sémantique pour des éléments et des attributs spécifiques, donc elle ne ressemble pas à un " vrai langage ".

Ma réponse à cela serait que XML le fait définit à la fois la syntaxe et la sémantique, il la définit simplement à un niveau différent. Par exemple, il définit la syntaxe des éléments et des attributs et des règles sur la façon de les traiter. XML est un "métalangage" qui est toujours une sorte de langage (tout comme les métadonnées sont toujours des données!). Par exemple EBNF est aussi clairement une langue, mais son but est de définir la syntaxe d'autres langues, c'est donc aussi un métalangage.

241
JacquesB

Parce que c'est une langue. Un langage 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++ et Java et similaires ne "font" rien tant qu'ils ne sont pas introduits dans un compilateur et que la sortie n'est pas exécutée. Faire des trucs et être un langage sont en grande partie orthogonaux à L'une et l'autre.

180
Ixrec

Soit Σ un ensemble fini et non vide de symboles, 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 une langue .

Appliquons cela à XML. Son alphabet est le nicode jeu de caractères U, qui est non vide et fini. Toutes les concaténations de zéro ou plusieurs caractères Unicode ne sont pas un document XML bien formé, par exemple, la chaîne

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

n'est clairement pas. Le sous-ensemble XML ⊂ U* que les documents bien formés XML sont décidables (ou "récursif"). Il existe une machine (algorithme ou programme informatique) qui prend en entrée tout mot w ∈ U* et après un laps de temps limité, sort soit 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 fini, ne l'est pas (c'est ce qu'on appelle problème d'arrêt ). Quand on conçoit une nouvelle langue, une décision importante à prendre est de savoir si elle devrait être aussi puissante que possible ou si l'expressivité serait mieux limitée en faveur de la décidabilité.

Certaines langues peuvent être définies au moyen d'une grammaire que l'on dit produire le Langue. Une grammaire se compose de

  • un ensemble fini de littéraux (aussi appelé symboles terminaux),
  • un ensemble fini disjoint de variables de la grammaire (aussi appelé non-terminal symboles),
  • un distingué symbole de départ, tiré de l'ensemble des variables et
  • un ensemble fini de règles (soi-disant productions) qui permettent certains types de remplacements.

Tout mot qui se compose exclusivement de littéraux et peut être dérivé en commençant par le symbole de départ et en appliquant ensuite 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, 9, et 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 0 ou
    • par l'un des littéraux autres que 0 suivi de 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 [~ # ~]appliquer la règle 4, 2dakota du Nord variante) → 4 [~ # ~] d [~ # ~] - (appliquer la règle 5, 1st variante) → 42 [~ # ~] d [~ # ~] - (appliquer la règle 5, 2dakota du Nord variante) → 42.

Selon la complexité des règles que vous autorisez dans votre grammaire, des machines différemment sophistiquées 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, qui est 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 (sauf si je néglige une fonctionnalité 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). Chaque langue qui peut être décrite par une grammaire est au moins semi-décidable (ou "récursivement énumérable"). Autrement dit, il existe une machine qui, étant donné un mot qui appartient réellement à la langue, tire une preuve qu'elle peut être produite par la grammaire dans un temps fini, et ne produira jamais une mauvaise preuve. Une telle machine est appelée un - vérificateur. Notez que la machine peut ne jamais s'arrêter lorsqu'elle reçoit un mot qui n'appartient pas réellement à la langue. De toute évidence, nous voulons que nos langages de programmation soient décrits par des grammaires moins puissantes afin de pouvoir rejeter des programmes invalides dans un temps fini.

Les schémas sont un ajout au XML qui permettent d'affiner l'ensemble de documents bien formés. Un document bien formé qui suit un certain schéma est appelé valide selon 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 d'autre. La validation du schéma peut également être effectuée par un algorithme dont l'arrêt est garanti après un nombre fini d'étapes pour chaque entrée. Un tel programme est appelé un validateur ou un analyseur de validation. Les schémas sont définis par les soi-disant langages de définition de scema, qui sont un moyen de définir formellement des grammaires. XSD est le langage de définition de schéma officiel 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 au XSD.

Parce que 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 qui donne aux documents XML une interprétation en tant que 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'arbre de syntaxe abstraite de presque n'importe quel langage de programmation tout naturellement en XML, si c'est ce que vous voulez.

102
5gon12eder

En informatique, 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 expressions régulières et formel grammaires ).

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

Maintenant, cela signifie que les langages de programmation sont des langages formels qui ont également une sémantique, qui décrit certains calculs. Et par exemple, XHTML est un langage formel, dont la sémantique décrit (grossièrement et informellement) à quoi ressemble et se comporte un document hypertexte.

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

Techniquement, les formats binaires sont également des langues, mais ils ne sont pas appelés de cette façon. Le terme "langage" est réservé aux formats lisibles par l'homme.

31
svick

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 comme XML est un langage de transmission de données.

12
Philipp

XML est un méta-langage. Vous l'utilisez pour définir des langues spécifiques. Les langues ne font jamais rien, elles nous permettent juste d'exprimer des choses. De plus, il n'est pas vrai que XML soit un "langage de stockage". Au 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 ne pensez pas que XML "fait" quelque chose, vous devrez expliquer comment de nombreux systèmes (par exemple Jetty) utilisent XML comme un (mauvais) langage de programmation. C'est un lamentable abus de XML, mais il existe à l'état sauvage, et ce n'est qu'un exemple parmi tant d'autres.

2
user223083