XQuery 開発者ガイド

     prev  next    contents     
Content starts here

XML ネームスペースについて

XML ネームスペースは、XML ドキュメントの結合時または XML 要素の参照時に、名前の競合 (またはあいまいさ) が存在しないようにするためのメカニズムです。 BEA AquaLogic Data Services Platform は、XML ネームスペースを完全にサポートし、WebLogic Workshop で生成されるクエリにネームスペースを組み込みます。

この節の内容は以下のとおりです。

 


XML ネームスペースの概要

ネームスペースは、XML ドキュメントで使用する名前を一意に区別するためのメカニズムを提供します。XML ネームスペースは、文字列とコロンの組み合わせとしてクエリに現れます。W3C は、特定のネームスペースのプレフィックスを使用して W3C XQuery のデータ型と関数を識別します。さらに BEA では、BEA が提供する関数とデータ型を一意に識別するために、fn-bea: ネームスペースを定義しています。

表 4-1 は、XQuery AquaLogic Data Services Platform クエリで使用される定義済み XQuery ネームスペースの一覧です。

表 4-1 XQuery での定義済みネームスペース 
ネームスペース プレフィックス
説明
fn
XQuery 関数のプレフィックス
fn:data()
fn:sum()
fn:substring()
fn-bea:
標準 XQuery 関数に対する AquaLogic Data Services Platform 固有の拡張機能のプレフィックス
fn-bea:rename()
fn-bea:is-access-allowed()
xs
XML スキーマ タイプのプレフィックス
xs:string

たとえば、xs:integer データ型は XML ネームスペース xs を使用します。実際には、xs はネームスペース URI のエリアス (プレフィックス) です。

XML ネームスペースは、異種の XML ドキュメントからデータを結合するときに名前の競合が発生しないようにします。たとえば、自動車メーカーに関連するドキュメントに <tires> 要素があるとします。また、自転車タイヤ メーカーに関連する同じようなドキュメントにも <tires> 要素があるとします。この場合、これらの要素を結合するのは不適切であることは明らかです。XML ネームスペースは、要素を <automobile:tires> および <bicycle:tires> とすることでこうした名前の競合を簡単に回避します。

XML スキーマ ネームスペースの例

XML スキーマでは、ネームスペース (ターゲット ネームスペースを含む) はスキーマ タグで宣言されます。次は、メタデータのインポート時に作成されたスキーマを使用する例です。

<xsd:schema targetNamespace="http://temp.openuri.org/SampleApp/CustOrder.xsd" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:bea="http://www.bea.com/public/schemas"
elementFormDefault="unqualified" attributeFormDefault="unqualified">
...

2 行目に、ターゲット ネームスペースが targetNamespace 属性を使用して宣言されています。この場合、ターゲット ネームスペースは 4 行目で宣言されているネームスペースにバインドされます。つまり、このドキュメントで宣言されるすべての要素と属性は下記に属します。

http://www.bea.com/public/schemas

スキーマの 3 行目にはデフォルト ネームスペースが含まれています。これは、明示的なプレフィックスを持たない要素すべてのネームスペースです。

たとえば、スキーマ ドキュメントに次の要素があるとします。

<element name="appliance" type="string"/>

element 要素は、string のようなプレフィックスがない型と同様、デフォルト ネームスペースに属しています。

スキーマの 5 行目には、ネームスペース宣言 (bea) が含まれています。これは、単なる URI とプレフィックスの関連付けです。スキーマ内には任意の数の宣言を指定できます。

このスキーマ ドキュメントで宣言される型の参照にはプレフィックスを付ける必要があります。次に例を示します。

<complexType name="AddressType">
<sequence>
<element name="street_address" type="string"/>

...

</sequence>
</complexType>

<element name="address" type="bea:AddressType"/>

スキーマを作成するときには、elementFormDefault="unqualified" および attributeFormDefault="unqualified" を指定することをお勧めします。これにより、要素ごとに明示的にマップする必要なく、複雑な要素の名前を 1 つ変更することで、ネームスペースの名前を変更できます。

 


AquaLogic Data Services Platform クエリおよびスキーマでの XML ネームスペースの使用

AquaLogic Data Services Platform (AquaLogic Data Services Platform) は、クエリの生成時にネームスペース宣言を自動的に生成します。Liquid Data は、ns0、ns1、ns2 などのラベルを使用したシンプルなスキームを採用しています。割り当てたネームスペース名は簡単に変更できますが、その特定のネームスペースの使用個所すべてが必ず変更されるように注意を払う必要があります。

戻り値の型を作成すると、その型はデフォルトで qualified となります。つまり、複雑な要素のネームスペースがスキーマに含まれるということです。

図 4-2 非修飾属性および要素を持つスキーマ

非修飾属性および要素を持つスキーマ

この要素と属性を修飾する場合、WebLogic Workshop の外部でエディタを使用してスキーマを修正し、attributeFormDefaultelementFormDefault の一方または両方を qualified に設定する必要があります。


  back to top       previous  next