« embedFont(JP) | Main | 名前空間(JP) »

XML名前空間(JP)

ActionScript3からXML名前空間という概念が実装される。名前空間とは一体何だろうか?Web上でXMLを共有していくと様々な要素が同じタグ名(例えば)で表現されることがあり得る。アクションスクリプトのクラスを管理する場合パッケージという概念があった。ドメインベースのネーミング(com.f60k.viewsなど)をすることで同じクラス名を別のものと扱うことが出来た。クラスの場合importを使うことでそのパッケージ内ではクラス名にあたるオブジェクトを使う場合、接頭辞にあたる部分を省略することが出来た。XMLでも同様の考え方がある。

QName
接頭辞のついたタグ名をQNameという。このXMLに名前空間を2つ与えてあるので、nameタグは2重に存在しているが、別の存在であることを判別して扱うことが出来る。例えるとというタグは'http://60000feet.com/xmlns/blog/'というフォルダ名の中にあるタグといったとこだろうか。

<body xmlns:blog="http://60000feet.com/xmlns/blog/" xmlns:domain="http://60000feet.com/xmlns/domain/">
<blog:name>movabletype</blog:name>
<domain:name>f60k</domain:name>
</body>

複数の構造
例えばあるサイトに新しいトピック情報を羅列するためにxmlから読み込んだ情報を使う場合を考える。そのxmlをこのように用意したとする。

<news>
<title></title><comment></comment><url></url>
</news>
htmlはaタグはリンクであるし、bタグはボールドであるなどタグの名前ごとに機能が決まっている。flashでも同じ考え方で機能を載せようと考えるのもごく普通であるし、flashでは次のようにタグを利用しようと制作したとする。

titleタグ:新しい空のMCを作成し太文字のテキストフィールドを作る。
commentタグ:最後に作られたtitleの下にcommentの内容を表すテキストフィールドを作る。
urlタグ:最後に作られたtitleの脇にURLを表示してボタン機能をつける。

ロールオーバーすると詳細表示を出すために、新たにxmlに新しく詳細を表す要素を追加しようと考えたのが次のxmlである。

<news>
<title></title><comment></comment><url></url>
<detail>
<comment></comment>
</detail>
</news>
detailタグのcommentタグはロールオーバーしたときのポップアップ内に表示したい内容にも関わらず、タグ名から別の処理がされてしまうことが予想できる。これではcommentタグがあったら...という条件に対しての機能追加だけでは不十分であるのだ。そこでxmlに名前空間を使って別のものと識別できるように再定義することができる。commentがpopupに属しているのか、newsに属しているのかがしっかり識別され、popupに属しているcommentタグはtitleの下に内容を書くのではないことをflashに伝えることが出来る。
<news xmlns:news="http://60000feet.com/xmlns/news/">
<news:title></news:title><news:comment></news:comment><news:url></news:url>
<news:detail xmlns:popup="http://60000feet.com/xmlns/popup/">
<popup:comment></popup:comment>
</news:detail>
</news>

Post a comment