Kami ingin mengekspor beberapa data dari basis data kami sebagai XML. Misalnya, Person
dapat memiliki age
, name
dan beberapa properti lainnya.
Kami memiliki dua pilihan untuk menentukan format XML.
Pilihan # 1:
<Persons>
<Person>
<Age>16</Age>
<Name>Richard</Name>
</Person>
<Person>
<Age>34</Age>
<Name>Eric</Name>
</Person>
...
</Persons>
Pilihan # 2:
<Persons>
<Person Age="16" Name="Richard"/>
<Person Age="34" Name="Eric"/>
...
</Persons>
Jadi apa perbedaan antara definisi sub node atau atribut? Dan apa manfaat dari setiap pilihan?
Jawaban:
Tidak ada dokumentasi yang jelas / praktik terbaik untuk ini, tetapi pertimbangkan alternatifnya, seperti yang Anda miliki:
Sebagai teks Elemen:
<name>
atau<age>
untuk tujuan iniSebagai Atribut:
age
atribut.Saya telah menghabiskan banyak waktu bekerja dengan XML, dan, menurut pendapat saya, untuk komunikasi data murni, atribut harus digunakan kapan saja memungkinkan. Jika XML kemungkinan digunakan untuk presentasi (XSLT, xhtml, dll.) Maka mungkin lebih baik sebagai konten teks (tetapi tidak harus).
sumber
Prinsip-prinsip desain XML: Kapan menggunakan elemen versus atribut oleh Uche Ogbuji dari IBM mungkin merupakan salah satu sumber daya terbaik tentang masalah ini.
Inti dari keputusan adalah bahwa atribut adalah hal-hal yang 'dilakukan'. Anda tidak dapat mengubahnya atau memodifikasinya atau membuat sarangnya. Mereka teratur dan berbeda dalam elemen (Anda tidak dapat memiliki dua hal yang sama).
Jika ada dari kendala ini adalah hal-hal yang dapat berubah, jadikan data simpul anak dari XML.
Dalam contoh Anda, Anda memiliki seseorang yang memiliki nama dan usia. Saya memiliki nama depan, tengah, dan belakang ... dan nama panggilan. Dan beberapa orang memiliki nama gadis, banyak nama tengah, atau kehormatan - bagaimana Anda memasukkan John Ronald Reuel Tolkien ke dalam struktur seperti itu?
Dan jadi kami memiliki seseorang yang memiliki dua nama tengah yang memesannya. Ini harus jelas menunjukkan bahwa tidak, atribut bukan pilihan terbaik untuk ini.
Saya tidak dapat menemukannya saat ini, tetapi dalam dokumen tertaut di atas ada pernyataan bahwa nama adalah hal-hal yang memerlukan sedikit pemikiran yang mengarah ke "Saya berharap untuk memperluas pada perlakuan nama-nama orang dalam markup di artikel mendatang." Jika ada yang memiliki petunjuk tentang ini, silakan tinggalkan komentar atau edit di tempat ini.
Di sisi lain, usia adalah sesuatu yang memiliki struktur yang agak tetap (saya sarankan ulang tahun daripada bilangan bulat). Dengan demikian, merepresentasikan informasi ini dalam format yang terkenal dan dipahami masuk akal dalam suatu atribut. Seseorang memiliki satu, dan hanya satu ulang tahun dan tidak ada 'pemesanan' untuk itu yang ingin Anda pertahankan.
Uche Ogbuji mengidentifikasi tiga prinsip inti dalam mendesain format xml dengan benar. Berikut ini adalah kutipan singkat dari dokumen tertaut di atas.
Jika informasi diekspresikan dalam bentuk terstruktur, terutama jika struktur dapat diperpanjang, gunakan elemen. Di sisi lain: Jika informasi tersebut dinyatakan sebagai token atom, gunakan atribut
Jika informasi dimaksudkan untuk dibaca dan dipahami oleh seseorang, gunakan elemen. Jika informasi paling mudah dipahami dan dicerna oleh mesin, gunakan atribut.
Gunakan elemen jika Anda perlu nilainya dimodifikasi oleh atribut lain
Jadi, nama harus elemen - mereka adalah data terstruktur yang bukan token atomik, mereka lebih cenderung dibaca oleh manusia daripada komputer dan mereka dapat dimodifikasi oleh atribut lain pada nama itu sendiri.
Tanggal harus menjadi atribut - mereka adalah data yang merupakan token atom, mereka lebih cenderung dibaca oleh komputer daripada manusia (dan kemudian diubah menjadi format yang disukai manusia jika perlu ), dan terakhir mereka tidak mungkin dimodifikasi oleh yang lain. atribut pada mereka.
sumber
Pertimbangan lain yang dimiliki beyong rolfl adalah jumlah bidang.
Lebih dari sejumlah kecil atribut menjadi berantakan, dan sulit dibaca (itu dengan asumsi Anda ingin xml Anda dapat dibaca manusia, tetapi sebagai seorang programmer Anda ingin melakukan itu untuk menguji setidaknya).
Juga, jika Anda mengharapkan struktur data salah satu bidang berubah seiring waktu, jangan menjadikannya atribut.
Misalnya, bidang nama Anda. Mungkin di masa depan ini akan menjadi
Jika Anda mengharapkan sesuatu seperti itu terjadi, menjadikannya atribut akan berarti lebih banyak kode refactoring nanti.
sumber
Untuk tag Orang, adalah normal untuk memiliki lebih banyak tag Orang, masuk akal, daftar Orang memiliki beberapa entitas, bukan atribut.
Kisahnya berbeda untuk Orang dan komponennya. Seseorang tidak mengandung nama, nama tersebut adalah atribut dari Orang tersebut, jadi saya akan tetap menggunakan atribut alih-alih tag baru. Tag berguna ketika Anda memiliki hal-hal yang berulang seperti Alamat, Anda tidak dapat melakukannya dengan atribut.
Jika kami berpikir dalam konteks HTML, Anda tidak memiliki input dengan tag nama dengan nilai, bukan?
sumber