Saya telah menelusuri pertanyaan ini di Google, tetapi saya tidak mengerti dengan jelas apa itu skema XML dan DTD (definisi tipe dokumen), dan mengapa skema XML lebih kuat dibandingkan dengan DTD.
Bimbingan apa pun akan sangat dihargai.
Dari bagian Perbedaan Antara DTD dan Skema dari Konversi DTD menjadi artikel Skema :
Perbedaan kritis antara DTD dan Skema XML adalah bahwa Skema XML menggunakan sintaksis berbasis XML, sedangkan DTD memiliki sintaks unik yang dimiliki dari SGML DTD. Meskipun DTD sering dikritik karena ini perlu mempelajari sintaks baru, sintaksis itu sendiri cukup singkat. Kebalikannya berlaku untuk Skema XML, yang verbose, tetapi juga menggunakan tag dan XML sehingga penulis XML harus menemukan sintaks Skema XML kurang menakutkan.
Tujuan DTD adalah untuk mempertahankan tingkat kompatibilitas dengan SGML untuk aplikasi yang mungkin ingin mengubah SGML DTD menjadi XML DTD. Namun, sesuai dengan salah satu tujuan XML, "kesederhanaan dalam markup XML adalah minimal penting," tidak ada masalah nyata dengan menjaga sintaks singkat.
[...]
Jadi apa sajakah perbedaan lain yang mungkin sangat penting ketika kita mengubah DTD? Mari lihat.
Mengetik
Perbedaan paling signifikan antara DTD dan Skema XML adalah kemampuan untuk membuat dan menggunakan tipe data dalam Skema dalam hubungannya dengan deklarasi elemen dan atribut. Faktanya, ini adalah perbedaan yang sangat penting sehingga setengah dari Rekomendasi Skema XML dikhususkan untuk datatyping dan Skema XML. Kami membahas tipe data secara rinci di Bagian III buku ini, "XML Schema Datatypes."
[...]
Kendala Kejadian
Area lain di mana DTD dan Skema berbeda secara signifikan adalah dengan kendala kejadian. Jika Anda ingat dari contoh sebelumnya di Bab 2, "Struktur Skema" (atau karya Anda sendiri dengan DTD), ada tiga simbol yang dapat Anda gunakan untuk membatasi jumlah kemunculan elemen: *, + dan?.
[...]
Pencacahan
Jadi, katakanlah kita memiliki elemen, dan kami ingin dapat mendefinisikan atribut ukuran untuk kemeja, yang memungkinkan pengguna untuk memilih ukuran: kecil, sedang, atau besar. DTD kami akan terlihat seperti ini:
<!ELEMENT item (shirt)> <!ELEMENT shirt (#PCDATA)> <!ATTLIST shirt size_value (small | medium | large)>
[...]
Tetapi bagaimana jika kita ingin
size
menjadi elemen? Kami tidak bisa melakukannya dengan DTD. DTD tidak menyediakan enumerasi dalam konten teks elemen. Namun, karena tipe data dengan skema, ketika kita menyatakan pencacahan dalam contoh sebelumnya, kita benar-benar menciptakan sebuahsimpleType
disebutsize_values
yang kita sekarang dapat menggunakan dengan elemen:<xs:element name="size" type="size_value">
[...]
Perbedaan antara Definisi Skema XML (XSD) dan Document Type Definition (DTD) meliputi:
UPDATE : 2015.08.26
Tidak semua poin-poin ini 100% akurat, tetapi Anda mendapatkan intinya.
Di samping itu:
sumber
Seperti banyak orang telah sebutkan sebelumnya, Skema XML menggunakan sintaksis berbasis XML dan DTD memiliki sintaks unik. DTD tidak mendukung tipe data, yang penting.
Mari kita lihat contoh yang sangat sederhana di mana universitas memiliki banyak siswa dan setiap siswa memiliki dua elemen "nama" dan "tahun". Harap perhatikan bahwa saya telah menggunakan "// ->" dalam kode saya hanya untuk komentar.
Sekarang saya akan menulis contoh ini dalam DTD dan XSD.
DTD
Definisi Skema XML (XSD)
sumber
DTD mendahului XML dan karenanya bukan XML yang valid itu sendiri. Itu mungkin alasan terbesar penemuan XSD.
sumber
Kesamaan antara XSD dan DTD
Perbedaan antara XSD dan DTD
Selain itu meskipun XSD sedikit verbose sintaksnya adalah ekstensi dari XML, membuatnya mudah untuk belajar dengan cepat.
sumber
1
,0 or 1
,0 or more
, sementara XSD dapat menentukan minimum dan jumlah maksimum.Satu perbedaan adalah bahwa dalam DTD model konten suatu elemen sepenuhnya ditentukan oleh namanya, terlepas dari di mana ia muncul dalam dokumen:
Dengan asumsi Anda ingin memilikinya
person
elemenname
name
sendiri memiliki elemen anakfirst
danlast
.Seperti ini
Jika suatu
city
elemen dalam dokumen yang sama juga perlu memiliki 'nama' elemen anak, DTD mensyaratkan bahwa elemen 'nama' ini harus memiliki elemen anakfirst
danlast
juga. Terlepas dari kenyataan itucity.name
tidak memerlukanfirst
danlast
sebagai anak-anak.Sebaliknya, Skema XML memungkinkan Anda untuk mendeklarasikan tipe elemen anak secara lokal; Anda dapat mendeklarasikan
name
elemen anak untuk keduanyaperson
dancity
secara terpisah. Dengan demikian memberi mereka model konten yang tepat dalam konteks tersebut.Perbedaan utama lainnya adalah dukungan untuk ruang nama. Karena DTD adalah bagian dari spesifikasi XML asli (dan diwarisi dari SGML), mereka sama sekali tidak sadar namespace karena ruang nama XML ditentukan kemudian. Anda dapat menggunakan DTD dalam kombinasi dengan namespaces, tetapi itu memerlukan beberapa contortions, seperti dipaksa untuk mendefinisikan awalan di DTD dan hanya menggunakan awalan itu, alih-alih bisa menggunakan awalan sewenang-wenang.
Bagi saya, perbedaan lain kebanyakan dangkal. Dukungan tipe data dapat dengan mudah ditambahkan ke DTD, dan sintaksnya hanya sintaks. (Saya, untuk satu, menemukan sintaks XML Schema mengerikan dan tidak akan pernah ingin tangan-mempertahankan XML Schema, yang saya tidak akan mengatakan tentang skema DTD atau RELAX NG; jika saya memerlukan skema XML untuk beberapa alasan, saya biasanya menulis RELAX NG satu dan mengonversinya dengan
trang
.)sumber
Kesamaan :
DTD dan Skema keduanya melakukan fungsi dasar yang sama:
Perbedaan:
DTD lebih baik untuk aplikasi intensif teks, sementara skema memiliki beberapa keuntungan untuk alur kerja intensif data.
Skema ditulis dalam XML dan karenanya mengikuti aturan yang sama, sedangkan DTD ditulis dalam bahasa yang sama sekali berbeda.
Contoh:
DTD:
XSD:
sumber
DTD hanya dapat memiliki dua jenis data, CDATA dan PCDATA. Tetapi dalam skema Anda bisa menggunakan semua tipe data primitif yang Anda gunakan dalam bahasa pemrograman dan Anda memiliki fleksibilitas dalam menentukan tipe data kustom Anda sendiri.
Pengembang yang membangun skema dapat membuat tipe data khusus berdasarkan pada tipe data inti dan dengan menggunakan berbagai operator dan pengubah.
sumber
Ketika XML pertama kali keluar, kami diberitahu itu akan menyelesaikan semua masalah kami: XML akan menjadi user-friendly, tak terhingga panjang, menghindari pengetikan yang kuat, dan tidak memerlukan keterampilan pemrograman apa pun. Saya belajar tentang DTD dan menulis parser XML saya sendiri. 15+ tahun kemudian, saya melihat bahwa sebagian besar XML tidak ramah-pengguna, dan tidak terlalu dapat dikembangkan (tergantung penggunaannya). Segera setelah beberapa bakiak yang pandai menghubungkan XML ke sebuah database, saya tahu bahwa tipe-tipe data tidak bisa dihindari. Dan, Anda harus melihat XSLT (file transformasi) saya harus bekerja pada hari yang lain. Jika itu bukan pemrograman, saya tidak tahu apa itu! Saat ini tidak biasa melihat semua jenis masalah yang berkaitan dengan data XML atau antarmuka menjadi buruk. Saya suka XML tetapi, itu telah menyimpang jauh dari titik awal altruistik aslinya.
Jawaban singkatnya? DTD sudah tidak digunakan lagi karena XSD karena XSD memungkinkan Anda menentukan struktur XML dengan lebih presisi.
sumber
XML DTD
Tujuan DTD adalah untuk menentukan struktur dokumen XML. Ini mendefinisikan struktur dengan daftar elemen hukum:
Skema XML
Skema XML memungkinkan pembuat skema untuk menentukan bahwa data jumlah elemen harus berupa angka atau, bahkan lebih khusus lagi, bilangan bulat. Dalam contoh berikut ini saya menggunakan
string
:sumber
DTD cukup banyak ditinggalkan karena terbatas dalam kegunaannya sebagai bahasa skema, tidak mendukung namespace, dan tidak mendukung tipe data. Selain itu, sintaksis DTD cukup rumit, membuatnya sulit untuk dipahami dan dipelihara.
sumber
DTD menunjukkan sintaks elemen XML
XML Schemas adalah alternatif Microsoft untuk DTD untuk memvalidasi XML
sumber