Apa perbedaan antara XML dan XSD?

111

Apa perbedaan antara Extensible Markup Language (XML) dan XML Schema (XSD)?

Gandalf StormCrow
sumber

Jawaban:

145

Sebenarnya XSD adalah XML itu sendiri. Tujuannya adalah untuk memvalidasi struktur dokumen XML lain. XSD tidak wajib untuk XML apa pun, tetapi memastikan bahwa XML dapat digunakan untuk beberapa tujuan tertentu. XML hanya berisi data dalam format dan struktur yang sesuai.

anthares
sumber
Supaya saya jelas - jika pihak ketiga telah mengirimi saya dokumen .XSD dengan yang seperti: <xs: element name = "QuoteRequestID" type = "xs: unsignedLong" minOccurs = "0" /> disertakan - ini hanya deskripsi bidang bukan. Apakah masuk akal untuk meminta mereka untuk permintaan sampel aktual yang akan menjadi XML mentah dengan <QuoteResultID> dll dll.
James Wilson
3
Tentunya, Anda bisa bertanya kepada mereka. Anda juga dapat menggunakan beberapa alat online yang dapat melakukan ini untuk Anda, seperti yang ini misalnya - xsd2xml . Cukup tempel xsd dan itu akan menghasilkan contoh dokumen xml berdasarkan itu.
anthares
@anthares, saya mencoba tautannya dengan: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="QuoteRequestID" type="xs:unsignedLong" minOccurs="0" /> </xs:schema> tetapi akhirnya mendapatkan kesalahan: Error!!! The 'minOccurs' attribute cannot be present.
heretoinfinity
Mengapa itu menjadi masalah?
heretoinfinity
111


Ambil contoh

<root>
  <parent>
     <child_one>Y</child_one>
     <child_two>12</child_two>
  </parent>
</root>

dan desain xsd untuk itu:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parent">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="child_one" type="xs:string" />
              <xs:element name="child_two" type="xs:int" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


Apa yang tidak mungkin dengan XSD: ingin menulisnya terlebih dahulu karena daftarnya sangat kecil
1) Anda tidak dapat memvalidasi node / atribut menggunakan nilai node / atribut lain.
2) Ini adalah batasan: Elemen yang didefinisikan dalam file XSD harus didefinisikan dengan hanya satu tipe data. [dalam contoh di atas, untuk <child_two>muncul di <parent>node lain , tipe data tidak dapat didefinisikan selain int.
3) Anda tidak dapat mengabaikan validasi elemen dan atribut, misalnya, jika elemen / atribut muncul dalam XML, itu harus didefinisikan dengan baik dalam XSD yang sesuai. Meskipun penggunaannya <xsd:any>memungkinkan, tetapi ia memiliki aturannya sendiri. Mematuhi yang mengarah pada kesalahan validasi. Saya telah mencoba pendekatan serupa, dan tentu saja tidak berhasil, inilah Q&A


apa yang mungkin dengan XSD:
1) Anda dapat menguji hierarki yang tepat dari node XML. [xsd mendefinisikan anak mana yang harus berada di bawah induk mana, dll, yang tinggal yang akan dihitung sebagai kesalahan, dalam contoh di atas, child_two tidak bisa menjadi anak langsung dari root, tetapi anak dari tag "induk" yang pada gilirannya a anak dari node "root", ada hierarki ..]
2) Anda dapat menentukan tipe Data dari nilai-nilai node. [dalam contoh di atas child_two tidak dapat memiliki data lain selain angka]
3) Anda juga dapat menentukan jenis_data khusus, [contoh, untuk node <month>, data yang mungkin dapat berupa salah satu dari 12 bulan .. jadi Anda perlu menentukan semua 12 bulan dalam tipe data baru menulis semua nama 12 bulan sebagai nilai pencacahan ..
4) Anda dapat membatasi terjadinya elemen, menggunakan minOccurs dan maxOccurs, nilai defaultnya adalah 1 dan 1.

.. dan masih banyak lagi ...

