Чому індекси в XPath починаються з 1, а не з 0?


117

Деякі з мене колеги порівнювали минулі мови, які ми запрограмували, і розповідали про наш досвід роботи з VBScript з його дивними функціями, такими як індекс на основі 1, а не 0-засновані індекси, як майже у всіх інших мов, міркуючи, що це був мова для користувачів (наприклад, Excel VBA) замість мови для розробників.

Тоді хтось сказав: " XPath також має 1-базисні індекси ", в які я не міг повірити, поки не знайшов цю статтю, в якій викладено багато причин на користь підходу на основі 0, включаючи деякі від самого Майкла Кей:

  • "... індексація на основі нуля має тенденцію до спрощення формул індексу під час доступу до багатовимірного масиву з виразом доступу до одновимірного масиву"
  • "під час обробки таблиць або підписки на рядки, адресація на нульовій основі часто буде набагато зручнішою"
  • "... апаратне вирішення не є єдиною перевагою адресації на основі 0 ... це також полегшує обчислення ..."

але тоді Майкл Кей цитується як висновок:

... Логіка на основі 1 була правильним вибором для XPath та XSLT ... адже мова була розроблена для користувачів, а не для програмістів, і користувачі все ще мають старомодну звичку посилатися на першу главу книги як на Розділ Один ...

Хтось може мені це пояснити? (1) Як розробляється XPath для користувачів? Я не уявляю нікого, хто не є розробником, який бореться з синтаксичною жорсткістю XPath або декларативними / функціонально-програмними аспектами XSLT. та (2) Чому насправді творці XPath ішли проти норми сучасних мов програмування, вибираючи індекс на основі 1?


7
У цій же статті Майкл також цитується такими словами: "Я не можу вам сказати, якою була фактична історія рішення; я можу лише його раціоналізувати". Якщо навіть він не знає, то, ймовірно, немає задоволеної відповіді.
Дірк Волмар

5
Я проголосував за ЗАКРИТИ це питання як суб'єктивне та аргументативне. Індексація на основі 0 нічим не краща за індексацію на основі 1, а також зворотне: також 1-індексація нічим не краща за індексацію на основі 0. У обох є плюси і мінуси. Індексація на основі 1 є більш природною для непрограмістів. Це також дозволяє вказати верхню межу діапазону як n, не дуже неприродного і часто призводить до помилок n - 1. Для тих, хто перекручений через логіку «сучасного програмування», почати використовувати індексацію на основі 1 було б насолодою та освіжаючим досвідом :)
Димитрей Новатчев

3
відповіді на це запитання про stackoverflow показують, що індекси на основі 0 переважні з багатьох причин: stackoverflow.com/questions/393462/defend-zero-based-arrays
Edward Tanguay

9
Насправді, моє запитання - це справжнє запитання, оскільки я навчаю програмування і хочу відповісти на це питання щодо індексів xpath у випадку, якщо воно з’явиться. Я вважаю, що найкраща відповідь полягає в тому, що індекс на основі 1 відображає позицію (), яка широко використовується в xpath.
Едвард Тангуай

64
Я думаю, це законне питання, і його не слід було закривати. Він запитує історичний факт, який не є питанням думки, і відповідь була б освічуючою.
Бен Флінн

Відповіді:


30

Масиви та інші індекси колекції представляють собою компенсацію пам'яті, тому логічно, що вони починаються з нуля. Індекси XML та XPATH представляють позиції та рахунки, тому логічно, що вони починаються з одиниці (а нуль, таким чином, є представником "порожнього")


8

Щоб відповісти на це запитання, ми повинні вивчити історію деяких технологій.

RSS XML XSLT та XPath Історія

Версія 0.9 RSS була спочатку випущена як резюме сайту RDF в 1999 році пару хлопців на порталі my.netscape.com Netscape для Netscape. Пізніше того ж року він був перейменований на RSS (Rich Site Summary) з оновленням v0.91. Розробка проекту кілька разів змінювалась, але RSS версія 1.0 була випущена до грудня 2000 року. Оновлення v1.0 RSS включало підтримку XML.

Протягом 2002 року v2.0 був випущений у вересні як RSS (Really Simple Syndication) і почав перетворюватися на велику Інтернет-технологію. З ранньої історії, RSS-канали (та дані XML, які вони містили) люди читали в необробленому форматі. Блоги та інші джерела новин використовували RSS-канали та XML для виведення інформації, що постійно оновлюється. Оскільки XML читали просто смертні (непрограмісти), XPath та XSLT також потребували легкої зрозумілості, щоб ці простосмертні не були переповнені складністю при взаємодії з ним. Ось чому XPath імітує стиль URI-файлів, що вже було знайоме кінцевим користувачам. Однією з поступок, зроблених з метою читабельності користувачами, було використання старомодних методів нумерації, тобто 1-індексних індексів замість індексів на основі 0.

Хоча RSS-канали та XML були зроблені для читання для більшості людей, RSS-читачі були розроблені, щоб забезпечити людям більш приємний інтерфейс для читання RSS-каналів. Тепер необроблені дані RSS та XML читаються майже виключно з якогось читання чи графічного інтерфейсу. XML все ще використовується часто (можливо, постійне) в Інтернеті, але він маскується за допомогою фантазійних графічних інтерфейсів користувача, щоб забезпечити кращий досвід для кінцевих користувачів.

* Термін " прості смертні " відноситься до людей, які не є програмістами


5
Я не переконаний, що це так багато стосується RSS. Наприклад, у цій специфікації XSL (яка пізніше відокремилась на XPath та інші ) з квітня 1999 р. Функція "position () повертає позицію вузла контексту у списку контекстних вузлів. Перше положення - 1 і останнє позиція буде дорівнює last (). " Чи були якісь "прості смертні", які використовували RDF протягом періоду до квітня 1999 року, коли це було розроблено?
Метт Гібсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.