XML'de 'bağımsız' yönergesi ne anlama geliyor?


272

standaloneXML belgesinde ' ' yönergesi ne anlama geliyor?

Yanıtlar:


203

standaloneDeklarasyon herhangi biçimlendirme bildirimleri görmezden ayrıştırıcı anlatan bir yoludur DTD . DTD bundan sonra sadece doğrulama için kullanılır.

Örnek olarak, mütevazi <img>etiketi düşünün . XHTML 1.0 DTD'ye bakarsanız , ayrıştırıcıya <img>etiketlerin BOŞ olması ve sahip olması srcve altnitelikleri olması gerektiğini bildiren bir biçimlendirme bildirimi görürsünüz . Bir tarayıcı bir XHTML 1.0 belgesinden geçerken ve bir <img>etiket bulduğunda , DTD'nin gerektirdiğini srcve altniteliklerini fark etmeli ve mevcut değilse bunları eklemelidir. <img>EMPTY olması gerektiği için etiketi kendi kendine kapatacaktır . Bu nedir XML spesifikasyonu tarafından vasıta "biçimlendirme bildirimleri belgenin içeriğini etkileyebilir." Daha sonra standalone, ayrıştırıcıya bu kuralları yoksaymasını bildirmek için bildirimi kullanabilirsiniz .

Ayrıştırıcınızın bunu gerçekten yapıp yapmadığı başka bir sorudur, ancak standartlara uygun bir doğrulama ayrıştırıcısı (tarayıcı gibi) gerekir.

Bir DTD belirtmezseniz, bağımsız bildirimin "hiçbir anlamı" yoktur, bu nedenle bir DTD belirtmediğiniz sürece kullanmak için bir neden yoktur.


9
Örnek daha fazla değişikliğe ihtiyaç duyar. "Standalone = 'no'" olması, normalde kapatılmamış XML etiketlerini kapatmaz (bu, SGML'nin bir özelliğidir, ancak XML'in değil). Doğrulama başarısız olur. GEREKLİ nitelikler için de değer sağlamaz.
khaemuaset

2
"Bağımsız bildirim, ayrıştırıcıya DTD'deki biçimlendirme bildirimlerini yok saymasını söylemenin bir yoludur." Bu doğru değil. İle standalone=yesbiçimlendirme bildirimleri yok sayılmaz, bunun yerine belgenin geçersiz XML olmasına neden olur. Cevabı düzenleyebilsem sorun olur mu?
sleske

@sleske Lütfen sadece değişikliği yapın. Yazar mutlu olmazsa her zaman geri dönebilir.
Stephan

@Stephan: Teşvik için teşekkürler. Ne yazık ki, artık tüm XML şeyler üzerinde geçerli değilim, bu yüzden şu anda güvenle düzenleyemiyorum. Güncel bilginiz varsa kendinizi düzenlemekten çekinmeyin :-).
sleske

106
  • Bağımsız yönerge, XML bildiriminde isteğe bağlı bir özelliktir.
  • Geçerli değerler yesve varsayılan değer nonerede no?
  • Özellik yalnızca bir DTD kullanıldığında geçerlidir. ( DTD yerine şema kullanılırken özellik önemsizdir .)
  • standalone="yes"XML işlemcinin DTD'yi yalnızca doğrulama için kullanması gerektiği anlamına gelir. Bu durumda, olacak değil kullanılacak:
    • özellikler için varsayılan değerler
    • varlık bildirimleri
    • normalleştirme
  • standalone="yes"Belge harici bir DTD kullanıyorsa, geçerlilik kısıtlamaları ekleyebileceğini unutmayın . Belge, öznitelikler için varsayılan değerler gibi XML'nin değiştirilmesini gerektiren şeyler içerdiğinde ve standalone="yes"kullanıldığında , belge geçersizdir .
  • standalone="yes" belge işleme performansını optimize etmeye yardımcı olabilir.

Kaynak: Bağımsız sözde öznitelik yalnızca bir DTD kullanılıyorsa geçerlidir


2
Standalone = "yes" kullanmak ek geçerlilik kısıtlamalarına neden olur (yani bir XML belgesinin geçersiz olmasına neden olabilir). Bunu cevabın içinde düzenledim, umarım sorun olmaz.
sleske

2
@sleske Katkınız için teşekkür ederiz. Hala açık bir şekilde ifade ederken düzenlemenizi basitleştirmeye çalıştım. Eğer yanlış anladıysam tekrar düzenleme yapmaktan çekinmeyin.
Rinke

20

standalone geçerli XML belgesinin harici bir biçimlendirme bildirimine bağlı olup olmadığını açıklar.

W3C amacını "Genişletilebilir Biçimlendirme Dili (XML) 1.0 (Beşinci Baskı)" bölümünde açıklamaktadır:


