spis treści.poprzedni.następny. Pabloware.com
 

Kurs języka XML

Co się dzieje w przestrzeni?

 

Przestrzenie nazw pozwalają używać dowolnie wielu słowników znaczników w jednym dokumencie i to w sposób dość elastyczny.

Czy są mi potrzebne?

Przestrzenie nazw są potrzebne w każdym dokumencie, który używa więcej niż jednego słownika znaczników (zbioru nazw znaczników). Wyobraź sobie dokument XML opisujący rachunek za książkę. Jeśli spotkasz w nim element „Author” pomyślisz, że to autor rachunku, czy autor książki? Bez przestrzeni nazw mogłoby dojść do sytuacji, w której aplikacja odczytałaby zawartość poniższego elementu:

<Author>Słowacki</Author>

jako autora rachunku za własną książkę… Powiesz: czemu nie użyć elementu „BookAuthor”? Oczywiście czasem można, ale jeśli będziesz chciał, lub po prostu musiał, użyć już wcześniej zdefiniowanego języka opisu danej rzeczy (a jest to jak najbardziej zalecane), przestrzenie nazw okażą się jedynym sensownym rozwiązaniem.

Innym przykładem wykorzystania przestrzeni nazw są arkusze XSL, w których - jak pamiętasz - elementy sterujące przetwarzaniem należą do odrębnej przestrzeni nazw o prefiksie „xsl”.

Więc jak ich użyć?

Konstrukcja przestrzeni nazw (NameSpaces) jest bardzo prosta - za jej wstawienie odpowiada atrybut „xmlns:X”, gdzie X jest skrótową nazwą-aliasem przestrzeni, a wartość tego atrybutu jest jej właściwym identyfikatorem. Identyfikator taki musi mieć postać adresu URL, choć dokument na który wskazuje nie musi wcale istnieć i nawet jeśli istnieje, nie musi mieć żadnego związku z daną przestrzenią nazw. Adres ten często jednak wskazuje np. na schemat zawierający definicję języka, którego znaczników zamierzamy używać. Skrótowa nazwa przestrzeni jest zwana prefiksem, bo poprzedza nazwę każdego elementu i/lub atrybutu, który do danej przestrzeni należy.

<bn:Book xmlns:bn="http://apps.bn.com/ns">
  <bn:Author>Słowacki</bn:Author>
</bn:Book>

Powyżej została zdefiniowana przestrzeń nazw „http://apps.bn.com/ns”, czyli „bn”. Definicja przestrzeni poprzez atrybut „xmlns” nie może w hierarchii dokumentu znajdować się niżej, niż elementy, które z niej korzystają, choć dla wygody najczęściej umieszcza się ją po prostu w głównym elemencie.

Oprócz przestrzeni nazw określonych prefiksem, można także tworzyć przestrzenie nazw domyślne dla danego elementu i jego elementów podrzędnych. W definicji należy wtedy pominąć podanie prefiksu - np:

<Book xmlns="http://apps.bn.com/ns">
  <Author>Słowacki</Author>
</Book>

Elementy „Author” i „Book” i tak należą do przestrzeni nazw „http://apps.bn.com/ns”.

Jako że prefiks jest jedynie czymś w rodzaju aliasu do przestrzeni nazw, poniższe elementy „Author”, „Title” i „Book” należeć będą do tej samej przestrzeni „http://apps.bn.com/ns”:

<bn:Book xmlns:bn="http://apps.bn.com/ns" xmlns:bn2="http://apps.bn.com/ns" xml:lang="pl">
  <bn2:Title>Kordian</bn2:Title>
  <bn:Author>Słowacki</bn:Author>
</bn:Book>

Rzadko się to stosuje, ale atrybuty również mogą być jawnie przydzielone do danej przestrzeni nazw, np.:

<bn:Book xmlns:bn="http://apps.bn.com/ns" bn:Lang="pl">
  <bn:Author>Słowacki</bn:Author>
</bn:Book>

Warto tutaj wspomnieć o predefiniowanej w XML-u przestrzeni o nazwie „http://www.w3.org/XML/1998/namespace” i prefiksie „xml”. Przestrzeń ta zawiera atrybut „lang”, który może być stosowany dla każdego elementu dokumentu, bez jawnego określania przestrzeni „xml” i określa język - więc poprawny będzie np. taki dokument:

<bn:Book xmlns:bn="http://apps.bn.com/ns" xml:lang="pl">
  <bn:Author>Słowacki</bn:Author>
</bn:Book>

Polecam nieco już historyczny artykuł pt.: „Namespaces in XML: Zagwozdka” autorstwa Marcina Jagodzińskiego. Artykuł został opublikowany w magazynie Webmaster.

 
spis treści.poprzedni.następny. Pabloware.com