スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

1.16.1 XQueryデータモデル

XQueryデータモデルは,XQueryが処理対象とするXML文書を表現するためのモデルです。XQueryデータモデルは,木構造であり,ノードを持ちます。

ノードには,次に示すものがあります。また,各ノードが持つ情報をプロパティといいます。

ノード又は基本単位値をXQuery項目といいます。0個以上のXQuery項目の順序付けられた集まりを,XQueryシーケンスといいます。XQueryデータモデルで表現される値は,XQueryシーケンスとなります。

例として,XML文書をXQueryデータモデルで表現した木を次の図に示します。例となるXML文書に対応するXQueryシーケンスには,図中の点線内に示す文書ノードだけが含まれます。文書ノードはXML文書の内容を保持する子孫ノードを指すため,文書ノードだけでXML文書全体を扱うことができます。

<XML文書>

<書籍情報 書籍ID="310494321">
  <カテゴリ> プログラミング</カテゴリ>
  <タイトル> XML入門教科書</タイトル>
  <著者>中村弘子</著者>
</書籍情報>

図1-12 XQueryデータモデルの例

[図データ]

図1-12で示したXML文書に対する,’/書籍情報/child::element()’(「書籍情報」要素ノードの子である要素ノードを抽出します)というXQueryの問い合わせ結果は,次の図の点線内に示す,三つのノードから構成されるXQueryシーケンスとなります。

図1-13 ノードから構成されるXQueryシーケンスの例

[図データ]

また,図1-12で示したXML文書に対する,'fn:data(/書籍情報/child::element()/text())'(「書籍情報」要素ノードの子である要素ノードが持つテキストノードの基本単位値を抽出します)というXQueryの問い合わせ結果は,次の図の点線内に示す,'プログラミング','XML入門教科書','中村弘子'という三つの基本単位値から構成されるXQueryシーケンスになります。

図1-14 基本単位値から構成されるXQueryシーケンスの例

[図データ]

<この項の構成>
(1) ノード間の順序
(2) プロパティの種類
(3) ノードの詳細
(4) ノード間の親子関係

(1) ノード間の順序

ノードには順番が与えられています。この順序を文書順序といいます。文書順序は,各ノードに対応するXML要素やXML属性がXML文書で出現した順序と考えられます。文書順序の規則を次に示します。

  1. すべてのノードは,自身の子孫ノードよりも前に出現します。
  2. 属性ノードは,関連付けられた要素ノードの直後に出現します。
  3. 兄弟の順序は,親ノードの子プロパティで出現する順序になります。
  4. 子孫ノードは,兄弟ノードよりも前に出現します。

図1-12の木のノードに与えられた文書順序を,次の図に示します。

図1-15 文書順序の例

[図データ]

(2) プロパティの種類

ノードが持つプロパティには,次の表に示すものがあります。

表1-46 プロパティの種類と内容

項番 プロパティ名 説明
1 ノード名 XML要素,XML属性の修飾名です。
2 名前空間 ノードが属するXML名前空間です。
3 親ノードです。
4 子ノードのXQueryシーケンスです。
5 属性 属性ノードのXQueryシーケンスです。
6 型名 XML要素やXML属性が持つXQueryデータ型の修飾名です。
7 文字列値 ノードの内容として指定されたテキストが示す文字列のxs:string型の値です。fn:string関数で参照できます。
8 型付き値 文字列値プロパティから得られるXQueryデータ型の値です。fn:data関数で参照できます。
9 nilled XML要素の内容が空であるかどうかを示すプロパティです。内容が空であれば,子プロパティは,要素ノードもテキストノードも含みません。
10 処理命令ターゲット XML処理命令の対象となるアプリケーションです。
11 内容 XMLコメントの内容,XML要素の内容,XML処理命令の内容です。

ノードが持つプロパティの種類は,ノードの種類によって異なります。各ノードが持つプロパティを次の表に示します。各ノードが持つプロパティの内容については,「1.16.1(3) ノードの詳細」を参照してください。

