アットウィキロゴ

XML名前空間

更新日:2009-08-26

XML名前空間とは、XML文書内にある「定義内容は異なるが同じ名前の要素名または属性名」
を区別し、名前の衝突を回避するための仕組みです。

名前空間の宣言


<要素名 xmlns:接頭辞="名前空間識別子">

接頭辞:任意の文字列
名前空間識別子:URI

要素や属性が名前空間に属する場合は、名前空間接頭辞と要素名、属性名の間に「:コロン」
を記述します。

名前空間宣言の有効範囲


名前空間宣言の有効範囲(スコープ)とは、名前空間宣言で宣言した名前空間接頭辞を記述できる
範囲のことで、その範囲は名前空間宣言が記述された要素とその内容になります。
名前空間宣言が記述された要素や子孫要素、その中で定義されている属性に名前空間接頭辞を記述
できます。

属性が属する名前空間


属性の場合、属性が定義されている要素が属する名前空間と同じ名前空間に属することも、
要素が属する名前空間とはまったく異なる名前空間に属することもできます。
属性が名前空間に属する場合の記述は要素と同じで、属性名の前に「名前空間接頭辞」と
記述します。また、属性名に名前空間接頭辞が記述されていなければ、どの名前空間にも
属さないことになります。

デフォルトの名前空間


名前空間接頭辞を使用しない名前空間宣言のことで、その有効範囲(スコープ)は前述の
名前空間の有効範囲と同様に、デフォルトの名前空間が宣言された要素とその内容になります。

XSLTの制御命令


  • 条件付きの処理xsl:if命令
test属性に記述したXPath式によって、結果が真であればそのxsl:if命令内に書かれた
テンプレートを実行します。真でなければ何も実行しません。
if~else~というような、真でない場合に対応するテンプレートの記述はありません。
そのような場合は、xsl:choose命令を使用します。

<xsl:if tst="商品/@新製品='true'">
</xls:if>

  • 条件分岐の処理xsl:choose命令
xsl:choose命令の子要素としてxsl:when命令を記述します。
xsl:when命令に指定されたtest属性が真となる場合、その
xsl:when命令内のテンプレートを実行します。
複数のxsl:when命令を記述することもでき、その場合には
最初に真となるxsl:when命令内のテンプレートだけが実行
されます。

<xsl:choose>
<xsl:when test="商品/在庫数<10">
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>

  • 繰り返し処理するxsl:for-each命令

xsl:for-each命令のselect属性にノードセットとなるようなXPathを
指定し、選択されたノードごとにxsl:for-each内のテンプレートを
繰り返し実行します。

<xsl:for-each select="カタログ/商品">
</xsl:for-each>

  • xsl:apply-templatesとxsl:for-eachの使い分け

xsl:apply-templates命令では、選択されたノードセットに対し
個々にxsl:template要素が適用されるため、xsl:for-each命令
と同じように反復処理を表現することもできます。

<xsl:template match="商品">
<xsl:apply-templates select="商品リスト/商品"/>
</xsl:template>

<xsl:template match="商品">
</xsl:template>

<xsl:templaate match="商品[単価>500]">
</xsl:template>

ノードのコピー


XML文書から別のXML文書へ変換する場合、元のXML文書の一部をそのまま使える
場合があります。このとき、[xsl:copy-of命令]や[xsl:copy命令]を使って
元のXML文書から要素や属性をコピーして出力できます。

  • xsl:copy-of命令

xsl:copy-of命令のselect属性に指定sれたノードとその子孫ノードを一括して
コピーできます。

  • xsl:copy命令

xsl:copy-of命令のように、一括してコピーするのではなく、部分的にコピーしたり、
別の要素を追加したり、細かい単位でコピーする場合にはxsl:copy命令をしようする
ことでカレントノードだけをコピーできます。
最終更新:2009年08月26日 16:50