XML名前空間


W3CWD-xml-names-19980802


XML名前空間

World Wide Web Consortium ワーキングドラフト 1998年8月2日

このバージョン(原文):
http://www.w3.org/TR/1998/WD-xml-names-19980802
http://www.w3.org/TR/1998/WD-xml-names-19980802.html
http://www.w3.org/TR/1998/WD-xml-names-19980802.xml
最新のバージョン:
http://www.w3.org/TR/WD-xml-names
以前のバージョン:
http://www.w3.org/TR/1998/WD-xml-names-19980518
http://www.w3.org/TR/1998/WD-xml-names-19980327
編集者:
Tim Bray (Textuality) <tbray@textuality.com>
Dave Hollander (Hewlett-Packard Company) <dmh@corp.hp.com>
Andrew Layman (Microsoft) <andrewl@microsoft.com>

著作権  ©  1998 W3C(マサチューセッツ工科大学, フランス国立情報処理自動化研究所, 慶應義塾大学).すべての権利が留保されている。W3Cの liability(免責)、trademark(商標)、document use(文書利用)、software licensing(ソフトウェア仕様許諾)規則が適用される。

この文書の位置づけ

このドラフト仕様書は、W3C XMLワーキンググループの現在の合意を示す進行中の作業である。これは、W3C会員およびその他の利害関係者による検討のためのW3Cワーキングドラフトである。ワーキングドラフトとしての公開は、W3C会員の保証を含意するものではない。

このドラフトは、名前空間仕様書の広範囲な見直しを組み込んでいる。ある点においては未完成であるが、ワーキンググループは、初期の実装作業の間に問題が発見されない限り、ドラフトが記述する機能を機能的に変更しないつもりである。そうした問題をできるだけ迅速に発見するために、特別編集チームが結成され、ワーキングドラフトの公開で始まり、8月22日および23日のモントリオールでのXMLワーキンググループミーティングのすぐ後に終わる1ヶ月の期間の間、実装者からのフィードバックを受け付けている。実装経験レポートは xml-names-issues@w3.org まで送られたい。

我々は本質的な変更を予定していないが、なおさらなる変更があり得ることを警告し、したがって現在のところは実験的ソフトウェアまたは簡単にフィールドアップグレードできるソフトウェアだけがこの仕様書を実装するよう勧告する。XMLワーキンググループは、最終リリースに先立ってこの仕様書に変更を加えるワーキンググループの能力を初期の実装が制約することを許すつもりはない。これはドラフト文書であり、何時にても他の文書により更新され、置換され、あるいは廃止される場合がある。W3Cワーキングドラフトを「進行中の作業」以外のものとして引用することは不適切である。

XMLワーキンググループの狙いは、この名前空間設備がXML仕様書の将来のバージョンの統合的部分となるべきことである。

概要

XML名前空間は、XML文書によって使われる名前を、URIで識別される名前空間に結びつけることにより有修飾化するための単純な方法を提供する。

目次

1. 動機とまとめ
2. 名前空間の宣言
3. 有修飾名
4. 有修飾名の利用
5. 名前空間のスコープ化とデフォルト化
6. XML名前空間の内部構造
    6.1 伝統的な名前空間の不充分性
    6.2 XML名前空間パーティション
    6.3 展開エレメント型およびアトリビュート名
    6.4 一意的な展開アトリビュート名
7. 適合性

付録

A. 謝辞
B. 参照資料

1. 動機とまとめ

我々は、異なるソフトウェアモジュールのために定義され、またそれらによって利用されるマークアップを含んだXML文書の利用を心に描いた。この動機の一つがモジュラ性である。もし広く理解されており、有益なソフトウェアで利用可能であるマークアップのセットがあれば、このマークアップを再発明するよりも再利用する方がよい。

