Saya telah melihat null
elemen diwakili dalam beberapa cara:
Elemen hadir dengan xsi:nil="true"
:
<book>
<title>Beowulf</title>
<author xsi:nil="true"/>
</book>
Elemen itu ada, tetapi direpresentasikan sebagai elemen kosong (yang saya yakini salah karena 'kosong' dan null
secara semantik berbeda):
<book>
<title>Beowulf</title>
<author/>
</book>
<!-- or: -->
<book>
<title>Beowulf</title>
<author></author>
</book>
Elemen tidak ada sama sekali di markup yang dikembalikan :
<book>
<title>Beowulf</title>
</book>
Elemen ini memiliki elemen <null/>
anak (dari TStamper di bawah):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
Apakah ada cara yang benar atau kanonik untuk mewakili null
nilai seperti itu ? Apakah ada cara tambahan selain contoh di atas?
XML untuk contoh di atas dibuat, jadi jangan membaca terlalu jauh. :)
xmlns:xsi="http://w3.org/2001/XMLSchema-instance"
. Perhatikan http yang hilang: //. Ini penting karena string namespace sebenarnya hanya string ke parser xml dan bukan uri.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. Catatan "www.". Lihat w3.org/TR/xmlschema-1/#no-xsixsi:
awalan harus dideklarasikan. Pengurai XML namespace-aware akan menolak dokumen XML Anda jika Anda mencoba menggunakanxsi:
awalan tanpa mendeklarasikannya. Spesifikasi yang relevan di sini adalah w3.org/TR/xml-names/#nsc-NSDeclared ("Namespace constraint: Prefix Declared") yang mengatakan bahwa satu-satunya awalan yang telah ditentukan adalahxml:
danxmlns:
. Skema XML dibuat di atas spesifikasi ruang nama XML tetapi tidak menambahkan awalan standar yang telah ditentukan sebelumnya, karena melakukan itu akan benar-benar melanggar spesifikasi ruang nama XML.Tidak ada jawaban kanonik, karena XML pada dasarnya tidak memiliki konsep nol. Tapi saya berasumsi Anda ingin pemetaan Xml / Obyek (karena grafik objek memiliki nol); jadi jawaban untuk Anda adalah "apa pun yang menggunakan alat Anda". Jika Anda menulis penanganan, itu berarti apa pun yang Anda inginkan. Untuk alat yang menggunakan Skema XML,
xsi:nil
adalah caranya. Untuk sebagian besar pemetaan, menghilangkan elemen / atribut yang cocok adalah cara untuk melakukannya.sumber
Itu tergantung pada bagaimana Anda memvalidasi XML Anda. Jika Anda menggunakan validasi Skema XML, cara yang benar untuk merepresentasikan
null
nilai adalah denganxsi:nil
atribut.[ Sumber ]
sumber
Dokumentasi di tautan w3
http://www.w3.org/TR/REC-xml/#sec-starttags
mengatakan bahwa ini adalah bentuk yang direkomendasikan.
Atribut yang disebutkan dalam jawaban lain adalah mekanisme validasi dan bukan representasi negara. Silakan merujuk ke http://www.w3.org/TR/xmlschema-1/#xsi_nil
Untuk memperjelas jawaban ini: Konten
sumber
Anda menggunakan
xsi:nil
ketika semantik skema Anda menunjukkan bahwa suatu elemen memiliki nilai default, dan bahwa nilai default harus digunakan jika elemen tersebut tidak ada. Saya harus berasumsi bahwa ada orang-orang pintar yang kepadanya kalimat sebelumnya bukanlah ide yang jelas-jelas mengerikan, tetapi kedengarannya seperti sembilan jenis buruk bagi saya. Setiap format XML yang pernah saya kerjakan mewakili nilai nol dengan menghilangkan elemen. (Atau atribut, dan semoga sukses menandai atribut denganxsi:nil
.)sumber
date
elemen sepenuhnya tidak banyak membantu, karena aplikasi tidak akan tahu di mana pada halaman judul yang Anda inginkan tanggal yang akan muncul. (Jika elemen yang dihilangkan hanya memiliki satu lokasi yang memungkinkan, ini bukan masalah; dalam kosakata dokumen nyata hampir semua elemen memiliki banyak lokasi yang memungkinkan.)Menghilangkan atribut atau elemen berfungsi dengan baik dalam data yang kurang formal.
Jika Anda memerlukan informasi yang lebih canggih, skema GML menambahkan atribut nilReason, misalnya: di GeoSciML :
xsi:nil
dengan nilai "true" digunakan untuk menunjukkan bahwa tidak ada nilai yang tersedianilReason
dapat digunakan untuk mencatat informasi tambahan untuk nilai yang hilang; ini mungkin salah satu alasan GML standar (missing, inapplicable, withheld, unknown
), atau teks yang diawali denganother:
, atau mungkin tautan URI ke penjelasan yang lebih terperinci.Saat Anda bertukar data, peran yang biasa digunakan XML, data yang dikirim ke satu penerima atau untuk tujuan tertentu mungkin memiliki konten yang dikaburkan yang akan tersedia untuk orang lain yang membayar atau memiliki otentikasi berbeda. Mengetahui alasan mengapa konten hilang bisa sangat penting.
Para ilmuwan juga prihatin dengan mengapa informasi hilang. Misalnya, jika dijatuhkan karena alasan kualitas, mereka mungkin ingin melihat data buruk asli.
sumber
Dalam banyak kasus tujuan dari nilai Null adalah untuk melayani nilai data yang tidak ada dalam versi aplikasi Anda sebelumnya.
Jadi, katakan Anda memiliki file xml dari aplikasi Anda "ReportMaster" versi 1.
Sekarang dalam ReportMaster versi 2, beberapa atribut telah ditambahkan yang mungkin atau tidak didefinisikan.
Jika Anda menggunakan representasi 'tanpa tag berarti nol', Anda mendapatkan kompatibilitas mundur otomatis untuk membaca file ReportMaster 1 xml Anda.
sumber