名前空間とスキーマ(2)

2003年1月19日(日)更新


■名前空間

さらら: それぞれの人が作る要素の名前の衝突が起きないようにするって。どうするの??

たけち: そうだね。というところで、まずは、次のXMLデータを見てみようね。

さらら

XMLデータ例: 万葉歌と解説-1【kaisetsuNS.xml】
<?xml version="1.0" encoding="Shift_JIS" ?>
<kaisetsu:document xmlns:kaisetsu="http://www.yuragi.jp/ns/kaisetsu" xmlns:mp="http://www.yuragi.jp/ns/manyouPoem" xmlns:xh="http://www.w3.org/1999/xhtml">
<xh:h1>第十八巻 : さ百合花ゆりも逢はむと思へこそ</xh:h1>
<mp:poem pno="4088">
<mp:poet>大伴家持</mp:poet>
<mp:kana>左由理婆奈 由里毛安波牟等 於毛倍許曽 伊末能麻左可母 宇流波之美須礼</mp:kana>
<mp:yomi>さ百合花、ゆりも逢はむと、思へこそ、今のまさかも、うるはしみすれ</mp:yomi>
</mp:poem>

<kaisetsu:kaisetsu>
<xh:p>越中の秦伊美吉石竹の館で行われた宴会の席で、石竹が大伴家持たちに、<xh:em>百合で作った髪飾り</xh:em>を三つ贈りました。このときに大伴家持が詠んだ歌です。</xh:p>
<xh:p>「ゆり」とは、「後で」という意味です。</xh:p>

</kaisetsu:kaisetsu>
</kaisetsu:document>

-----------------------------------------------------------------

XMLデータ例: 万葉歌解説-2【manyouPoemNS.xml】
<?xml version="1.0" encoding="Shift_JIS" ?>
<mp:poems xmlns:mp="http://www.yuragi.jp/ns/manyouPoem">
<mp:poem pno="4086">
<mp:poet>大伴家持</mp:poet>
<mp:kana>安夫良火乃 比可里尓見由流 和我可豆良 佐由利能波奈能 恵麻波之伎香母</mp:kana>
<mp:yomi>油火の、光りに見ゆる、吾がかづら、さ百合の花の、笑まはしきかも</mp:yomi>
</mp:poem>
<mp:poem pno="4087">
<mp:poet>内蔵縄麻呂</mp:poet>
<mp:kana>等毛之火能 比可里尓見由流 左由理婆奈 由利毛安波牟等 於母比曽米弖伎</mp:kana>
<mp:yomi>灯火の、光りに見ゆる、さ百合花、ゆりも逢はむと、思ひそめてき</mp:yomi>
</mp:poem>
<mp:poem pno="4088">
<mp:poet>大伴家持</mp:poet>
<mp:kana>左由理婆奈 由里毛安波牟等 於毛倍許曽 伊末能麻左可母 宇流波之美須礼</mp:kana>
<mp:yomi>さ百合花、ゆりも逢はむと、思へこそ、今のまさかも、うるはしみすれ</mp:yomi>
</mp:poem>

-----------------------------------------------------------------

XMLデータ例: 万葉歌解説-3【kaiwaNS.xml】
<?xml version="1.0" encoding="Shift_JIS" ?>
<kaiwa:document xmlns:kaiwa="http://www.yuragi.jp/ns/kaiwa" xmlns:mp="http://www.yuragi.jp/ns/manyouPoem" xmlns:xh="http://www.w3.org/1999/xhtml">
<xh:h1 align="center">
<xh:font color="navy">第十八巻の歌</xh:font>
</xh:h1>
<xh:p align="right">672年10月9日更新</xh:p>
<xh:hr align="center" width="480" size="3" />
<xh:p class="takechi"><xh:strong>たけち</xh:strong>: 前回は万葉集17巻の歌について見てみたよね。今回は18巻の歌についてみてみるね。</xh:p>
<xh:p class="sarara"><xh:strong>さらら</xh:strong>: お手柔らかにね。</xh:p>
<xh:p class="takechi"><xh:strong>たけち</xh:strong>: まずは次の歌を見てみようか。</xh:p>

<mp:poem pno="4088">
<mp:poet>大伴家持</mp:poet>
<mp:kana>左由理婆奈 由里毛安波牟等 於毛倍許曽 伊末能麻左可母 宇流波之美須礼</mp:kana>
<mp:yomi>さ百合花、ゆりも逢はむと、思へこそ、今のまさかも、うるはしみすれ</mp:yomi>
</mp:poem>

