Saya melihat baris berikut dalam file XML:
xmlns:android="http://schemas.android.com/apk/res/android"
Saya juga melihat xmlns
banyak file XML lain yang saya temui.
Apa itu?
Saya melihat baris berikut dalam file XML:
xmlns:android="http://schemas.android.com/apk/res/android"
Saya juga melihat xmlns
banyak file XML lain yang saya temui.
Apa itu?
Jawaban:
Ini mendefinisikan XML Namespace .
Dalam contoh Anda, Awalan Namespace adalah " android " dan URI Namespace adalah " http://schemas.android.com/apk/res/android "
Di dokumen, Anda melihat elemen seperti: <android:foo />
Pikirkan awalan namespace sebagai variabel dengan alias nama pendek untuk URI namespace lengkap. Ini sama <http://schemas.android.com/apk/res/android:foo />
dengan menulis berkaitan dengan apa artinya "ketika parser XML membaca dokumen.
CATATAN: Anda tidak dapat benar-benar menggunakan URI namespace lengkap sebagai pengganti awalan namespace dalam dokumen contoh XML.
Lihatlah tutorial ini di namespaces: http://www.sitepoint.com/xml-namespaces-explained/
<LinearLayout
karya tanpa awalan?
Ini berarti namespace XML .
Pada dasarnya, setiap elemen (atau atribut) dalam XML milik namespace, cara "memenuhi syarat" nama elemen.
Bayangkan Anda dan saya sama-sama menciptakan XML kami sendiri. Anda menciptakan XML untuk menggambarkan orang, saya menciptakan tambang untuk menggambarkan kota. Kami berdua memasukkan elemen yang disebut name
. Milik Anda mengacu pada nama orang tersebut, dan nama saya adalah nama kota — OK, itu sedikit dibuat-buat.
<person>
<name>Rob</name>
<age>37</age>
<homecity>
<name>London</name>
<lat>123.000</lat>
<long>0.00</long>
</homecity>
</person>
Jika dua XML kami digabungkan menjadi satu dokumen, bagaimana kami membedakan kedua nama? Seperti yang Anda lihat di atas, ada dua name
elemen, tetapi keduanya memiliki makna yang berbeda.
Jawabannya adalah Anda dan saya akan menetapkan namespace untuk XML kami, yang akan kami buat unik:
<personxml:person xmlns:personxml="http://www.your.example.com/xml/person"
xmlns:cityxml="http://www.my.example.com/xml/cities">
<personxml:name>Rob</personxml:name>
<personxml:age>37</personxml:age>
<cityxml:homecity>
<cityxml:name>London</cityxml:name>
<cityxml:lat>123.000</cityxml:lat>
<cityxml:long>0.00</cityxml:long>
</cityxml:homecity>
</personxml:person>
Sekarang kami telah sepenuhnya memenuhi syarat XML kami, tidak ada ambiguitas tentang apa arti setiap name
elemen. Semua tag yang dimulai dengan personxml:
adalah tag milik XML Anda, semua yang dimulai dengan cityxml:
milik saya.
Ada beberapa hal yang perlu diperhatikan:
Jika Anda mengecualikan deklarasi namespace, semuanya dianggap berada di namespace default.
Jika Anda mendeklarasikan namespace tanpa pengenal, yaitu xmlns="http://somenamespace"
, alih-alih xmlns:rob="somenamespace"
, itu menentukan namespace default untuk dokumen.
Namespace itu sendiri, sering kali merupakan IRI , tidak memiliki konsekuensi nyata. Itu harus unik, sehingga orang cenderung memilih IRI / URI yang mereka miliki, tetapi tidak memiliki makna yang lebih besar dari itu. Kadang-kadang orang akan menempatkan skema (definisi) untuk XML pada IRI yang ditentukan, tetapi itu adalah konvensi beberapa orang saja.
Awalan juga tidak ada konsekuensi. Satu-satunya hal yang penting adalah apa namespace awalan didefinisikan sebagai. Beberapa tag dimulai dengan awalan yang berbeda, yang semuanya peta ke namespace yang sama dianggap sama.
Misalnya, jika awalan personxml
dan mycityxml
keduanya dipetakan ke namespace yang sama (seperti dalam cuplikan di bawah), maka tidak masalah jika Anda awalan elemen tertentu dengan personxml
atau mycityxml
, keduanya akan diperlakukan sebagai hal yang sama oleh parser XML . Intinya adalah bahwa parser XML tidak peduli apa yang Anda pilih sebagai awalan, hanya namespace yang dipetakan juga. Awalan hanyalah tipuan yang menunjuk ke namespace.
<personxml:person
xmlns:personxml="http://example.com/same/url"
xmlns:mycityxml="http://example.com/same/url" />
Atribut dapat dikualifikasikan tetapi pada umumnya tidak. Mereka juga tidak mewarisi ruang nama mereka dari elemen yang mereka gunakan, sebagai lawan dari elemen (lihat di bawah).
Juga, ruang nama elemen diwarisi dari elemen induk. Dengan kata lain saya bisa juga menulis XML di atas sebagai
<person xmlns="http://www.your.example.com/xml/person">
<name>Rob</name>
<age>37</age>
<homecity xmlns="http://www.my.example.com/xml/cities">
<name>London</name>
<lat>123.000</lat>
<long>0.00</long>
</homecity>
</person>
Saya pikir kebingungan terbesar adalah bahwa namespace xml menunjuk ke beberapa jenis URL yang tidak memiliki informasi apa pun. Tetapi kenyataannya adalah orang yang menemukan di bawah namespace:
xmlns:android="http://schemas.android.com/apk/res/android"
bisa juga menyebutnya seperti itu:
xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"
Ini hanya pengidentifikasi unik. Namun ditetapkan bahwa Anda harus meletakkan URL di sana yang unik dan berpotensi menunjukkan spesifikasi tag / atribut yang digunakan di namespace tersebut. Itu tidak wajib.
Kenapa harus unik? Karena tujuan namespaces adalah untuk membuatnya unik sehingga atribut misalnya disebut latar belakang dari namespace Anda dapat dibedakan dari latar belakang dari namespace lain.
Karena keunikan itu Anda tidak perlu khawatir bahwa jika Anda membuat atribut khusus Anda, Anda akan memiliki tabrakan nama.
xmlns - xml namespace. Itu hanya metode untuk menghindari konflik nama elemen. Sebagai contoh:
<config xmlns:rnc="URI1" xmlns:bsc="URI2">
<rnc:node>
<rnc:rncId>5</rnc:rncId>
</rnc:node>
<bsc:node>
<bsc:cId>5</bsc:cId>
</bsc:node>
</config>
Dua node
elemen berbeda dalam satu file xml. Tanpa ruang nama file ini tidak akan valid.
Anda memiliki ruang nama sehingga Anda dapat memiliki elemen unik secara global. Namun, 99% dari waktu ini tidak terlalu penting, tetapi ketika Anda menempatkannya dalam perspektif The Semantic Web , itu mulai menjadi penting.
Misalnya, Anda bisa membuat XML mash-up dari berbagai skema hanya dengan menggunakan yang sesuai xmlns
. Misalnya, tumbuk teman teman dengan vCard , dll.