※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Namespace and XML

サノフィ・アベンティス
薬事オペレーション部
永田 賢

1. 略語

HTML
Hyper Text Markup LanguageWebページを記述するためのマークアップ言語。
URI
Uniform Resource Identifierインターネット上に存在する情報資源の場所を指し示す記述方式。
XHTML
Extensive Hyper Text Markup LanguageXML記法に適合するよう定義しなおしたHTML言語。
XML
Extensive Markup Language文書やデータの意味や構造を記述するためのマークアップ言語の一つで、ユーザが独自のタグを指定できる。

2. はじめに

HTMLでは使用可能なタグはあらかじめ決められており、そのタグの機能を解説したガイド本は書店でたくさん目にすることができる。一方XMLではeXtensive Markup Languageという名前が示すとおり、ユーザが自由にタグを拡張することができる。
とはいえタグ名は無限ではなく、せいぜいアルファベット26文字の組み合わせでしかなく、さらに人間にとって可読であろうとすればその数はより限定される。
XMLがある著者のコンピュータの内部でのみ使用されるのであればタグ名の数の制限はそれほど問題ではないだろう。しかしXMLは世界中で共有され消費されるものであり、広く世に出回った際にタグの種類が足りないというのではお話にならない。そこで考えられたのがNamespaceというタグ特定システムである。

3. 背景

自分の家族には「太郎」という名前の人が1人だけなので、家族内ではみんな「太郎」と呼んでおり、それでなにも不自由はない。しかし一歩外に出て「太郎」というと、「お隣の太郎さん」との区別ができなくなってしまう。さらに日本全国には「太郎さん」は何十万人と存在し、「太郎」という名前だけではまったく誰のことかわからなくなってしまう。実際には「○○県○○郡○○町大字○○ △△番地の□□さん家の主の太郎さん」とすることで、特定の太郎さんを指し示すことができる。
Webの世界では住所がURIとなり、<title>というタグを「”http://www.abcde.com/xyz/”の<title>」といった表現で特定することになる。

4. 使用方法

以下の例では<name>タグが3つ存在するので、区別が必要である。
<drug>
  <name>imidaprine</name>
  <name>Tontril</name>
  <indication>Multiple Sclerosis</indication>
  <name>ABC Pharma</name>
  <address>Tokyo</address>
</drug>
そこで冒頭にNamespaceを定義し、Namespace Prefix である“p“と“m“に割り当てる。本来はNamespaceを毎回繰り返せば目的に沿うのであるが、通常Namespaceは不必要に長いURIであるため、Prefixに置き換えることでソースコードの可読性をあげる。
3つのタグを<name>、<p:name>、<m:name>とすることで<name>タグのそれぞれの違いを明確にすることができる。定義時にNamespace Prefix を省略した場合はDefault Namespaceとなり、Prefixなしのタグすべて、この場合は<p:name>、<m:name>ではなく<name>のみ、に適用される。
<drug xmlns=”http://www.abc.com/compound/”
       xmlns:p=”http://www.abc.com/drug/” 
       xmlns:m=”http://www.abc.com/manufacturer/”>
  <name>imidaprine</name>
  <p:name>Tontril</p:name>
  <p:indication>Multiple Sclerosis</p:indication>
  <m:name>ABC Pharma</m:name>
  <m:address>Tokyo</m:address>
</drug>

5. メリット

Namespaceの利用によりさまざまに定義されたタグのセットをひとつのXMLデータの中で混在させて取り扱うことができる。

6. NamespaceとSchemaの違い

NamespaceにURIが使用されることから、そのURIの先にはDTDのようなタグ定義ファイルが存在していると考えるのが自然である。たとえば以下のNamespace定義があった場合、http://www.w3.org/1999/xhtml をブラウズするとXHTMLタグの定義ファイルが現れるものと予想される。

<html xmlns="http://www.w3.org/1999/xhtml">

しかし実際には以下の説明ページが表示されるのみで、このページ内にはどこにもタグの定義は表記されていない。


この説明ページを辿っていくとDTDはhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtdに存在していることがわかる。

このことから、Namespaceとして使用されるURIと、実際のDTDの在り処は必ずしも一致しないことがわかる。XMLアプリケーションの立場からはNamespaceを参照することで「誰がいつどこで定めた定義にしたがっているのか」ということが認識できればよく、実際のDTDの在り処は別途処理されることになる。

7. よく使用されるNamespace

Namespaceにはユーザが新たに定義するほか、定義済で再利用可能なものがいくつか存在している。その代表的なものを以下に示す。

1) XSL

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform>

2) XHTML

<h:html xmlns:h="http://www.w3.org/1999/xhtml">
  <h:body>
    <h:p>本文をここに記載</h:p>
  </h:body>
</h:html>

上記をDefault Namespaceとした場合、通常のHTMLとなんら変わりないものになる。
<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <p>本文をここに記載</p>
  </body>
</html>

3) XML Schema

<schema xmlns="http://www.w3.org/2001/XMLSchema">

8. eCTD通知で使用されているNamespace

1) eCTD Specification v3.2

<ectd:ectd xmlns:ectd="http://www.ich.org/ectd"
             xmlns:xlink="http://www.w3c.org/1999/xlink">

2) JP Module1

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
              xmlns="universal"
              xmlns:xlink="http://www.w3.org/1999/xlink">

<universal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

9. 参考資料

XML.com “XML Namespaces by Example” http://www.xml.com/pub/a/1999/01/namespaces.html
W3C Namespaces in XML 1.0 (Second Edition) http://www.w3.org/TR/xml-names/