Ge_erli XML Belgeleri Olu_turmak by hcj

VIEWS: 0 PAGES: 23

									       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ş

• 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ş
                          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          <?xml version ="1.0" encoding ="ISO-8859-9" ?>
                               <!DOCTYPE turlar-rehberi [<! Tip
  giriş kısmına eklenir.            tanımlaması_1>
                               <! Tip tanımlaması_2>
• DTD <!DOCTYPE işaretlemesi   <! Tip tanımlaması_3>
  ile başlar.
                               ]>
• Daha sonra root elementin
  ismi yazılır.                <turlar-rehberi>

• Köşeli parantezler içinde    <tur>

  tip tanımları yapılır.       <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>
           Element Tiplerinin Tanımlamak

<?xml version ="1.0" encoding ="ISO-   • Eğer DTD tanımına bağlı
   8859-9" ?>
                                         kalarak döküman
<!DOCTYPE turlar-rehberi [
                                         oluşturursak bu dökümana
<!ELEMENT turlar_rehberi                 “geçerli” döküman denir.
    (#PCDATA)>]>                       • İyi oluşumlu
]>
<turlar-rehberi>
                                       • Geçerli
Ege Turu
</turlar-rehberi>
           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
 Eklenen karakter       Açıklama
 +                      Element bir yada daha çok kullanılabilir.

 *                      Element sıfır yada daha çok kullanılabilir.
 ?                      Element sıfır veya bir kere kullanılabilir.
            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.

								
To top