HTML için neden katı ayrıştırma seçilmedi?


38

HTML oluştururken neden katı ayrıştırmanın seçilmediğini merak ettim. İnternet geçmişinin çoğu için, tarayıcılar her türlü işaretlemeyi kabul etmiş ve ayrıştırmak için ellerinden geleni yapmıştır. Süreç performansı düşürüyor, insanların anlamsız yazmalarına izin veriyor ve eski özellikleri bırakmayı zorlaştırıyor.

HTML’nin kesin olarak ayrıştırılmamasının belirli bir nedeni var mı?


7
Joels makalesini, Marslı Kulaklıkların ilgisini çekebilir . Ayrıca özel not: RFC 793: Sağlamlık Prensibi . Bu prensip o zamandan beri tarayıcılara uygulandı.
Brian

25
@Brian: Sağlamlık, bok aldığınızda düşmemelisiniz demektir. Bu anlamsız olmak zorunda olduğunuz anlamına gelmez.
Marjan Venema

2
XHTML katı ayrıştırma kullanır.
user16764

3
Sadece ben miyim, yoksa bu cevapların hiçbiri tatmin edici değil mi?
gsingh2011,

2
@ gsingh2011 Cevapların hiçbiri tatmin edici değil, ancak cevabım gerçek. Buradaki bazılarımız çok uzun zaman önce internette aktif olduk :-) Ama evet, bu kadar basit sebeplerden dolayı ne kadar hurda bıraktığımız şaşırtıcı.
Ross Patterson

Yanıtlar:


39

Sebep basittir: İlk grafik tarayıcılar olan NCSA Mosiac ve daha sonra Netscape Navigator sırasında neredeyse tüm HTML'ler elle yazılmıştır. Tarayıcı yazarları (Netscape eski Mozaik halkı tarafından yapıldı) hızlı bir şekilde yanlış HTML oluşturmayı reddetmenin kullanıcılar tarafından ve diğer kullanıcılara karşı tutulacağını fark etti .


7
+1 evet, her şey böyle başladı, vi ya da not defterinde. Çoğu sayfa hatalı örnek koddan kopyalandığında, hiç bu kadar iyi olmamıştı. Ayrıca WWW de canlandı, bu yüzden yazabilen herkes bir web geliştiricisi oldu ve her şey hızlı bir şekilde yapılmak üzereydi.
jqa

1
Anlaşılan, @ Jukka'nın yorumuyla birlikte verilen bu cevap mümkün olan en iyi açıklamayı veriyor
Shubham

35

Çünkü en iyi tahminleri yapmak tarayıcı üreticisinin bakış açısından yapılacak doğru şeydir. Durumu göz önünde bulundurun: ideal olarak, aldığınız HTML tamamen doğru ve açıktır. Bu harika. Ancak ilginç olan kısım, HTML doğru olmadığında ne olduğu ; Bizim üzerinde etkisi olmayan bir kaynaktan gelen girdilerle uğraştığımız için, bunun için hazırlıklı olmalıyız. Şimdi bu olduğunda, ne yapabiliriz? İki seçeneğimiz var: a) başarısız ve b) hatadan kurtulmak için elinden geleni yap. Başarısız olursak, kullanıcının işe yaramaz bir hata mesajından başka bir şeyi yoktur ve sunucuyu kontrol etmedikleri için bu konuda yapabilecekleri hiçbir şey yoktur. En iyi gayreti gösterirsek, kullanıcı en azından sayfada yapabileceğimiz her şeye sahiptir ve genellikle tahmin çoğu zaman doğrudur.

Bununla ilgili tek gerçek sorun , genellikle geliştirme durumu olan hata iletilerine ihtiyaç duyduğunuzda - oluşturduğunuz HTML'nin doğru olduğundan emin olmak istediğinizden ve "X tarayıcıda çalıştığından" "düzeltmeye" eşdeğer olmadığından, Bir tarayıcı üzerinden basitçe çalıştıramaz ve çalışıp çalışmadığını göremeyiz: tarayıcının sizin için çözdüğü doğru HTML ile yanlış HTML arasındaki farkı söyleyemeyiz. Bu olsa çözülebilir bir problemdir; standart ihlallerini bildiren tarayıcı eklentileri var, W3C doğrulayıcısı var ve daha pek çok benzer araç var.


