Mengapa tipe XML aman?

30

Mengapa mereka mengatakan bahwa XML menyediakan keamanan tipe dan bagaimana itu dinyatakan dalam XML itu sendiri?

Apa bedanya dengan JSON (misalnya) yang (seperti yang saya mengerti) bukan tipe aman?

pengguna3339411
sumber

Jawaban:

36

Karena Definisi Skema XML (XSD).

Dengan XML, Anda dapat memiliki file tambahan yang menjelaskan skema. Ini menunjukkan, misalnya, bahwa elemen /a/badalah array dan mengandung dari 1 hingga 10 elemen, atau elemen tersebut /a/cadalah bilangan bulat. Anda dapat menemukan contoh XSD di sini .

Validasi file XML yang diberikan melalui XSD didukung oleh banyak bahasa . Misalnya, aplikasi .NET dapat meminta file XML dari sumber yang tidak tepercaya dan memeriksa apakah cocok dengan XSD ; kemudian, itu dapat menyimpannya ke database Microsoft SQL Server, yang pada gilirannya dapat berisi XSD dan melakukan pemeriksaan lagi (untuk memastikan bahwa setiap klien yang memiliki akses ke database mematuhi).

XSD bukan satu-satunya bahasa.

  • Jika Anda telah melakukan pengembangan web, Anda tentu pernah mendengar tentang Document Type Definition (DTD) - bahasa markup yang mendefinisikan struktur XML dan digunakan terutama dalam validasi konten terkait HTML. Meskipun tidak dapat melakukan semua hal yang dapat dilakukan XSD, seperti memastikan bahwa elemen atau atribut berisi angka integer, ia masih dapat melakukan banyak pemeriksaan struktur.

  • RELAX NG memiliki keuntungan relatif sederhana dibandingkan dengan bahasa lain dan dapat ditulis dalam bentuk yang lebih ringkas daripada XML.

  • Schematron adalah "bahasa validasi berbasis aturan lain untuk membuat pernyataan tentang ada atau tidaknya pola dalam pohon XML" ( Wikipedia ) dan menyajikan pendekatan yang sedikit berbeda, berdasarkan pada pernyataan XPath.

Inisiatif serupa untuk JSON tidak begitu populer (terutama, saya percaya, di dunia korporat Microsoft-sentris). Salah satu alasannya adalah bahwa JSON dimaksudkan untuk situasi di mana struktur data agak mendasar (misalnya dapat dinyatakan sebagai pohon, tanpa perlu atribut, misalnya) dan tidak perlu divalidasi. Contoh yang sangat baik adalah REST API yang digunakan oleh bahasa yang diketik secara dinamis:

  • klien sangat mudah dan cepat untuk diimplementasikan,
  • API dipercaya tidak berubah,
  • klien dapat dengan mudah berurusan dengan daun tertentu di mana validasi diperlukan (misalnya memeriksa itu /something/percentageadalah angka aktual dan berada dalam kisaran 0,100).
Arseni Mourzenko
sumber
20

XML dapat diketik dengan aman, karena dimungkinkan dengan skema XSD untuk mendeklarasikan tipe data elemen. Dokumen yang divalidasi terhadap skema XSD dijamin sesuai dengan tipe yang diharapkan. Tetapi format XML tidak diperlukan untuk memiliki skema, jadi dokumen tidak secara otomatis mengetik aman hanya dengan menjadi XML.

Sebenarnya ada bahasa skema untuk JSON juga, jadi ketik aman JSON adalah mungkin. Tetapi ini jarang digunakan, jadi biasanya JSON bukan tipe yang aman.

JacquesB
sumber
2
Jawaban Anda akan lebih baik dengan nama atau tautan untuk JSON yang setara dengan XSD.
DougM
1
BTW: XML Schema sejauh ini bukan satu-satunya bahasa definisi skema untuk XML. Ada juga Schematron, RelaxNG, dan tentu saja SGML DTD yang bagus.
Jörg W Mittag
Juga perlu diingat bahwa bahkan dengan skema, XML mungkin tidak aman untuk mengetik. Seseorang dapat menentukan suatu elemen untuk memiliki tipe konten "apa pun". Sementara orang dapat berargumen bahwa itu adalah bentuk keamanan jenis (saya tidak peduli, semuanya valid) pada saat yang sama tidak ada validasi yang dapat dilakukan: itu pada dasarnya adalah tipe "varian".
3

Dalam ilmu komputer, keamanan jenis adalah sejauh mana bahasa pemrograman mengecilkan atau mencegah kesalahan jenis.

Keamanan tipe bukanlah atribut absolut. Itu bukan boolean. Bahasa (dan XML dan JSON adalah bahasa) memungkinkan dan mencegah berbagai jenis kesalahan dan kesalahan. Misalnya, Anda dapat menyebutkan elemen yang salah. Tetapi Anda tidak dapat melewati elemen sintaksis yang diperlukan seperti tag penutup dan kawat gigi.

XML dan JSON biasa hampir sama-sama aman-tipe (atau tipe-tidak aman). String XML / JSON yang valid memiliki struktur sintaksis dan semantik tertentu, tetapi ini hampir tidak pernah cukup untuk aplikasi untuk bekerja dengannya. Aplikasi tidak sembarang suatu struktur tapi satu tertentu.

XML bersinar dengan XML Schema Definition (XSD) yang merupakan cara yang fleksibel dan kuat untuk memvalidasi dokumen XML yang diberikan terhadap suatu skema. Ini memberikan banyak jenis keamanan di bawah definisi yang diberikan di atas.

usr
sumber