webentwicklung-frage-antwort-db.com.de

Warum beginnen Indizes in XPath mit 1 und nicht mit 0?

Einige Kollegen und ich haben vergangene Sprachen verglichen, in denen wir programmiert hatten, und haben über unsere Erfahrungen mit VBScript mit seinen ungeraden Funktionen wie gesprochen 1-basierter Index anstelle von 0-basierten Indizes wie in fast jeder anderen Sprache, mit der Begründung, dass es sich um eine Sprache für Benutzer handelte (zB Excel VBA) anstelle einer Sprache für Entwickler.

Dann sagte jemand: " XPath hat auch 1-basierte Indizes ", was ich nicht glauben konnte, bis ich diesen Artikel fand in denen viele Gründe für den 0-basierten Ansatz angegeben sind , einschließlich einiger von Michael Kay selbst:

  • "... nullbasierte Indizierung vereinfacht die Indexformeln beim Zugriff auf ein mehrdimensionales Array mit einem eindimensionalen Array-Zugriffsausdruck."
  • "Beim Umgang mit Tabellen oder bei der Unterteilung in Strings wäre eine nullbasierte Adressierung oft viel praktischer"
  • "... die Hardware-Adressierung ist nicht der einzige Vorteil der 0-basierten Adressierung ... sie erleichtert auch die Berechnung ..."

aber dann wird Michael Kay als Fazit zitiert:

... 1-basierte Logik war die richtige Wahl für XPath und XSLT ... da die Sprache für Benutzer und nicht für Programmierer entwickelt wurde und Benutzer immer noch die altmodische Angewohnheit haben, auf das erste Kapitel eines Buches als Kapitel zu verweisen Eins...

Kann mir das jemand erklären? (1) Wie ist XPath für Benutzer konzipiert? Ich kann mir niemanden vorstellen, der kein Entwickler ist, der sich mit der syntaktischen Rigidität von XPath oder den deklarativen/funktionalen Programmieraspekten von auseinandersetzt XSLT. und (2) Warum haben die Schöpfer von XPath wirklich gegen die Norm moderner Programmiersprachen verstoßen, indem sie einen 1-basierten Index gewählt haben?

103
Edward Tanguay

Array- und andere Erfassungsindizes stellen Speicher-Offsets dar, also beginnen sie logischerweise bei Null. XML- und XPATH-Indizes stellen Positionen und Zählungen dar, also beginnen sie logischerweise bei eins (und Null steht daher für "leer").

21
mike mckechnie

Um diese Frage zu beantworten, müssen wir die Geschichte einiger Technologien untersuchen.

RSS XML XSLT und XPath History

Die Version 0.9 von RSS wurde ursprünglich als RDF Site Summary 1999 von einigen Mitarbeitern von Netscape für das Portal my.netscape.com von Netscape veröffentlicht. Später in diesem Jahr wurde sie in RSS (Rich Site) umbenannt Zusammenfassung) mit dem v0.91-Update: Die Entwicklung des Projekts wechselte mehrmals den Besitzer, aber RSS Version 1.0 wurde im Dezember 2000 veröffentlicht. Mit dem v1.0-Update bot RSS Unterstützung für XML.

Im Jahr 2002 wurde v2.0 im September als RSS (Really Simple Syndication) veröffentlicht und entwickelte sich zu einer wichtigen Internettechnologie. In der Frühgeschichte wurden RSS-Feeds (und die darin enthaltenen XML-Daten) von Menschen im Rohformat gelesen. Blogs und andere Nachrichtenquellen verwendeten RSS-Feeds und XML, um kontinuierlich aktualisierte Informationen auszugeben. Da XML nur von Sterblichen (Nicht-Programmierern) gelesen wurde, mussten auch XPath und XSLT leicht verständlich sein, damit diese Sterblichen bei der Interaktion nicht durch Komplexität überfordert werden. Aus diesem Grund ahmt XPath den Stil von URIs nach, mit dem Endbenutzer bereits vertraut waren. Eine der Zugeständnisse, die zum Zwecke der Lesbarkeit für Benutzer gemacht wurden, bestand darin, altmodische Nummerierungstechniken zu verwenden, d. H. 1-basierte Indizes anstelle von 0-basierten Indizes. Das ist die gleiche Konzession, die Sie mit VBScript erwähnt haben, und sie wurde aus ähnlichen Gründen gemacht.

Obwohl RSS-Feeds und XML für die meisten Menschen lesbar gemacht wurden, wurden RSS-Reader entwickelt, um eine angenehmere Benutzeroberfläche für das Lesen von RSS-Feeds zu bieten. Jetzt werden rohe RSS- und XML-Daten fast ausschließlich mit einem Reader oder einer grafischen Oberfläche gelesen. XML wird immer noch häufig (möglicherweise permanent) im Web verwendet, wird jedoch durch ausgefallene grafische Benutzeroberflächen maskiert, um Endbenutzern eine bessere Benutzererfahrung zu bieten.

* Der Ausdruck " bloße Sterbliche " bezieht sich auf Menschen, die keine Programmierer sind

9
Andrew