表1-47 各ノードが持つプロパティ

項番 プロパティ名 文書ノード 要素ノード 属性ノード 処理命令ノード コメントノード テキストノード
1 ノード名        
2 名前空間          
3  
4        
5 属性          
6 型名        
7 文字列値      
8 型付き値      
9 nilled          
10 処理命令ターゲット          
11 内容      

(凡例)
○:プロパティを持ちます。
空白:プロパティを持ちません。

(3) ノードの詳細

XQueryデータモデルが持つ6種類のノードについて説明します。

(a) 文書ノード

文書ノードは,XML文書の情報を保持します。

●プロパティ

文書ノードは,次のプロパティを持ちます。

プロパティ名 説明
文書ノードの子ノードのXQueryシーケンスです。
文字列値 子孫となるテキストノードの内容プロパティの値を文書順序順に連結した結果の値です。子孫となるテキストノードが存在しない場合は,長さ0の文字列となります。
型付き値 xs:untypedAtomic型で,値は文字列値プロパティの値となります。
●制約

文書ノードは,次の制約に従います。

  1. 子ノードとなり得るノードは,要素ノード,処理命令ノード,コメントノード,テキストノードのどれかです。子ノードは,空となることがあります。属性ノード,文書ノードは,子ノードとなることができません。
  2. ノードNが文書ノードDの子プロパティに含まれる場合,ノードNの親プロパティはノードDです。
  3. ノードNが文書ノードDを親プロパティとして持つ場合,ノードNはノードDの子プロパティです。
(b) 要素ノード

要素ノードは,XML要素の情報を保持します。

●プロパティ

要素ノードは,次のプロパティを持ちます。

プロパティ名 説明
ノード名 XML要素の修飾名を示します。
要素ノードの親ノードを示します。親ノードは,文書ノードか要素ノードのどちらかです。
型名 要素ノードのXQueryデータ型を示します。XMLスキーマによる検査が行われていない場合,又はXMLスキーマによる検査の結果,要素ノードの型名がHiRDBで提供しているXQueryデータ型に該当しない場合,型名プロパティの値は不定になります。
要素ノードの子ノードのXQueryシーケンスを示します。
属性 要素ノードが持つ属性ノードのXQueryシーケンスを示します。
名前空間 要素ノードが属するXML名前空間を示します。
nilled 要素ノードの内容が空であるかどうかを示します。内容が空であれば,子プロパティは,要素ノードもテキストノードも含みません。
文字列値 子孫であるテキストノードの内容プロパティの値を,文書順序順に連結した結果の値を示します。要素の内容が空の場合は,そのプロパティ値は長さ0の文字列となります。
型付き値 型名プロパティの値が不定の場合,xs:untypedAtomic型の実現値としての文字列値プロパティの値となります。XML要素が空の場合は,プロパティの値は空のXQueryシーケンスとなります。それ以外の場合は,型名プロパティの値のXQueryデータ型に従って,文字列値プロパティの値から得られる基本単位値のXQueryシーケンスとなります。
●制約

要素ノードは,次の制約に従います。

  1. 子ノードとなり得るノードは,要素ノード,処理命令ノード,コメントノード,テキストノードのどれかです。子ノードは,空となることがあります。属性ノード,文書ノードは子ノードとなることができません。
  2. 同じ要素ノードを親プロパティに持つ属性ノードは,それぞれが異なるXML属性の修飾名を持たなければなりません。
  3. ノードNが要素ノードEの子プロパティに含まれれば,ノードNの親プロパティはノードEです。
  4. 属性ノードでないノードNが要素ノードEを親プロパティとして持てば,ノードNはノードEの子プロパティに含まれます。
  5. 属性ノードAが要素ノードEの属性プロパティに含まれれば,ノードAの親プロパティはノードEです。
  6. 属性ノードAが要素ノードEを親プロパティとして持てば,ノードAはノードEの属性プロパティに含まれます。
  7. 要素ノードの型名プロパティが不定であれば,子孫である要素ノードの型名プロパティはすべて不定となり,属性ノードの型名プロパティはxs:untypedAtomic型となります。
  8. 要素ノードの型名プロパティが不定であれば,nilledプロパティは偽となります。
  9. nilledプロパティが真であれば,子プロパティに,要素ノードとテキストノードを含みません。
  10. 要素ノードEのノード名プロパティが持つ修飾名に対して,ノードEが持つ属性ノードAのノード名プロパティは,ノードEのXML名前空間URIに関連付けられたXML名前空間接頭辞を持たなければなりません。