<xh:p class="takechi"><xh:strong>たけち</xh:strong>: この歌は越中の秦伊美吉石竹の館で行われた宴会の席で、石竹が大伴家持たちに、<xh:em>百合で作った髪飾り</xh:em>を三つ贈ったんだ。このときに<xh:font color="red">
大伴家持</xh:font>が詠んだ歌なんだよ。</xh:p>
<xh:p class="sarara"><xh:strong>さらら</xh:strong>: へぇー、そうなのね。</xh:p>

</kaiwa:document>

さらら: あ、思い出した! 以前も、たけちはこんな話をしてくれたわよね。

たけち: 思い出してくれた?(^^) ここで何をしているかというと、要素と属性の集まり、つまりスキーマをいくつかのグループに分けて扱っているんだ。

mp :万葉集の歌を表現するためのスキーマ
kaisetsu :歌を解説する文書のためのスキーマ
kaiwa :会話の文書のためのスキーマ
xh :XHTMLのスキーマ

たけち: こういうふうに要素と属性の集まり、つまりスキーマをグループ分けして扱って、それを組み合わせることによってXMLデータを作ろう、という考え方をするんだね。このグループのことを名前空間と呼ぶんだよ。

さらら: ふ〜ん。

たけち: こういうふうにすると、次のような利点があるんだよ。

名前空間ごとに同じ名前の要素があっても、それぞれは別の要素として扱われるため、参照される名前空間の要素すべてがわかっていなてくも、参照する側では別の名前空間として、それを気にすることなく自由に名前をつけることができる。


■名前空間と名前空間接頭辞

さらら: へぇ〜。

たけち: 名前空間というのは、一種の「家」「家族」みたいなものだよね。こっちの家には、鈴木太郎さんと鈴木花子さん夫婦の子供として鈴木一郎さんと鈴木二郎さんがいる。あっちの家にも鈴木一郎さんがいる。でも、こっちの家の鈴木一郎さんとあっちの家の鈴木一郎さんは、同姓同名の別人なんだよね。それを家ごとに分けて区別しているようなものだね。

さらら: そうそう「名前空間」と言ったのよね。。。。。こんな使い方をするのね。で、このmpとかkaisetsuとかxhというのが「名前空間」なのよね。

たけち: あ、それは厳密には違っていて(^^;) mpとかkaisetsuとかxhというのは名前空間接頭辞というものなんだ。
そして本当の名前空間の名前というのは「http://www.yuragi.jp/ns/manyouPoem」とか「http://www.yuragi.jp/ns/kaisetsu」とか「http://www.w3.org/1999/xhtml」のことだよ。
そして要素名は<名前空間接頭辞:ローカル名>から成り立つんだよ。まあ名前空間接頭辞という言葉は長いから、これから接頭辞と略して使うことにするね。

さらら: へっ?..... (?_?)

たけち: あっ、じゃあ、この例での名前空間接頭辞と名前空間の関係を整理しておこうね。それから、名前空間接頭辞を使った要素名についてもね。

たけち

名前空間接頭辞の例

要素名


■名前空間とスキーマの所在

さらら: え〜と、私、mpとかkaisetsuとかxhというのが「名前空間」で、「http://www.yuragi.jp/ns/manyouPoem」とか「http://www.yuragi.jp/ns/kaisetsu」とか「http://www.yuragi.jp/ns/kaiwa」とか「http://www.w3.org/1999/xhtml」というのが、それを定義したスキーマの置き場所だと思ったんだけれど...

たけち: うん、それは大きな誤解だね(^ ^;)

さらら: え〜っ!(^^;) でも、mpとかkaisetsuとかxhというのが「接頭辞」だとして、「http://www.yuragi.jp/ns/manyouPoem」とか「http://www.yuragi.jp/ns/kaisetsu」とか「http://www.yuragi.jp/ns/kaiwa」とか「http://www.w3.org/1999/xhtml」というのは、それを定義したスキーマの置き場所なんでしょ。

たけち: そうじゃないんだよ。名前空間とスキーマの置き場所はまったく違っていてかまわないし、一緒にしないといけないという決まりもないんだ。

たけち

さらら: え、そういうふうな決まりはないの?(^ ^;)......

