XML 名前空間


XML 名前空間は、要素の名前の衝突を回避する方法を提供します。


名前の衝突

XML では、要素名は開発者によって定義されます。2つの異なるドキュメントが同じ要素名を使用する場合、名前の衝突が発生します。

このXMLはHTMLテーブルの情報を含みます:

<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ドキュメントが一緒に使用される場合、両方のドキュメントに異なる内容と定義を持つ<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>

上記の例では、2つの<table>要素が異なる名前を持つため、衝突は発生しません。


XML 名前空間 - xmlns 属性

XMLでプレフィックスを使用する場合、いわゆるプレフィックスのための名前空間を定義する必要があります。

名前空間は、要素の開始タグのxmlns属性で定義されます。

名前空間宣言の構文は次のとおりです。xmlns:プレフィックス="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="http://www.w3cschool.cc/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

</root>

上記の例では、<table>タグのxmlns属性がh:およびf:プレフィックスの適格な名前空間を定義しています。

名前空間が要素の開始タグで定義されると、同じプレフィックスを持つすべての子要素が同じ名前空間に関連付けられます。

名前空間は、それらが使用される要素内またはXMLルート要素内で宣言できます:

<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3cschool.cc/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は、パーサーが情報を検索するために使用することはありません。

その目的は、名前空間に一意の名前を付けることです。ただし、多くの企業は、名前空間に関する情報を含む実際のWebページを指すポインターとして名前空間を使用することがよくあります。

アクセスしてくださいhttp://www.w3.org/TR/html4/。


統一資源識別子(URI、正式名称 Uniform Resource Identifier)

統一資源識別子(URI)は、インターネットリソースを識別できる文字列です。

最も一般的に使用されるURIは、インターネットのドメイン名アドレスを識別するための統一資源ロケータ(URL)です。もう1つのあまり使用されないURIは統一資源命名(URN)。

この例では、URLのみを使用します。


デフォルトの名前空間

要素にデフォルトの名前空間を定義すると、すべての子要素でプレフィックスを使用する手間を省くことができます。その構文は次のとおりです:

xmlns="namespaceURI"

このXMLはHTMLテーブルの情報を含みます:

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

このXMLは、ある家具に関する情報を含みます:

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


実際の使用における名前空間

XSLTは、XMLドキュメントをHTMLなどの他の形式に変換するためのXML言語です。

以下のXSLTドキュメントでは、ほとんどのタグがHTMLタグであることがわかります。

HTML以外のタグにはすべてxslプレフィックスが付き、この名前空間によって識別されます:xmlns:xsl="http://www.w3.org/1999/XSL/Transform":

<?xml version="1.0" encoding="ISO-8859-1"?>

<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>
Title
Artist
</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チュートリアルを探してください。


その他の拡張