Przestrzenie nazw XML

Przestrzeń nazw XML dostarcza metodę unikania konfliktów nazw elementów.

Konflikt nazw

W XML, nazwy elementów są definiowane przez dewelopera. Gdy dwa różne dokumenty używają tych samych nazw elementów, występuje konflikt nazw.

Ten dokument XML przenosi informacje z pewnej tabeli:

<table>
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>

Ten dokument XML zawiera informacje o stole (meblu):

<table>
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>

Jeśli te dwa dokumenty XML będą używane razem, ze względu na to, że oba zawierają elementy <table> z różnymi treściami i definicjami, wystąpi konflikt nazw.

Użytkownik lub aplikacja XML nie będzie mogła zdecydować, jak obsługiwać tego typu konflikty.

Rozwiązanie konfliktów nazw przy użyciu prefiksu

Użycie prefiksu pozwala łatwo unikać konfliktów nazw w XML.

Ten XML zawiera informacje o tabeli HTML i meblu:

<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>
<f:table>
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

Teraz, konflikt nazw nie istnieje już, ponieważ oba dokumenty używają różnych nazw do nazwania swoich elementów <table> (<h:table> i <f:table>)。

Dzięki użyciu prefiksu stworzyliśmy dwa różne typy elementów <table>.

XML przestrzeń nazw - atrybut xmlns

W XML-u używając prefiksu, musi być zdefiniowany prefiksPrzestrzenie nazw(Przestrzenie nazw)。

Przestrzenie nazw można zdefiniować przez xmlns Atrybut do definiowania.

Deklaracja przestrzeni nazw używa tej gramatyki: xmlns:prefix="URI"。

<root>
<h:table xmlns:h="http://www.w3.org/TR/html4/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>
<f:table xmlns:f="https://www.codew3c.com/furniture">
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>
</root>

W powyższym przykładzie:

pierwszy <table> elementu xmlns Atrybut jest h: Prefiks dostarcza ograniczonej przestrzeni nazw.

drugi <table> elementu xmlns Atrybut jest f: Prefiks dostarcza ograniczonej przestrzeni nazw.

Jeśli dla elementu zdefiniowano przestrzeń nazw, wszystkie podzespoły o tym samym prefiksie są powiązane z tą samą przestrzenią nazw.

Przestrzenie nazw mogą również być deklarowane w elemencie korzenia XML:

<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="https://www.codew3c.com/furniture"
<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>
<f:table>
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>
</root>

Uwaga:Parser nie używa URI przestrzeni nazw do wyszukiwania informacji.

Cel użycia URI to dostarczenie unikalnej nazwy przestrzeni.

Jednak wiele firm często używa przestrzeni nazw jako wskaźników do wskazywania na istniejące strony internetowe, które zawierają informacje o przestrzeniach nazw.

Jednolity Identyfikator Zasobu (URI)

Jednolity Identyfikator Zasobu (Uniform Resource Identifier,URI) jest ciąg znaków identyfikujący zasoby Internetu.

Najbardziej powszechnym URI jestJednolity Lokator Zasobu (Uniform Resource Locator,URL),która identyfikuje adresy domen internetowych.

Innym mniej popularnym typem URI jestJednolity Nazwa Zasobu (Uniform Resource Name,URN)。

Domyślne przestrzenie nazw (Default Namespaces)

Definiowanie domyślnej przestrzeni nazw dla elementów pozwala nam uniknąć użycia prefiksów we wszystkich podelementach.

Użyj poniższego syntaxu:

xmlns="namespaceURI"

Ten dokument XML zawiera informacje o tabeli HTML:

<table xmlns="http://www.w3.org/TR/html4/">
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>

Ten XML zawiera informacje dotyczące mebla:

<table xmlns="https://www.codew3c.com/furniture">
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>

Zastosowanie przestrzeni nazw

XSLT to język, który można używać do konwersji dokumentów XML na inne formaty.

Poniższy dokument XML jest używany do konwersji dokumentu XML na HTML.

Jeśli dokładnie przyjrzysz się poniższemu dokumentowi XSL, zauważysz, że większość etykiet to etykiety HTML.

Tagi nie związane z HTML mają prefiks xsl, wskazywany przez przestrzeń nazw: "http://www.w3.org/1999/XSL/Transform":

Przestrzeń nazw "http://www.w3.org/1999/XSL/Transform" oznacza elementy XSLT w dokumencie HTML:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
  <h2>My CD Collection</h2>
  <table border="1">
    <tr>
      <th style="text-align:left">Title</th>
      <th style="text-align:left">Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Jeśli chcesz poznać więcej na temat XSLT, przeczytaj nasz Podręcznik XSLT.