たけち: そう、そんな決まりはどこにもないんだよ。まあ別にここにスキーマを定義したファイルを置いたからといって問題はないし、実際そういうことをしているXMLの応用規格も少なくないけれど、でも元々これにはスキーマの置き場所としての意味はないし、そうしないといけない必然性はどこにもないんだね。

さらら: でもこういうURIだったけ、元々インターネット上でファイルの置き場所をなどを示すためのものでしょ。

たけち: 元々はね。そしてそのために、ファイルの置き場所の名前が重なっては困るから、一つのURIが示す場所は、世界中で一つしかないように、一意性が保たれるように管理されているんだ。そしてXMLの名前空間というのは、その本来の置き場所的な役目を利用しているのではなくて、その前提となっている一つのURIが示す場所は、世界中で一つしかないということを利用しているものなんだよ。


■名前空間でスキーマの唯一性を確保

たけち

さらら: へぇ〜。

たけち: つまり、名前空間の一番の役目は「一つのURIが示すものは、世界中で一つしかない」という「一意性」なんだ。http://www.yuragi.jp/ns/kaisetsu という名前が示すものは、世界でこれだけしかない、というところが大事なんだね。逆に言うと、http://www.yuragi.jp/ns/kaisetsu という名前は、世界のどこに行っても、この名前で通用するし、これが指し示すものは一つしかないんだ。

さらら: そうなんだぁ〜。

たけち: .以前IDについて説明したときと同じ説明を繰り返すけれど... 例えば人の名前でいうと、「鈴木一郎」なんていう名前は、日本では何人もいそうな名前だよね。要素のローカル名も人名と同じで、同じ名前がいくつも存在しても不思議ではない。そこでこれらをコンピュータで安心して扱えるように「世界中で一つしかない」名前にするためにはどうしたらいいか、という問題が生じるんだ。ここで、家の場合は現住所、そして名前空間の場合はスキーマの置き場所で「世界中で一つしかない」ということを表現できそうな気がするけれど、ところがこれには「現住所やスキーマの置き場所はいつ変更されてもおかしくない」という問題があるんだ。

さらら: そうね、現住所なんて、いつ引っ越すかわからないものね。

たけち: そこで家、つまり人名の場合は、日本では本籍地を使って同姓同名を区別していたんだね。本籍地というのは、日本国内だったら、出身地や現住所などとまったく関係なく、どこにでも定めても良いとされている。何故こんな「出身地や現住所と関係なくてもかまわない地名」が必要かというと、結局、人名だけでは同姓同名の人を区別できないから、それに本籍地を付けることにより「○○県○○市○○町○○番地が本籍地の鈴木一郎」さんということで、一人に絞り込むことができるからなんだ。

さらら: そうね。

たけち: 同様に、名前空間というのはURIを利用して、スキーマを一つに絞りこむための仕組みなんだよ。そして本籍地と現住所が同じである必要性はまったくないように、スキーマの名前空間と、スキーマを定義したファイルが実際に置かれている置き場所が同じである必要性もまったくないんだ。名前空間というのは、要素や属性の集まりを、一種の家族だと考えると、その本籍地のようなものなんだね。

さらら: なるほどね。

たけち

■接頭辞の役割

たけち: たとえば、documentなんていう名前の要素を使ったスキーマを定義する人なんて、世界中でたくさんいるだろうね。でも、「http://www.yuragi.jp/ns/kaisetsuのdocument要素」というのは、世界中で自分たちが決めたものだけが使われることになるんだよね。

さらら: 世界で一つだけなんて、ちょっと素敵だわ(^^)

たけち: ところが、「世界で一つしかない名前」が不便なのは、「すごく長い」ということなんだ。普段、 「http://www.yuragi.jp/ns/manyouPoemのpoemの子要素にhttp://www.yuragi.jp/ns/manyouPoemのpoet要素とhttp://www.yuragi.jp/ns/manyouPoemのkana要素とhttp://www.yuragi.jp/ns/manyouPoemのyomi要素がある」  なんて言い方をしていたら、わけがわからないよね(^^;)

さらら: そうね(^^;)

たけち

たけち: 同様に、人の名前を呼ぶときも、「○○県○○市○○町○丁目○番地が本籍地の鈴木一郎さん」なんて普通呼ばないよね。「鈴木一郎さん」と呼ぶことさえ少なくて、仕事場では「鈴木さん」とか、ちょっと親しい間柄だと「イチロー」とか「イチ」とかいった「あだ名」になるよね。例えば僕がさららのことをいつも「鵜野讃良皇女」とか呼んでいたら、すごく堅苦しいよね(^^;)

