เหตุใดดัชนีใน XPath จึงเริ่มต้นด้วย 1 และไม่ใช่ 0


117

เพื่อนร่วมงานบางคนและฉันกำลังเปรียบเทียบภาษาในอดีตที่เราได้ตั้งโปรแกรมไว้และกำลังพูดถึงประสบการณ์ของเรากับVBScriptด้วยคุณสมบัติแปลก ๆเช่นดัชนีที่อิง 1 รายการแทนที่จะเป็นดัชนีที่อิง 0 เหมือนกับภาษาอื่น ๆ เกือบทั้งหมดมีเหตุผลว่ามันเป็นภาษาสำหรับผู้ใช้ (เช่น Excel VBA) แทนที่จะเป็นภาษาสำหรับนักพัฒนา

จากนั้นก็มีคนพูดว่า " XPath มีดัชนี 1 ฐานด้วย " ซึ่งฉันไม่อยากจะเชื่อเลยจนกว่าจะพบบทความนี้ซึ่งมีหลายเหตุผลที่ให้เหตุผลว่าเป็นแนวทางที่อิง 0รวมถึงบางส่วนจาก Michael Kay เอง:

  • "... การจัดทำดัชนีแบบศูนย์มีแนวโน้มที่จะทำให้สูตรดัชนีง่ายขึ้นเมื่อเข้าถึงอาร์เรย์หลายมิติด้วยนิพจน์การเข้าถึงอาร์เรย์แบบมิติเดียว"
  • "เมื่อจัดการตารางหรือสมัครสมาชิกเป็นสตริงการกำหนดแอดเดรสแบบศูนย์มักจะสะดวกกว่ามาก"
  • "... การกำหนดแอดเดรสฮาร์ดแวร์ไม่ใช่ประโยชน์เพียงอย่างเดียวของการกำหนดแอดเดรสแบบ 0 เท่านั้น ... แต่ยังช่วยให้การคำนวณง่ายขึ้น ... "

แต่ Michael Kay ถูกยกมาเป็นข้อสรุป:

... ตรรกะแบบ 1 เป็นตัวเลือกที่เหมาะสมสำหรับ XPath และ XSLT ... เนื่องจากภาษาได้รับการออกแบบมาสำหรับผู้ใช้ไม่ใช่สำหรับโปรแกรมเมอร์และผู้ใช้ยังคงมีนิสัยล้าสมัยในการอ้างถึงบทแรกในหนังสือเป็น Chapter หนึ่ง...

ใครช่วยอธิบายให้ฉันฟังหน่อย (1) XPath ออกแบบมาสำหรับผู้ใช้อย่างไร? ฉันนึกภาพไม่ออกว่าใครที่ไม่ใช่นักพัฒนาซอฟต์แวร์กำลังทะเลาะกับความแข็งแกร่งทางวากยสัมพันธ์ของ XPath หรือลักษณะการเขียนโปรแกรมเชิงประกาศ / ฟังก์ชันของ XSLT และ(2) เหตุใดผู้สร้าง XPath จึงขัดกับบรรทัดฐานของภาษาโปรแกรมสมัยใหม่โดยการเลือกดัชนีแบบ 1


7
ในบทความเดียวกันไมเคิลยังมีคำพูดต่อไปนี้: "ฉันไม่สามารถบอกคุณได้ว่าประวัติที่แท้จริงของการตัดสินใจคืออะไรฉันสามารถโพสต์ให้เหตุผลเท่านั้น" ถ้าเขาไม่รู้ก็คงไม่มีคำตอบที่น่าพอใจ
Dirk Vollmar

5
ฉันโหวตให้ปิดคำถามนี้เป็นเรื่องส่วนตัวและเชิงโต้แย้ง การจัดทำดัชนีที่อิง 0 ไม่ได้ดีไปกว่าการจัดทำดัชนีแบบ 1 ฐานและการย้อนกลับก็เป็นจริงเช่นกันการจัดทำดัชนีที่อิง 1 ไม่มีทางที่ดีไปกว่าการจัดทำดัชนีตาม 0 ทั้งสองมี plusses และ minuses การจัดทำดัชนีแบบ 1 เป็นเรื่องปกติสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ นอกจากนี้ยังช่วยในการระบุขอบเขตบนของช่วงเป็นไม่ได้เป็นธรรมชาติมากและมักจะนำไปสู่ข้อผิดพลาดn n - 1สำหรับใครก็ตามที่มีความคิดในทางที่ผิดเนื่องจากตรรกะ "การเขียนโปรแกรมสมัยใหม่" การเริ่มใช้การจัดทำดัชนีแบบ 1 ฐานจะเป็นประสบการณ์ที่เพลิดเพลินและสดชื่น :)
Dimitre Novatchev

3
คำตอบสำหรับคำถาม stackoverflow นี้แสดงให้เห็นว่าดัชนีที่ใช้ 0 เป็นที่ต้องการด้วยเหตุผลหลายประการ: stackoverflow.com/questions/393462/defend-zero-based-arrays
Edward Tanguay

9
คำถามของฉันเป็นคำถามจริงเนื่องจากฉันสอนการเขียนโปรแกรมและต้องการคำตอบสำหรับคำถามนี้เกี่ยวกับดัชนี xpath ในกรณีที่เกิดขึ้น ฉันคิดว่าคำตอบที่ดีที่สุดคือดัชนีที่อิง 1 แมปกับตำแหน่ง () ซึ่งถูกใช้อย่างมากใน xpath
Edward Tanguay

