Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


1.15.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データモデルの例

[図データ]

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

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

[図データ]

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

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

[図データ]

〈この項の構成〉

(1) ノード間の順序

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

  1. すべてのノードは,自身の子孫ノードよりも前に出現します。

  2. 属性ノードは,関連づけられた要素ノードの直後に出現します。

  3. 兄弟の順序は,親ノードの子プロパティで出現する順序になります。

  4. 子孫ノードは,兄弟ノードよりも前に出現します。

図「XQueryデータモデルの例」の木のノードに与えられた文書順序を,次の図に示します。

図1‒15 文書順序の例

[図データ]

(2) プロパティの種類

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

表1‒44 プロパティの種類と内容

項番

プロパティ名

説明

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‒45 各ノードが持つプロパティ

項番

プロパティ名

文書ノード

要素ノード

属性ノード

処理命令ノード

コメントノード

テキストノード

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‒46 各ノード種別に対して親ノードになり得るノード種別

自ノードの種別

親ノードの種別

文書ノード

要素ノード

属性ノード

処理命令ノード

コメントノード

テキストノード

文書ノード

×

×

×

×

×

×

要素ノード

×

×

×

×

属性ノード

×

×

×

×

×

処理命令ノード

×

×

×

×

コメントノード

×

×

×

×

テキストノード

×

×

×

×

(凡例)

○:親ノードとなることができます。

×:親ノードとなることができません。

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

自ノードの種別

子ノードの種別

文書ノード

要素ノード

属性ノード

処理命令ノード

コメントノード

テキストノード

文書ノード

×

×

要素ノード

×

×

属性ノード

×

×

×

×

×

×

処理命令ノード

×

×

×

×

×

×

コメントノード

×

×

×

×

×

×

テキストノード

×

×

×

×

×

×

(凡例)

○:子ノードとなることができます。

×:子ノードとなることができません。