
Le langage XML a été inventé en 1996. à peine était-il apparu que ses possibilités d'utilisation étaient déjà mal comprises, et pour les objectifs auxquels on tentait de l'adapter, ce n'était pas le meilleur choix.
Il n'est pas exagéré de dire que la grande majorité des schémas XML que j'ai pu voir constituaient un usage inapproprié ou incorrect de XML. De plus, cette utilisation du XML témoignait d'une mécompréhension fondamentale de ce qu'est avant tout le XML.
XML est un langage de balisage. Ce n'est pas un format de donnĂ©es.Dans la plupart des schĂ©mas XML, cette distinction n'Ă©tait clairement pas prise en compte, confondant XML avec un format de donnĂ©es, ce qui signifiait en fin de compte une erreur dans le choix mĂȘme de XML, car un format de donnĂ©es Ă©tait en rĂ©alitĂ© nĂ©cessaire.
Pour faire simple, XML est le mieux adapté à l'annotation de blocs de texte avec une structure et des métadonnées. Si votre objectif principal n'est pas de travailler avec un bloc de texte, le choix de XML ne sera probablement pas justifié.
Sous cet angle, il existe un moyen simple de vérifier à quel point un schéma XML est bien fait. Prenons un exemple de document selon le schéma prévu et supprimons tous les tags et attributs. Si ce qui reste n'a pas de sens (ou si la ligne est vide), alors soit votre schéma est mal construit, soit vous n'auriez tout simplement pas dû utiliser XML.
Je vais maintenant donner quelques exemples courants de schémas mal construits.
Ici, nous voyons un exemple d'une tentative injustifiée et étrange (bien que trÚs répandue) d'exprimer en XML un simple dictionnaire « clé-valeur ». Si nous supprimons tous les tags et attributs, il restera une ligne vide. En fait, ce document représente, aussi absurde que cela puisse paraßtre, une annotation sémantique d'une ligne vide.
<root name="John" city="London" />Pire encore, il ne s'agit pas simplement d'une annotation sémantique d'une ligne vide comme une façon extravagante d'exprimer un dictionnaire - cette fois, le « dictionnaire » est directement codé sous forme d'attributs de l'élément racine. De ce fait, l'ensemble des noms d'attributs présents sur l'élément devient indéfini et dynamique. De plus, il est évident que ce que l'auteur voulait réellement exprimer, c'était une simple syntaxe « clé-valeur », mais à la place, il a opté pour une solution totalement étrange en appliquant XML, en forçant l'utilisation d'un seul élément vide simplement comme préfixe pour utiliser la syntaxe des attributs. Et de telles schémas me rencontrent trÚs souvent.
John
LondonC'est déjà mieux, mais maintenant les clés sont pour une raison quelconque des métadonnées, alors que les valeurs ne le sont pas. Une vision plutÎt étrange des dictionnaires. Si l'on supprime toutes les balises et attributs, la moitié des informations sera perdue.
Une bonne expression de dictionnaire en XML ressemblerait approximativement Ă ceci :
Name
John
City
LondonMais si les gens ont pris la dĂ©cision Ă©trange d'utiliser XML comme format de donnĂ©es et d'organiser un dictionnaire avec celui-ci, ils devraient comprendre que ce qu'ils font est inappropriĂ© et peu pratique. De nombreux concepteurs choisissent souvent Ă tort XML pour crĂ©er leurs applications. Mais mĂȘme plus frĂ©quemment, ils aggravent la situation par une utilisation insensĂ©e de XML sous l'une des formes dĂ©crites ci-dessus, ignorant le fait qu'XML n'est tout simplement pas adaptĂ© Ă cela.
Le schéma XML le plus horrible ? à propos, le prix de le schéma XML le plus horrible que j'aie jamais vu revient au format de fichier de configuration d'allocation automatique de ressources pour les téléphones de téléphonie IP Polycom. De tels fichiers nécessitent le téléchargement de fichiers XML via TFTP qui⊠En fait, voici un extrait d'un de ces fichiers :
<softkey
softkey.feature.directories="0"
softkey.feature.buddies="0"
softkey.feature.forward="0"
softkey.feature.meetnow="0"
softkey.feature.redial="1"
softkey.feature.search="1"
softkey.1.enable="1"
softkey.1.use.idle="1"
softkey.1.label="Foo"
softkey.1.insert="1"
softkey.1.action="..."
softkey.2.enable="1"
softkey.2.use.idle="1"
softkey.2.label="Bar"
softkey.2.insert="2"
softkey.2.action="..." />Ce n'est pas une mauvaise blague de quelqu'un. Et ce n'est pas mon invention :
- Les Ă©lĂ©ments sont simplement utilisĂ©s comme prĂ©fixe pour attacher des attributs qui ont eux-mĂȘmes des noms hiĂ©rarchiques.
- S'il est nécessaire d'attribuer des valeurs à plusieurs instances d'un certain type d'enregistrement, il faut utiliser les noms des attributs, qui contiennent des indices..
- De plus, les attributs commençant par
softkey.doivent ĂȘtre placĂ©s sur les Ă©lĂ©ments<softkey/>et les attributs commençant parfeature.doivent ĂȘtre placĂ©s sur les Ă©lĂ©ments<feature/>, etc., mĂȘme si cela semble totalement superflu et Ă premiĂšre vue absurde. - Et enfin, si vous espĂ©riez que le premier composant du nom de l'attribut coĂŻncide toujours avec le nom de l'Ă©lĂ©ment â rien de tout cela ! Par exemple, les attributs
up.doivent ĂȘtre attachĂ©s Ă<userpreferences/>. L'ordre d'attachement des noms d'attributs aux Ă©lĂ©ments est arbitraire, en fait presque complĂštement.
Documents ou données.De temps en temps, quelqu'un fait des choses totalement étranges en tentant de comparer XML et JSON, montrant ainsi qu'il ne comprend ni l'un ni l'autre. XML est un langage de balisage de documents. JSON, en revanche, représente un format de données structurées, donc les comparer l'un à l'autre est comme essayer de comparer le chaud et le doux.
Comprendre cela aidera Ă saisir la diffĂ©rence entre documents et donnĂ©es.Comme analogue, on peut considĂ©rer XML comme un document lisible par machine. MĂȘme s'il est destinĂ© Ă ĂȘtre lu par une machine, il se rĂ©fĂšre mĂ©taphoriquement Ă des documents et, de ce point de vue, est en fait comparable Ă des documents au format PDF, qui ne sont souvent pas lisibles par machine.
Par exemple, en XML, l'ordre des Ă©lĂ©ments a de l'importance. Alors qu'en JSON, l'ordre des paires "clĂ©-valeur" Ă l'intĂ©rieur des objets n'a pas de sens et n'est pas dĂ©fini. Si vous souhaitez obtenir un dictionnaire non ordonnĂ© de paires "clĂ©-valeur", l'ordre rĂ©el dans lequel les Ă©lĂ©ments apparaissent dans ce fichier n'a pas d'importance. Mais vous pouvez former Ă partir de ces donnĂ©es de nombreux documents,car dans un document, il y a un ordre dĂ©fini. MĂ©taphoriquement, c'est l'analogie d'un document sur papier, mĂȘme s'il n'a pas de dimensions physiques contrairement Ă une impression ou un fichier PDF.
Dans mon exemple de prĂ©sentation correcte d'un dictionnaire en XML, l'ordre des Ă©lĂ©ments dans le dictionnaire est montrĂ©, contrairement Ă la prĂ©sentation en JSON. Je ne peux pas ignorer cet ordre : cette linĂ©aritĂ© appartient intrinsĂšquement au modĂšle de documents et au format XML. Quelqu'un peut dĂ©cider d'ignorer cet ordre lors de l'interprĂ©tation de ce document XML, mais il est inutile de discuter de cela, car cette question dĂ©passe le cadre de la discussion sur le format lui-mĂȘme. De plus, si on rend le document consultable dans un navigateur en y attachant une feuille de style en cascade, on pourra voir que les Ă©lĂ©ments du dictionnaire suivent un certain ordre, et aucun autre.
En d'autres termes, le dictionnaire (un fragment de donnĂ©es structurĂ©es) peut ĂȘtre transformĂ© en n diffĂ©rents documents possibles (au format XML, PDF, sur papier, etc.), oĂč n â le nombre possible de combinaisons d'Ă©lĂ©ments dans le dictionnaire, et nous n'avons mĂȘme pas encore pris en compte d'autres variables possibles.
Il en découle également que si vous souhaitez transmettre uniquement des données, l'utilisation d'un document lisible par machine ne sera pas efficace. Il utilise un modÚle qui, dans ce cas, est superflu et ne fait que compliquer les choses. De plus, pour extraire les données d'origine, il faudra écrire un programme. Il est peu judicieux d'utiliser XML pour quelque chose qui, à un certain stade, ne sera pas formaté sous forme de document (par exemple, à l'aide de CSS ou XSLT, ou les deux), car c'est la principale (sinon la seule) raison de s'en tenir à un modÚle de document.
De plus, puisque le XML n'a pas de notion de nombres (ou d'expressions boolĂ©ennes, ou d'autres types de donnĂ©es), tous les nombres prĂ©sentĂ©s dans ce format ne sont considĂ©rĂ©s que comme du texte supplĂ©mentaire. Pour extraire des donnĂ©es, le schĂ©ma et son lien avec les donnĂ©es exprimĂ©es correspondantes doivent ĂȘtre connus. Il est Ă©galement nĂ©cessaire de savoir, en fonction du contexte, quand un certain Ă©lĂ©ment de texte reprĂ©sente un nombre, et qu'il doit ĂȘtre converti en nombre, etc.
Ainsi, le processus d'extraction de donnĂ©es Ă partir de documents XML ne diffĂšre pas beaucoup de celui de la reconnaissance de documents numĂ©risĂ©s, contenant par exemple des tableaux, formant de nombreuses pages de donnĂ©es numĂ©riques. Oui, c'est en principe possible, mais ce n'est pas le moyen le plus optimal, sauf dans les cas extrĂȘmes, lorsque toutes les autres options sont Ă©puisĂ©es. Une solution raisonnable serait de simplement trouver une copie numĂ©rique des donnĂ©es originales, non intĂ©grĂ©es dans le modĂšle de document oĂč les donnĂ©es sont combinĂ©es avec leur reprĂ©sentation textuelle spĂ©cifique.
Il ne me surprend donc pas du tout que l'XML soit populaire dans le monde des affaires. La raison en est prĂ©cisĂ©ment que le format des documents (sur papier) est clair et familier pour les entreprises, qui souhaitent continuer Ă utiliser un modĂšle familier et comprĂ©hensible. Pour la mĂȘme raison, les PDF sont souvent utilisĂ©s au lieu de formats plus adaptĂ©s au traitement machine, car ils restent ancrĂ©s dans la notion de page imprimĂ©e de taille physique dĂ©terminĂ©e. Cela concerne mĂȘme des documents qui ne seront probablement jamais imprimĂ©s (comme un fichier PDF de documentation d'un registre de 8000 pages). De ce point de vue, l'utilisation de l'XML dans les affaires est essentiellement une manifestation de skeuomorphisme. Les gens comprennent l'idĂ©e mĂ©taphorique de la page imprimĂ©e de taille limitĂ©e et savent comment crĂ©er des processus commerciaux basĂ©s sur des documents imprimĂ©s. Si c'est votre rĂ©fĂ©rence, des documents sans taille physique limitĂ©e, machinables - les documents XML - reprĂ©sentent une innovation tout en Ă©tant une alternative familiĂšre et confortable au document. Cela ne les empĂȘche pas d'ĂȘtre une façon incorrecte et excessivement skeuomorphe de reprĂ©senter des donnĂ©es.
à ce jour, les seules schémas XML que je peux véritablement considérer comme une application correcte de ce format sont XHTML et DocBook.
Source : habr.com