複数の独立したソースからのマークアップを含んでいるそうした文書は、認識および衝突の問題をつきつける。ソフトウェアモジュールは、ある他のソフトウェアパッケージ向けのマークアップが同じエレメント型やアトリビュート名を使っているときに発生する「衝突」に直面した場合であっても、モジュールが処理するよう設計されているマークアップ(タグ、アトリビュート)を認識できる必要がある。

これらの考察は、文書構造が、それを含んでいる文書を越えてスコープが広がるユニバーサルな名前をもつべきことを要求する。この仕様書は、これを実現するXML名前空間という機構を解説する。

[定義:] XML名前空間は、XML文書においてエレメント型アトリビュート名として使われる名前の集積であり、URIにより識別される。 XML版の名前空間は、内部構造を有し、数学的にいうとセットではないという点で、計算訓練において伝統的に使われてきた「名前空間」とは異なる。これらの問題は "6. XML名前空間の内部構造" において論じられる。

XML名前空間からの名前は有修飾名として現れる場合がある。これは名前を名前空間プリフィックスローカル部分とに分離するコロンを含んだものである。ユニバーサルに管理されるURI名前空間と文書自身の名前空間との組み合わせは、ユニバーサルに一意的であることが保証された識別子を生み出す。混乱をさせて可読性を高めるためにプリフィックスを落とすための機構が提供される。

URIは、名前の中では認められないキャラクタを含みうるので、直接に名前空間プリフィックスとして使うことができない。したがって、名前空間プリフィックスはURIのプロキシとして機能する。以下に記述されたアトリビュートベースの文法が、名前空間プリフィックスとURIとの結び付きを宣言するために使われる。この名前空間提案をサポートするソフトウェアは、この宣言とプリフィックスを認識し、それに基づいて動作しなければならない。

2. 名前空間の宣言

[定義:] 名前空間は、以下のようにプリフィックスが xmlns であるアトリビュートを使って宣言される。 この仕様書の生成規則の中にある中間生成規則の多くは、ここではなくXML仕様書 [XML] の中で定義されていることに注意すること。ここで定義されている中間生成規則がXML仕様書の中で定義されている中間生成規則と同じ名前をもつときは、すべての場合においてここにある生成規則は、そこにある対応するものによって照合される文字列のサブセットを照合する。

アトリビュートを使った名前空間の宣言
[1]  NSDef ::= PrefixDef Eq SystemLiteral [ NSC: 空URI]
[2]  PrefixDef ::= 'xmlns' (':' NCName)?
[3]  NCName ::= (Letter | '_') (NCNameChar)* /* XML Name - ":" */
[4]  NCNameChar ::= LetterDigit | '.' | '-' | '_' | CombiningCharExtender

[定義:] NSDef 生成規則の SystemLiteral は、名前空間を識別するための名前空間名として機能するURIである。 名前空間名は、その意図された目的を果たすため、一意性及び永続性という特性を有するべきである。スキーマ(があったとしても)の引き出しのために名前空間名が直接的に利用可能であるということは、目的ではない。これらの目的を念頭において設計された文法の例は、Uniform Resource Names [RFC2141] についてのものである。しかしながら、通常のURLは、これらの目的を達成するような方法で管理できることは注意されるべきである。

[定義:] PrefixDef 生成規則において、任意的なコロンと NCName とが提供されれば、その NCName名前空間プリフィックスを与え、宣言の添付先のエレメントのスコープ内にあるこの名前空間と名前とを結びつけるために使われる。

[定義:] コロンと NCName とが提供されなければ、結びつけられる名前空間名は、宣言の添付先のエレメントのスコープ内にあるデフォルト名前空間の名前空間名である。

名前空間制約:空URI
SystemLiteral は、PrefixDef が単に xmlns であるとき、すなわちデフォルト名前空間を宣言しているときに限り、空であってもよい。そうした宣言の効果は、その値をヌルに設定して、デフォルト名前空間のどれか高次の宣言を上書きすることである。デフォルト名前空間および宣言の上書きは "5. 名前空間のスコープ化とデフォルト化" において論じられる。

