【问题标题】:Why do indexes in XPath start with 1 and not 0?为什么 XPath 中的索引以 1 而不是 0 开头?
【发布时间】:2011-03-20 03:50:47
【问题描述】:

我和一些同事正在比较我们过去使用的编程语言,并谈论我们使用 VBScript 及其奇怪 功能的体验,例如 基于 1 的索引 而不是像几乎所有其他语言那样从 0 开始的索引,原因是它是一种用户语言(例如 Excel VBA)而不是开发人员语言。

然后有人说,“XPath 也有从 1 开始的索引”,直到我找到 this article 之后我才相信,其中给出了很多原因 支持基于 0 的方法,包括 Michael Kay 本人的一些方法:

  • “...在使用一维数组访问表达式访问多维数组时,从零开始的索引倾向于使索引公式更简单”
  • “在处理表格或下标为字符串时,从零开始的寻址通常会更方便”
  • "...硬件寻址不是基于 0 的寻址的唯一好处...它还使计算更容易..."

但随后引用迈克尔·凯作为结论:

...基于 1 的逻辑是 XPath 和 XSLT 的正确选择...因为语言是设计的 面向用户,而不是面向程序员,以及 用户仍然有这个老式 习惯参考第一个 一本书的第一章……

谁能给我解释一下? (1) XPath 是如何为用户设计的? 我无法想象任何不是开发人员的人都会为 XPath 的语法僵化或 XSLT 的声明性/函数式编程方面而争论不休。 (2) 为什么 XPath 的创建者真的违背了现代编程语言的规范,选择了从 1 开始的索引?

【问题讨论】:

  • 在同一篇文章中,迈克尔还引用了以下的话:“我无法告诉你该决定的实际历史是什么;我只能对其进行后合理化”。如果连他都不知道,那么可能就没有令人满意的答案。
  • 我已经投票结束这个问题,因为它是主观的和有争议的。基于 0 的索引绝不比基于 1 的索引好,反之亦然:基于 1 的索引绝不比基于 0 的索引好。两者都有优点和缺点。对于非程序员来说,基于 1 的索引更自然。它还允许将范围的上限指定为n,而不是非常不自然且经常导致错误n - 1。对于任何因“现代编程”逻辑而变态的人来说,开始使用基于 1 的索引将是一种享受和令人耳目一新的体验:)
  • 这个 stackoverflow 问题的答案表明基于 0 的索引是首选的原因有很多:stackoverflow.com/questions/393462/defend-zero-based-arrays
  • 我的问题实际上是一个真正的问题,因为我教编程,并且希望在出现有关 xpath 索引的问题时得到答案。我认为最好的答案是基于 1 的索引映射到在 xpath 中大量使用的 position()。
  • 我认为这是一个合法的问题,不应该被关闭。它要求一个历史事实,而不是意见问题,答案将是有启发性的。

标签: xslt xpath indexing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    RSS XML XSLT 和 XPath 历史记录

    RSS 0.9 版最初是作为 RDF 站点摘要于 1999 年由 Netscape 的几个人为 Netscape 的 my.netscape.com 门户发布的。那年晚些时候,随着 v0.91 的更新,它被重命名为 RSS(Rich Site Summary)。该项目的开发经过多次易手,但 RSS 版本 1.0 于 2000 年 12 月发布。随着 v1.0 的更新,RSS 包括对 XML 的支持。

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

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

    *术语“凡人”指的是非程序员的人类

    【讨论】:

    • 我不相信它与 RSS 有太大关系。例如,在 1999 年 4 月的this XSL specification(其中later separated out into XPath and others)中,“position() 函数返回上下文节点在上下文节点列表中的位置。第一个位置是 1,所以最后一个位置将相等到最后()。”到 1999 年 4 月起草时,是否有任何“凡人”使用 RDF?
    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2012-03-28
    相关资源
    最近更新 更多