さらら: やだぁ、そんな呼び方 (^ ^;)

たけち: じゃあ、どうしたらいいかというと、最初に
ここで『イチロー』さんとお呼びする方は、『○○県○○市○○町○丁目○番地が本籍地の鈴木一郎』さんのことです
 と宣言してしまうことなんだ。こうすれば、その後に「イチロー」という呼び方をしても、それが別のところに本籍地がある鈴木一郎さんや、田中一郎さんと間違われることはないよね。

さらら: そうね。

たけち: さて、名前空間もちょっと似たようなことをするのだと考えてね。本来の名前空間は本籍地のように世界で一つしかない存在だけれど、やたらと長いのが弱点なんだ。そこで、さっきの例では「本籍地+姓名」について「あだ名」を適用したけれど、名前空間の場合は「本籍地」にあたる名前空間だけに「あだ名」を決めてしまうようなことをするんだよ。まず最初に、

さらら

これから使う mp という言葉は、http://www.yuragi.jp/ns/manyouPoem のことです

 と宣言してしまえばいいんだよ。要するに mp といった「接頭辞」というのは一種の「あだ名」なんだ。その「あだ名」が一意性のある名前空間と対応していることを最初に宣言してしまえばいいんだね。これが「名前空間宣言」であって、
xmlns:mp="http://www.yuragi.jp/ns/manyouPoem"
 というのが、それにあたるんだよ。こうしておけば、
mp:poemの子要素にmp:poet要素とmp:kana要素とmp:yomi要素がある
 という言葉は、
http://www.yuragi.jp/ns/manyouPoemのpoemの子要素にhttp://www.yuragi.jp/ns/manyouPoemのpoet要素とhttp://www.yuragi.jp/ns/manyouPoemのkana要素とhttp://www.yuragi.jp/ns/manyouPoemのyomi要素がある
 という意味と同等になるよね。

さらら: あ、そういうことなんだぁ(^^)

たけち: そしてまた、こうしておくと、例えばという名前の要素とは別にという名前の要素があったとしても、この2つは同じ要素ということにはならないよね。何故なら、 → http://www.w3.org/1999/xhtmlのtitle要素 → http://www.yuragi.jp/ns/manyouPoemのtitle要素  ということだからね。

たけち

さらら: なるほど。

たけち: ここで気をつけてほしいのは、mpという接頭辞は、あくまで一時的に仮に定めた「あだ名」でしかないということなんだ。だから、「あだ名」をいくら変えても、その「あだ名」が常に同じ名前空間のものとして宣言されていれば、それは同じ意味になる。逆に「あだ名」が同じでも、それが違った名前空間として宣言されていれば、それは違う意味になるんだ。例えば、つぎのスキーマを見て。

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:schema xmlns:xsl="http://www.w3.org/2001/XMLSchema">

<xsl:element name="poem" type="xsl:string"/>

</xsl:schema>

さらら: これってスキーマ? xslという接頭辞が使われているわ。でもXSLTではないわよね。

たけち: そう、これはXSLTなどではなくて、まったく間違いがないXML Schemaの書き方だよ(^^;) 悪趣味だし、こんな接頭辞を使うべきじゃないけどね(^^;) 逆にこんな例をみてみようね。

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.yuragi.jp/2001/XMLSchema">

<xsd:element name="poem" type="xsd:string"/>

</xsl:schema>

たけち: これは接頭辞は今までどおりxsdを使っているから、一見正しいXML Schemaのように見えるけれど、実はXML Schemaじゃないんだ。よく見ると、このxsdという接頭辞が示している名前空間はXML Schemaの名前空間じゃないんだからね。

さらら: う〜ん、そうなのね。

たけち: 今まで説明する際にも「要素が云々」みたいな話をしてきたよね。それは「http://www.w3.org/2001/XMLSchemaの要素が云々」という言い方よりも、簡潔でわかりやすいからなんだ。でも、本来は、 xmlns:xsd="http://www.w3.org/2001/XMLSchema"  という名前空間宣言が最初にあってこそ、この話は正しいことだったんだ。まあそこまで一々言うのは大変だから、あくまで慣用的な接頭辞を使うことによって省略してきたけれど、本来はそうなんだね。それから、XML Schemaの慣用的な接頭辞としては「xsd」だけでなくて、「xs」が使われることも多いんだよ。まあ「イチロー」と「イチ」の違いみたいなもんだね(^^;) 接頭辞が「xsd」であろうが、「xs」であろうが、それが同じ名前空間 http://www.w3.org/2001/XMLSchema だと宣言されているのなら、実は両者に本質的な違いはないんだね。

