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ü
Copyright © 2006 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
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.
Telif Hakkı © 2006 W3C® (MIT, INRIA, Keio), Tüm hakları saklıdır. W3C sorumluluk reddi, ticari marka, belge kullanımı ve yazılım lisanslama kuralları uygulanır.
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.
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 dördüncü düzeltme XML'nin yeni bir sürümü değildir. Okuyuculara kolaylık olsun diye, (http://www.w3.org/XML/xml-V10-3e-errata adresinde) biriken hata raporlarının gerektirdiği değişikliklerin XML 1.0'ın 4 Şubat 2004 tarihli üçüncü düzeltmesine uygulanmış halidir. Ayrıca, üçüncü düzeltmede 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 dördüncü sürüm için http://www.w3.org/XML/xml-V10-4e-errata adresinde bir hata raporları listesi mevcuttur.
http://www.w3.org/XML/2006/06/xml10-4e-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.
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.
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.
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:
XML, Genel Ağ'da düz mantıkla (doğrudan doğruya) kullanılabilmelidir.
XML, geniş çapta çok çeşitli uygulamayı destekleyecektir.
XML, SGML ile uyumlu olacaktır.
XML belgeleri işleyen programları yazmak kolay olacaktır.
XML'deki isteğe bağlı özellikler olabildiğince az, hatta sıfır olmalıdır.
XML belgeler insanlar için okunaklı olacaktır.
XML tasarımı çabucak yapılabilecektir.
XML tasarımı özlü ve biçimsel olacaktır.
XML belgeler kolayca oluşturulabilecektir.
XML imlenimin kısalığı asgari önemdedir.
Bu belirtim, ilgili standartlarla birlikte, XML 1.0'ı 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.
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:
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
Bir metin nesnesinin iyi biçimli bir XML belge olması için:
Bir bütün olarak, belge
sözdizimiyle eşleşmelidir.
Bu belgede verilen bütün iyi biçimlilik kurallarına uygun olmalıdır.
Belgede doğrudan veya dolaylı gönderim yapılan çözümlü öğelerin her biri iyi biçimli olmalıdır.
[1] | belge | ::= |
|
Bir XML belgenin belge
sözdizimiyle eşleşmesi için:
Bir veya daha fazla eleman içermelidir.
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.
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:2000 [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.
[2] | Kark | ::= | #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] | /* İkame bloklar, FFFE ve FFFF hariç Unicode karakterler. */ |
Karakter kodlarını bit kalıpları halinde kodlayan mekanizmalar öğeden öğeye değişiklik gösterebilir. Tüm XML işlemcilerinin Unicode 3.1'in [Unicode3] 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.
[#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].
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.
[3] | B | ::= | (#x20 | #x9 | #xD | #xA)+ |
#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.Karakterler kolaylık olsun diye harfler, rakamlar ve diğer karakterler şeklinde sınıflanmıştır. Bir harf, bir alfabetik karakter olabileceği gibi, kök hece karakteri veya bir kavramı simgeleyen karakter olabilir. Her sınıfa özgü karakterlerlerin tam dökümü Karakter Sınıfları bölümünde verilmiştir.
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.
Bir ad dizgeciği
isim karakterlerinin bir karışımıdır.
[4] | AdKark | ::= |
|
[5] | Ad | ::= | ( |
[6] | Adlar | ::= |
|
[7] | AdDizge | ::= | ( |
[8] | AdDizgeler | ::= |
|
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 SistemSabiti
nin imlenim taranmaksızın çözümlenebileceğine dikkat ediniz.
[9] | ÖğeDeğeri | ::= | '"' ([^%&"] | |
| "'" ([^%&'] | | |||
[10] | ÖznitDeğeri | ::= | '"' ([^<&"] | |
| "'" ([^<&'] | | |||
[11] | SistemSabiti | ::= | ('"' [^"]* '"') | ("'" [^']* "'") |
[12] | GenidSabiti | ::= | '"' |
[13] | GenidKark | ::= | #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%] |
Öğ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.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 "&
" ve "<
" dizgeleri olarak görünmelidirler ZORUNLU. Açılı sağ ayraç (>), ">
" 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 ">
" 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ı olan "]]>
" dizgesini içermeyen bir karakter dizgesidir.
Öznitelik değerlerinin tek ve çift tırnakları içermesini sağlamak için, tek tırnak karakteri ('), "'
" ile ve çift tırnak tarakteri ("), ""
" ile gösterilebilir.
[14] | KarkVeri | ::= | [^<&]* - ([^<&]* ']]>' [^<&]*) |
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.
[15] | Açıklama | ::= | '<!--' (( |
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--->
İşlem yönergeleri (İng: Processing Instruction) belgelerde uygulamaya yönelik yönergelerin bulunmasını sağlar.
İşlem yönergeleri[16] | PI | ::= | '<?' |
[17] | PIHedefi | ::= |
|
İş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.
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:
[18] | CDATABölümü | ::= |
|
[19] | CDATABaşl | ::= | '<![CDATA[' |
[20] | CDATAVerisi | ::= | ( |
[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; "<
" ve "&
" 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>]]>
XML belgelerin kullanılan XML sürümünün belirtildiği bir XML bildirimi ile başlamaları ÖNERİlir. Örneğin, aşağıdaki eksiksiz bir XML belgesidir, iyi biçimlidir ama geçerli değildir:
<?xml version="1.0"?> <greeting>Merhaba, Dünyalı!</greeting>
keza bu da:
<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 | ::= |
|
[23] | XMLBild | ::= | '<?xml' |
[24] | SürümBilgisi | ::= |
|
[25] | Eşittir | ::= |
|
[26] | SürümNum | ::= | '1.0' |
[27] | Muhtelif | ::= |
|
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' | [GK: Kök Eleman Türü] |
[İBK: Harici Altküme] | ||||
[28a] | BildAyr | ::= |
| [İBK: Bildirimler arasında Parametre Öğeleri] |
[28b] | içAltKüme | ::= | ( | |
[29] | imlenimBild | ::= |
| [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.
belgetürübild
içindeki Ad
, kök eleman türündeki elemanla eşleşmelidir ZORUNLU.
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.
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.)
Bir harici altküme (varsa), dışAltKüme
sözdizimiyle eşleşmelidir ZORUNLU.
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.
[30] | dışAltKüme | ::= |
|
[31] | dışAltKümeBild | ::= | ( |
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.0"?> <!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.0" 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.
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 | ::= |
| [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.
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.0" standalone='yes'?>
İ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.
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, iki karakterlik #xD #xA
dizilimi ve ardından bir #xA
gelmeyen #xD
karakteri tek bir #xA
karakterine dönüştürülerek normalleştirilmiş gibi davranmalıdır ZORUNLU.
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ßem Bemü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 üstküme 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.
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'>
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 | ::= |
| |
| | [İ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.
Bir elemanın bitiş etiketindeki Ad
ile başlangıç etiketindeki eleman türünün eşleşmesi ZORUNLUdur.
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:
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).
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.
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.
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.
Boş olmayan her XML elemanının başlangıcı bir başlangıç etiketi ile imlenir.
Başlangıç Etiketi[40] | BaşlEtiketi | ::= | '<' | [İBK: Eşsiz Öznitelik Belirtimi] |
[41] | Öznitelik | ::= |
| [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 Ad
a ö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.
Bir öznitelik ismi aynı başlangıç veya boş eleman etiketinde birden fazla yer almamalıdır ZORUNLU.
Ö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.)
Öznitelik değerleri doğrudan veya dolaylı olarak harici öğelere öğe gönderimleri içermemelidir ZORUNLU.
<
İçermemeliBir ö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 | ::= | '</' |
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 | ::= |
|
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:
[44] | BoşElemEtiketi | ::= | '<' | [İ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 />
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' | [GK: Eşsiz Eleman Türü Bildirimi] |
[46] | içerikBelirtimi | ::= | 'EMPTY' | 'ANY' | |
Burada Ad
bildirdiği elemanın türüdür.
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>
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:
[47] | çocuklar | ::= | ( | |
[48] | içerikparçacığı | ::= | ( | |
[49] | seçim | ::= | '(' | [GK: Düzgün Gruplama/Parametre Öğesi İç İçeliği] |
[50] | sıra | ::= | '(' | [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.
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;)*>
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 | ::= | '(' | |
| '(' | [GK: Düzgün Gruplama/Parametre Öğesi İç İçeliği] | |||
[GK: Türler Yinelenmemeli] |
Buradaki Ad
lar çocuk elemanların türleridir. #PCDATA anahtar sözcüğü ezelden beridir "parsed character data" (çözümlenmiş karakter verisi) sözcüklerinden türetilmektetir.
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)>
Ö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' |
[53] | ÖznitTanımı | ::= |
|
Ö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.
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ü | ::= |
| |
[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ı] |
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.
Bir eleman türü için birden fazla ID özniteliği belirtilemez ZORUNLU.
Bir ID özniteliğinin #IMPLIED veya #REQUIRED öntanımlısı ile bildirilmesi ZORUNLUdur.
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.
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.
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 | ::= |
| |
[58] | GösterimTürü | ::= | 'NOTATION' | [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 | ::= | '(' | [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.
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.
Bir eleman türü içinde birden fazla NOTATION özniteliği belirtilemez ZORUNLU.
Uyumluluk için, NOTATION türünden bir öznitelik EMPTY ile bildirilmiş bir elemanda bildirilemez ZORUNLU.
Gösterim adlarının müstakilen tek bir GösterimTürü
öznitelik bildiriminde gözükmesi ZORUNLU olup AdDizge
ciklerinin de müstakilen tek bir Sayım
öznitelik bildiriminde gözükmesi ZORUNLUdur.
Bu türden değerlerin bildirimdeki AdDizge
ciklerinden biri ile eşleşmesi ZORUNLUdur.
Birlikte çalışabilirlik için, aynı AdDizge
ciğinin bir eleman türünün sayısı sabit öznitelik türlerinde birden fazla gözükmemesi ÖNERİlir.
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' | [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ğeri
nin 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.
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.
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ür
deyse (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.
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">
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.
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.
Boş dizgeden oluşan bir normalleştirilmiş değerle başlar. (?)
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 "
"> <!ENTITY a "
"> <!ENTITY da "
">
ö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 belirtimi | NMTOKENS olarak a | CDATA olarak a |
---|---|---|
a=" xyz" |
x y z |
#x20 #x20 x y z |
a="&d;&d;A&a; &a;B&da;" |
A #x20 B |
#x20 #x20 A #x20 #x20 #x20 B #x20 #x20 |
a= "

A

B
" |
#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.
Ş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ü | ::= |
| |
[62] | includeBölümü | ::= | '<![' | [GK: Düzgün Şart Bölümü/Parametre Öğesi İç İçeliği] |
[63] | ignoreBölümü | ::= | '<![' | [GK: Düzgün Şart Bölümü/Parametre Öğesi İç İçeliği] |
[64] | ignoreBlmİçeriği | ::= |
| |
[65] | Yoksayılan | ::= |
|
"<![
", "[
" 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?)> ]]>
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.
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] |
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.
[67] | Gönderim | ::= |
| |
[68] | ÖğeGönd | ::= | '&' | [İBK: Öğe Bildirilmeli] |
[GK: Öğe Bildirilmeli] | ||||
[İBK: Çözümlü Öğe] | ||||
[İBK: Özyineleme Yapılmamalı] | ||||
[69] | ParÖğeGönd | ::= | '%' | [GK: Öğe Bildirilmeli] |
[İBK: Özyineleme Yapılmamalı] | ||||
[İBK: DTD İçinde Olmalı] |
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.
"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.
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.
Bir çözümlü öğe dolaylı yada dolaysız kendisine atıf yapmamalıdır ZORUNLU.
Parametre öğe gönderimleri DTD dışında kullanılmamalıdır ZORUNLU.
Karakter ve öğe gönderimi örnekleri:
Seçenekleri kaydetmek için <key><</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;
Öğeler bu tanımla eşleşecek şekilde bildirilir:
Öğe Bildirimi[70] | ÖğeBild | ::= |
|
[71] | GenÖğeBild | ::= | '<!ENTITY' |
[72] | ParÖğeBild | ::= | '<!ENTITY' |
[73] | ÖğeTanımı | ::= |
|
[74] | ParÖğeTanımı | ::= |
|
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.
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.">
Bir öğe dahili değilse bir harici öğedir ve şöyle bildirilir:
Harici Öğe Bildirimi[75] | HariciID | ::= | 'SYSTEM' | |
| 'PUBLIC' | ||||
[76] | NDataBild | ::= |
| [GK: Gösterim Bildirilmeli] |
Eğer NDataBild
mevcutsa, o bir genel çözümlenmemiş öğedir; aksi takdirde çözümlü öğedir.
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:
Öncelenecek her karakter [Unicode3] UTF-8 içinde bir veya daha fazla baytlı olacak şekilde ifade edilir.
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).
Ö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 >
Harici çözümlü öğelerin her birinin bir metin bildirimi ile başlaması ÖNERİlir.
Metin Bildirimi[77] | MetinBild | ::= | '<?xml' |
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.
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.
[78] | dışÇözümlüÖğe | ::= |
|
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.
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, [Unicode3]'in 2.7. bölümünde, [Unicode]'un 2.4. bölümünde ve [ISO/IEC 10646:2000]'nin H. ekinde 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 | ::= |
| |
[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 MetinBild
iriminin 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 3.1'de [Unicode3] 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'?>
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:
içerik
sözdizimine karşılıktır.ÖznitDeğeri
sözdizimine karşılıktır.Ad
olarak.ÖğeDeğeri
sözdizimine karşılıktır.Öğ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 | ||||
Parametre | Dahili Genel | Harici Çö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 |
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.
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&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.
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.
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.
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;>
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.
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.
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.
Öğ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 "Éditions Gallimard" > <!ENTITY rights "All rights reserved" > <!ENTITY book "La Peste: Albert Camus, © 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.
Öğ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 "<
" ve "&
" 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 "&#60;"> <!ENTITY gt ">"> <!ENTITY amp "&#38;"> <!ENTITY apos "'"> <!ENTITY quot """>
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' | [GK: Gösterim Adının Eşsizliği] |
[83] | PublicID | ::= | 'PUBLIC' |
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.)
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.
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.
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:
Belli başlı iyi biçimlilik hataları, özellikle harici öğelerin okunmasını gerektirenler, geçerlilik sınaması yapmayan işlemciler tarafından saptanamayabilir. Öğe Bildirilmeli, Çözümlü Öğe ve Özyineleme Yapılmamalı başlıklı kuralları içerenler yanında Öğelerin ve Gönderimlerin XML İşlemcide Ele Alınışları bölümünde yasak olarak açıklanan durumların bazıları örnek olarak verilebilir.
İşlemciden uygulamaya aktarılan bilgi, işlemcinin parametre ve harici öğeleri okuyup okumamasına bağlı olarak değişebilir. Örneğin geçerlilik sınaması yapmayan bir işlemci, harici veya parametre öğelerindeki bildirimlerin okunmasına/okunmamasına bağlı olarak, öznitelik değerlerini normalleştirmede, dahili öğelerin ikame metnini içermede ve öntanımlı öznitelik değerlerini sağlamada başarısız olabilir.
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.
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
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"
'dizge'
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?
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:
/* ... */
[ İBK: ... ]
[ GK: ... ]
Unicode standardında tanımlı olan aşağıdaki karakteristiklerde, karakterler, temel karakterler (bu sınıf Latin alfabesinde bulunan alfabetik karakterleri de içerir), kavramsal semboller, birleşim karakterleri (bu sınıf aksan karakterlerini de içerir) olarak sınıflanmıştır. Rakamlar ve uzatıcılar ayrıca belirtilmiştir.
Karakterler[84] | Harf | ::= |
|
[85] | TemelKark | ::= | [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6]
| [#x00D8-#x00F6] | [#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E]
| [#x0141-#x0148] | [#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0]
| [#x01F4-#x01F5] | [#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1]
| #x0386 | [#x0388-#x038A] | #x038C | [#x038E-#x03A1]
| [#x03A3-#x03CE] | [#x03D0-#x03D6] | #x03DA | #x03DC
| #x03DE | #x03E0 | [#x03E2-#x03F3] | [#x0401-#x040C]
| [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | [#x0490-#x04C4]
| [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | [#x04EE-#x04F5]
| [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | [#x0561-#x0586]
| [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | [#x0641-#x064A]
| [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | [#x06D0-#x06D3]
| #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D
| [#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8]
| [#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD]
| [#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10]
| [#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36]
| [#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74]
| [#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8]
| [#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD
| #x0AE0 | [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28]
| [#x0B2A-#x0B30] | [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D
| [#x0B5C-#x0B5D] | [#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90]
| [#x0B92-#x0B95] | [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F]
| [#x0BA3-#x0BA4] | [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9]
| [#x0C05-#x0C0C] | [#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33]
| [#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90]
| [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE
| [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28]
| [#x0D2A-#x0D39] | [#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30
| [#x0E32-#x0E33] | [#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84
| [#x0E87-#x0E88] | #x0E8A | #x0E8D | [#x0E94-#x0E97]
| [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5 | #x0EA7
| [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3]
| #x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69]
| [#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103]
| [#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112]
| #x113C | #x113E | #x1140 | #x114C | #x114E | #x1150
| [#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163
| #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | [#x1172-#x1173]
| #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF]
| [#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB
| #x11F0 | #x11F9 | [#x1E00-#x1E9B] | [#x1EA0-#x1EF9]
| [#x1F00-#x1F15] | [#x1F18-#x1F1D] | [#x1F20-#x1F45] | [#x1F48-#x1F4D]
| [#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | [#x1F5F-#x1F7D]
| [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | [#x1FC2-#x1FC4]
| [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | [#x1FE0-#x1FEC]
| [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | [#x212A-#x212B]
| #x212E | [#x2180-#x2182] | [#x3041-#x3094] | [#x30A1-#x30FA]
| [#x3105-#x312C] | [#xAC00-#xD7A3] |
[86] | KavramKark | ::= | [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029] |
[87] | BileşimKark | ::= | [#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486]
| [#x0591-#x05A1] | [#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF
| [#x05C1-#x05C2] | #x05C4 | [#x064B-#x0652] | #x0670
| [#x06D6-#x06DC] | [#x06DD-#x06DF] | [#x06E0-#x06E4] | [#x06E7-#x06E8]
| [#x06EA-#x06ED] | [#x0901-#x0903] | #x093C | [#x093E-#x094C]
| #x094D | [#x0951-#x0954] | [#x0962-#x0963] | [#x0981-#x0983]
| #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | [#x09C7-#x09C8]
| [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02
| #x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48]
| [#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC
| [#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03]
| #x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D]
| [#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8]
| [#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44]
| [#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83]
| [#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6]
| [#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D]
| #x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E]
| #x0EB1 | [#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD]
| [#x0F18-#x0F19] | #x0F35 | #x0F37 | #x0F39 | #x0F3E
| #x0F3F | [#x0F71-#x0F84] | [#x0F86-#x0F8B] | [#x0F90-#x0F95]
| #x0F97 | [#x0F99-#x0FAD] | [#x0FB1-#x0FB7] | #x0FB9
| [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | #x3099
| #x309A |
[88] | Rakam | ::= | [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9]
| [#x0966-#x096F] | [#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF]
| [#x0B66-#x0B6F] | [#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF]
| [#x0D66-#x0D6F] | [#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29] |
[89] | Uzatıcı | ::= | #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640
| #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] | [#x309D-#x309E]
| [#x30FC-#x30FE] |
Burada tanımlı karakter sınıfları Unicode 2.0 karakter veritabanından aşağıdaki gibi türetilebilir:
Ad başlatma karakterleri Ll, Lu, Lo, Lt, Nl sınıflarından birine sahip olmalıdır.
Ad başlatma karakterleri dışında kalan ad karakterleri Mc, Me, Mn, Lm veya Nd sınıflarından birine sahip olmalıdır.
Uyumluluk bölgesindeki karakterlere (yani, #xF900 > yasak_karakterler > #xFFFE) XML isimlerinde izin verilmez.
Bir fonta veya uyumluluk ayrışımına tabi karakterlere izin verilmez (veritabanının 5. alanında "uyumluluk biçimleme etiketi" olanlar -- 5. alan tarafından imli olup "<" ile başlayanlar).
[#x02BB-#x02C1], #x0559, #x06E5, #x06E6 karakterleri ad karakterlerinden ziyade ad başlatma karakterleri olarak ele alınırlar, çünkü özellik dosyası bunları alfabetik olarak sınıflamaktadır.
#x20DD-#x20E0 karakterleri hariç tutulmuştur (Unicode 2.0, 5.14. bölüm gereğince).
#x00B7 karakteri bir uzatıcı olarak sınıflanmıştır, çünkü özellik listesinde böyle betimlenmektedir.
#x0387 karakteri bir ad karakteri olarak eklenmiştir, çünkü #x00B7 karakteri kurallar gereği eşdeğeridir.
':' ve '_' karakterlerine ad başlatma karakterleri olarak izin verilmiştir.
'-' ve '.' karakterlerine ad karakterleri olarak izin verilmiştir.
XML, her XML belgenin ayrıca SGML uyumlu olması için SGML'nin bir alt kümesi olarak tasarlanmıştır. XML belgeleri SGML belgelerden ayıran ek kısıtlamalar ve ayrıntılı bir karşılaştırma için [Clark]'a bakınız.
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;) sayısal olarak (&#38;#38;) veya bir genel öğe olarak (&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 (&) sayısal olarak (&#38;) veya bir genel öğe olarak (&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 (&) veya bir genel öğe olarak (&) 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.0'?> 2 <!DOCTYPE test [ 3 <!ELEMENT test (#PCDATA) > 4 <!ENTITY % xx '%zz;'> 5 <!ENTITY % zz '<!ENTITY becerikli "hataya eğilimli" >' > 6 %xx; 7 ]> 8 <test>Bu örnek &becerikli; bir yöntemi göstermektedir.</test>
İşlemler şöyle yürür:
4. satırda, 37. karaktere gönderim hemen yerine getirilir ve "xx
" parametre öğesi sembol tablosunda "%zz;
" değeri ile saklanır. İkame metin henüz taranmamış olduğundan "zz
" parametre öğesine gönderim tanınmayacaktır. (Ve "zz
" henüz bildirilmemiş olacağından bir hata oluşacaktır.)
5. satırda, "<
" karakter gönderimi hemen yerine getirilir ve "zz
" parametre öğesi iyi biçimli bir öğe bildirimi olan "<!ENTITY becerikli "hataya eğilimli">
" ikame metni ile saklanır.
6. satırda, "xx
" öğesine gönderim tanınır ve "xx
" öğesinin ikame metni (yani, "%zz;
") çözümlenir. Ardından "zz
" öğesine gönderim tanınır ve ikame metni ("<!ENTITY becerikli "hataya eğilimli">
") çözümlenir. "becerikli
" genel öğesi bundan böyle "hataya eğilimli
" ikame metni ile bildirilmiş olur.
8. satırda "becerikli
" genel öğesi tanınır ve yorumlanır. Böylece test
elemanının içeriği kendini açıklayan Bu örnek hataya eğilimli bir yöntemi göstermektedir. dizgesi olur.
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].
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.
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ğer | Kodlama 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. |
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.
İ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.
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:
Bu belirtimin dördüncü 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ı:
Bu dördüncü düzeltme (İngilizce olan özgün belge), XMLspec DTD, v2.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 xml.xsl ve bütün önerge çevirileri için geçerli olan xmlspec-tr.xsl XSLT biçembentleri ile üretilmiştir.