XML ネーム・スペース

XML ネーム・スペースは名前の集合で、URI 参照で識別されて、XML 文書内でエレメント・タイプおよび属性名として使用されます。

XML ネーム・スペースは、 「Namespaces in XML」という名称の W3C 勧告 (1999 年 1 月 14 日) で定義されています。XML タグ名はグローバルに固有でなければならず、またパフォーマンス上の理由から短い名前にする必要があります。 この競合を解決するために、W3C のネーム・スペース勧告は、任意の XML エレメントを修正できる属性 xmlns を定義しています。 エレメント内にこの属性がある場合、このエレメントのネーム・スペースを識別しています。

xmlns 属性の構文は次のとおりです。

xmlns:prefix=namespace

ここで、namespace は固有の URI (たとえば www.ibm.com)、prefix はネーム・スペースを表現しており、ネーム・スペースへのポインターを示します。

次に示す customer エレメントの定義の中では、他のビジネス・アプリケーションによって作成された顧客レコードにあるタグと、 エレメントのタグを区別できるように、会計用のネーム・スペースが定義されています。

<acct:customer xmlns:acct="http://www.my.com/acct-REV10">
	<acct:name>Corporation</acct:name>
	<acct:order acct:ref="5566"/>
	<acct:status>invoice</acct:status>
</acct:customer>  

最初の行にあるネーム・スペース定義は、ネーム・スペース http://www.my.com/acct-REV10 を接頭部に割り当てています。この接頭部は、ネーム・スペースにエレメントを関連付けるために、name などのエレメント名に付けて使用されます。 別のアプリケーション、例えば配送業務システムは、 次のように customer エレメントに別のネーム・スペースを割り当てることができます。

<ful:customer xmlns:ful="http://www.your.com/ful">
	<ful:name>Corporation</ful:name>
	<ful:order ful:ref="A98756"/>
	<ful:status>shipped</ful:status>
 </ful:customer>

これで、両方のデータ構造を処理するアプリケーションは、 会計データと配送業務データを別々の方法で処理できるようになります。 ネーム・スペースにはデフォルトがあり、 これは次のように、ネーム・スペース定義にローカル名が割り当てられていない場合に使用されます。

<acct:customer xmlns="http://www.my.com/acct-REV10" xmlns:acct="http://www.my.com/acct-REV10 ">
<name>Corporation</name>
<order acct:ref="5566"/>
<status>invoice</status>
</customer>

この例では、顧客レコード内のすべてのタグが、ネーム・スペース http://www.my.com/acct-REV10 内にあるものとして修飾されます。デフォルト・ネーム・スペースが使用されるので、明示的な接頭部は必要ありません。 デフォルト・ネーム・スペースは、どの属性定義にも適用できます。

XML スキーマとネーム・スペース

次に示す XML スキーマで、スキーマのデフォルト・ネーム・スペースは、 標準 XML スキーマ・ネーム・スペース http://www.w3.org/2001/XMLSchema に定義されています。また、スキーマ固有のネーム・スペース http://www.ibm.com もあります。

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:TestSchema="http://www.ibm.com">
 <simpleType name="ZipCodeType">
 <restriction base="integer">
  <minInclusive value="10000"/>
 <maxInclusive value="99999"/>
	</restriction>
 	</simpleType>
 <!--element definitions skipped -->
</schema>

上に定義した XML スキーマが C:temp\TestSchema.xsd として保管されていることを前提とすると、 このスキーマに対して検証される有効な XML ファイルのサンプルは次のとおりです。

<?xml version="1.0"?>
<x:addressList xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd">
 xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd">
<x:address>
 <x:street>x:Vangerowstrasse</x:street>
  <x:zipCode>69115</x:zipCode>
 <x:city>x:Heidelberg</x:city>
 </x:address>
    <x:address>
<x:street>x:Bernal Road</x:street>
<x:zipCode>90375</x:zipCode>
     <x:city>x:San Jose</x:city>
 </x:address>
</x:addressList> 

ターゲット・ネーム・スペース

ターゲット・ネーム・スペースは、エレメントとその名前を関連付けるネーム・スペースを識別する働きをします。 宣言の場合は、この関連によって、スキーマに準拠する XML ファイル内のエレメントのネーム・スペースが決まります。 スキーマをインポートする XML ファイルは、schemaLocation 属性によってターゲット・ネーム・スペースを参照する必要があります。 ターゲット・ネーム・スペースと、エレメントの実際のネーム・スペースに不一致がある場合は、 スキーマ妥当性検査エラーとして報告されます。 この例では、ターゲット・ネーム・スペースは http://www.ibm.com です。 このネーム・スペースは XML スキーマ・ファイル内で定義され、XML ファイル内で 2 回参照されています。 この 3 回現れるネーム・スペースに不一致があると、妥当性検査エラーが発生します。

次にいくつかの例を示し、ターゲット・ネーム・スペースとネーム・スペース接頭部が、 XML スキーマおよびそれに対応する XML インスタンス文書の中でどのように機能するかを説明します。

サンプル 1 - デフォルトとターゲットの両ネーム・スペースと、 非修飾のローカル・ネーム・スペースを指定するスキーマ

