XQuery および XQSE 開発者ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容

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

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

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

 


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 属性を使用して宣言されています。この場合には、ターゲット ネームスペースは以下のとおりです。

http://temp.openuri.org/SampleApp/CustOrder.xsd

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

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

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

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

スキーマの 4 行目では、XML の標準のスキーマ URI に xsd プレフィックスをバインドします。スキーマの 5 行目には、URI を bea プレフィックスに関連付けるネームスペースの宣言が含まれます。スキーマ内には任意の数の宣言を指定できます。

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

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

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

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

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

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


  ページの先頭       前  次