Bir XML dosyasında aşağıdaki satırı gördüm:
xmlns:android="http://schemas.android.com/apk/res/android"
Karşılaştığım xmlns
birçok XML dosyasında da gördüm .
Bu ne?
Bir XML dosyasında aşağıdaki satırı gördüm:
xmlns:android="http://schemas.android.com/apk/res/android"
Karşılaştığım xmlns
birçok XML dosyasında da gördüm .
Bu ne?
Yanıtlar:
Bir XML Ad Alanı tanımlar .
Örneğin, Ad Alanı Öneki " android " ve Ad Alanı URI'si " http://schemas.android.com/apk/res/android "
Belgede aşağıdaki gibi öğeler görürsünüz: <android:foo />
Ad alanı önekini, tam ad alanı URI'sı için kısa ad takma adı olan bir değişken olarak düşünün. <http://schemas.android.com/apk/res/android:foo />
Bir XML ayrıştırıcısı belgeyi okuduğunda bunun "ne anlama geldiğine" ilişkin olarak yazmanın karşılığıdır .
NOT: Bir XML örneği belgesindeki ad alanı öneki yerine tam ad alanı URI'sini kullanamazsınız.
Ad alanlarındaki bu eğiticiye göz atın: http://www.sitepoint.com/xml-namespaces-explained/
<LinearLayout
Önek olmadan çalışır yani ?
XML ad alanı anlamına gelir .
Temel olarak, her elemanın (veya nitelik) XML bir ad, elemanın "eleme" isminin bir şekilde aittir.
Siz ve ben, kendi XML'imizi icat ettiğimizi düşünün. Sen insanları tanımlamak için XML icat, ben şehirleri tanımlamak için benim icat. Kimizde de denilen bir element var name
. Seninki kişinin adına, benimki de şehir adına atıfta bulunuyor - Tamam, biraz yapmacık.
<person>
<name>Rob</name>
<age>37</age>
<homecity>
<name>London</name>
<lat>123.000</lat>
<long>0.00</long>
</homecity>
</person>
İki XML'imiz tek bir belgede birleştirildiyse, iki adı nasıl birbirinden ayırabiliriz? Yukarıda görebileceğiniz gibi, iki name
unsur vardır, ancak her ikisinin de farklı anlamları vardır.
Cevap, siz ve ben XML'imize benzersiz bir ad alanı atayacağımızdır:
<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>
Şimdi XML'imizi tam olarak nitelendirdik, her bir name
öğenin ne anlama geldiği konusunda bir belirsizlik yok . İle başlayan personxml:
tüm etiketler XML'inize ait etiketlerdir, ile başlayan tüm etiketler cityxml:
benimdir.
Unutulmaması gereken birkaç nokta vardır:
Herhangi bir ad alanı bildirimini hariç tutarsanız, işler varsayılan ad alanında kabul edilir.
Tanımlayıcı olmadan bir ad alanı bildirirseniz , bunun xmlns="http://somenamespace"
yerine xmlns:rob="somenamespace"
belgenin varsayılan ad alanını belirtir.
Gerçek ad alanının kendisi, genellikle bir IRI , gerçek bir sonucu yoktur. Benzersiz olmalı, bu yüzden insanlar sahip oldukları bir IRI / URI'yi seçme eğilimindedir, ancak bundan daha büyük bir anlamı yoktur. Bazen insanlar XML için şemayı (tanım) belirtilen IRI'ye yerleştirir, ancak bu sadece bazı kişilerin konvansiyonudur.
Ön ekin de bir sonucu yoktur. Önemli olan tek şey önekin tanımlandığı ad alanıdır. Farklı öneklerle başlayan ve hepsi aynı ad alanına eşlenen birkaç etiket aynı kabul edilir.
Örneğin, önekler personxml
ve mycityxml
her ikisi de aynı ad alanına eşlendiyse (aşağıdaki snippet'te olduğu gibi), belirli bir öğeye ön ek eklemiş olmanız personxml
veya mycityxml
her ikisine de XML ayrıştırıcısı tarafından aynı şey olarak davranılması önemli değildir. . Mesele şu ki, bir XML ayrıştırıcısı önek olarak ne seçtiğinizi umursamaz, sadece haritaladığı ad alanını da dikkate alır. Öneki sadece bir indirection ad işaret.
<personxml:person
xmlns:personxml="http://example.com/same/url"
xmlns:mycityxml="http://example.com/same/url" />
Nitelikler kalifiye olabilir ancak genellikle değildir. Onlar da bunu değil elemanları (aşağıya bakınız) aksine, bunlar üzerinde eleman kendi ad devralır.
Ayrıca, öğe ad alanları üst öğeden devralınır. Başka bir deyişle, yukarıdaki XML'yi eşit olarak yazabilirdim
<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>
Bence en büyük karışıklık xml ad alanının herhangi bir bilgi içermeyen bir tür URL'yi işaret ediyor olmasıdır. Ama gerçek şu ki, ad alanının altında icat eden kişi:
xmlns:android="http://schemas.android.com/apk/res/android"
ayrıca şöyle diyebiliriz:
xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"
Bu sadece benzersiz bir tanımlayıcıdır. Bununla birlikte, benzersiz olan ve potansiyel olarak bu ad alanında kullanılan etiketlerin / özelliklerin belirtilmesine işaret edebilecek bir URL koymanız gerektiği tespit edilmiştir. Tho gerekli değildir.
Neden benzersiz olmalı? Ad alanlarının amacı onları benzersiz kılmaktır, böylece ad alanınızdan arka plan olarak adlandırılan öznitelik , başka bir ad alanından arka plandan ayırt edilebilir .
Bu benzersizlik nedeniyle, özel özelliğinizi oluşturursanız isim çarpışması yaşayacağınızdan endişelenmenize gerek yoktur.
xmlns - xml ad alanı. Sadece öğe adı çakışmalarını önlemek için bir yöntem. Örneğin:
<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>
node
Bir xml dosyasında iki farklı öğe. Ad alanları olmadan bu dosya geçerli olmaz.
Global olarak benzersiz öğelere sahip olabilmeniz için ad alanlarınız var. Bununla birlikte, zamanın% 99'u gerçekten önemli değil, ancak Anlamsal Web'in , önemli olmaya başlar.
Örneğin, yalnızca uygun olanı kullanarak farklı şemaların XML birleşimini yapabilirsiniz xmlns
. Örneğin, bir arkadaşınızın arkadaşını vCard vb.İle karıştırın .