XPathのインデックスが0ではなく1で始まるのはなぜですか?


117

一部の同僚と私は、プログラミングした過去の言語を比較し、他のほとんどすべての言語のように0 ベースのインデックスではなく1ベースのインデックスなどの奇妙な機能を備えたVBScriptの経験について話していました。開発者向けの言語ではなく、ユーザー向けの言語(Excel VBAなど)。

次に、「XPathにも1ベースのインデックスがある」と誰かが言った。マイケルケイ自身からのいくつかを含む0ベースのアプローチ支持する多くの理由があるこの記事を見つけるまで、私は信じられなかった。

  • 「...ゼロベースのインデックス付けは、1次元配列アクセス式で多次元配列にアクセスするときに、インデックス式をより単純にする傾向があります。」
  • 「テーブルを処理するとき、または文字列に添え字を付けるとき、ゼロベースのアドレッシングは多くの場合はるかに便利です。」
  • 「...ハードウェアアドレッシングは0ベースのアドレッシングの唯一の利点ではありません...それはまた計算をより簡単にします...」

しかしその後、マイケル・ケイは結論として引用されています:

... 1ベースのロジックはXPathとXSLTの正しい選択でした...言語はプログラマー向けではなくユーザー向けに設計されており、ユーザーは本の最初の章を「章」と呼ぶという昔ながらの習慣を持っています1...

誰かが私にそれを説明できますか? (1)XPathはユーザー向けにどのように設計されていますか?XPathの構文の厳格さ、またはXSLTの宣言的/機能的プログラミングの側面に取り組んでいる開発者ではない人を想像することはできません。そして、(2)は、なぜ本当にのXPathの作成者は、1ベースのインデックスを選択することで、近代的なプログラミング言語の規範に反するましたか?


7
同じ記事で、マイケルは次の言葉で引用されています:「私は決定の実際の歴史が何であったかを伝えることはできません。それを事後的に合理化することしかできません」。もし彼が知らなくても、おそらく満足のいく答えはありません。
Dirk Vollmar、2010

5
私はこの質問を主観的で議論の余地があるものとして閉じることに投票しました。0ベースのインデックス付けは、1ベースのインデックス付けよりも優れているわけではなく、その逆も当てはまります。1ベースのインデックス付けは、0ベースのインデックス付けほど優れていません。どちらにもプラスとマイナスがあります。1ベースのインデックス付けは、プログラマーではない方が自然です。また、範囲の上限をとして指定することもできます。n非常に不自然でなく、多くの場合エラーを引き起こしn - 1ます。「モダンプログラミング」ロジックのために倒錯した人にとって、1ベースのインデックス付けを使用し始めることは、楽しくてさわやかな経験になります:)
Dimitre Novatchev

3
このstackoverflowの質問への回答は、0ベースのインデックスが多くの理由で好まれていることを示しています:stackoverflow.com/questions/393462/defend-zero-based-arrays
Edward Tanguay

9
私の質問は実際に本当の質問です。私はプログラミングを教えており、xpathインデックスが出た場合に備えて、この質問に対する回答を求めています。1から始まるインデックスは、xpathで頻繁に使用されるposition()にマップするのが最良の答えだと思います。
Edward Tanguay 2010

64
これは正当な質問であり、締めくくられるべきではなかったと思います。それは意見の問題ではない歴史的事実を求めており、答えは啓発的です。
ベン・フリン

回答:


30

配列およびその他のコレクションインデックスはメモリオフセットを表すため、論理的にはゼロから始まります。XMLおよびXPATHインデックスは位置とカウントを表すため、論理的には1から始まります(したがって、ゼロは「空」を表します)


8

この質問に答えるには、いくつかの技術の歴史を調べる必要があります。

RSS XML XSLTおよびXPath履歴

RSSのバージョン0.9は、1999年にNetscapeのmy.netscape.comポータルのNetscapeにいる数人の人によってRDF Site Summaryとしてリリースされました。その年の後半に、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ベースのインデックスではなく1ベースのインデックスを使用することでした。

RSSフィードとXMLはほとんどの人が読みやすいように作成されていますが、RSSリーダーは、人間がRSSフィードを読むためのより快適なインターフェイスを提供するために開発されました。現在、未加工のRSSおよびXMLデータは、ほとんどの場合、ある種のリーダーまたはグラフィカルインターフェイスでのみ読み取られます。XMLはまだWeb全体で頻繁に(おそらく永続的に)使用されていますが、エンドユーザーに優れたエクスペリエンスを提供するために、凝ったグラフィカルユーザーインターフェイスによってマスクされています。

*「単なる人間」とは、プログラマーではない人間を指します


5
私はそれがRSSとそれほど関係があるとは思いません。たとえば、1999年4月以降のこのXSL仕様後でXPathとその他に分離)では、「position()関数はコンテキストノードリスト内のコンテキストノードの位置を返します。最初の位置は1なので、最後の位置はlast()と等しくなります。」それが起草された1999年4月までの間に、RDFを使用している「単なる人間」はいたのでしょうか。
Matt Gibson、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.