Perché gli indici in XPath iniziano con 1 e non con 0?

Alcuni colleghi e io stavamo confrontando le lingue passate che avevamo programmato e stavamo parlando della nostra esperienza con VBScript con le sue strane funzionalità come l’ indice a 1 invece degli indici a 0 come quasi ogni altro linguaggio, il ragionamento è che era un lingua per gli utenti (ad esempio Excel VBA) anziché una lingua per gli sviluppatori.

Poi qualcuno ha detto, ” XPath ha anche indici basati su 1 ” che non potevo credere fino a quando non ho trovato questo articolo in cui sono state date molte ragioni a favore dell’approccio basato su 0, inclusi alcuni dallo stesso Michael Kay:

  • “… l’indicizzazione basata su zero tende a rendere più semplici le formule dell’indice quando si accede a una matrice multidimensionale con un’espressione di accesso di matrice unidimensionale”
  • “quando si gestiscono le tabelle o si sottoscrive in stringhe, l’indirizzamento a base zero sarebbe spesso molto più conveniente”
  • “… l’indirizzamento hardware non è l’unico vantaggio dell’indirizzamento basato su 0 … semplifica anche i calcoli …”

ma poi Michael Kay è citato come conclusivo:

… La logica basata su 1 è stata la scelta giusta per XPath e XSLT … perché il linguaggio è stato progettato per gli utenti, non per i programmatori, e gli utenti hanno ancora questa abitudine vecchio stile di riferirsi al primo capitolo di un libro come capitolo Uno…

Qualcuno può spiegarmi questo? (1) Come è progettato XPath per gli utenti? Non riesco ad immaginare nessuno che non sia uno sviluppatore che combatte con la rigidità sintattica di XPath o gli aspetti dichiarativi / di programmazione funzionale di XSLT. e (2) Perché i creatori di XPath hanno davvero osteggiato la norma dei moderni linguaggi di programmazione scegliendo un indice a 1?

L’array e gli altri indici di raccolta rappresentano gli offset di memoria, quindi abbastanza logicamente iniziano a zero. Gli indici XML e XPATH rappresentano posizioni e conteggi, quindi abbastanza logicamente iniziano a uno (e zero è quindi rappresentativo di “vuoto”)

Per rispondere a questa domanda, dobbiamo esaminare la storia di alcune tecnologie.

RSS XML XSLT e cronologia XPath

La versione 0.9 di RSS è stata originariamente rilasciata come RDF Site Summary nel 1999 da un paio di ragazzi di Netscape per il portale my.netscape.com di Netscape. Più tardi quell’anno, è stato rinominato in RSS (Rich Site Summary) con l’aggiornamento v0.91. Lo sviluppo del progetto è cambiato diverse volte, ma la versione 1.0 di RSS è stata rilasciata nel dicembre del 2000. Con l’aggiornamento v1.0, il supporto RSS incluso per XML.

Durante il 2002 la v2.0 è stata rilasciata a settembre come RSS (Really Simple Syndication) e ha iniziato a evolversi in una importante tecnologia Internet. Nella sua storia iniziale, i feed RSS (e i dati XML che contenevano) venivano letti dagli umani nel formato raw. Blog e altre fonti di notizie hanno utilizzato feed RSS e XML per generare informazioni continuamente aggiornate. Poiché l’XML veniva letto da semplici mortali (non programmatori), anche XPath e XSLT dovevano essere facilmente comprensibili, in modo che questi semplici mortali non fossero sopraffatti dalla complessità quando interagivano con esso. Ecco perché XPath imita lo stile degli URI, che era già familiare agli utenti finali. Una delle concessioni fatte a scopo di leggibilità da parte degli utenti consisteva nell’utilizzare tecniche di numerazione antiquate, ad esempio indici basati su 1 invece di indici basati su 0. Questa è la stessa concessione che hai menzionato con VBScript, ed è stata creata per ragioni simili.

Sebbene i feed RSS e XML fossero fatti per essere leggibili per la maggior parte delle persone, i lettori RSS sono stati sviluppati per fornire un’interfaccia più piacevole per gli umani per leggere i feed RSS. Ora, i dati grezzi RSS e XML vengono letti quasi esclusivamente con una sorta di lettore o interfaccia grafica. L’XML è ancora in uso frequente (forse permanente) sul Web, ma è mascherato da interfacce utente grafiche fantasiose per offrire un’esperienza migliore agli utenti finali.

* Il termine ” semplici mortali ” si riferisce agli umani che non sono programmatori