web-dev-qa-db-fra.com

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

Certains collègues et moi comparions les langues passées dans lesquelles nous avions programmé et parlions de notre expérience avec VBScript avec son impair des fonctionnalités telles que index basé sur 1 au lieu d'index basés sur 0 comme presque toutes les autres langues, le raisonnement étant qu'il s'agissait d'une langue pour les utilisateurs (par exemple Excel VBA) au lieu d'une langue pour les développeurs.

Puis quelqu'un a dit: " XPath a également des index basés sur 1 " 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 certains de Michael Kay lui-même:

  • "... l'indexation à 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 la souscription en chaînes, l'adressage à 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 alors 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 ancienne habitude 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 pas imaginer quelqu'un qui n'est pas un développeur aux prises avec la rigidité syntaxique de XPath ou le déclaratif/aspects 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?

103
Edward Tanguay

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

21
mike mckechnie

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

RSS XML XSLT et XPath History

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

En 2002, la version 2.0 a été publiée 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 les humains au format brut. Les blogs et autres sources d'actualités ont utilisé des flux RSS et XML pour produire des informations constamment mises à jour. Étant donné que 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 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. C'est la même concession que vous avez mentionnée avec VBScript, et elle a été faite pour des raisons similaires.

Bien que les flux RSS et XML aient été conçus pour être lisibles pour 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 toujours utilisé fréquemment (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.

9
Andrew