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

我和一些同事比较了我们以前使用的编程语言,并谈论了我们使用 VBScript的经验,VBScript使用的是 奇怪特性,比如 以1为基础的索引,而不是其他几乎所有语言都使用的基于0的索引,理由是它是 用户使用的语言(例如 Excel VBA) ,而不是开发人员使用的语言。

然后有人说,“ XPath 还有基于1的索引”,我不能相信,直到我发现 译自: 美国《科学》杂志网站(http://mukulgandhi.blogspot.com/2008/05/blog-post.html)原著: http://mukulgandhi.blogspot.com/2008/05/blog-post.html,其中有很多原因给 支持基于0的方法,包括迈克尔凯自己的一些:

  • “ ... 当使用一维数组访问表达式访问多维数组时,从零开始的索引往往使索引公式更简单”
  • “在处理表或订阅字符串时,从零开始的寻址通常要方便得多”
  • “ ... 硬件寻址不是基于0的寻址的唯一好处... 它也使计算更容易...”

但后来有人引用迈克尔•凯(Michael Kay)的话总结道:

基于1的逻辑是 XPath 和 XSLT 的正确选择,因为语言是设计好的 对于用户,而不是程序员, 用户仍然使用这种老式的 第一个习惯 书中的第一章。

有人能给我解释一下吗?我无法想象不是开发人员的人会与 XPath 的语法刚性或 XSLT 的声明性/函数式编程方面争论不休。和 (2)为什么 XPath 的创建者要违背现代编程语言的规范,选择一个基于1的索引?

37939 次浏览

为了回答这个问题,我们必须研究一些技术的历史。

XSLT 和 XPath 历史记录

RSS 的0.9版本最初是由 Netscape 的几个家伙在1999年为 Netscape 的 my.Netscape. com 门户网站发布的 RDF 站点摘要。同年晚些时候,它被重新命名为 RSS (富站点摘要)与 v0.91更新。这个项目的开发经历了几次转手,但是 RSS 1.0版本在2000年12月发布。在 v1.0更新中,RSS 包含了对 XML 的支持。

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

尽管 RSS 提要和 XML 对大多数人来说都是可读的,但 RSS 阅读器的开发为人们阅读 RSS 提要提供了一个更舒适的界面。现在,原始的 RSS 和 XML 数据几乎只能通过某种阅读器或图形界面来读取。XML 仍然在网络上频繁使用(也许是永久性的) ,但它被奇特的图形用户界面所掩盖,以便为终端用户提供更好的体验。

术语“ 只是凡人”指的是不是程序员的人

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