Quels sont les avantages de XML par rapport à la notation des expressions S (-ish)?

11

Je voudrais poser une question sur la notation XML et les expressions S (-ish). Les expressions S sont assez anciennes; ils sont aussi très simples. On pourrait considérer deux formes de sens égal, de syntaxe différente:

(code xml tiré de wikipedia polonais )

<?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>

Version 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 version S-Expression est beaucoup plus concise. Nous évitons la redondance en utilisant des notations de liste simples, mais nous pouvons toujours définir la syntaxe pour inclure les choses que nous voulons avoir (par exemple les propriétés). Bien sûr, ce n'est qu'un exemple, et la norme réelle aurait pu être meilleure ou simplement différente; cependant, il est plus court et plus facile à analyser. Pourquoi XML a-t-il gagné?

MatthewRock
la source
5
Aux downvoters: ne downvote pas si vous n'êtes pas d'accord avec la question, mais si vous pensez qu'elle est de mauvaise qualité (et ensuite, proposez des changements pour améliorer la qualité). @RobertHarvey Si vous pensez que c'est une réponse, veuillez répondre à ma question au lieu de laisser un commentaire.
MatthewRock
1
L'info-bulle sur le bouton downvote comprend la phrase «cette question ne montre aucun effort de recherche».
Robert Harvey
1
Essayez de vous rappeler que ce n'est pas un forum de discussion. La vraie question a des réponses, et les membres de la communauté sont censés fournir des réponses, pas des opinions.
Robert Harvey
1
Les arguments de redondance pour XML (comme avoir des crochets fermants avec le nom du crochet ouvrant) peuvent facilement être émulés par des expressions S. Écrivez simplement (para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para).
Andrew

Réponses:

13

Nous savons que les concepteurs de XML connaissaient bien les expressions S, car XML est basé sur SGML, et SGML a un langage de feuille de style, DSSSL, qui utilise la syntaxe de l'expression S (et le schéma comme langage de script intégré).

Néanmoins, ils ont choisi une syntaxe différente de celle des expressions S en raison des cas d'utilisation de XML. XML a été initialement conçu pour prendre en charge à la fois les données structurées générées par machine et les langages de balisage comme HTML, qui sont créés manuellement et contiennent un contenu mixte (texte entremêlé avec des éléments avec des métadonnées).

Redondance

Les documents texte de balisage sont souvent plus longs qu'un écran. Si vous voyez un )et que vous ne pouvez pas voir le début de la structure, vous êtes assez perdu; vous ne savez pas si c'était un chapitre ou une barre latérale qui vient de se terminer. La redondance de la répétition de la variable dans les balises finales en XML comme </sidebar>cela rend beaucoup plus facile pour l'écrivain humain. Il le rend également plus robuste: si vous supprimez accidentellement une balise de fin, vous pouvez souvent déduire quelle balise de fin est manquante.

SGML (le prédécesseur de XML) vous a permis de raccourcir éventuellement la balise de fin à un seul caractère, mais cette fonctionnalité a été omise de XML pour plus de simplicité.

Donc, en bref, XML est plus verbeux de par sa conception, car il est conçu pour prendre en charge un document modifiable par l'homme. Aujourd'hui, XML est utilisé à des fins très diverses, également pour la communication de machine à machine pure, où cette redondance n'est pas nécessaire.

Contenu mixte

Votre syntaxe suggérée ne prendrait pas très bien en charge le contenu mixte. Prenez cet exemple en HTML:

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

Comment exprimeriez-vous cela dans votre syntaxe? Vous auriez besoin d'une sorte de délimiteur supplémentaire pour faire la distinction entre les attributs et le contenu du texte. Du coup, ce n'est plus si concis.

Caractères spéciaux

Les crochets angulaires sont beaucoup plus rares dans le texte ordinaire que les parenthèses et les deux-points.

Compatibilité

HTML connaissait déjà un succès retentissant au moment de la conception de XML, et il était logique de choisir une syntaxe similaire.

Pourquoi XML a-t-il gagné?

Les expressions S n'ont jamais été une alternative à XML. La spécification XML est bien plus que des crochets; Il définit une syntaxe pour les éléments et les attributs et le contenu mixte, l'échappement, le codage de caractères, la syntaxe et la validation DTD, etc. Rien de semblable n'existait pour les expressions s. Bien sûr, vous pouvez définir une norme similaire, comme vous le proposez ici, mais personne ne l'avait fait à l'époque. XML a été béni par le W3C et a donc été adopté par les principaux acteurs et est devenu la norme de facto pour l'échange de données.

