Apa perbedaan antara xsd: include dan xsd: import?

200

Apa perbedaan antara xsd:includedan xsd:import? Kapan Anda akan menggunakan salah satu dari yang lain, dan kapan mungkin itu tidak masalah?

Pops
sumber
Lihat juga jawaban di stackoverflow.com/questions/4998063/…
Nashev

Jawaban:

205

Perbedaan mendasar antara includedan importadalah bahwa Anda harus menggunakan importuntuk merujuk ke deklarasi atau definisi yang ada di ruang nama target yang berbeda dan Anda harus menggunakan includeuntuk merujuk ke deklarasi atau definisi yang (atau akan) di ruang nama target yang sama .

Sumber: https://web.archive.org/web/20070804031046/http://xsd.stylusstudio.com/2002Jun/post08016.htm

Sergiy Belozorov
sumber
Posting stylusstudio yang merujuk @Pops ada di sini: web.archive.org/web/20140831005739/http://xsd.stylusstudio.com/…
tony19
54

Gunakan xsd: termasuk untuk membawa XSD dari namespace yang sama atau tidak.

Gunakan xsd: import untuk membawa XSD dari namespace yang berbeda .

kjhughes
sumber
19

Perbedaan lain adalah yang <import>memungkinkan mengimpor dengan merujuk ke namespace lain. <include>hanya mengizinkan impor dengan merujuk ke URI dari skema penyertaan yang dimaksudkan. Itu jelas perbedaan lain dari pengimporan namespace antar intra.

Misalnya, validator skema xml mungkin sudah mengetahui lokasi semua skema berdasarkan namespace . Terutama mengingat bahwa merujuk ruang nama XML oleh URI mungkin bermasalah pada sistem yang berbeda di mana classpath: // tidak berarti apa-apa, atau di mana http: // tidak diizinkan, atau di mana beberapa URI tidak menunjuk ke hal yang sama seperti pada sistem lain.

Contoh kode impor yang valid dan tidak valid dan mencakup:

Sah:

<xsd:import namespace="some/name/space"/>
<xsd:import schemaLocation="classpath://mine.xsd"/>

<xsd:include schemaLocation="classpath://mine.xsd"/>

Tidak valid:

<xsd:include namespace="some/name/space"/>
Zombie
sumber
Saya pikir maksud Anda merujuk ruang nama XML dengan URL lokasi daripada oleh URI . Namespace URI (yaitu namespaceatribut <xs:import>) selalu OK, dan dianggap sebagai pengidentifikasi (hanya teks, tidak ditafsirkan), sedangkan schemaLocation(URL bukan URI) biasanya harus diproses, untuk diselesaikan. Dan memang, skemaclasspath: URL khusus Java mungkin tidak ada artinya. Tapi selain pilihan yang rapi ini, ini adalah komentar yang berharga, terima kasih.
ddevienne
7

Saya tertarik dengan ini juga. Satu-satunya penjelasan yang saya temukan adalah yang xsd:includedigunakan untuk inklusi intra-namespace, sedangkan xsd:importuntuk inklusi antar-namespace.

Matt Luongo
sumber
0

Kutipan langsung dari MSDN: <xsd: import> Elemen, bagian Keterangan

Perbedaan antara elemen sertakan dan elemen impor adalah bahwa elemen impor memungkinkan referensi ke komponen skema dari dokumen skema dengan ruang nama target yang berbeda dan elemen include menambahkan komponen skema dari dokumen skema lain yang memiliki namespace target yang sama (atau tidak ada namespace target yang ditentukan ) ke skema yang mengandung. Singkatnya, elemen impor memungkinkan Anda untuk menggunakan komponen skema dari skema apa pun; yang meliputi unsur memungkinkan Anda untuk menambahkan semua komponen skema dimasukkan untuk skema mengandung.

Mrinmoy Sarkar
sumber
-3

Gunakan xsd: include membawa semua deklarasi dan definisi dokumen skema eksternal ke dalam skema saat ini.

Gunakan xsd: import untuk membawa XSD dari namespace yang berbeda dan digunakan untuk membangun skema baru dengan memperluas dokumen skema yang ada ..

Shailej Shimpi
sumber