XML Namensruimtes

XML 命名空间提供了一种避免元素命名冲突的方法。

命名冲突

在 XML 中,元素名称由开发者定义。当两个不同的文档使用相同的元素名时,就会发生命名冲突。

这个 XML 文档携带着某个表格中的信息:

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

这个 XML 文档包含有关桌子(一件家具)的信息:

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

假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table> 元素,就会发生命名冲突。

用户或 XML 应用程序将无法确定如何处理这类冲突。

使用前缀来解决名称冲突

使用名称前缀可以轻松避免 XML 中的名称冲突。

这个 XML 包含有关 HTML 表格和一件家具的信息:

<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>

现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的 <table> 元素 (<h:table><f:table>)。

通过使用前缀,我们创建了两种不同类型的 <table> 元素。

XML 命名空间 - xmlns 属性

bij het gebruik van een prefix in XML, moet de prefix gedefinieerd zijn.namespace(Namespaces)

Namespaces kunnen worden gedefinieerd door de xmlns attribuut om te definiëren。

Namespace-declaraties gebruiken deze syntaxis: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>

In het bovenstaande voorbeeld:

het eerste <table>-element xmlns het attribuut h: Prefixen bieden een beperkte namespace。

de tweede <table>-element xmlns het attribuut f: Prefixen bieden een beperkte namespace。

Als een element een namespace definieert, zijn alle subelementen met dezelfde prefix geassocieerd met dezelfde namespace。

Namespaces kunnen ook worden verklaard in de XML-rootelement:

<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>

Let op:Parsers gebruiken de namespace URI niet om informatie te zoeken。

Het doel van het gebruik van URI is alleen om namespaces een unieke naam te bieden。

Ondanks dat, gebruiken veel bedrijven vaak namespaces als pointers om naar bestaande webpagina's te verwijzen, die informatie over de namespace bevatten。

统一资源标识符 (URI)

统一资源标识符 (Uniform Resource Identifier,URI) is een tekenreeks die internetbronnen identificeert。

De meest voorkomende URI is统一资源定位符 (Uniform Resource Locator,URL),het identificeert een internetdomeinadres。

Een minder gebruikelijke URI-type is统一资源名称 (Uniform Resource Name,URN)。

Standaard naamruimte (Default Namespaces)

Het definiëren van een standaard namespace voor een element bespaart ons het gebruik van voorvoegsels op alle subelementen.

Gebruik de volgende syntaxis:

xmlns="namespaceURI"

Deze XML-document bevat HTML-tabelinformatie:

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

Deze XML bevat informatie over een meubelstuk:

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

Daadwerkelijke toepassing van namespaces

XSLT is een taal die kan worden gebruikt om XML-documenten te converteren naar andere formaten.

Het volgende XML-document is bedoeld om XML naar HTML te converteren.

Als je goed kijkt naar het volgende XSL-document, zie je dat de meeste tags HTML-tags zijn.

Niet-HTML tags hebben een voorvoegsel xsl en worden gemarkeerd door deze namespace: "http://www.w3.org/1999/XSL/Transform":

De namespace "http://www.w3.org/1999/XSL/Transform" identificeert de XSLT-elementen in het HTML-document:

<?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>

Als je meer wilt leren over XSLT, lees dan onze XSLT Handleiding.