Bagaimana karakter spasi putih ditangani dalam model objek XML?
Terkadang, model objek XML akan menampilkan node TEXT yang berisi karakter spasi. Jika karakter spasi terpotong, kemungkinan akan menimbulkan kebingungan. Misalnya, contoh XML berikut:
]>
Smith
Yohanes
Pohon berikut dihasilkan:
Instruksi Pengolahan: xml
Tipe Dokumen: orang
ELEMEN: orang
TEKS:
ELEMEN: nama belakang
TEKS:
ELEMEN: nama depan
TEKS:
Nama depan dan belakang diapit oleh node TEXT yang hanya berisi karakter spasi karena model konten elemen "orang" adalah CAMPURAN yang berisi kata kunci #PCDATA. Model konten CAMPURAN menetapkan bahwa teks dapat ada di antara elemen. Oleh karena itu, pernyataan berikut ini juga benar:
Nama belakang saya adalah Smith dan nama depan saya adalah
Yohanes
Hasilnya adalah pohon yang mirip dengan berikut ini:
ELEMEN: orang
TEKS: Nama belakang saya adalah
ELEMEN: nama belakang
TEKS: dan nama depan saya adalah
ELEMEN: nama depan
TEKS:
Tanpa karakter spasi setelah dan sebelum kata "adalah" dan karakter spasi setelah dan sebelum kata "dan", kalimat tersebut tidak akan dapat dipahami. Oleh karena itu, untuk model konten CAMPURAN, kombinasi teks, karakter spasi, dan elemen semuanya relevan. Hal ini tidak berlaku untuk model konten non-CAMPURAN.
Untuk menghilangkan node TEXT yang hanya berisi spasi, hapus kata kunci #PCDATA dari deklarasi elemen "orang":
hasilnya adalah pohon jelas berikut:
Instruksi Pengolahan: xml
Tipe Dokumen: orang
ELEMEN: orang
ELEMEN: nama belakang
ELEMEN: nama depan
Apa fungsi deklarasi XML?
Deklarasi XML harus dicantumkan di bagian atas dokumen XML:
deklarasi ini menentukan item berikut:
Dokumen tersebut adalah dokumen XML. Detektor MIME dapat menggunakan ini untuk mendeteksi apakah suatu file bertipe text/xml ketika tipe MIME tidak ada atau belum ditentukan.
Dokumen tersebut sesuai dengan spesifikasi XML 1.0. Ini akan menjadi penting di masa depan ketika ada versi XML lainnya.
Pengodean karakter dokumen. Atribut pengkodean bersifat opsional dan defaultnya adalah UTF-8.
Catatan: Deklarasi XML harus berada pada baris pertama dokumen XML, sehingga file XML berikut:
menghasilkan kesalahan penguraian berikut:
Deklarasi xml tidak valid.
Baris 0000002:
Lokasi 0000007: ------^
Catatan: Deklarasi XML bersifat opsional. Jika Anda perlu menentukan komentar atau instruksi pemrosesan di bagian atas, jangan masukkan deklarasi XML. Namun, pengkodean defaultnya adalah UTF-8.
Bagaimana cara mencetak dokumen XML saya dalam format yang dapat dibaca?
Saat membuat dokumen dari awal menggunakan DOM untuk menghasilkan file XML, semuanya ada dalam satu baris, tanpa spasi di antara keduanya. Ini adalah perilaku default.
Membuat lembar gaya XSL default di Internet Explorer 5 untuk menampilkan dan mencetak dokumen XML dalam format yang dapat dibaca. Misalnya IE5 sudah terinstall, coba lihat file nospace.xml. Pohon berikut akan muncul di browser:
-
-
XYZ
12.56
Tidak ada karakter spasi putih yang disisipkan dalam XML.
Mencetak XML yang dapat dibaca sangatlah menarik, terutama bila ada DTD yang mendefinisikan berbagai jenis model konten. Misalnya, pada model konten campuran (#PCDATA) Anda tidak dapat menyisipkan spasi karena dapat mengubah arti konten. Misalnya, pertimbangkan XML berikut:
Elephant
Ini sebaiknya tidak ditampilkan sebagai:
E
lephant
Karena batasan kata sudah tidak tepat lagi.
Semua ini membuat pencetakan otomatis menjadi bermasalah. Jika Anda tidak perlu mencetak XML yang dapat dibaca, Anda bisa menggunakan DOM untuk menyisipkan karakter spasi putih sebagai simpul teks di lokasi yang sesuai.
Bagaimana cara menggunakan namespace di DTD? Untuk menggunakan namespace dalam DTD, deklarasikan dalam deklarasi ATTLIST elemen yang menggunakannya, sebagai berikut:
Tipe namespace harus #FIXED. Hal yang sama berlaku untuk namespace atribut:
namespace dan skema XML DTD dan skema XML tidak dapat dicampur. Misalnya saja berikut ini
xmlns:x CDATA #FIXED "x-schema:myschema.xml"
Tidak akan menyebabkan definisi skema yang ditentukan di myschema.xml digunakan. Penggunaan skema DTD dan XML bersifat eksklusif.
Bagaimana cara menggunakan XMLDSO dalam Visual Basic?
Gunakan XML berikut sebagai contoh:
Markus Hanson
206 765 4583
Jane Smith
425 808 1111
Anda dapat mengikat ke recordset ADO sebagai berikut:
Buat proyek VB 6.0 baru.
Tambahkan referensi ke Microsoft ActiveX Data Objects 2.1 atau yang lebih baru, Microsoft Data Adapter Library, dan Microsoft XML versi 2.0.
Gunakan kode berikut untuk memuat data XML ke dalam kontrol XML DSO:
Redupkan dso Sebagai XMLDSOControl Baru
Redupkan dokumen Sebagai IXMLDOMDocument
Setel doc = dso.XMLDocument
doc.Load ("d:test.xml")
menggunakan kode berikut untuk memetakan DSO ke objek kumpulan data baru menggunakan DataAdapter:
Dim da Sebagai Adaptor Data Baru
Setel da.Objek = dso
Redupkan rs Sebagai ADODB.Recordset Baru
Setel rs.DataSource = da
Akses data:
MsgBox rs.Fields("name").Nilai
menghasilkan string "Mark Hanson"
Bagaimana cara menggunakan XML DOM di Jawa?
MSXML.DLL versi IE5 harus diinstal. Di Visual J++ 6.0, pilih Tambahkan COM Wrapper dari menu Proyek, lalu pilih "Microsoft XML 1.0" dari daftar objek COM. Ini akan membuat pembungkus Java yang diperlukan menjadi paket baru bernama "msxml". Pembungkus Java bawaan ini juga tersedia untuk diunduh. Kelas dapat digunakan sebagai berikut:
import com.ms.com.*;
impor msxml.*;
kelas publik Kelas1
{
public static void main (String[] args)
{
Dokumen DOMDocument = DOMDocument baru();
doc.load(Varian baru(" file://d:/samples/ot.xml "));
System.out.println("Dimuat " + doc.getDocumentElement().getNodeName());
}
}
Contoh kode akan memuat file uji 3,8MB "ot.xml" dari contoh agama matahari. Kelas Varian membungkus tipe dasar Win32 VARIANT.
Karena Anda sebenarnya mendapatkan pembungkus baru setiap kali Anda mengambil sebuah node, Anda tidak dapat menggunakan perbandingan pointer pada node. Jadi jangan gunakan kode di bawah ini,
IXMLDOMNode root1 = doc.getDocumentElement();
IXMLDOMNode root2 = doc.getDocumentElement();
jika (akar1 == akar2)...
Sebagai gantinya gunakan kode berikut:
jika (ComLib.isEqualUnknown(root1, root2)) ....
Ukuran total pembungkus .class kira-kira 160KB. Namun, untuk kepatuhan penuh terhadap spesifikasi W3C, hanya wrapper IXMLDOM* yang boleh digunakan. Kelas-kelas berikut ini adalah antarmuka XML IE 4.0 lama dan dapat dihapus dari folder msxml:
Atribut IXML*,
Dokumen IXML*, Dokumen XML*
IXMLElemen*,
IXMLKesalahan*,
Koleksi IXMLElement*,
tagXMLEMEM_TYPE*
_xml_kesalahan*
Ini mengurangi ukurannya menjadi 147KB. Anda juga dapat menghapus item berikut:
Dokumen Berulir Bebas DOM
Akses dokumen XML dari beberapa thread di aplikasi Java.
Permintaan XMLHttp
Gunakan ekstensi HTTP XML DAV untuk berkomunikasi dengan server.
IXTLRuntime
Tentukan objek skrip stylesheet XSL.
Kontrol XMLDSO
Mengikat ke data XML di halaman HTML.
XMLDOMDocumentEvents
Kembalikan panggilan balik selama analisis.
Ini mengurangi ukurannya menjadi 116KB. Untuk membuatnya lebih kecil lagi, pertimbangkan fakta bahwa DOM itu sendiri memiliki dua lapisan: lapisan inti terdiri dari:
Dokumen DOM, Dokumen IXMLDOM
IXMLDOMNode*
IXMLDOMNodeList*
IXMLDOMBernamaNodeMap*
IXMLDOMDokumentFragment*
Implementasi IXMLDOMI
IXMLDOMParseError
Dan informasi DTD yang mungkin perlu disimpan pengguna:
IXMLDOMJenis Dokumen
IXMLDOMEntitas
IXMLDOMPnotasi
Semua tipe node dalam dokumen XML adalah IXMLDOMNodes, yang menyediakan fungsionalitas penuh, namun ada wrapper tingkat yang lebih tinggi untuk setiap tipe node. Oleh karena itu, jika Anda memodifikasi pembungkus DOMDocument dan mengubah tipe spesifik ini untuk menggunakan IXMLDOMNode, semua antarmuka berikut dapat dihapus:
Atribut IXMLDO
Bagian IXMLDOMCDATA
IXMLDOMCharacterData
Komentar IXMLDOM
Elemen IXMLDOME
Instruksi Pemrosesan IXMLDOM
Referensi IXMLDOMEntity
IXMLDOMTeks
Menghapus ini akan mengurangi ukurannya menjadi 61KB. Namun, untuk IXMLDOMElement, metode getAttribute dan setAttribute berguna. Kalau tidak, Anda perlu menggunakan:
IXMLDOMNode.getAttributes().setNamedItem(...)