Pourquoi les index dans XPath commencent-ils par 1 et non par 0?

117

Certains collègues et moi comparions les langues précédentes dans lesquelles nous avions programmé et parlions de notre expérience avec VBScript avec ses fonctionnalités étranges telles que l' index basé sur 1 au lieu d' index basé sur 0 comme presque toutes les autres langues, le raisonnement étant qu'il s'agissait d'un langage pour les utilisateurs (par exemple Excel VBA) au lieu d'un langage pour les développeurs.

Puis quelqu'un a dit: " XPath a également des index basés sur 1 ", ce que je ne pouvais pas croire jusqu'à ce que je trouve cet article dans lequel de nombreuses raisons sont données en faveur de l'approche basée sur 0, y compris certaines de Michael Kay lui-même:

  • "... l'indexation de base zéro tend à simplifier les formules d'index lors de l'accès à un tableau multidimensionnel avec une expression d'accès au tableau unidimensionnel"
  • "lors de la manipulation de tables ou de l'indexation dans des chaînes, l'adressage de base zéro serait souvent beaucoup plus pratique"
  • "... l'adressage matériel n'est pas le seul avantage de l'adressage basé sur 0 ... il facilite également les calculs ..."

mais ensuite Michael Kay est cité comme concluant:

... la logique basée sur 1 était le bon choix pour XPath et XSLT ... parce que le langage a été conçu pour les utilisateurs, pas pour les programmeurs, et les utilisateurs ont toujours cette habitude démodée de se référer au premier chapitre d'un livre comme Chapitre Une...

Quelqu'un peut-il m'expliquer cela? (1) Comment XPath est-il conçu pour les utilisateurs? Je ne peux imaginer quiconque qui n'est pas un développeur se débattre avec la rigidité syntaxique de XPath ou les aspects déclaratifs / de programmation fonctionnelle de XSLT. et (2) Pourquoi les créateurs de XPath sont-ils vraiment allés à l'encontre de la norme des langages de programmation modernes en choisissant un index basé sur 1?

Edward Tanguay
la source
7
Dans le même article, Michael est également cité avec les mots suivants: "Je ne peux pas vous dire quelle était l'histoire réelle de la décision; je ne peux que la post-rationaliser". Si même il ne sait pas, il n'y a probablement pas de réponse satisfaisante.
Dirk Vollmar
5
J'ai voté pour FERMER cette question comme subjective et argumentative. L'indexation basée sur 0 n'est en aucun cas meilleure que l'indexation basée sur 1 et l'inverse est également vrai: l'indexation basée sur 1 n'est en aucun cas meilleure que l'indexation basée sur 0. Les deux ont des avantages et des inconvénients. L'indexation basée sur 1 est plus naturelle pour les non-programmeurs. Il permet également de spécifier la limite supérieure d'une plage comme n, pas très contre nature et conduisant souvent à des erreurs n - 1. Pour quiconque est perverti en raison de la logique de la «programmation moderne», commencer à utiliser l'indexation basée sur 1 serait une expérience agréable et rafraîchissante :)
Dimitre Novatchev
3
les réponses à cette question stackoverflow montrent que les index basés sur 0 sont préférés pour de nombreuses raisons: stackoverflow.com/questions/393462/defend-zero-based-arrays
Edward Tanguay
9
Ma question est en fait une vraie question, car j'enseigne la programmation et je veux avoir une réponse à cette question concernant les index xpath au cas où elle se présenterait. Je pense que la meilleure réponse est qu'un index basé sur 1 mappe à position () qui est largement utilisé dans xpath.
Edward Tanguay
64
Je pense que c'est une question légitime et n'aurait pas dû être close. Il demande un fait historique qui n'est pas une question d'opinion et la réponse serait éclairante.
Ben Flynn

Réponses:

30

Les tableaux et autres index de collection représentent les décalages de mémoire, donc, assez logiquement, ils commencent à zéro. Les index XML et XPATH représentent des positions et des décomptes, donc assez logiquement ils commencent à un (et zéro est donc représentatif de "vide")

Mike McKechnie
la source
8

Pour répondre à cette question, nous devons examiner l'histoire de certaines technologies.

RSS XML XSLT et historique XPath

La version 0.9 de RSS a été initialement publiée en tant que Résumé du site RDF en 1999 par quelques personnes de Netscape pour le portail my.netscape.com de Netscape. Plus tard cette année-là, il a été renommé RSS (Rich Site Summary) avec la mise à jour v0.91. Le développement du projet a changé de mains à plusieurs reprises, mais la version 1.0 de RSS a été publiée en décembre 2000. Avec la mise à jour v1.0, RSS incluait la prise en charge de XML.

En 2002, la version 2.0 est sortie en septembre sous le nom de RSS (Really Simple Syndication) et a commencé à évoluer vers une technologie Internet majeure. À ses débuts, les flux RSS (et les données XML qu'ils contenaient) étaient lus par des humains au format brut. Les blogs et autres sources d'actualités utilisaient des flux RSS et XML pour produire des informations constamment mises à jour. Puisque XML était lu par de simples mortels (non-programmeurs), XPath et XSLT devaient également être facilement compréhensibles, afin que ces simples mortels ne soient pas submergés par la complexité lorsqu'ils interagissent avec lui. C'est pourquoi XPath imite le style des URI, ce que les utilisateurs finaux connaissaient déjà. L'une des concessions faites aux fins de la lisibilité par les utilisateurs, était d'utiliser des techniques de numérotation à l'ancienne, c'est-à-dire des index basés sur 1 au lieu d'index basés sur 0.

Bien que les flux RSS et XML aient été conçus pour être lisibles par la plupart des gens, les lecteurs RSS ont été développés pour fournir une interface plus agréable aux humains pour lire les flux RSS. Désormais, les données brutes RSS et XML sont lues presque exclusivement avec une sorte de lecteur ou d'interface graphique. XML est encore fréquemment utilisé (peut-être de façon permanente) sur le Web, mais il est masqué par des interfaces utilisateur graphiques sophistiquées pour offrir une meilleure expérience aux utilisateurs finaux.

* Le terme « simples mortels » fait référence aux humains qui ne sont pas des programmeurs

Andrew
la source
5
Je ne suis pas convaincu que cela ait tant à voir avec le RSS. Par exemple, dans cette spécification XSL (qui s'est séparée plus tard en XPath et autres ) d'avril 1999, "La fonction position () renvoie la position du nœud de contexte dans la liste de nœuds de contexte. La première position est 1, et donc la dernière position sera égale à last (). " Y avait-il des "simples mortels" utilisant RDF dans la période précédant avril 1999, date à laquelle cela a été rédigé?
Matt Gibson