W3C

Genişletilebilir İmlenim Dili (XML) 1.1 (İkinci Düzeltme)

W3C Önergesi 16 Ağustos 2006

Bu sürüm:
http://www.w3.org/TR/2006/REC-xml11-20060816
Son sürüm:
http://www.w3.org/TR/xml11
Önceki Sürüm:
http://www.w3.org/TR/2006/PER-xml11-20060614
Yayına hazırlayanlar:
Tim Bray, Textuality ve Netscape <tbray@textuality.com>
Jean Paoli, Microsoft <jeanpa@microsoft.com>
C. M. Sperberg-McQueen, W3C <cmsmcq@w3.org>
Eve Maler, Sun Microsystems, Inc. <eve.maler@east.sun.com>
François Yergeau
John Cowan <cowan@ccil.org>

Lütfen bu belgenin hata raporlarına da bakın, aralarında uyulması gereken düzeltmeler bulunabilir.

Bu belgenin bir de eski hata raporları var.

Belgenin başka dillere çevirileri de olabilir.

Belgenin ayrıca bilgilendirici mahiyette bu biçimleri de var: XML ve değişikliklerin renklerle vurgulandığı XHTML sürümü


Bu çeviri:
XML ve HTML biçimleri mevcuttur.
Çeviren:
Nilgün Belma Bugüner <>, 6 Haziran 2007

Bu çeviri de diğer belirtim çevirileri gibi bilgilendirici mahiyettedir, hiçbir bağlamda belirleyici değildir. Bu belge anadili Türkçe olan Genel Ağ kullanıcılarının bu belirtim hakkında fikir edinebilmelerini sağlamak amacıyla Türkçeye çevrilmiştir. Bu belirtimin belirleyici tek sürümü W3C tarafından yayımlanan İngilizce sürümüdür.


Özet

Bu belgede tamamen açıklanan Genişletilebilir İmlenim Dili [XML - eXtensible Markup Language] SGML'nin bir alt kümesidir. Amacı, soysal SGML'nin sunulması, alınması ve şu an HTML ile mümkün olan yöntemle Web'de işlenmesidir. XML, SGML ve HTML'nin birarada çalışabilirliğini ve bunun gerçeklenimini kolaylaştırmak için tasarlanmıştır.

Belgenin Durumu

Bu bölüm belgenin yayımı sırasındaki durumunu açıklar. Bu belgeyi geçersiz kılacak başka belgeler olabilir. Şu anki W3C yayınlarının ve bu teknik raporların en son sürümleri http://www.w3.org/TR/ adresindeki W3C teknik raporları dizininde bulunabilir.

Bu belge, geniş çapta kullanılmakta olan uluslararası metin işleme standardının [SGML - Standard Generalized Markup Language, iyileştirilmiş ve düzeltilmiş olarak ISO 8879:1986(E)] mevcut alt kümesi tarafından oluşturulmuş sözdiziminin belirtimidir. Bu belge, W3C XML Etkinliğinin bir parçası olarak XML Çekirdek Çalışma Grubu tarafından üretilmiştir.

Bu belge 29 Eylül 2006 tarihinde istenmeyen sonuçlara yol açması olası boşluklar ve süprüntüler silinmek suretiyle yerinde düzeltilmiştir.

Bu belirtimin fiilen geçerli (İng: normative) tek sürümü İngilizce sürümü olmakla birlikte bilgilendirici (İng: non-normative) mahiyette olarak bu belgenin başka dillere tercümeleri de mevcuttur.

Bu belge bir W3C Önergesidir. Bu ikinci düzeltme XML'nin yeni bir sürümü değildir. Okuyuculara kolaylık olsun diye, (http://www.w3.org/XML/xml-V11-1e-errata adresinde) biriken hata raporlarının gerektirdiği değişikliklerin XML 1.1'in 4 Şubat 2004 tarihli ilk yayımına uygulanmış halidir. Ayrıca, biçimsel olarak kullanılan [IETF RFC 2119]'da tanımlı kural koyucu anahtar sözcükler, [IETF RFC 2119]'un ana fikrine daha iyi uyum sağlayacak şekilde değiştirilmiştir. Bu düzeltme sürümü önceki 4 Şubat 2004 tarihli W3C Önergesini geçersiz kılar.

Bu belgede (İngilizce sürümünde) bulduğunuz hataları lütfen mailto:mailto:xml-editor@w3.org listesine bildiriniz; listenin halka açık arşivleri de mevcuttur. Okuyuculara kolaylık olması için belgenin yapılan değişikliklerin renklerle vurgulandığı bir XHTML sürümü de mevcuttur; bu sürüm hata raporları listesinde yayınlanmış hatalardan dolayı yapılan her değişikliği listedeki ilgili hata raporuna bir bağ vererek vurgular. Listedeki çoğu hata, değişiklikle ilgili bir açıklama içerir. Bu ikinci sürüm için http://www.w3.org/XML/xml-V11-2e-errata adresinde bir hata raporları listesi mevcuttur.

http://www.w3.org/XML/2006/06/xml11-2e-implementation.html adresinde bir gerçeklenim raporu bulunmaktadır. Bu belirtime ne derece uyum sağlanabildiğini sınamaya yardımcı sınama araçları da sağlanmıştır.

Bu belge W3C üyeleri ve diğer ilgili taraflarca gözden geçirilmiş ve W3C Yönetimi tarafından bir W3C Önergesi olarak onaylanmıştır. Kararlı bir belge olup başka belgelerden uyulması gerekli bir kaynak olarak atıfta bulunarak veya bir başvuru malzemesi olarak kullanılabilir. W3C'nin Önergedeki rolü, belirtime dikkatleri çekmek ve geniş bir alanda kullanımını yaygınlaştırmaktır. Bu, Web'in işlevselliğini ve birlikte çalışabilirliğini arttırmaktadır.

Bu belge W3C Patent Politikası Geçiş İşlemleri tarafından değiştirilmiş olarak 24 January 2002 CPP'ye göre kullanılmaktadır. W3C, kendi çıktılarının barındırdığı patentler varsa bunları bir liste halinde ve patent açıklama talimatlarıyla birlikte duyurur. Temel Hak İddiasında bulunabilecek (başka) bir patent hakkında elinde somut bilgisi bulunanlar, W3C Patent Politikası 6. Bölümde belirtildiği şekilde ellerindeki bilgileri açıklamalıdırlar.

İçindekiler

1 Giriş
    1.1 Öncüler ve Hedefler
    1.2 Terminoloji
    1.3 Gerekçeler ve XML 1.1 Değişiklik listesi
2 Belgeler
    2.1 İyi Biçimli XML Belgeler
    2.2 Karakterler
    2.3 Ortak Sözdizimsel Oluşumlar
    2.4 Karakter Verisi ve İmlenim
    2.5 Açıklamalar
    2.6 İşlem Yönergeleri
    2.7 CDATA Bölümleri
    2.8 Önbölük ve Belge Türü Bildirimi
    2.9 Tekbaşına Belge Bildirimi
    2.10 Boşlukların İşlenmesi
    2.11 Satırsonlarının İşlenmesi
    2.12 Dilin Belirtilmesi
    2.13 Normalleştirme Sınaması
3 Mantıksal Yapılar
    3.1 Başlangıç, Bitiş ve Boş-Eleman Etiketleri
    3.2 Eleman Türü Bildirimleri
          3.2.1 Eleman İçeriği
          3.2.2 Karışık İçerik
    3.3 Öznitelik Listesi Bildirimleri
          3.3.1 Öznitelik Türleri
          3.3.2 Öznitelik Öntanımlıları
          3.3.3 Öznitelik Değerinin Normalleştirilmesi
    3.4 Şart Bölümleri
4 Fiziksel Yapılar
    4.1 Karakter ve Öğe Gönderimleri
    4.2 Öğe Bildirimleri
          4.2.1 Dahili Öğeler
          4.2.2 Harici Öğeler
    4.3 Çözümlü Öğeler
          4.3.1 Metin Bildirimi
          4.3.2 İyi Biçimli Çözümlü Öğeler
          4.3.3 Öğelerdeki Karakter Kodlaması
          4.3.4 Öğelerdeki Sürüm Bilgisi
    4.4 Öğelerin ve Gönderimlerin XML İşlemcide Ele Alınışları
          4.4.1 Tanınmaz
          4.4.2 İçerilir
          4.4.3 Geçerliyse İçerilir
          4.4.4 Yasak
          4.4.5 Dizgesel Sabitte İçerilir
          4.4.6 Uyarı
          4.4.7 Atlanır
          4.4.8 Parametre Öğesi olarak İçerilir
          4.4.9 Hata
    4.5 Öğe İkame Metninin Oluşturulması
    4.6 Önceden Tanımlanmış Öğeler
    4.7 Gösterim Bildirimleri
    4.8 Belge Öğesi
5 Uygunluk
    5.1 Geçerliliği Sınayan ve Sınamayan İşlemciler
    5.2 XML İşlemcilerin Kullanımı
6 Gösterim

Ekler

A Kaynakça
    A.1 Uyulması Gerekli Olanlar
    A.2 Diğerleri
B Karakter Normalleştirme Tanımları
C Öğe ve Karakter gönderimlerinin Yorumlanması (Bilgilendirici)
D Belirlenimci İçerik Modelleri (Bilgilendirici)
E Karakter Kodlamalarının Kendiliğinden Saptanması (Bilgilendirici)
    E.1 Harici Kodlama Bilgisi Olmadan Saptama
    E.2 Harici Kodlama Bilgisinin Varlığında Öncelikler
F W3C XML Çalışma Grubu (Bilgilendirici)
G W3C XML Çekirdek Çalışma Grubu (Bilgilendirici)
H Üretim Bilgileri (Bilgilendirici)
I XML Adları için Öneriler (Bilgilendirici)


1 Giriş

Genişletilebilir İmlenim Dili [XML - eXtensible Markup Language], XML belgeleri denen veri nesneleri sınıfını ve kısmen de bunlar üzerinde işlem yapacak bilgisayar programlarının davranışını açıklar. XML, SGML'nin [ISO 8879] sınırlı biçimi veya uygulamaya dönük yüzüdür. Oluşumları bakımından, XML belgeler SGML belgelerle uyumludur.

XML belgeler, öğe denilen ve çözümlenmiş ya da çözümlenmemiş, veri içeren saklama birimlerinden oluşur. Çözümlenmiş veri kısmen karakter verisi biçiminde, kısmen de imlenim biçiminde biraraya getirilmiş karakterlerden oluşur. İmlenim, belgenin depolama katmanının ve mantıksal yapısının tanımını kodlar. XML ise depolama katmanı ve mantıksal yapı üzerinde kural koyucu bir mekanizma sağlar.

XML belgeleri okuyup içeriğine ve yapısına erişim sağlamak için XML işlemci denilen bir yazılım modülü kullanılır. Bir XML işlemcinin bu işi uygulama adı verilen başka bir modülün yararına yapacağı varsayılır. Bu belirtim bir XML işlemciden beklenen davranışı, XML veriyi nasıl okuması ve uygulamaya bilgiyi nasıl sağlaması gerektiğiyle ilgili kuralları açıklar.

1.1 Öncüler ve Hedefler

XML, W3C himayesi altında 1996 yılında kurulan (öncülü SGML Editorial Review Board olarak bilinen) bir XML Çalışma Grubu tarafından geliştirilmiştir. XML Çalışma Grubu, Sun Microsystems'tan Jon Bosak başkanlığında W3C tarafından ayrıca örgütlenen bir XML Özel İlgi Grubunun etkin katılımıyla kuruldu. XML Çalışma Grubunun üyeleri bir ek bölümde listelenmiştir. Çalışma Grubunun W3C ile iletişimi Dan Connolly tarafından sağlanmıştır.

XML için tasarım hedefleri:

  1. XML, Genel Ağ'da düz mantıkla (doğrudan doğruya) kullanılabilmelidir.

  2. XML, geniş çapta çok çeşitli uygulamayı destekleyecektir.

  3. XML, SGML ile uyumlu olacaktır.

  4. XML belgeleri işleyen programları yazmak kolay olacaktır.

  5. XML'deki isteğe bağlı özellikler olabildiğince az, hatta sıfır olmalıdır.

  6. XML belgeler insanlar için okunaklı olacaktır.

  7. XML tasarımı çabucak yapılabilecektir.

  8. XML tasarımı özlü ve biçimsel olacaktır.

  9. XML belgeler kolayca oluşturulabilecektir.

  10. XML imlenimin kısalığı asgari önemdedir.

Bu belirtim, ilgili standartlarla birlikte, XML 1.1'ı anlamak ve üzerinde işlem yapacak bilgisayar programlarını oluşturmak için gerekli tüm bilgiyi sağlar (ilgili standartlar: karakterler için Unicode [Unicode] ve ISO/IEC 10646 [ISO/IEC 10646], dil betimleme yaftaları için RFC 3066 [IETF RFC 3066], dil isimlerinin kodları için ISO 639 [ISO 639] ve ülke isimlerinin kodları için ISO 3166 [ISO 3166]).

XML belirtiminin bu sürümü, metnin tamamı ve yasal uyarıları aynen korunduğu takdirde özgürce dağıtılabilir.

1.2 Terminoloji

XML belgeleri açıklamakta kullanılan terminoloji bu belirtim boyunca tanımlanmıştır. Bu çeviride, vurgulandıklarında, ZORUNLU, ÖNERİ ve SEÇİMLİK anahtar sözcükleri [IETF RFC 2119]'un Türkçe çevirisinde açıklandığı gibi yorumlanır. Ayrıca, aşağıdaki listede tanımlanan terimler, XML belgeleri açıklamakta kullanılan terminolojiyi oluşturmak ve bir XML işlemcinin eylemlerini açıklamakta kullanılır:

hata
Bu belirtimin kurallarıyla bir uyumsuzluk bir hatadır; sonuçları bilinemez. Aksi belirtilmedikçe, bu belirtimde ZORUNLU, ÖNERİ ve SEÇİMLİK anahtar sözcüklerinden biri tarafından imlenmiş bir talimatı yerine getirmekte başarısız olmak bir hatadır. Uyumlu bir yazılım bir hatayı saptayabilir SEÇİMLİK, raporlayabilir ve ondan kurtulabilir SEÇİMLİK.

ölümcül hata
Bir uyumlu XML işlemcinin saptayıp raporlamasının ZORUNLU olduğu bir hata. Bir ölümcül hataya rastladığında işlemci başka hataları da bulmak ve böyle hataları uygulamaya raporlamak SEÇİMLİK için veriyi işlemeye devam edebilir SEÇİMLİK. Hataların düzeltilmesine destek vermek için işlemci belgedeki işlenmemiş veriyi (karakter verisi ve imlenim karışık halde) uygulamaya kullanılır kılabilir SEÇİMLİK. Ölümcül hata saptandığı anda, işlemci normal işleme devam etmemelidir ZORUNLU (yani, belgenin mantıksal yapısı hakkındaki bilgiyi ve karakter verisini uygulamaya normal yolla aktarmaya devam etmemelidir ZORUNLU).

seçim kullanıcının
Uyumlu yazılım (cümledeki fiilin çekim kipine bağlı olarak) ya açıklandığı gibi davranabilir SEÇİMLİK ya da açıklandığı gibi davranmalıdır ZORUNLU; her ne yapılacaksa, (işlemci/uygulama) kullanıcının açıklanan davranışı iptal etmesini veya etkin kılmasını sağlamalıdır. ZORUNLU.

geçerlilik kuralı
Geçerli tüm XML belgelere uygulanan kural. Geçerlilik kuralıyla uyumsuzluk hatadır; bu hatalar geçerliliği sınayan XML işlemciler tarafından, seçim kullanıcıya bırakılarak, raporlanmalıdır ZORUNLU.

iyi biçimlilik kuralı
İyi biçimli tüm XML belgelere uygulanan kural. İyi biçimlilik kuralıyla uyumsuzluk ölümcül hatadır.

eşleşme
(Dizgeler ve isimler için:)İki dizge veya isim, karşılaştırıldıklarında aynıysalar eşleşiyorlar demektir. Unicode'da çok sayıda olası gösterimi olan karakterler (yani, birden fazla karakterin birleşiminden oluşan karakterlerin, birleşik tek karakterlik ve çok karakterli gösterimleri) bakımından, iki dizge, sadece her iki dizge de aynı gösterimi içeriyorsa eşleşirler. Karakter büyüklüğü ile ilgili hiçbir işlem yapılmaz. (dizgeler ve dilbilgisi kuralları için:) Bir sözdizimsel tanım tarafından üretilmiş dile mensup bir dizge aynı sözdizimsel tanımla eşleşir. (içerikler ve içerik modelleri için:) Bir eleman [GK: Geçerli Eleman] kuralında açıklanan anlamda uyumlu olduğunda kendi bildirimi ile eşleşir.

uyumluluk için
Sadece XML'nin SGML ile uyumlu kalacağından emin olmak için içerilmiş bir XML özelliğini açıklayan bir cümleyi imler.

birlikte çalışabilirlik için
XML belgelerin sistemde kurulu olan ISO 8879'a WebSGML Uyarlamaları Eki öncesi SGML işlemcileri tabanı tarafından işlenebilme şansını arttırmak için içerilmiş ilgisiz bir önergeyi açıklayan bir cümleyi imler.

1.3 Gerekçeler ve XML 1.1 Değişiklik listesi

W3C'nin XML 1.0 Önergesi ilk olarak 1998'de yayınlandı ve çoğu hata raporunun belirtime yansıtılıp 2004 yılındaki üçüncü düzeltmeyle hatalardan arındırılmasına karşın, neyin iyi biçimli XML olduğu neyin olmadığı konusu değişmeden kaldı (kasten). Bu kararlılık, birlikte çalışabilirlik açısından oldukça yararlı oldu. Bununla birlikte, XML 1.0'ın karakter belirtimleri için güvendiği Unicode Standardı yerinde durmadı, gelişimini sürdürerek 2.0 sürümünden 4.0 sürümüne geldi ve gelişmeye devam ediyor. Unicode 2.0'da mevcut olmayan karakterler XML 1.0 karakter verisinde zaten kullanılabiliyordu. Yine de, bunların eleman türü adları, öznitelik isimleri, sabit öznitelik değerleri, işlem yönergelerinin hedefleri gibi XML adlarında kullanımına izin verilmiyordu. Bundan başka, XML adlarında kabul edilmesi gereken karakterler Unicode 2.0'daki tutarsızlıklar ve kusurlar yüzünden kullanılamıyordu.

Adlandırma ile ilgili gerekçeler XML 1.0'dan beri baştan sona değişti. Oysa XML 1.0, izin verilmemiş herşeyi kullanımdan kaldıran katı isim tanımlamaları yapmıştı, XML 1.1 adları (belli bir sebeple) yasaklanmamış herşeye izin verecek şekilde tasarlandı. Unicode, 4.0'dan sonra da gelişmeye devam edeceğinden isimlerde hemen her karaktere, henüz atanmamışlara bile izin vererek XML'de başka değişiklik olmaması sağlanabildi.

