web-dev-qa-db-ja.com

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

一部の同僚と私は、プログラミングした過去の言語を比較し、VBScriptoddでの経験について話していましたほとんどすべての他の言語にある0ベースのインデックスの代わりに、1ベースのインデックスなどの機能開発者向けの言語ではなく、ユーザー向けの言語(Excel VBAなど)であったこと.

それから誰かが、「XPathには1ベースのインデックスもあります」と言いましたが、私はそれを見つけるまで信じられませんでしたこの記事では、多くの理由が示されています、0ベースのアプローチを支持していますマイケル・ケイ自身からのいくつか:

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

しかし、マイケル・ケイは次のように結論付けられています:

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

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

103
Edward Tanguay

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

21
mike mckechnie

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

RSS XML XSLTおよびXPath履歴

RSSのバージョン0.9は、Netscapeのmy.netscape.comポータルのNetscapeの2人の男によって1999年にRDF Site Summaryとして最初にリリースされました。その年の後半に、RSS(Rich Site要約)v0.91更新により、プロジェクトの開発は数回にわたって変更されましたが、RSSバージョン1.0は2000年12月までにリリースされました。v1.0更新では、RSSにXMLのサポートが含まれました。

2002年中に9月にv2.0がRSS(Really Simple Syndication)としてリリースされ、主要なインターネットテクノロジーへと進化し始めました。初期の歴史では、RSSフィード(およびそこに含まれていたXMLデータ)は、生の形式で人間によって読み取られました。ブログやその他のニュースソースはRSSフィードとXMLを使用して、継続的に更新される情報を出力しました。 XMLは単なるプログラマー(非プログラマー)によって読み取られているため、XPathとXSLTも簡単に理解できる必要があります。これにより、これらの単なる人間は、XMLと対話するときに複雑さに圧倒されません。これが、XPathがURIのスタイルを模倣する理由です。これは、エンドユーザーがすでによく知っているものです。ユーザーが読みやすくするために行われた譲歩の1つは、昔ながらの番号付け手法、つまり0ベースのインデックスではなく1ベースのインデックスを使用することでした。これは、VBScriptで述べたのと同じ譲歩であり、同様の理由で行われました。

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

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

9
Andrew