名前空間宣言の例:

<?xml version="1.0"?>
  <x xmlns:edi='http://ecommerce.org/schema'>
    <!--  edi 名前空間は "x" エレメントと内容とに適用される -->
  </x>

3. 有修飾名

[定義:] この仕様書に適合するXML文書において、いくつかの名前(Name という中間生成規則に対応する構造)は、いかに定義されるように、有修飾名として与えられてもよい。

有修飾名
[5]  QName ::= (Prefix ':')? LocalPart
[6]  Prefix ::= NCName
[7]  LocalPart ::= NCName

Prefix は有修飾名の名前空間プリフィックス部分を提供するものであり、名前空間宣言の中の名前空間URIと結びつけられなければならない。[定義:] LocalPart は有修飾名のローカル部分を提供する。

プリフィックスは、名前空間名のための場所確保としてのみ機能することに注意すること。アプリケーションは、包含文書を越えてスコープが広がる名前を構築するときには、プリフィックスではなく名前空間名を使うべきである。

4. 有修飾名の利用

この仕様書に適合するXML文書において、エレメント型は、以下のように有修飾名として与えられる。

エレメント型、アトリビュート名
[8]  STag ::= '<' QName (S Attribute)* S? '>' [ NSC: プリフィックスの宣言]
[9]  ETag ::= '</' QName S? '>' [ NSC: プリフィックスの宣言]
[10]  EmptyElement ::= '<' QName (S Attribute)* S? '/>' [ NSC: プリフィックスの宣言]

アトリビュート名は、以下のように有修飾名として与えられる。

アトリビュート
[11]  Attribute ::= QName Eq AttValue [ NSC: プリフィックスの宣言]

名前空間制約:プリフィックスの宣言
名前空間プリフィックスは、それが xml または xmlns であるのでない限り、名前空間宣言の中で宣言されていなければならない。xml および xmlns という名前空間プリフィックスは予約され、黙示的に宣言されているものとみなされる。大文字小文字の組み合わせを問わず x, m, l という3文字の列で始まるプリフィックスは、XMLおよびXML関連の仕様書による利用のために予約される。

エレメント名、アトリビュート型もまた、DTD内の宣言の中に現れるときには有修飾名として与えられる。

宣言内の有修飾名
[12]  doctypedecl ::= '<!DOCTYPE' S QName (S ExternalID)? S? ('[' (markupdeclPEReferenceS)* ']' S?)? '>'
[13]  elementdecl ::= '<!ELEMENT' S QName S contentspec S? '>'
[14]  cp ::= (QNamechoiceseq) ('?' | '*' | '+')?
[15]  Mixed ::= '(' S? '#PCDATA' (S? '|' S? QName)* S? ')*'
| '(' S? '#PCDATA' S? ')'
[16]  AttlistDecl ::= '<!ATTLIST' S QName AttDef* S? '>'
[17]  AttDef ::= S QName S AttType S DefaultDecl

5. 名前空間のスコープ化とデフォルト化

名前空間宣言は、それが指定されているエレメントに適用され、同じ PrefixDef 部をもつ他の名前空間宣言によって上書きされない限り、そのエレメントの内容の内部にあるすべてのエレメントに適用されるものとみなされる。

<?xml version="1.0"?>
<!-- ここにあるものはすべて明示的に HTML 名前空間内にある -->
<html:html xmlns:html='http://www.w3.org/TR/REC-html40'>
  <html:head><html:title>Frobnostication</html:title></html:head>
  <html:body><html:p>Moved to 
    <html:a href='http://frob.com'>here.</html:a></html:p></html:body>
  </html:html>

この例に示されるように、単一エレメントのアトリビュートとして複数の名前空間プリフィックスを宣言できる。

<?xml version="1.0"?>
<!-- 両方の名前空間プリフィックスとも完全に利用可能である -->
<bk:book xmlns:bk='urn:loc.gov:books'
         xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <bk:title>Cheaper by the Dozen</bk:title>
    <isbn:number>1568491379</isbn:number>