InfantPro'Aravind '
sumber
1
@ InfantPro'Aravind 'Apa yang Anda maksud dengan "Anda tidak dapat memvalidasi node / atribut menggunakan nilai node / atribut lain." Mengapa seseorang ingin melakukan itu?
Geek
@Geek stackoverflow.com/questions/4126988/…
InfantPro'Aravind '
"Anda tidak dapat memvalidasi node / atribut menggunakan nilai node / atribut lain". Apa artinya ini
GrowinMan
@ GrowinMan, Validasi bersyarat (Bukan hubungan orang tua-Anak) Contoh: Jika ini xml Anda: <root> <A>A</A> <B/> <C/> </root>dan jika Node <A>adalah <A>B</A>, maka buat <B>wajib, jika <A>C</A>kemudian buat <C>wajib.
InfantPro'Aravind '
Persyaratan di atas tidak mungkin dicapai dengan XSD saja
InfantPro'Aravind '
15

XSD:
XSD (XML Schema Definition) menentukan cara mendeskripsikan elemen secara formal dalam dokumen Extensible Markup Language (XML).
Xml:
XML dirancang untuk mendeskripsikan data . Ini tidak tergantung pada perangkat lunak maupun perangkat keras.
Ini meningkatkan hal-hal berikut.
Berbagi -Data.
-Platform independen.
-Meningkatkan ketersediaan Data.

Perbedaan:

  1. XSD didasarkan dan ditulis pada XML.

  2. XSD mendefinisikan elemen dan struktur yang dapat muncul di dokumen, sedangkan XML tidak.

  3. XSD memastikan bahwa data diinterpretasikan dengan benar, sedangkan XML tidak.

  4. Dokumen XSD divalidasi sebagai XML, tetapi kebalikannya mungkin tidak selalu benar.

  5. XSD lebih baik dalam menangkap kesalahan daripada XML.

XSD mendefinisikan elemen yang dapat digunakan dalam dokumen, berkaitan dengan data aktual yang akan dikodekan.
misalnya:
Tanggal yang dinyatakan sebagai 1/12/2010 bisa berarti 12 Januari atau 1 Desember. Mendeklarasikan tipe data tanggal dalam dokumen XSD, memastikan bahwa itu mengikuti format yang ditentukan oleh XSD.

Tengkorak
sumber
Pernyataan pertama menjelaskan segalanya.
Ojonugwa Jude Ochalifu
6

CONTOH XML SEDERHANA:

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XSD OF ABOVE XML (Dijelaskan):

<xs:element name="school">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Sini:

xs: element : Mendefinisikan sebuah elemen.

xs: sequence : Menandakan elemen anak hanya muncul dalam urutan yang disebutkan.

xs: complexType : Menandakan itu berisi elemen lain.

xs: simpleType : Menunjukkan bahwa mereka tidak mengandung elemen lain.

jenis: string, desimal, integer, boolean, tanggal, waktu,

  • Dengan kata sederhana , xsd adalah cara lain untuk merepresentasikan dan memvalidasi data XML dengan tipe tertentu.
  • Dengan bantuan atribut tambahan, kita dapat melakukan banyak operasi.

  • Melakukan tugas apa pun di xsd lebih sederhana dari xml.

shubham1js
sumber
Hai! Program apa yang saya gunakan untuk membuat file XSD?
Judith
Program @ Judith? dapatkah Anda menjelaskan pertanyaan Anda. seperti editor atau bahasa atau alat?
shubham1js
1

Pada dasarnya file XSD mendefinisikan bagaimana file XML akan terlihat. Ini adalah file Skema yang mendefinisikan struktur file XML. Jadi itu menentukan apa bidang yang mungkin dan berapa ukurannya.

File XML adalah turunan dari XSD karena menggunakan aturan yang ditentukan dalam XSD.

SelMez
sumber
0

XML memiliki aplikasi yang jauh lebih luas daripada f.ex. HTML. Itu tidak memiliki "aplikasi" intrinsik, atau default. Jadi, meskipun Anda mungkin tidak terlalu peduli bahwa halaman web juga diatur oleh apa yang diizinkan, dari sisi penulis, Anda mungkin ingin secara tepat mendefinisikan apa yang mungkin dan tidak boleh dimuat oleh dokumen XML.

Ini seperti mendesain database.

Hal tentang teknologi XML adalah bahwa mereka bersifat tekstual. Dengan XSD, ini berarti Anda memiliki kerangka kerja definisi struktur data yang dapat "dicolokkan" ke alat pemrosesan teks seperti PHP. Jadi, Anda tidak hanya dapat memanipulasi data itu sendiri, tetapi juga dengan sangat mudah mengubah dan mendokumentasikan strukturnya, dan bahkan menghasilkan front-end secara otomatis.

Dilihat seperti ini, XSD adalah "perekat" atau "middleware" antara data (XML) dan alat pengolah data.

Hatebit
sumber