XML名前空間

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>

この2つのXMLドキュメントが同時に使用された場合、2つのドキュメントが異なる内容と定義を持つ <table> 要素を含んでいるため、名前の衝突が発生します。

ユーザーやXMLアプリケーションは、このような衝突をどのように処理するかを決定できません。

名前の衝突を解決するためにプレフィックスを使用します

名前のプレフィックスを使用することで、XMLでの名前の衝突を簡単に避けることができます。

このXMLにはHTMLテーブルおよび家具に関する情報が含まれています:

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>

現在、名前の衝突が存在しなくなりました。これは、2つのドキュメントがそれぞれの <table> 要素に異なる名前を使用しているためです(xmlns:f="https://www.codew3c.com/furniture"> および </h:table>)。

プレフィックスを使用して、2種類の異なる <table> 要素を生成しました。

XML ナーミングスペース - xmlns 属性

XMLでプレフィックスを使用する場合、プレフィックスのネームスペースを通じて定義されます。

(ネームスペース) 第2つの<table>要素では ネームスペースは、要素の開始タグの中の

属性で定義されます。(Uniform Resource Identifier,ネームスペースの宣言はこの文法を使用します:xmlns:プレフィックス="

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

<f:table xmlns:f="https://www.codew3c.com/furniture">

上の例では: 第2つの<table>要素では xmlns 第1つの<table>要素では f:

h: 第2つの<table>要素では xmlns 属性は f:

プレフィックスは限定されたネームスペースを提供します。

要素にネームスペースが定義されている場合、同じプレフィックスを持つすべての子要素は同じネームスペースに関連付けられます。

ネームスペースは、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>注意:

パーサーは、ネームスペースURIを使用して情報を検索しません。

URIを使用する目的は、ネームスペースにユニークな名前を提供することだけです。

ただし、多くの企業は、実際のウェブページを指すポインタとしてネームスペースを使用することがよくあります。このウェブページには、ネームスペースに関する情報が含まれています。

統一リソース識別子 (URI) 統一リソース識別子(Uniform Resource Identifier,URI

)は、インターネットリソースを示す文字列です。統一リソース定位子 (Uniform Resource Locator,URL)、インターネットのドメイン名を示す。

URIの種類としてはあまり一般的でないのは、統一リソース名 (Uniform Resource Name,URN)。

デフォルトのネームスペース(デフォルト・ネームスペース)

要素に対してデフォルトの名前空間を定義することで、すべての子要素で接頭辞を使用する必要がなくなります。

以下の文法を使用してください:

xmlns="namespaceURI"

このXML文書はHTMLテーブル情報を持ちます:

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

このXMLは家具に関する情報を持ちます:

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

名前空間の実際の使用法

XSLTはXML文書を他の形式に変換するために使用できる言語です。

以下のXML文書はXMLをHTMLに変換するために使用されます。

以下のXSL文書を詳しく観察すると、ほとんどのタグがHTMLタグであることがわかります。

HTMLでないタグはすべて xsl という接頭辞を持っており、この名前空間で示されます:"http://www.w3.org/1999/XSL/Transform":

名前空間 "http://www.w3.org/1999/XSL/Transform" は HTML 文書内の XSLT 要素を識別します:

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

XSLT に関するより深い知識を学びたい場合は、私たちの XSLT ツアー