64
ฉันคิดว่านี่เป็นคำถามที่ถูกต้องและไม่ควรถูกปิด มันขอข้อเท็จจริงทางประวัติศาสตร์ที่ไม่ใช่เรื่องของความคิดเห็นและคำตอบก็จะกระจ่างแจ้ง
Ben Flynn

คำตอบ:


30

อาร์เรย์และดัชนีคอลเลกชันอื่น ๆ แสดงถึงการชดเชยหน่วยความจำดังนั้นจึงมีเหตุผลเพียงพอที่จะเริ่มต้นที่ศูนย์ ดัชนี XML และ XPATH แสดงถึงตำแหน่งและจำนวนดังนั้นจึงมีเหตุผลเพียงพอที่จะเริ่มต้นที่หนึ่ง (และศูนย์จึงเป็นตัวแทนของ "ว่าง")


8

เพื่อตอบคำถามนี้เราต้องตรวจสอบประวัติของเทคโนโลยีบางอย่าง

RSS XML XSLT และ XPath History

RSS เวอร์ชัน 0.9 ได้รับการเผยแพร่ครั้งแรกในชื่อ RDF Site Summary ในปี 2542 โดยชายสองคนที่ Netscape สำหรับพอร์ทัล my.netscape.com ของ Netscape ต่อมาในปีนั้นได้เปลี่ยนชื่อเป็น RSS (Rich Site Summary) ด้วยการอัปเดต v0.91 การพัฒนาโครงการเปลี่ยนมือหลายครั้ง แต่ RSS เวอร์ชัน 1.0 ได้รับการเผยแพร่ภายในเดือนธันวาคมปี 2000 ด้วยการอัปเดต v1.0 RSS รวมการสนับสนุน XML

ในช่วงปี 2002 v2.0 ได้รับการเผยแพร่ในเดือนกันยายนในชื่อ RSS (Really Simple Syndication) และเริ่มพัฒนาไปสู่เทคโนโลยีอินเทอร์เน็ตที่สำคัญ ในประวัติศาสตร์ยุคแรกฟีด RSS (และข้อมูล XML ที่มี) ถูกอ่านโดยมนุษย์ในรูปแบบดิบ บล็อกและแหล่งข่าวอื่น ๆ ใช้ RSS feeds และ XML เพื่อส่งออกข้อมูลที่อัปเดตอย่างต่อเนื่อง เนื่องจากมนุษย์เท่านั้นที่อ่าน XML (ที่ไม่ใช่โปรแกรมเมอร์) XPath และ XSLT จึงจำเป็นต้องเข้าใจได้ง่ายเพื่อไม่ให้มนุษย์เหล่านี้ถูกครอบงำด้วยความซับซ้อนเมื่อมีปฏิสัมพันธ์กับมัน นั่นคือเหตุผลที่ XPath เลียนแบบรูปแบบของ URI ซึ่งเป็นสิ่งที่ผู้ใช้ปลายทางคุ้นเคยอยู่แล้ว หนึ่งในสัมปทานที่สร้างขึ้นเพื่อจุดประสงค์ในการอ่านได้ของผู้ใช้คือการใช้เทคนิคการกำหนดหมายเลขแบบเก่าเช่นดัชนีที่ใช้ 1 แทนดัชนีที่อิง 0

แม้ว่าฟีด RSS และ XML จะถูกสร้างขึ้นเพื่อให้คนส่วนใหญ่สามารถอ่านได้ แต่โปรแกรมอ่าน RSS ได้รับการพัฒนาเพื่อให้มีอินเทอร์เฟซที่น่าพอใจยิ่งขึ้นสำหรับมนุษย์ในการอ่านฟีด RSS ตอนนี้ข้อมูล RSS และ XML ดิบจะถูกอ่านโดยใช้โปรแกรมอ่านหรืออินเทอร์เฟซแบบกราฟิก XML ยังคงมีการใช้งานบนเว็บบ่อยครั้ง (อาจถาวร) แต่จะถูกปิดบังโดยอินเทอร์เฟซผู้ใช้แบบกราฟิกที่สวยงามเพื่อมอบประสบการณ์ที่ดีขึ้นสำหรับผู้ใช้ปลายทาง

* คำว่า " ปุถุชน " หมายถึงมนุษย์ที่ไม่ใช่โปรแกรมเมอร์


5
ฉันไม่มั่นใจว่ามันเกี่ยวข้องกับ RSS มากขนาดนี้ ตัวอย่างเช่นในข้อกำหนด XSL นี้ (ซึ่งต่อมาแยกออกเป็น XPath และอื่น ๆ ) ตั้งแต่เดือนเมษายน 2542 "ฟังก์ชัน position () จะส่งคืนตำแหน่งของโหนดบริบทในรายการโหนดบริบทตำแหน่งแรกคือ 1 และตำแหน่งสุดท้าย ตำแหน่งจะเท่ากับ last () " มี "มนุษย์ธรรมดา" คนใดบ้างที่ใช้ RDF ในช่วงถึงเดือนเมษายน 2542 เมื่อมีการร่างขึ้น
Matt Gibson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.