Ek olarak, XML 1.0 günümüzün çeşitli işletim sistemlerinin satırsonu uzlaşımların uyum sağlamaya çalışırken IBM ve IBM uyumlu büyük bilgisayarlarda kullanılan uzlaşımlarda ayrımcılık yapıyordu. Büyük bilgisayarlardaki XML belgeler yerel kabullere uygun olarak salt metin dosyalar değillerdir. Sonuç olarak, büyük bilgisayarlarda üretilen XML belgeler ya yerel satırsonu uzlaşımları ile çelişiyor ya da çözümleme öncesindeki ve üretim sonrasındaki aşamalarda gereksiz dönüşümlerle verimsizliğe sebep oluyorlardı. Veriler, dosyaları büyük sistemlerle normal bilgisayarlar arasında paylaşarak (birinden diğerine dosya kopyalama anlamında değil) saklandığı zaman düz mantıkla birlikte çalışabilirliği mümkün kılmak önem kazanır. Bu yüzden, XML 1.1 satırsonu karakterleri listesine NEL (#x85) karakterini eklemiştir. Yapmışken tam olsun diye, Unicode satır ayırma karakteri olan #x2028'de ayrıca desteklenmiştir.

Sonuçta, XML belgelerde Unicode karakterlerin standart gösterimini tanımlama konusunda öngörülebilir bir ısrar vardı. Bu yüzden, XML 1.1, XML 1.0'da çoğu yasak olan #x1 ile #x1F arasındaki denetim karakerlerine gönderime izin verir. Sağlamlık bakımından, yine de bu karakterler belgelerde doğrudan doğruya kullanılamazlar. Karakter kodlamasının saptanması konusuna sağlamlığı arttırmak için, XML 1.0 belgelerde serbestçe kullanınıma izin verilen #x7F ile #x9F arasındaki denetim karakterlerinin artık sadece karakter gönderimlerinde yer alması gerekmektedir (Boşluk karakterleri tabii ki müstesna). Geriye uyumluluk konusunda bu küçük fedakarlık önemli sayılmaz. Uygulama geliştirme arayüzleriyle olası sorunlar nedeniyle gerek doğrudan gerekse karakter gönderimi olarak #x0 karakterine hala izin verilmemektedir.

Son olarak, XML 1.1, belge oluşturucuların uyması ÖNERİlen ve belge işlemcilerenen de doğrulaması ÖNERİlen "tam normalleştirme" adı verilen bir kural kümesi tanımlamaktadır. Tamamen normalleştirilmiş belge kullanımı, Unicode dizgelerin ikilik karşılaştırmasını basitleştirerek adların, öznitelik değerlerinin ve karakterlerin özdeşlik karşılaştırmalarının doğru olarak yapılabilmesini sağlar.

Değişikliklerin iyi biçimle belge tanımını değiştirmesi sebebiyle, XML 1.0'a hata raporlarını yansıtmak yerine yeni bir XLM sürümü oluşturuldu. XML 1.0 işlemcilerinin XML adlarınad yeni karakterleri, yeni satırsonu uzlaşımlarını ve denetim karakterlerine gönderimleri içeren XML belgeleri reddetmeye devam etmeleri gerekmektedir. XML 1.0 ve XML 1.1 belgeler arasındaki ayrım, her belgenin başında bulunan XML bildirimindeki sürüm numarası bilgisiyle belirtilir.

2 Belgeler

Bir veri nesnesi bu belirtimde tanımlandığı gibi iyi biçimli ise o bir XML belgedir. Eğer belli başlı ek kuralları karşılıyorsa XML belge ayrıca geçerlidir.

Her XML belge, mantıksal ve fiziksel yapıların her ikisine de sahiptir. Fiziksel olarak, belge öğe denilen birimlerden oluşur. Bir öğe belge içinde içerilmesini sağlamak için başka öğelere gönderimde bulunabilir. Bir belge bir "kök" veya belge öğesinde başlar. Mantıksal olarak, belge, hepsi belgede açıkça imlenim tarafından belirtilmiş bildirimler, elemanlar, açıklamalar, karakter gönderimleri ve işlem yönergelerinden oluşur, Mantıksal ve fiziksel yapılar, İyi Biçimli Çözümlü Öğeler bölümünde açıklandığı gibi uygun şekilde iç içe geçmiş olmalıdır ZORUNLU

2.1 İyi Biçimli XML Belgeler

Bir metin nesnesinin iyi biçimli bir XML belge olması için:

  1. Bir bütün olarak, belge sözdizimiyle eşleşmelidir.

  2. Bu belgede verilen bütün iyi biçimlilik kurallarına uygun olmalıdır.

  3. Belgede doğrudan veya dolaylı gönderim yapılan çözümlü öğelerin her biri iyi biçimli olmalıdır.

Belge
[1]   belge   ::=   (önbölük eleman Muhtelif*) - (Kark* SınırlıKark Kark*)

Bir XML belgenin belge sözdizimiyle eşleşmesi için:

  1. Bir veya daha fazla eleman içermelidir.

  2. Başka bir elemanın içeriğinde hiçbir parçası bulunmayan, kök veya belge elemanı adı verilen sadece tek bir elemanı vardır. Diğer tüm elemanlar bakımından, eğer başlangıç etiketi başka bir elemanın içindeyse, bitiş etiketi de aynı elemanın içindedir. Başka bir deyişle, elemanlar başlangıç ve bitiş etiketleri ile sınırlanmış olarak bir diğerini içerebilir.

Bunun bir sonucu olarak, belgedeki, kök eleman olmayan her C elemanı için, onu içeren bir P elemanı vardır. P'ye C'nin ebeveyni olarak atıf yapılırken C'ye P'nin çocuğu olarak atıf yapılır.

2.2 Karakterler

Bir çözümlenmiş öğe, karakter veriler yanında imlenimi de göstermekte kullanılan karakterlerden oluşan bir dizi olarak bir metin içeriğe sahiptir. Bir karakter ISO/IEC 10646 [ISO/IEC 10646] tarafından belirtildiği gibi metnin bir atomsal birimidir. Geçerli karakterler sekme, satırsonu, satırbaşı ile Unicode ve ISO/IEC 10646'nın geçerli karakterleridir. Standartların bu belge hazırlandığı sırada geçerli olan sürümlerinden Uyulması Gerekli Olanlar bölümünde bahsedilmiştir. Bu standartların düzeltmelerinde ve eklerinde yeni karakterler eklenebilir. Sonuçta, XML işlemcilerin Kark için belirtilen aralıktaki her karakteri kabul etmeleri ZORUNLUdur.

Karakter Aralığı
[2]   Kark   ::=   [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]/* İkame bloklar, FFFE ve FFFF hariç Unicode karakterler. */
[2a]   SınırlıKark   ::=   [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

Karakter kodlarını bit kalıpları halinde kodlayan mekanizmalar öğeden öğeye değişiklik gösterebilir. Tüm XML işlemcilerinin Unicode'un [Unicode] UTF-8 ve UTF-16 kodlamalarını kabul etmesi ZORUNLUdur; bu ikisini işaret eden kullanımdaki mekanizmalar ile diğer kodlamaları oyuna dahil eden mekanizmalar Öğelerdeki Karakter Kodlaması bölümünde açıklanmıştır.

Not:
Belge yazarlarının [Unicode]'da tanımlanan "uyumluluk karakterleri"ni kullanmaktan kaçınmaları önerilir. Ayrıca, aşağıdaki karakter aralıklarını kullanmaktan da vazgeçilmiştir. Bu karakterler ya denetim karakterleridir ya da kalıcı olarak tanımlanmamış Unicode karakterleridir:

[#x1-#x8], [#xB-#xC], [#xE-#x1F], [#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF],
[#x1FFFE-#x1FFFF], [#x2FFFE-#x2FFFF], [#x3FFFE-#x3FFFF],
[#x4FFFE-#x4FFFF], [#x5FFFE-#x5FFFF], [#x6FFFE-#x6FFFF],
[#x7FFFE-#x7FFFF], [#x8FFFE-#x8FFFF], [#x9FFFE-#x9FFFF],
[#xAFFFE-#xAFFFF], [#xBFFFE-#xBFFFF], [#xCFFFE-#xCFFFF],
[#xDFFFE-#xDFFFF], [#xEFFFE-#xEFFFF], [#xFFFFE-#xFFFFF],
[#x10FFFE-#x10FFFF].

2.3 Ortak Sözdizimsel Oluşumlar

Bu bölümde dilbilgisi içinde geniş çapta kullanılan simgeler tanımlanmaktadır.

B (boşluk karakterleri) bir veya daha fazla boşluk (#x20), sekme (#x9), satırsonu (#xA) veya satırbaşı (#xD) karakterinden oluşur.

Boşluk Karakterleri
[3]   B   ::=   (#x20 | #x9 | #xD | #xA)+
Not:
Yukarıdaki sözdizimi tanımında yer alan #xD karakteri tamamen ilk belirtim ile geriye uyumluluk adına vardır. Satırsonlarının İşlenmesi bölümünde açıklandığı gibi bir XML belgedeki #xD karakterleri herhangi bir başka işlem yapılmadan önce tek tek silinir veya yerlerine #xA karakterleri yerleştirilir. B sözdizimiyle eşleşen #xD karakterini almanın tek yolu bir öğe değerinde bu karakter için bir karakter gönderimi belirtmektir.

Bir Ad, bir harf veya bir kaç noktalama iminden biri ile başlar ve isim karakterleri adı verilen, harfler, rakamlar, tire, altçizgi, ikinokta veya nokta imleri ile devam eder. "xml" dizgesi ile veya (('X'|'x') ('M'|'m') ('L'|'l')) ile eşleşen herhangi bir dizge ile başlayan adlar, bu belirtimin bu ve gelecek sürümlerinde standartlaşım adına ayrılıp kayıt altına alınmıştır.

Not:
XML önergesindeki isim-alanları [XML Adları], ikinokta imleri içeren adlara bir anlam yükler. Bu bakımdan, yazarlar XML adlarında isim-alanlarının amaçları dışında ikinokta imi kullanmamalı, ama XML işlemciler, ikinokta imini 'bir isim karakteri olarak' kabul etmelidirler.

Bir ad dizgeciği isim karakterlerinin bir karışımıdır.

Bir Adın ilk karakteri bir AdBaşlKark olmalı ZORUNLU ve diğer karakterleri birer AdKark olmalıdır ZORUNLU; bu mekanizma isimlerin temel aksan karakterleri ve ASCII rakamları ile başlatılmasını engellemek için kullanılır. İsimlerde ayraçlar ve ayraç olması olası karakterler dışında hemen her karaktere izin verilmiştir. Amaç zorlayıcı değil yol gösterici olmaktır, böylece henüz Unicode kodlama yapmayan yazım sistemleri XML adlarında kullanılabililir olmaktadır. İsim oluşturma konusunaku öneriler için XML Adları için Öneriler bölümüne bakınız.

Belge yazarlarının isimlerde anlamlı sözcükleri ve doğal sözcük birleşimlerini kullanmaları; boşluk karakterlerini ve işaretleri kullanmaktan kaçınmaları önerilir. İkinokta, tire, nokta, altçizgi ve ortanokta karakterlerinin kullanımına izin verildiğine dikkat ediniz.

XML adlarının XML belgeler dışında kullanıldığı yerlerde ayraç olarak daha kullanışlı olduklarından, Unicode sembol karakterlerinden büyükçe bir gruptan başka ASCII semboller ve noktalama işaretlerinin isimlerde kullanımı yasaktır; bu grubun sağlanmasıyla, bu bağlamlarda XML isimleri olamayacak şeyler hakkında kesin garanti verilmiştir. #x037E, Yunan soru işaretine normalleştirildiğinde öğe gönderiminin anlamını değiştiren noktalı virgüle dönüştüğünden izin verilmemiştir.

Adlar ve Dizgecikler
[4]   AdBaşlKark   ::=   ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a]   AdKark   ::=    AdBaşlKark | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5]   Ad   ::=    AdBaşlKark | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[6]   Adlar   ::=    Ad (#x20 Ad)*
[7]   AdDizge   ::=   (AdKark)+
[8]   AdDizgeler   ::=    AdDizge (#x20 AdDizge)*
Not:
Adlar ve AdDizgeler sözdizimi tanımları normalleştirme sonrası dizgecikli öznitelik değerlerinin geçerliliğini tanımlamakta kullanılır (bkz, Öznitelik Türleri).

Dizgesel sabitler, tırnak içine alınmış, içinde ayraç olarak tırnak imlerinin kullanılmadığı bir dizgedir. Dizgesel sabitler, dahili öğelerin (ÖğeDeğeri), öznitelik değerlerinin (ÖznitDeğeri) ve harici belirteçlerin (SistemSabiti) içeriğini belirtmekte kullanılırlar. Bir SistemSabitinin imlenim taranmaksızın çözümlenebileceğine dikkat ediniz.

Dizgesel sabitler
[9]   ÖğeDeğeri   ::=   '"' ([^%&"] | ParÖğeGönd | Gönderim)* '"'
|  "'" ([^%&'] | ParÖğeGönd | Gönderim)* "'"
[10]   ÖznitDeğeri   ::=   '"' ([^<&"] | Gönderim)* '"'
|  "'" ([^<&'] | Gönderim)* "'"
[11]   SistemSabiti   ::=   ('"' [^"]* '"') | ("'" [^']* "'")
[12]   GenidSabiti   ::=   '"' GenidKark* '"' | "'" (GenidKark - "'")* "'"
[13]   GenidKark   ::=   #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
Not:
ÖğeDeğeri sözdizimi tanımı, bir genel öğenin tanımının bir sabitte tek bir < bulunmasına (örn, <!ENTITY sabitim "<">) izin verdiğinden ve böyle bir öğeye yapılacak bir gönderim bir iyi biçimlilik hatasına yol açacağından böyle bir uygulamadan kesinlikle kaçınılması önerilir.

2.4 Karakter Verisi ve İmlenim

Bir Metin imlenim ile karakter verisinin karışımından oluşur. İmlenim ise, başlangıç etiketleri, bitiş etiketleri, boş eleman etiketleri, öğe gönderimleri, karakter gönderimleri, açıklamalar, CDATA bölümü ayraçları, belge türü bildirimleri, işlem yönergeleri, XML bildirimleri, metin bildirimleri ve belge öğesinin tepe seviyesindeki (yani, belge elemanının ve herhangi bir başka imlenimin dış tarafındaki) boşluk karakterleriyle şekillenir.

İmlenim dışındaki tüm metin belgenin karakter verisini oluşturur.

Ve imi (&) ve açılı sol ayraç (<), bir açıklama, bir işlem yönergesi veya CDATA bölümü içinde veya birer imlenim ayracı olarak kullanılmaları dışında, birer dizge sabiti biçiminde görünmemelidirler ZORUNLU. Böyle bir durumda, ya sayısal karakter gönderimleri ya da sırasıyla "&amp;" ve "&lt;" dizgeleri olarak görünmelidirler ZORUNLU. Açılı sağ ayraç (>), "&gt;" dizgesi kullanılarak gösterilebilirse de, uyumluluk için içerik içinde "]]>" dizgesi bir CDATA bölümünün sonunu işaret etmiyorsa, dizge içinde bir karakter gönderimi veya "&gt;" kullanılarak gösterilmelidir ZORUNLU.

Karakter verisi, elemanların içeriğinde, imlenim başlatma karakterini ve CDATA bölümü kapama ayracı olan "]]>" dizgesini içermeyen bir karakter dizgesidir. Karakter verisi, CDATA bölümünde, CDATA bölümü kapama ayracını içermeyen bir karakter dizisidir.

Öznitelik değerlerinin tek ve çift tırnakları içermesini sağlamak için, tek tırnak karakteri ('), "&apos;" ile ve çift tırnak tarakteri ("), "&quot;" ile gösterilebilir.

Belgenin Karakter Verisi
[14]   KarkVeri   ::=   [^<&]* - ([^<&]* ']]>' [^<&]*)

2.5 Açıklamalar

Açıklamalar bir belge imlenim dışında her yerde bulunabilir; ek olarak, belge türü bildiriminin içinde dilbilgisi kurallarının izin verdiği yerlerde bulunabilir. Açıklamalar belgenin karakter verisinin bir parçası değillerdir; bir XML işlemci, bir uygulamanın açıklamaların metnini almasını mümkün kılmak için açıklamaları karakter verisinin bir parçası olarak değerlendirebilir SEÇİMLİK, fakat bu gerekli değildir. Uyumluluk için, "--" (çift tire) dizgesi açıklamaların içinde bulunmamalıdır ZORUNLU. Parametre öğelerine gönderimler, açıklamaların içinde tanınır olmamalıdır ZORUNLU.

Açıklamalar
[15]   Açıklama   ::=   '<!--' ((Kark - '-') | ('-' (Kark - '-')))* '-->'

Bir açıklama örneği:

<!-- <head> & <body> için bildirim -->

Açıklama sözdiziminin, bir açıklamanın ---> ile bitmesine izin vermediğine dikkat ediniz. Bu bakımdan aşağıdaki örnek iyi biçimli değildir.

<!-- B+, B veya B--->

2.6 İşlem Yönergeleri

İşlem yönergeleri (İng: Processing Instruction) belgelerde uygulamaya yönelik yönergelerin bulunmasını sağlar.

İşlem yönergeleri
[16]   PI   ::=   '<?' PIHedefi (B (Kark* - (Kark* '?>' Kark*)))? '?>'
[17]   PIHedefi   ::=    Ad - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

İşlem yönergeleri belgenin karakter verisinin bir parçası değillerdir, ama uygulamaya aktarılmaları gerekir ZORUNLU. İşlem yönergesi, yönergenin yönlendirildiği uygulamayı betimlemekte kullanılan bir hedefle (PIHedefi) başlar. "XML", "xml", ve benzerleri, bu belirtimin bu veya gelecek sürümlerinin standartlaşımı için ayrılıp kayıt altına alınmıştır. İşlem yönergelerinin biçimsel bildirimi için XML Gösterim mekanizması kullanılabilir. Parametre öğelerinin gönderimleri işlem yönergeleri içinde tanınır olmamalıdır ZORUNLU.

2.7 CDATA Bölümleri

CDATA bölümleri karakter verisinin her yerinde yer alabilir; imlenim olarak tanınmaması gereken karakterleri içeren metin bloklarını sarmalamakta kullanılır. CDATA bölümleri "<![CDATA[" dizgesi ile başlar ve "]]>"dizgesi ile biter:

CDATA Bölümleri
[18]   CDATABölümü   ::=    CDATABaşl CDATAVerisi CDATABitiş
[19]   CDATABaşl   ::=   '<![CDATA['
[20]   CDATAVerisi   ::=   (Kark* - (Kark* ']]>' Kark*))
[21]   CDATABitiş   ::=   ']]>'

Bir CDATA bölümünün içinde sadece CDATABitiş dizgesi imlenim olarak tanınır, dolayısıyla açılı sol ayraç ve ve-imi bölüm içinde birebir yer alabilir; "&lt;" ve "&amp;" biçiminde olmaları gerekmez (gerekmemeli). CDATA bölümleri birbirlerinin içinde bulunamazlar.

"<greeting>" ve "</greeting>>" etiketlerinin imlenim olarak değil, karakter verisi olarak ele alındığı bir CDATA bölümü örneği:

<![CDATA[<greeting>Merhaba, Dünyalı!</greeting>]]> 

2.8 Önbölük ve Belge Türü Bildirimi

XML 1.1 belgelerin kullanılan XML sürümünün belirtildiği bir XML bildirimi ile başlamaları ZORUNLUdur. Örneğin, aşağıdaki eksiksiz bir XML 1.1 belgesidir, iyi biçimlidir ama geçerli değildir:

<?xml version="1.1"?>
<greeting>Merhaba, Dünyalı!</greeting> 

fakat bu, bir XML bildirimi içermediğinden bir XML 1.0 belgesidir:

<greeting>Merhaba, Dünyalı!</greeting>

Bir XML belgedeki imlenimin işlevi belgenin saklatım ve mantıksal yapısını tanımlamak ve öznitelik isim-değer çiftlerini belgenin mantıksal yapısıyla ilişkilendirmektir. XML, mantıksal yapının kurallarını tanımlamak ve önceden tanımlanmış saklatım birimlerinin kullanımını desteklemek için belge türü bildirimi denen bir mekanizma sağlar. Bir XML belge, bir ilişkili belge türü bildirimine sahipse ve kendi içinde ifade edilen kurallara uygunsa, geçerlidir.

Belge türü bildiriminin belgedeki ilk elemandan önce yer alması ZORUNLUdur.

Önbölük
[22]   önbölük   ::=    XMLBild Muhtelif* (belgetürübild Muhtelif*)?
[23]   XMLBild   ::=   '<?xml' SürümBilgisi KodlamaBild? TBBild? B? '?>'
[24]   SürümBilgisi   ::=    B 'version' Eşittir ("'" SürümNum "'" | '"' SürümNum '"')
[25]   Eşittir   ::=    B? '=' B?
[26]   SürümNum   ::=   '1.1'
[27]   Muhtelif   ::=    Açıklama | PI | B

XML belge türü bildirimi bir belge sınıfı için dilbilgisi sağlayan imlenim bildirimlerini içerir veya bunları işaret eder. Bu dilbilgisi, belge türü bildirimi veya DTD (Document Type Definition kısaltması) olarak bilinir. DTD, imlenim bildirimlerini içeren bir harici altkümeyi (özel bir harici öğe çeşidi) işaret edebileceği gibi imlenim bildirimlerini bir dahili altküme olarak içerebilir veya her ikisini birden yapabilir.

Bir imlenim bildirimi ya bir öznitelik listesi bildirimi ya bir öğe bildirimi ya da bir gösterim bildirimidir. Bu bildirimler, aşağıda iyi biçimlilik ve geçerlilik kurallarında açıklandığı gibi tamamen veya kısmen parametre öğelerinde yer alabilirler. Daha fazla bilgi için Fiziksel Yapılar bölümüne bakınız.

Belge Türü Bildirimi
[28]   belgetürübild   ::=   '<!DOCTYPE' B Ad (B HariciID)? B? ('[' içAltKüme ']' B?)? '>'[GK: Kök Eleman Türü]
[İBK: Harici Altküme]
[28a]   BildAyr   ::=    ParÖğeGönd | B [İBK: Bildirimler arasında Parametre Öğeleri]
[28b]   içAltKüme   ::=   (imlenimBild | BildAyr)*
[29]   imlenimBild   ::=    elemanBild | ÖznitListBild | ÖğeBild | GösterimBild | PI | Açıklama [GK: Düzgün Bildirim/Parametre Öğesi İç İçeliği]
[İBK: Dahili Altkümedeki Parametre Öğeleri]

Yalnız dikkat edin, bir iyi biçimli belge belgetürübild içinde ya bir harici altkümeyi işaret etmeli ya bir dahili bir altkümeyi içermeli veya ikisini de yapmalıdır. Hiçbirinin olmaması iyi biçimlilik için olası değildir.

İmlenim bildirimleri tamamen veya kısmen parametre öğelerinin ikame metni içinde yer alabilir. Bu belirtimdeki tek tek tanım terimlerinin (elemanBild, ÖznitListBild, vs.) bundan sonraki sözdizimi tanımları, tüm parametre öğeleri içerildikten sonraki bildirimleri tanımlayacaktır.

Parametre öğesi gönderimlerinden dizgesel sabitlerin, işlem yönergelerinin, açıklamaların ve yoksayılan şart bölümlerinin (bkz, Şart Bölümleri) içinde olanlar hariç, kalan hepsi DTD (dahili ve harici altkümeler ile harici parametre öğeleri) içinde her yerde tanınırlar (anlamlarını korurlar). Ayrıca, öğe değeri dizgesel sabitlerinde de tanınırlar. Parametre öğelerinin dahili altkümelerde kullanımı aşağıda açıklandığı gibi kısıtlanmıştır.

Geçerlilik kuralı: Kök Eleman Türü

belgetürübild içindeki Ad, kök eleman türündeki elemanla eşleşmelidir ZORUNLU.

Geçerlilik kuralı: Düzgün Bildirim/Parametre Öğesi İç İçeliği

Parametre öğesi ikame metni ile imlenim bildirimleri olması gerektiği biçimde iç içe olmalıdır ZORUNLU. Yani, bir imlenim bildiriminin ilk veya son karakteri gönderim yapılan parametre öğesi ikame metninin içinde yer alıyorsa, her ikisi de aynı ikame metninde içeriliyor olmalıdırlar ZORUNLU.

İyi biçimlilik kuralı: Dahili Altkümedeki Parametre Öğeleri

Dahili DTD altkümesinde, parametre öğesi gönderimleri, imlenim bildirimleri içinde yer almalıdır ZORUNLU; imlenim bildirimlerinin yer alabilecekleri her yerde yer alabilirler. (Bu, harici parametre öğeleri içinde veya harici altkümelerde yer alan gönderimlere uygulanmaz.)

İyi biçimlilik kuralı: Harici Altküme

Bir harici altküme (varsa), dışAltKüme sözdizimiyle eşleşmelidir ZORUNLU.

İyi biçimlilik kuralı: Bildirimler arasında Parametre Öğeleri

Bir BildAyr içindeki bir parametre öğesi gönderiminin ikame metni dışAltKümeBild sözdizimiyle eşleşmelidir ZORUNLU.

Dahili altküme gibi, bir BildAyr içinden gönderimde bulunulan bir harici altküme ve her harici parametre öğesi, boşluklar veya parametre öğesi gönderimleri arasına serpiştirilmiş imlenimBild tanım terimi tarafından izin verilen türlerdeki bir dizi eksiksiz imlenim bildiriminden oluşmalıdır. Harici altkümenin veya bu harici parametre öğelerinin içeriği kısmen şart bölümü oluşumu kullanılarak şartlı olarak yoksayılabilir; buna dahili altkümede izin verilmez ama dahili altkümeden atıf yapılan harici parametre öğelerinde izin verilir.

Harici Altküme
[30]   dışAltKüme   ::=    MetinBild? dışAltKümeBild
[31]   dışAltKümeBild   ::=   ( imlenimBild | şartBölümü | BildAyr)*

Harici altküme ve harici parametre öğeleri, dahili altkümedekilerden, parametre öğesi gönderimlerine imlenim bildirimlerinin arasında değil, içinde izin veriliyor olmasıyla da ayrıca farklıdırlar.

Belge türü bildirimine sahip bir XML belge örneği:

<?xml version="1.1"?>
<!DOCTYPE greeting SYSTEM "hello.dtd">
<greeting>Merhaba, Dünyalı!</greeting> 

Sistem belirteci "hello.dtd", belge için bir DTD adresi (veya bir tanım-yeri başvurusu) vermektedir.

Bildirimler bu örnekteki gibi yerel olarak da yapılabilir:

<?xml version="1.1" encoding="UTF-8" ?>
<!DOCTYPE greeting [
  <!ELEMENT greeting (#PCDATA)>
]>
<greeting>Merhaba, Dünyalı!</greeting>

Harici ve dahili altkümelerin her ikisi de kullanılmışsa, dahili altküme, harici altkümeden önceymiş gibi ele alınmalıdır ZORUNLU. Bu, dahili altkümedeki öğe ve öznitelik listesi bildirimlerinin harici altkümedekilerden öncelikli olması demektir.

Eğer bir belge XML 1.0 olarak iyi biçimli ve geçerliyse ve karakter öncelemeleri halinde olmak dışında [#x7F-#x9F] aralığındaki denetim karakterlerini içermiyorsa basitçe sürüm numarasını değiştirerek XML 1.1 olarak da iyi biçimli ve geçerli yapılabilir.

2.9 Tekbaşına Belge Bildirimi

XML işlemci tarafından uygulamaya aktarıldığından imlenim bildirimleri belge içeriğini etkileyebilir; örneğin, özniteliklerin öntanımlıları ve öğe bildirimleri. XML bildiriminin bir bileşeni olarak karşımıza çıkabilen tekbaşına belge bildirimi, belge öğesine veya parametre öğelerine harici bildirim olarak görünen bildirimlerin olup olmadığını bilgisini taşır. Bir harici imlenim bildirimi harici altkümede veya bir parametre öğesinin (dahili veya harici) içinde bulunan bir imlenim bildirimidir (geçerlilik sınaması yapmayan XML işlemciler parametre öğelerini de okumadıklarından bunlarda listeye dahildir).

Tekbaşına Belge Bildirimi
[32]   TBBild   ::=    B 'standalone' Eşittir (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) [GK: Tekbaşına Belge Bildirimi]

Bir tekbaşına belge bildiriminde "yes" değeri, XML işlemciden uygulamaya aktarılan bilgiyi etkileyen hiçbir harici imlenim bildirimi olmadığı anlamına gelir. "yes" değeri ise böyle harici bildirimlerin olduğunu veya olabileceğini belirtir. Tek başına belge bildiriminin sadece harici bildirimlerin varlığının belirtisi olduğuna; bir belgede, harici öğelere gönderimlerin varlığının, bu öğeler dahili olarak bildirildiğinde belgenin tekbaşınalık halini etkilemeyeceğine dikkat ediniz.

Eğer hiçbir harici imlenim bildirimi yoksa, tekbaşına belge bildiriminin hiçbir anlamı yoktur. Eğer harici imlenim bildirimleri varsa fakat tekbaşına belge bildirimi yapılmamışsa değerin "no" olduğu varsayılır.

standalone="no" bildirimli bir XML belgesi, bazı ağ üzerinden teslimat uygulamaları tarafından talep edilmesi nedeniyle, algoritmik olarak bir tekbaşına belgeye dönüştürülebilir.

Geçerlilik kuralı: Tekbaşına Belge Bildirimi

Harici imlenim bildirimleri şunları içeriyorsa:

  • öntanımlı değerlere sahip öznitelikler; eğer bu özniteliklere sahip elemanlar belgede bu öznitelikler belirtilmeksizin kullanılmışsa,

  • öğeler (amp, lt, gt, apos, quot dışındakiler); eğer belgede bu öğelere gönderimler varsa,

  • dizgecikli türde öznitelikler; öznitelik belgede, normalleştirilmesi halinde bildiriminin yokluğunda üretilenden farklı bir değer üretecek bir değerle kullanılmışsa,

  • eleman içeriği bildirilmiş eleman türleri; bu türlerin gerçeklenenlerinden içlerinde doğrudan boşluk karakterleri kullanılmış olanlar varsa,

tekbaşına belge bildiriminin "no" değerine sahip olması ZORUNLUdur.

Tekbaşına belge bildirimli bir XML bildirimi örneği:

<?xml version="1.1" standalone='yes'?>

2.10 Boşlukların İşlenmesi

İmlenimden bağımsız olarak okunabilirliği arttırmak için XML belgeler düzenlenirken "boşluk karakterleri" (boşluklar, sekmeler, boş satırlar) bol bol kullanılır. XML belgenin dönüşeceği belgede böyle boşlukların istenmediği ve/veya özellikle korunmasının istendiği içerikler (şiir, kaynak kod gibi) olacaktır.

Bir XML işlemcinin imlenime ait olmayan tüm karakterleri uygulamaya aktarması ZORUNLUdur. Ayrıca, bir geçerlilik denetimi yapan XML işlemcinin bu karakterlerin eleman içeriğinde bulunan boşluk karakterlerinden olup olmadıkları konusunda da uygulamayı bilgilendirmesi ZORUNLUdur.

İçeriğindeki boşlukların korunması gereken elemanlar bunu uygulamaya, xml:space adlı özel bir öznitelikle bildirebilirler. Geçerli belgelerde, bu özniteliklerin, diğerleri gibi kullanıldıkları takdirde bildirilmeleri ZORUNLUdur. Bildirilirken, değeri bir sayısı sabit tür olarak, "default" ve "preserve" değerlerinden biri veya ikisiyle birden bildirilmelidir. Örnek:

<!ATTLIST manzume  xml:space (default|preserve) 'preserve'>

<!ATTLIST kaynakkod xml:space (preserve) #FIXED 'preserve'>

"default" değeri, bu eleman için uygulamaca kabul edilen boşluk karakterleri işleme kipinin uygun olacağını; "preserve" değeri ise, uygulamanın boşluk karakterlerinin oluşturduğu boşlukları korumasının istendiğini belirtir. Bildirilen isteğin, elemanın içeriğindeki tüm elemanlara (onlarda ayrıca birer xml:space özniteliği bulunmadıkça) uygulanacağı varsayılır. Bu belirtim xml:space özniteliğine "default" ve "preserve" dışında anlamlı bir değer atamaz. Başka değerlerin belirtilmesi bir hatadır; XML işlemci hatayı raporlayabileceği gibi SEÇİMLİK, öznitelik belirtimini yoksayarak veya hatalı değeri uygulamaya raporlayarak hatadan kurtulabilir SEÇİMLİK. Uygulamalar hatalı değerleri reddedebilir veya yoksayabilir.

Bir belgenin kök elemanının, bu öznitelik için bir değer sağlanmadıkça veya öznitelik bir öntanımlı değerle bildirilmiş olmadıkça, uygulamanın boşluk işleme ile ilgili olarak uygulamaya hiçbir istek bildirmek zorunda olmadığı varsayılır.

2.11 Satırsonlarının İşlenmesi

XML çözümlü öğeleri genellikle, düzenleme kolaylığı bakımından satırlar halinde düzenlenmiş dosyalardan oluşur. Bu satırlar genellikle satırsonu (#xA) ve satırbaşı (#xD) karakterlerinin biri veya ikisi kullanılarak birbirlerinden ayrılırlar.

Uygulamaların görevlerini basitleştirmek için XML işlemci girdideki harici çözümlenmiş öğelerde (belge öğesini de içererek) bulunan tüm satırsonları, girdi çözümlenmeden önce, aşağıdakileri tek bir #xA karakterine dönüştürülerek normalleştirilmiş gibi davranmalıdır ZORUNLU:

  1. iki karakterlik #xD #xA dizisi

  2. iki karakterlik #xD #x85 dizisi

  3. tek başına #x85 karakteri

  4. tek başına #x2028 karakteri

  5. hemen ardından #xA veya #x85 gelmeyen #xD karakteri

#x85 ve #x2028 karakterleri bir öğenin kodlama bildirimi (varsa) okunana kadar güvenilir şekilde tanınamaz ve dönüştürülemez. Bu yüzden, bunları XML ve metin bildirimlerinde kullanmak ölümcül bir hatadır.

2.12 Dilin Belirtilmesi

Belge işlemede genellikle, içeriğin yazıldığı doğal ve biçimsel dili bilmek yararlıdır. Bir XML belgedeki elemanların öznitelik değerlerinde ve içeriğinde kullanılan dili belirtmek için belgeye xml:lang isimli özel bir öznitelik yerleştirilebilir. Geçerli bir belgede bu özniteliğin, diğerleri gibi, kullanılmışsa bildirilmiş olması ZORUNLUdur. Özniteliğin değeri olarak [IETF RFC 3066] (Dil Tanıtım Yaftaları) veya bir ardılı tarafından tanımlanmış dil belirteçlerinden biri veya boş dizge belirtilebilir.

(33'ten 38'e kadar olan tanım terimleri silindi.)

Örnek:

<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
<p xml:lang="en-GB">What colour is it?</p>
<p xml:lang="en-US">What color is it?</p>
<sp who="Faust" desc='leise' xml:lang="de">
  <l>Habe nun, ach! Philosophie,</l>
  <l>Juristerei, und Medizin</l>
  <l>und leider auch Theologie</l>
  <l>durchaus studiert mit hei&#xDF;em Bem&#xFC;h'n.</l>
</sp>

xml:lang tarafından belirtilen dil, belirtildiği elemana (özniteliklerinin değerleri dahil) ve içindeki tüm elemanlara (xml:lang belirtilmiş iç elemanlar hariç) uygulanır. Özellikle, B elemanını kapsayan bir A elemanındaki bir xml:lang belirtimi, B elemanındaki xml:lang özniteliğinde başka bir dil belirtmeksizin, boş değer belirterek, B elemanı için değiştirilebilir. B elemanının içeriği, sanki üstsel elemanlarında veya kendisinde hiç xml:lang belirtilmemiş gibi hiçbir dil içeriğiyle ilişkilendirilmez. Uygulamalar, hangi elemanların öznitelik değerlerinin ve hangi içerik parçalarının, belirtildiği takdirde, xml:lang ile belirtilen dile bağlı olarak ele alınacağını kendileri saptar.

Not:
Dil bilgisi ayrıca, (HTTP veya MIME gibi) harici aktarım protokollerince de sağlanmış olabilir. Bu olduğu takdirde, bu bilgi XML uygulamalarınca kullanılabilir, ancak yerel olarak sağlanmış bir xml:lang özniteliği ile belirtilen bir değerin bu değeri değiştireceği varsayılmalıdır.

xml:lang için basit bir bildirim şöyle olabilir:

xml:lang CDATA #IMPLIED

Ancak, eğer uygunsa, özel öntanımlı değerler ayrıca verilebilir. İngiliz öğrenciler için Fransız şiirlerinin bir kolleksiyonu ile İngilizce olan tefsirler ve notlar xml:lang özniteliği şöyle bildirilebilir:

<!ATTLIST manzume   xml:lang CDATA 'fr'>
<!ATTLIST tefsir  xml:lang CDATA 'en'>
<!ATTLIST not   xml:lang CDATA 'en'>

2.13 Normalleştirme Sınaması

Aşağıdaki XML uyumlu oluşumların tanımlarına ilaveten tüm XML çözümlü öğelerinin (belge öğeleri dahil) Karakter Normalleştirme Tanımları tanımına uygun olarak tamamen normalleştirilmesi ÖNERİlir:

  1. tüm çözümlü öğelerin ikame metni

  2. Bağlamda, aşağıdaki sözdizimlerinden biriyle eşleşen tüm metinler:

    1. CDATAVerisi

    2. KarkVeri

    3. içerik

    4. Ad

    5. AdDizge

Yine de, tamamen normalleştirilmiş olmasa bile bir belge hala iyi biçimlidir. XML işlemcilerin belgenin tamamen normalleştirilmiş biçimde işlenmesi konusunda kullanıcıya bir seçenek sunmaları ve bunun istenip istenmediğini uygulamaya raporlamaları ÖNERİlir. Doğrulamama seçeneğinin sadece girdi metni Karakter Normalleştirme Tanımları bölümünde tanımlandığı gibi onaylı olduğu takdirde seçilmiş olması ÖNERİlir.

Tamamen normalleştirme doğrulaması, öğenin, Karakter Normalleştirme Tanımları bölümünde açıklandığı gibi dahili normalleştirmeli biçimde olduğu doğrulandıktan sonra Karakter Normalleştirme Tanımları bölümünde açıklandığı gibi aksan karakteri ile başlayan yukarıda listelenmiş uyumlu oluşumlardan hiçbiri doğrulanmayarak başarılmış olmalıdır ZORUNLU. Geçerlilik sınaması yapmayan işlemcilerin okunmayan harici öğelerin içerilmesine sebep olacak olası normalleştirmemeleri yoksayması ZORUNLUdur.

Not:
aksan karakterlerinin hepsi, sıfırıncı aksan sınıfından olmayanlarla, bir miktarı sıfırıncı aksan sınıfında yer alanlardan belli bir kurallı Unicode birleşiminde ilk karakter olarak yer almayanlardan oluşan Unicode karakterleridir. Bu karakterler bir temel karakterin hemen ardından geldiklerinde anlamlı olduklarından, bir aksan karakteri ile başlayan uyumlu oluşumların sınırlanması XML'in ifade gücünde önemli bir azalmaya yol açmayacaktır.

Tamamen normalleştirme doğrulanırken, bir işlemci normalleştirme özellikleri saptanamayan karakterlere (yani, işlemcinin gerçekleştiriminde kullanılan Unicode sürümünde henüz bulunmayan karakterlere) rastlarsa, işlemci, seçim kullanıcının olmak üzere, bu karakterlerin sebep olması olası normalleştirmemeleri yoksayabilir SEÇİMLİK. Bu normalleştirmemeleri yoksayma seçeneği, güvenilirlik ve güvenlik önem kazandığında uygulamalar tarafından seçilmiş olmamalıdır ÖNERİ.

XML işlemcilerin tamamen normalleştirilecek girdiyi dönüştürmemesi ZORUNLUdur. Gerek XML 1.1 gerekse XML 1.0 girdiden XML 1.1 çıktı oluşturacak XML uygulamalarının çıktının tamamen normalleştirilmiş olduğundan emin olmaları ÖNERİlir; dahili işlemler için tamamen normalleştirme gerekli değildir.

Bu bölümün amacı XML işlemcileri, XML belge oluşturucuların belgeyi gerektiği gibi normalleştirdiklerinden emin olmaya teşvik etmektir. Böylece, XML uygulamaları, Unicode'un mümkün kıldığı olası farklı dizge hecelemeler hakkında endişelenmeksizin dizgelerin özdeşlik karşılaştırmaları gibi sınamaları yapabilirler.

Öğeler Unicode kodlu olmadıklarında, eğer bunların kodlamasını işlemci dönüştürecekse, işlemcinin normalleştirme yapan bir dönüştürücü kullanması ÖNERİlir.

3 Mantıksal Yapılar

Her XML belge, her biri başlangıç etiketi ve bitiş etiketi ile sınırlanmış veya boş eleman etiketinden oluşan bir veya daha fazla eleman içerir. Her eleman ismiyle betimlenen bir türe (bazan buna soysal betimleyici (SB) dendiği de olur) ve çeşitli öznitelik belirtimlerine sahiptir. Her öznitelik bir isim ve bir değer ile belirtilir.

Eleman
[39]   eleman   ::=    BoşElemEtiketi
| BaşlEtiketi içerik BitişEtiketi [İBK: Eleman Türü Eşleşmeli]
[GK: Geçerli Eleman]

Bu belirtimin bu ve gelecek sürümlerinin standartlaşımı için ayrılmış olan (('X'|'x')('M'|'m')('L'|'l')) ifadesiyle eşleşen dizgelerle başlayan isimler hariç, eleman türlerinin ve özniteliklerinin isimlerine, kullanımına ve uygulama anlamsallığına bu belirtimde kısıtlama konmamıştır.

İyi biçimlilik kuralı: Eleman Türü Eşleşmeli

Bir elemanın bitiş etiketindeki Ad ile başlangıç etiketindeki eleman türünün eşleşmesi ZORUNLUdur.

Geçerlilik kuralı: Geçerli Eleman

Bir elemanın geçerli olması için, Ad'ın eleman türü ile eşleştiği yerde elemanBild ile eşleşen bir bildirim olmalı ve aşağıdakilenden biri gerçekleşmelidir:

  1. Bildirim EMPTY ile eşleşir ve eleman hiçbir içeriğe sahip değildir (hatta öğe gönderimleri, açıklamalar, işlem yönergeleri ve boşluk karakterleri bile yoktur).

  2. Bildirim çocuklar sözdizimiyle eşleşir ve çocuk elemanlar dizisi, içerik modelindeki düzenli ifadeye uygun olarak üretilen dilde olup başlangıç etiketi ile ilk çocuk eleman arasında, çocuk elemanlar arasında veya son çocuk elemanla bitiş etiketi arasında isteğe bağlı olarak boşluk karakterleri, açıklamalar veya işlem yönergeleri (yani Muhtelif tanım teriminde yer alan imlenimler) içerebilir. İçinde sadece boşluk karakterleri veya boşluk karakterlerine ikame edilen karakter gönderimleri olan CDATA (imlenim olarak okunmayan açıklama) bölümleri, B sözdizimiyle eşleşmeyeceğinden burada yer alamaz, ancak içerdiği karakter gönderimleri boşluk karakterlerine ikame edilen sabit değerli dahili öğeler, B ile eşleşeceklerinden burada yer alabilir.

  3. Bildirim Karışık ile eşleşir; içerik ise (öğe gönderimlerinin yerlerine ikame metinleri yerleştirildikten sonra), karakter verisi (CDATA bölümleri dahil), açıklamalar, işlem yönergeleri ve türleri içerik modelindeki isimlerle eşleşen çocuk elemanlardan oluşur.

  4. Bildirim ANY ile eşleşir; içerik ise (öğe gönderimlerinin yerlerine ikame metinleri yerleştirildikten sonra), karakter verisi, CDATA bölümleri, açıklamalar, işlem yönergeleri ve türleri bildirilmiş olan çocuk elemanlardan oluşur.

3.1 Başlangıç, Bitiş ve Boş-Eleman Etiketleri

Boş olmayan her XML elemanının başlangıcı bir başlangıç etiketi ile imlenir.

Başlangıç Etiketi
[40]   BaşlEtiketi   ::=   '<' Ad (B Öznitelik)* B? '>'[İBK: Eşsiz Öznitelik Belirtimi]
[41]   Öznitelik   ::=    Ad Eşittir ÖznitDeğeri [GK: Öznitelik Değerinin Türü]
[İBK: Harici Öğe Gönderimleri Olmamalı]
[İBK: Öznitelik Değerleri < İçermemeli]

Başlangıç ve bitiş etiketindeki Ad, elemanın türünü verir. Ad-ÖznitDeğeri çiftine elemanın öznitelik belirtimi, her çiftteki Ada öznitelik adı ve ÖznitDeğeri (' veya " ayraçları arasındaki metin) içeriğine de öznitelik değeri denir. Bir başlangıç etiketindeki veya bir boş etiketteki öznitelik belirtimlerinin sırasının önemsizliğine dikkat ediniz.

İyi biçimlilik kuralı: Eşsiz Öznitelik Belirtimi

Bir öznitelik ismi aynı başlangıç veya boş eleman etiketinde birden fazla yer almamalıdır ZORUNLU.

Geçerlilik kuralı: Öznitelik Değerinin Türü

Öznitelik bildirilmiş olmalıdır ZORUNLU; değeri onun için bildirilmiş türde olmalıdır ZORUNLU. (Öznitelik türleri için Öznitelik Listesi Bildirimleri bölümüne bakınız.)

İyi biçimlilik kuralı: Harici Öğe Gönderimleri Olmamalı

Öznitelik değerleri doğrudan veya dolaylı olarak harici öğelere öğe gönderimleri içermemelidir ZORUNLU.

İyi biçimlilik kuralı: Öznitelik Değerleri < İçermemeli

Bir öznitelik değeri içinde doğrudan veya dolaylı olarak atıfta bulunulmuş bir öğenin ikame metni bir < içermemelidir ZORUNLU.

Bir başlangıç etiketi örneği:

<termdef id="dt-dog" term="köpek">

Bir başlangıç etiketi ile başlayan her elemanın sonu, başlangıç etiketinde belirtilen eleman türünü yansıtan ismi içeren bir bitiş etiketi tarafından imlenir:

Bitiş Etiketi
[42]   BitişEtiketi   ::=   '</' Ad B? '>'

Bir bitiş etiketi örneği:

</termdef>

Başlangıç ve bitiş ekiketleri arasındaki metine elemanın içeriği denir:

Eleman İçeriği
[43]   içerik   ::=    KarkVeri? ((eleman | Gönderim | CDATABölümü | PI | Açıklama) KarkVeri?)*

Hiç içeriği olmayan eleman boştur. Bir boş eleman ya bir başlangıç etiketinin hemen ardına bir bitiş etiketi yerleştirerek ya da bir boş eleman etiketi ile gösterilir. Bir boş eleman etiketi özel bir biçime sahiptir:

Boş Eleman Etiketi
[44]   BoşElemEtiketi   ::=   '<' Ad (B Öznitelik)* B? '/>'[İBK: Eşsiz Öznitelik Belirtimi]

Boş eleman etiketi EMPTY anahtar sözcüğüyle bildirilmiş olsun ya da olmasın hiçbir içeriğe sahip olmayan her eleman için kullanılabilir. Birlikte çalışabilirlik için, boş eleman etiketi sadece ve sadece EMPTY bildirimli elemanlar için kullanılmalıdır ÖNERİ.

Boş eleman örnekleri:

<IMG align="left"
 src="http://www.w3.org/Icons/WWW/w3c_home" />
<br></br>
<br />

3.2 Eleman Türü Bildirimleri

XML belgenin eleman yapısı, geçerlilikle ilgili amaçlara yönelik olarak, eleman türü ve öznitelik listesi bildirimleri kullanılarak kısıtlanabilir. Bir eleman türü bildirimi elemanın içeriğini kısıtlar.

Eleman türü bildirimleri çoğunlukla elemanın çocukları olan eleman türlerini kısıtlar. Seçim kullanıcının olmak üzere, bir XML işlemci, bir bildirimin hakkında hiçbir bildirimin yapılmadığı bir elemanı içermesi ama bunun bir hata olmaması durumunda bir uyarı verebilir SEÇİMLİK.

Bir eleman türü bildiriminin biçimi:

Eleman Türü Bildirimi
[45]   elemanBild   ::=   '<!ELEMENT' B Ad B içerikBelirtimi B? '>'[GK: Eşsiz Eleman Türü Bildirimi]
[46]   içerikBelirtimi   ::=   'EMPTY' | 'ANY' | Karışık | çocuklar

Burada Ad bildirdiği elemanın türüdür.

Geçerlilik kuralı: Eşsiz Eleman Türü Bildirimi

Bir eleman türü birden fazla bildirilmemelidir ZORUNLU.

Eleman türü bildirimi örnekleri:

<!ELEMENT br EMPTY>
<!ELEMENT p (#PCDATA|emph)* >
<!ELEMENT %name.para; %content.para; >
<!ELEMENT container ANY>

3.2.1 Eleman İçeriği

Elemanların sadece aralarında boşluk karakterlerinin (B sözdizimiyle eşleşen karakterler) bulunmasının isteğe bağlı olduğu çocuk elemanlardan oluşmasının ZORUNLU olduğu durumda, böyle bir eleman türü bir eleman içeriğine sahip demektir. Bu durumda kural basit bir dilbilgisine sahip bir içerik modeli içerir. Bu model izin verilen çocuk eleman türlerini ve bunların içerikte yer alabilecekleri sırayı içerir. Dilbilgisi, isimler, içerik parçacıkları seçim listeleri veya içerik parçacıkları sıralama listelerinden oluşan içerik parçacıklarından (içerikparçacığı) oluşur:

Eleman İçerik Modelleri
[47]   çocuklar   ::=   (seçim | sıra) ('?' | '*' | '+')?
[48]   içerikparçacığı   ::=   (Ad | seçim | sıra) ('?' | '*' | '+')?
[49]   seçim   ::=   '(' B? içerikparçacığı ( B? '|' B? içerikparçacığı )+ B? ')'[GK: Düzgün Gruplama/Parametre Öğesi İç İçeliği]
[50]   sıra   ::=   '(' B? içerikparçacığı ( B? ',' B? içerikparçacığı )* B? ')'[GK: Düzgün Gruplama/Parametre Öğesi İç İçeliği]

Burada her Ad, bir çocuk eleman olarak karşımıza çıkabilecek bir elemanın türüdür. Bir seçim listesindeki bir içerik parçacığı, eleman içeriğinde, seçim listesinin dilbilgisi içinde görüldüğü yerde bulunabilir; bir sıralama listesinde bulunan içerik parçacıklarının her biri eleman içeriğinde listede belirtilen sırada yer almalıdır ZORUNLU. Bir isim veya listeyi izleyen isteğe bağlı karakterler, listedeki elemanların ve içerik parçacıklarının, bir kere veya daha fazla mı (+), hiç veya bir kere mi (?) yoksa hiç veya defalarca mı (*) yer alabileceklerini belirtirler. Böyle bir işlecin yokluğu, eleman veya içerik parçacığının listede sadece ve sadece bir kere yer alabileceği ZORUNLU anlamına gelir. Bu sözdizimi ve manası bu belirtimdeki sözdizimi tanımlarında kullanılanla aynıdır.

Bir eleman içeriğinin bir içerik modeliyle eşleşmesi için, sıralama, seçim ve yineleme işleçlerine tabi olarak ve içeriğindeki her elemanı içerik modelindeki bir eleman türüne eşleyerek, içerik modeli boyunca sadece ve sadece tek bir yol izlenebilir olmalıdır. Uyumluluk için, içerik modelinin, bir elemanın, model içindeki bir eleman türünün birden fazla oluşumu ile eşleşmesine izin vermesi hatadır. Daha fazla bilgi için Belirlenimci İçerik Modelleri bölümüne bakınız.

Geçerlilik kuralı: Düzgün Gruplama/Parametre Öğesi İç İçeliği

Parametre öğesinin ikame metni parantezli gruplar halinde düzgün biçimde iç içe geçmiş olmalıdır ZORUNLU. Başka bir deyişle, bir seçim, sıra veya Karışık oluşumundaki açan veya kapatan parantezlerden herhangi biri bir parametre öğesinin ikame metni içindeyse, ikisinin de aynı ikame metninde içeriliyor olması gerekir ZORUNLU.

Birlikte çalışabilirlik için, eğer bir parametre öğesi gönderimi, bir seçim, sıra veya Karışık oluşumunda bulunuyorsa, parametre öğesinin ikame metni en azından bir boş olmayan karakter içermeli ÖNERİ ve ikame metninin ne ilk ne de son boş olmayan karakteri bir bağlaç (| veya ,) olmalıdır ÖNERİ.

Eleman içerik modelleri örnekleri:

<!ELEMENT spec (front, body, back?)>
<!ELEMENT div1 (head, (p | list | note)*, div2*)>
<!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*>

3.2.2 Karışık İçerik

Bir eleman türü, karakter verisi (tercihan aralarına çocuk elemanlar serpiştirilmiş olarak) içerebilen türde olduğu takdirde karışık içerik sahibi demektir. Bu durumda, çocuk elemanların türleri, sıralanışları ve oluşum sayısı dışında herşeyi kısıtlanabilir:

Karışık İçerik Bildirimi
[51]   Karışık   ::=   '(' B? '#PCDATA' (B? '|' B? Ad)* B? ')*'
| '(' B? '#PCDATA' B? ')' [GK: Düzgün Gruplama/Parametre Öğesi İç İçeliği]
[GK: Türler Yinelenmemeli]

Buradaki Adlar çocuk elemanların türleridir. #PCDATA anahtar sözcüğü ezelden beridir "parsed character data" (çözümlenmiş karakter verisi) sözcüklerinden türetilmektetir.

Geçerlilik kuralı: Türler Yinelenmemeli

Aynı ad tek bir karışık içerikte birden fazla gözükmemelidir ZORUNLU.

Karışık içerik bildirimleri örnekleri:

<!ELEMENT p (#PCDATA|a|ul|b|i|em)*>
<!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* >
<!ELEMENT b (#PCDATA)>

3.3 Öznitelik Listesi Bildirimleri

Öznitelikler isim-değer çiftlerini elemanlarla ilişkilendirmek için kullanılmalıdır. Öznitelik belirtimleri başlangıç etiketleri ve boş eleman etiketleri dışında gözükmemelidir ZORUNLU; bu nedenle, bunları eşleştirmek için Başlangıç, Bitiş ve Boş-Eleman Etiketleri bölümündeki sözdizimi tanımları kullanılır. Öznitelik listesi bildirimlerinin kullanım yerleri:

  • Belli bir eleman türüne ait öznitelik kümesini tanımlamak için.

  • Bu öznitelikler için tür kuralları oluşturmak için.

  • Özniteliklere öntanımlı değerler sağlamak için.

Öznitelik listesi bildirimleri ile ad, veri türü ve belli bir eleman türü ile ilişkili öznitelikler için (varsa) öntanımlı değer belirtilir:

Öznitelik Listesi Bildirimi
[52]   ÖznitListBild   ::=   '<!ATTLIST' B Ad ÖznitTanımı* B? '>'
[53]   ÖznitTanımı   ::=    B Ad B ÖznitTürü B ÖntanımlıBild

ÖznitListBild sözdizimi tanımındaki Ad bir eleman türüdür. Seçim kullanıcının olmak üzere, bir XML işlemci, eğer bir öznitelik, bildirilmemiş bir eleman türü için bildirilmişse uyarı verebilir SEÇİMLİK, fakat bu bir hata değildir. ÖznitListBild sözdizimi tanımındaki Ad özniteliğin ismidir.

Bir eleman türü için birden fazla ÖznitListBild varsa bunların içerikleri birleştirilir. Bir eleman türünün aynı özniteliği için birden fazla bildirim varsa, ilk bildirim dışındakiler yok sayılır. Birlikte çalışabilirlik için, DTD yazarları belli bir eleman türü için en fazla bir öznitelik listesi bildirimi, bir öznitelik listesi bildirimindeki belli bir öznitelik ismi için en fazla bir öznitelik tanımı ve her öznitelik listesi bildiriminde en az bir öznitelik tanımı yapmayı tercih edebilir. Birlikte çalışabilirlik için, seçim kullanıcının olmak üzere, bir XML işlemci, bir eleman türü için birden fazla öznitelik listesi bildirimi veya bir öznitelik için birden fazla öznitelik tanımı varsa, bir uyarı verebilir SEÇİMLİK, fakat bu bir hata değildir.

3.3.1 Öznitelik Türleri

XML öznitelik türleri üç tanedir: dizge türü, dizgecik kümesi türü ve sayısı sabit tür. Dizge türü değer olarak bir dizgesel sabit alırken dizgecik kümesi türü biraz daha fazla kurala tabidir. Aşağıdaki dilbilgisi içinde belirtilen geçerlilik kısıtları, öznitelik değeri Öznitelik Değerinin Normalleştirilmesi bölümünde açıklandığı gibi normalleştirildikten sonra uygulanır.

Öznitelik Türleri
[54]   ÖznitTürü   ::=    DizgeTürü | DizgecikTürü | SayısıSabitTür
[55]   DizgeTürü   ::=   'CDATA'
[56]   DizgecikTürü   ::=   'IDREF'[GK: IDREF]
| 'IDREFS'[GK: IDREF]
| 'ENTITY'[GK: Öğe İsmi]
| 'ENTITIES'[GK: Öğe İsmi]
| 'NMTOKEN'[GK: Ad Dizgeciği]
| 'NMTOKENS'[GK: Ad Dizgeciği]
| 'ID'[GK: ID Eşsizliği]
[GK: Eleman Türü Başına Bir ID]
[GK: ID Özniteliği Öntanımlısı]
Geçerlilik kuralı: ID Eşsizliği

ID türünden değerlerin Ad sözdizimi tanımı ile eşleşmesi ZORUNLUdur. Bir Ad, bu türden bir değer olarak bir XML belgede bir kereden fazla gözükmemelidir ZORUNLU. Yani, ID değerlerinin belirtildikleri elemanları eşsiz olarak betimlemesi ZORUNLUdur.

Geçerlilik kuralı: Eleman Türü Başına Bir ID

Bir eleman türü için birden fazla ID özniteliği belirtilemez ZORUNLU.

Geçerlilik kuralı: ID Özniteliği Öntanımlısı

Bir ID özniteliğinin #IMPLIED veya #REQUIRED öntanımlısı ile bildirilmesi ZORUNLUdur.

Geçerlilik kuralı: IDREF

IDREF türünden değerlerin Ad sözdizimi tanımıyla eşleşmesi ZORUNLU olup IDREFS türünden değerlerin de Adlar sözdizimi tanımıyla eşleşmesi ZORUNLUdur; her Adın XML belgedeki elemanlardan yalnız birinin ID özniteliğinin değeri ile eşleşmesi ZORUNLUdur; yani, IDREF değerlerinin bazı ID özniteliklerinin değerleri ile eşleşmesi gerekir ZORUNLU.

Geçerlilik kuralı: Öğe İsmi

ENTITY türünden değerlerin Ad sözdizimiyle, ENTITIES türünden değerlerin Adlar sözdizimiyle eşleşmesi ZORUNLUdur; her Ad'ın DTD içinde bildirilmiş bir çözümlenmemiş öğe ismiyle eşleşmesi ZORUNLUdur.

Geçerlilik kuralı: Ad Dizgeciği

NMTOKEN türünden değerlerin AdDizge sözdizimiyle, NMTOKENS türünden değerlerin AdDizgeler sözdizimiyle eşleşmesi ZORUNLUdur.

Sayısı sabit türden özniteliklerin bildirimleri izin verilen değerlerin bir listesini içerir. Bu özniteliklerin bu değerlerden birini alması ZORUNLUdur. İki çeşit sayısı sabit türde öznitelik vardır:

Sayısı Sabit Öznitelik Türleri
[57]   SayısıSabitTür   ::=    GösterimTürü | Sayım
[58]   GösterimTürü   ::=   'NOTATION' B '(' B? Ad (B? '|' B? Ad)* B? ')' [GK: Gösterim Öznitelikleri]
[GK: Eleman Türü Başına Bir Gösterim]
[GK: Boş Elemanda Gösterim Olmaz]
[GK: Dizgecikler Yinelenemez]
[59]   Sayım   ::=   '(' B? AdDizge (B? '|' B? AdDizge)* B? ')'[GK: Sayım]
[GK: Dizgecikler Yinelenemez]

Bir NOTATION özniteliği, özniteliğin eklendiği elemanı yorumlamakta kullanılacak, SYSTEM ve/veya PUBLIC betimleyicileri ile belirtilmiş DTD'de bildirilmiş bir gösterimi betimler.

Geçerlilik kuralı: Gösterim Öznitelikleri

Bu türden değerlerin bildirimde içerilen gösterim adlarından biri ile eşleşmesi ZORUNLUdur; bildirimdeki tüm gösterim adlarının bildirilmiş olması ZORUNLUdur.

Geçerlilik kuralı: Eleman Türü Başına Bir Gösterim

Bir eleman türü içinde birden fazla NOTATION özniteliği belirtilemez ZORUNLU.

Geçerlilik kuralı: Boş Elemanda Gösterim Olmaz

Uyumluluk için, NOTATION türünden bir öznitelik EMPTY ile bildirilmiş bir elemanda bildirilemez ZORUNLU.

Geçerlilik kuralı: Dizgecikler Yinelenemez

Gösterim adlarının müstakilen tek bir GösterimTürü öznitelik bildiriminde gözükmesi ZORUNLU olup AdDizgeciklerinin de müstakilen tek bir Sayım öznitelik bildiriminde gözükmesi ZORUNLUdur.

Geçerlilik kuralı: Sayım

Bu türden değerlerin bildirimdeki AdDizgeciklerinden biri ile eşleşmesi ZORUNLUdur.

Birlikte çalışabilirlik için, aynı AdDizgeciğinin bir eleman türünün sayısı sabit öznitelik türlerinde birden fazla gözükmemesi ÖNERİlir.

3.3.2 Öznitelik Öntanımlıları

Bir Öznitelik bildirimi, özniteliğin varlığının gerekli olup olmadığına dair bilgi sağlar ZORUNLU; gerekli değilse XML işlemcinin bir bildirilmiş özniteliğin bir belgede bulunmayışı halinde nasıl tepki vereceği bilgisini sağlar.

Öznitelik Öntanımlıları
[60]   ÖntanımlıBild   ::=   '#REQUIRED' | '#IMPLIED'
| (('#FIXED' B)? ÖznitDeğeri)[GK: Öznitelik Gerekliliği]
[GK: Öntanımlı Öznitelik Değerinin Sözdizimsel Doğruluğu]
[İBK: Öznitelik Değerleri < İçermemeli]
[GK: Sabit Öznitelik Değeri]
[İBK: Harici Öğe Gönderimleri Olmamalı]

Bir öznitelik bildiriminde #REQUIRED anahtar sözcüğü özniteliğin varlığının ZORUNLU olduğu, #IMPLIED ise hiçbir öntanımlı değerin sağlanmadığı anlamına gelir. Bildirim ne #REQUIRED ne de #IMPLIED sözcüğünü içeriyorsa, ÖznitDeğerinin içeriği öntanımlı değer olarak kabul edilir; bildirimde #FIXED anahtar sözcüğünün varlığı, özniteliğin ZORUNLU olarak daima bu öntanımlı değere sahip olacağı anlamına gelir. XML işlemci, bir elemanın bir öznitelik belirtimi olmaksızın bir öntanımlı değer bildirimiyle okunmasının gerekliliğini saptadığında, XML işlemcinin özniteliği uygulamaya bildirilmiş öntanımlı değeriyle raporlaması ZORUNLUdur.

Geçerlilik kuralı: Öznitelik Gerekliliği

Eğer öntanımlı bildirim #REQUIRED anahtar sözcüğü ise, özniteliğin öznitelik listesi bildiriminde türü belirtilen tüm elemanlar için belirtilmesi ZORUNLUdur.

Geçerlilik kuralı: Öntanımlı Öznitelik Değerinin Sözdizimsel Doğruluğu

Bildirilen öntanımlı değerin, bildirilen öznitelik türünün sözdizimsel kurallarına uygun olması ZORUNLUdur. Yani, bir özniteliğin öntanımlı değeri:

  • IDREF veya ENTITY türündeyse, Ad sözdizimi tanımıyla eşleşmelidir;

  • IDREFS veya ENTITIES türündeyse, Adlar sözdizimi tanımıyla eşleşmelidir;

  • NMTOKEN türündeyse, AdDizge sözdizimi tanımıyla eşleşmelidir;

  • NMTOKENS türündeyse, AdDizgeler sözdizimi tanımıyla eşleşmelidir;

  • bir sayısı sabit türdeyse (ya NOTATION türünde ya da bir sayısı sabit değerli), sayısı belli değerlerden biriyle eşleşmelidir.

Burada sadece türün sözdizimsel kurallarının gerekli oluşuna dikkat ediniz; diğer kurallar (örneğin, ENTITY türünde bir öznitelik için değerin bildirilmiş bir çözümlenmemiş öğenin ismi olması) bir geçerliliği sınayan çözümleyici tarafından sadece bu özniteliğin gözükmediği bir elemanın varlığında raporlanacaktır.

Geçerlilik kuralı: Sabit Öznitelik Değeri

Eğer bir öznitelik #FIXED anahtar sözcüğü ile bildirilmiş bir öntanımlı değere sahipse, bu öznitelik ait olduğu elemanda öntanımlı değeriyle eşleştirilmelidir ZORUNLU.

Öznitelik listesi bildirimleri için örnekler:

<!ATTLIST termdef
          id      ID      #REQUIRED
          name    CDATA   #IMPLIED>
<!ATTLIST list
          type    (bullets|ordered|glossary)  "ordered">
<!ATTLIST form
          method  CDATA   #FIXED "POST">

3.3.3 Öznitelik Değerinin Normalleştirilmesi

Bir öznitelik bir uygulamaya aktarılmadan veya geçerliliği sınanmadan önce XML işlemci tarafından, aşağıdaki algoritma uygulanarak veya bu algoritma ile aynı sonucu verecek bir takım başka yöntemler kullanılarak, öznitelik değerlerinin normalleştirilmesi ZORUNLUdur.

  1. Tüm satırsonları Satırsonlarının İşlenmesi bölümünde açıklandığı gibi girdi satırsonlarında sadece #xA içeriyormuş gibi normalleştirilmelidir ZORUNLU; öyle ki, algoritmanın kalanı bu şekilde normalleştirilmiş metin üzerinde uygulansın.

  2. Boş dizgeden oluşan bir normalleştirilmiş değerle başlar. (?)

  3. Her karakter için, öğe gönderimi veya normalleştirilmemiş öznitelik değerindeki karakter gönderimi, başından sonuna kadar aşağıdakileri yapar:

    • Bir karakter gönderimi için, atıf yapılan karakter normalleştirilmiş değere eklenir.

    • Bir öğe gönderimi için, bu algoritmanın 3. adımı öğenin ikame metnine dönüşümlü olarak uygulanır.

    • Bir boşluk karakteri (#x20, #xD, #xA, #x9) için, normalleştirilmiş değere bir boşluk (#x20) eklenir.

    • Diğer karakterler için, normalleştirilmiş değere o karakter eklenir.

Eğer öznitelik türü CDATA değilse, XML işlemci öznitelik değerini normalleştirme işleminde, baştaki ve sondaki boşlukları (#x20) silmeli ZORUNLU ve aradakileri (#x20) de tek bir boşluk (#x20) ile değiştirmelidir ZORUNLU.

Normalleştirilmemiş öznitelik değeri boşluk (#x20) dışındaki boşluk karakterlerine bir karakter gönderimi içeriyorsa, normalleştirilmiş değerde atıf yapılan karakterin kendisinin (#xD, #xA veya #x9) bulunacağına dikkat ediniz. Bu, normalleştirilmemiş değeri boşluk karakterlerinden birini içerip de normalleştirilmiş değere bunun için bir boşluk (#x20) yerleştirildiği duruma ve ayrıca, normalleştirilmemiş değerin, ikame metninde boşluk karakterlerinden birini içeren bir öğeye gönderim içerip de dönüşümlü olarak işlenerek, normalleştirilmiş değere bunun için bir boşluk (#x20) yerleştirildiği duruma aykırıdır.

Bildirimleri olmayan tüm öznitelikler, geçerlilik sınaması yapmayan bir işlemci tarafından CDATA bildirimli olarak ele alınmalıdır ZORUNLU.

Bildirimi olmayan bir öğeye bir gönderim içeren bir öznitelik değerinin varlığı bir hatadır.

Biraz aşağıdaki öznitelik normalleştirme örnekleri için bildirimler şöyledir:

<!ENTITY d "&#xD;">
<!ENTITY a "&#xA;">
<!ENTITY da "&#xD;&#xA;">

öznitelik belirtimleri soldaki sütunda, normalleştirilecek karakter dizilerinden a özniteliğinin NMTOKENS bildirimli olanları ortadaki sütunda, CDATA bildirimli olanları sağdaki sütundadır.

Öznitelik belirtimiNMTOKENS olarak aCDATA olarak a
a="

xyz"

x y z

#x20 #x20 x y z

a="&d;&d;A&a;&#x20;&a;B&da;"

A #x20 B

#x20 #x20 A #x20 #x20 #x20 B #x20 #x20

a=
"&#xd;&#xd;A&#xa;&#xa;B&#xd;&#xa;"

#xD #xD A #xA #xA B #xD #xA

#xD #xD A #xA #xA B #xD #xA

Son örneğin, NMTOKENS türünde bildirimli a için geçersiz (ama iyi biçimli) oluşuna dikkat ediniz.

3.4 Şart Bölümleri

Şart bölümleri belge türü bildirimi harici altkümesinin veya içerme ve yoksayma ile ilgili anahtar sözcüklere dayalı olarak DTD'nin mantıksal yapısına dahil edilen veya dışlanan harici parametre öğelerinin bölümleridir.

Şart Bölümü
[61]   şartBölümü   ::=    includeBölümü | ignoreBölümü
[62]   includeBölümü   ::=   '<![' B? 'INCLUDE' B? '[' dışAltKümeBild ']]>' [GK: Düzgün Şart Bölümü/Parametre Öğesi İç İçeliği]
[63]   ignoreBölümü   ::=   '<![' B? 'IGNORE' B? '[' ignoreBlmİçeriği* ']]>'[GK: Düzgün Şart Bölümü/Parametre Öğesi İç İçeliği]
[64]   ignoreBlmİçeriği   ::=    Yoksayılan ('<![' ignoreBlmİçeriği ']]>' Yoksayılan)*
[65]   Yoksayılan   ::=    Kark* - (Kark* ('<![' | ']]>') Kark*)
Geçerlilik kuralı: Düzgün Şart Bölümü/Parametre Öğesi İç İçeliği

"<![", "[" veya "]]>" şart bölümlerinden biri, bir parametre öğesi gönderiminin ikame metninde içeriliyorsa, bunların hepsinin aynı ikame metninde içeriliyor olmaları gerekir ZORUNLU.

Dahili ve harici DTD altkümelerinde olduğu gibi, bir şart bölümü boşluk karakterlerinin arasına serpiştirilmiş olarak bir veya daha fazla tam bildirim, açıklama, işlem yönergesi veya iç içe şart bölümleri içerebilir.

Şart bölümünün anahtar sözcüğü INCLUDE ise, şart bölümü içeriği DTD'nin parçası olarak işlenmelidir ZORUNLU. Şart bölümünün anahtar sözcüğü IGNORE ise, şart bölümü içeriği DTD'nin parçası olarak işlenmemelidir ZORUNLU. Eğer INCLUDE sözcüklü bir şart bölümü daha geniş bir IGNORE sözcüklü şart bölümünün içeriğinde yer alıyorsa, hem iç hem de dıştaki şart bölümleri yoksayılmalıdır ZORUNLU. Yoksayılan bir şart bölümünün içeriği, anahtar sözcüğü izleyen "[" ile başlayıp, şart bölümünün sonuna kadar, başı "<![", sonu "]]>" olan şart bölümleri dışında kalan herşey yoksayılarak çözümlenmelidir ZORUNLU. Parametre öğesi gönderimleri bu işlemde tanınır olmamalıdır ZORUNLU.

Şart bölümünün anahtar sözcüğü bir parametre öğesi gönderimi ise, işlemci şart bölümünün içerileceğine mi yoksa yok mu sayılacağına karar vermeden önce parametre öğesinin yerine içeriği yerleştirilmelidir ZORUNLU.

Bir örnek:

<!ENTITY % draft 'INCLUDE' >
<!ENTITY % final 'IGNORE' >

<![%draft;[
<!ELEMENT book (comments*, title, body, supplements?)>
]]>
<![%final;[
<!ELEMENT book (title, body, supplements?)>
]]>

4 Fiziksel Yapılar

Bir XML belge birden fazla saklama biriminden oluşabilir. Bunların her birine öğe denir. Bunlar bir isim ile belge öğesi ve harici DTD altkümesi hariç bu isimle betimlenen bir içeriğe sahiptirler. Her XML belgenin daima belge öğesi denilen bir öğesi vardır; belgenin tamamını içerir ve XML işlemciye bir başlangıç noktası teşkil eder.

Öğeler ya çözümlü öğedir ya da çözümlenmemiş öğedir. Bir çözümlü öğenin içeriğine onun ikame metni denir ve bu metin, belgenin bütünleyici bir parçası sayılır.

Bir çözümlenmemiş öğenin içeriği metin olabileceği gibi olmayabilir de; eğer metinse, XML olmayabilir. Her çözümlenmemiş öğenin bir isimle betimlenen öğeye uygun bir gösterimi vardır. XML işlemcinin öğe için betimleyiciler sağlaması ve gösterimi uygulamaya elverişli hale getirmesinin gerekliliği dışında XML, çözümlenmemiş öğelerin içerikleriyle ilgili kısıtlamalar koymaz.

Çözümlü öğelere öğe gönderimlerindeki isimleri üzerinden, çözümlenmemiş öğelere ise öğe gönderimlerindeki ENTITY veya ENTITIES özniteliklerinin değeri olarak verilen isimlerinden erişilir.

Genel öğeler, belge içeriğinde kullanmak içindir. Bu belirtimde genel öğelere bazan bir belirsizliğe yol açmayacaksa genel sıfatı olmasızın sadece öğe denmekle yetinilmiştir.

Parametre öğeleri DTD içeriğinde kullanmak için olup çözümlü öğelerden oluşurlar. Bu iki öğe türü farklı gönderim biçimleri kullanırlar ve farklı bağlamları tanırlar. Dahası, farklı isim-alanlarına sahiptirler; aynı isme sahip bir genel öğe ile bir parametre öğesi bir diğeriyle hiç alakası olmayan iki ayrı öğedir.

4.1 Karakter ve Öğe Gönderimleri

Bir karakter gönderimi ISO/IEC 10646 karakter kümesinden belli bir karaktere atıf yapar; örneğin, girdi aygıtları tarafından doğrudan erişilebilir olmayan bir karakteri belirtmek için.

Karakter Gönderimi
[66]   KarkGönd   ::=   '&#' [0-9]+ ';'
| '&#x' [0-9a-fA-F]+ ';'[İBK: Geçerli Karakter]
İyi biçimlilik kuralı: Geçerli Karakter

Karakter gönderimlerinde kullanılacak karakterlerin Kark sözdizimi tanımıyla eşleşmeleri ZORUNLUdur.

Eğer karakter gönderimi "&#x" ile başlıyor, rakamlar ve harflerden sonra bir ; ile bitiyorsa, bu gönderim karaktere ISO/IEC 10646'daki onaltılık kodu ile atıf yapıyor demektir; eğer "&#" ile başlıyor ve rakamlardan sonra ; ile bitiyorsa, karaktere onluk koduyla atıf yapıyor demektir.

Bir öğe gönderimi bir isimli öğenin içeriğine atıfta bulunur. Genel öğelere atıf yapmak için ve-imini (&) ve noktalı virgülü (;) ayraç olarak kullanan gönderimlerdir. Paramete öğesi gönderimleri ayraç olarak yüzde imini (%) ve noktalı virgülü (;) kullanan gönderimlerdir.

Öğe Gönderimi
[67]   Gönderim   ::=    ÖğeGönd | KarkGönd
[68]   ÖğeGönd   ::=   '&' Ad ';'[İBK: Öğe Bildirilmeli]
[GK: Öğe Bildirilmeli]
[İBK: Çözümlü Öğe]
[İBK: Özyineleme Yapılmamalı]
[69]   ParÖğeGönd   ::=   '%' Ad ';'[GK: Öğe Bildirilmeli]
[İBK: Özyineleme Yapılmamalı]
[İBK: DTD İçinde Olmalı]
İyi biçimlilik kuralı: Öğe Bildirilmeli

Bir parametre öğesi içinde veya harici altkümede olmayan bir öğe gönderimi için, herhangi bir DTD'si olmayan veya sadece, hiçbir parametre öğesi bildirimi içermeyen bir dahili DTD altkümesi olan ya da "standalone='yes'" bildirimi olan bir belgede, öğe gönderiminde belirtilen Ad'ın bir parametre öğesi içinde veya harici altkümede olmayan bir öğe bildirimindeki adla eşleşmesi (amp, lt, gt, apos, quot öğelerinin bildirilmesini gerektirmeyen iyi biçimli belgeler hariç) ZORUNLUdur. Bir genel öğe bildiriminin, bir öznitelik listesi bildiriminde bir öntanımlı değerin içinde gözüken gönderiminden önce yapılmış olması ZORUNLUdur.

Geçerlilik sınaması yapmayan işlemcilerin, harici altkümedeki veya parametre öğeleri içindeki öğe bildirimlerini okumak ve işlemek zorunda olmadıklarına dikkat ediniz; böyle belgeler için, bir öğenin bildirilmesini gerektiren tek kural, sadece standalone='yes' olması halinde iyi biçimlilik kuralıdır.

Geçerlilik kuralı: Öğe Bildirilmeli

"standalone='no'" bildirimli parametre öğesi başvuruları veya harici altkümesi olan bir belgede, öğe gönderiminde belirtilen Ad'ın bir öğe bildirimindeki adla eşleşmesi ZORUNLUdur. Birlikte çalışabilirlik için, geçerli belgelerin amp, lt, gt, apos, quot öğelerini Önceden Tanımlanmış Öğeler bölümünde belirtildiği şekilde bildirmeleri ÖNERİlir. Bir parametre öğesinin bildiriminin, gönderiminden önce yer alması ZORUNLUdur. Benzer şekilde, bir genel öğenin bildiriminin de bu genel öğeye doğrudan veya dolaylı gönderimli bir öntanımlı değer içeren bir öznitelik listesi bildiriminden önce yer alması ZORUNLUdur.

İyi biçimlilik kuralı: Çözümlü Öğe

Bir öğe başvurusu, bir çözümlenmemiş öğe adı içermemelidir ZORUNLU. Çözümlenmemiş öğelere sadece ENTITY veya ENTITIES türünde bildirilmiş öznitelik değerleri içinden atıf yapılabilir.

İyi biçimlilik kuralı: Özyineleme Yapılmamalı

Bir çözümlü öğe dolaylı yada dolaysız kendisine atıf yapmamalıdır ZORUNLU.

İyi biçimlilik kuralı: DTD İçinde Olmalı

Parametre öğe gönderimleri DTD dışında kullanılmamalıdır ZORUNLU.

Karakter ve öğe gönderimi örnekleri:

Seçenekleri kaydetmek için <key>&#x3C;</key> yazınız.
Bu belge &belgetarihi; tarihinde hazırlanmış ve
&güvenlik-derecesi; olarak sınıflanmıştır.

Parametre öğesi gönderimi örneği:

<!-- "ISOLat2" parametre öğesini bildirelim ... -->
<!ENTITY % ISOLat2
         SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
<!-- ... artık başvurabiliriz. -->
%ISOLat2;

4.2 Öğe Bildirimleri

Öğeler bu tanımla eşleşecek şekilde bildirilir:

Öğe Bildirimi
[70]   ÖğeBild   ::=    GenÖğeBild | ParÖğeBild
[71]   GenÖğeBild   ::=   '<!ENTITY' B Ad B ÖğeTanımı B? '>'
[72]   ParÖğeBild   ::=   '<!ENTITY' B '%' B Ad B ParÖğeTanımı B? '>'
[73]   ÖğeTanımı   ::=    ÖğeDeğeri | (HariciID NDataBild?)
[74]   ParÖğeTanımı   ::=    ÖğeDeğeri | HariciID

Ad bir öğe gönderimini veya çözümlenmemiş öğe durumunda ENTITY veya ENTITIES özniteliğinin değerindeki öğeyi betimler. Eğer aynı öğe bir kereden fazla bildirilmişse, ilk bildirim bağlayıcıdır; seçim kullanıcının olmak üzere, bir XML işlemci eğer defalarca bildirilmiş öğeler varsa bir uyarı verebilir SEÇİMLİK.

4.2.1 Dahili Öğeler

Eğer öğe tanımı bir ÖğeDeğeri ise tanımlı öğeye dahili öğe denir. Ayrıca bir fiziksel saklama nesnesi olmayıp öğenin içeriği bildirimde verilir. Dizgesel sabitli öğe değeri durumunda, bazı öğe ve karakter gönderimlerinin işlenmesinin doğru ikame metninin üretilmesini gerektirebileceğine dikkat ediniz; bkz, Öğe İkame Metninin Oluşturulması.

Bir dahili öğe bir çözümlü öğedir.

İç öğe bildirimi örneği:

<!ENTITY Gen-durum "Bu, belirtimin ön sürümüdür.">

4.2.2 Harici Öğeler

Bir öğe dahili değilse bir harici öğedir ve şöyle bildirilir:

Harici Öğe Bildirimi
[75]   HariciID   ::=   'SYSTEM' B SistemSabiti
| 'PUBLIC' B GenidSabiti B SistemSabiti
[76]   NDataBild   ::=    B 'NDATA' B Ad [GK: Gösterim Bildirilmeli]

Eğer NDataBild mevcutsa, o bir genel çözümlenmemiş öğedir; aksi takdirde çözümlü öğedir.

Geçerlilik kuralı: Gösterim Bildirilmeli

Ad'ın bir gösterimin bildirilmiş ismiyle eşleşmesi ZORUNLUdur.

SistemSabiti'ne öğenin sistem betimleyicisi denir. Bu onun, öğenin ikame metnini oluşturacak XML işlemciye girdi sağlamak için gönderimi çözümleyecek işlemin bir parçası olarak, bir tanım-yeri (URI) başvurusuna dönüştürüleceği ([IETF RFC 3986]'da açıklandığı gibi) anlamına gelir. Bir # karakteri ile başlayan betimleyicinin bir bölümünün sistem betimleyicinin bir parçası olması bir hatadır. Bu belirtimin kapsamı dışında bir bilgi kaynağı tarafından (örn, belli bir DTD tarafından tanımlanan özel bir XML elemanı türü veya belli bir uygulama belirtimi tarafından tanımlanmış bir işlem yönergesi) sağlanmış olmadıkça, göreli tarım-yerleri (URI'ler) içinde öğe bildiriminin bulunduğu özkaynağın konumuna görelidir ve bir bildirim olarak çözümlendiği noktada bildirimi başlatan '<' karakterini içeren harici öğe olarak tanımlanmıştır. Dolayısıyla, bir tanım-yeri belge öğesine, öğeyi içeren harici DTD altkümesine veya başka bir harici parametre öğesine göreli olabilir. Bir tanım-yeri tarafından betimlenen özkaynağı getirme çabaları çözümleyici seviyesinde (örn, bir öğe çözümleyicide) veya daha alt seviyede (protokol seviyesinde, örn, HTTP Location: başlığı üzerinden) yönlendirilebilir. Özkaynak içinde, bu belirtimin kapsamı dışındaki ek bilgi kaynaklarının yokluğunda, bir özkaynağın temel tanım-yeri daima döndürülen asıl özkaynağın tanım-yeridir. Başka bir deyişle, özkaynağın tanım-yeri, tüm yönlendirmelerden sonra elde edilen tanım-yeridir.

Sistem betimleyiciler (ve tanım-yeri başvurusu anlamında kullanılan diğer XML dizgeleri) [IETF RFC 3986] ile ilgili olarak, başvurulan özkaynağı getirmekte kullanılabilen bir tanım-yerinden önce, öncelenmiş olması gereken karakterler içerebilir. Öncelenecek karakterler, denetim karakterleri (#x0 dan #x1F'e kadar ve #x7F; çoğu XML'de bulunamaz), boşluk (#x20), ayraçlar ('<' #x3C, '>' #x3E ve '"' #x22), orada kullanımı makul olmayan karakterler ('{' #x7B, '}' #x7D, '|' #x7C, '\' #x5C, '^' #x5E ve '`' #x60) ve karakter numarası #x7F'den büyük karakterlerdir. Önceleme daima tamamen geri alınabilir bir işlem olmadığından, sadece mutlak gereklilik halinde ve işlem zincirinin olası en son halkalarında uygulanmalıdır ZORUNLU. Özellikle ne bir göreli tanım yerini mutlak olanına dönüştürme işlemi ne de bir tanım-yeri başvurusunu onu çözümleyecek bir sürece veya yazılıma aktarma işlemi öncelemeyi tetiklemelidir ÖNERİ. Önceleme varsa, şöyle uygulanmalıdır ZORUNLU:

  1. Öncelenecek her karakter [Unicode] UTF-8 içinde bir veya daha fazla baytlı olacak şekilde ifade edilir.

  2. Elde edilen baytlar tanım-yeri önceleme mekanizması ile öncelenirler (yani, bayt değerinin onaltılık gösterimi HH, %HH'a dönüştürülür).

  3. Özgün karakterin yerine bu işlem sonucunda elde edilen karakter yerleştirilir.

Bir harici betimleyici sistem betimleyiciye ek olarak bir genel betimleyici içerebilir. Öğenin içeriğini getirmeye çalışan bir XML işlemci, bir alternatif tarım-yeri başvurusu üretmeyi denemek için bu belirtimin kapsamı dışındaki ek bilgi kaynaklarına ilaveten sistem ve genel betimleyicilerinin herhangi bir birleşimini kullanabilir. Eğer işlemci bunu yapamıyorsa, sistem dizgesel sabitinde belirtilen tanım-yeri başvurusunu kullanmalıdır ZORUNLU. Bir eşleşme sağlanmaya çalışılmadan önce, genel betimleyici içindeki boşluk karakterlerinden oluşan dizgelerin tümü tek boşluk karakteriyle (#x20) normalleştirilmeli ZORUNLU; baştaki ve sondaki boşluk karakterleri silinmelidir ZORUNLU.

Harici öge bildirimleri örnekleri:

<!ENTITY open-hatch
         SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY open-hatch
         PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
         "http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY hatch-pic
         SYSTEM "../grafix/OpenHatch.gif"
         NDATA gif >

4.3 Çözümlü Öğeler

4.3.1 Metin Bildirimi

Harici çözümlü öğelerin her birinin bir metin bildirimi ile başlaması ÖNERİlir.

Metin Bildirimi
[77]   MetinBild   ::=   '<?xml' SürümBilgisi? KodlamaBild B? '?>'

Metin bildirimi birebir sağlanmış olmalı ZORUNLU, bir çözümlü öğeye gönderim olmamalıdır. Metin bildirimi bir harici çözümlü öğenin başlangıcından başka bir yerde gözükemez ZORUNLU. Bir harici çözümlü öğedeki bir metin bildirimi öğenin ikame metninin parçası olarak ele alınmaz.

4.3.2 İyi Biçimli Çözümlü Öğeler

Bir belge öğesi belge sözdizimi tanımı ile eşleşiyorsa iyi biçimlidir. Bir harici genel çözümlü öğe dışÇözümlüÖğe sözdizimi tanımı ile eşleşiyorsa iyi biçimlidir. Harici parametre öğelerinin tümü tanımları gereği iyi biçimlidir.

Not:
Belge içinden sadece doğrudan veya dolaylı atıf yapılan çözümlü öğelerin iyi biçimli olmaları gerekir.

İyi Biçimli Harici Çözümlü Öğe
[78]   dışÇözümlüÖğe   ::=   (MetinBild? içerik - (Kark* SınırlıKark Kark*)

Bir harici genel çözümlü öğe, eğer ikame metni içerik sözdizimi tanımı ile eşleşiyorsa iyi biçimlidir. Dahili parametre öğelerinin tümü tanımları gereği iyi biçimlidir.

Genel öğelerdeki iyi biçimliliğin bir sonucu, bir XML belgedeki mantıksal ve fiziksel yapıların düzgün şekilde iç içe olmasıdır; hiçbir başlangıç etiketi, bitiş etiketi, boş eleman etiketi, eleman, açıklama, işlem yönergesi, karakter gönderimi veya öğe gönderimi bir öğede başlayıp bir diğerinde bitemez.

4.3.3 Öğelerdeki Karakter Kodlaması

Bir XML belgedeki her harici çözümlü öğe kendi karakterleri için farklı bir karakter kodlaması kullanabilir. Tüm XML işlemcilerin UTF-8 ve UTF-16 kodlamalı öğeleri okuyabilmesi ZORUNLUdur. Bu belirtimdeki "UTF-8" ve "UTF-16" terimleri, kodlamalar ve yaftalar UTF-8 veya UTF-16'ya benzese bile, başka yaftalı karakter kodlamalarına uygulanmaz.

UTF-16 kodlu öğeler ZORUNLU olarak, UTF-8 kodlu öğeler SEÇİMLİK olarak, ISO/IEC 10646 [ISO/IEC 10646] veya Unicode [Unicode]'da açıklandığı gibi Bayt Sıralama İmi (SIFIR GENİŞLİKTE BOŞLUK GİBİ BOŞLUK karakteri, #xFEFF) ile başlamalıdır. Bu bir kodlama imzasıdır, XML belgenin karakter verisinin veya imleniminin bir parçası değildir. XML işlemciler bu karakteri UTF-8 ve UTF-16 kodlu belgeler arasında ayrım yapabilmek için kullanmalıdırlar ZORUNLU.

Bir XML işlemcinin sadece UTF-8 ve UTF-16 kodlamalara sahip öğeleri okuması zorunlu olsa da, dünya çapında kullanılan diğer kodlamaları da tanıması ve bunları kullanan öğeleri de okuması istenebilir. Harici karakter kodlaması bilgisinin (örn, MIME başlıklarında) yokluğunda, UTF-8 veya UTF-16 dışında bir kodlamayla saklanmış çözümlü öğelerin bir kodlama bildirimi içeren bir metin bildirimi ile başlaması ZORUNLUdur (bkz, Metin Bildirimi):

Kodlama Bildirimi
[80]   KodlamaBild   ::=    B 'encoding' Eşittir ('"' KodlamaAdı '"' | "'" KodlamaAdı "'" )
[81]   KodlamaAdı   ::=   [A-Za-z] ([A-Za-z0-9._] | '-')*/* Kodlama adı sadece Latin karakterlerini içerir */

Belge öğesinde, kodlama bildirimi XML bildiriminin parçasıdır. KodlamaAdı kullanılan kodlamanın adıdır.

Bir kodlama bildiriminde "UTF-8", "UTF-16", "ISO-10646-UCS-2" ve "ISO-10646-UCS-4" değerleri Unicode / ISO/IEC 10646'nın kodlama ve dönüşüm çeşitleri için kullanılmalı ÖNERİ; "ISO-8859-1", "ISO-8859-2", ... "ISO-8859-n" (burada n kısım numarasıdır) ISO 8859 kısımları için kullanılmalı ÖNERİ ve "ISO-2022-JP", "Shift_JIS" ve "EUC-JP" değerleri de JIS X-0208-1997'nin çeşitli kodlamaları için kullanalmalıdır ÖNERİ. Burada listelenenlerin dışında kalan karakter kodlamalarından [IANA-KARKÜM]'de (karakter kümesi olarak) kayıtlı olanlarına kayıtlı isimleri kullanılarak atıfta bulunulmalı ÖNERİ; bunların dışında kalan kodlamalara ise adları "x-" öneki ile başlatılarak atıfta bulunulmalıdır ÖNERİ. XML işlemciler karakter kodlamalarını eşleştirirken harf büyüklüğüne duyarlı olmamalılar ÖNERİ ve IANA'da kayıtlı bir ismi IANA'da kayıtlı bir kodlama olarak yorumlamalı ÖNERİ veya bilinmeyen olarak ele almalıdır ÖNERİ (şüphesiz, XML işlemcilerin IANA'ya kayıtlı tüm kodlamaları desteklemesi gerekmez).

Bir harici aktarım protokolü (örn, HTTP veya MIME) tarafından sağlanan bilginin yokluğunda, bir öğe, bildirimdeki isimden başka bir kodlamayla XML işlemciye sunulmuşsa veya ne Bayt Sıralama İmi ne de UTF-8 dışında bir kodlama için kullanılacak kodlama bildirimi olması bir öğe için ölümcül hatadır. ASCII, UTF-8'in bir altkümesi olduğundan sıradan ASCII öğelerin bir kodlama bildirimine kesinlikle ihtiyaç duymayacaklarına dikkat ediniz.

Bir MetinBildiriminin bir harici öğenin başlangıcından farklı bir yerde bulunması ölümcül hatadır.

XML işlemci bir öğenin işlenmeye elverişli olmayan bir kodlamaya sahip olduğunu saptarsa bu bir ölümcül hatadır. Eğer bir XML öğenin belli bir kodlamaya sahip olduğu saptandığı (öntanımlı olarak, kodlama bildirimi veya daha yüksek seviyeli bir protokol üzerinden) halde içeriğinde bu kodlamaya uygun olmayan bayt dizilimleri mevcutsa bu bir ölümcül hatadır. Özellikle, UTF-8 kodlanmış bir öğe içeriğinde Unicode'da [Unicode] tanımlandığı gibi düzensiz kod dizilimleri varsa bu bir ölümcül hatadır. Daha yüksek seviyeli bir protokol tarafından bir kodlama saptanmış olmadıkça, XML öğesi hiçbir kodlama bildirimi içermediği halde içeriği UTF-8 veya UTF-16 için uygun değilse bu da bir ölümcül hatadır.

Kodlama bildirimleri içeren metin bildirimi örnekleri:

<?xml encoding='UTF-8'?>
<?xml encoding='EUC-JP'?>

4.3.4 Öğelerdeki Sürüm Bilgisi

Belge öğesi dahil, her öğe ayrı ayrı XML 1.0 veya XML 1.1 olarak bildirilebilir. Belge öğesinde yer alan sürüm bildirimi, belgenin bütünü içindir. Bir XML 1.1 belge XML 1.0 harici öğelerini çağırabilir, böylece sürümleri yinelenmediği sürece harici öğeler özellikle DTD altkümeleri elden geçirilmeyi gerektirmez. Yine de böyle bir durumda belgenin tamamına XML 1.1 kuralları uygulanır.

Belge öğesi dahil, bir öğe, bir sürüm bilgisi belirtilmedikçe 1.0 sürümü bir öğe olarak ele alınır.

4.4 Öğelerin ve Gönderimlerin XML İşlemcide Ele Alınışları

Aşağıdaki liste, karakter ve öğe gönderimleri ve çözümlenmemiş öğe çağrıları bağlamında, hangi durumda XML işlemcinin nasıl davranmasının ZORUNLU olduğunu özetler. Soldaki başlıklar tanınma şeklini belirtir:

İçerikte gönderim
bir elemanın başlangıç etiketi ile bitiş etiketi arasındaki her yerde bir gönderim olarak; içerik sözdizimine karşılıktır.

Öznitelik değeri içinde gönderim
başlangıç etiketindeki bir özniteliğin değeri veya bir öznitelik bildirimindeki bir öntanımlı değer içinde bir gönderim olarak; ÖznitDeğeri sözdizimine karşılıktır.

Öznitelik değeri içinde gözükmek
ENTITY türünde bildirilmiş bir özniteliğin değeri olarak veya ENTITIES türünde bildirilmiş bir özniteliğin değerinde boşluklarla ayrılmış dizgeciklerden biri olarak gözüktüğünde bir gönderim değil bir Ad olarak.

Öğe değeri içinde gönderim
öğe bildiriminde dahili öğenin dizgesel sabitli öğe değeri içinde veya bir parametre içinde bir gönderim olarak; ÖğeDeğeri sözdizimine karşılıktır.

DTD içinde gönderim
DTD'nin dahili veya harici altkümelerinde fakat bir ÖğeDeğeri, ÖznitDeğeri, PI, Açıklama, SistemSabiti, GenidSabiti veya yoksayılan bir şart bölümünün içeriğinde yer almamak şartıyla bir gönderim olarak (bkz, Şart Bölümleri).

Öğe türüKarakter
ParametreDahili GenelHarici Çözümlü GenelÇözümlenmemiş
İçerikte gönderim Tanınmaz İçerilir Geçerliyse İçerilir Yasak İçerilir
Öznitelik değeri içinde gönderim Tanınmaz Dizgesel Sabitte İçerilir Yasak Yasak İçerilir
Öznitelik değeri içinde gözükmek Tanınmaz Yasak Yasak Uyarı Tanınmaz
Öğe değeri içinde gönderim Dizgesel Sabitte İçerilir Atlanır Atlanır Hata İçerilir
DTD içinde gönderim Parametre Öğesi olarak İçerilir Yasak Yasak Yasak Yasak

4.4.1 Tanınmaz

DTD dışında % karakterinin özel bir anlamı yoktur; bu bakımdan parametre öğesi gönderimleri içerik içinde imlenim olarak tanınmaz. Benzer şekilde, çözümlenmemiş öğelerin isimleri de uygun şekilde bildirilmiş bir öznitelik değerinde gözükmesi dışında tanınmazlar.

4.4.2 İçerilir

Bir öğe, kendisine yapılan gönderimin tanındığı noktada ikame metni alınıp işlendiğinde içerilmiş olur. İkame metni, uygun şekilde tanınması ZORUNLU olarak hem karakter verisi hem de imlenim (parametre öğeleri için değil) içerebilir. ("AT&amp;T;" dizgesi "AT&T;" olarak yorumlanır ve dizge içinde kalan ve-imi bir öğe gönderim ayracı olarak tanınmaz.) Belirtilen karakter gönderimin olduğu yere yerleştirildiğinde bir karakter gönderimi içerilmiş olur.

4.4.3 Geçerliyse İçerilir

Bir XML işlemci belgenin geçerliliğini sınarken bir çözümlü öğe gönderimini tanıdığında, işlemcinin onun ikame metnini içermesi ZORUNLUdur. Eğer öğe harici bir öğeyse ve işlemci belgenin geçerliliğini sınamaya çalışmıyorsa, işlemci, öğenin ikame metnini içerebilir SEÇİMLİK, fakat bu gerekli değildir. Eğer geçerlilik sınaması yapmayan bir işlemci ikame metnini içermezse, öğeyi tanıdığını ama onu okumadığını uygulamaya bildirmesi ZORUNLUdur.

Bu kural, SGML ve XML öğe mekanizması tarafından sağlanan, başka uygulamalar, kısmen, belge tarama için uygun olması gerekmeyen, modülerliği özellikle yazım sırasında desteklemek için tasarlanmış, özdevinimli içerilme anlamındaki tanımaya dayanır. Tarayıcılar, örneğin,bir harici çözümlü öğe gönderimine rastladıklarında, öğenin varlığının görsel bir belirtisini sağlamayı seçebilirler ve talep halinde göstermek için bunu alabilirler.

4.4.4 Yasak

Aşağıdakiler yasak olup ölümcül hataya sebep olurlar:

  • Bir öğe bildirimindeki ÖğeDeğeri içindekiler hariç, bir çözümsüz öğeye gönderiminin varlığı.

  • Bir ÖğeDeğeri veya ÖznitDeğeri içindekiler hariç DTD içinde bir karakter veya genel öğe gönderiminin varlığı.

  • Bir öznitelik değeri içinde bir harici öğeye gönderim.

4.4.5 Dizgesel Sabitte İçerilir

Bir öğe gönderimi bir öznitelik değerinde veya bir parametre öğesi gönderimi bir dizgesel sabit öğesi değerinde gözüküyorsa, onun ikame metninin, belge içinde gönderimin tanındığı yerde gönderimin yerine yerleştirilerek işlenmesi ZORUNLUdur (ikame metni içinde tek veya çift tırnak karakterlerinin daima bir normal veri karakteri olarak ele alınmasının ZORUNLU ve dizgesel sabiti sonlandırmamasının ZORUNLU olduğu durumlar hariç). Örneğin, bu iyi biçimliyken:

<!ENTITY % EH '"Evet"' >
<!ENTITY NeDedi "%EH; dedi" >

bu değildir:

<!ENTITY SonNit "27'" >
<eleman nitelik='a-&SonNit;>

4.4.6 Uyarı

Bir çözümlenmemiş öğe ismi ENTITY veya ENTITIES türünde bildirilmiş bir özniteliğin değerinde bir dizgecik olarak görünüyorsa, geçerlilik sınaması yapan bir işlemcinin uygulamayı hem öğe hem de onunla ilişkili gösterim için sistem ve genel betimleyiciler bakımından bilgilendirmesi ZORUNLUdur.

4.4.7 Atlanır

Bir genel öğe gönderimi bir öğe bildiriminin ÖğeDeğeri içinde görünüyorsa, atlanmalı ZORUNLU ve olduğu gibi bırakılmalıdır.

4.4.8 Parametre Öğesi olarak İçerilir

Harici çözümlü öğelerde olduğu gibi, parametre öğelerinin de sadece geçerliyse içerilmeleri gerekir. Bir parametre öğesi gönderimi DTD'de tanınıp ve içerildiğinde, ikame metni başına ve sonuna birer boşluk karakteri (#x20) eklenerek genişletilmelidir ZORUNLU; amaç, parametre öğesinin ikame metnini DTD'deki sözdizimsel dizgeciklerden bütünleyici bir miktarı içermeye zorlamaktır. Bu davranış, öğe değerleri içindeki parametre öğesi gönderimlerine uygulanmamalıdır ZORUNLU; bunlar Dizgesel Sabitte İçerilir bölümünde açıklanmıştır.

4.4.9 Hata

Bir öğe bildirimi içindeki ÖğeDeğerinde görünecek bir çözümlenmemiş öğeye gönderim bir hatadır.

4.5 Öğe İkame Metninin Oluşturulması

Öğelerin elde edilişi tartışılırken, öğe değerinin iki biçimini birbirinden ayrı ele almak daha yararlıdır. Bir dahili öğe için, dizgesel sabitli öğe değeri aslında öğe bildiriminde yer alan ve ÖğeDeğeri sözdizimine karşı düşen tırnaklı bid dizgedir.

Bir harici öğe için, dizgesel sabitli öğe değeri öğede içerilmiş metnin ta kendisidir.

Bir dahili öğe için ikame metni karakter ve parametre öğesi gönderimleri yerine atıf yapılan değerleri yerleştirildikten sonraki öğe içeriğidir.

Bir harici öğe için ikame metni öğenin eğer varsa metin bildirimi ayrıldıktan (çevresindeki boşluk karakterleri hariç) sonra, parametre öğesi ve karakter gönderimleri çözümlenmeksizin kalan içeriğidir.

Dizgesel sabitli öğe değeri, bir dahili öğe bildiriminde verilmiş (ÖğeDeğeri) olarak, karakter, parametre öğesi ve genel öğe gönderimleri içerebilir. Böyle gönderimlerin dizgesel sabitli öğe değerinde tamamen içerilmiş olması ZORUNLUdur. Yukarıda açıklandığı gibi, içerilmiş (veya dizgesel sabitte içerilmiş) olan asıl ikame metninin, gönderim yapılan parametre öğelerinin ikame metnini ve gönderim yapılan karakteri içermesi ZORUNLUdur; bununla birlikte, genel öğe gönderimlerinin yorumlanmaksızın olduğu gibi bırakılmaları ZORUNLUdur. Örneğin, aşağıda belirtilen bildirimleri ele alalım:

<!ENTITY % pub    "&#xc9;ditions Gallimard" >
<!ENTITY   rights "All rights reserved" >
<!ENTITY   book   "La Peste: Albert Camus,
&#xA9; 1947 %pub;. &rights;" >

"book" öğesi için ikame metni:

La Peste: Albert Camus,
© 1947 Éditions Gallimard. &rights;

Genel öğe gönderimi "&rights;", "&book;" gönderimi belge içeriğinde veya bir öznitelik değerinde yer aldığında yorumlanacaktır.

Bu basit kurallar, daha karmaşık etkileşimlere sahip olabilirler; daha zor bir örneğin açıklaması için Öğe ve Karakter gönderimlerinin Yorumlanması bölümüne bakınız.

4.6 Önceden Tanımlanmış Öğeler

Öğe ve karakter gönderimlerinin ikisi de açılı sol ayraç, ve-imi ve diğer ayraçları öncelemekte kullanılabilir. Genel öğeler kümesi (amp, lt, gt, apos, quot) bu amaçla belirtilmiştir. Sayısal karakter gönderimleri de kullanılabilir; bunlar tanındıkları anda yorumlanırlar ve karakter verisi olarak ele alınırlar ZORUNLU, dolayısıyla karakter verisi içindeki "&#60;" ve "&#38;" sayısal karakter gönderimleri < ve & karakterlerini öncelemekte kullanılabilir.

Tüm XML işlemcilerin bu öğeleri bildirilsin ya da bildirilmesin tanımaları ZORUNLUdur. Birlikte çalışabilirlik için, geçerli XML belgelerin, diğerleri gibi onları kullanmadan önce bildirmeleri ÖNERİlir. Eğer lt veya amp öğeleri bildirilecekse, bunların dahili öğeler (ikame metni öncelenmiş olarak ilgili karaktere bir karakter gönderimi olan) olarak bildirilmesi ZORUNLUdur; bu gönderimlerin iyi biçimli sonuçlar vermesi için bu öğelerin çifte öncelemeli olması ZORUNLUdur. Eğer gt, apos veya quot bildirilecekse, bunlar dahili öğeler (ikame metni öncelenmiş olarak tek karakter veya o karaktere bir karakter gönderimi olan) olarak bildirilmelidir ZORUNLU; çifte önceleme burada SEÇİMLİKtir, fakat bir soruna yol açmaz. Örnek:

<!ENTITY lt     "&#38;#60;">
<!ENTITY gt     "&#62;">
<!ENTITY amp    "&#38;#38;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">

4.7 Gösterim Bildirimleri

Gösterimler, çözümlenmemiş öğe biçiminde, bir gösterim özniteliğine veya bir işlem yönergesinin adreslendiği uygulamaya dayanan elemanlar biçiminde, isimleriyle betimlenirler.

Gösterim bildirimleri öğe ve öznitelik listesi bildirimlerinde ve öznitelik belirtimlerinde kullanmak için gösterime bir ad ve belirtilen gösterimdeki veriyi işlemeye yetkin bir yardımcı uygulamayı devreye sokabilecek bir XML işlemciye veya onun istemci uygulamasına izin verebilen gösterim için bir harici betimleyici sağlar.

Gösterim Bildirimleri
[82]   GösterimBild   ::=   '<!NOTATION' B Ad B (HariciID | PublicID) B? '>'[GK: Gösterim Adının Eşsizliği]
[83]   PublicID   ::=   'PUBLIC' B GenidSabiti
Geçerlilik kuralı: Gösterim Adının Eşsizliği

Belli bir Ad birden fazla gösterimde bildirilemez ZORUNLU.

XML işlemcilerin, bildirilmiş olan veya bir öğe bildirimine, bir öznitelik tanımına veya değerine atıfta bulunan bir gösterimin adıyla aynı veya gösterimin harici betimleyicisi olan dizgeyle aynı isimli uygulamalar sağlaması ZORUNLUdur. Bunlar ayrıca, harici betimleyicileri sistem betimleyiciye, dosya ismine, veya gösterimde açıklanan veri için bir XML işlemci çağıracak uygulamaya izin vermesi gereken başka bir bilgiye dönüştürülebilir SEÇİMLİK. (XML işlemcinin veya uygulamanın çalıştığı sistemde, XML belgenin bildirdiği veya atıfta bulunduğu gösterim için gösterime özel uygulamaların sistemde bulunmayışı bir hata değildir.)

4.8 Belge Öğesi

Belge öğesi, öğe ağacının kökü ve bir XML işlemci için başlangıç noktası olarak hizmet verir. Bu belirtim belge öğesinin bir XML işlemci tarafından nasıl bulunacağını belirtmez; diğer öğelerin aksine, belge öğesinin bir ismi yoktur ve herhangi bir betimleme olmaksızın bir işlemci girdi akımı üzerinde görünmesi daha iyi olur.

5 Uygunluk

5.1 Geçerliliği Sınayan ve Sınamayan İşlemciler

Uyumlu XML işlemciler iki sınıfa ayrılırlar: geçerlilik sınaması yapanlar ve yapmayanlar.

Geçerlik sınaması yapanların da yapmayanların da belge öğesinin ve okunan diğer tüm çözümlü öğelerin içeriğinde, bu belirtimin iyi biçimlilik kurallarıyla çelişen herşeyi raporlamaları ZORUNLUdur.

Geçerliliği sınayan işlemcilerin seçim kullanıcının olmak üzere, DTD'de bildirimler tarafından ifade edilen kurallarla çelişenleri ve bu belirtimde belirtilen geçerlilik kurallarını yerine getirmekteki başarısızlıkları raporlaması ZORUNLUdur. Bunun üstesinden gelmek için, geçerlilik sınaması yapan XML işlemcilerin DTD'nin tamamını ve belgede atıf yapılan tüm harici çözümlü öğeleri okuyup işlemesi ZORUNLUdur.

Geçerliliği sınamayan XML işlemcilerin, sadece iyi biçimlilik için dahili DTD altkümesinin tamamını içeren belge öğesini sınamaları gerekir ZORUNLU. Belgenin geçerliliğini sınamak için gerekli olmasa da, okumadıkları ilk parametre öğesi gönderimine kadar okudukları her parametre öğesinde ve dahili DTD altkümesinde okudukları tüm bildirimleri işlemeleri ZORUNLUdur; başka bir deyişle, bu bildirimlerdeki bilgiyi, öznitelik değerlerini normalleştirmek için, dahili öğelerin ikame metnini içermek için ve öntanımlı öznitelik değerlerini sağlamak için kullanmaları ZORUNLUdur. standalone="yes" durumu hariç, öğe, bildirimlerin yerini almak üzere bildirilmiş olabileceğinden, okunmamış bir parametre öğesine bir gönderimden sonra, rastlanan öznitelik listesi bildirimlerini veya öğe bildirimlerini işlememeleri gerekir ZORUNLU; standalone="yes" durumunda, işlemcilerin bu bildirimleri işlemeleri ZORUNLUdur.

Geçersiz belgeleri geçerliliği sınamayan bir işlemci ile işlerken uygulamanın tutarlı bilgi vermeyebileceğine dikkat ediniz. Örneğin, belge içinde eşsizlikle ilgili çeşitli gereksinimler (aynı ID'ye sahip birden fazla elemanın varlığı, yinelenmiş eleman bildirimleri veya aynı isimli gösterimler gibi) sağlanmıyor olabilir. Bu gibi durumlarda, çözümleyicinin böyle bilgileri uygulamaya raporlamak konusundaki davranışı belirsizdir.

XML 1.1 işlemcilerin hem XML 1.0 hem de XML 1.1 belgeleri işleyebilmeleri gerekir ZORUNLU. XML üreten programların belli bir özellik XML 1.1'i gerektirmedikçe XML 1.0 üretmeleri ÖNERİlir.

5.2 XML İşlemcilerin Kullanımı

Geçerliliği sınayan bir XML işlemcinin davranışı oldukça öngörülebilir bir davranıştır; belgenin her parçasını okuması ve tüm iyi biçimlilik ve geçerlilik uyumsuzluklarını raporlaması gerekir. Geçerliliği sınamayan bir XML işlemci için daha azı gerekir; belgenin belge öğesi hariç hiçbir parçasını okuması gerekmez. Bu, XML işlemcilerin kullanıcıları açısından önemli olabilecek iki etkiye sahiptir:

Farklı XML işlemciler arasında birlikte çalışabilirlik bakımından azami güvenilirlik için, geçerlilik sınaması yapmayan işlemcileri kullanan uygulamaların böyle işlemcilerin gerekli olmayan davranışlarına güvenmemeleri ÖNERİlir. Geçerlilikle ilgili olmayan DTD oluşumlarını (öntanımlı özniteliklerin bildirimi ve harici öğelerde belirtilmesi olası dahili öğeler gibi) gerektiren uygulamaların geçerlilik sınaması yapan XML işlemcileri kullanmaları ÖNERİlir.

6 Gösterim

XML'nin biçimsel dilbilgisi kuralları bu belirtimde Eklentili Backus-Naur Biçiminin (EBNF) basit bir gösterimi kullanılarak belirtilmiştir. Her dilbilgisi kuralı,

sembol ::= ifade

şeklinde bir sembolle tanımlanır. Sembol bir düzenli dil başlangıç sembolü ise büyük harfle başlar, yoksa küçük harfle başlar. Dizgesel sabitler tırnak içine alınır.

Kuralın sağ tarafında bulunan ifade içinde dizgeleri bir veya daha fazla karakterle eşleştirmek için şu ifadeler kullanılmıştır:

#xN
Burada N bir onaltılık tamsayı olup ifade, ISO/IEC 10646'daki karakter numarası N olan karakter ile eşleşir. #xN içindeki sıfırlardan soldakiler değersizdir.

[a-zA-Z], [#xN-#xN]
Kark, belirtilen aralıktaki (sınırlar dahil) her değerle eşleşir.

[abc], [#xN#xN#xN]
Kark, ifadede belirtilen değerlerle eşleşir. Bu gösterime köşeli ayraçlarla sınırlanarak aralıklar da dahil edilebilir.

[^a-z], [^#xN-#xN]
Kark, belirtilen aralık (sınırlar dahil) dışında kalan her değerle eşleşir.

[^abc], [^#xN#xN#xN]
Kark, ifadede belirtilen değerler dışında kalan değerlerle eşleşir. Bu gösterime köşeli ayraçlarla sınırlanarak yasaklanacak aralıklar da dahil edilebilir.

"dizge"
çift tırnaklar arasında verilen dizgesel sabit ile eşleşilir.

'dizge'
tek tırnaklar arasında verilen dizgesel sabit ile eşleşilir.

Bu semboller, daha karmaşık örüntülerle eşleşmek için birleştirilebilir; A ve B basit ifadeleri göstermek üzere:

(ifade)
ifade tek birim olarak ele alınır ve bu listede açıklandığı gibi başka ifadelerle birleşebilir.

A?
ya A ya da hiçbir şey ile eşleşir; A'nın isteğe bağlı olduğu anlamına gelir.

A B
A ve A'dan sonra gelen B ile eşleşir. Bu işleç yerdeğiştirmeli işleçten daha yüksek önceliğe sahiptir; bu nedenle, A B | C D ile (A B) | (C D) aynıdır.

A | B
A veya B ile eşleşilir.

A - B
B'nin eksiltilmesi halinde A ile eşleşilir.

A+
A'nın bir veya daha fazla örneği ile eşleşilir. Birleştirme, yerdeğiştirmeden daha yüksek önceliğe sahiptir; bu nedenle, A+ | B+ ile (A+) | (B+) aynıdır.

A*
A'nın sıfır veya daha fazla örneği ile eşleşilir. Birleştirme, yerdeğiştirmeden daha yüksek önceliğe sahiptir; bu nedenle, A* | B* ile (A*) | (B*) aynıdır.

Sözdizimi tanımlarında kullanılan diğer gösterimler:

/* ... */
açıklama.

[ İBK: ... ]
İyi Biçimlilik Kuralı; bir sözdizimi tanımıyla ilişkili olarak iyi biçimli belgelere uygulanacak bir kural ismini betimler.

[ GK: ... ]
Geçerlilik Kuralı; bir sözdizimi tanımıyla ilişkili olarak geçerli belgelere uygulanacak bir kural ismini betimler.

A Kaynakça

A.1 Uyulması Gerekli Olanlar

IANA-KARKÜM
(Genel Ağ Atanmış Numaralar Yetkilisi) Karakter Kümeleri için Resmi Adlar, ed. Keld Simonsen.
IETF RFC 2119
IETF. RFC 2119: RFC'lerde Gereksinim Seviyelerini Belirtmek için Kullanılan Anahtar Sözcükler. Scott Bradner, 1997. Uyulması zorunlu İngilizce sürümü http://www.rfc-editor.org/rfc/rfc2119.txt adresindedir.
IETF RFC 3066
IETF. RFC 3066: Dilleri Betimleyen Yaftalar, ed. H. Alvestrand. 2001.
IETF RFC 3986
IETF. RFC 3986: Tektip Özkaynak Betimleyici (URI - Uniform Resource Identifier): Soysal Sözdizimi. T. Berners-Lee, R. Fielding, L. Masinter. 2005.
ISO/IEC 10646
ISO (Uluslararası Standartlaşım Örgütü). ISO/IEC 10646-1:2000. Bilgi teknolojileri — Evrensel Çok Sekizli Kodlanmış Karakter Kümesi (UCS - Universal Multiple-Octet Coded Character Set) — 1. Kısım: Mimari ve Temel Çokdilli Düzey, zaman zaman eklemeler yapılmakta, yeni düzeltmelerle bunlar değiştirilmekte veya yeni parçalar eklenerek genişletilmektedir. (En son sürüm için http://www.iso.ch adresine bakınız.)
Unicode
The Unicode Consortium. Unicode Standardı, Sürüm 4.0. Reading, Mass.: Addison-Wesley, 2003, yeni sürümleri yayınlanarak güncellenmektedir. (Unicode Karakter Veritabanı, son sürüm ve standardın sürümleri ile ilgili diğer bilgiler için http://www.unicode.org/unicode/standard/versions adresine bakınız).
XML-1.0
W3C. Genişletilebilir İmlenim Dili (XML) 1.0 (Dördüncü Düzeltme), Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler ve François Yergeau eds. W3C (World Wide Web Consortium), 16 Ağustos 2006. Uyulması zorunlu İngilizce sürümü http://www.w3.org/TR/2006/REC-xml-20060816/ adresindedir.

A.2 Diğerleri

Aho/Ullman
Aho, Alfred V., Ravi Sethi ve Jeffrey D. Ullman. Derleyiciler: Prensipler, Teknikler ve Araçlar. Reading: Addison-Wesley, 1986, rpt. corr. 1988.
Brüggemann-Klein
Brüggemann-Klein, Anne. Belge İşlemede Biçimsel Modeller. Habilitationsschrift. Freiburg Üniversitesi Matematik Fakültesi, 1993.
Brüggemann-Klein and Wood
Brüggemann-Klein, Anne ve Derick Wood. Belirlenimci Düzenli Diller. Freiburg Üniversitesi Bilişim Enstitüsü, Bericht 38, Oktober 1991. Extended abstract in A. Finkel, M. Jantzen, Hrsg., STACS 1992, S. 173-184. Springer-Verlag, Berlin 1992. Lecture Notes in Computer Science 577. Full version titled One-Unambiguous Regular Languages in Information and Computation 140 (2): 229-253, February 1998.
Charmod
W3C Çalışma Taslağı. WWW 1.0 için Karakter Modeli. Martin J. Dürst, François Yergeau, Richard Ishida, Misha Wolf, Tex Texin.
Clark
James Clark. SGML ile XML'ın Karşılaştırılması.
IANA-DİLKOD
(Genel Ağ Atanmış Numaralar Yetkilisi) Dil Yaftaları Kütüğü, ed. Keld Simonsen.
IETF RFC 2141
IETF. RFC 2141: URN Sözdizimi, ed. R. Moats. 1997.
IETF RFC 3023
IETF. RFC 3023: XML Ortam Türleri. eds. M. Murata, S. St.Laurent, D. Kohn. 2001.
IETF RFC 2781
IETF. RFC 2781: UTF-16, ISO 10646'nın bir kodlaması, ed. P. Hoffman, F. Yergeau. 2000.
ISO 639
(Uluslararası Standartlaşım Örgütü). ISO 639:1988 (E). Dil isimlerinin gösterimi için kodlar. [Geneva]: International Organization for Standardization, 1988.
ISO 3166
(Uluslararası Standartlaşım Örgütü). ISO 3166-1:1997 (E). Ülkelerin ve alt bölümlerinin isimlerinin gösterimi için kodlar — 1. Kısım: Ülke kodları [Geneva]: International Organization for Standardization, 1997.
ISO 8879
ISO (Uluslararası Standartlaşım Örgütü). ISO 8879:1986(E). Bilgi işlem — Metin ve Büro Sistemleri — Standart Genelleştirilmiş İmlenim Dili (SGML). İlk Düzenleme — 1986-10-15. [Geneva]: International Organization for Standardization, 1986.
ISO/IEC 10744
ISO (Uluslararası Standartlaşım Örgütü). ISO/IEC 10744-1992 (E). Bilgi teknolojileri — Hiper Ortam/Zamana Dayalı Yapı Dili (HyTime). [Geneva]: International Organization for Standardization, 1992. Extended Facilities Annexe. [Geneva]: International Organization for Standardization, 1996.
WEBSGML
ISO (Uluslararası Standartlaşım Örgütü). ISO 8879:1986 TC2. Bilgi teknolojileri — Belge Açıklama ve İşleme Dilleri. [Geneva]: International Organization for Standardization, 1998.
XML Adları
Tim Bray, Dave Hollander ve Andrew Layman. XML 1.0'da İsim-alanları. Textuality, Hewlett-Packard ve Microsoft. World Wide Web Consortium, 1999. Uyulması zorunlu İngilizce sürümü http://www.w3.org/TR/xml-names/ adresindedir.

B Karakter Normalleştirme Tanımları

Bu ek bölüm karakter normalleştirmesi ile ilgili tanımları içerir. Daha fazla temel bilgi ve örnekler için [Charmod] bölümüne bakınız.

Bir metin eğer UTF-8, UTF-16 veya UTF-32 kodlamalı ise bu metinden Unicode kodlamalı olarak bahsedilir.

Kadim kodlama Unicode'a dayalı olmayan karakter kodlaması anlamındadır.

Bir normalleştiren dönüştürücü bir kadim kodlamalı belgeyi bir Unicode kodlamalı belgeye dönüştürür ve sonucun Unicode Normalleştirme Biçimi C'ye uygun olmasını sağlar ([Unicode] UAX #15'e bakınız).

Bir karakter öncelemi bir imlenim veya programlama dilinde tanımlı sözdizimsel bir araç olup şunların biri veya bir kaçını mümkün kılar:

  1. Sözdizimsel öneme sahip karakterlerin dilin sözdizimi içinde sözdizimsel önemini yitirmesini sağlayacak şekilde ifade edilmesi.

  2. Dilin bir gerçeklenimi için seçilen kodlamayla gösterilemeyen karakterlerin ifade edilmesi.

  3. Genel olarak karakterlerin karşılıkları olan karakter kodları kullanılmaksızın ifade edilmesi.

Onaylı metin aşağıdaki durumlardan en az birine uyan metindir:

  1. Metnin normalleştirilmiş biçimde olduğu sınanarak onaylanmıştır.

  2. Kaynak metin işleme bileşeninin sadece normalleştirilmiş metin ürettiği bilinmekte ve öyle tanınmaktadır.

Metin eğer Unicode kodlamalı ise bu belirtimin amacına uygun olarak aynı zamanda Unicode normalleştirmelidir. Böyle bir metin ayrıca, Unicode Standardının ilgili bir sürümünün Unicode Normalleştirme Biçimi C Ek #15'e uygundur: Metnin içinde bulunan karakterlerin hepsi Unicode Standardının 3.2'den daha eski olmayan olası en eski sürümündeki Unicode Normalleştirme Biçimlerindedir.

Metin şunları sağlıyorsa dahili normalleştirmelidir:

  1. Metin Unicode normalleştirmelidir ve herhangi bir karakter öncelemi veya yorumlandığında bir daha Unicode normalleştirmeli olamayacak içerilenleri içermez.

  2. Metin kadim kodlamalıdır ve eğer bir normalleştiren dönüştürücü tarafından Unicode kodlamalı metne dönüştürülseydi sonuç üstteki 1. maddeyi yerine getirirdi.

Bir aksan karakteri şunlardan biri veya birkaçıdır:

  1. İkinci karakter bir başat birleşimin kurallı oluşum eşlemindedir ([Unicode] UAX #15'in D3' of UAX #15ünde tanımlandığı gibi)

  2. sıfırıncı kurallı birleşim sınıfından değildir ([Unicode]'da tanımlandığı gibi).

Bir metnin tamamen normalleştirilmiş olması için:

  1. Metin Unicode kodlamalı ve dahili normalleştirmeli olup dahili oluşumların hiçbiri bir aksan karakteri veya bir aksan karakterini gösteren bir karakter öncelemi ile başlayan bir metin içermez.

  2. Metin kadim kodlamalıdır ve eğer bir normalleştiren dönüştürücü tarafından Unicode kodlamalı metne dönüştürülseydi sonuç üstteki 1. maddeyi yerine getirirdi.

C Öğe ve Karakter gönderimlerinin Yorumlanması (Bilgilendirici)

Bu ek bölümde, Öğelerin ve Gönderimlerin XML İşlemcide Ele Alınışları bölümünde belirtildiği gibi, öğe ve karakter gönderimlerinin tanınması ve yorumlanması ile ilgili örnekler bulunmaktadır.

Eğer DTD

<!ENTITY example "<p>Bir ve-imi (&#38;#38;) sayısal olarak
                  (&#38;#38;#38;) veya bir genel öğe olarak
                  (&amp;amp;) gösterilebilir.</p>" >

diye bir öğe bildirimi içeriyorsa, XML işlemci öğe bildirimini çözümlerken karakter gönderimlerini tanıyıp çözümleyecek ve

<p>Bir ve-imi (&#38;) sayısal olarak
(&#38;#38;) veya bir genel öğe olarak
(&amp;amp;) gösterilebilir.</p>

dizgesini "example" öğesinin değeri olarak saklayacaktır. Belge içindeki "&example;" şeklinde bir gönderim, p elemanının başlangıç ve bitiş etiketlerinin tanınıp dizgenin içindeki üç karakter gönderiminin tanınıp yorumlanarak metnin yeniden çözümlenmesine ve p elemanının aşağıdaki içerikle (ayraçlar ve imlenim olmaksızın verinin tümü) sonuçlanmasına sebep olacaktır:

Bir ve-imi (&) sayısal olarak
(&#38;) veya bir genel öğe olarak
(&amp;) gösterilebilir.

Daha karmaşık bir örnek kuralları ve etkilerini daha iyi görmemizi sağlayacaktır. Bu örnekte satırların başlarındaki numaralar kaynak koda dahil değildir:

1 <?xml version='1.1'?>
2 <!DOCTYPE test [
3 <!ELEMENT test (#PCDATA) >
4 <!ENTITY % xx '&#37;zz;'>
5 <!ENTITY % zz '&#60;!ENTITY becerikli "hataya eğilimli" >' >
6 %xx;
7 ]>
8 <test>Bu örnek &becerikli; bir yöntemi göstermektedir.</test>

İşlemler şöyle yürür:

D Belirlenimci İçerik Modelleri (Bilgilendirici)

Eleman İçeriği bölümünde bahsedildiği gibi, eleman türü bildirimlerindeki içerik modellerinin belirlenimci olmaları gerekir. Bu gereksinim SGML ile uyumluluk içindir ("iki anlamlı olmayan" belirlenimci içerik modellerine çağrılar); XML işlemciler, belirlenimci olmayan içerik modellerini hata olarak imleyebilen SGML sistemleri kullanılarak oluşturulabilirler.

Örneğin, ((b, c) | (b, d)) içerik modeli belirlenimci değildir, çünkü b içerikte başta yer almak üzere verildiğinden, XML işlemci modeldeki hangi b'yi eşleştireceğini b'i, izleyen elemanı görmek için başa bakmadan anlayamaz. Bu durumda, iki b gönderimi modeli (b, (c | d)) şeklinde okuyarak tek gönderime indirgenebilir. Artık, baştaki b içerik modelindeki tek bir adla eşleşir. İşlemci artık onu neyin izlediğine bakmak ihtiyacını duymaz; c veya d, ikisinden biri kabul edilir.

Daha biçimsel olarak: Bir sonlu durum otomatı, Aho, Sethi ve Ullman'ın [Aho/Ullman] 3.9. bölümündeki 3.5. algoritma gibi standart algoritmalar kullanılarak içerik modelinden oluşturulabilir. Böyle algoritmaların çoğunda, düzenli ifade içindeki her konum (yani, düzenli ifadenin sözdizimi ağacındaki her çocuksuz düğüm) için bir izleme kümesi oluşturulur; eğer bir konum, aynı eleman türü adı ile yaftalanmış birden fazla izleme konumu olan bir izleme kümesine sahipse, içerik modeli hatalıdır ve bir hata olarak raporlanabilir.

Belirlenimci olmayan içerik modellerinin tümü için olmasa da çoğu için modeli özdevinimli olarak eşdeğer belirlenimci modellere indirgeyecek algoritmalar mevcuttur; bkz, Brüggemann-Klein 1991 [Brüggemann-Klein].

E Karakter Kodlamalarının Kendiliğinden Saptanması (Bilgilendirici)

XML karakter kodlaması bildirimi, her öğe üzerinde hangi karakter kodlamasının kullanılacağını belirten bir dahili yafta olarak işlev yapar. XML işlemci dahili yaftayı okumadan önce, hangi karakter kodlamasının kullanımda olduğunu; dahili yaftanın neyi belirtmeyi deneyeceğini bilir. Genel olarak, bu ümitsiz bir durumdur ama XML'de durum tamamen ümitsiz değildir, çünkü XML genel durumu iki yolla sınırlar: her gerçeklenimin karakter kodlamalarının sadece bir sonlu kümesini destekleyeceği varsayılır ve XML karakter kodlaması bildirimi, normal şartlarda her öğede kullanılan karakter kodlamasının kendiliğinden saptanabilmesinin mümkün kılınması aşamasında konum ve içerik bakımından kısıtlanır. Ayrıca, çoğu durumda XML veri akımının kendisine ilaveten diğer bilgi kaynakları da kullanılabilir. XML öğenin, eşlik eden (harici) bir bilgi olsun olmasın işlemciye hazır olup olmadığına bağlı olarak iki durum ayırdedilebilir. Biz ilk durumu önce inceleyeceğiz.

E.1 Harici Kodlama Bilgisi Olmadan Saptama

Her XML öğeye bir harici kodlama bilgisi eşlik etmeyeceğinden ve UTF-8 veya UTF-16 olmayan kodlamanın ilk karakterleri '<?xml' olması gereken bir XML kodlama bildirimi ile başlaması gerektiğinden, bir uyumlu işlemci, aşağıdakilere uygun olarak girdinin en az iki en çok 4 sekizliğinden sonra uygulanacak kodlamayı saptayabilir. UCS-4'te '<' iminin "#x0000003C" ve '?' iminin "#x0000003F" olduğunu ve UTF-16 veri akımlarında gerekli Bayt Sıralama İminin "#xFEFF" olduğunu bilmek bu listenin okunmasında yardımcı olabilir. ## gösterimi iki ardışık ##'ın ikisinin de 00 olamayacağı durum hariç herhangi bir bayt değerini ifade etmekte kullanılmıştır.

Bayt Sıralama İmi ile:

00 00 FE FF UCS-4, kıymetli baytın başta olduğu makine (1234 sırası)
FF FE 00 00 UCS-4, kıymetsiz baytın başta olduğu makine (4321 sırası)
00 00 FF FE UCS-4, yararsız sekizlik sıralama (2143)
FE FF 00 00 UCS-4, yararsız sekizlik sıralama (3412)
FE FF ## ## UTF-16, kıymetli bayt başta
FF FE ## ## UTF-16, kıymetsiz bayt başta
EF BB BF UTF-8

Bayt Sıralama İmi olmaksızın:

00 00 00 3C UCS-4 veya 32 bitlik kodlu başka bir kodlama ve ASCII değer olarak kodlu ASCII karakterler. Bayt sıralamaları yukarıdan aşağı: kıymetli bayt başta (1234), kıymetsiz bayt başta (4321) ve iki yararsız bayt sıralaması (2143 ve 3412). UCS-4 mü yoksa başka bir 32 bitlik kodlama mı uygulanacağına karar vermek için kodlama bildirimi okunmalıdır.
3C 00 00 00
00 00 3C 00
00 3C 00 00
00 3C 00 3F Bayt sıralamaları kıymetli bayt başta olmak üzere, UTF-16, ISO-10646-UCS-2 veya 16 bitlik kodlu başka bir kodlama ve ASCII değer olarak kodlu ASCII karakterler (neyin uygulanacağına karar vermek için kodlama bildirimi okunmalıdır).
3C 00 3F 00 Bayt sıralamaları kıymetsiz bayt başta olmak üzere, UTF-16, ISO-10646-UCS-2 veya 16 bitlik kodlu başka bir kodlama ve ASCII değer olarak kodlu ASCII karakterler (neyin uygulanacağına karar vermek için kodlama bildirimi okunmalıdır).
3C 3F 78 6D UTF-8, ISO 646, ASCII, bazı ISO 8859 kısımları, Shift-JIS, EUC veya ASCII karakterlerin konumların, genişliklerini ve değerlerini koruduğu 7 bitlik, 8 bitlik veya karışık genişlikli başka kodlamalar; bunlardan hangisinin uygulanacağına karar vermek için kodlama bildirimi okunmalıdır, fakat bu kodlamaların hepsi ASCII karakterler için aynı bit örüntüsünü kullandıklarından kodlama bildiriminin kendisi düzgün olarak okunmalıdır.
4C 6F A7 94 EBCDIC (bazı çeşitlerinde; hangi kod sayfasının kullanılacağına karar vermek için kodlama bildiriminin tamamı okunmalıdır)
DiğerKodlama bildirimi olmaksızın UTF-8. aksi takdirde veri akımı yanlış isimlendirilmiştir (gerekli kodlama bildiriminin yokluğu), bozuktur, parça parçadur ya da bir çeşit sarmalayıcı içine alınmıştır.

Not:
Kodlamanın saptanması için kodlama bildiriminin okunmasını gerektirmeyen yukarıdaki durumlarda, Öğelerdeki Karakter Kodlaması bölümü hala kodlama bildiriminin eğer varsa okunmasını ve o kodlama adının öğenin asıl kodlamasıyla eşleşmesine bakılmasını gerektirir. Ayrıca, kodlamayı saptamak için, halihazırda bunun gerekmediği durumlarda, kodlama bildiriminde kullanımı gerekli olacak yeni karakter kodlamalarını türetmek de mümkündür.

Kendiliğinden saptama için bu seviye XML kodlama bildirimini okumakta ve kodlamanın her ailesinin üyelerini tek tek ayırdetmek (yani, UTF-8'den 8859'a ve 8859 kısımlarından başka birine veya kullanılacak belirli bir EBCDIC kod sayfasını ayırdetmek ve benzeri) için gereken karakter kodlaması belirtecini çözümlemekte yeterlidir.

Kodlama bildiriminin içeriği ASCII karakter kümesinden karakterlerle sınırlı olduğundan, bir işlemci kodlama bildiriminin tamamını düzgün olarak okuyup kullanılacak kodlama ailesini hemen saptayabilir. Pratikte, geniş çapta kullanılan karakter kodlamalarının hepsi yukarıdaki kategorilerden birine karşı düştüğünden, XML kodlama bildirimi, harici bilgi kaynakları işletim sisteminde veya aktarım protokolü seviyesinde güvenilir olmasa bile bant içi karakter kodlaması isimlendirmesini oldukça güvenilir kılar. UTF-7 gibi ASCII değerle baytların aşırı yüklenmesine sebep olar karakter kodlamaları güvenilir olarak saptama konusunda başarısızlığa yol açabilir.

İşlemci kullanımdaki karakter kodlamasını saptar saptamaz, her durum için ayrı bir girdi yordamı mı yoksa girdideki her karakter için uygun dönüşüm işlevini mi çağıracağına bağlı olarak uygun davranışta bulunabilir.

Herhangi bir özadlandırmalı sistem gibi XML kodlama bildirimi de, eğer bir yazılım kodlama bildirimini güncellemeden öğenin karakter kümesi veya kodlaması değiştirirse çalışmayacaktır. Karakter kodlaması yordamlarının gerçeklenimcileri öğeyi yaftalamada kullanılan dahili ve harici bilginin doğruluğundan emin olmak konusunda dikkatli olmalıdırlar.

E.2 Harici Kodlama Bilgisinin Varlığında Öncelikler

İkinci olası durum, bazı dosya sistemlerinde veya bazı ağ protokollerindeki gibi XML öğeye kodlama bilgisi eşlik ettiği zaman ortaya çıkar. Çok sayıda elverişli bilgi kaynağı olduğunda bunların göreli önceliklerini ve uyumsuzluklarını işlemede tercih edilen yöntem, XML teslimatında kullanılacak daha yüksek seviyeden bir protokolün parçası olarak belirtilmelidir. Özellikle, lütfen text/xml ve application/xml MIME türlerini tanımlayan ve bu konuda biraz yol gösterici olan [IETF RFC 3023] veya ardıllarına bakınız. Birlikte çalışabilirlik bağlamında, aşağıdaki kural önerilir:

  • Eğer XML öğe bir dosyadaysa, karakter kodlamasını (varsa) saptamada Bayt Sıralama İmi ve kodlama bildirimi kullanılır.

F W3C XML Çalışma Grubu (Bilgilendirici)

Bu belirtim yayına W3C XML Çalışma Grubu (ÇG) tarafından hazırlanmış ve onaylanmıştır. Bu belirtimin ÇG onayı tüm ÇG üyelerinin oylarının gerektiği anlamına gelmez. XML ÇG'nin şimdiki ve sabık üyeleri:

G W3C XML Çekirdek Çalışma Grubu (Bilgilendirici)

Bu belirtimin ikinci düzeltmesi W3C XML Çekirdek Çalışma Grubu (ÇG) tarafından hazırlandı. Bu belirtimin yayınlanması sırasında ÇG katılımcıları şunlardı:

H Üretim Bilgileri (Bilgilendirici)

Bu ikinci düzeltme (İngilizce olan özgün belge), XMLspec DTD, 2.10 sürümü çok az değiştirilerek kodlandı. XHTML sürümleri, birbirlerinin devamı niteliğindeki xmlspec.xsl, diffspec.xsl, ve REC-xml.xsl XSLT biçembentleri ile üretildi.

Bu çeviri ise, özgün XMLspec belgesi üzerinde yapılmış olup, çevirinin XHTML sürümü bu belgeye özel olan xml11.xsl ve bütün önerge çevirileri için geçerli olan xmlspec-tr.xsl XSLT biçembentleri ile üretilmiştir.

I XML Adları için Öneriler (Bilgilendirici)

Belge yazarlarına ve şema tasarımcılarına bir rehber niteliğinde tasarlanan bu bölümde, eleman isimleri, öznitelik isimleri, işlem yönergesi hedefleri, öğe isimleri, gösterim isimleri ve ID türünden değerler olarak kullanılan XML adlarını oluşturmakta en iyi uygulamalar olduğuna inanılan önerilere yer verilmiştir. Unicod'a yapılan bütün atıflar, Unicode Standardının 3.0 sürümüne eşit veya ondan büyük bir sürümü ile ilgili olarak ele alınmalıdır; hangi sürümün kullanılacağı belge yazarına veya şema tasarımcısına bırakılmıştır.

İlk iki öneri, tüm denetim karakterleri, kapsayıcı boşluksuz imler, ondalık olmayan sayılar, özel-kullanım karakterleri, noktalama karakterleri (istisnalarla), simge karakterleri, atanmamış kod değerleri ve boşluk karakterleri hariç olmak üzere doğrudan Unicode Standardının 3.0 sürümündeki betimleyiciler için belirtilmiş kurallardan türetilmiştir. Diğer önerilerin çoğu [XML-1.0]'ın B. Ekinden türetilmiştir.

  1. Herhangi bir ismin ilk karakteri Ll, Lu, Lo, Lm, Lt veya Nl Unicode Genel Kategorilerinden birinde veya '_' #x5F olmalıdır.

  2. İlk karakter dışında kalan karakterler, Ll, Lu, Lo, Lm, Lt, Mc, Mn, Nl, Nd, Pc veya Cf Unicode Genel Kategorilerinden birinde veya şunlardan biri olmalıdır: '-' #x2D, '.' #x2E, ':' #x3A veya '·' #xB7. Cf karakterleri doğrudan görünür olmadıklarından dikkatle ve sadece gerektiğinde kullanılmalıdır.

  3. Kurallı bir oluşuma sahip kavram karakterleri isimlerde kullanılmamalıdır (12 tanesi hariç [#xF900-#xFAFF] ve [#x2F800-#x2FFFD] aralıkları).

  4. Bir uyumluluk oluşumuna sahip karakterler (Unicode Karakter Veritabanının 5. alanında 2uyumluluk biçimleme etiketli olanlar -- 5. alan tarafından <" ile başlayan şeklinde imli) isimlerde kullanılmamalıdır. Bu öneri, uyumluluk oluşumları bu betiklerde düzenli kullanılmasına rağmen #x0E33 THAI CHARACTER SARA AM veya #x0EB3 LAO CHARACTER AM karakterlerine uygulanmaz.

  5. Sadece simgelerle [#x20D0-#x20EF] ve [#x1D165-#x1D1AD]) aralıklarındakiler dahil) kullanmak için olan aksan karakterleri isimlerde kullanılmamalıdır.

  6. Satır arası ek açıklama karakterleri ([#xFFF9-#xFFFB]) isimlerde kullanılmamalıdır.

  7. Düzenli değişiklik seçim karakterleri isimlerde kullanılmamalıdır.

  8. Saçma, telaffuz edilemeyen, okunması zor veya başka isimlerle kolayca karıştırılabilecek isimler kullanılmamalıdır.