</bk:book>

デフォルト名前空間は、(そのエレメントが名前空間プリフィックスをもたなければ)それが宣言されているエレメントと、そのエレメントの内容の内部にあるプレフィックスなしエレメントすべてとに適用されるものとみなされる。デフォルト名前空間は直接にアトリビュートに適用されるのでないことに注意すること。プレフィックスがつけられていないアトリビュートの名前空間は、その添付先のエレメントの型の、また(もしあれば)そのエレメントの名前空間への機能である。詳細は "6. The Internal Structure of XML Namespaces" を見ること。

<?xml version="1.0"?>
<!-- もう一度.デフォルトでは全部が HTML 名前空間内にある -->
<html xmlns='http://www.w3.org/TR/REC-html40'>
  <head><title>Frobnostication</title></head>
  <body><p>Moved to 
    <a href='http://frob.com'>here</a>.</p></body>
  </html>
<?xml version="1.0"?>
<!-- プレフィックスなしの名前は "books" から -->
<book xmlns='urn:loc.gov:books'
      xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <title>Cheaper by the Dozen</title>
    <isbn:number>1568491379</isbn:number>
</book>

もう少し大きい名前空間スコーピングの例

<?xml version="1.0"?>
<!-- 初期的にはデフォルトの名前空間は "books" -->
<book xmlns='urn:loc.gov:books'
      xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <title>Cheaper by the Dozen</title>
    <isbn:number>1568491379</isbn:number>
    <notes>
      <!-- 評釈用にデフォルトを HTML に落とす -->
      <p xmlns='urn:w3-org-ns:HTML'>
          This is a <i>funny</i> book!
      </p>
    </notes>
</book>

デフォルト名前空間は、一度宣言されても、上書きされる場合がある。

<?xml version='1.0'?>
<Beers>
  <!-- ここではデフォルトの名前空間は HTML の名前空間 -->
  <table xmlns='http://www.w3.org/TR/REC-html40'>
   <tr><td>Name</td><td>Origin</td><td>Description</td></tr>
   <tr> 
     <!-- テーブルセルの内部で HTML 名前空間を落とす -->
     <td><brandName xmlns="">Huntsman</brandName></td>
     <td><origin xmlns="">Bath, UK</origin></td>
     <td>
       <details xmlns=""><class>Bitter</class><hop>Fuggles</hop>
         <pro>Wonderful hop, light alcohol, good summer beer</pro>
         <con>Fragile; excessive variance pub to pub</con>
         </details>
        </td>
      </tr>
    </table>
  </Beers>

6. XML名前空間の内部構造

6.1 伝統的な名前空間の不充分性

計算訓練においては、「名前空間」という用語は伝統的に名前のセット、すなわち重複を含まない集合を指す。しかしながら、そうした名前空間としてXMLマークアップにおいて使われる名前を扱うことは、その有益性を著しく損なうことになる。XML文書におけるそうした名前の主な利用は、クエリープロセッサやスタイルシート駆動のレンダリングエンジン、スキーマ駆動の検証器といったソフトウェアモジュールによる文書内の論理的構造の識別を可能にすることである。以下の例を考えてみよ。

<section><title>Book-Signing Event</title>
<signing>
  <author title="Mr" name="Vikram Seth" />
  <book title="A Suitable Boy" price="$22.95" /></signing>
<signing>
  <author title="Dr" name="Oliver Sacks" />
  <book title="The Island of the Color-Blind" price="$12.95" /></signing>
</section>

この例では、マークアップ内部に title という名前が3回発生しており、名前だけでは明かに、ソフトウェアモジュールによる正しい処理を可能にするためには不充分な情報しか提供されない。

もうひとつの問題的領域は、CSSスタイルシートを使って表示されるべきXML文書の断片であるこの例により示される通り、「グローバル」なアトリビュートの利用に由来する。

