XQueryの問合せを処理できるようにするためには、式の入力となるXMLデータをXDMインスタンスとして表現しなければいけません。XDMインスタンスとは、XMLデータをXQueryで処理できる形に変換した値のことです。XMLデータからXDMインスタンスへの変換処理は、XMLパーザなどで行われ、XQueryを実行する前に終了します。
値を表すXDMインスタンスは常にシーケンスです。シーケンスとは、0個以上の項目が順序付けされたコレクションです。項目とは、原子値またはノードです。原子値とノードについては“12.1.2.2 原子値”および“12.1.2.3 ノード”を参照してください。
シーケンスの例を以下に示します。
(10,1,2,3,4)
この例は、5つの原子値をもつシーケンスです。
/employees/employee
この例は、2つのノードをもつシーケンスです。
128
この例は、1つの原子値をもつシーケンスです。
()
この例は、空シーケンスです。
1つの項目しか含まないシーケンスを単一値シーケンスといいます。項目は、その項目を含む単一値シーケンスと同じ意味です。項目を1つも含まないシーケンスを空シーケンスといいます。
シーケンスが入れ子になることはありません。例えば、以下の3つのシーケンスを結合して1つのシーケンスにすると、結果はシーケンス(1, 2, 3)となります。シーケンス(1, (2, 3), () )のような入れ子構造にはなりません。
1
(2,3)
()
原子値とは、XQueryで定義された組込み原子型の値です。Symfowareでは、組込み原子型として文字列型(xs:string)、数値型(xs:double)、日付型(xs:date)、時間型(xs:time)、日時型(xs:dateTime)、ブール値型(xs:boolean)、型なし型(xs:untypedAtomic)の7種類を提供します。これらの型の定義は、XML-Schemaの規約に準拠しています。以下に原子値の例を示します。
"This is an old pen."
この例は、xs:string型の原子値です。
1024
この例は、xs:double型の原子値です。
xs:date("2007-06-13")
この例は、xs:string型の原子値をキャストして、xs:date型の原子値を生成しています。
xs:time("13:08:15")
この例は、xs:string型の原子値をキャストして、xs:time型の原子値を生成しています。
xs:dateTime("2007-06-13T13:08:15")
この例は、xs:string型の原子値をキャストして、xs:dateTime型の原子値を生成しています。
fn:true()
この例は、ブール値関数fn:true()を利用して、xs:boolean型の原子値を生成しています。
xs:untypedAtomic("12AB")
この例は、xs:string型の原子値をキャストして、xs:untypedAtomic型の原子値を生成しています。
ノードとは、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種類があります。各ノードの概要を以下に示します。
ノードの種類 | 概要 | 親ノード | 子ノード |
---|---|---|---|
ドキュメントノード | XMLデータのルートノードを表します。XMLデータ内のルート要素(上記例では“books”)のさらに上位に位置する仮想的なノードのことです。 | なし |
|
エレメントノード | XMLデータの要素を表します。要素名をノードの名前として持ちます。 |
|
|
属性ノード | XMLデータの属性を表します。属性名をノードの名前として持ち、対応する属性値を保持します。 |
| なし |
テキストノード | XMLデータの要素の内容を表します。 |
| なし |
コメントノード | XMLデータのコメントを表します。 |
| なし |
処理命令ノード | XMLデータの処理命令を表します。 |
| なし |
ネームスペースノード | XMLデータのネームスペースを表します。ネームスペースURIとネームスペース接頭辞またはデフォルトネームスペースとの対応関係を示します。 |
| なし |
ノード使用例
XQueryで用いられるノードの記述例とその実行結果を以下に示します。
/books/book[@id="01"]/price
この例は、パス式を利用して、ルートノードの子エレメントノードがbooksであり、その子エレメントノードがbookであり、その子属性ノードidの属性値が“01”に等しい場合の、bookの子エレメントノードpriceの内容“1100”を返します。
XQueryでは、データベースに格納されたXMLデータをコンテキストアイテムの初期値に設定することができます。
参照
設定方法の詳細は、“XQueryリファレンス”の“動的コンテキスト”を参照してください。
入力データがコンテキストアイテムの初期値に設定された場合、XQueryはコンテキストアイテム式、または'/'から始まるパス式によってそのデータにアクセスすることができます。
注意
コンテキストアイテムの初期値が設定されていない場合、コンテキストアイテム式、または'/'から始まるパス式を指定したXQueryを実行するとエラーになります。