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, 4.3.2 İ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 A.1 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 4.3.3 Öğ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. 2.11 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 I 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, 3.3.1 Ö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 4 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, 3.4 Ş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) B 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 B 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, B Karakter Normalleştirme Tanımları bölümünde açıklandığı gibi dahili normalleştirmeli biçimde olduğu doğrulandıktan sonra B 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 3.3 Ö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 D 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 3.1 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 3.3.3 Ö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