このセクションでは、XML ネームスペースの更新処理について説明します。また、InterSystems IRIS オブジェクトが XML ネームスペースに割り当てられる方法の概要も説明します。
ネームスペース更新処理
このドキュメントでは全般的に、読者が XML に精通していると想定しています。ただし、XML ドキュメントで要素や属性に割り当てられるネームスペースがある場合には、そのネームスペースを決定する方法を見直すことが重要な場合があります。
まず、XML ドキュメントが既定のネームスペースもしくはネームスペースの接頭語を、XML ドキュメントが持つあらゆる要素や属性に対して含まない限り、対応する XML スキーマの確認が必要です。インポートされた要素や属性を除いて、どの要素や属性も次の内のいずれかとなります。
定義する各要素や属性について、スキーマは、その項目が修飾されたものか、もしくは無修飾のものかを示します。スキーマはこれを以下の組み合わせにより行います。
-
<schema> 要素は elementFormDefault および attributeFormDefault 属性を指定できます。これにより、スキーマの任意の要素および属性の既定ネームスペース割り当てを制御します。指定できる値は "qualified" および "unqualified" になります。
これらの属性はオプションです。既定値は両項目とも "unqualified" です。つまり、既定では要素もしくは属性が接頭語なしで使用される場合、それはネームスペースにはないことになります。
-
次に、要素もしくは属性の定義で form 属性の指定ができます。これはその項目をどのようにネームスペースに割り当てるかを示すものです。指定できる値は "qualified" および "unqualified" になります。
以下の XML ドキュメントについて考えてみます。
<?xml version="1.0" encoding="UTF-8"?>
<ClassA xmlns="mynamespace" xmlns:s01="mynamespace" s01:String1="abcdef">
<s01:ClassB xmlns="">
<String3>qrstuv</String3>
<String4>wxyz</String4>
</s01:ClassB>
<String2>ghijkl</String2>
</ClassA>
ここでは、わかりやすくするために、対応するスキーマ・ドキュメントが elementFormDefault および attributeFormDefault の既定値を使用し、form 属性は定義するどの項目に対しても指定しないことを想定しています。さらに、このドキュメントの項目は、以下のようにネームスペースにあります。
-
以下の 2 つの項目により、<ClassA> 要素は mynamespace にあります。
-
String1 属性は mynamespace にあります。この属性では s01 接頭語を使用しているからです。xmlns:s01 ネームスペース宣言は、s01 で mynamespace ネームスペースを参照することを示しています。
スキーマは attributeFormDefault ("unqualified") を既定で使用しているので、String1 属性はネームスペースの接頭語を使用しなくても、mynamespace にあることになります。
-
<ClassB> 要素は mynamespace にあります。この属性では s01 接頭語を使用しているからです。
-
以下の 2 つの項目により、<String3> 要素と <String4> 要素は、いずれのネームスペースにもありません。
-
<String2> 要素は mynamespace ネームスペースになります。これが、その親要素で指定された既定のネームスペースだからです。
ネームスペースとコンテキスト
特にネームスペースでは、XML 対応オブジェクトがコンテキストに応じて処理が異なることに注意することが重要です。例えば、Address オブジェクトを最上位レベルでエクスポートすると、そのオブジェクトはグローバル要素となります。Address オブジェクトへの参照を含む Person オブジェクトをエクスポートすると、Address はローカル要素 (Person のその他すべてのプロパティとして) となります。グローバル要素とローカル要素は異なる方法でネームスペースに割り当てられます。