XML Hakkında Bilgi XML nedir? XML nedir? XML (Genişletilebilir İşaretleme Dili) web in işlevselliğini geliştirmek için dizayn edilmiş esnek ve uygulanabilir bilgi tanımlama dilidir.HTML gibi statik ve önceden tanımlanmış bir forma sahip olmayan XML , diğer dillerin tanımlanabildiği bir meta-dildir.Bu sayede değişik tipte dokümanlar için kendi işaretleme dilinizi geliştirebilirsiniz. XML ne için kullanılır XML , SGML in web üzrinde kolayca kullanılması için geliştirilmiştir.Doküman türlerinin kolayca tanımlanmasında , SGML tanımlı dokümanların kolay yönetimi ve yazımı ve web üzerinden kolay transferi için bulunmaktadır. XML herhangi yapısal bilginin saklanmasında ve farklı işleme ortamlarında bilginin transferinin mümkün olmadığı koşullarda bilginin evrensel yapılandırılması için kullanılmaktadır. SGML nedir? SGML farklı türdeki ve yapıdaki dokümanların tanımlanması için kullanılan uluslarası bir standarddır(ISO8879:1985). SGML , insan aktivitelerinin bulunduğu tüm farklı doküman türlerinde gerçek konuşma dili ile yazılmış , eski Mısır dilindeki inşaa tanımlarından günümüzdeki hayalet uçak teknik dokümantasyonuna; bir hastanın klinik raporundan bir müziğin notasına kadar doküman içeriğinin belirlenmesinde kullanılmaktadır. SGML çok büyük,güçlü ve karmaşıktır.Son yıllarda endüstriyel ve ticari kullanımda olmasına karşın SGML kullanımı uzmanlık ve kendisini kullanabilecek programların detaylı olmasını gerektirmektedir.XML , SGML in küçültülmüş bir versiyonu olmakla beraber web ortamında implemente edilmesi çok zor olan SGML özelliklerini ortadan kaldırmıştır. SGML i doküman tanımlamak için izleyen ilk işaretleme dili HTML olmuştur.Basit yapısı , HTML in çok popular hale gelmesine yol açmış ve bu sayede HTML , web in temelini oluşturmaya başlamıştır. HTML yi izleyen ve bilginin temsil edilmesi için farklı doküman tanımlama ve veri yapısı oluşturma metodolojisi , HTML in bu çok basit yapısının yetersizliğinden kaynaklanmaktadır. HTML yi izleyen yıllarda Java ve Javascriptin uygulamaları , sunucu taraflı dinamik HTML sayfaları oluşturan CGI programları ve CSS ve DHTML gibi teknolojiler geliştirildi.Bu teknolojiler HTML in yeteneklerini geliştirmek için geliştirilmiş olsa da bu yöndeki sıkıntıyı daha da açığa çıkardılar. Sonuçta XML geliştirildi. XML Yapısı XML , yapısının tamamen kullanıcı tarafından oluşturulduğu ve verinin tanımı için DTD(Doküman Tipi Tanımı) yapıları ile içerisinde kullanılacak verinin ve yapısının yapıldığı işaretleme dilidir. Mesela günümüzde cep telefonlarında kullanılan WAP sayfalarının tanımları , XML meta dilinden türetilmiş olan WML dili ile yazılmaktadır. XML Kullanımı ve işleme XML in kullanımı için çok sayıda teknik bulunmaktadır.Buna bir giriş yapmak için XML veri adaları ile başlayalım. XML Veri Adaları , bir HTML sayfasında xml ile yapılan veri tanımının gömülü olması demektir.XML deklarasyonu <XML ID=’XXX’> Tanım …. </XML> şeklinde bir tek değer bağlayıcısı ile yapılarak daha sonra HTML belgeisi içerisinde XML tanımının tanımlayıcısı referans gösterilerek , HTML belgesinden XML verisinin kullanımı gerçekleştirilebilir. <XML ID = ‘XXX’ SRC=’XML dokümanının ismi’></XML> XML içeriğinde kullanılan elemanlar ve özelliklerinin kullanımlarından once tanımlanmış olmaları gerekmektedir. Ayrıca doğruluk denetimleri ve XML belgesinin bu doğruluk denetimlerine uygunluğu ve geçerlilik koşulları da bulunmaktadır. DTD(Doküman tipi tanımı) DTD , XML belgelerinde kullanılan elemanların uygulamadan uygulamaya fark gösterebilmesi nedeniyle önceden tanımlanması için kullanılan stamdarddır.DTD , XML dosyasının içerisinde ya da bulunduğu yerin adresinin belirtilmesi yolu ile harici olarak XML belgesi ile ilişkilendirilebilir. <?XML version=”1.0”?> <!DOCTYPE ucak SYSTEM “ucak.dtd”> <ucak> <motor> Jet </motor> <tip> A130 </tip> </ucak> Kullanılan herhangi bir XML Parser(XML Ayrıştırıcı) yukarıdaki gibi bir doküman ile karşılaştığında , tanımların belirlenen ucak.dtd içerisinde yapıldığını anlamaktadır. Yukarıdaki örneğin DTD tanımı izleyen şekilde yapılabilir.Bu tanımların oluşturulma yapıları daha sonar XML grameri bölümlerinde ayrıntılı bir şekilde işlenecektir. <!ELEMENT ucak(motor,tip)> <!ELEMENT motor (#PCDATA)> <!ELEMENT tip (#PCDATA)> Yukarıda sözü geçen kavramların işlenmesi: İŞLEME XML Belgesi ___________ XML PARSER XML DTD Belgesi ___________ StyleSheet(CSS) ___________ StyleSheet İM Şeklinde gerçekleştirilmektedir. XML Parser Modelleri XML birbirinden bağımsız uygulamalar arasında bir veri transferi standardı haline geldiğinden içerisinde belirtimi yapılan verinin içinden çekilip alınması gerekmektedir.XML Parse(Ayrştırma) etme işlemi , XML belgesinin içerisinden , onu kullanacak uygulamanın anlayacağı verinin üretilmesi işlemidir. Uygulamaların XML işleyicilerinden gelen bilgileri ele alabilmeleri üretilen uygulamanın üretimlesi ve oluşturtulan arayüz ile mümkündür.SAX(XML için Basit API) ve DOM(Doküman Nesne Modeli) bu iş için standarda bağlanmış arayüzler olmakla beraber farklı bir API a bağlı bir XML Parser da kullanılabilmektedir.Kullanılan API lar ağaç yapısı tabanlı ve event-drıven olarak iki yapıya sahiptirler. DOM standardında olduğu ilk türde XML belgesinde sunulan belgenin kök elemandan başlayarak bir ağaç yapısına dönüştürülmesi ve XML ile temsil edilen verinin uygulama tarafından kullanılması esnasında , bu ağaç yapısını kullanılması sağlanır. SAX API ve aynı yapıdaki diğer API tanımları ise parse işlemi sırasında karşılaşılan tüm olayları(event) anında uygulamaya bildirirler. Bu şekilde bir ağaç yapısına gerek kalmadığı gibi uygulama programları ortaya çıkabilecek olaylar karşısında ne yapmaları gerektiği ile ilgili event-handler tanımlarını kendileri belirtmel zorundadır. SAX SAX , W3C Konsorsiyomu dışında yer alan XML standardlarından birisidir. Zayıf sistemlerdeki hafıza kısıtlaması durumlarında çok büyük dokümanların parse işlemi bugün SAX ile gerçekleştirilmektedir. SAX prosesi izleyen şekildedir XML Parser belgeyi taradığı sırada sonuçları SAX a gönderir ; bu esnada SAX dokümanda karşılaşılan her etiket tanımı için içsel olarak event ler oluşturur.Uygulama kendi içerisinde tanımlanan eventlere gore ele alma işlemini kendisi geröekleştirmektedir.İşlemlerin gerçekleştirilmesi ve XML Validasyonu uygulamanın kendisi tarafından yapıldığından tüm belgenin hafızaya yüklenmesi gerekmemektedir. Örnek: <?xml version="1.0"?> <otomobil> <guc>Beygir</guc> </otomobil> SAX Parser yukarıdaki XML belgesinin parse edilmesi sırasında izleyen olayları oluşturmaktadır. startDocument startElement: otomobil startElement: guc characters: Beygir endElement: guc endElement: otomobil endDocument SAX istemci uygulaması ilgilendiği her olaya karşılık gelen bir servis sağlayarak belgeyi işleyebilir. DOM(Doküman Nesne Modeli) DOM modeli , W3C Konsorsiyomu tarafından kabul edilmiş olan doküman yapısı için bir API dır.Programcıların dokümanın bileşenlerini slime,ekleme,değiştirmesini kolaylaştıran bu yapı ayrıca özellik ve stil düzenlemede de oldukça yardımcı bir arayüzdür.DOM her türlü tarayıcı ve sunucuda ve tüm platformlarda çalışabilecek uygulamalar geliştirilmesini sağlamaktadır. DOM mimarisi herbiri belirli bir bölgeyi içeren birden çok mdüle bölünmüştür.DOM API tarafından içerilen bu bölümler XML,HTML,CSS ve ağaç yapılarını içermektedir.İleride içerilebilecek bölümler arasında giriş dokümanından farklılık gösterebilecek olan gösterim dokümanları ve kullanıcı fonksiyonları yer almaktadır. 1998 yılında çıkan ilk DOM versiyonu XML 1.0 ve HTML 4.0 ile uyumluluk göstermekte ve aşağıdaki mimariye sahipti. İzleyen yıl 2000 yılın Kasım ayında DOM 2 spesifikasyonu sunulmuş ve XML 1.0 a isim uzayo desteği verilmiştir.Bunun yanısıra CSS desteği verilmiş ve birazdan tanımını vereceğimiz ağaç yağısı işleme mekanizmaları sunulmuştur.DOM 2 mimarisi aşağıdaki şekilde oluşturulmuştur. DOM 3 bunların yazıldığı anda hala geliştirme aşamasında olmakla beraber DOM çekirdeği ile XML 1.0 isim uzayının XML Infoset ile desteğinin geliştirilmesi , XML Base desteğinin verilmesi ve kullanıcı arayüzü olaylarının genişletilmesi hedeflenmektedir.Seviye 3 ayrıca geçerleme desteğide sunacak , dokümanların kaydedilip yüklenmesini sağlayarak daha iyi bir dağarcık işaretlemesi sağlayacak ve XPath desteği(ağaç yapısındaki node’ların adreslenmesi) sunacaktır.Geliştirilmekte olan DOM 3 API izleyen mimariye sahiptir. Bu modelde XML dokümanı , node (düğüm) lerden oluşmuş bir ağaç yapısına dönüştürülerek işlenilen birimin hafızasına alınmaktadır.XML dokümanında tanımlanan tüm yapı hafızada komple tutulduğundan , bu model çok büyük uygulamalar için hafıza kısıtlamaları getiren ve çoğu kez yavaş işlenen bir modeldir. DOM yapıya ulaşım için arayüzler ve bu arayüzlerin içerisinde tanımlanmış olan node metod ve özellikleri içermektedir.DOM kullanan bir parser da istenen node a ulaşmak izleyen şekildeki gibidir. Örnek: <?xml version="1.0"?> <silahlar> <savasucagi> <tip>F-16</tip> <hiz>1300km</hiz> </savasucagi> <savasucagi> <tip>F-22</tip> <hiz>1620km</hiz> </savasucagi> </silahlar> Ulaşılması istenen node birinci hız değeri ise: kullanılan metodlar doc.documentElement.childNodes.item(0).getElements ByTagName(“hiz”).item(0).childNodes.item(0).data şeklindedir. Bu tanımın açılımı doc adındaki DOM nesnesinin doküman elementlerinin kök node undan ilk yaprağın seçilmesi buradan etiket ismi ile etiketin seçilmesi ve kendi ilk nodunun değerinin okunması sağlanmaktadır. Şimdi yukarıdaki yapıyı işleyen çok basit bir HTML DOM parser örneği verelim: <!--ÖRNEKTİR --> <HTML> <HEAD><TITLE>DOM Parser</TITLE></HEAD> <BODY> <H1>DOM Ornegi</H1> <SCRIPT LANGUAGE="JavaScript"> var doc, kok, silah1, tip, hiz; doc = new ActiveXObject("Microsoft.XMLDOM"); doc.async = false; doc.load("silahlar.xml"); if (doc.parseError != 0) alert(doc.parseError.reason); else { kok = doc.documentElement; document.write("Kok node un adi: " + kok.nodeName + "<BR>"); document.write("Kok node un tipi: " + kok.nodeType + "<BR>"); silah1 = kok.childNodes.item(0); tip = silah1.getElementsByTagName("tip"); document.write("Tip adedi: " + tip.length + "<BR>"); hiz = tip.item(0); document.write("Hiz : " + hiz.childNodes.item(0).data); } </SCRIPT> </BODY> </HTML> XML Parser XML Parser , yazı dizimizin başında da belirttiğim üzere bir XML belgesinin içeriğini ve oluşturulma kurallarını denetler.Belgenin iyi oluşturulmuş olup olmadığını denetlerken DTD tanımına uygunluğunu da control eder.XML Parser ın diğer bir görevi de , XML belgesinin validasyonudur. DOM ve SAX modelini destekleyen birçok XML Parser mevcuttur.Bunlardan Xerces,XJ,MSXML,Lark,XML4J,ProjectX ve J2EE uygulamaları için Weblogic Server in sundugu XML Parser lar en cok bilinenlerdendir. XML Schema XML Schema XML Schema DTD gıbı XML dokümanında bulunan elementlerin ve içerik modelinin tanımlanmasını ve dokümanın geçerlenmesi için kullanılmaktadır. XML Schema DTD ye göre daha gelişmiş bir tanımlama standardıdır çünkü DTD içerisinde herhangi bir elemanın içeriği için mevcut olan değerler oldukça sınırlı olmasına karşın XML Schema içerisinde oldukça geniş bir yelpaze mevcuttur.(integer,float,date … gibi).XML Schema açık içerik modeli tanımlamaları ve isim uzayı ek özellikleri ile de DTD den ayrılmaktadır. XML Schema nın en büyük özelliği tanımlama sırasında XML yapısını kullanmasıdır,böylece bir Schema tanımlaması XML de Schemaya özgü komutların kullanılması ile kolayca uygulanabilir. XML Schemalar aynen XML belgeleri gibi parse edilebilir özelliktedir.Schema içerisinde kullanılan açık-uçlu veri modeli , eleman ilişkilerinin geliştirilemsini ve geniş bir dağarcık belirtimi gibi destekler sağlar.İsim uzayı ek özelliği,schema içerisindeki ayrı node ların bir araya getirilmesini sağlamaktadır. XML Schema Yapı Özellikleri XML Schema DTD , Schema Element ve ElementType Element gibi iki önemli kavram içermektedir.Bu iki kavramın işlenmesi XML Schema DTD nin anlaşılması için yardımcı olacaktır. Schema Element Schema elemanı XML Schema belgeleri için kök eleman olarak adlandırılır ve diğer schema içeriği için bir taşıyıcı rolü üstlenmektedir.Schema elemanı name ve xmlns adlı iki özellik barındırmaktadır. Bunlarda name özelliği XML Schema ya verilecek olan isimdir.xmlns ise XML Schema için bir isim uzayı oluşturmak için kullanılmaktadır.Bu özellik kullanılacak schema belirtimlerinin kullanılması için gerekli olan belirtime sahip olmalıdır. Örneğin: <Schema name="Schema1" xmlns= urn:schemas-microsoft-com:xml-data"> <xmlns:dt= xmlns= urn:schemas-microsoft-com:xml-datatypes"> </Schema> Microsoft un sağladığı schema belirtimlerini kullanabilmek için yazılan isim uzayına bir örnektir. Peki isim uzayı nedir?İsim uzayları XML dokümanlarında kullanılan eleman ve eleman özelliklerinin tek isimlere (unique) sahip olmalarını sağlamaktadır. Bu tanımı izleyen satırda ise isim uzayının kullanacağı veri tipinin tanımı yapılmıştır.Bu örnekte Microsoft un sunduğu isim uzayı kullanılmaktadır.Bir Schema elemanı özellik tipi ve eleman tipi ve tanımları child eleman olarak içerebilmektedir. ElementType Element Schema elemanlarının tip belirtimi için Eleman Tipi Elemanlar kullanılmaktadır.Bu elemanın yapısında veri tipi,elaman,özellik tipi,özellik ve tanımchild elemanları bulunabilektedir. ElemanTipi eleman belirtiminde name elemanın ismini,model içerik belirtiminin kapalı yada açık olarak yapılacağını,content eleman içerisinde bulunan içeriğin tipini,order eleman içerisinde bulunan child elemanlarının ve gruplarının sırasını,ve son olarak dt:type elemanın tipini belirtmektedir. SOAP(Basit Nesne Erişim Protokolü) SOAP SOAP şu anda ortaya çıkmış en son XML teknolojilerinden birisidir.SOAP internet uygulamalarında önceden beri süregelen bir problemi ortadan kaldırmak için geliştirilmiştir.Bu problem interoperability(sistemler arası uyumlu çalışma) problemidir.Sunucularda tüm nesne ve servislere platformdan bağımsız olarak ulaşım fikri bu protokolün gelişmesine yol açmıştır.Bugün varolan sistemlerin yapısında birbirinden farklı işletim sistemleri,firewall’lar,değişik uzaktan prosedür çağrı metodları ve farklı platformlar bulunmaktadır. İnternet üzerinde böylesi farklı sistemlerde karşılıklı çalışabilmek için sunucu ve istemci mimarilerinin birbirlerinin güvenlik kısıtlamalarını , servis konuşlandırım şemalarını ve aynı platform dilini kullanabilmeleri gerekmektedir.(COM—COM , ORB – ORB , EJB – EJB gıbı). SOAP ile yaşanılan bu platform karmaşasına son verilmiştir.IETF HTTP ve W3C konsorsiyomu XML standardlarına dayalı olan SOAP , birbirleriyle rekabet halinde olan nesne RPC (uzaktan prosedür çağrıları) teknolojileri arasında bir köprü oluşturmakta ve herhangi bir işletim sistemi,programlama dili veya platform ile çalışacak bir mesaj sistemi içermektedir. Basitçe belirtmek gerekirse , SOAP servislere , nesnelere ve sunuculara platformdan bağımsız bir şekilde erişmek için bir yol belirtimi yapmaktadır.SOAP kullanarak servis sorguları,çağrılar,iletişimi uzaktaki sistemin platformu,yeri ve işletim sisteminden bağımsız bir şekilde gerçekleştirmenizin yolu açılmış olmaktadır. SDL (Servis Tanımlama Dili) Uzaktaki bir sunucuda bulunan bir servisi SOAP kullanarak kullanmak istediğinizde, sizing (uygulamanızın) servisin yapabileceklerini anlamanız gerekmektedir.Unutulmamalıdır ki servisin işlevinin anlaşılması ile servisin implemantasyonunun anlaşılması; ki bu platform bağımlı bir tanımdır; birbirinden kesinlikle ayrılması gerekmektedir.SDL kullanımı , uzaktaki servise bir sorgu gönderilmesini ve yapabileceklerinin öğrenilmesini sağlamaktadır.(Veri Tipleri ve komutları nasıl temsil ettiği gibi)Mesela SDL kullanılarak basit bir servisin girdi olarak iki tamsayı alıp bu sayıları topladığı ve çıktı olarak yine bir tamsayı döndürdüğü rahatlıkla anlaşılabilir. SDL bir XML grameridir , yani basitçe bir XML dokümanıdır.SDL , aryüz belirtim dili olan IDL ye çok benzemektedir , aralarındaki fark ise IDL nin platform bağımlı SDL nin ise bağımsız olmasıdır. SCL (SOAP Kontrat Dili) SDL gibi SOAP Kontrat Dili bir servisin yapabileceklerinin ortaya çıkarılması için geliştirilmiştir fakat SCL bundan daha da öteye giderek sunucu ve istemcinin hangi iletişim anlaşmalarını kullanacaklarını belirlemektedir.Bu anlaşma hem uç noktaların tanımları ve kabul edebileceği mesajı içermekte hem de iki taraf arasında akan mesajların senkronizasyon kurallarını belirlemektedir. DISCO (Web Servislerinin Keşfi) DISCO erişilen makinelerdeki servislerin SDL veya SCL tanımlarını almak için bir yol sunmaktadır.Bu SOAP un herşeyi birleştirmek için kullanılan son parçasıdır.Keşif Doküman Düzeni Kullanılarak(Kendisi de bir XML dokümanıdır) keşif dokümanı sunucuya gönderilebilir ve sunucuda herhangi SOAP izinli bir AKA servisi bulunur ise sunulan servislerin bir SDL veya SCL tanımları elde edilmiş olmaktadır. ROPE (Uzak Nesne Proxy Motoru) ROPE , uygulamalarınızda SOAP mesajlarını kullanabilmeniz için size COM bileşenlerini sunmaktadır. Rope.dll şeklindeki kütüphane dosyaları ile gelen ROPE bileşenleri iki modele sahiptir; VB – biçimli basitlik ve VC – biçimli control.. ROPE kullanmadan bir SOAP metodu çağırmak isterseniz tüm SOAP çağrılarını XML e uyarlamanız , çağrıyı bir HTTP isteği içerisine paketleyip göndermeniz ve HTTP cevabını işleyip gelen XML i parse etme işlemlerini gerçekleştirmeniz gerekmektedir.ROPE sayılan tüm bu işlemleri gerçekleştirmektedir.ROPE SOAP için işleri kolaylaştırıcı bir araç gibi düşünülebilir ancak SOAP kullanımı için zorunlu değildir. Visual Studio 6.0 için Microsoft tarafından geliştirilen SOAP araçkiti XML ve SOAP uzmanı olmanız gerekmemekte ve wire protokolü bilginizin olması şart değildir kolaylıkla uygulamanıza SOAP yeteneklerinin eklenmesi düşünülmektedir. Araç kitinde · Sunucu taraflı referans dinleyicileri · ROPE · SDL ve kaynak kodu jeneratörü · Dokümentasyon · Kod örnekleri · Ve Mimari Model ve tüm kaynak kodu Bulunmaktadır. XML Grameri - Bölüm 1 Giriş Genişletilebilir İşaretleme Dili(Extensible Markup Language) , kısaca XML , XML dokümanları adı verilen veri objeleri sınıfını tanımlayan ve kendisini işleyen porgramların davranışlarını tanımlayan bir işaretleme dilidir. XML dokümanları entity(varlık) adı verilen saklama birimlerinden luşmaktadır ve bunlar parse edilmiş veya edilmemiş veri barındırabilirler. Başlangıç ve hedefler XML 1996 yılında World Wide Web konsorsiyumu altında oluşturulan XML Çalışma Grubu tarafından geliştirildi. XML in dizayn hedefleri 1.İnternette basitçe kullanabilmesi 2.XML in geniş yelpazede uygulamaları desteklemesi 3.XML in SGML(Standard Generalized Markup Language) ile uyumlu olabilmesi 4.XML dokünmanlarını işleyen programların kolaylıkla yazılabilmesi 5.XML e ait ek opsiyonel özelliklerin sıfır denecek kadar az seviyede tutulması 6.XML dokümanlarının insanlar tarafından anlaşılabilir düzeyde ve açık olması 7.XML dizaynının çok hızlı bir biçimde oluşturulabilmesi 8.XML in dizaynının formal ve işe özgü yapılabilmesi 9.XML dokümanları oluşturmanın çok basit olması şeklinde listelenebilir. Dokümanlar Bir veri objesi eğer iyi oluşturulmuş(well-formed) ve bu spesifikasyon ile tanımlanmış ise bir XML dokümanı olarak adlandırılır.Eğer gereken kısıtlamaları da karşılıyor ise XML dokümanı için geçerli(valid) adı verilebilir Her XML dokümanının mantıksal ve fiziksel yapıları bulunmaktadır.Fiziksel olarak,doküman varlık adı verilen birimlerden oluşmaktadır.Bir varlık doküman içerisinde diğer varlıkları ihtiva edebilmektedir.Bir doküman bir kök(root) veya doküman varlığı ile başlamaktadır.Mantıksal olarak , doküman tanımlar , elementler , yorumlar , karakter referansları , ve işleme komutlarından oluşmaktadır.Bunların hepsi doküman içerisinde işaretleme ile belirtilir. İyi oluşturulmuş XML Dokümanları Bir metin objesinin iyi oluşturulmuş bir XML dokümanı olabilmesi için: 1.Bütün olarak , üretim etiketli doküman ile uyuşması 2.Bu spesifikasyonda verilen tüm iyi oluşturulma kısıtlamalarına uyması 3.Her parse edilmiş varlığının doküman içerisinde direkt veya indirekt olarak referans edilmesi gerekmektedir. XML dokümanlarında işaretleme için metinler karakterlerden oluşturulmaktadır.Karakterler ISO veya standardı ile beilrtilebilmektedirler.Karakter kod noktası çözümleme mekanizması varlıktan varlığa göre değişim gösterebilmektedir.Tüm XML işleyiciler UTF-8 ve UTF-16 encoding standardlarını kabul etmelidirler. Genel syntax kuralları Boşluk Grameri S ::= (#x20 OR #x9 OR #xD OR #xA)+ şeklinde tanımlanmıştır Bu gramerde boşluk karakterleri XML tanımlarında bir veya daha vazla boşluk (space) , yeni satır başlangıçları , çizgi beslemeleri(line feed) , veya tab lardan oluşmaktadır İsimler Bir isim , XML de bir harf veya bir kaç noktalam işareti ile başlayan ve harf , sayı , altçizgi ... vb karakterler ile başlayan bileşenlere verilen addır. İsimler ve Bileşenler(Token) Grameri [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* [6] Names ::= Name (S Name)* [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (S Nmtoken Literal verisi tırnak içerisine alınmış verilere verilen adlardır.Literaller iç verilerin , özelliklerin değerlerinin , ve dış belirteçlerin içeriklerini belirtmek için kullanılırlar. Literal grameri [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' | "'" ([^%&'] | PEReference | Reference)* "'" [10] AttValue ::= '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] | Reference)* "'" [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'") [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'" [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%] Yorumlar Yorumlar XML dokümanlarının arasına işleyici program yada programcı tarafından konulan açıklayıcı terimlere verilen addır. Yorum Grameri [15] Yorum ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->' XML Grameri - Bölüm 2 - İşleme Komutları İşleme komutları dokümanların uygulamalara gerekli olan komutları barındırmalarını sağlar. İşleme Komutları Grameri [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) İşleme komutları dokümanın karakter verisinin içerisinde yer almaz ancak uygulamaya geçirilmek için bulunmaktadırlar.İK tanımı bir hedef(PITarget) ile başlar ve bu komutun yönlendirildiği uygulamayı belirtmektedir.Hedef isimleri olarak "XML" , "xml" ve benzerleri bu işlemde standardizasyon için rezerve edilmişlerdir. CDATA bölümleri CDATA bölümleri karakter verisinin bulunduğu herhangi bir yerde bulunabilirler.CDATA bölümleri metin bulunduran karakterlerin escape olarak tanımlanmasında kullanılmaktadırlar.CDATA bölümleri "<![CDATA[" ile başlayıp "]]>" ile biterler. CDATA Bölüm grameri [18] CDSect ::= CDStart CData CDEnd [19] CDStart ::= '<![CDATA[' [20] CData ::= (Char* - (Char* ']]>' Char*)) [21] CDEnd ::= ']]>' CDATA bölümleri içerisinde sadece CDEnd cümlesi işaretleme olarak algılanmaktadır yani sol parantez ve ampersandlar kendi literal formlarında bulunabilmektedirler;< ve & gibi tanımlamalar ile belirtilemelerine gerek ve imkan yoktur. UYARI: CDATA bölümleri yuvalı olarak tanımlanamazlar Örnek: <![CDATA[<greeting>Hello, world!</greeting>]]> burada greeting sadece bir metindir. Prolog ve Doküman Türü Tanımlar(Document Type Declarations(DTD)) XML dokümanları , kullanılan XML versiyonunu tanımlayan bir XML tanımı ile başlamak zorundadırlar.Mesela ızleyen XML dokümanı , iyi oluşturulmuş ancak geçerli olmayan bir XML dokümanıdır. <?xml version="1.0"?> <greeting>Hello, world!</greeting> Versiyon numarası 1.0 , bu spesifikasyonun versiyonuna dokümanın uyumluluğunu göstermek için kullanılmalıdır , ancak bu spesifikasyon ile uyuşmayan bir dokümana bu değeri vermek hata teşkil etmektedir.İleriki versiyonlar belirtilmediğinden bu yapı , otomatik versiyon tanımlamasının gerekliliğine yol açmıştır.Bu sebepten işleyiciler kendilerinin desteklemediği versiyon etiketleri gördüklerinde hata mesajı verebilirler.XML dokümanları içerisinde işaretlemenin fonksiyonu saklama ve mantıksal yapının tanımı ve ayrıca özellik - değer ikililerinin mantıksal yapılarının tanımını yapmaktır.XML , DTD adı verilen mekanizma ile mantıksal yapı üzerinde kısıtlamalar belirtir ve önceden tanımlanmış saklama birimlerini destekler. Bir XML dokümanı , eğer ilişkili bir DTD barındırıyor ve doküman bu tanımdaki kısıtlamalara uyuyor ise geçerlidir.DTD tanımı dokümanda ilk elementten önce belirtilmelidir. Prolog grameri [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ") [25] Eq ::= S? '=' S? [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+ [27] Misc ::= Comment | PI | S XML DTD , doküman sınıfları için gramer oluşturan işaretleme tanımlarını barındırmaktadır.DTD , işaretleme tanımları barındıran dış altkümelere (özel tip dış varlıklar) referans çıkarabilir.Bir işaretleme tanımı element tipi tanımları , özellik listesi tanımları , ve varlık(gösterim) tanımlarından oluşmaktadırlar.Bu tanımların bir kısmı yada tümü parametre varlıklarının içerisinde bulunabilirler. DTD Grameri [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '>' [ VC: Root Element Type ] [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment [ VC: Proper Declaration/PE Nesting ] [ WFC: PEs in Internal Subset ] Geçerlilik Kısıtlaması 1: Kök element tipi DTD tanmındaki isim kök elemtin tipine uymalıdır Geçerlilik Kısıtlaması 2: Uygun tanım/Parametre Varlığı Yuvalaması Parametre - varlık yer değiştirme metni işaretleme tanımlarında uygun şekilde yerleştirilmelidir. İyi oluşturulma Kısıtlaması: Parametre/Varlıklar İç Kümede olmalıdır.DTD altkümesinde PV referansları işaretleme tanımlarının içerisinde değil sadece işaretleme tanımları varolduğunda olabilirler. XML Grameri - Bölüm 3 - Yalnız Doküman Deklarasyonu(Standalone Document Declaration(SDD)) İşaretleme tanımları XML işleyiciden bir uygulamaya geçmek gibi dokümanın içeriğini etkileyebilmektedir.SDD,XML tanımının bir bileşeni gibi ortaya çıkabilmekte ve bu çeşit tanımlarının var olup olmadığını belirtebilmektedir. Standalone Document Declaration Grameri [32] SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) [ VC: Standalone Document Declaration ] SDD tanımında "yes" değeri doküman varlığının dışında bulunan ve XML işleyiciden uygulamaya geöen bilgiyi etkileyen işaretleme tanımlarının bulunmadığını göstermektedir."no" değeri ise bu gibi dış tanımların olabileceğini göstermektedir.Unutmayın ki bu yalnızlık durumunu değiştirme yeteneğine sahip değildir. Eğer dış tanımlar yoksa , SDD nin bir anlamı yoktur.Eğer dokümanlar varsa ve SDD tanımı yapılmamışsa bu değer "no" olarak varsayılmaktadır. Geçerlilik Kısıtlaması: Eğer dış işaretleme tanımları: · varsayılan değerlerde özellikler · varlıklar · normalizayon değerlerinde özellikler · element içeriği tipleri barındırıyorlarsa SDD değeri "no" olmalıdır Bir SDD tanımlı XML dokümanı örneği aşağıdaki şekildedir. <?xml version="1.0" standalone='yes'?> Boşluklar XML dokümanları yazılırken boşluk ve tab boşlukları kullanılması okunabilirlik açısından uygun olacaktır.Bir XML işleyici işaretleme olmayan tüm karakterleri uygulama içerisinde geçmelidir.XML işleyici geçerleyicisi ayrıca element içeriğinde bulunan tüm böyle karakterleri uygulamaya bildirmelidir.xml:space adında özel bir özellik , bir boşluğun ayrılması gerektiğini uygulamalara bildirmek için bir elenete yapıştırılabilir.Geçerli dokümanlarda , bu özellik , diğerleri gibi kullanılmadan önce tanımlanmış olmalıdır.Tanımlandığı zaman mümkün olan değerleri default ve preserve olan bir enumeration tipi şeklinde tanımlanmış olmalıdır. Örneğin: <!ATTLIST poem xml:space (default|preserve) 'preserve'> gibi Default değeri , bu element için uygulamanın varsayılan boşluk işleme modlarının uygun olacağını belirtmektedir.Preserve değeri ise uygulamaların boşlukları korumaları gerektiğini kendilerine bildirmektedir.Bu tanımlar yapıldıkları yerdeki tüm elementler için herhangi başka bir xml:space tanımı yapılmadığı sürece geçerlidir.Herhangi bir dokümanın kök elemanının uygulama boşluk ele alımı için bir değer belirtmediği sürece herhangi bir belirleme yapmadığı düşünülmektedir. Satır Sonu Ele Alımı XML parse edilmiş varlıkları genellikle satırlara ayrılmış bilgisayar dosyaları şeklinde saklanmaktadırlar.Bu satırlar tipik olarak #xD ve #xA kombinasyonları şeklinde belirlenmişlerdir.Uygulamaların işlevlerini basite indirgemek için , herhangi bir parse edilmiş varlık veya literal varlık değeri #xD#xA sırası veya sadece #xD literali içeriyorsa , XML işleyici uygulamaya sadece #xA karakterşnş geçirmelidir.Bu literallerin normalize edilme işlemidir. Dil Tanımlama Doküman işlemede , genellikle içeriğin yazıldığı doğal veya formal dilin tanımlanması oldukça önemlidir.xml:lang adı verilen bir özellik , içerik dili ve özellik değerlerinin tanımlanmasında dokümanlar içerisinde kullanılabilir.Geçerli dokümanlarda , özellik kullanılmadan önce tanımlanmış olmalıdır.Özellik için geçerli olan değerler IETF RFC 1766 standardı ile belirlenmiş dil tanımlayıcılarıdır. Dil Tanımı Grameri [33] LanguageID ::= Langcode ('-' Subcode)* [34] Langcode ::= ISO639Code | IanaCode | UserCode [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z]) [36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+ [37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+ [38] Subcode ::= ([a-z] | [A-Z])+ Langcode izleyenlerden herhangi biri olabilir: -ISO 639 tarafından tanımlanmış iki harfli dil kodu -IANA(Internet Assigned Numbers Authority) tarafından belirlenmiş dil tanımlayıcısı(i ıle başlayan) kullanıcı tarafından atanmış dil tanımlayıcısı(x ile başlayan). Bu tanımların IANA ile çakışmaması için x kullanılmaktadır.Herhangi bir sayıda altkod segmenti olabilir ; eğer ilk altkod segmenti bulunuyor ve altkod iki harften oluşuyorsa o zaman kod ISO 3166 dan bir ülke olmalıdır.Eğer ilk altkod iki den daha fazla kod bulunduruyorsa o zaman IANA ile kaydedilmiş bir dil kodu olmalıdır.Genellikle dil kodu küçük harflerle verilir ve ülke kodu ise büyük harflerle verilir.XML dokümanlarındaki diğer isimlerin tersine bu değerler büyük ve küçük harf ayrımı yapmazlar. Örneğin: <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> <p xml:lang="tr-TR">Şarap üzümden yapılır.</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 ile yapılan tanımlamalar , başka bir xml:lang tanımlaması yapılmadığı sürece , element içeriği ve özelliklerin tümü için geçerlidir.xml:lang için basit bir tanımxml:lang NMTOKEN #IMPLIED şeklini alabilir fakat ayrıca spesifik değerlerde verilebilir. Örnek: <!ATTLIST poem xml:lang NMTOKEN 'fr'> <!ATTLIST gloss xml:lang NMTOKEN 'en'> <!ATTLIST note xml:lang NMTOKEN 'en'> XML Grameri - Bölüm 4 Mantıksal Yapılar Her XML dokümanı bir veya daha fazla element içermektedir ve bu elementlerin sınırları başlangıç,bitiş veya boş eleman tag i ile belirlenmektedir.Her elemanın bir tipi , kendisini belirleyen bir ismi(jenerik tanımlayıcısı) , ve bir özellik spesifikasyon kümesi bulunmaktadır.Her özellik spesifikasyonunun ismi ve değeri bulunmaktadır. Element grameri [39] element ::= EmptyElemTag | STag content ETag [ WFC: Element Type Match ] [ VC: Element Valid ] Bu spesifikasyon eleman tiplerinin ve özelliklerinin anlam , kullanım ve isimlerini kısıtlamaz(x,m,l dışında (Bu değerler ileriki versiyonlardaki standardizasyon için kullanılmak istenmektedir)) İyi-Oluşturulma Kısıtlaması: Bir elemanın bitiş tag indeki isim başlangıçtaki ile uyuşmalıdır. Geçerlilik Kısıtlaması: Element tipi uyuşması Eğer · İsim in element tipi ile uyuştuğu ve elementdecl ile uyuşan bir tanım ile uyuşan bir tanım varsa ve · Tanım EMPTY ile uyuşmakta ve element içeriği yoksa · Tanım içerik modelinde belirlenen sıradan ifadelerdeki children ve children element sırası ile uyuşmakta ise · Tanım Mixed ile uyuşmakta ve içerik , içerik modelindeki karakter verisi ve child elementleri içermekte ise · Tanım ANY ile uyuşmakta ve childe elementlerin tanımlamalarının tipleri ile uyuşmakta ise eleman geçerlidir. Başlangıç tag leri , Bitiş Tagleri , Boş Eleman Tagleri Her boş olmayan XML elemanı bir başlangıç etiketi ile işaretlenmektedir. Başlangıç Etiketi Grameri [40] STag ::= '<' Name (S Attribute)* S? '>' [ WFC: Unique Att Spec ] [41] Attribute ::= Name Eq AttValue [ VC: Attribute Value Type ] [ WFC: No External Entity References ] [ WFC: No < in Attribute Values ] Başlangıç ve Bitiş etiketlerindeki isimler elemanın tipini belirlemektedirler.İsim - Özellik ikilileri elemanın özellik spesifikasyonları olarak adlandırılır.(Özellik İsmi - Özellik değeri) İyi oluşturulma kısıtlaması 1: Özelliğe Özgü Spesifikasyon Aynı başlangıç etiketinde ve boş eleman etiketinde özellik ismi birden fazla kez belirlenemez Geçerlilik kısıtlaması: Özellik tanımlanmış olmalıdır;değer tanımlanan tipe sahip olmalıdır. İyi oluşturulma kısıtlaması 2: Dış varlık referansları bulunmamalıdır Özellik değerleri direkt veya indirekt olarak dış varlıklara varlık referanslarında bulunamazlar İyi oluşturulma kısıtlaması 3: Özellik değerlerinde < bulunmaması Özellik değerinde belirlenen yerdeğiştirme metni < karakteri barındıramaz Bir başlangıç terimi örneği: <termdef id="dt-dog" term="dog"> Bir başlangıç etiketi ile başlayan her eleman elemanın ismini barındıran bir bitiş etiketi ile işaretlenmek zorundadır. Bitiş etiketi grameri [42] ETag ::= '</' Name S? '>' Örnek: </termdef> Başlangıç ile Bitiş etiketleri arasındaki metine elemanın içeriği adı verilir. Eleman içeriği grameri [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* Eğer bir eleman boş ise , başlangıç etiketini izleyen bir bitiş etiketi olmalıdır.Boş eleman etiketi ise özel bir form almaktadır. Boş eleman etiketi grameri [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' [ WFC: Unique Att Spec ] Boş eleman etiketleri , EMPTY olarak tanımlanıp tanımlanmadıklarından bağımsız olarak , içeriği olmayan elemanlar için kullanılmaktadırlar.Uygulamalar arasında uyum sağlamak için ise sadece EMPTY olarak tanımlanan elemanlar için bu etiketlerin kullanılması önerilmektedir. Örnek: <IMG align="left" src="http://www.w3.org/Icons/WWW/w3c_home" /> <br></br> <br/> XML Grameri - Bölüm 5 - Eleman tipi tanımları Bir XML dokümanının eleman yapısı , geçerleme sebeplerinden dolayı eleman tipi ve özellik listesi tanımları tarafından kısıtlamalara uğrayabilir.Eleman tipi tanımı bir elemanın içeriğini kısıtlar. Eleman tipi tanımları genellikle hangi eleman tiplerinin , elmanın children tipleri olarak ortaya çıkacağını belirler.Kullanıcı opsiyonu olarak bir XML işleyici tanımın vermediği bir eleman tipi için bir uyarı mesajı verebilir ancak bu bir hata değildir. Eleman tipi tanımı grameri [45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>' [ VC: Unique Element Type Declaration ] [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children Burada Name tanımlanan eleman tipini belirtmektedir. Geçerliik kısıtlaması: Hiçbir eleman tipi bir kereden fazla tanımlanamaz Örnekler: <!ELEMENT br EMPTY> <!ELEMENT p (#PCDATA|emph)* > <!ELEMENT %name.para; %content.para; > <!ELEMENT container ANY> Eleman İçeriği Bir eleman tipinin kendi tipinde child elemanlar barındırması(karakter verisi değil) durumunda eleman içeriği bulunmaktadır.Bu durumda kısıtlama bir içerik modeli içermektedir.Bu child elemanların izin verilen tiplerini ve görünme sıralarını düzenleyem basit bir gramerdir.Gramer , içerik parçaları halinde (cp) oluşturulmakta ve bu isimler . içerik parçacıkları seçenek veya sıra listelerinden oluşmaktadır. Eleman içerik modelleri grameri [47] children ::= (choice | seq) ('?' | '*' | '+')? [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')? [49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')' [ VC: Proper Group/PE Nesting ] [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')' [ VC: Proper Group/PE Nesting ] Bu gramerde Name , child eleman olarak beliren elemanların tiplerini göstermektedir.Seçenek listesindeki herhangi bir içerik parçası gramerde seçenek listesinin belirdiği herhangi bir eleman içeriği şeklinde ortaya çıkabilir;bir sırada beliren içerik parçaları listede belirdikleri sırada eleamn içeriğinde varolmalıdırlar.Bir ismi takip eden opsiyonel karakterler , elemanın veya içerik parçalarının bir veya daha fazla bir şekilde belirmelerini yönetir.Böyle bir işaretin yokluğu eleman veya içerik parçasının sadece bir kere belireceğini göstermektedir.Bir elemanın içeriği , içerik modeli ile , eğer sadece içerik modelinden bir yol çıkarmak mümkün ise uygunluk gösterir.Ve bu şekilde sıra , seçim tekrarlama operatörlerine uyum ve içerikteki her elemanın , içerik modelindeki eleman tipine uygunluğu sağlanır.Uyum için,eğer dokümandaki bir eleman içerik modelindeki birden fazla eleman tipi ile uyum gösterirse,bu hata demektir. Geçerlilik kısıtlaması:Uygun Grup / Parametre Varlığı(PE) Yuvalaması Parametre - varlık yerdeğiştirme metni parantezli gruplarda uygun bir şekilde yuvalanmalıdır.Eğer choice,seq,veya Mized yapısında parantez açımı ve kapatımı bir parametre varlığı yerdeğiştirme metninde yer alıyorsa , ikisi de aynı yerdeğiştirme metninde yer almalıdır.Uygulamalar arası adaptasyon için eğer bir parametre-varlık referansı bir choice,seq,veya Mized yapısında ortaya çıkıyor ise yer değiştirme metni boş olmamalı ve ilk ve son karakterler bağlayıcı karakterlerden(,|) olmamalıdır. Örnekler <!ELEMENT spec (front, body, back?)> <!ELEMENT div1 (head, (p | list | note)*, div2*)> <!ELEMENT dictionary-body (%div.mix; | %dict.mix *> Karışık içerik Bir eleman tipi , bu tipin elemanları karakter verisi ve isteğe bağlı olarak child elemanlar ile karıştığında karışık(mixed) içeriğe sahiptir denir.Bur durumda child elemanların tipler kısıtlanabilir ancak sıraları ve sayıları kısıtlanamaz Karışık içerik grameri [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')' [ VC: Proper Group/PE Nesting ] [ VC: No Duplicate Types ] Name children olarak belirebilecek elemanların tiplerini vermektedir. Geçerlilik kısıtlaması: Tek bir karışık içerik tanımında aynı izim birden fazla olarak beliremez Örnekler: <!ELEMENT p (#PCDATA|a|ul|b|i|em)*> <!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form * > <!ELEMENT b (#PCDATA)> XML Grameri - Bölüm 6 - Özellik – Liste Tanımları Özellikler , isim – değer ikililerini elemanlar ile ilişkilendirmek için kullanılmaktadırlar.Özellik spesifikasyonları sadece başlangıç etiketlerinde ve boş eleman etiketlerinde bulunabilirler. Özellik – liste tanımları · Belli bir eleman tipi için olan özellik kümesini tanımlamak için · Bu özelliklere tip kısıtlamaları sağlamak için · Özelliklere varsayılan değerler atamak için Kullanılmaktadırlar. Kısaca özellik – liste tanımları bir eleman tipinin her özelliği için veri tipini , ismi ve varsa varsayılan değerleri tanımlar. Özellik – Liste tanımı grameri [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>' [53] AttDef ::= S Name S AttType S DefaultDecl AttlistDecl kuralı içerisinde görülen isim elamn tipidir.Kullanıcı seçeneğinde , tanımlanmamış bir eleman tipinde özellikler tanımlanmış ise , bir XML işleyici uyarı mesajı verebilir ancak bu bir hata değildir.AttDef kuralındaki isim ise özelliğin ismidir. Belirlenen bir eleman tipi için birden fazla özellik tanımı varsa tümünün içeriği birleştirilir.Bir elaman tipinin bir özelliği için , eğer birden fazla tanım bulunuyor ise ilk tanım bağlayıcı tanımdır ; diğerleri gözardı edilir. Uygulamalar arası uyumlu çalışma için DTD yazıcıları belirlenen bir eleman tiği için en çok bir özellik – liste tanımlamasına izin verebilirler ve bu tanım içerisinde en çok bir özellik tanımı içerilmesini belirleyebilirler. Özellik tipleri XML Özellik Tipleri 3 çeşittirler: String tipi , Tokenized (Ayrıştırılmış ) tipler ve enumerated tipler. Strin g tipi değer olarak literal değerler alabilirken , tokenized tipler lexical ve anlam kısıtlamalarına sahip olabilmektedirler. Özellik Tipleri Grameri [54] AttType ::= StringType | TokenizedType | EnumeratedType [55] StringType ::= 'CDATA' [56] TokenizedType ::= 'ID' [ VC: ID ] [ VC: One ID per Element Type ] [ VC: ID Attribute Default ] | 'IDREF' [ VC: IDREF ] | 'IDREFS' [ VC: IDREF ] | 'ENTITY' [ VC: Entity Name ] | 'ENTITIES' [ VC: Entity Name ] | 'NMTOKEN' [ VC: Name Token ] | 'NMTOKENS' [ VC: Name Token ] Geçerlilik kısıtlaması: ID ID (Kimlik) tipinin değerleri isim üretimine uymak zorundadır.Bir isim , bu tip için XML dokümanının içerisinde birden fazla bulunmamalıdır.ID değerleri kendisini taşıyan elemanlara özgü değerler olmalıdırlar. Geçerlilik kısıtlaması: Her eleman tipi için bir ID Birden fazla ID özelliğine sahip herhangi bir eleman tipi olamaz Geçerlilik kısıtlaması: Varsayılan ID Özelliği Bir ID özelliğinin #IMPLIED veya #REQUIRED ile belirlenen varsayılan bir değeri olmalıdır. Geçerlilik kısıtlaması: IDREF IDREF değerleri isim üreitimine uymak zorundadırlar ve IDREF tipinin değerleri İsimler ile uyuşmalıdır ; her İsim XML dokümanında bulunan bir elemanın ID özelliğine uymak zorundadır. Geçerlilik kısıtlaması: Varlık İsmi ENTITY değerleri isim üretimine uymak zorundadırlar ve ENTITIES tipleri İSimler ile uyuşmak zorundadırlar ; her ismin DTD içerisinde tanımlanan bir unparsed varlık ile uyuşması gerekmektedir. Geçerlilik kısıtlaması: Name Token (İsim parçası) NMTOKEN değerleri NmToken üretimine uymak zorundadır ; NMTOKENS değerleri de Nmtokens ile uyuşmak zorundadır. Enumerated özellikleri tanımda belirlenen değer listelerinin içerisinden bir değere sahip olabilirler. Enumerated Attribute Types [57] EnumeratedType ::= NotationType | Enumeration [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' [ VC: Notation Attributes ] [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' [ VC: Enumeration ] NOTATION özelliği bir DTD içerisinde ilişkili system ve public belrteçler ile tanımlanmış ve özelliğin bağlandığı eleman ile işlenecek belirtim göstermektedir. Geçerlilik kısıtlaması: NOTATION özellikleri Bu tipteki değerler tanımda belirlenen bir NOTATION ismi ile uyuşmak zorundadırlar ve tanımdaki tüm belirtim isimleri tanımlanmış olmalıdır. Geçerlilik kısıtlaması: Enumeration Bu tipteki değerler Nmtoken içerisinde belirtilen bir parça ile uyuşmalıdır. Özellik Varsayılan Değerleri Bir özellik değeri özelliğin gerekli olup olmadığı hakkında bilgi sağlamakta , ve eğer gerekli değilse , dokümanda bu özelliğin olmaması durumunda XML işleyicinin nasıl davranması gerektiğini belirlemektedir. Özellik Varsayılan Değerleri Grameri [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue) [ VC: Required Attribute ] [ VC: Attribute Default Legal ] [ WFC: No < in Attribute Values ] [ VC: Fixed Attribute Default ] Özellik tanımında , #REQUIREDözelliğin değerinin daima belirlenmesi gerektiğini belirlerken #IMPLIED ise herhangi bir varsayılan değerin bulunmadığını göstermektedir.Eğer tanım #REQUIRED ve #IMPLIED değil ise o zaman AttValue değeri tanımlanan varsayılan değeri içermektedir ; #FIXED kelimesi özelliğin daima belirtilen varsayılan değere sahip olacağını gösterir.XML işleyicisi kısaltılmış bir özellik ile karşılaştığında , eğer varsayılan değer tanımlanmış ise , tanımlanmış varsayılan değer ile özellik bulunuyormuş gibi davranmalıdır. Geçerlilik kısıtlaması: Gerekli Özellik Eğer varsayılan tanım #REQUIRED ise o zaman özellik özellik - liste tanımında bulunan aynı tipteki tüm elemanlar için belrilenmiş olmalıdır. Geçerlilik kısıtlaması: Özellik Değerinin Kurallara uygunluğu Tanımlanan varsayılan değer tanımlanan özellik tipi için varolan tüm lexical kısıtlamalar ile uyumluluk göstermelidir. Geçerlilik kısıtlaması: Sabit Özellik Varsayılan Değeri Eğer bir özelliğin #FIXED ile tanımlanmış bir varsayılan değeri bulunuyorsa bu özelliğin belirtimleri varsayılan değer ile uyum göstermelidir. Örnekler: <!ATTLIST termdef id ID #REQUIRED name CDATA #IMPLIED> <!ATTLIST list type (bullets|ordered|glossary) "ordered"> <!ATTLIST form method CDATA #FIXED "POST"> Özellik – Değer Normalizasyonu Bir özelliğin değeri uygulamaya geçirilmeden yada geöerleme için control edilmeden önce , XML işleyicinin bu değeri aşağıdaki şekilde normalize etmesi gerekmektedir. · Bir karakter referansı özellik değerine referans edilen karakterin sondan eklenmesi ile işlenir · Bir varlık referansı varlık yer değiştirme metninin rekürsif olarak işlenmesi ile işlenir · Bir boşluk karakteri (#x20 , #xD , #xA , #x9) , normalize edilmiş değerin sonuna #x20 eklenmesi ile işlenir ancak dış parse edilmiş bir varlık veya içsel parse edilmiş bir literal varlık değerinin ‘#xD#xA’ sırası için tek bir #x20 eklenmektedir. Eğer tanımlanan değer CDATA değilse , o zmaan XML işleyicinin normalize edilmiş özellik değerini başta ve sondaki boşluk karakterlerini elimine etmesi (trim) gerekmektedir. Tanım okunmayan tüm özellikler ise CDATA şeklinde tanımlanmıl oldukları Kabul edilerek geçerleme yapmayan bir parser ile ele alınmalıdır. Şartlı bölümler Şartlı bölümler , kendilerini yöneten DTD tanımındaki anahtar kelimenin içinde bulunan ya da dışında referans edilen DTD dış altkümesi kısımlarıdır. Şartlı bölüm grameri [61] conditionalSect ::= includeSect | ignoreSect [62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>' [63] ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>' [64] ignoreSectContents ::= Ignore ('<![' ignoreSectContents ']]>' Ignore)* [65] Ignore ::= Char* - (Char* ('<![' | ']]>') Char*) İç ve dış DTD altkümelerinde olduğu gibi , bir şartlı kısım bir veya daha fazla tam tanımlar , yorumlar , işleme komutları , veya yuvalanmış şartlı kısımlar içerebilmektedir.Eğer şartlı kısım için anahtar kelime INCLUDE ise o zaman şartlı kısmın içeriği DTD nin bir parçasıdır.Eğer anahtar kelime IGNORE ise o zaman şartlı kısmın içeriği mantıksal olarak DTD nin içeriği değildir.Güvenilebilir bir parse işlemi için şartlı bölümler IGNORE olarak belirlenmiş bile olsa yuvalanmış şartlı bölümlerin tetkik edilebilmesi için bu bölümler okunmalı ve en dıştaki şartlı bölüm sonu düzgün bir biçimde belirlenmelidir.Eğer INCLUDE içeren bir şartlı bölüm kendinden daha üst seviyede bulunan IGNORE anahtar kelimeli bir şartlı bölüm içerisinde bulunuyorsa , hem içteli hem de dıştaki şartlı bölümler IGNORE anahtar kelimeli olarak ele alınmalıdır. Eğer şartlı bölüm için anahtar kelime bir parameter-varlık referansı ise , parameter varlığı iişleyici şartlı bölümü ihtiva edip etmeyeceğine karar vermeden önce kendi içeriği ile yer değiştirmiş olmalıdır. Örnek: <!ENTITY % draft 'INCLUDE' > <!ENTITY % final 'IGNORE' > <![%draft;[<!ELEMENT book (comments*, title, body, supplements?)>]]> <![%final;[<!ELEMENT book (title, body, supplements?)>]]> XML Grameri - Bölüm 7 - Fiziksel Yapılar Bir XML dokümanı bir veya daha fazla saklama birimlerinden oluşabilmektedir. Bu birimler varlık olarak adlandırılmaktadırlar ve hepsinin içerikleri ve isimleri bulunmaktadır.Her XML dokümanının doküman varlığı adı verilen bir varlığı bulunmaktadır ve bu varlık XML işleyicisi için bir başlangıç noktası oluşturmakta ve tüm dokümanı içermektedir.Varlıklar parse edilmiş veya edilmemiş olabilirler.Parse edilmiş bir varlığın içeriği onun yer değiştirme metni olarak adlandırılır;bu metin doküman ile entegre olan bir kısım olarak kabul edilir. Parse edilmemiş bir varlık içeriği metin olabılen veya olmayabilen bir kaynaktır ancak içerik metin ise bu bir XML olamaz.Her parse edilmemiş varlığın ilişkili bir gösterimi bulunmaktadır.XML işleyicinin varlık iöin belirteçler yapma gereksinimi ve uygulamaya sunulan gösterimin ötesinde XML parse edilmemiş varlıkların içeriklerine kısıtlama koymamaktadır. Parse edilmiş varlıklar varlık referansları kullanılarak bir isim ile çağrılırlar;parse edilmemiş olanlar ise ENTITY ve ya ENTITIES özellikleri ile belirtilen isimler ile çağrılmaktadır. Genel varlıklar doküman içeriği ile kullanılmak içindir.Bu spesifikasyonda genel varlıklar bazen varlık terimi ile kullanılmaktadır.Parametre varlıkları DTD ile kullanılmak özere kullanılan parse edilmiş varlıklardır.Bu iki çeşit varlıklar farklı biçimlerdeki referanslar kullanmaktadır ve farklı kontekstlerde tanınmaktadır.Ayrıca farklı isim uzaylarına sahiptirler;bir parametre varlığı ve bir genel varlık aynı isimde olsalar da iki farklı varlıktırlar. Karakter ve Varlık Referansları Bir karakter referansı ISO/IEC 10646 karakter kümesinde bir karakteri temsil etmektedir , ve bunlara direkt olarak girdi aygıtından girilmesi mümkün olmayan karakterler de dahildir. Karakter Referans Grameri [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';' [ WFC: Legal Character ] İyi oluşturulma kısıtlaması: Yasak olmayan karakterler Char gramerinde verilen gramer referans verilen karakterleri içermelidir.Eğer karakter referansı &#x ile başlarsa ; işaretine kadar olan kısımdaki sayı ve harfler karakterin kodu için onaltılık düzende (hex) bir sunum sağlarlar.Eğer sadece &# ile başlarsa o zaman bu kısım ondalık düzende bir gösterim sağlamaktadır. Bir varlık referansı , isimlendirilen bir varlığın içeriğini belirtmektedir.Parse edilmiş genelvarlıklara referanslar & ve ; limitleyici işaretle olarak kullanmaktadırlar.Parametre – Varlık referansları ise aynı işlevi % ve ; işaretleri ile sağlamaktadırlar. Varlık referans grameri [67] Reference ::= EntityRef | CharRef [68] EntityRef ::= '&' Name ';' [ WFC: Entity Declared ] [ VC: Entity Declared ] [ WFC: Parsed Entity ] [ WFC: No Recursion ] [69] PEReference ::= '%' Name ';' [ VC: Entity Declared ] [ WFC: No Recursion ] [ WFC: In DTD ] İyi oluşturulma kısıtlaması: Tanımlanan varlıklar DTD olmayan herhangib bir dokümanda , sadece bir iç DTD altkümesi bulunan ve parametre varlık referansları bulunmayan bir dokümanda veya standalone değeri yes olan bir dokümanda , varlık referansında verilen “Name” değeri bir varlık deklarasyonu ile uyuşmalıdır fakat iyi oluşturulmuş dokümanlar amp,lt,gt,apos,quot varlıklarını tanımlamış olmamalıdır.Bir parameter varlığı tanımı kendisine yapılan herhangi bir referanstan önce yapılmış olmalıdır.Benzer olarak , genel bir varlığın tanımı kendisine yapılan bir referanstan önce olmalıdır.Eğer varlıklar dış altkümelerde veya dış parameter varlıklarında tanımlanmış ise geöerleme yapmayan bir işleyici bu tanımları okumak ve işlemek zorunda değildir.Böyle dokümanlar iöin eğer sadece standalone değeri yes ise varlığın tanımlanmış olması bir iyi oluşturulma kriteridir. Geçerlilik Kısıtlaması : Tanımlanan varlıklar Dış altküme veya dış parameter varlıkları barındıran ve standalone = no değeri taşıyan bir dokümanda , varlık referansında verilen Name değeri varlık tanımı ile uyuşmalıdır.Programlar arası uyum için geçerli dokümanlar amp,lt,gt,apos,quot varlıklarının tanımını yapmalıdır.Bir parametre varlık tanımı ona yapılan referanstan önce olmalıdır.Benzer olarak , genel bir varlığın tanımı referansında önce yapılmış olmalıdır. İyi oluşturulma kısıtlaması: Parse edilmiş varlıklar Bir varlık referansı parse edilmemiş bir varlığın ismini barındırmamalıdır.Parse edilmemiş varlıklar sadece ENTITY veya ENTITIES tipinde tanımlanmış özellik değerlerinde kullanılabilirler. İyi oluşturulma kısıtlaması: Recursion olmamalıdır Bir parse edilmiş varlık kendisine direk veya dolaylı oldan referansta bulunamaz İyi oluşturulma kısıtlaması: DTD içerisinde bulunma Parametre – Varlık referansları sadece DTD içerisinde bulunabilirler. Örnekler: Karakter ve Varlık Referansı Lütfen seçenekleri kaydetmek için <key>less-than</key> (< seçiniz Bu doküman &doctarih; tarihinde ve &security-level; güvenlik seviyesinde hazırlanmıştır. Parametre – Varlık Referansı <!-- "ISOLat2" varlığının tanımı... --> <!ENTITY % ISOLat2 SYSTEM "http://www.kekec.com/iso/isolat2-xml.entities" > <!-- ... Referans şu şekildedir. --> %ISOLat2; XML Grameri - Bölüm 8 - Varlık Tanımları Varlık tanımlarının grameri aşağıdaki şekildedir. Varlık deklarasyon grameri [70] EntityDecl ::= GEDecl | PEDecl [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>' [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>' [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?) [74] PEDef ::= EntityValue | ExternalID Name değeri bir varlık referansındaki varlığı veya bir parse edilmemiş varlık durumunda , ENTITY veya ENTITIES özelliğinin değerinin belirtmektedir.Eğer aynı varlık bir kerede fazla tanımlanmış ise ilk tanım bağlayıcı tanımdır ; kullanıcı opsiyonunda bir XML işleyici , eğer varlıklar birden fazla tanımlandı ise uyarı mesajı verebilir. İç varlıklar Eğer bir varlık tanımı EntityValue ise tanımlanan varlık bir iç varlık olarak adlandırılır.Ayrı bir fiziksel saklama nesnesi bulunmamaktadır ve varlığın içeriği tanımda verilmektedir.Bir iç varlık , parse esilmiş bir varlıktır. Örnek: <!ENTITY Pub-Status "Bu spesifikasyonun bir ön - sürümüdür."> Dış varlıklar Eğer varlık içsel değilse o zaman bir dış varlıktır ve tanımı izleyen şekildedir. Dış varlık deklarasyon grameri [75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral [76] NDataDecl ::= S 'NDATA' S Name [ VC: Notation Declared ] Eğer NDataDecl mevcut ise bu genel bir parse edilmemiş varlıktır fakat tersi durumda bir parse edilmiş varlık belirtimidir. Geçerlilik Kısıtlaması : Belirtim Tanımlaması Name içerisinde belirtilen değer belirtim için tanımlanan isim ile uyuşmalıdır. SystemLiteral , varlığın sistem belirteci olarak adlandırılır.Bu varlığın elde edilmesi için kullanılan bir URI dır.# işareti ve fragman belirteci URI ile kullanılması durumunda URI parçası değildir ; bir XML işleyici eğer fragman belirteci sistem belirteci olarak kullanılırsa , bir hata mesajı verebilir.Böylelikle bir URI doküman varlığı, dış DTD altkümesini içeren varlık veya başka bir dış parametre varlığı ile ilişkili olabilir. Bir XML işleyici ASCII olmayan bir karakteri URI içerisinde karakteri UTF – 8 düzeninde belirterek bir veya daha fazla byte şeklinde URI gösterim mekanizmasını kullanarak gösterebilir.(%HH à HH hexadecimal gösterim) Sistem belirtecinin yanısıra bir dış belirteç bir public belirteç içerebilmektedir.Varlığın içeriğini elde etmeye çalışan bir XML işleyici alternatif bir URI oluşturmak için public belirteci kullanabilir.Bir karşılaştırma denenmeden önce public identifier normalize edilmelidir. Dış Varlık Ö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 > Parse Edilmiş Varlıklar Metin tanımları Dış parse edilmiş varlıklar bir metin tanımı ile başlayabilirler. Metin Tanımı Grameri [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>' Bir metin tanımı literal olarak verilmelidir , bir parse edilmiş varlığa referans edilerek yapılmamalıdır.Dış parse edilmiş varlığın ilk kısmından başka yerde bir metin tanımı bulunamaz. İyi oluşturulmuş parse edilmiş varlıklar Doküman varlığı eğer doküman etiketi ile uyum sağlıyorsa iyi oluşturulmuş demektir.Benzer şekilde bir dış genel parse edilmiş varlık extParsedEnt etiketi ile uyum sağlıyorsa iyi oluşturulmuş demektir.Dış parametre verlığı da extPE etiketi ile uyum sağlıyorsa iyi oluşturulmuş demektir. İyi oluşturulmuş dış parse edilmiş varlık grameri [78] extParsedEnt ::= TextDecl? content [79] extPE ::= TextDecl? extSubsetDecl Bir iç genel parse edilmiş varlık eğer content etiketi ile uyum sağlayan bir yer değiştirme metnine sahipse , iyi oluşturulmuş demektir.Tüm iç parametre varlıkları tanım usulü ile iyi oluşturulmuş demektir. İyi oluşmuş varlık sırası XML dokümanının içerisindeki mantıksal ve fiziksel yapıların uygun yerleştirilmesi demektir.Herhangi bir varlığın içerisinde başlayan başlangıç etiketleri,boş eleman etiketleri,eleman,yorum,işleme komutları,karakter referansları ve varlık referansları başka birinin içerisinde sonlanamamaktadır. Varlıklar içerisinde karakter kodlama Bir XML dokümanındaki her dış parse edilmiş varlık karakterleri için farklı bir kodlama sistemi kullanabilir.Tüm XML işleyicileri UTF-8 veya UTF-16 kodlamasını okuyabilmelidir.UTF-16 ile kodlanmış varlıklar ISO/IEC 10646 standardı ile tanımlanmış Byte Sıra İşareti kullanılarak kodlanmış olmalıdır.Bu kodlama imzasıdır , XML dokümanının bir karakter verisi yada işaretlemesi değildir.XML işleyiciler bu karakteri UTF-8 ve UTF-16 kodlamalı dokümanları birbirinden ayırmak için kullanılmaktadır. Bir XML işleyicisi UTF-8 ve UTF-“6 kodlamalarını okumak için kullanılırken dünyada kullanılan kodalma standardları , XML işleyicileri için spesifik olarak dizayn edilebilmektedirler.UTF-8 ve UTF-16 dışında bir kodlama standardı ile hazırlanmış parse edilmiş varlıklar kodlama tanımını içeren bir metin tanımı ile başlamalıdırlar. Kodlama tanım grameri [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'" ) [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* /* Kodlama ismi sadece Latin karakterler içerebilir */ Doküman varlığında kodalma deklarasyonu XML tanımının bir parçasıdır.Bir kodlama tanımında , UTF-8 , UTF-16,”ISO-10646-UCS-2” ve “ISO-10646-UCS-4” Unicode / ISO / IEC 10646 standardlarının çeşitli kodlamaları için , “ISO-8859-1”,”ISO-8859-2” … “ISO-8859-9” ISO 8859 kısımları için ve “ISO-2022-JP”,”Shift_JIS” ve “EUC-JP” ise JIS X-0208-1997 standardının çeşitli formları kullanılmalıdır.XML işleyicileri diğer kodlamaları tanıyabilirler. Bir dış transfer protokolünün sağladığı bilginin yokluğunda (HTML veya MIME) tanımda belirtilen kodlama tanımının dışında bir kodlama kullanmak XML işleyici için hata teşkil etmektedir.Ayrıca XML işleyicinin işleyemeyeceği bit kodlama tanımına sahip varlıklar fatal error oluşturacaktır. Kodlama Örneği: <?xml encoding='UTF-8'?> <?xml encoding='EUC-JP'?> XML Grameri - Bölüm 9 - Varlık ve Referansların XML İşleyici Tarafından Ele Alınması Aşağıdaki tablo bir XML işleyicide karşılaşılması muhtemel tüm karakter referansları , varlık referansları ve parse edilmemiş varlık çağrılarını içermektedir. İçerik Referansı elemanın başlangıç etiketinden başlayan ve bitiş etiketine kadar olan ve content nonterminali için geçerli olan referanstır. Özellik Değer Referansı ya başlangıç etiketindeki özelliğin değeri yada bir özellik değerindeki varsayılan değerdir ve AttValue nontermiani için geçerli olan referanstır. Özellik Değeri Olarak Ortaya Çıkma bir Name değeri olarak referasn değildir ve ENTITY olarak tanımlanan bir özelliğin değeri yada ENTITIES olarak tanımlanan özelliğin değerinde yer alan boşluk ile ayrılmış bileşenlerdir. Varlık Değeri Referansı iç varlığın literal varlık değerindeki veya parametresindeki varlık tanımında yer alan ve EntıtyValue nonterminali için geçerli olan referanstır. DTD Referansı DTD nin iç veya dış altkümelerinde yer alan referanstır fakat bu EntityValue ve AttValue dışında yer almaktadır. Varlık Tipi Parametre İç Genel Dış Parse Edilmiş Genel Parse Edilmemiş Karakter İçerik Referansı Tanınmaz Dahil Geçerlemede dahil Yasak Dahil Özellik Değer Referansı Tanınmaz Literalde dahil Yasak Yasak Dahil Özellik Değeri Olarak Ortaya Çıkma Tanınmaz Yasak Yasak Uyarı Tanınmaz Varlık Değeri Referansı Literalde dahil Gözardı edilir Gözardı edilir Yasak Dahil DTD Referansı PV olarak dahil Yasak Yasak Yasak Yasak Tanınmaz DTD dışında , % karakterinin özel bir anlamı bulunmamaktadır,böylece DTD içerisindeki parametre varlık referansları içerik içerisinde işaretleme konteksti olarak ele alınmamaktadır.Benzer olarak , parse edilmemiş varlıların isimleri doğru olarak tanımlandıkları özelliklerin dışında tanınmamaktadırlar. Dahil Bir varlık yer değiştirme metni elde edilip işlendiği takdirde “dahil” olarak adlandırılmaktadır ve referansın yerinde dokümanın bir parçası şekinde bu metin kullanılmaktadır.Yer değiştirme metni hem karakter verisi hem de işaretleme konteksti içerebilmekte ve bu normal olarak tanımlanmaktadır.Bu durumda kaçış işaret limitleyicileri (amp,lt,gt,apos,quot varlıkları) ise istisnai olarak daima veri olarak işlenmektedirler.Örnek olarak “AT&T;” , “AT&T” olarak genişlemektedir.Bir karakter referansı eğer belirtilen karakter referansın yerine işleniyor ise dahil olarak adlandırılmaktadır. Geçerlemede Dahil Bir XML işleyici işlenmiş bir varlığa referans gördüğünde , dokümanı geçerlemek için yer değiştirme metnini işlemesi gerektmektedir.Eğer varlık bir sış varlık ise ve işleyici XML dokümanını geçerlemeye uğraşmıyor ise işleyici varlığın yer değiştirme metnini içerebilir ancak bunu yapmak zorunda değildir.Eğer geçerleme yapmayan bir parser yer değiştirme metnini içermiyorsa o zaman uygulamaya bunun tanındığını ancak varlığı okumadığını belirtmelidir. Bu kural SGML ve XML varlık mekanizmasının otomatik içerme tanımlamasına dayalıdır ve tanımlamada modülerlik desteği için dizayn edilmiştir fakat diğer bazı uygulamalar (spesifik doküman araması gibi) için uygun değildir.Örneğin tarayıcılar dış parse edilmiş bir varlık referansı ile karşılaştıklarında varlığın bulunması ile ilgili bir görsel uayrı içerebilir ve sadece ihtiyaç duyulduğunda onu göstermek için elde edebilmelidirler. Yasak İzleyen tanımlar yasak ve hata verecek tanımlardır: · İşlenmemiş bir varlığa referans · DTD içerisinde EntityValue ve AttValue içerisinde yer almayan bir karakter veya genel varlık referansının bulunması · Özellik değerinde bir dış varlığa referans Literalde Dahil Bizr özellik değerinde varlık referansı bulunduğunda veya bir parametre varlık referansı literal varlık değerinde bulunduğunda , referansın kendisi yerine yer değiştirme metni referansın bulunduğu yerde sanki dokümanın bir parçası gibi işlenmektedir.Bunun istisnası yer değiştirme metninde yer alan tek veya çift tırnaklı karakter daima normal veri karakteri olarak ele alınmakta ve literali sonlandırmamaktadır.Örneğin <!ENTITY % YN '"Evet"' > <!ENTITY SOYLEDI "Dedi ki &YN;" > iyi oluşturulmuşken izleyen örnek ise iyi oluşturulmamıştır. <!ENTITY EndAttr "27'" > <element |