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é?
(para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para)
.Réponses:
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:
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.
la source
<PRE>
élément en HTML. J'ai donc supposé que des devis seraient nécessaires.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).
la source
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:
>
qui séparerait normalement la balise d'ouverture de ses enfants.=
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 source