Почему индексы в XPath начинаются с 1, а не с 0? - PullRequest
101 голосов
/ 23 июля 2010

Некоторые коллеги и я сравнивали прошлые языки, на которых мы программировали, и говорили о нашем опыте с VBScript с его нечетными функциями, такими как 1 на основе индекса вместо индексов, основанных на 0, как почти у всех других языков, причина в том, что это был язык для пользователей (например, Excel VBA) вместо языка для разработчиков.

Тогда кто-то сказал: « XPath также имеет индексы на основе 1 », в которые я не мог поверить, пока не нашел эту статью , в которой много причин учитывая в пользу подхода на основе 0 , включая некоторые из самого Майкла Кея:

  • "... индексирование на основе нуля приводит к упрощению формул индекса при обращении к многомерному массиву с выражением доступа к одномерному массиву"
  • "при обработке таблиц или подписке на строки адресация с нуля зачастую будет намного удобнее"
  • "... аппаратная адресация - не единственное преимущество адресации на основе 0 ... она также упрощает вычисления ..."

но затем Майкл Кей цитируется как вывод:

... логика на основе 1 была правильным выбором для XPath и XSLT ... потому что язык был разработан для пользователей, а не для программистов, и пользователи по-прежнему имеют этот старомодный привычка обращаться к первому глава в книге как глава первая ...

Может кто-нибудь объяснить это мне? (1) Как XPath разработан для пользователей? Я не могу представить никого, кто не является разработчиком, спорящим с синтаксической жесткостью XPath или декларативными / функционально-программными аспектами XSLT. и (2) Почему на самом деле создатели XPath пошли против нормы современных языков программирования, выбрав индекс на основе 1?

Ответы [ 2 ]

20 голосов
/ 09 октября 2015

Массив и другие индексы коллекции представляют собой смещения памяти, поэтому, по логике, они начинаются с нуля. Индексы XML и XPATH представляют позиции и счетчики, поэтому достаточно логично, что они начинаются с одного (и, следовательно, ноль соответствует «пустому»)

8 голосов
/ 08 октября 2015

Чтобы ответить на этот вопрос, мы должны изучить историю некоторых технологий.

RSS XML XSLT и история XPath

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

В течение 2002 года версия 2.0 была выпущена в сентябре как RSS (Really Simple Syndication) и начала развиваться в качестве основной интернет-технологии. В своей ранней истории RSS-каналы (и содержащиеся в них XML-данные) читались людьми в необработанном формате. Блоги и другие источники новостей использовали RSS-каналы и XML для вывода постоянно обновляемой информации. Поскольку XML читают простые смертные (не программисты), XPath и XSLT также должны быть легко понятными, чтобы эти простые смертные не были перегружены сложностью при взаимодействии с ним. Вот почему XPath имитирует стиль URI, с которым конечные пользователи уже были знакомы. Одна из уступок, сделанных с целью удобочитаемости пользователями, заключалась в использовании старомодных методов нумерации, то есть индексов на основе 1 вместо индексов на основе 0. Это та же самая уступка, которую вы упомянули в VBScript, и она была сделана по тем же причинам.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...