¿Por qué los índices en XPath comienzan con 1 y no con 0?

Algunos colegas y yo estábamos comparando los idiomas pasados ​​que habíamos progtwigdo y estábamos hablando de nuestra experiencia con VBScript con sus características extrañas , como el índice 1 en lugar de los índices basados ​​en 0 como casi cualquier otro idioma, el razonamiento es que era un idioma para los usuarios (por ejemplo, Excel VBA) en lugar de un lenguaje para desarrolladores.

Luego, alguien dijo: ” XPath también tiene índices basados ​​en 1 “, lo que no podía creer hasta que encontré este artículo en el que se dan muchas razones a favor del enfoque basado en 0, incluidos algunos del propio Michael Kay:

  • “… la indexación basada en cero tiende a simplificar las fórmulas de índice cuando se accede a una matriz multidimensional con una expresión de acceso de matriz unidimensional”
  • “cuando se manejan tablas o se hacen suscripciones en cadenas, el direccionamiento basado en cero a menudo sería mucho más conveniente”
  • “… el direccionamiento de hardware no es el único beneficio del direccionamiento basado en 0 … también facilita los cálculos …”

pero luego se cita a Michael Kay como conclusión:

… la lógica basada en 1 fue la elección correcta para XPath y XSLT … porque el lenguaje fue diseñado para usuarios, no para progtwigdores, y los usuarios todavía tienen el antiguo hábito de referirse al primer capítulo de un libro como Capítulo Uno…

¿Puede alguien explicarme eso? (1) ¿Cómo se diseña XPath para los usuarios? No puedo imaginarme a nadie que no sea un desarrollador que forcejee con la rigidez sintáctica de XPath o los aspectos declarativos / de progtwigción funcional de XSLT. y (2) ¿Por qué realmente los creadores de XPath van contra la norma de los lenguajes de progtwigción modernos al elegir un índice basado en 1?

La matriz y otros índices de recostackción representan desplazamientos de memoria, por lo que lógicamente comienzan en cero. Los índices XML y XPATH representan posiciones y recuentos, por lo que lógicamente comienzan en uno (y el cero es por lo tanto representativo de “vacío”)

Para responder a esta pregunta, debemos examinar la historia de algunas tecnologías.

RSS XML XSLT y el historial de XPath

La versión 0.9 de RSS fue lanzada originalmente como RDF Site Summary en 1999 por un par de tipos en Netscape para el portal my.netscape.com de Netscape. Más tarde ese año, fue renombrado a RSS (Rich Site Summary) con la actualización v0.91. El desarrollo del proyecto cambió de manos varias veces, pero la versión RSS 1.0 se lanzó en diciembre de 2000. Con la actualización v1.0, RSS incluyó soporte para XML.

Durante 2002 v2.0 se lanzó en septiembre como RSS (Really Simple Syndication) y comenzó a evolucionar a una importante tecnología de Internet. En su historia inicial, los feeds RSS (y los datos XML que contenían) fueron leídos por humanos en el formato raw. Los blogs y otras fonts de noticias utilizaron fonts RSS y XML para generar información continuamente actualizada. Como XML era leído por meros mortales (no progtwigdores), XPath y XSLT también necesitaban ser fácilmente comprensibles, de modo que estos simples mortales no se vieran abrumados por la complejidad cuando interactuaban con él. Es por eso que XPath imita el estilo de los URI, que es algo con lo que los usuarios finales ya estaban familiarizados. Una de las concesiones hechas con el propósito de ser leídas por los usuarios fue utilizar técnicas de numeración anticuadas, es decir, índices basados ​​en 1 en lugar de índices basados ​​en 0. Esa es la misma concesión que mencionó con VBScript, y fue hecha por razones similares.

Aunque las fonts RSS y XML se hicieron legibles para la mayoría de las personas, los lectores RSS se desarrollaron para proporcionar una interfaz más agradable para que los seres humanos lean los feeds RSS. Ahora, los datos brutos de RSS y XML se leen casi exclusivamente con algún tipo de lector o interfaz gráfica. XML todavía está en uso frecuente (quizás permanente) en toda la web, pero está enmascarado por interfaces de usuario gráficas de lujo para proporcionar una mejor experiencia para los usuarios finales.

* El término ” simples mortales ” se refiere a humanos que no son progtwigdores