7
Eh, kimsenin hata yapan HTML’yi sunacağını sanmıyorum. Niçin kodunu varsayan bir derleyicinin, HTML'yi varsayan bir tarayıcıdan farklı olduğunu düşünüyorsunuz.
Shubham

1
Burada Shubham ile aynı fikirdeyim - "üzerinde hiçbir etkisi olmayan bir kaynaktan gelen girdiyle uğraştığımız için" yanlıştır, etki dolaylıdır, ancak bazı web siteleri bu etki nedeniyle hala IE6'yı desteklemektedir.
Steve314

2
@Shubham: Bir derleyici farklıdır, çünkü amacı makinede okunabilir kaynak kodunu insan sindirilebilir bir forma dönüştürmek değil, insan tarafından okunabilen kaynak kodunu bir bilgisayar için daha uygun olan bir şeye dönüştürmektir (makine kodu veya bazı ara ürünler) biçim). Derleyici ile girişi düzelttiniz ve kodun üretime girmediğine sevindiniz. Tarayıcıda, tarayıcıyı veya web sitesi yazarını lanetlersiniz, ancak iki şekilde de sayfayı göremezsiniz.
tdammers

2
@Shubham: Genel olarak bir derleyicinin kullanıcısı, derlenmekte olan kaynak kodu üzerinde kontrol sahibi olur. Genelde web sayfalarında durum böyle değildir.
supercat,

17

HTML yazarları ve geliştirme araçları berbat biçimlendirme üretir. Tarayıcılar rekabetçi nedenlerden ötürü elinden gelenin en iyisini yaparlar: web sayfalarının çoğunu makul bir şekilde gösteremeyen tarayıcılar, kimin suçu hakkında en az önem vermeyecek olan kullanıcılar tarafından reddedilir.

Programlama dili uygulamalarının yaptıklarından oldukça farklı. Derleyiciler ve tercümanlar, bir programcı tarafından yazılabileceği düşünülen kod üzerinde çalışır, oysa herkes ve erkek kardeşi, asgari bir eğitimle veya onsuz HTML yazabilir. HTML işaretlemesi bir anlamda koddur, ancak bir anlamda programlama dil talimatlarından ziyade verileridir ve yazılımdaki (iyi) gelenek, verilere karşı toleranslı olmaktır.

İlke olarak XHTML katı (XML) ayrıştırma kuralları uygular, böylece bir XML içerik türüyle birlikte sunulan bir XHTML belgesi yalnızca XML anlamında iyi biçimlendirilmişse görüntülenir - aksi takdirde, yalnızca ilk hata kullanıcıya iletilir. Bu web yapımcılığında hiç popüler olmadı - etrafındaki “XHTML” nin neredeyse tamamı metin / html olarak sunuluyor ve geleneksel etiket çorbası olarak çok liberal bir şekilde, sadece yeni eksantrikliklerle işleniyor.


15
HTML authors and authoring tools produce crappy markup.- yapıyorlar çünkü tarayıcılar bunu kabul ediyor. Eğer tarayıcılar baştan beri kabul etmedilerse - o zaman bu araçlar ve yazarlar berbat biçimlendirme üretmekten
kurtulamazlardı

3
@GrandmasterB - Bence asıl noktayı özlediniz - Piyasadaki tek bir tarayıcı bile olsa - kesin bir çözümleme yapmadı.
user93353

3
Komik not: Bir tarayıcı geçersiz bir siteyi ayrıştıramadığında, pazar payını kaybedeceğini söylüyorsunuz. Ama sadece bakalım: ne kadar kötü olsa da pazar payını kaybetmiyor. Sadece fakir geliştiricileri eski API'leri kullanırken kirli kesitler yazmaya zorluyor ... Ve beni uyarlama şemasını başlatmaya başlama ...
Max

