1.15.1 XQueryデータモデル
XQueryデータモデルは,XQueryが処理対象とするXML文書を表現するためのモデルです。XQueryデータモデルは,木構造であり,ノードを持ちます。
ノードには,次に示すものがあります。また,各ノードが持つ情報をプロパティといいます。
-
文書ノード
-
要素ノード
-
属性ノード
-
処理命令ノード
-
コメントノード
-
テキストノード
ノード又は基本単位値をXQuery項目といいます。0個以上のXQuery項目の順序付けられた集まりを,XQueryシーケンスといいます。XQueryデータモデルで表現される値は,XQueryシーケンスとなります。
例として,XML文書をXQueryデータモデルで表現した木を次の図に示します。例となるXML文書に対応するXQueryシーケンスには,図中の点線内に示す文書ノードだけが含まれます。文書ノードはXML文書の内容を保持する子孫ノードを指すため,文書ノードだけでXML文書全体を扱うことができます。
<XML文書>
<書籍情報 書籍ID=”310494321”> <カテゴリ> プログラミング</カテゴリ> <タイトル> XML入門教科書</タイトル> <著者>中村弘子</著者> </書籍情報>
図「XQueryデータモデルの例」で示したXML文書に対する,’/書籍情報/child::element()’(「書籍情報」要素ノードの子である要素ノードを抽出します)というXQueryの問い合わせ結果は,次の図の点線内に示す,三つのノードから構成されるXQueryシーケンスとなります。
また,図「XQueryデータモデルの例」で示したXML文書に対する,’fn:data(/書籍情報/child::element()/text())’(「書籍情報」要素ノードの子である要素ノードが持つテキストノードの基本単位値を抽出します)というXQueryの問い合わせ結果は,次の図の点線内に示す,’プログラミング’,’XML入門教科書’,’中村弘子’という三つの基本単位値から構成されるXQueryシーケンスになります。
- 〈この項の構成〉
(1) ノード間の順序
ノードには順番が与えられています。この順序を文書順序といいます。文書順序は,各ノードに対応するXML要素やXML属性がXML文書で出現した順序と考えられます。文書順序の規則を次に示します。
-
すべてのノードは,自身の子孫ノードよりも前に出現します。
-
属性ノードは,関連づけられた要素ノードの直後に出現します。
-
兄弟の順序は,親ノードの子プロパティで出現する順序になります。
-
子孫ノードは,兄弟ノードよりも前に出現します。
図「XQueryデータモデルの例」の木のノードに与えられた文書順序を,次の図に示します。
(2) プロパティの種類
ノードが持つプロパティには,次の表に示すものがあります。
項番 |
プロパティ名 |
説明 |
---|---|---|
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 |
ノード名 |
○ |
○ |
||||
2 |
名前空間 |
○ |
|||||
3 |
親 |
○ |
○ |
○ |
○ |
○ |
|
4 |
子 |
○ |
○ |
||||
5 |
属性 |
○ |
|||||
6 |
型名 |
○ |
○ |
||||
7 |
文字列値 |
○ |
○ |
○ |
|||
8 |
型付き値 |
○ |
○ |
○ |
|||
9 |
nilled |
○ |
|||||
10 |
処理命令ターゲット |
○ |
|||||
11 |
内容 |
○ |
○ |
○ |
- (凡例)
-
○:プロパティを持ちます。
空白:プロパティを持ちません。
(3) ノードの詳細
XQueryデータモデルが持つ6種類のノードについて説明します。
(a) 文書ノード
文書ノードは,XML文書の情報を保持します。
-
プロパティ
文書ノードは,次のプロパティを持ちます。
プロパティ名
説明
子
文書ノードの子ノードのXQueryシーケンスです。
文字列値
子孫となるテキストノードの内容プロパティの値を文書順序順に連結した結果の値です。子孫となるテキストノードが存在しない場合は,長さ0の文字列となります。
型付き値
xs:untypedAtomic型で,値は文字列値プロパティの値となります。
-
制約
文書ノードは,次の制約に従います。
-
子ノードとなり得るノードは,要素ノード,処理命令ノード,コメントノード,テキストノードのどれかです。子ノードは,空となることがあります。属性ノード,文書ノードは,子ノードとなることができません。
-
ノードNが文書ノードDの子プロパティに含まれる場合,ノードNの親プロパティはノードDです。
-
ノードNが文書ノードDを親プロパティとして持つ場合,ノードNはノードDの子プロパティです。
-
(b) 要素ノード
要素ノードは,XML要素の情報を保持します。
-
プロパティ
要素ノードは,次のプロパティを持ちます。
プロパティ名
説明
ノード名
XML要素の修飾名を示します。
親
要素ノードの親ノードを示します。親ノードは,文書ノードか要素ノードのどちらかです。
型名
要素ノードのXQueryデータ型を示します。XMLスキーマによる検査が行われていない場合,又はXMLスキーマによる検査の結果,要素ノードの型名がHiRDBで提供しているXQueryデータ型に該当しない場合,型名プロパティの値は不定になります。
子
要素ノードの子ノードのXQueryシーケンスを示します。
属性
要素ノードが持つ属性ノードのXQueryシーケンスを示します。
名前空間
要素ノードが属するXML名前空間を示します。
nilled
要素ノードの内容が空であるかどうかを示します。内容が空であれば,子プロパティは,要素ノードもテキストノードも含みません。
文字列値
子孫であるテキストノードの内容プロパティの値を,文書順序順に連結した結果の値を示します。要素の内容が空の場合は,そのプロパティ値は長さ0の文字列となります。
型付き値
型名プロパティの値が不定の場合,xs:untypedAtomic型の実現値としての文字列値プロパティの値となります。XML要素が空の場合は,プロパティの値は空のXQueryシーケンスとなります。それ以外の場合は,型名プロパティの値のXQueryデータ型に従って,文字列値プロパティの値から得られる基本単位値のXQueryシーケンスとなります。
-
制約
要素ノードは,次の制約に従います。
-
子ノードとなり得るノードは,要素ノード,処理命令ノード,コメントノード,テキストノードのどれかです。子ノードは,空となることがあります。属性ノード,文書ノードは子ノードとなることができません。
-
同じ要素ノードを親プロパティに持つ属性ノードは,それぞれが異なるXML属性の修飾名を持たなければなりません。
-
ノードNが要素ノードEの子プロパティに含まれれば,ノードNの親プロパティはノードEです。
-
属性ノードでないノードNが要素ノードEを親プロパティとして持てば,ノードNはノードEの子プロパティに含まれます。
-
属性ノードAが要素ノードEの属性プロパティに含まれれば,ノードAの親プロパティはノードEです。
-
属性ノードAが要素ノードEを親プロパティとして持てば,ノードAはノードEの属性プロパティに含まれます。
-
要素ノードの型名プロパティが不定であれば,子孫である要素ノードの型名プロパティはすべて不定となり,属性ノードの型名プロパティはxs:untypedAtomic型となります。
-
要素ノードの型名プロパティが不定であれば,nilledプロパティは偽となります。
-
nilledプロパティが真であれば,子プロパティに,要素ノードとテキストノードを含みません。
-
要素ノードEのノード名プロパティが持つ修飾名に対して,ノードEが持つ属性ノードAのノード名プロパティは,ノードEのXML名前空間URIに関連づけられたXML名前空間接頭辞を持たなければなりません。
-
(c) 属性ノード
属性ノードは,XML属性の情報を保持します。
-
プロパティ
属性ノードは,次のプロパティを持ちます。
プロパティ名
説明
ノード名
XML属性の修飾名を示します。
親
属性ノードの親ノードを示します。親ノードは,XML属性が属する要素のノードです。
型名
属性ノードのXQueryデータ型名を示します。
文字列値
属性ノードが持つ値を示します。このプロパティが空となることはありません。
型付き値
型名がxs:untypedAtomicの場合,xs:untypedAtomic型の実現値としての文字列値プロパティの値となります。 それ以外の場合は,XMLスキーマで検査された結果として得られるXQueryデータ型に従って,文字列値プロパティから得られる基本単位値のXQueryシーケンスとなります。
-
制約
属性ノードは,次の制約に従います。
-
属性ノードAが要素ノードEの属性プロパティに含まれる場合,ノードAの親プロパティはノードEです。
-
属性ノードAが要素ノードEを親プロパティとして持つ場合,ノードAはノードEの属性プロパティに含まれます。
-
(d) 処理命令ノード
処理命令ノードは,XML処理命令の情報を保持します。
-
プロパティ
処理命令ノードは,次のプロパティを持ちます。
プロパティ名
説明
処理命令ターゲット
処理命令の対象となるアプリケーションを示します。
内容
処理命令の内容を示します。
親
処理命令ノードの親ノードを示します。
-
制約
処理命令ノードは,次の制約を満たします。
-
処理命令ターゲットは局所名です。
-
(e) コメントノード
コメントノードは,XMLコメントの情報を保持します。
-
プロパティ
コメントノードは,次のプロパティを持ちます。
プロパティ名
説明
内容
XMLコメントの内容を示します。
親
コメントノードの親ノードを示します。
(f) テキストノード
テキストノードは,XML要素の内容の情報を保持します。
-
プロパティ
テキストノードは,次のプロパティを持ちます。
プロパティ名
説明
内容
XML要素の内容の文字列を示します。
親
テキストノードの親ノードを示します。
-
制約
テキストノードは,次の制約に従います。
-
テキストノードが親ノードを持てば,内容プロパティの値が長さ0の文字列になることはありません。テキストノードが親ノードを持たない場合だけ,長さ0の文字列となることがあります。
-
(4) ノード間の親子関係
各ノード種別に対して,親ノード,子ノードとなり得るノード種別を,次の表に示します。
自ノードの種別 |
親ノードの種別 |
|||||
---|---|---|---|---|---|---|
文書ノード |
要素ノード |
属性ノード |
処理命令ノード |
コメントノード |
テキストノード |
|
文書ノード |
× |
× |
× |
× |
× |
× |
要素ノード |
○ |
○ |
× |
× |
× |
× |
属性ノード |
× |
○ |
× |
× |
× |
× |
処理命令ノード |
○ |
○ |
× |
× |
× |
× |
コメントノード |
○ |
○ |
× |
× |
× |
× |
テキストノード |
○ |
○ |
× |
× |
× |
× |
- (凡例)
-
○:親ノードとなることができます。
×:親ノードとなることができません。
表1‒47 各ノード種別に対して子ノードになりうるノード種別 自ノードの種別
子ノードの種別
文書ノード
要素ノード
属性ノード
処理命令ノード
コメントノード
テキストノード
文書ノード
×
○
×
○
○
○
要素ノード
×
○
×
○
○
○
属性ノード
×
×
×
×
×
×
処理命令ノード
×
×
×
×
×
×
コメントノード
×
×
×
×
×
×
テキストノード
×
×
×
×
×
×
- (凡例)
-
○:子ノードとなることができます。
×:子ノードとなることができません。