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


117

Alcuni colleghi ed io stavamo confrontando linguaggi passati in cui avevamo programmato e stavamo parlando della nostra esperienza con VBScript con le sue caratteristiche strane come l' indice basato su 1 invece di indici basati su 0 come quasi ogni altra lingua ha, il ragionamento è che era un lingua per gli utenti (ad es. Excel VBA) invece di una lingua per gli sviluppatori.

Poi qualcuno ha detto, " XPath ha anche indici basati su 1 " a cui non potevo credere fino a quando non ho trovato questo articolo in cui vengono fornite molte ragioni a favore dell'approccio basato su 0, inclusi alcuni dello stesso Michael Kay:

  • "... l'indicizzazione in base zero tende a semplificare le formule dell'indice quando si accede a un array multidimensionale con un'espressione di accesso a un array unidimensionale"
  • "quando si gestiscono tabelle, o si inseriscono i pedici in stringhe, l'indirizzamento a base zero sarebbe spesso molto più conveniente"
  • "... l'indirizzamento hardware non è l'unico vantaggio dell'indirizzamento basato su 0 ... rende anche i calcoli più facili ..."

ma poi viene citato Michael Kay che conclude:

... la logica basata su 1 era la scelta giusta per XPath e XSLT ... perché il linguaggio era stato progettato per gli utenti, non per i programmatori, e gli utenti hanno ancora questa abitudine antiquata di fare riferimento al primo capitolo di un libro come Capitolo Uno...

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


7
Nello stesso articolo Michael viene citato anche con le seguenti parole: "Non posso dirti quale sia stata la reale storia della decisione; posso solo post-razionalizzarla". Se anche lui non lo sa, probabilmente non c'è una risposta soddisfacente.
Dirk Vollmar

5
Ho votato per CHIUDERE questa domanda in quanto soggettiva e argomentativa. L'indicizzazione basata su 0 non è in alcun modo migliore dell'indicizzazione basata su 1 ed è vero anche il contrario: l'indicizzazione basata su 1 non è in alcun modo migliore dell'indicizzazione basata su 0. Entrambi hanno vantaggi e svantaggi. L'indicizzazione basata su 1 è più naturale per i non programmatori. Permette anche di specificare il limite superiore di un intervallo come n, non molto innaturale e spesso porta a errori n - 1. Per chiunque sia perverso a causa della logica della "programmazione moderna", iniziare a utilizzare l'indicizzazione basata su 1 sarebbe un'esperienza divertente e rinfrescante :)
Dimitre Novatchev

3
le risposte a questa domanda stackoverflow mostrano che gli indici basati su 0 sono preferiti per molte ragioni: stackoverflow.com/questions/393462/defend-zero-based-arrays
Edward Tanguay

9
La mia domanda è una vera domanda in realtà, poiché insegno a programmazione e voglio avere una risposta a questa domanda riguardante gli indici xpath nel caso in cui si presenti. Penso che la risposta migliore sia che un indice basato su 1 mappa a position () che viene utilizzato pesantemente in xpath.
Edward Tanguay

64
Penso che questa sia una domanda legittima e non avrebbe dovuto essere chiusa. Chiede un fatto storico che non sia questione di opinione e la risposta sarebbe illuminante.
Ben Flynn

Risposte:


30

Gli indici di array e di altre raccolte rappresentano gli offset della memoria, quindi logicamente iniziano da zero. Gli indici XML e XPATH rappresentano posizioni e conteggi, quindi abbastanza logicamente iniziano da uno (e zero è quindi rappresentativo di "vuoto")


8

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. Nello stesso anno, è stato rinominato RSS (Rich Site Summary) con l'aggiornamento v0.91. Lo sviluppo del progetto è passato di mano più volte, ma la versione RSS 1.0 è stata rilasciata nel dicembre del 2000. Con l'aggiornamento v1.0, RSS includeva il supporto per XML.

Durante il 2002 v2.0 è stata rilasciata a settembre come RSS (Really Simple Syndication) e ha iniziato ad evolversi in una delle principali tecnologie Internet. Nella sua storia antica, i feed RSS (ei dati XML che contenevano) venivano letti dagli esseri umani in formato grezzo. Blog e altre fonti di notizie utilizzavano feed RSS e XML per produrre informazioni continuamente aggiornate. Poiché XML veniva letto da semplici mortali (non programmatori), anche XPath e XSLT dovevano essere facilmente comprensibili, in modo che questi semplici mortali non sarebbero stati sopraffatti dalla complessità quando interagivano con esso. Ecco perché XPath imita lo stile degli URI, che è qualcosa con cui gli utenti finali avevano già familiarità. Una delle concessioni fatte ai fini della leggibilità da parte degli utenti è stata quella di utilizzare tecniche di numerazione antiquate, ovvero indici basati su 1 invece di indici basati su 0.

Sebbene i feed RSS e XML siano stati creati per essere leggibili dalla maggior parte delle persone, i lettori RSS sono stati sviluppati per fornire un'interfaccia più piacevole per gli esseri umani per leggere i feed RSS. Ora, i dati RSS e XML non elaborati vengono letti quasi esclusivamente con una sorta di lettore o interfaccia grafica. XML è ancora in uso frequente (forse permanente) in tutto il Web, ma è mascherato da interfacce utente grafiche fantasiose per fornire una migliore esperienza agli utenti finali.

* Il termine " semplici mortali " si riferisce a esseri umani che non sono programmatori


5
Non sono convinto che abbia così tanto a che fare con gli RSS. Ad esempio, in questa specifica XSL (che successivamente si è separata in XPath e altri ) dell'aprile 1999, "La funzione position () restituisce la posizione del nodo del contesto nell'elenco dei nodi del contesto. La prima posizione è 1, quindi l'ultima position sarà uguale a last (). " Ci sono stati "semplici mortali" che usavano RDF fino all'aprile 1999, quando fu redatto?
Matt Gibson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.