XML スキーマ:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com">
<complexType name="AddressType">
<sequence>
<element name="name" type="string"></element>
</sequence>
</complexType>
<element name="MyAddress" type="x:AddressType"></element>
</schema>

このスキーマから作成される有効な XML インスタンス文書は、次のようなものです。 ローカル・エレメントと属性は unqualified です。

<?xml version="1.0"?>
<x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com x.xsd ">
<name>Peter Smith</name>
</x:MyAddress> 

ローカル・エレメント ("name" など) と属性が XML ファイル内で修飾されていないと、ルート・エレメントだけが修飾されます。したがってこの例では、"x" ネーム・スペース接頭部がルート・エレメント "MyAddress" に割り当てられ、このエレメントはネーム・スペース "http://www.ibm.com" に関連付けられますが、"x" 接頭部はローカル・エレメント"name" には割り当てられません。

サンプル 2 - デフォルトとターゲットの両ネーム・スペースと、 修飾ローカル・ネーム・スペースを指定するスキーマ

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com" elementFormDefault="qualified">
<complexType name="AddressType">
<sequence>
<element name="name" type="string"></element>
</sequence>
</complexType>
<element name="MyAddress" type="x:AddressType"></element>
 </schema>

このスキーマから作成される有効な XML インスタンス文書は、次のようなものです。 ローカル・エレメントおよび属性は qualified です。これは、elementFormDefault 属性が XML スキーマで qualified に設定されているからです。

<?xml version="1.0"?>
  <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.ibm.com x.xsd ">
<x:name>Peter Smith</x:name>
 </x:MyAddress>

この例では、"x" ネーム・スペース接頭部がルート・エレメント "MyAddress" とローカル・エレメント "name" の両方に割り当てられ、これらのエレメントはネーム・スペース "http://www.ibm.com" に関連付けられます。

サンプル 3 - ターゲット・ネーム・スペースを指定し、xmlns:xsd を明示的に定義するスキーマ

この XML スキーマは、次の属性を追加します。

xmlns:xsd="http://www.w3.org/2001/XMLSchema

これは、XML スキーマ言語によって定義されるそれぞれの構成体は "xsd" プレフィックスで修飾される必要があることを意味しています。 たとえば、xsd:complexType および xsd:string です。

xsfoobar など、他の任意の接頭部を選択して宣言および使用できることに注意してください。

この接頭部は、XML スキーマの設定ページで設定できます。詳細については、関連タスクを参照してください。

targetNamespace 属性によって定義されるように、すべてのユーザー定義タイプはネーム・スペース http://www.ibm.com に属し、接頭部は xmlns:x attribute 属性によって定義されている "x" です。

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com">
<xsd:complexType name="AddressType">
<xsd:sequence>
     <xsd:element name="name" type="xsd:string"></xsd:element>
</xsd:sequence>
 </xsd:complexType> <xsd:element name="MyAddress" type="x:AddressType"></xsd:element>
</xsd:schema>

このスキーマから作成される有効な XML インスタンス文書は、次のようなものです。 ローカル・エレメントと属性は unqualified です。修飾のセマンティクスはサンプル 1 と同じです。

<?xml version="1.0"?>
 <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.ibm.com x.xsd ">
<name>Peter Smith</name>
 </x:MyAddress>

サンプル 4 - ターゲット・ネーム・スペースを宣言せず、xmlns:xsd を明示的に定義するスキーマ

この XML スキーマ自体には、ターゲット・ネーム・スペースはありません。 この場合は、"xsd" などの接頭部を使用して、すべての XML スキーマ構成体を明示的に修飾することを強くお薦めします。ネーム・スペース接頭部が存在しないので、AddressType などのこのスキーマからの定義と宣言は、ネーム・スペース修飾を指定せずに参照されます。

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:complexType name="AddressType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"></xsd:element>
<xsd:element name="name" type="xsd:string"></xsd:element>
<xsd:element name="name" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType><xsd:element name="MyAddress" type="AddressType"></xsd:element>
</xsd:schema>

このスキーマから作成される有効な XML インスタンス文書は、次のようなものです。 すべてのエレメントは unqualified です。

<?xml version="1.0"?>
<MyAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="x.xsd">
<name>name</name>
</MyAddress>

サンプル 5 - ターゲット・ネーム・スペースがデフォルト・ネーム・スペースであるスキーマ

この XML スキーマでは、ターゲット・ネーム・スペースがデフォルト・ネーム・スペースです。 また、ネーム・スペースにネーム・スペース接頭部はありません。

<?xml version="1.0"?>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns="http://www.ibm.com">
<xsd:complexType name="AddressType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType> <xsd:element name="MyAddress" type="AddressType"></xsd:element>
 </xsd:schema>

このスキーマから作成される有効な XML インスタンス文書は、次のようなものです。

<?xml version="1.0" encoding="UTF-8"?>
<MyAddress xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com NewXMLSchema.xsd">
<name>name</name>
 </MyAddress>  
関連タスク
XML スキーマ・ファイル設定の編集
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.