Tuesday, October 07, 2008

xml comparation

membandingkan dua xml menggunakan alat seperti diff tidak mudah. diff hanya peka terhadap perbedaan baris per baris dalam sebuah file. diff tidak punya pengetahuan tentang struktur xml. sehingga, walaupun xml secara konten sama persis, namun whitespaces dan formatting yang berbeda akan menyebabkan diff tertipu. oleh karena itu, format xml perlu dinormalisasikan terlebih dahulu ke dalam satu bentuk yang sama; misalnya setiap tag akan menempati satu baris.

setelah mencoba beberapa kali, command yang dapat menghasilkan bentuk normalisasi yang dapat dibandingkan adalah
# xmllint --c14n [source] | xmllint --format -o [result] -
file output dari command di atas dapat di compare dengan diff
# diff [result1] [result2]
ataupun vim sbb
# vim -d [result1] [result2]

how?
pemanggilan xmllint yang pertama dengan menggunakan --c14n adalah untuk memformat xml dalam bentuk canonical-nya (baca lebih lanjut tentang bentuk canonical dari xml di 2 artikel wikipedia atau ibm). dengan menggunakan xmllint, xml yang dihasilkan sudah sesuai harapan, walaupun jika dibaca oleh human, xml structure tidak kelihatan karena whitespace tidak dihilangkan.

sayangnya, dari percobaan yang saya lakukan, document yang sudah dalam bentuk canonical +beautified (ada whitespace untuk memperjelas xml structure) tidak akan terpengaruh dengan command --c14n ini. solusinya adalah membuat bentuk akhir menjadi canonical +beautified dengan tambahan processing lewat parameter --format.

No comments: