XPath'deki dizinler neden 0 ile değil de 1 ile başlıyor?


117

Bazı meslektaşlarımız ve ben, programladığımız geçmiş dilleri karşılaştırıyorduk ve neredeyse her dilin sahip olduğu gibi 0 tabanlı dizinler yerine 1 tabanlı dizin gibi tuhaf özellikleriyle VBScript ile olan deneyimlerimiz hakkında konuşuyorduk. geliştiriciler için bir dil yerine kullanıcılar için dil (örn. Excel VBA).

Sonra birisi , Michael Kay'ın kendisinden bazıları da dahil olmak üzere , 0 tabanlı yaklaşım lehine birçok nedenin verildiği bu makaleyi bulana kadar inanamadığım " XPath ayrıca 1 tabanlı dizine sahiptir " dedi :

  • "... sıfır tabanlı dizin oluşturma, tek boyutlu bir dizi erişim ifadesine sahip çok boyutlu bir diziye erişirken dizin formüllerini daha basit hale getirme eğilimindedir"
  • "tabloları işlerken veya dizelere abone olurken, sıfır tabanlı adresleme genellikle çok daha uygun olur"
  • "... donanım adresleme, 0 tabanlı adreslemenin tek yararı değil ... aynı zamanda hesaplamaları da kolaylaştırıyor ..."

ama sonra Michael Kay, şu sonuca varıyor:

... 1 tabanlı mantık, XPath ve XSLT için doğru seçimdi ... çünkü dil, programcılar için değil, kullanıcılar için tasarlandı ve kullanıcılar hala bir kitabın ilk bölümüne Bölüm olarak atıfta bulunma gibi eski moda bir alışkanlığa sahipler Bir...

Biri bunu bana açıklayabilir mi? (1) XPath kullanıcılar için nasıl tasarlandı? XPath'in sözdizimsel katılığı veya XSLT'nin bildirimsel / işlevsel programlama yönleriyle uğraşan bir geliştirici olmayan birini hayal edemiyorum. ve (2) XPath'in yaratıcıları neden 1 tabanlı bir dizin seçerek modern programlama dilleri normuna gerçekten karşı çıktı?


7
Aynı makalede Michael şu sözlerle de alıntılanıyor: "Size kararın gerçek geçmişinin ne olduğunu söyleyemem; sadece sonradan rasyonelleştirebilirim". O bile bilmiyorsa, muhtemelen tatmin edici bir cevap yoktur.
Dirk Vollmar

5
Bu soruyu öznel ve tartışmacı olarak KAPAT'a oy verdim. 0 tabanlı indeksleme hiçbir şekilde 1 tabanlı indekslemeden daha iyi değildir ve bunun tersi de doğrudur: 1 tabanlı indeksleme hiçbir şekilde 0 tabanlı indekslemeden daha iyi değildir. Her ikisinin de artıları ve eksileri var. 1 tabanlı indeksleme, programcı olmayanlar için daha doğaldır. Ayrıca, bir aralığın üst sınırının nçok doğal olmayan ve sıklıkla hatalara yol açacak şekilde belirlenmesine de izin verir n - 1. "Modern programlama" mantığından dolayı sapkın olan herkes için, 1 tabanlı indekslemeyi kullanmaya başlamak
zevkli

3
bu yığın aşımı sorusunun yanıtları, 0 tabanlı dizinlerin birçok nedenden dolayı tercih edildiğini göstermektedir: stackoverflow.com/questions/393462/defend-zero-based-arrays
Edward Tanguay

9
Programlamayı öğrettiğim için sorum gerçek bir soru ve xpath indeksleri ile ilgili bu soruya bir cevap olması ihtimaline karşı bir cevap almak istiyorum. Bence en iyi yanıt, xpath'te yoğun olarak kullanılan 1 tabanlı dizinin position () ile eşleşmesidir.
Edward Tanguay

64
Bunun yasal bir soru olduğunu ve kapatılmaması gerektiğini düşünüyorum. Bir görüş meselesi olmayan tarihsel bir gerçeği sorar ve cevap aydınlatıcı olur.
Ben Flynn 20'11

Yanıtlar:


30

Dizi ve diğer koleksiyon dizinleri bellek uzaklıklarını temsil eder, bu nedenle mantıksal olarak yeterince sıfırdan başlarlar. XML ve XPATH dizinleri konumları ve sayıları temsil eder, bu nedenle mantıksal olarak yeterli bir şekilde birde başlarlar (ve bu nedenle sıfır, "boş" anlamına gelir)


8

Bu soruyu cevaplamak için bazı teknolojilerin tarihini incelemeliyiz.

RSS XML XSLT ve XPath Geçmişi

RSS'nin 0.9 Sürümü ilk olarak 1999'da Netscape for Netscape'in my.netscape.com portalı için RDF Site Özeti olarak yayınlandı. O yıl daha sonra v0.91 güncellemesiyle RSS (Zengin Site Özeti) olarak yeniden adlandırıldı. Projenin geliştirilmesi birkaç kez el değiştirdi, ancak Aralık 2000'de RSS 1.0 sürümü yayınlandı. V1.0 güncellemesiyle RSS, XML desteği içeriyordu.

2002'de v2.0, RSS (Really Simple Syndication) olarak Eylül'de yayınlandı ve büyük bir internet teknolojisine dönüşmeye başladı. Erken tarihlerinde, RSS beslemeleri (ve içerdikleri XML verileri) insanlar tarafından ham biçimde okundu. Bloglar ve diğer haber kaynakları, sürekli güncellenen bilgilerin çıktısını almak için RSS beslemeleri ve XML kullandı. XML yalnızca faniler (programcı olmayanlar) tarafından okunduğu için, XPath ve XSLT'nin de kolayca anlaşılabilir olması gerekiyordu, böylece bu ölümlüler, onunla etkileşimde bulunurken karmaşıklıktan bunalmayacaklardı. Bu nedenle XPath, son kullanıcıların zaten aşina olduğu URI stilini taklit eder. Kullanıcılar tarafından okunabilirlik amacıyla verilen tavizlerden biri de eski moda numaralandırma tekniklerini yani 0 bazlı indeksler yerine 1 bazlı indeksleri kullanmaktı.

RSS beslemeleri ve XML çoğu insan için okunabilir hale getirilmiş olmasına rağmen, RSS okuyucuları, insanların RSS beslemelerini okuması için daha hoş bir arayüz sağlamak üzere geliştirilmiştir. Şimdi, ham RSS ve XML verileri neredeyse yalnızca bir tür okuyucu veya grafik arabirimle okunur. XML hala web'de sık (belki kalıcı) kullanımdadır, ancak son kullanıcılar için daha iyi bir deneyim sağlamak için süslü grafik kullanıcı arayüzleri tarafından maskelenmiştir.

* " Yalnızca ölümlüler " terimi, programcı olmayan insanları ifade eder


5
RSS ile çok ilgisi olduğuna ikna olmadım. Örneğin, Nisan 1999'dan itibaren (daha sonra XPath ve diğerlerine ayrılan ) bu XSL spesifikasyonunda , "position () işlevi, bağlam düğüm listesindeki bağlam düğümünün konumunu döndürür. İlk konum 1'dir ve bu nedenle sonuncusu konum last () 'e eşit olacaktır. " Taslağı hazırlandığı Nisan 1999'a kadar RDF kullanan herhangi bir "sadece ölümlü" müydü?
Matt Gibson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.