XML 名前空間は名前の集合で、URI 参照で識別されて、XML 文書内で要素タイプおよび属性名として使用されます。
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 スキーマ名前空間 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 インスタンス文書の中でどのように機能するかを説明します。
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" には割り当てられません。
<?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" に関連付けられます。
この XML スキーマは、次の属性を追加します。
xmlns:xsd="http://www.w3.org/2001/XMLSchemaこれは、XML スキーマ言語によって定義されるそれぞれの構成体を "xsd" 接頭部で修飾する必要があることを意味しています。 たとえば、xsd:complexType および xsd:string です。
. xs や foobar など、他の任意の接頭部を選択して宣言および使用できることに注意してください。
この接頭部は、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>
この 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>
この 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>