たけち

■名前空間はXML Schemaで使う

さらら: なるほど、これでだいたい名前空間の考え方はわかったわ(^^) じゃあ、さっきの名前空間のついたXMLデータはDTDでどう定義するの?

たけち: うん、DTDじゃ書けないんだよね(^ ^;)

さらら: え、書けないの? ?

たけち: そう、書けないんだ。もう少し詳しく言うと、何とか誤魔化して書けないこともないけれど、そのうちにっちもさっちもいかなくなる事態に陥ることがあるんだ。
例えば、上の例の場合にどうして書けないかと言うと、ここではXHTML系の要素にxhという接頭辞を割り当てたよね。でも、W3Cが定めたXHTMLのDTDでは、デフォルト名前空間と言って、接頭辞を使わない方法でDTDを定めているんだ。DTDではこの接頭辞を動的に変えることが基本的にできないんだね。
だから、XHTMLの要素について、xhのような接頭辞を使ったとたん、本物のXHTMLのDTDが使えなくなってしまうんだよ。
何故こんなことが起きているかというと、最初にXMLの仕様書が出てDTDの仕様が公表されたのは1998年2月10日のことなんだ。それからしばらくして1999年1月14日に「Namespace in XML」という名前空間の仕様が発表されたんだね。だからDTDは名前空間に対応できていないんだ。

さらら: それじゃあ、今までの話っていったい何!?

たけち: DTDではできないけれど、XML Schemaは名前空間にちゃんと対応しているんだよ(^^)

