XML/Przestrzenie nazw
Każdy element w dokumencie XML jest identyfikowany przez swoją nazwę i atrybuty. Każda taka nazwa deklaruje swoisty typ. Wszystko to zdaje egzamin, jeśli używamy tylko jednej aplikacji XML w dokumencie. Ale co jeśli trzeba użyć kilku? Do tego służy rozdzielenie przestrzeni nazw na kilka.
Jak można określić to pojęcie? Spróbujmy praktycznie: Pod danym imieniem rozpoznasz określone osoby. Natomiast całkowicie obca ci osoba najprawdopodobniej zna inne osoby noszące to samo imię. Każda z osób ma więc swoją przestrzeń nazw na dane imię. Osobnymi przestrzeniami nazw są języki. Niektóre słowa w wielu językach się pokrywają, ale nie wszystkie z takich samych par oznaczają to samo.
Do czego one są potrzebne?
- Załóżmy, że Twoja aplikacja generująca dokument XML będzie dopisywała określone dane do pliku. Ale istnieją też rozszerzenia, które będą zapisywać inne dane. Może wystąpić kolizja nazw - sytuacja, w której dwie takie same nazwy będą oznaczać co innego.
- Załóżmy, że jesteś deweloperem witryny WWW, w której używasz XHML do budowy treści i elementów strony oraz obrazków wektorowych SVG. W tych językach również występuje kolizja nazw. Na szczęście, XHTML ma swoją przestrzeń nazw, a SVG ma swoją.
Działanie i deklaracje przestrzeni nazw
edytujDeklarując przestrzeń nazw:
<przestrzeń:element xmlns="uri">
...
</przestrzeń:element>
Tworzysz z danego elementu korzeń dla danej przestrzeni nazw. Odpowiada to początkowi nowego dokumentu w dokumencie nadrzędnym. Przestrzeń jest identyfikatorem danej przestrzeni nazw, którą należy powtarzać w dokumencie w określonych miejscach. URI jest adresem URI, do którego przestrzeń nazw się odnosi. Parser samego URI nie sprawdza, jest to przydatne dla człowieka. Częstą praktyką jest umieszczanie adresu URI do głównej strony z informacjami o dokumencie lub aplikacji XML, której używa. W przypadku np. firmowej aplikacji mógłby być to adres do firmowej witryny WWW. Przestrzeń nazw można stosować zarówno do korzeni dokumentów, jak i do dowolnych innych elementów. Jednemu elementowi można przypisać kilka przestrzeni nazw.
Działanie przestrzeni nazw
edytujAby dobrze używać przestrzeni nazw, należy zapamiętać dwie ważne domyślne cechy dziedziczenia:
- Dla elementów przestrzenie nazw są dziedziczone.
- Dla atrybutów przestrzenie nazw nie są dziedziczone.
Oznacza to tyle, że dla każdego atrybutu należy dodawać prefiks (identyfikator) przestrzeni nazw. Inaczej, zawsze będzie należeć do domyślnej przestrzeni nazw, czyli do tej, do której należy korzeń całego dokumentu.
<root> <!-- domyślna przestrzeń nazw -->
<x:el xmlns:x="http://example.com"> <!-- przestrzeń nazw dla podelementów -->
<d> ... </d> <!-- przestrzeń nazw example.org -->
<t:new xmlns:t="http://cont.pl"> <!-- przestrzeń nazw, dla dzieci example.com nie obowiązuje -->
<t id="p" x:a="c" t:b = "c"></t> <!-- każdy z atrybutów należy do innej przestrzeni nazw nazw, id należy do domyślnej, a do example.com, b do cont.pl -->
</t:new>
</x:el>
</root>