XML namnrymdar

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

När prefix används i XML måste prefixet definieras.Namnsrymdar(Namnsrymdar)。

Namnsrymdar kan definieras genom xmlns egenskapen för att definiera.

Namnsrymdsdeklarationen använder denna syntax: 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>

I det föregående exemplet:

det första <table>-elementet xmlns egenskapen är h: Prefixen tillhandahåller en begränsad namnsrymd.

den andra <table>-elementet xmlns egenskapen är f: Prefixen tillhandahåller en begränsad namnsrymd.

Om en namnsrymd definieras för ett element, är alla underelement med samma prefix associerade med samma namnsrymd.

Namnsrymdar kan också deklareras i XML:s rot-element:

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

Observera:En parser använder inte namnsrymd URI för att söka information.

Syftet med att använda URI är bara att ge namnsrymden ett unikt namn.

Men många företag använder ofta namnsrymdar som pekar på verkliga webbsidor som innehåller information om namnsrymden.

En enhetlig resursidentifierare (URI)

En enhetlig resursidentifierare (Uniform Resource Identifier,URI) är en sträng som identifierar Internetresurser.

Den mest vanliga URI ärEn enhetlig resursplacering (Uniform Resource Locator,URL),den identifierar Internetdomänadresser。

En annan mindre vanlig URI-typ ärEn enhetlig resursnamn (Uniform Resource Name,URN)。

Standardnamnsrymd (Default Namespaces)

Att definiera en standardnamnrymd för ett element kan avstå från att använda prefix i alla underkomponenter.

Använd följande syntax:

xmlns="namespaceURI"

Denna XML-dokument bär HTML-tabellinformation:

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

Detta XML bär information om ett möbelstycke:

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

Verklig tillämpning av namnrymd

XSLT är ett språk som kan användas för att konvertera XML-dokument till andra format.

Detta XML-dokument används för att konvertera XML till HTML.

Om du noggrant observerar den här XSL-dokumentet, kommer du att se att de flesta taggarna är HTML-taggar.

Taggar utanför HTML har prefixet xsl, och denna namnrymd markerar: "http://www.w3.org/1999/XSL/Transform":

Namnrymden "http://www.w3.org/1999/XSL/Transform" markerar XSLT-element i HTML-dokumentet:

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

Om du vill lära dig mer om XSLT, läs vår XSLT handledning.