ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(共通編)

12.1.2 XQueryのデータモデル

XQueryの問合せを処理できるようにするためには、式の入力となるXMLデータをXDMインスタンスとして表現しなければいけません。XDMインスタンスとは、XMLデータをXQueryで処理できる形に変換した値のことです。XMLデータからXDMインスタンスへの変換処理は、XMLパーザなどで行われ、XQueryを実行する前に終了します。

12.1.2.1 シーケンスおよび項目

値を表すXDMインスタンスは常にシーケンスです。シーケンスとは、0個以上の項目が順序付けされたコレクションです。項目とは、原子値またはノードです。原子値とノードについては“12.1.2.2 原子値”および“12.1.2.3 ノード”を参照してください。

シーケンスの例を以下に示します。

1つの項目しか含まないシーケンスを単一値シーケンスといいます。項目は、その項目を含む単一値シーケンスと同じ意味です。項目を1つも含まないシーケンスを空シーケンスといいます。

シーケンスが入れ子になることはありません。例えば、以下の3つのシーケンスを結合して1つのシーケンスにすると、結果はシーケンス(1, 2, 3)となります。シーケンス(1, (2, 3), () )のような入れ子構造にはなりません。

1

(2,3)

()

12.1.2.2 原子値

原子値とは、XQueryで定義された組込み原子型の値です。Symfowareでは、組込み原子型として文字列型(xs:string)、数値型(xs:double)、日付型(xs:date)、時間型(xs:time)、日時型(xs:dateTime)、ブール値型(xs:boolean)、型なし型(xs:untypedAtomic)の7種類を提供します。これらの型の定義は、XML-Schemaの規約に準拠しています。以下に原子値の例を示します。

12.1.2.3 ノード

ノードとは、XMLデータを構成する要素や属性を表す単位です。XMLデータは、単一のルートノードを頂点とする木構造で表現することができます。XMLデータの例とそのXMLデータを表現する木構造を以下に示します。

木構造の例

[XMLデータ]

BooksInfo.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
  <book id="01">
     <title>Car magazine</title>
     <author>Suzuki Taro</author>
     <price>1100</price>
  </book>
  <book id="02">
     <title>Mystery Novel</title>
     <author>Tanaka Yuichi</author>
     <price>780</price>
  </book>
</books>

[XMLデータを表現する木構造]

ノードの種類

ノードには、ドキュメントノード、エレメントノード、属性ノード、テキストノード、コメントノード、処理命令ノード、ネームスペースノードの7種類があります。各ノードの概要を以下に示します。

表12.1 XMLデータを構成するノード

ノードの種類

概要

親ノード

子ノード

ドキュメントノード

XMLデータのルートノードを表します。XMLデータ内のルート要素(上記例では“books”)のさらに上位に位置する仮想的なノードのことです。

なし

  • エレメントノード

  • テキストノード

  • コメントノード

  • 処理命令ノード

エレメントノード

XMLデータの要素を表します。要素名をノードの名前として持ちます。

  • ドキュメントノード

  • エレメントノード

  • エレメントノード

  • 属性ノード

  • テキストノード

  • コメントノード

  • 処理命令ノード

属性ノード

XMLデータの属性を表します。属性名をノードの名前として持ち、対応する属性値を保持します。

  • エレメントノード

なし

テキストノード

XMLデータの要素の内容を表します。

  • ドキュメントノード

  • エレメントノード

なし

コメントノード

XMLデータのコメントを表します。

  • ドキュメントノード

  • エレメントノード

なし

処理命令ノード

XMLデータの処理命令を表します。

  • ドキュメントノード

  • エレメントノード

なし

ネームスペースノード

XMLデータのネームスペースを表します。ネームスペースURIとネームスペース接頭辞またはデフォルトネームスペースとの対応関係を示します。

  • エレメントノード

なし

ノード使用例

XQueryで用いられるノードの記述例とその実行結果を以下に示します。

/books/book[@id="01"]/price

この例は、パス式を利用して、ルートノードの子エレメントノードがbooksであり、その子エレメントノードがbookであり、その子属性ノードidの属性値が“01”に等しい場合の、bookの子エレメントノードpriceの内容“1100”を返します。

12.1.2.4 データ入力源

XQueryでは、データベースに格納されたXMLデータをコンテキストアイテムの初期値に設定することができます。

参照

設定方法の詳細は、“XQueryリファレンス”の“動的コンテキスト”を参照してください。

入力データがコンテキストアイテムの初期値に設定された場合、XQueryはコンテキストアイテム式、または'/'から始まるパス式によってそのデータにアクセスすることができます。

注意

コンテキストアイテムの初期値が設定されていない場合、コンテキストアイテム式、または'/'から始まるパス式を指定したXQueryを実行するとエラーになります。