• XML DTD'lere giriş. XML Şema Dilleri

    Belge Türü Tanımı (DTD) geçerli yapı taşlarını bildirir XML belgesi. İzin verilen öğelerin ve niteliklerin bir listesiyle belgenin yapısını tanımlar.

    DTD hem XML belgesinin kendi kodunda hem de harici dosya bir XML belgesine bağlamak.

    Dahili DTD Beyanı

    DTD içeride bildirilirse XML dosyası a, o zaman özel bir beyan etiketi içine alınmalıdır DOKTİP, aşağıdaki sözdizimine sahiptir:

    Dahili DTD'ye sahip bir XML belgesi örneği:

    ]> Tove Jani Hatırlatma Bu hafta sonu beni unutma

    Yukarıdaki örnekteki DTD şu şekilde yorumlanır:

    • !DOCTYPE notu belgenin kök öğesinin olduğunu belirtir Not
    • !ELEMENT notu elemanın olduğunu belirtir Not dört unsur içerir: için, itibaren, başlık, gövde
    • !ELEMENT için elemanın olduğunu belirtir ile olmalı
    • !ELEMENT itibaren elemanın olduğunu belirtir itibaren"#PCDATA" türünde olmalıdır
    • !ELEMENT başlığı elemanın olduğunu belirtir başlık"#PCDATA" türünde olmalıdır
    • !ELEMENT gövdesi elemanın olduğunu belirtir vücut"#PCDATA" türünde olmalıdır

    Harici DTD

    DTD harici bir dosyada bildirilmişse bağlantı şu şekilde yapılır:

    Aşağıdaki, öncekiyle aynı XML belgesidir ancak harici bir DTD bildirimine sahiptir:

    Tove Jani Hatırlatma Hafta sonu beni unutma

    Ve işte DTD'yi bildiren "note.dtd" dosyasında bulunanlar:

    DTD ne için kullanılır?

    DTD ile XML dosyalarınızın her biri kendi formatının açıklamasını taşıyabilir.

    DTD'ler sayesinde farklı, ilgisiz insan grupları, veri alışverişine ilişkin standartlar üzerinde anlaşmaya varabilir.

    DTD ile ne elde ettiğinizden emin olabilirsiniz. dış kaynaklar veriler doğru olacaktır.

    Ayrıca kendi verileriniz üzerinde doğrulama kontrolleri gerçekleştirmek için DTD'leri kullanabilirsiniz.

    DTD, bir XML belgesinin yapısının doğrulandığı bir dizi sözdizimi kuralıdır. DTD, bir XML belgesinin yapısını açıkça tanımlar, öğeleri ve bunların niteliklerini belirtir ve DTD'yi temel alan tüm XML belgeleri için geçerli olan diğer bilgileri sağlar.

    DTD'nin varlığının isteğe bağlı olduğunu unutmayın. Bir DTD mevcutsa XML sistemi, XML belgesini yorumlamak için bunu kullanır. DTD yoksa XML sisteminin belgeyi kendine göre yorumlaması beklenir. Ancak yine de XML belgeleri için DTD'ler oluşturulması önerilir çünkü bu onların yorumlanmasını ve yapı kontrolünü kolaylaştırır.

    DTD, doğrudan bir XML belgesine, bir URL'ye veya ikisinin birleşimine başvurularak dahil edilebilir. Bir XML belgesine doğrudan bir DTD eklerken, DTD tanımı önsözün hemen sonrasına yerleştirilir:

    Kök öğe_adı özelliği, XML belgesinin tamamını içeren etiketlerdeki kök öğenin adına karşılık gelir. "Diğer bildirimler" bölümü öğeler, nitelikler vb. için tanımları içerir.

    Belki DTD'yi yerleştirmeyi tercih edersiniz ayrı dosya modüler bir program yapısı sağlamak. Bir XML belgesinde harici bir DTD'ye yapılan referansın nasıl göründüğüne bakalım. Görev basit bir komutla çözülür:

    Dahili DTD'de olduğu gibi, kök öğe_adı, XML belgesinin tamamını içeren etiketlerdeki kök öğenin adıyla eşleşmelidir. SYSTEM özelliği some_dtd.dtd dosyasının şu konumda bulunduğunu gösterir: Yerel sunucu. Ancak some_dtd.dtd'ye mutlak URL'si ile de başvurulabilir. Son olarak tırnak işaretleri, yerel veya uzak sunucuda bulunan harici DTD'nin URL'sini belirtir.

    Peki Liste 14.1 için DTD'yi nasıl oluşturursunuz? Öncelikle XML belgesinde harici bir DTD'ye bağlantı oluşturacağız. Önceki bölümde bahsedildiği gibi bir DTD referansı şuna benzer:

    Liste 14-1'e dönersek, yemek kitabının kök öğenin adı olduğunu, yemek kitabı.dtd'nin ise DTD dosyasının adı olduğunu görüyoruz. DTD'nin içeriği Liste 14.2'de gösterilmektedir ve aşağıda yer almaktadır. detaylı açıklamalar tüm çizgiler.

    Listeleme 14.2. Listeleme 14.1 DTD(yemek kitabı.dtd)

    ] >

    Bu gizemli belge ne anlama geliyor? Dış karmaşıklığa rağmen gerçekte oldukça basittir. Liste 14.2'nin içeriğine göz atalım:

    Önümüzde yukarıda bahsedilen XML önsözü var.

    Üçüncü satır XML öğesini açıklar. bu durum yemek kitabının temel öğesidir. Bunu parantez içindeki tarif kelimesi takip eder. Bu, yemek kitabı etiketlerinin tarif adı verilen iç içe geçmiş bir etikete sahip olduğu anlamına gelir. + işareti, ana yemek kitabı etiketlerinin bir veya daha fazla çift tarif etiketi içerdiğini belirtir.

    Dördüncü satır tarif etiketini açıklar. Tarif etiketinin dört alt etiketi olduğunu belirtir: başlık, açıklama, malzemeler ve süreç. Etiket isimlerinden sonra tekrarlama işaretleri bulunmadığından (sonraki bölüme bakın), listelenen etiketlerin her birinden tam olarak bir çift, tarif etiketlerinin içine yerleştirilmelidir.

    İşte iç içe etiketler içermeyen bir etiketin ilk tanımı. Tanım gereği, işaretlemenin parçası olarak kabul edilmeyen rastgele karakter verileri olan #PCDATA'yı içerir.

    Tanım gereği, içindekiler öğesi, içerik adlı bir veya daha fazla etiket içerir. Liste 14.1'e bakın, anlayacaksınız.

    İçerik öğesi tek bir bileşene karşılık geldiğinden, bu öğenin basit karakter verileri içermesi mantıklıdır.

    Süreç öğesi, adım öğesinin bir veya daha fazla örneğini içerir.

    Adım öğesi, içerik öğesi gibi, listedeki tek bir öğeye karşılık gelir. yüksek seviye. Bu nedenle karakter verisi içermesi gerekir.

    14-1 listesindeki tarif öğesinin bir nitelik içerdiğini unutmayın. Bu özellik, kategori, tarifin ait olduğu genel kategoriyi tanımlar; gösterilen örnekte kategori "İtalyan"dır. ATTLIST tanımı hem öğe adını hem de öznitelik adını belirtir. Ayrıca, her tarifin belirli bir kategoriye atanması sınıflandırmayı basitleştirir, böylece öznitelik gerekli (#REQUIRED) olarak bildirilir.

    Son satır sadece DTD tanımını sonlandırıyor. Tanımın her zaman doğru şekilde tamamlanması gerekir, aksi takdirde bir hata meydana gelecektir.

    Bu bölümü tipik bir DTD dosyasının ana bileşenlerinin bir özetiyle bitireceğim:

    • eleman tipi bildirimleri;
    • nitelik bildirimleri;
    • Kimlik, IDREF ve IDREFS
    • varlık bildirimleri.

    Bu bileşenlerden bazıları liste 14.2'nin açıklamasında zaten karşımıza çıkmıştır. Daha sonra her bir bileşen daha ayrıntılı olarak açıklanacaktır.

    Öğe bildirimleri

    Bir XML belgesinde kullanılan tüm öğeler, belgeye eşlik eden bir DTD'de tanımlanmalıdır. Daha önce iki yaygın tanım türünü görmüştük: diğer öğeleri içeren bir öğe için ve karakter verilerini içeren bir öğe için. Bu tanımöğenin yalnızca karakter verilerini içerdiğini belirtir:

    Süreç öğesinin aşağıdaki tanımı, adım adında tam olarak bir iç içe geçmiş öğe içerdiğini belirtir:

    Bununla birlikte, bir adımdan (adımdan) gelen süreçler (süreç) oldukça nadirdir - büyük olasılıkla birkaç adım olacaktır. Bir öğenin iç içe geçmiş bir adım öğesinin bir veya daha fazla örneğini içerdiğini belirtmek için tekrarlama bayrağını kullanın:

    İç içe geçmiş öğelerin sayısı çeşitli şekillerde ayarlanabilir. Tam liste Eleman operatörleri Tabloda verilmiştir. 14.1.

    Tablo 14.1. Eleman Operatörleri

    Öğe birden fazla iç içe geçmiş öğe içerecekse, bunlar ana öğenin tanımında virgüllerle ayrılmış olarak listelenmelidir:

    Tekrarlama belirtisi olmadığından her etiketin tam olarak bir kez geçmesi gerekir.

    Bir öğenin tanımı kullanılarak iyileştirilir mantıksal operatörler. Her zaman bir veya daha fazla peynir (peynir) veya et (et) içeren makarna içeren tariflerle çalıştığınızı varsayalım. Bu durumda bileşen elemanı şu şekilde tanımlanır:

    Makarna öğesinin bileşen öğesi içinde bulunması gerektiğinden tekrarlama işareti + ile gösterilir. Bunu peynir unsuru veya et unsuru takip eder; Bir tarif her zaman ikisinden birini içerdiğinden, alternatifleri dikey çubuklarla ayırıp + işaretiyle parantez içine alıyoruz.

    Başka türde eleman tanımları da vardır. Sadece en basit durumları ele aldık. Ancak sunulan materyal bu bölümün geri kalanında verilen örnekleri anlamak için oldukça yeterlidir.

    Öznitelik bildirimleri

    Öğe nitelikleri, öğelerle ilişkili değerleri açıklar. XML öğeleri, örneğin HTML öğeleri, sıfır, bir veya daha fazla özelliğe sahip olabilir. Niteliklerin bildirilmesine ilişkin genel sözdizimi aşağıdaki gibidir:

    element_name, etikete dahil edilecek öğenin adını belirtir. Daha sonra öğeyle ilişkili nitelikler listelenir. Her öznitelik bildirimi üç ana bileşenden oluşur: bir ad, bir veri türü ve özniteliğin özelliklerini tanımlayan bir bayrak. Üç nokta(...) yerine başka niteliklerin bildirimleri yerleştirilebilir.

    Liste 14.2'de zaten basit bir özellik bildirimi görmüştük:

    Ancak resimden de anlaşılacağı üzere genel tanım Aynı anda birden fazla öznitelik bildirilebilir. Diyelim ki, kategori özelliğine ek olarak, tarif öğesine ek bir zorluk özelliği de bağlamak istiyorsunuz. Her iki özellik de aynı listede bildirildi:

    Reklamları bu şekilde biçimlendirmek isteğe bağlıdır; ancak çok satırlı bildirimler tek satırlı bildirimlerden daha okunabilirdir. Ayrıca her iki özellik de gerekli olduğundan, reci re etiketi herhangi bir özellik ile sınırlandırılamaz, her iki özelliği aynı anda içermesi gerekir. Örneğin aşağıdaki etiket geçersiz kabul edilir:

    Neden? Çünkü kategori özelliğinden yoksundur. Geçerli bir etiket her iki özelliği de içermelidir:

    Öznitelik işlemeye yönelik özel koşullar, Tabloda listelenen üç bayrakla açıklanmaktadır. 14.2.

    Tablo 14.2. Özellik bayrakları

    Özellik türleri

    Bir öğe niteliği belirli bir türle bildirilebilir. Öznitelik türleri aşağıda açıklanmıştır.

    CDATA özellikleri

    Nitelikler sıklıkla genel karakter verileri içerir. Bu tür niteliklere CDATA nitelikleri denir. Aşağıdaki örnek zaten bu bölümün başında görüldü:

    ID, IDREF ve IDREFS Nitelikleri

    Verilerin (örneğin, bir kullanıcı veya bir veritabanında saklanan bir ürün hakkındaki bilgiler) tanımlayıcılar aracılığıyla açık bir şekilde temsil edilmesi fikrine kitabın önceki bölümlerinde defalarca karşılaşılmıştır. Belgeler arasındaki çapraz referanslar yalnızca XML'de kullanılmadığı için tanımlayıcılar da sıklıkla XML'de kullanılır. ortak görevler veri işleme, aynı zamanda Dünya çapında Web (köprüler).

    Öğe kimlikleri kimlik özelliğine atanır. Her tarifi benzersiz bir kimlikle ilişkilendirmek istediğinizi varsayalım. İlgili DTD parçası şöyle görünebilir:

    Bundan sonra, belgedeki tarif öğesinin bildirimi şu şekilde görünebilir:

    alla carbonara makarnası

    Tarif, ital003 tanımlayıcısıyla benzersiz bir şekilde tanımlanır. Redpe-id özelliğinin tip kimliğine sahip olduğunu, dolayısıyla ital003'ün başka bir öğenin tarif kimliği özelliğinin değeri olarak kullanılamayacağını unutmayın, aksi takdirde belge sözdizimsel olarak geçersiz kabul edilecektir. Şimdi, diyelim ki daha sonra bu tarife başka bir belgeden, örneğin kullanıcının favori tarifler listesinden başvurmak istiyorsunuz. Çapraz referansların ve IDREF özelliğinin devreye girdiği yer burasıdır. IDREF özniteliğine, bir URL'nin köprüdeki bir sayfayı tanımlamak için kullanılmasına benzer şekilde, öğeye atıfta bulunmak için kullanılan bir tanımlayıcı atanır. Aşağıdaki XML kod parçacığını göz önünde bulundurun:

    XML belgesinin işlenmesi sırasında öğe, belirtilen tanımlayıcıya (örneğin, tarifin adı) sahip tarife daha açıklayıcı bir bağlantıyla değiştirilir. Belirtilen tarife atlamayı kolaylaştırmak için muhtemelen bir köprü olarak biçimlendirilecektir.

    Numaralandırılmış Nitelikler

    Bir nitelik bildirirken o niteliğin alabileceği tüm geçerli değerleri sıralayabilirsiniz. Örneğimizde bu kullanışlı olacaktır çünkü geçerli kategorilerin bir listesini hemen tanımlayabilirsiniz. Yukarıdaki beyan şu şekilde yazılmıştır:

    Geçerli değer listelerini kullanırken, listelenen tüm değerler CDATA formatında olduğundan bildirime CDATA türünü eklemenize gerek olmadığını unutmayın.

    Varsayılan değere sahip numaralandırılmış özellikler

    Bazen bir öznitelik için varsayılan bir değer bildirmek uygun olabilir. Muhtemelen bunu daha önce açılır listeli formlar oluştururken yapmışsınızdır. Örneğin, yemek kitabınızdaki tariflerin çoğu İtalyanca ise, tarif özelliği genellikle İtalyanca olarak sınıflandırılacaktır. Bu durumda, İtalyanca kategorisi varsayılan olarak atanabilir:

    Kategori özelliği açıkça ayarlanmamışsa, varsayılan olarak İtalyanca olur.

    ENTITY ve ENTITIES özellikleri

    XML belgelerindeki veriler her zaman metin değildir; belge aynı zamanda ikili bilgiler (grafikler gibi) de içerebilir. Bu tür verilere varlık özelliği kullanılarak başvurulabilir. Örneğin, açıklama öğesinin açıklamasında, bir grafik görüntüsüyle recipePicture niteliğini belirtebilirsiniz:

    Ayrıca ENTITY'yi ENTITIES ile değiştirerek birden fazla varlığı aynı anda bildirebilirsiniz. Değerler boşluklarla ayrılır.

    NMTOKEN ve NMTOKENS özellikleri

    NMTOKEN nitelikleri sınırlı bir kümedeki karakter dizileridir. NMTOKEN türündeki bir öznitelik bildirimi, özniteliğin değerinin eşleştiğini varsayar yerleşik kısıtlamalar. Kural olarak NMTOKEN özelliğinin değeri tek bir kelimeden oluşur:

    NMTOKEN'i NMTOKENS ile değiştirerek aynı anda birden fazla özelliği bildirebilirsiniz. Değerler boşluklarla ayrılır.

    Varlık bildirimleri

    Varlık bildirimi, PHP de dahil olmak üzere bazı programlama dillerindeki define komutuna benzer. Varlık referanslarından bir önceki bölüm olan XML Söz Dizimini Anlamak'ta kısaca bahsedilmişti. Her ihtimale karşı, varlık referansının başka bir içerik parçasının yerine kullanıldığını unutmayın. Bir XML belgesinin işlenmesi sırasında, bir varlığın tüm oluşumları, onun temsil ettiği içerikle değiştirilir. İki tür varlık vardır: iç ve dış.

    Dahili varlıklar

    Dahili varlıklar, bir adı bir metin parçasıyla ilişkilendiren dize değişkenleri gibidir. Örneğin, telif hakkı bilgilerine atıfta bulunacak bir ad tanımlamak istiyorsanız şunun gibi bir varlık bildirebilirsiniz:

    Belge işleme sırasında, &Telif Hakkı ifadesinin tüm örnekleri "Telif Hakkı 2000 ŞirketinizinAdı" metniyle değiştirilir. Her hakkı saklıdır. Değiştirilen metindeki tüm XML, orijinal belgede mevcutmuş gibi ele alınır.

    Dahili varlıklar, bir varlığı nispeten ilgisiz bir şekilde kullanmayı planladığınız durumlarda kullanışlıdır. çok sayıda XML belgeleri. Çok sayıda belgeyle harici varlıkların kullanılması daha iyidir.

    Harici varlıklar

    Harici varlıklar başka bir dosyadaki içeriğe atıfta bulunmak için kullanılır. Bu türdeki varlıklar şunları içerebilir: metin bilgisi, ancak aynı zamanda ikili verilere (grafikler gibi) de başvurabilir. Önceki örneğe dönersek, gelecekte düzenlemeyi kolaylaştırmak için telif hakkı bilgilerini ayrı bir dosyaya kaydetmeye karar verdiğinizi varsayalım. Oluşturulan dosyanın bağlantısı şuna benzer:

    XML belgesinin sonraki işlenmesinde, tüm &Telif Hakkı referansları, telif hakkı.xml belgesinin içeriğiyle değiştirilir. Değiştirilen metindeki tüm XML, orijinal belgede mevcutmuş gibi ele alınır.

    Harici varlıklar da referans vermek için kullanışlıdır grafik görseller. Örneğin, bir XML belgesine grafik logo eklemek istiyorsanız harici bir varlık oluşturun:

    XML Kaynakları

    Yukarıdaki materyal anlamak için yeterli olsa da basit yapı XML belgeleri verilen açıklama tamamlanmadı. Aşağıda daha ayrıntılı bilgi içeren İnternet kaynaklarına bağlantılar verilmiştir:

    Bu bölümün geri kalanında XML belgelerini işlemek için PHP'nin nasıl kullanılacağı anlatılmaktadır. İlk bakışta görev çok karmaşık görünüyor (her türden herhangi bir belgenin sözcüksel analizi birçok zorluğa neden olur).

    Ancak PHP'nin temel XML stratejisine aşina olduğunuzda, şaşırtıcı derecede basittir.

    Belge Şeması Açıklaması

    DTD, belirli bir işaretleme dili için bir belgenin şemasını, söz konusu belgenin sözdizimsel kısıtlamaları açısından sınıfını (veya türünü) tanımlayan bir dizi bildirim (parametre nesneleri, öğeler ve nitelikler) aracılığıyla açıklar. Bir DTD ayrıca bir belgenin yapısını tanımlamak için her zaman gerekli olan ancak diğer taraftan belirli belgelerin yorumlanmasını etkileyebilecek yapıları da bildirebilir.

    Parametre Nesnelerini Bildirme

    Bir parametre nesnesi bildirimi, DTD'nin herhangi bir yerinde başvurulabilen ve genişletilebilen belirli türde bir makroyu tanımlar. Bu makrolar belgenin kendisinde görünmeyebilir, yalnızca DTD'de görünebilir. Bir parametre nesnesine DTD adıyla başvuruluyorsa, bu nesnenin içeriğini belirten bir dizeye genişler.

    Nesne parametresi yazı tipi stili bir grup etiket içerir TT | ben | b | BÜYÜK | KÜÇÜK.

    "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

    Satır içi parametre nesnesi metin verilerini ve fontstyle, tümce, özel ve formctrl gibi dört parametre nesnesini daha içerir.

    Eleman Beyanı

    Öğe bildirimleri, bir belgede izin verilen öğe adlarının bir listesini oluşturur ve ayrıca her öğe için etiketler (gerekli olup olmadıkları) ve içerik modeli hakkındaki bilgileri tanımlar.

    Çeşitli anahtar kelimeler ve semboller öğenin içeriğini tanımlar:

    • EMPTY - boş içerik
    • HERHANGİ BİR - herhangi bir içerik
    • , - sırayı gösterir
    • | - alternatiflerin ayrılması
    • () - gruplandırma
    • * - herhangi bir sayıda öğe (sıfır veya daha fazla)
    • + - en az bir öğe (bir veya daha fazla)
    • ? - öğenin isteğe bağlı varlığı (sıfır veya bir)
    • * Değilse, + veya? - yalnızca bir öğe bulunmalıdır

    (DT|DD) +>

    DL öğesi herhangi bir sırada bir veya daha fazla DT veya DD öğesi içermelidir.

    (%block;|SCRIPT) + -(FORM) >

    FORM öğesi, blok nesnesi parametresine veya SCRIPT öğelerine sahip bir veya daha fazla öğeyi herhangi bir sırayla içermelidir, ancak başka bir FORM öğesi içermesi mümkün değildir.

    Özellik Tanımı

    Bir DTD belgesindeki her öğe, bir öznitelik listesiyle ilişkilendirilebilir. Bunun için, öznitelik listesinin ilişkilendirilebileceği öğenin adını ve her özniteliğin parametrelerini (adı, türü ve varsayılan özellikleri) belirten !ATTLIST yönergesi kullanılır.

    Örneğin:

    ad CDATA #ZORUNLU>

    Bu örnek tanımlar ad özelliği MAP öğesi için. Bu zorunludur.

    Aşağıdaki nitelik türleri vardır:

    • CDATA (Karakter veri seti) - nitelik değeri herhangi bir karakter verisi olabilir
    • Kimlik - özelliğin değeri, öğenin benzersiz tanımlayıcısı olmalıdır
    • IDREF - öğenin değeri, öğenin kimliğine göre bir referanstır
    • IDREFS - IDREF ile aynıdır, ancak tek bir tanımlayıcıya göre değil, birkaç tanımlayıcıya göre bağlantı olasılığı vardır
    • NMTOKEN - niteliğin değeri, isme biraz benzeyen bir karakter dizisi olabilir (dolayısıyla ad - ad belirteci). Bu, XML adları için izin verilen karakterlerin herhangi bir birleşimini içeren bir dizedir.
    • NMTOKENS - nitelik değeri, değerlerin bir listesidir
    • ENTITY - değer harici bir varlığa atıfta bulunmak için kullanılır.
    • ENTITIES - boşluklarla ayrılmış harici varlıkların bir listesini belirtmenize olanak sağlar.
    • NOTASYON - nitelik değeri önceden tanımlanmış gösterimlerden biri olabilir
    • NOTASYONLAR - bir notasyon listesi ayarlamanıza olanak sağlar.
    • Listeler ve NOTASYON listeleri
    • SAYILANDIRMA - olası değer alternatiflerinin bir listesini belirtir.

    Aşağıdaki varsayılan özellikler vardır:

    1. IMPLIED - nitelik değeri isteğe bağlıdır;
    2. ZORUNLU - özellik değeri belirtilmelidir;
    3. DÜZELTİLDİ - Bu özelliğin değeri DTD'de sabit olarak ayarlanmıştır ve belgede değiştirilemez;
    4. varsayılan olarak kullanılan belirli bir değer.

    Bir Belgeyi Belirli bir DTD ile İlişkilendirme

    Bir belgeyi belirli bir DTD ile ilişkilendirmek için Belge Türü Bildirimi öğesinin belge gövdesinin başında görünmesi gerekir.

    DTD'nin konumuna bağlı olarak Belge Türü Bildirimi iki türde olabilir:

    • DTD'nin iç alt kümesi

    Belgenin gövdesinde bir dizi DTD bildirimi bulunur. Örneğin:

    ]> ]>

    • DTD'nin harici alt kümesi

    DTD bildirim seti ayrı bir yerde bulunur Metin dosyası.dtd uzantılı Bu durumda dosyaya bağlantı, genel tanımlayıcı ve/veya sistem tanımlayıcı aracılığıyla yapılabilir. Örneğin:

    "http://www.w3.org/TR/html4/strict.dtd">

    Örnek

    Kişi listesini açıklayan çok basit bir XML DTD örneği:

    (kişi*) > (isim, doğum tarihi?, cinsiyet?, sosyal güvenlik numarası?) > (#PCDATA) > (#PCDATA) > (#PCDATA) >

    İlk satırdan başlayarak:

    1. Öğe Herhangi bir sayıda öğe içerir İmza<*>0, 1 veya daha fazla elemanın mümkün olduğu anlamına gelir Bir öğenin içinde .
    2. Öğe Öğeleri içerir , , Ve . İmzaöğenin isteğe bağlı olduğu anlamına gelir. Öğe içermiyoryani eleman mutlaköğe içerir .
    3. Öğe veri içerir.
    4. Öğe veri içerir.
    5. Öğe veri içerir.
    6. Öğe veri içerir.

    Bu DTD'yi kullanan örnek bir XML belgesi:

    > > > Fred'in blogları > > 27/11/2008> > Erkek > > 1234567890> > >

    Ayrıca bakınız


    Wikimedia Vakfı. 2010.

    Diğer sözlüklerde "DTD"nin ne olduğunu görün:

      DTD- , bir ASCII Datei (ASCII) silinmiş Yapısal Yapısal Dokumenten'de ölürseniz, tüm Tipleri beğenebilirsiniz. Eine DTD wird nach den Regeln der uluslararası anerkannten… … Universal-Lexikon

      DTD- şu anlama gelebilir: İçindekiler 1 Medya 2 Müzik 3 Spor 4 Teknolojiler 4.1 Bilgisayar … Wikipedia

      DTD- steht fur: Inhaltsverzeichnis 1 Medien 2 Music 3 Technologien 3.1 Bilgisayar 3.1.1 Oyun … Deutsch Wikipedia

      dd- Steht für: Darwin Digital Television, bir Avustralya Fernsehstation Delta Tau Delta, bir ABD Amerikan Öğrenci Organizasyonu Belge Türü Tanımı, bir Dokumenttypdefinition … Deutsch Wikipedia

      DTD- (dē tē dēʹ) n. SGML'de bir belgeyi işaretlemek için bir dizi kural. * * * … Üniversalyum

      DTD- (belge türü tanımı) Standart Genelleştirilmiş İşaretleme Dili ile yazılmış ve belirli bir belgenin (Bilgisayarlar) formatı hakkında bilgi içeren spesifikasyon… İngilizce çağdaş sözlük

    Bu tür "kendin yap" etiketlerini tanımlamak için XML kullanılır şema. Aşağıdakileri gerçekleştirmek için gereklidirler:
    • işaretlemenin tam olarak ne olduğunu açıklayın;
    • işaretlemenin tam olarak ne anlama geldiğini açıklayın.

    En çok bilinen şema tanımlama dilleri şunlardır:

    • DTD (Belge tip Tanım, başlangıçta bir SGML belgesinin yapısını tanımlamak için kullanılan bir belge türü tanımlama dilidir.
    • XDR (XML) Veri Azaltılmış, Microsoft tarafından geliştirilen ve Internet Explorer 4 ve 5 sürümlerinde desteklenen bir XML Şeması lehçesidir.
    • XML Şeması veya yalnızca XSD ( şema tanımlama dili XML), 2001'den beri bir W3C önerisidir.

    Bunlardan ilk ikisine daha yakından bakalım. Üçüncü bir şema tanımlama dili şurada tartışılmıştır: laboratuvar işi 11.

    DTD Şeması

    DTD şeması şunu sağlar: örnek belirten belge işaretlemesi Kullanılabilirlik, emir takip etme Ve konum elementler ve onları Öznitellikler bir XML belgesinde.

    Bir DTD içerisinde bir XML belgesinin içerik modeli şu şekilde tanımlanabilir:

    Her eleman Belge aşağıdaki türlerden biri olabilir:

    İçerik Sözdizimi Bir yorum
    Veri Yalnızca metin verilerini içerir
    Diğer unsurlar Yalnızca alt öğeleri içerir
    karışık Metin verilerinin ve alt öğelerin bir kombinasyonunu içerir
    BOŞ Hiçbir şey içermiyor
    HERHANGİ Metin verileri veya alt öğeler içerebilir

    Belge etiketlerinin içindeki nitelikler, sözdizimi kullanılarak ayrı ayrı açıklanır:

    Aynı zamanda, bir DTD'deki bir öznitelik üç türden birine sahip olabilir:

    • Astar
    • Etiketli özellik
    • numaralandırılmış özellik

    Özellik türüne ek olarak modunu da ayarlayabilirsiniz:

    Örnek olarak niteliklerin açıklamasını düşünün sicim bazı mesajları açıklayan bir öğe için yazın:

    Bu öğe şu özelliklere sahip nitelikler içeriyorsa: Aktar, bu durumda açıklamaları örneğin aşağıdaki gibi görünebilir:

    Etiketli öğe nitelikleri dört türde olabilir:

    Son olarak, bir DTD'de aşağıdaki sıra oluşum göstergeleri kullanılabilir:

    Sembol Örnek Tanım
    , (a, b, c) Liste öğelerinin tutarlı kullanımı
    | (a|b|c) Liste üyelerinden biri kullanılıyor
    tarih Bir ve yalnızca bir öğe kullanılır
    ? ders? İsteğe bağlı kullanım (0 veya 1 kez)
    + paragraf+ Bir veya daha fazla kez kullanıldı
    * Erkek kardeş* Sıfır veya daha fazla kez kullanıldı

    Örnek olarak burada bir elektronik posta kutusunun yapısını açıklayan bir DTD şeması verilmiştir:

    Bu, "XML Temelleri" döngüsündeki başka bir makaledir ve bu makalede yapıyı tanımlamanın temellerine bakacağız. XML verileri DTD'yi kullanarak. Sessiz eski yol Açıklamalar XML yapıları-belgeler, ancak hala kullanımda olduğundan yine de dikkate alacağız.

    Şunu da belirtmek isterim ki harika yol XML'in bir belgenin içeriğini, dilbilgisini vb. nasıl kontrol ettiğini gösterir. Sonraki makalede XML belgelerinin yapısını XML Şeması teknolojisini kullanarak tanımlamanın daha yeni ve daha gelişmiş bir yolunu ele alacağız, ancak şimdilik doğrudan XML DTD'yi incelemeye geçelim.

    Bu yazıda birkaç tanesine bakacağız önemli noktalar. XML DTD'nin ne olduğu ve ne işe yaradığı budur. DTD'nin dezavantajlarından bahsedelim ve XML belgelerini doğrulamak için kendi DTD'mizi nasıl yazacağımızı da öğrenelim. Zamandan tasarruf etmek için tüm bunlar, her zamanki gibi adım adım, mümkün olduğunca kısa ve net bir şekilde sunulacaktır.

    Öyleyse başlayalım.

    XML'de DTD nedir ve ne içindir?

    Kısacası, XML'deki bir DTD, bir belgenin dilbilgisini bir standarda (geliştiriciye veya kendinize) göre doğrulamak için kullanılır. Bu, ayrıştırıcının (işlemcinin) işleme aşamasında belgenin gereksinimlerimizi karşılayıp karşılamadığını belirlemesine olanak tanır. Yani XML belgesi doğrulanıyor.

    XML belgelerinin dilbilgisini kontrol etme ihtiyacı aşağıdaki gibidir:

    • XML belgesi sisteminiz için olmayabilir.
    • XML belgesi hatalı veriler içerebilir.
    • XML belgesinin yapısında () hatalar bulunabilir.

    Böylece XML DTD'nin ne olduğunu ve neden gerekli olduğunu anladık. Şimdi XML belgelerini doğrulamak için DTD dosyaları oluşturma işlemine geçmeden önce DTD'lerin dezavantajlarına hızlıca bir göz atalım.

    XML DTD'lerin dezavantajları

    • Farklı XML Söz Dizimi dil. Bu durum kodlama sorunları ya da hataların izlenememesi gibi pek çok soruna neden olur.
    • Veri türü kontrolü yok. DTD'de yalnızca bir tür vardır; dize.
    • Hayır. İki veya daha fazla DTD'yi bir belgeye eşleyemezsiniz.

    Oldu kısa liste XML şemalarında başarılı bir şekilde giderilen DTD'lerin eksiklikleri, ileriki yazılarımızda bahsedeceğimiz konulardır.

    Bir DTD'deki öğeleri, nitelikleri ve varlıkları bildirme. Değiştiriciler "*", "?", "+"

    DTD'ler öğeleri, nitelikleri ve varlıkları bildirmek için özel bildirimler ve değiştiriciler kullanır. Her şeyi detaylı olarak anlamak için önce teorik bilgileri ele alalım, ardından yazının ikinci bölümünde pratik örneklere geçeceğiz.

    Bir XML öğesini ve XML öğeleri dizisini tanımlama

    Kitap öğesinin her biri bir başlık, yazar, fiyat ve açıklama öğesi içerir.

    Eleman Alternatifleri

    Fiyat listesi öğesi başlık, fiyat öğelerini ve aralarından seçim yapılabilecek üç öğeden birini (yazar, şirket veya örnek) içerir.

    Boş öğeler

    Hiçbiri öğesi boş olmalıdır.

    Özellik bildirimi

    Fiyat listesi öğesi, bir kimlik özelliği ve bir ad özelliği olmak üzere iki özellik içerebilir. Bu durumda, #REQUIRED belirtildiği için id niteliği gereklidir ve name niteliği isteğe bağlıdır (#IMPLIED belirtilir). Buna karşılık CDATA, işleyiciye özniteliklerin içeriğini ayrıştırmamasını söyler.

    Varlık tanımı

    "" varlığıyla karşılaşılırsa, o zaman onun yerine otomatik olarak "Dmitry Denisov" geçecektir.

    Değiştiriciler (öğe tekrarlarını açıklayın)

    * - sıfır veya çok.
    ? - sıfır veya bir.
    + - bir veya daha fazla.

    Kitaplar öğesi bir veya daha fazla kitap öğesi içerebilir.

    Şimdi daha pratik örneklerle her şeyin nasıl göründüğüne bakalım.

    Kitap fiyat listesi örneğini kullanarak bir XML belgesini doğrulamak için bir DTD dosyası oluşturma

    XML ile ilgili hemen hemen her makalede örnek olarak kullandığımız kitapların fiyat listesini aynı tutalım. XML belgesinin kendisi buna benzer bir şeye benzeyecektir.

    1 kitap &myname; Fiyat 1 Tanım

    Elbette yukarıdaki örnek nihai hayal değil, ancak bir örnek olarak işe yarayacaktır. Örnekte görebileceğiniz gibi iç içe kitap elemanlarını içeren bir fiyat listesi kök elemanımız var. Kitap öğelerinin içinde başlık, yazar, fiyat ve muhtemelen bazı metin verileri içerebilen açıklama öğeleri bulunur.

    Bu fiyat listesini doğrulamak için aşağıdaki DTD belgesini kullanabiliriz.

    Şimdi her şeyi daha ayrıntılı olarak analiz edelim.

    • - kök eleman kitaplarını bildiririz ve neleri içerebileceğini parantez içinde belirtiriz. Bu durumda, bir veya daha fazla kitap öğesi içerebilir (artı işareti bir veya daha fazla anlamına gelir, yukarıya bakın).
    • - kitap öğesini tanımlayın. Kitap öğesi bir başlık öğesi, bir veya daha fazla yazar (artı işareti) öğesi, bir fiyat öğesi ve bir açıklama (soru işareti) öğesi içerebilir veya hiç içermeyebilir.
    • - başlık öğesini tanımlayın. Öğenin içeriği olarak #PCDATA'yı belirtin. Bu, ayrıştırıcının o öğenin içindekileri ayrıştırması gerektiği anlamına gelir.
    • Benzer şekilde yazar, fiyat, açıklama unsurlarını da tanımlıyoruz.
    • - özü tanımlayın. Önce varlığın kendisini yazıyoruz, sonra da onun yerine ne gösterileceğini tırnak işaretleri içinde yazıyoruz. Varsayılan olarak XML'de yalnızca 3 varlık tanımlanır. Daha fazlası (">" -<), меньше («<» — >) ve bir ve işareti ("&" - &). Dilerseniz bu yöntemi kullanarak sınırsız sayıda varlık oluşturabilirsiniz. Anlam olarak sadece kelimeler değil, önemli miktarda tam cümleler de olabilir.
    XML Belgelerini Doğrulamak için DTD'yi Bağlama

    Bildirimsel yol

    Bu yöntem çok nadiren kullanılır, çünkü özü kendi kendine yeten belgeler oluşturmaktır. Yani belge anında hem DTD'yi hem de XML'i içerecektir. XML'e DTD eklemek için aşağıdaki yapı kullanılır.

    burada DOCUMENT yerine XML belgesinin kök öğesini belirtiyoruz.

    Açıklık sağlamak için, DTD'yi dahil etmenin bildirimsel bir yolunu içeren, hazır, bağımsız bir belge örneğini ele alalım.

    ]>

    Harici DTD Tanımı - Bir DTD Belgesini Bağlama

    öz Bu method aşağıdaki yapıyı kullanarak bir XML belgesine bir DTD dosyası eklemektir.

    burada DOCUMENT XML belgesinin kök öğesidir.
    file.dtd, DTD dosyasına bir bağlantıdır.

    Açıklık sağlamak için aşağıdaki örneği inceleyin.

    XML Belgesi

    Bu, bu makaleyi sonlandırıyor. XML DTD ile çalışırken tüm ana noktaları ele aldık ve umarım her şeyi net bir şekilde açıklamayı başardım. Diğer XML ve XSLT eğitimlerini kaçırmak istemiyorsanız aşağıdaki formu kullanarak bültene abone olmanızı öneririm.

    Bu kadar. XML öğrenmede iyi şanslar ve başarılar!