Tại sao các chỉ mục trong XPath bắt đầu bằng 1 mà không phải 0?


117

Một số đồng nghiệp và tôi đã so sánh các ngôn ngữ trong quá khứ mà chúng tôi đã lập trình và đang nói về trải nghiệm của chúng tôi với VBScript với các tính năng kỳ lạ như chỉ mục dựa trên 1 thay vì chỉ mục dựa trên 0 như hầu hết các ngôn ngữ khác, lý do cho rằng đó là ngôn ngữ cho người dùng (ví dụ: Excel VBA) thay vì ngôn ngữ cho nhà phát triển.

Sau đó, có người nói, " XPath cũng có các chỉ mục dựa trên 1 " mà tôi không thể tin được cho đến khi tôi tìm thấy bài viết này trong đó có nhiều lý do được đưa ra theo hướng tiếp cận dựa trên 0, bao gồm một số từ chính Michael Kay:

  • "... Lập chỉ mục dựa trên zero có xu hướng làm cho các công thức chỉ mục đơn giản hơn khi truy cập vào một mảng nhiều chiều với biểu thức truy cập mảng một chiều"
  • "khi xử lý các bảng hoặc đăng ký thành chuỗi, địa chỉ dựa trên số 0 thường sẽ thuận tiện hơn nhiều"
  • "... địa chỉ phần cứng không phải là lợi ích duy nhất của địa chỉ dựa trên 0 ... nó cũng giúp việc tính toán dễ dàng hơn ..."

nhưng sau đó Michael Kay được trích dẫn như kết luận:

... Logic dựa trên 1 là lựa chọn phù hợp cho XPath và XSLT ... vì ngôn ngữ được thiết kế cho người dùng, không dành cho lập trình viên và người dùng vẫn có thói quen lỗi thời này khi đề cập đến chương đầu tiên trong một cuốn sách như Chương Một...

Ai đó có thể giải thích điều đó với tôi? (1) XPath được thiết kế cho người dùng như thế nào? Tôi không thể tưởng tượng bất cứ ai không phải là nhà phát triển tranh cãi với sự cứng nhắc cú pháp của XPath hoặc các khía cạnh khai báo / lập trình chức năng của XSLT. và (2) Tại sao những người sáng tạo XPath thực sự đi ngược lại chuẩn mực của các ngôn ngữ lập trình hiện đại bằng cách chọn chỉ mục dựa trên 1?


7
Trong cùng một bài viết, Michael cũng được trích dẫn với những từ sau: "Tôi không thể cho bạn biết lịch sử thực tế của quyết định là gì; tôi chỉ có thể hợp lý hóa nó sau". Nếu thậm chí anh ta không biết thì có lẽ không có câu trả lời thỏa mãn.
Dirk Vollmar

5
Tôi đã bỏ phiếu để ĐÓNG câu hỏi này là chủ quan và lập luận. Lập chỉ mục dựa trên 0 không có cách nào tốt hơn lập chỉ mục dựa trên 1 và điều ngược lại cũng đúng: lập chỉ mục dựa trên 1 không có cách nào tốt hơn so với lập chỉ mục dựa trên 0. Cả hai đều có kìm và minuses. Lập chỉ mục dựa trên 1 là tự nhiên hơn cho những người không lập trình. Nó cũng cho phép chỉ định ranh giới trên của một phạm vi n, không phải là rất không tự nhiên và thường dẫn đến lỗi n - 1. Đối với bất kỳ ai bị biến thái do logic "lập trình hiện đại", bắt đầu sử dụng lập chỉ mục dựa trên 1 sẽ là một trải nghiệm thú vị và mới mẻ :)
Dimitre Novatchev

3
các câu trả lời cho câu hỏi stackoverflow này cho thấy các chỉ mục dựa trên 0 được ưa thích vì nhiều lý do: stackoverflow.com/questions/393462/defend-zero-basing-arrays
Edward Tanguay

