[1] [[XML名前空間]]本体仕様ではそうは規定されていませんが、 幾つかの仕様では[[修飾名]]が1つの [[URI]] に展開できるとしています。 [2] [[RDF/XML]] や [[WebDAV]] では、 [SAMP(XML)[]] と [SAMP(XML)[]] は同等です。 [3] WebDAV については [[RFC 2518]] 23.4.2 参照。 [[#comment]] * 名前空間 URI の決め方 [5] [[XML名前空間]]や [[RDF]] などで使用する名前空間 URI を選ぶ際には、幾つか注意するべきことがあります。 - 絶対 URI 参照を使うこと - 自分に使用権のある名前を使うこと - 可能な限りいつまでも使える名前を使うこと - [[URL]] として使った時に何らかの参照文書が得られること - [[局所名]]と連結してもおかしくないこと - URI として使いづらい文字を使わないこと [[#comment]] ** 絶対 URI 参照を使うこと [22] 元々 [[XML名前空間 1.0]] ではどんな URI 参照も名前空間名として認めていました [WEAK[(長さ0の文字列を除きます)]]。しかし、 [[相対URI参照]]は解釈が一意に定まらない [WEAK[(文脈に依存する)]] ことから、使用しないことが望ましいと考えられるようになりました。 名前空間を扱う多くの仕様や実装では、 絶対 URI 参照でないものの取り扱いは未定義とするか、 まったく使用を認めていません。ですから、 名前空間 URI として絶対 URI 参照を使用することが実用上必須です。 ** 自分に使用権のある名前を使うこと [6] 名前空間 URI は、必ず自分が使用権のあるものでなければなりません。 これは、過去・現在・未来に他の人が使うかもしれない名前空間 URI と衝突してしまうことを防ぐために非常に重要です。 [7] もしどこかの [[Webサイト]]を管理しているのなら、 一番手軽なのはその Web サイトに属する URI を使うことです。 たとえば John は [SAMP(URI)[http://www.example.org/john/]] で始まる URI の Web 頁群を管理しているとしましょう。 [SAMP[www.example.org]] 全体の管理者が変態的な趣味を持っていなければ、 あるいは John が妙にお人よしで他の人に貸してあげていなければ、 [SAMP(URI)[http://www.example.org/john/2004/ns1/]] という URI を使う権利を John は持っています。 ですから John はこれを名前空間 URI にできます。 しかし、 [SAMP(URI)[http://www.example.org/mike/2004/ns1/]] までは John の管理権が行き届きません。これを名前空間 URI にしたいときには、まず Mike のご機嫌をうかがうことにしたほうが身のためです。 [8] 別の方法は、メイル・アドレスです。たとえば [SAMP(URI)[mailto:john@example.org?subject=2004-ns1]] とします。 Web サイトは持っていなくてもメイル・アドレスを持っている人には有効な方法です。 ただしこの方法の大きな欠点が2つあります。 一つは、そのアドレスの使用権がいつまでも自分にあるとは限らないこと。 これは名前に西暦年を入れることで気休め程度には衝突の虞を回避できます。 もう一つは、 [CODE(URI)[[[mailto]]:]] URI の性質上、 安全な文字が少ないことです。 [CODE(URI)[mailto:]] URI で使える文字は URI の制限と [[RFC 822]] の制限の二重の制限を受けます。しかも [CODE(URI)[mailto:]] URI の仕様書は曖昧なので、安全に使えるのはアルファベットや数字やハイフン程度と考えておいたほうがよいでしょう (しかしほとんどの場合はこれで十分のはずです)。 [21] '''大域固有でない URI についての注意''': URI のすべてが大域的に固有ではありません。 例えば、 [CODE(URI)[[[file]]:]] URI scheme は環境によって指すものが違います。 そのような URI を名前空間 URI に使用すると、 衝突を防ぐという本来の目的が達成できません。 大域的に固有でない URI を名前空間名に使用するべきではありません。 [11] '''[CODE(URI)[urn:]] URI scheme についての注意''': 伝統的に名前空間 URI によく使われてきた URI [[scheme]] に [SAMP(URI)[[[urn]]:]] URI があります。 もし [SAMP(URI)[urn:]] URI を名前空間に使いたいのであれば、 [[URN]] [[NID]] が正当なものであるかを確認してください。 URN NID ([SAMP(URI)[urn:]] の直後に来る部分) は [[IANA]] に登録されたものか、 [SAMP(URI)[x-]] で始まるものしか使ってはいけません。 [12] '''他人の考案した概念に URI を割当てる時の注意''': 自分以外の人の考えた概念を取り入れる時に、 (許可なく) 自分が正当な使用権のない URI まで使ってしまわないように注意してください。 例えば、 [[RFC 2822]] で定義された[[電子メイル]]の[[頭欄]]の語彙を [[XML]] で使いたいので、 XML 名前空間を作るとします。 そのときに、 [SAMP(822)[[[Subject]]:]] 欄に対応する XML 要素の名前空間を [SAMP(URI)[urn:ietf:rfc:2822]] としたくなるかもしれません。 確かに、その [SAMP(822)[Subject]] という語彙は [SAMP(URI)[urn:ietf:rfc:2822]] という文書で定義されているものなのですから、 これは適当な態度に思えます。しかし、 [SAMP(URI)[urn:ietf:rfc:2822]] という名前の使用権を持つのは [[IETF]] であり、 その使い方を勝手に第三者が決めるべきではありません。 第三者が [SAMP(URI)[urn:ietf:rfc:2822]] に勝手に意味を与えた後で、 IETF がそれに気づかずに別な意味を [SAMP(URI)[urn:ietf:rfc:2822]] に与えてしまったら、困ったことになります。 (そうなる前に IETF が気づいたとしても、 IETF にとってはいい迷惑です。) [[#comment]] ** 可能な限りいつまでも使える名前を使うこと [9] 新しく作ろうとしている名前空間に重要な意味を持たせたいのだとしたら、 その名前をいつまでも使えるように保つことは極めて重要です。 さして重要ではないことに名前空間を使おうとしている場合であっても、 注意深く名前を選んで悪いことはありません。 一般的に言って、設計者がすぐに廃れるだろうと思ったものほど長生きします。 [10] 名前が使えなくなる状況は、おおよそ次の2つに集約できるでしょう。 - その名前の使用権を喪失した、または使いたくなくなった - うっかり同じ名前の別の名前空間を作ってしまい、 混乱が収拾できなくなった [12] 例えば John は [SAMP(URI)[http://www.example.org/john/ns1/]] という名前空間を使っていたとします。しかしその後 John は Example Organization から退会しました。それと同時に John が [SAMP(URI)[http://www.example.org/john/]] で始まる URI の使用権を喪失したとするとどうでしょう。 Example Organization が大らかな組織であれば、 それ以後も [SAMP(URI)[http://www.example.org/john/ns1/]] を使い続けたとしても、何の問題もないかもしれません。 そうでなかったとしたら、たとえば[[商標]]の問題などが起こるかもしれません。 別の可能性として、後から入会した別の John さんが [SAMP(URI)[http://www.example.org/john/ns1/]] という名前を他の用途に使ってしまうかもしれません。 [13] 対策は、 - いつまで自分が所属しているかわからない組織から割当てられた URI は使わない - 割当てた年月日を入れる などでしょう。後者の方法で、 [SAMP(URI)[http://www.example.org/john/ns1/]] を [SAMP(URI)[http://www.example.org/john/2004/ns1/]] とするだけでも、衝突の危険性はかなり下がるはずです。 年月日を URI に含めることは、他人との衝突だけではなく、 自分が以前に使った名前との衝突も防ぐことができます。 [14] [[ISP]] や無料鯖サービスの提供する Web サイト領域は、いつ名前が変わったり、サービスが中止されたりするかわかりません。 大学などのアカウントも、卒業後に消されてしまうことが多いです。 そのような URI を名前空間 URI に使うことは極力避けるべきです。 長く利用できそうな URI を持っていない場合は、 [[PURL]] のようなサービスを利用するのが便利です。 グループで多くの名前空間 URI を使う予定があるなら、 [SAMP(URI)[urn:]] URI を使うのも手です。ただし [SAMP(URI)[x-]] を使わない正式の NID を得るためには敷居が高いのが難点です。 [[#comment]] ** URL として使用した時に参照文書が得られること [15] 名前空間 URI として [SAMP(URI)[[[http]]:]] URI のような [[URL]] 系 scheme を選んだ場合は特に、 その URI を使って名前空間を定義する文書が得られるように設定しておくことが望ましいと考えられます。 たとえば、 [SAMP(URI)[http://www.example.org/john/2004/ns1/]] という名前空間 URI を使うのであれば、 [SAMP(URI)[http://www.example.org/john/2004/ns1/]] にはその名前空間を説明した文書を置いておくべきです。 文書は、人間可読なものであっても、 [[XML Schema]] や [[DTD]] や [[RDF Schema]] などのような機械可読なものであっても、 仕様書へのリンクだけであっても構いませんが、 とにかく何か情報があることが重要です。 [SAMP(URI)[http:]] URI なのに [SAMP(HTTP)[[[404]]]] であるとか、そもそも鯖が存在しないとかは論外です (が何も考えていない標準化団体や企業でそういうことをしているところが複数あります)。 文書が用意されていれば、その名前空間 URI を見た人が必要な情報を得ることができますし、 名前空間 URI の管理者にとっても、 後からうっかり別の目的に使ってしまう危険性が減ります。 [[#comment]] ** 局所名と連結してもおかしくないこと [16] [[XML名前空間]]では[[名前]]は[[名前空間名]] (URI) と[[局所名]]の''組''ですが、 [[RDF]] や [[WebDAV]] など他の幾つかの規格では名前空間 URI と局所名を連結して一つの URI 参照として扱います。 [SAMP(URI)[http://www.example.org/john/2004/ns]] のような「普通」の文字で終わる名前空間 URI を使うと、 そのような規格を使った時に、 [SAMP(URI)[http://www.example.org/john/2004/nslocal-name]] のように不恰好な URI となります。ですから、名前空間 URI の最後には [SAMP(URI)[http://www.example.org/john/2004/ns/]] や [SAMP(URI)[http://www.example.org/john/2004/ns#]] のように記号をつけると良いでしょう。 [[#comment]] ** URI として使いづらい文字を使わないこと [17] [[URI参照]]で使える文字は決まっています。 どんな文字でも自由に使えるわけではありません。 また、 URI 参照一般では認められていても、 個々の URI scheme の制限により使えない文字・文字列もあります。 名前空間 URI はその scheme の仕様に沿った正しい URI 参照としましょう。 正しくない URI 参照を名前空間として使うことは、 自分が無知であることを宣伝するようなものであると共に、 他人にも規格違反を要求することにもなりかねません。 [18] [[XML名前空間 1.1]] では URI 参照の代わりに、 その[[超集合]]である [[IRI参照]]を使っています。 しかし相互運用性を考えれば、 URI 参照を使うべきです。 (XML 名前空間 1.1 仕様書にもそう書いてあります。) [19] URI で認められている文字であっても、 使わない方が安全な文字があります。 [SAMP(URI)[~]] は、 URI で使うことが認められた文字です。 しかし、[[シフトJIS]] の [CODE(char)[[[0x7E]]]] の問題 ([SAMP(char)[[[TILDE]]]] vs [SAMP(char)[[[OVER LINE]]]]) によって不都合が実際に生じています。 うまく回避できる方法がある場面もありますが、 いつも回避できる保証はないので、避けるほうが無難です。 [WEAK[(名前空間 URI は文字として一致検査されるので、 [[URI符号化]]で [CODE(URI)[%7E]] と書き変えてしまうと、別の名前空間 URI になってしまいます。)]] [[#comment]] ** 参考文献 [4] ''URIs for W3C Namespaces'' この文書では、 [[W3C]] の仕様で使われる名前空間 URI の割当ての方針が述べられています。 [[#comment]] ** メモ [20] [[CC/PP]] では、 > All CC/PP attributes must be associated with a fully resolvable namespace identifier URI. (Relative URIs, or URIs whose interpretation may depend on the context in which they are used, should not be used.) ([Q[すべての CC/PP 属性は完全に解決可能な名前空間識別子 URI と関連付けられていなければなりません。 (相対 URI は解釈が使用された文脈に依存する URI は使用するべきではありません。)]]) とされています。ここでの[Q[完全に解決可能]]がどういう意味なのか (括弧内の意味なのか?) はよくわかりませんが・・・。 文脈依存するべきではないというのは [CODE(URI)[[[file]]:]] URI scheme や [[XPointer]] の [CODE(XPointerScheme)[[[xmlns-local]]]] scheme のようなもののことを言っているのでしょう。 [CITE[Composite Capability/Preference Profiles (CC/PP): Structure and Vocabularies 1.0]] [[#comment]] * メモ