<RESERVATION>
 <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME>
 <SEAT CLASS="Y" HTML:CLASS="largeMonotype">33B</SEAT>
 <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>

この場合、CLASS は運賃基礎を記述するものであり "J", "Y", "C" といった値をとるのであるが、これは、すべての意味論的レベルで、CSSフォーマット効果を実現するために使われる HTML:CLASS アトリビュートとは区別される。

XML 1.0 は、「グローバル」なアトリビュートを宣言するために内蔵された方法を提供しない。HTMLの CLASS アトリビュートといったような項目は、散文記述やHTMLアプリケーションによる解釈においてのみグローバルである。しかしながら、名前が一意的であることがその重要な特徴的機能であるようなそうしたアトリビュートは、多様なアプリケーションによって発生することが共通して観察されている。

6.2 XML名前空間パーティション

有修飾名と無修飾名の両方をその意図された目的に沿い有益であるようにするという目標をサポートするため、我々はXML名前空間の中に現れる名前を、名前空間パーティションと呼ばれる、数個の分解された伝統的な(すなわちセット構造の)名前空間の一つに属するものとして識別する。パーティションは

全エレメント型パーティション
XML名前空間の中にあるすべてのエレメント型がこのパーティションの中に現れる。それぞれが一意的なローカル部分を有する。名前空間名とローカル部分との組み合わせは一意的にエレメント型を識別する。
グローバルアトリビュートパーティション
このパーティションは、この名前空間の中でグローバルなものとして定義されている全アトリビュートの名前を含んでいる。グローバルアトリビュートの唯一の必須の特性は、その名前がグローバルアトリビュートパーティション内で一意的であることである。この仕様書は、そうしたアトリビュートの適切な利用法に関しては何らの主張もなさない。名前空間名とアトリビュート名との組み合わせは、グローバルアトリビュートを一意的に識別する。
エレメント型ごとパーティション
全エレメント型パーティションの中にあるそれぞれの型は、そのエレメントに与えられた無修飾アトリビュートの名前が現れる結びつけられた名前空間を有する。一つのエレメントについて重複するアトリビュート名の出現はXML 1.0 により禁じられるから、これは伝統的な名前空間である。アトリビュート名とエレメントの型や名前空間名との組み合わせは、無修飾アトリビュートそれぞれを一意的に識別する。

この仕様書に適合するXML文書では、すべての有修飾(プレフィックス付き)アトリビュートの名前はグローバルアトリビュートパーティションに割り当てられ、すべての無修飾アトリビュートの名前は適切なエレメント型ごとパーティションに割り当てられる。

6.3 展開エレメント型、アトリビュート名

規則を規定し比較をなす上での便宜のため、我々は、XML文書の中にあるエレメント型とアトリビュート名とのそれぞれについて、ここでXMLエレメント文法で表現される展開形式を定義する。

[定義:] 展開エレメント型は、ExpEType 型の空XMLエレメントとして表現される。これは、型の LocalPart を与える必須の type アトリビュートと、エレメントが有修飾であれば名前空間名を与える任意的な ns アトリビュートとをもつ。

[定義:] 展開アトリビュート名は、ExpAName 型の空XMLエレメントとして表現される。これは、名前を与える必須の name アトリビュートをもつ。アトリビュートがグローバルであれば、名前空間名を与える必須の ns アトリビュートをもつ。そうでなければ、添付されたエレメントの型を与える必須の eltype と、既知ならば添付されたエレメントの名前空間名を与える任意的な elns アトリビュートとをもつ。

上記に与えられた例のわずかな変動は、展開エレメント型やアトリビュート名の働きを説明するであろう。以下の2つの断片には、名前の展開を示す表がそれぞれ続いている。

<!-- 1 --> <section xmlns='urn:com:books-r-us'>
<!-- 2 -->   <title>Book-Signing Event</title>
<!-- 3 -->   <signing>
<!-- 4 -->     <author title="Mr" name="Vikram Seth" />
<!-- 5 -->     <book title="A Suitable Boy" price="$22.95" />
             </signing>
           </section>

