为什么XPath中的索引以1而不是0开头?

有些同事和我正在比较我们编程的过去的语言,并且正在谈论我们用VBScript的经验,其奇怪的特征,如基于1的索引,而不是像其他语言那样基于0的索引,理由是它是(例如Excel VBA)而不是开发者的语言。

然后有人说,“ XPath也有一个基于索引的索引 ”,我不能相信,直到我发现这篇文章 ,其中有许多理由支持基于0的方法,包括迈克尔·凯本人的一些:

  • “…基于零的索引往往会使访问具有一维数组访问expression式的multidimensional array时索引公式更简单”
  • “在处理表格或对string进行下标时,基于零的地址往往会更方便”
  • “…硬件寻址不是基于0的寻址的唯一好处…它也使得计算更容易…”

但引用迈克尔凯的结论是:

…基于1的逻辑是XPath和XSLT的正确select…因为这种语言是为用户devise的,而不是为程序员devise的,用户仍然有这种老式的习惯,把书中的第一章称为Chapter一…

有人可以向我解释吗? (1)XPath是如何为用户devise的? 我无法想象任何不是开发人员的人都在用XPath的语法刚性或XSLT的声明性/function性编程方面进行争论。 (2)为什么XPath的创build者通过select基于1的索引来违背现代编程语言的规范?

数组和其他收集索引表示内存偏移量,因此逻辑上它们从零开始。 XML和XPATH索引代表位置和计数,因此逻辑上它们从一开始(因此零代表“空”)

要回答这个问题,我们必须考察一些技术的历史。

RSS XML XSLT和XPath历史logging

RSS的0.9版最初是由Netscape的几个人为Netscape的my.netscape.com门户在1999年作为RDF站点摘要发布的。 那年晚些时候,它更名为RSS(丰富站点摘要)与v0.91更新。 这个项目的开发几经易手,但是到了2000年12月,RSS版本1.0发布了。随着v1.0的更新,RSS包含了对XML的支持。

在2002年,v2.0在九月发布为RSS(真正简单的整合),并开始演变成一个主要的互联网技术。 在早期的历史中,RSS源(以及它们包含的XML数据)被人类以原始格式读取。 博客和其他新闻来源使用RSS提要和XML来输出不断更新的信息。 由于XML只是被一些凡人(非程序员)所读取,所以XPath和XSLT也需要易于理解,以便这些简单的凡人在与它交互时不会被复杂性所淹没。 这就是为什么XPath模仿URI的风格,这是最终用户已经熟悉的。 为了用户的可读性而作出的让步之一是使用老式编号技术,即基于1的索引而不是基于0的索引。 这与您在VBScript中提到的同样的让步,也是出于类似的原因。

虽然RSS提要和XML被制作成对大多数人来说是可读的,但是RSS阅读器被开发来为人们提供阅读RSS提要的更愉快的界面。 现在,原始的RSS和XML数据几乎完全是通过某种阅读器或graphics界面来读取的。 XML在整个Web上仍然频繁使用(或许是永久性的),但是它却被奇特的graphics用户界面所掩盖,以便为最终用户提供更好的体验。

*“ 凡人 ”一词是指不是程序员的人