JacquesB
la source
3
Dans son exemple, les deux-points ne sont-ils pas utilisés pour les attributs? Par exemple. (p Salut! (a: href "example.com" Cliquez ici)!)? (ou l'a-t-il simplement
modifié
Bien que cela n'enlève rien à votre (excellente) réponse, qui, dans son bon sens, crée manuellement des documents XML?
Jared Smith
Salut Jacques, merci pour cette excellente réponse! Je suis d'accord avec Headcrab que le contenu mixte n'est pas un problème. Je suis également d'accord avec Jared, même si je suppose que XML est lu / écrit manuellement parfois de toute façon.
MatthewRock
@Headcrab: C'est difficile à dire car il n'y a pas de spécification réelle, juste un exemple hypothétique. Mais il me semble que représenter du texte sous forme de symboles plutôt que d'une chaîne entre guillemets conduirait à des ambiguïtés avec les espaces. Les expressions S ne prennent pas en charge les espaces importants entre les atomes AFAIK, mais vous en avez besoin pour prendre en charge par exemple l' <PRE>élément en HTML. J'ai donc supposé que des devis seraient nécessaires.
JacquesB
2
Il semble donc vraiment que XML a été créé avec toutes ces cloches et sifflets et une syntaxe similaire à HTML qui l'a aidé à gagner les expressions s à l'époque. Au moment où de nombreux développeurs ont décidé que, dans leurs cas d'utilisation, toutes ces fonctionnalités n'étaient pas vraiment nécessaires pour la communication de machine à machine, il existait une alternative légère différente sous la forme de JSON.
kamilk
9

Personnellement, je pense que la meilleure partie de XML est les capacités de schéma bien définies, plutôt que sa syntaxe. Le mécanisme de schéma permet aux utilisateurs de publier leur format de document pour partager ce qu'ils considèrent comme un document valide. Il existe également des validateurs automatisés. De plus, les types et schémas créés par un utilisateur peuvent être étendus par d'autres utilisateurs.

Pour autant que je sache, personne n'a fait l'effort de normaliser un mécanisme de schéma à usage général pour l'expression s, à l'exception du langage LISP lui-même (que l'échantillon de la question de l'OP n'utilise pas).

Erik Eidt
la source
1
Bien que je n'aime pas la verbosité de XML, +1 pour avoir mentionné les capacités de schéma qui en valent presque la peine. :-)
user949300
1

Voici deux raisons pour lesquelles je choisirais XML plutôt que quelque chose "S-expression-ish":

Un modèle syntaxique et sémantique bien défini

XML n'est pas simplement un arbre de nœuds, mais un arbre de nœuds classés qui ont une représentation syntaxique et un comportement différents. Par exemple, un attribut avec un nom donné peut n'apparaître qu'une seule fois pour un nœud donné, tandis que les nœuds enfants peuvent apparaître plusieurs fois.

Vous pouvez définir un tel modèle au-dessus d' expressions S génériques. Vos exemples montrent un schéma de catégorisation des attributs et des éléments enfants. Ajoutez de la sémantique pour le texte, les commentaires et les instructions de traitement, et vous aurez quelque chose d'isomorphe avec XML.

Outillage

À partir du modèle syntaxique et sémantique standard, vous pouvez créer des outils - et beaucoup de gens l'ont. Vous pouvez trouver une certaine forme de parseur / sérialiseur XML, XPath et processeur XSLT pour chaque langue / plate-forme commune. Et vous savez qu'ils se comporteront tous de la même manière sur chaque plateforme.


Et voici quelques autres choses à considérer:

Dans le grand schéma, XML n'est pas si verbeux

Dans votre exemple, qu'avez-vous réellement éliminé? Comme je l'ai lu, vous avez:

  • Suppression de la balise de fermeture pour chaque expression.
  • Éliminé le >qui séparerait normalement la balise d'ouverture de ses enfants.
  • Remplacé le =qui sépare le nom et la valeur de l'attribut par un :pour indiquer que l'enfant est un attribut; aucune économie.

Je pense qu'il est également important de reconnaître que les représentations internes et externes de XML sont très différentes. En interne, une arborescence XML est très compacte. Et parce que les différents éléments sont déjà classés, c'est très efficace à manipuler. Extérieurement, eh bien, vous obtenez toutes ces balises de fermeture, mais elles se compressent bien.

La «verbosité» est-elle le vrai problème?

Je pense que la vraie question n'est pas de savoir si XML est "verbeux", mais s'il est plus expressif qu'il n'est nécessaire pour un objectif donné. Quelques exemples:

  • La capacité d'un élément à contenir des attributs, qui sont sémantiquement différents des éléments enfants. Utile pour les informations hors bande, telles que la description du type de données natif, du contenu de l'élément. Mais vous n'en avez peut-être pas besoin, car vos spécifications externes définissent le contenu.
  • Contenu mixte, dans lequel un élément peut contenir à la fois des éléments enfants et du texte (ainsi que des commentaires et des instructions de traitement). Utile pour le balisage, mais peut-être pas pour une simple représentation des données.
kdgregory
la source