名前は以下のように展開されるであろう。

名前 展開
1 section <ExpEType type="section" ns="urn:com:books-r-us" /> 
2 title <ExpEType type="title" ns="urn:com:books-r-us" /> 
3 signing <ExpEType type="signing" ns="urn:com:books-r-us" />
4 author <ExpEType type="author" ns="urn:com:books-r-us" /> 
4 title <ExpAName name='title' eltype="author" elns="urn:com:books-r-us" />
4 name <ExpAName name='name' eltype="author" elns="urn:com:books-r-us" />
5 book <ExpEType type="book" ns="urn:com:books-r-us" />
5 title <ExpAName name='title' eltype="book" elns="urn:com:books-r-us" />
5 price <ExpAName name='price' eltype="book" elns="urn:com:books-r-us" />
<!-- 1 --> <RESERVATION xmlns:HTML="http://www.w3.org/TR/REC-html40">
<!-- 2 --> <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME>
<!-- 3 --> <SEAT CLASS="Y" HTML:CLASS="largeMonotype">33B</SEAT>
<!-- 4 --> <HTML:A HREF='/cgi-bin/ResStatus'>Check Status</HTML:A>
<!-- 5 --> <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>

1 RESERVATION <ExpEType type="RESERVATION" />
2 NAME <ExpEType type="NAME" />
2 HTML:CLASS <ExpAName name="CLASS" ns=http://www.w3.org/TR/REC-html40 />
3 SEAT <ExpEType type="SEAT" />
3 CLASS <ExpAName name="CLASS" eltype="SEAT">
3 HTML:CLASS <ExpAName name="CLASS" ns="http://www.w3.org/TR/REC-html40" />
4 HTML:A <ExpEType type="A" ns="http://www.w3.org/TR/REC-html40" />
4 HREF <ExpAName name="HREF" eltype="A" elns="http://www.w3.org/TR/REC-html40" />
5 DEPARTURE <ExpEType type="DEPARTURE" />

6.4 一意的な展開アトリビュート名

この仕様書に適合するXML文書では、展開名が等しい2つのアトリビュートをもってよいエレメントはない。すなわち、どのエレメントも、同じアトリビュート値の対と、同じ内容をもつ子エレメントとをもつことができないのである。

7. 適合性

この仕様書に適合するXML文書の中の名前は、QName の生成規則にマッチし、この文書の「名前空間制約」を満足するエレメント型名およびアトリビュート名である。

Name XML生成規則に合致することがXML適合のために要求される文書内のその他すべてのトークンがこの仕様書の NCName 生成規則に合致し、その中でエレメントが一意的な拡張名をもつアトリビュートを有するならば、XML文書はこの仕様書に適合する。

適合性の影響は、そうした文書の中では

ということである。

厳密に言うと、ID, IDREF(S), ENTITY(IES), NOTATION 型として宣言されているアトリビュート値も Names であり、そのためコロンなしであるべきである。しかしながら、アトリビュート値の宣言された型は、主として検証されている文書の中でしか利用できない。そこで整形式XML文書では、アトリビュート値の内容がこの仕様書に適合するようチェックされているという保証ができないのである。


付録

A. 謝辞

この作業は、特に、W3C XMLワーキンググループおよび特別利害グループのメンバーや、W3Cメタデータアクティビティの参加者を含め、きわめて数多くの人々からの入力を反映している。

B. 参照資料

RFC2141
IETF (Internet Engineering Task Force) RFC 2141: URN Syntax, ed. R. Moats. May 1997.
XML
Extensible Markup Language (XML) 1.0, eds. Tim Bray, Jean Paoli, and C. M. Sperberg-McQueen. 10 February 1998. http://www.w3.org/TR/1998/REC-xml-19980210 で入手可能である。

どら猫本舗 (webmaster@doraneko.org)