さらら: あっ。。。(^ ^;

さらら

さらら: じゃあ、具体的にさっきのXMLデータはどんなXML Schemaで書くことができるの??

たけち: うーん、そこまで話すのはもっと先にしようと思ったんだけれど… 一度に説明すると頭が混乱すると思うから、まずは眺めるだけにしておこうね(^^;)

XMLスキーマ例: 万葉歌と解説-1【kaisetsu.xsd】
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema targetNamespace="http://www.yuragi.jp/ns/kaisetsu" xmlns:kaisetsu="http://www.yuragi.jp/ns/kaisetsu" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mp="http://www.yuragi.jp/ns/manyouPoem" xmlns:xh="http://www.w3.org/1999/xhtml">

<xsd:import namespace="http://www.yuragi.jp/ns/manyouPoem" schemaLocation="manyouPoem.xsd" />
<xsd:import namespace="http://www.w3.org/1999/xhtml" schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd" />

<xsd:element name="document" type="kaisetsu:DocumentType"/>

<xsd:complexType name="DocumentType">
<xsd:sequence>
<xsd:element ref="xh:h1" />
<xsd:element ref="mp:poem" />
<xsd:element ref="kaisetsu:kaisetsu" />
</xsd:sequence>
</xsd:complexType>

<xsd:element name="kaisetsu" type="kaisetsu:KaisetsuType" />

<xsd:complexType name="KaisetsuType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="xh:block" />
</xsd:choice>
</xsd:complexType>

</xsd:schema>

------------------------------------------------------

XMLスキーマ例: 万葉歌と解説-2【manyouPoem.xsd】

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema targetNamespace="http://www.yuragi.jp/ns/manyouPoem" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mp="http://www.yuragi.jp/ns/manyouPoem" >

<xsd:element name="poems" type="mp:PoemsType"/>

<xsd:complexType name="PoemsType">
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="mp:poem" />
</xsd:sequence>
</xsd:complexType>

<xsd:element name="poem" type="mp:PoemType" />

<xsd:complexType name="PoemType">
<xsd:sequence>
<xsd:element ref="mp:poet" />
<xsd:element ref="mp:kana" />
<xsd:element ref="mp:yomi" />
</xsd:sequence>
<xsd:attribute name="pno" type="xsd:positiveInteger" use="required" />
</xsd:complexType>

<xsd:element name="kana" type="xsd:string" />
<xsd:element name="poet" type="xsd:string" />
<xsd:element name="yomi" type="xsd:string" />

</xsd:schema>

------------------------------------------------

XMLスキーマ例: 万葉歌と解説-3【kaiwa.xsd】
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema targetNamespace="http://www.yuragi.jp/ns/kaiwa" xmlns:kaiwa="http://www.yuragi.jp/ns/kaiwa" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mp="http://www.yuragi.jp/ns/manyouPoem" xmlns:xh="http://www.w3.org/1999/xhtml">

<xsd:import namespace="http://www.yuragi.jp/ns/manyouPoem"
        schemaLocation="manyouPoem.xsd" />
<xsd:import namespace="http://www.w3.org/1999/xhtml"
        schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd" />


<xsd:element name="document" type="kaiwa:DocumentType"/>

<xsd:complexType name="DocumentType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="xh:block"/>
<xsd:element ref="mp:poem" />
</xsd:choice>
</xsd:complexType>

</xsd:schema>


■import

さらら: きゃ〜、やっぱりよくわからない(^^;)

たけち: そうだね、詳しいことは後から説明するとして、ここで大事なのは、3つ目のスキーマのつぎの部分だよ。

<xsd:import namespace="http://www.yuragi.jp/ns/manyouPoem"
        schemaLocation="manyouPoem.xsd" />
<xsd:import namespace="http://www.w3.org/1999/xhtml"
        schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd" />

さらら: import?

たけち: importというのは、「輸入する、導入する、持ち込む」といった意味だね。それぞれ、manyouPoem.xsd、http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsdというファイルで定義されているスキーマを取り込みますって、意味なんだよ。

import

さらら: あ、なるほど。こうすることによってXHTML系の要素を参照することができるのね。でも、これってインターネット上に置かれているXML Schemaを参照しているけれど、そんなものを使って検証できるの?

たけち: それは、XSVのようなインターネット対応のValidatorを使えば検証できるよ(^^)

さらら: あ、そうなの(^^)

たけち: ちなみにhttp://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsdというのは、現時点で最新のXHTMLのXML Schema案が置かれている場所なんだよ。いわばこれがXHTMLのXML Schemaの現住所なんだ。だから今後、これが変更されることは十分あるんだけどね。最終的にはhttp://www.w3.org/1999/xhtml.xsdに置かれそうなんだけれど、今はそこにはないんだ。

さらら: ふ〜ん、そうなのね。

たけち: これらによって、kaisetsu.xsdやkaiwa.xsdは、manyouPoem.xsdが定めた要素や、XHTML系の要素を使うことができているんだね。これらのことをまとめておこうね。

さらら

1. 名前空間を使ってスキーマを定義すると、それらを再利用することによって、無駄を省いた効率の良いスキーマ構築が可能になる。

2. 名前空間のURIは「現住所」ではなくて「本籍地」のようなものである。名前空間のURIが、スキーマを定義したファイルの置き場所となっている必然性はどこにもない。すなわち名前空間のURI(本籍地)と、スキーマを定義したファイルのURI(現住所)は全く別物であってかまわない。

3. 名前空間の接頭辞はあくまで名前空間の「あだ名」である。「あだ名」なのだから慣用的なものを使うべきだが、本当にそれがきちんと目的の名前空間と対応づけられているかどうかは、名前空間宣言で確認しておかないといけない。

4. DTDは本質的に名前空間に対応できていないため、名前空間を生かしたスキーマを定義しようとするとXML Schemaを使うべきである。


さらら: うん、だいたいのことはわかったわ。でも、まだXMLスキーマの中身がよくわかんないけど。

たけち: それについては次回から、少しずつ説明していくことにしようね(^^) ひとまず今回はこれでおしまい。

さらら: あっ、は〜い!!

次回は対象名前空間です。...... (^ ^)v


■(注1) XHTML 1.0は大きく3種類の規格に分かれており、そしてそれぞれごとにDTDやXML Schemaが定められています。

【XHTML 1.0 Strict】
レガシーな要素等を持たない厳密なXHTML 1.0
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
"http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd

【XHTML 1.0 Transitional】
以前のHTMLと互換性を保つため、レガシーな要素等を持ったXHTML 1.0
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd

【XHTML 1.0 Frameset】
フレームセットを持ったXHTML 1.0
http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd
http://www.w3.org/2002/08/xhtml/xhtml1-frameset.xsd

上記の説明では「XHTML 1.0 Transitional」を便宜的に用いました。


XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。