10

İşaretleme bildirimleri, bir XML işlemciden bir uygulamaya geçirildiği şekliyle belgenin içeriğini etkileyebilir; örnekler, öznitelik varsayılanları ve varlık bildirimleridir. XML bildiriminin bir bileşeni olarak görünebilen bağımsız belge bildirimi, belge varlığı veya parametre varlıklarında harici olarak görünen bu tür bildirimlerin olup olmadığını gösterir. [Tanım: Harici bir biçimlendirme bildirimi, harici alt kümede veya bir parametre varlığında meydana gelen bir işaretleme bildirimi olarak tanımlanır (harici veya dahili, doğrulama olmayan işlemcilerin bunları okuması gerekmediği için ikincisi dahil edilir).]

http://www.w3.org/TR/xml/#sec-rmd


12
Bu ne anlama geliyor?
dan carter

4
Bu, orta QI'lı normal insanlarla anlaşılabilir bir şekilde konması gerektiğinden aşağı düştüm.
Andrea Silvestri

8

standalone=yesBeyannamenin amacı , belgenin içindeki bilgilerin sadece dahili DTD'ye dayanılarak sadakatle alınabileceğini garanti etmektir, yani belge harici referanslar olmadan "tek başına" olabilir. Bağımsız bir belgenin doğrulanması, doğrulama yapmayan işlemcilerin belgeyi doğru şekilde ayrıştırmak için mevcut tüm bilgilere sahip olmasını sağlar.

Bir belgenin harici DTD'si yoksa ve dahili DTD'nin parametre varlık referansları yoksa, bu belgeler zaten örtülü olarak bağımsız olduğu için bağımsız bildirim hiçbir amaca hizmet etmez.

Aşağıdakiler, kullanımın gerçek etkileridir standalone=yes.

  • Belge, dahili DTD'de bildirilmeyen varlıklara başvurular içeriyorsa, işlemcileri harici bir DTD veya parametre varlığı referanslarıyla ayrıştırırken hata atmaya zorlar (onaylamayan işlemciler olarak parametre varlıklarının değiştirilen metinleri hariç) bunu ayrıştır); amp, lt, gt, apos, Ve quotsadece istisnalar vardır

  • Bağımsız olarak bildirilmeyen bir belgeyi ayrıştırırken, doğrulamayan bir işlemci, bir parametre varlığı referansıyla karşılaşır karşılaşmaz dahili DTD'yi ayrıştırmayı durdurabilir. Bir belgeyi bağımsız olarak bildirmek, onaylamayan işlemcileri bir veya daha fazla parametre varlığı başvurusunu yok saydıktan sonra bile dahili DTD'deki biçimlendirme bildirimlerini ayrıştırmaya zorlar.

  • Belgede aşağıdakilerden herhangi biri bulunursa ve ilgili bildirimleri harici DTD'de veya parametre varlığı değiştirme metnindeyse, işlemcileri doğrulayanları hata atmaya zorlar:

    • değerleri açıkça belirtilmemişse, varsayılan değerlere sahip özellikler
    • dışındaki varlık referansları ( amp,lt , gt, apos, ve quot)
    • özelliğin değeri normalleştirme ile değiştirilecekse, tokenleştirilmiş türlere sahip özellikler
    • içeriklerinde herhangi bir boşluk varsa, öğe içeriğine sahip öğeler

Doğrulamayan bir işlemci, harici DTD'yi almayı ve bunu yapma zorunluluğu olmasa da bağımsız olmayan belgeler için tüm parametre varlığı referanslarını genişletmeyi düşünebilir. standalone=yes , onaylamayan işlemciler için performansı teorik olarak iyileştirebilir (spoiler uyarısı: muhtemelen bir fark yaratmaz).


Buradaki diğer cevaplar eksik veya yanlış, ana yanlış anlama

Bağımsız bildirim, ayrıştırıcıya DTD'deki biçimlendirme bildirimlerini yok saymasını bildirmenin bir yoludur. DTD bundan sonra sadece doğrulama için kullanılır.

standalone = "yes", XML işlemcinin DTD'yi yalnızca doğrulama için kullanması gerektiği anlamına gelir.

Tam tersine, bir belgeyi bağımsız olarak bildirmek, gerçekte doğrulamayan bir işlemciyi normalde görmezden gelmesi gereken dahili bildirimleri (yani yoksayılmış bir parametre varlığı referansından sonra gelenleri) ayrıştırmaya zorlar. Doğrulama yapmayan işlemciler, varsayılan öznitelik değerleri sağlamak ve onaylanmış öznitelikleri normalleştirmek için dahili DTD'deki bilgileri kullanmaya devam etmelidir, çünkü bu, doğrulamadan bağımsızdır.

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.