9
Câu hỏi của tôi thực sự là một câu hỏi, vì tôi dạy lập trình và muốn có câu trả lời cho câu hỏi này liên quan đến các chỉ số xpath trong trường hợp nó xuất hiện. Tôi nghĩ rằng câu trả lời tốt nhất là chỉ mục dựa trên 1 ánh xạ đến vị trí () được sử dụng nhiều trong xpath.
Edward Tanguay

64
Tôi nghĩ rằng đây là một câu hỏi chính đáng và không nên bị đóng cửa. Nó yêu cầu một thực tế lịch sử không phải là vấn đề quan điểm và câu trả lời sẽ được khai sáng.
Ben Flynn

Câu trả lời:


30

Mảng và các chỉ mục bộ sưu tập khác đại diện cho bù đắp bộ nhớ, do đó, đủ để chúng bắt đầu từ 0. Các chỉ mục XML và XPATH đại diện cho các vị trí và số lượng, do đó, đủ để chúng bắt đầu tại một (và do đó, không đại diện cho "trống")


8

Để trả lời câu hỏi này, chúng ta phải kiểm tra lịch sử của một số công nghệ.

Lịch sử RSS XSLT và XPath

Phiên bản 0.9 của RSS ban đầu được phát hành dưới dạng Tóm tắt Trang web RDF vào năm 1999 bởi một vài người tại Netscape cho cổng thông tin my.netscape.com của Netscape. Cuối năm đó, nó được đổi tên thành RSS (Tóm tắt trang web phong phú) với bản cập nhật v0.91. Việc phát triển dự án đã thay đổi nhiều lần, nhưng phiên bản RSS 1.0 được phát hành vào tháng 12 năm 2000. Với bản cập nhật v1.0, RSS bao gồm hỗ trợ cho XML.

Trong năm 2002, v2.0 được phát hành vào tháng 9 dưới dạng RSS (Cung cấp thông tin thực sự đơn giản) và bắt đầu phát triển thành một công nghệ internet lớn. Trong lịch sử ban đầu của nó, các nguồn cấp RSS (và dữ liệu XML mà chúng chứa) đã được con người đọc ở định dạng thô. Blog và các nguồn tin tức khác đã sử dụng nguồn cấp RSS và XML để xuất thông tin cập nhật liên tục. Do XML đã được đọc bởi những người bình thường (không phải lập trình viên), XPath và XSLT cũng cần phải dễ hiểu, để những người phàm tục này sẽ không bị choáng ngợp bởi sự phức tạp khi tương tác với nó. Đó là lý do tại sao XPath bắt chước phong cách của URI, đây là điều mà người dùng cuối đã quen thuộc. Một trong những nhượng bộ được thực hiện cho mục đích dễ đọc của người dùng, là sử dụng các kỹ thuật đánh số kiểu cũ, tức là các chỉ mục dựa trên 1 thay vì các chỉ mục dựa trên 0.

Mặc dù hầu hết mọi người đều có thể đọc các nguồn cấp RSS và XML, nhưng trình đọc RSS được phát triển để cung cấp giao diện dễ chịu hơn cho con người để đọc các nguồn cấp RSS. Bây giờ, dữ liệu RSS và XML thô được đọc gần như độc quyền với một số loại trình đọc hoặc giao diện đồ họa. XML vẫn được sử dụng thường xuyên (có lẽ là vĩnh viễn) trên web, nhưng nó được che dấu bởi các giao diện người dùng đồ họa ưa thích để cung cấp trải nghiệm tốt hơn cho người dùng cuối.

* Thuật ngữ " chỉ người phàm ", dùng để chỉ những người không phải là lập trình viên


5
Tôi không tin nó có liên quan nhiều đến RSS. Ví dụ, trong đặc tả XSL này ( sau này tách ra thành XPath và các loại khác ) từ tháng 4 năm 1999, hàm "Position () trả về vị trí của nút bối cảnh trong danh sách nút bối cảnh. Vị trí đầu tiên là 1, và cuối cùng là vị trí cuối cùng vị trí sẽ bằng với cuối cùng (). " Có bất kỳ "phàm nhân" nào sử dụng RDF trong thời gian tới tháng 4 năm 1999, khi điều đó được soạn thảo không?
Matt Gibson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.