(c) 属性ノード

属性ノードは,XML属性の情報を保持します。

●プロパティ

属性ノードは,次のプロパティを持ちます。

プロパティ名 説明
ノード名 XML属性の修飾名を示します。
属性ノードの親ノードを示します。親ノードは,XML属性が属する要素のノードです。
型名 属性ノードのXQueryデータ型名を示します。
文字列値 属性ノードが持つ値を示します。このプロパティが空となることはありません。
型付き値 型名がxs:untypedAtomicの場合,xs:untypedAtomic型の実現値としての文字列値プロパティの値となります。 それ以外の場合は,XMLスキーマで検査された結果として得られるXQueryデータ型に従って,文字列値プロパティから得られる基本単位値のXQueryシーケンスとなります。
●制約

属性ノードは,次の制約に従います。

  1. 属性ノードAが要素ノードEの属性プロパティに含まれる場合,ノードAの親プロパティはノードEです。
  2. 属性ノードAが要素ノードEを親プロパティとして持つ場合,ノードAはノードEの属性プロパティに含まれます。
(d) 処理命令ノード

処理命令ノードは,XML処理命令の情報を保持します。

●プロパティ

処理命令ノードは,次のプロパティを持ちます。

プロパティ名 説明
処理命令ターゲット 処理命令の対象となるアプリケーションを示します。
内容 処理命令の内容を示します。
処理命令ノードの親ノードを示します。
●制約

処理命令ノードは,次の制約を満たします。

  1. 処理命令ターゲットは局所名です。
(e) コメントノード

コメントノードは,XMLコメントの情報を保持します。

●プロパティ

コメントノードは,次のプロパティを持ちます。

プロパティ名 説明
内容 XMLコメントの内容を示します。
コメントノードの親ノードを示します。
(f) テキストノード

テキストノードは,XML要素の内容の情報を保持します。

●プロパティ

テキストノードは,次のプロパティを持ちます。

プロパティ名 説明
内容 XML要素の内容の文字列を示します。
テキストノードの親ノードを示します。
●制約

テキストノードは,次の制約に従います。

  1. テキストノードが親ノードを持てば,内容プロパティの値が長さ0の文字列になることはありません。テキストノードが親ノードを持たない場合だけ,長さ0の文字列となることがあります。

(4) ノード間の親子関係

各ノード種別に対して,親ノード,子ノードとなり得るノード種別を,次の表に示します。

表1-48 各ノード種別に対して親ノードになり得るノード種別

自ノードの種別 親ノードの種別
文書ノード 要素ノード 属性ノード 処理命令ノード コメントノード テキストノード
文書ノード × × × × × ×
要素ノード × × × ×
属性ノード × × × × ×
処理命令ノード × × × ×
コメントノード × × × ×
テキストノード × × × ×

(凡例)
○:親ノードとなることができます。
×:親ノードとなることができません。

表1-49 各ノード種別に対して子ノードになりうるノード種別

自ノードの種別 子ノードの種別
文書ノード 要素ノード 属性ノード 処理命令ノード コメントノード テキストノード
文書ノード × ×
要素ノード × ×
属性ノード × × × × × ×
処理命令ノード × × × × × ×
コメントノード × × × × × ×
テキストノード × × × × × ×

(凡例)
○:子ノードとなることができます。
×:子ノードとなることができません。