230 likes | 433 Views
Bölüm 3 – Geçerli-XML Belgeleri Oluşturmak. İçindekiler 1.1 Geçerli XML Belgeleri 1.2 DTD 1.3 Element Tiplerini Tanımlamak 1.4 Element İçerik Tipleri 1.5 Element İçeriğini Tanımlamak 1.6 DTD’de Nitelik Tanımlamaları 1.7 DTD’yi Ayrı Dosya Olarak Tanımlama 1.8 Özet. Giriş.
E N D
Bölüm3 – Geçerli-XML Belgeleri Oluşturmak İçindekiler1.1 Geçerli XML Belgeleri1.2 DTD1.3 Element Tiplerini Tanımlamak1.4 Element İçerik Tipleri 1.5 Element İçeriğini Tanımlamak 1.6 DTD’de Nitelik Tanımlamaları 1.7 DTD’yi Ayrı Dosya Olarak Tanımlama 1.8 Özet
Giriş • Geçen bölümde “iyi-biçimli” XML belgesi nasıl oluşturulur konusundan bahsetmiştik. • Herkesin kolayca XML belgesi oluşturabileceğini görmüş olduk • Ama bu uygulamalar için yeterli değildir. • Belgenin yapısı hakkında bilgiye sahip olamamız gerekir.
Giriş • Dökümanı Tanımlamak Neden Önemli? • Standartlaşma ve yaygın kullanım • MathML , CML,AML • Standartlaşmış veya geniş kabul gören bir döküman tanıtım belgesi
DTD (Document Type Definition) • DTD, XML belgesinin giriş kısmına eklenir. • DTD <!DOCTYPE işaretlemesi ile başlar. • Daha sonra root elementin ismi yazılır. • Köşeli parantezler içinde tip tanımları yapılır. <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [<! Tip tanımlaması_1> <! Tip tanımlaması_2> <! Tip tanımlaması_3> ]> <turlar-rehberi> <tur> <tur-adi cinsi="kültür gezisi">Ege Turu</tur-adi> <güzergah>Ayvalık, İzmir, Çeşme, Kuşadası, Aydın</güzergah> <baslangic-tarihi>07-07-2004</baslangic-tarihi> <bitis-tarihi>07-08-2004</bitis-tarihi> <ulasim>Otobüs</ulasim> <konaklama>3,4 yıldızlı oteller</konaklama> </tur> </turlar-rehberi>
<?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (#PCDATA)>]> ]> <turlar-rehberi> Ege Turu </turlar-rehberi> Eğer DTD tanımına bağlı kalarak döküman oluşturursak bu dökümana “geçerli” döküman denir. İyi oluşumlu Geçerli Element Tiplerinin Tanımlamak
Element İçeriğini Tanımlamak Element_sira.xml <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(tur-adı,güzergah, başlangıç-tarihi)> <!ELEMENT tur-adı(#PCDATA)> <!ELEMENT güzergah(#PCDATA)> <!ELEMENT başlangıç-tarihi(#PCDATA)> ]>
Element İçeriğini Tanımlamak Element_secenek.xml <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(tur-adı | güzergah | başlangıç-tarihi)> <!ELEMENT tur-adı(#PCDATA)> <!ELEMENT güzergah(#PCDATA)> <!ELEMENT başlangıç-tarihi(#PCDATA)> ]> Seçenekleri Artırmak
Element İçeriğini Tanımlamak Element_secenek.xml <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(tur-adı? | güzergah | başlangıç-tarihi)> <!ELEMENT tur(tur-adı | güzergah | başlangıç-tarihi)+> <!ELEMENT tur(tur-adı , güzergah , başlangıç-tarihi | bitiş-tarihi)> <!ELEMENT tur(tur-adı , güzergah , (başlangıç-tarihi | bitiş-tarihi)+)> <!ELEMENT tur(#PCDATA | tur-adı | güzergah | (başlangıç-tarihi )*> <!ELEMENT tur-adı(#PCDATA)> <!ELEMENT güzergah(#PCDATA)> <!ELEMENT başlangıç-tarihi(#PCDATA)> ]>
ANY ve EMPTY içerik tanımlaması • ANY • Her türlü olasılıkta içerik kullanımını tanımlar.DTD’nin en esnek tanımlamasıdır. • <!ELEMENT tur (tur-adı,güzergah, (başlangıç-tarihi | bitiş-tarihi)+)> tanımlaması yerine • <!ELEMENT tur ANY> yazılabilir. • EMPTY • Boş içerikli elementler için EMPTY ifadesi kullanılır. <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(resim)> <!ELEMENT resim EMPTY> ]>
DTD’de Nitelik Tanımlama Nitelik_tanımlama.xml <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(tur-adı,güzergah, başlangıç-tarihi)> <!ELEMENT tur-adı(#PCDATA)> <!ELEMENT güzergah(#PCDATA)> <!ELEMENT başlangıç-tarihi(#PCDATA)> <!ATTLIST tur cinsi CDATA #IMPLIED> ]> XML dosyasında <turlar-rehberi> <tur cinsi=“kültür”> .......... ...........
DTD’de Nitelik Tanımlama • Nitelik Tipleri • Niteliğin karakter verisi içereceğini belirten ve CDATA ile gösterilen nitelik tipi tanımlaması • Niteliğin değerinin belirtilmesinde seçim sunan “seçimli nitelik tipi” • Özel ifadelerle tanımlı nitelik tipleri • Nitelik varsayımı • Element içinde, nitelik kullanımının zorunlu olup olmadığını belirler.Dört çeşit olabilir • #REQUIRED • #IMPLIED • #FIXED • Tanımlı Değer
Nitelik Varsayımı • #REQUIRED • Element içinde belirtilen niteliğin tanımlanmasını zorunlu kılar. • Eğer nitelik tanımlanmazsa geçersiz belge hatası oluşur. <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(#PCDATA)> <!ATTLIST tur cinsi CDATA #REQUIRED>
Nitelik Varsayımı • #IMPLIED • Niteliğin tanımlaması seçime bağlıdır. <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(#PCDATA)> <!ATTLIST tur cinsi CDATA #IMPLIED>
Nitelik Varsayımı • Tanımlı Değer • Elementin nitelik değerini belirtmemizi sağlar.Element içinde nitelik tanımı yapılıp yapılmaması zorunlu değildir. <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(#PCDATA)> <!ATTLIST tur cinsi CDATA “pansiyon”>
Nitelik Varsayımı • #FIXED • Kullanımı tanımlı değer gibidir. • Farklı olarak tanımlı değerleri sabitler ve farklı değer tanımlamaya izin vermez. <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(#PCDATA)> <!ATTLIST tur cinsi CDATA #FIXED “pansiyon”>
Nitelik Tipleri • Seçmeli nitelik değerleri tanımlaması <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi [ <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(#PCDATA)> <!ATTLIST tur konaklama (pansiyon | otel) #REQUIRED> <!ATTLIST tur konaklama (pansiyon | otel) #IMPLIED> <!ATTLIST tur konaklama (pansiyon | otel) “otel”> ]>
Nitelik Tipleri • Özel İfadelerle tanımlı nitelik tipleri • ID: Ayni nitelik her elementte farklı değer almalıdır. • IDREF: ID referansı tanımlayan bir anahtar kelimedir. Belirtilen ID’nin atnımlayıcısına başvurur.
1 <?xml version = "1.0"?> 2 3 <!-- Fig. 6.8: IDExample.xml --> 4 <!-- Example for ID and IDREF values of attributes --> 5 6 <!DOCTYPE bookstore [ 7 <!ELEMENT bookstore ( shipping+, book+ )> 8 <!ELEMENT shipping ( duration )> 9 <!ATTLIST shipping shipID ID #REQUIRED> 10 <!ELEMENT book ( #PCDATA )> 11 <!ATTLIST book shippedBy IDREF #IMPLIED> 12 <!ELEMENT duration ( #PCDATA )> 13 ]> 14 15 <bookstore> 16 <shipping shipID = "s1"> 17 <duration>2 to 4 days</duration> 18 </shipping> 19
20 <shipping shipID = "s2"> 21 <duration>1 day</duration> 22 </shipping> 23 24 <book shippedBy = "s2"> 25 Java How to Program 3rd edition. 26 </book> 27 28 <book shippedBy = "s2"> 29 C How to Program 3rd edition. 30 </book> 31 32 <book shippedBy = "s1"> 33 C++ How to Program 3rd edition. 34 </book> 35 </bookstore>
DTD’yi Ayrı Bir Dosya Olarak Tanımlamak • Avantajları: • DTD’yi birden fazla XML belgesi kullanabilir. • DTD ‘de yapılacak değişikler onu kullanan tüm XML dosyalarını etkileyecek. • Nasıl oluşur? • Ayrı bir dosyada düzenlenir. • Dtd uzantılı olarak kaydedilir. • [] parantezler kullanılmaz.
Dıştadtd_tanimlama.dtd <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!ELEMENT turlar_rehberi (tur)> <!ELEMENT tur(tur-adı,güzergah, başlangıç-tarihi)> <!ELEMENT tur-adı(#PCDATA)> <!ELEMENT güzergah(#PCDATA)> <!ELEMENT başlangıç-tarihi(#PCDATA)> <!ATTLIST tur cinsi CDATA #IMPLIED> Dışdtd_döküman.xml <?xml version ="1.0" encoding ="ISO-8859-9" ?> <!DOCTYPE turlar-rehberi SYSTEM “dıştadtd_tanimlama.dtd”> <turlar-rehberi> <tur> <tur-adı> Karadeniz turu</tur-adı> ...... </turlar-rehberi>
Özet • DTD, XML belgelerinin şablonu, tipini çıkarmaya yarayan yöntemdir. • Bu yönteme uyan belgelere “geçerli”, uymayanlara “geçersiz” belge denir. • “Geçerli” belge aynı zamanda “iyi biçimli” belge anlamına da gelir. • Ama yukarıdaki ifadenin tersi doğru değildir.