3
Başlangıçta, tarayıcılar sonlandırılmayan ve resmi bir özelliği olmayan bir biçimlendirme dili ile uğraşmak için aceleyle yazılmışlardı - kesin ayrıştırma kuralları yoktu. (1995’te HTML 2.0,
SGML’ye

2
IE aslında pazar payını oldukça kaybetti. Ancak bunun kesin bir çözümleme ile ilgisi varsa, muhtemelen çok azdır. IE, tuhaflıklarıyla, diğer tarayıcıları tuhaflıklarını büyük ölçüde taklit etmeye zorlayacak şekilde web’i yönetti, çünkü pek çok sayfa aksi halde parçalanacaktı.
Jukka K. Korpela

9

Bunun kısaca, HTML’nin SGML adlı, genellikle belgeler ve kılavuzlar ve benzerleri için kullanılan köprülü olmayan bir işaretleme diline dayanması gerekir.

Gönderen bir makale HTML tarihi hakkında:

Tim, eski HTML belgelerinin bazılarının CERN'in zaten kullandığı eski bir SGML diline dayandığını belirtti: - HTML’de CERN’de kullanılan ve bir kez desteklenen SGML etiket kümesinden bazı etiketler ekledik [...] HTML ayrıştırıcısı anlamadığı etiketleri görmezden gelecek ve CERN-SGML etiketlerini anlamadığı özellikleri görmezden gelecektir .

[...] ilk HTML etiketlerinin çoğu aslında AAP'nin bir çeşidi olan (erken SGML dili) CERN SGMLGuid dilden alınmıştır. Örneğin, başlık, hn, p, ol ve diğerleri, görünüşe göre bu dilden alınmıştır. Tek radikal değişiklik, WWW’nin çıkarmayacağı tüm önemli çapa () bağlantısının eklenmesiydi.

Kalın yazdığım parçayı not ederek, temel olarak, tanıdık oldukları SGML sisteminde mevcut olan etiketlerin bir alt kümesini uyguladılar , yeni çapa <a> etiketini eklediler ve yaptıkları birçok etiketin herhangi birini yoksaymayı seçtiler ' • Herhangi bir nedenle (örneğin kaynakça listeleri için etiketler, "example" için xmp, "kutu" etiketi, örneğin bir metin bloğunun çevresine bir kutu çizmek için) dikkat etmek veya bunları desteklemek istemek. Dolayısıyla, bunu yapmanın en basit yolu, çözümleyici tarafından bilinmeyen bir işaretlemenin affedilmesi ve nedeninin kullanıcının kötü işaretleme yazması olup olmadığına bakılmaksızın, nedeni bilinmeyen biçimlendirmeyi göz ardı etmek veya mevcut belgeleri dönüştürmenin en kolay yoludur. Bu yeni HTML formatı, mevcut SGML belgelerine bazı köprüler eklemek ve desteklenmeyen veya uygulanmayan etiketleri dikkate almamaktır.


HTML sözdizimi gerçekten de, işaretlemesinin şekli için SGML Referans Beton Sözdizimini temel alıyordu. Ancak SGML'nin kendisi , HTML'nin ödünç alabileceği belgeleri işaretlemek için unsurlara sahip değildi , HTML öğesi kümesi aslında IBM'in, GMML RCS'ye çevrilmiş olan GML belge işaretleme diline benziyor .
Ross Patterson,

5

Bu kısmen tarayıcı savaşının tarihi bir kalıntısı.

IE ve netscape, piyasayı ele geçirmek için rekabet ediyor ve gittikçe daha "harika" olmaya devam eden ve diğer tarayıcılar için tasarlanan sayfaları kabul etmeye zorlayan yeni özellikler yayınlamaya devam ediyordu.

Bu, tarayıcıların bilinmeyen etiketleri sessizce kabul etmesi ve görmezden gelmesi anlamına gelir; komiteler karışmaya başladıktan sonra ... şeyleri tasarlayan bir komiteniz var ve bunun sonucunda tarayıcının çoğunu desteklemek istediği birçok farklı sürüm (bazı belirsiz ifadelere sahip) Onları ve her sürüm için ayrı bir ayrıştırıcı oluşturmak muazzam şişkinlik olurdu. Bu yüzden farklı modlara sahip tek bir ayrıştırıcı kullanmak (nispeten) daha kolaydır.

Başka bir bölüm için, netscape ve IE, html’in ortak bir adam için (o günlerde olduğu gibi) erişilebilir olmasını istedi; bu da, kullanıcının ne yapmak istediğini yapmak yerine, ne yapmak istediğini yapmaya çalışmak ve her sarkan etiketin üzerine geçmek anlamına geliyordu.

Sorunu daha da kötüleştiren, yanlış şeyi öğreten ve doğru olduğunu düşünen birkaç "öğretici" sitenin de var olması, çünkü öğrettikleri işe yarıyor.

Sonuçta bu, şimdi yalnızca sitelerin% 99'unu ayrıştırmak için yalnızca katı html içeren bir tarayıcı oluşturduğunuzda işe yaramayacağı anlamına gelir.


6
IE piyasaya girmeden önce bile, Netscape asla kesin ayrıştırma yapmadı. Netscape’i 1997’nin başında hatırlıyorum.
user93353,

Net standartlar olsa bile, bir tarayıcının, tarayıcı yayınlandıktan sonra yasal olarak tanımlanmış etiketleri, ancak hiç meşru olmayan ve asla meşru olmayacak etiketleri ayırt etmesini zorlaştırır. Bir belgeyi geliştiren ancak anlamsal doğruluğu için gerekli olmayan "isteğe bağlı" etiketler, bunları uygulayan standardın sürüm numarasını içeriyorsa, standardın 23 sürümünü uygulayan bir tarayıcı sessizce bir <o24wowzo>etiketi yok sayabilir <o23wowzo>, ancak bir tasarım HTML'nin "insan tarafından okunabilir" yönünü bozabilirdi.
supercat

2

Biz de 000'larda güzel ve katı bir seçenek kurmaya çalıştık, ancak “en iyi uygulamaları” takip eden insanlar kör bir şekilde göze çarpmadıklarından, yanlış işaretlemeleri katı modda olduklarında tarayıcıları suçladılar. Ve tarayıcı satıcıları suçlanmaktan hoşlanmadı.

Web’in profesyonel olmayanlar için daha erişilebilir olmasını istediklerini, ancak hiç kimsenin HTML 4’ü en esnek haliyle kullanmasını engellemediğini iddia ettiler.

Bununla birlikte, katı stil düzeni istiyorsanız, HTML5'i hala XML olarak sunabilirsiniz. IMO, herhangi bir gerçek risk olmadan katı olarak isteyebilecek veya istemeyebilecek diğer insanlara vermeden önce, düzen veya UI çalışması yapmanın faydalarını daha katı bir modda elde etmek için iyi bir yol olabilir (çünkü, doktipi sökmek yasaklandı; aslında tuhaflıklar modunu destekliyorlar - 2017'de (bu düzenlemenin zamanında) çekilmeleri gerekiyor, bu yüzden temelde hala orada ama biraz araştırma yapıyorlar. Orada XHTML ile sahip olmadığımız bazı uyarılar olduğunu hatırlıyor gibiyim. düzen çalışmasını gerçekten etkileyin, "doğru yapmanın tek yolu" ya da bu tür bir konuşmaya katılan twits fikri sıkıştıracak, tarayıcıları tekrar suçlayacak ve dişlerini alacaklarını söyleme. Elimizde bıraktığımız tek katı alternatifin dışında (2017 değiştir:

http://mathiasbynens.be/notes/xhtml5

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.