XMLってなぁに? 初級編 第9回
この文書は執筆時点(2004/後半)での知識を基にしており、現状とあっていない可能性があります。
第9回
ここに2つのファイルがあるとしよう
a.xml
<A>
<NAME>名前</NAME>
<INT>20</INT>
</A>
b.xml
<A>
<NAME>名前</NAME>
<POWER>10</POWER>
</A>
さてこのa.xmlとb.xmlははたして同じことを表現するXMLなのだろうか?
両方の内容を見ると<NAME>は同じなんらかかの名前を意味していそうだ。
ただ、a.xmlには<INT>があって、<POWER>がない。
b.xmlには<POWER>があって、<INT>が無い。
<POWER>は力?<INT>はかしこさ?
なんだかゲームの設定情報にも思えないことも無い。
ちょっと視点を変えるとa.xmlは魔法のxmlで、b.xmlは武器のxmlに思えないことも無い。
このように<A>タグの意味を分けるためなどにタグに本籍を設定することが出来る。
それがXMLnamespaceだ。
a.xml
<?xml version="1.0" encoding="utf-8"?>
<A xmlns="http://xxx.example.com/">
<NAME>名前</NAME>
<INT>20</INT>
</A>
このようにxmlns=""と設定すると、この<A>タグの本籍地を設定することが可能になる。
上記のXMLでいうと、http://xxx.example.com/という名前空間の<A>タグと言う意味になる。
では以下のXSLファイルを適用してみよう。
a.xmlに対して適用してみてほしい。
a.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" /><xsl:template match="/"><xsl:apply-templates /></xsl:template>
<xsl:template match="A">A[<xsl:apply-templates />]A</xsl:template>
<xsl:template match="NAME">NAME[<xsl:apply-templates />]NAME</xsl:template>
<xsl:template match="INT">INT[<xsl:apply-templates />]INT</xsl:template>
</xsl:stylesheet>
結果.txt
名前20
結果はこのとおりXSLにて修飾していた内容が適用されていない。
なぜだろうか。