xmlデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › h19xml ›...

148
平成19年度文部科学省委託 専修学校教育重点支援プラン 顧客ニーズに的確に応える豊かな選択肢を持つ 「気が利くデータベースエンジニア」を育成するための XML データベース教育教材の開発 教材開発委員会 XMLデータベース技術者 育成教材

Upload: others

Post on 05-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

平成19年度文部科学省委託

専修学校教育重点支援プラン

顧客ニーズに的確に応える豊かな選択肢を持つ

「気が利くデータベースエンジニア」を育成するための

XML データベース教育教材の開発 教材開発委員会

XMLデータベース技術者

育成教材

Page 2: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

はじめに

はじめに インターネットの普及に伴う FTTH など通信回線の高速化や、サーバ・端末パソコンの

高性能化などにより、従来は不可能だった処理が当たり前のようにできるようになってき

ています。ネットワークを経由して動画を鑑賞することなど、実際には使い物にならなか

ったようなことも、当然のように使いこなしています。 それに伴いコンピュータシステム開発の方法も大きく変わりつつあります。従来の SQL

データベースはフィールド定義でデータの項目名・属性・長さなどを定義し、入力された

データを圧縮し保存していくものでした。しかし近年、 終消費者の趣味趣向が多様化す

るにつれて、データ項目を追加しなければないことが発生するようになりました。そこで

XML の記法を取り入れた「XML データベース」が登場しました。XML の持つ「ツリー構

造」という概念の基、データにタグを付けてテキスト形式で保存します。XPath 式を応用

して、必要なデータを探してくる事も出来ますので、SQL と同様な機能が実現できます。

また、保存形式がテキスト形式ですから、別のデータベースに移行しても問題なく稼働し

ます。ハードディスク等も大容量になっていますし、処理速度も速くなっていますので従

来壁となっていた問題も解決しています。何よりもデータ項目が自由に追加できるのが

大のメリットです。このように、データの発生状況などによりデータベースのシステムを

選んでシステム設計をすることができるようになりました。しかし、それを使いこなすエ

ンジニアの数は不足しています。同時に SQL データベース・XML などの基礎知識を持ち、

新たに XML データベースを学ぼうとする初級プログラマや学生が、技術を習得できるよう

な実践的教材が不足しているのです。 そこで、本教材では、XML の利点を活用し、しかも身近なシステムである「CD 製作会

社の学生向けマーケティング調査システム」をテーマにし、実際にクエリを実行しながら、

わかりやすく XML データベースを利用していただく内容としました。XML データベース

の構造を解説するだけでなく、実際にそれらを利用するために使われているクエリの記述

方法まで詳細に解説しています。 是非、 後までシステムを完成させ、真の XML データベースの利用価値をご理解いただき、

システム開発技術者としての技術を習得していただければ幸いです。 なお、本教材は「XML 及び XML 関連技術(XML Schema、XPath)の基礎知識」「RDB の

基礎知識」「HTML の基礎知識」を前提としております 平成20年2月 平成 19 年度 文部科学省委託事業 専修学校教育重点支援プラン 「気が利くデータベースエンジニア」育成のための XML データベース教育教材の開発 教材開発委員会

Page 3: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

目次

目 次 第1章 概要 ........................................................................................................................1 1.1 課題の全体説明...................................................................................................1 1.1.1 CD 製作会社のマーケティング調査.........................................................1

図 1.1.1-1 想定システムの概要図 ............................................................................1 図 1.1.1-2 実習での環境 ..........................................................................................2 図 1.1.1-3 課題全体の流れ.......................................................................................3 図 1.1.1-4 課題1での実習イメージ ........................................................................4 図 1.1.1-5 課題2での実習イメージ ........................................................................5 図 1.1.1-6 課題3での実習イメージ ........................................................................6 図 1.1.1-7 課題4での実習イメージ ........................................................................7 図 1.1.1-8 課題5での実習イメージ ........................................................................8

1.1.2 実習に必要な環境 ....................................................................................9 第2章 CD アルバムデータ XML 文書の作成 ..................................................................10

2.1 課題の概要 ........................................................................................................10 リスト 2.1-1 CD アルバムデータ XML 文書のサンプル...........................................10

2.2 CD アルバムデータ XML 文書の構造............................................................... 11 リスト 2.2-1 CD アルバムデータ XML のスキーマ条件........................................... 11 図 2.2-1 CD アルバムデータ XML 文書のツリー構造 ..............................................12 リスト 2.2-2 CDAlbumData.xsd ..............................................................................13 リスト 2.2-3 CDAlbumData.xml .............................................................................14

2.3 課題の実習について..........................................................................................15 図 2.3-1 課題の実習箇所 ...........................................................................................15

課題1 CD アルバムデータ XML 文書の作成...............................................................16 参考1 XML データの検証について .........................................................................17

図 参考 1-1 検証ツール .........................................................................................18 図 参考 1-2 ファイル選択ダイアログボックス .....................................................19

第3章 XML データベースへの登録 ................................................................................20 3.1 課題の概要 ........................................................................................................20 図 3.1-1 CD アルバムデータ XML 文書の登録イメージ...........................................20

3.2 XML データベースとは ....................................................................................21 図 3.2-1 XML データベースの概要図 .......................................................................21 図 3.2-2 XML データベースの種類 ...........................................................................22

3.3 課題の実習について..........................................................................................23 図 3.3-1 課題の実習箇所 ...........................................................................................23

Page 4: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

目次

3.4 XML データベースへの登録 .............................................................................24 課題2 CD アルバムデータ XML 文書の登録 ...........................................................25

図 課題 2-1 管理ツールの起動 ..............................................................................25 図 課題 2-2 管理ツール起動後の画面 ...................................................................26 図 課題 2-3 データベースへの接続 .......................................................................26 図 課題 2-4 データベース接続後の画面イメージ..................................................27 図 課題 2-5 登録時のデータ格納方式の選択メニュー ..........................................28 図 課題 2-6 CD アルバムデータ XML 文書の登録後のイメージ ..........................28

第4章 CD アルバムデータの検索 ...................................................................................29 4.1 課題の概要 ........................................................................................................29 図 4.1-1 CD アルバムデータ XML 文書の検索イメージ...........................................29

4.2 XQuery とは .....................................................................................................30 図 4.2-1 XQuery の概要 ............................................................................................30

4.3 FLWOR 式 ........................................................................................................31 図 4.3-1 FLWOR 式の構文図 ...................................................................................31 リスト 4.3-1 XML 文書.............................................................................................32 リスト 4.3-2 クエリー式 ...........................................................................................32 リスト 4.3-3 検索結果 ...............................................................................................32 4.3.1 for 節 ......................................................................................................34

図 4.3.1-1 for 節の構文図......................................................................................34 4.3.2 let 節 ......................................................................................................36

図 4.3.2-1 let 節の構文図......................................................................................36 4.3.3 where 節 ................................................................................................38

図 4.3.3-1 where 節の構文図 ................................................................................38 4.3.4 order by 節 .............................................................................................40 図 4.3.4-1 order by 節の構文図 ............................................................................40 リスト 4.3.4-1 XML 文書 ......................................................................................41 リスト 4.3.4-2 クエリー式.....................................................................................41 リスト 4.3.4-3 検索結果 ........................................................................................41 参考2 order by 節の実装について .......................................................................42

4.3.5 return 節 ................................................................................................43 図 4.3.5-1 return 節の構文図 ...............................................................................43

4.4 課題の実習について..........................................................................................44 図 4.4-1 課題の実習箇所 ...........................................................................................44

課題3 CD アルバムデータの検索................................................................................45 図 課題 3-1 クエリーダイアログの表示 ...................................................................45

Page 5: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

目次

図 課題 3-2 クエリーダイアログ ..............................................................................46 課題3.1 アルバム名とアーティスト名を検索する...............................................47

課題3.1-1 アルバム名を検索する.................................................................47 リスト 課題 3.1-1 検索結果イメージ ................................................................47 参考3 検索結果の確認について........................................................................51 図 参考 3-1 クエリーの実行結果確認画面 .....................................................51 図 参考 3-2 表示画面の切り替え(IE で表示).............................................52 図 参考 3-3 表示画面の切り替え(ツリーで表示) .......................................52

課題3.1-2 アーティスト名を検索する .........................................................53 リスト 課題 3.1-2-1 検索結果イメージ .............................................................53 リスト 課題 3.1-2-2 アーティスト名を検索するクエリー式 .............................54

課題3.1-3 CD アルバム名、アーティスト名を検索する..............................56 リスト 課題 3.1-3-1 検索結果イメージ .............................................................56

課題3.2 アルバム名、アーティスト名、曲目リストを検索する .........................59 リスト 課題 3.2 検索結果イメージ .......................................................................59

参考4 検索対象となる XML 文書の指定について ...................................................62 リスト 参考 4.1 XML 文書 .......................................................................................62 図 参考 4-1 バインダの作成方法...........................................................................64 図 参考 4-2 バインダの内容..................................................................................64

課題3.3 全 CD アルバムデータからアルバム名、アーティスト名を検索する ....65 リスト 課題 3.3 検索結果イメージ .......................................................................65

課題3.4 全 CD アルバムデータの一覧を作成する...............................................67 リスト 課題 3.4 検索結果イメージ .......................................................................67

参考4 クエリーの実行結果のファイル出力について...............................................69 図 参考 4-1 クエリーの実行結果確認画面 ............................................................69

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録 ................70 5.1 課題の概要 ........................................................................................................70

リスト 5.1-1 好みの楽曲一覧 XML 文書のサンプル .................................................70 図 5.1-1 好みの楽曲一覧 XML 文書の登録イメージ .................................................70

5.2 好みの楽曲一覧 XML 文書の構造.....................................................................71 リスト 5.2-1 好みの楽曲一覧 XML のスキーマ条件 .................................................71 図 5.2-1 好みの楽曲一覧 XML 文書のツリー構造.....................................................72 リスト 5.2-2 OriginalCDData.xsd ...........................................................................73 リスト 5.2-3 OriginalCDData.xml...........................................................................74

5.3 課題の実習について..........................................................................................75 図 5.3-1 課題の実習箇所 ...........................................................................................75

Page 6: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

目次

課題4 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録 ............76 課題4.1 好みの楽曲一覧 XML 文書の作成..............................................................76 課題4.2 XML データベースへの登録......................................................................77

図 課題 4.2-1 登録時のデータ格納方式の選択メニュー .......................................77 図 課題 4.2-2 好みの楽曲一覧 XML 文書の登録後のイメージ .............................78

第6章 検索結果の HTML 表示 .......................................................................................79 6.1 課題の概要 ........................................................................................................79 図 6.1-1 HTML 文書の表示イメージ ........................................................................79

6.2 課題の実習について..........................................................................................80 リスト 6.2-1 検索対象となる XML 文書 ...................................................................80 リスト 6.2-2 HTML 文書を出力する XQuery の例 ..................................................81 図 6.2-1 リスト 6.2-2 の出力結果..............................................................................81 図 6.2-2 課題の実習箇所 ...........................................................................................81

課題5 検索結果の HTML 表示 ....................................................................................82 課題5.1 オリジナル CD データの HTML 表示....................................................82 課題5.1-1 個人の CD データの HTML 表示 ................................................82 図 課題 5.1-1 検索結果イメージ........................................................................82 リスト 課題 5.1-1 検索結果の HTML 文書のソースコード ..............................83

課題5.1-2 表を使った個人の CD データの HTML 表示 ..............................87 図 課題 5.1-2 検索結果イメージ........................................................................87 リスト 課題 5.1-2 検索結果の HTML 文書のソースコード ..............................88

課題5.1-3 表を使った全学生分の CD データの HTML 表示 .......................91 図 課題 5.1-3-1 バインダの作成イメージ..........................................................91 図 課題 5.1-3-2 検索結果イメージ ....................................................................92 リスト 課題 5.1-3-1 検索結果の HTML 文書のソースコード ...........................93

課題5.2 特定楽曲選択者リストの HTML 表示....................................................98 課題5.2-1 特定楽曲選択者リストの HTML 表示 .........................................98 図 課題 5.2-1 検索結果イメージ........................................................................98 リスト 課題 5.2-1 検索結果の HTML 文書のソースコード ..............................99

課題5.2-2 人気楽曲ランキングの HTML 表示........................................... 103 図 課題 5.2-2 検索結果イメージ...................................................................... 103 リスト 課題 5.2-2 検索結果の HTML 文書のソースコード ............................ 104

課題5.2-3 オリジナル CD への追加状況一覧の HTML 表示 ..................... 109 図 課題 5.2-3 検索結果イメージ...................................................................... 109 リスト 課題 5.2-3 検索結果の HTML 文書のソースコード ............................ 110

付録 A 課題3、課題5の解答例 .................................................................................... 113

Page 7: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

目次

課題 3.1-1 の解答例....................................................................................................... 113 課題 3.1-2 の解答例....................................................................................................... 113 課題 3.1-3 の解答例....................................................................................................... 114 課題 3.2 の解答例 .......................................................................................................... 114 課題 3.3 の解答例 .......................................................................................................... 114 課題 3.4 の解答例 .......................................................................................................... 115 課題 5.1-1 の解答例....................................................................................................... 116 課題 5.1-2 の解答例....................................................................................................... 117 課題 5.1-3 の解答例....................................................................................................... 118 課題 5.2-1 の解答例 - where 節を使用した場合 .................................................... 119 課題 5.2-1 の解答例 - XPath の述部を使用した場合 ............................................. 119 課題 5.2-2 の解答例 - sortby 句を使用した場合 .................................................... 120 課題 5.2-2 の解答例 - order by 節を使用した場合................................................. 121 課題 5.2-3 の解答例 - sortby 句、where 節を使用した場合 .................................. 122 課題 5.2-3 の解答例 - XPath の述部、sortby 句を使用した場合........................... 123 課題 5.2-3 の解答例 - where 節、order by 節を使用した場合............................... 124 課題 5.2-3 の解答例 - XPath の述部、order by 節を使用した場合 ....................... 125

付録 B 検証ツールについて ........................................................................................... 126 付録 C 実習環境の構築について .................................................................................... 129

図 ①-1 管理ツールの起動.......................................................................................... 130 図 ①-2 管理ツール起動後の画面 ............................................................................... 130 図 ①-3 データベースへの接続................................................................................... 131 図 ②-1 データベース接続後の画面 ........................................................................... 132 図 ②-2 パーティション作成の方法 ........................................................................... 132 図 ②-3 パーティションの作成ダイアログ................................................................. 133 図 ②-4 パーティション作成後のイメージ................................................................. 133 図 ③-1 XMLStore の作成方法................................................................................... 134 図 ③-2 「CDAlbumData」XMLStore の作成 .......................................................... 134 図 ③-3 XMLStore の作成方法................................................................................... 135 図 ③-4 「OriginalCDData」XMLStore の作成 ....................................................... 135 図 ③-5 実習環境構築後のイメージ ........................................................................... 136

索 引 ........................................................................................................................... 137

Page 8: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

目次

Page 9: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第1章 概要

- 1 -

第1章 概要 1.1 課題の全体説明

1.1.1 CD 製作会社のマーケティング調査

CD 製作会社のマーケティング担当者が、学生の嗜好調査アンケートを実施することにな

り次のようなシステムを考案しました。 まず、この CD 製作会社が国内で販売している CD アルバムの曲名情報などをデータベ

ース化し、学生に自由に閲覧してもらえるようにします。次に作成したデータベースを閲

覧した学生が、全 CD アルバムの曲名の中から自分の好みの曲を選択し、オリジナル CD と

して、同一 DB 内に登録できるようにしていきます。 CD製作会社では学生によって登録されたオリジナルCDの情報をあとから検索することに

より、もっとも人気のある楽曲ランキングなど、様々なマーケティング情報を入手する予

定です。 登録されたCDアルバムのデータなど、このシステムで取り扱うデータはXML形式とし、

XML データベースを使って格納/管理します。

図 1.1.1-1 想定システムの概要図

Page 10: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第1章 概要

- 2 -

想定システムではインターネットを経由した Web アプリケーションとしていますが、こ

こでは教室内のサーバ PC とネットワークで完結するものとし、まずは XML を扱うための

基本的な要素技術を修得することにします。また想定システムでの CD 製作会社による CDアルバムデータの入力については、学生一人一人が 1 つの CD データを入力するものとし

ます。

図 1.1.1-2 実習での環境

Page 11: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第1章 概要

- 3 -

CD 製作会社のマーケティング調査システムを想定した実習を、次の課題1~5にて行い

ます。実習では XML データをファイルとして保存し、XML データベースに格納します。

実習課題の全体の流れは、図 1.1.1-3 課題全体の流れのようになります。

図 1.1.1-3 課題全体の流れ

CD アルバムデータ

XML 文書の作成

XML データベースへの

登録

CD アルバムデータの

検索

好みの楽曲一覧 XML 文書の作成

XML データベースへの

登録

検索結果の HTML 表示

課題1

課題2

課題3

課題4

課題5

Page 12: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第1章 概要

- 4 -

課題1 CD アルバムデータ XML 文書の作成

課題の目的 課題1では、「課題2 XML データベースへの登録」、「課題3 CD アルバムデータの

検索」で使用するためのデータを XML 形式で作成します。 必要な知識/習得知識・習得技術 課題1では、「XML の基礎知識」、「XML Schema の基礎知識」が前提知識として必要

になります。 CD 製作会社が現在提供している CD のアルバムデータを、XML フォーマットを使って

作成します。この実習は第2章で行います。 ・CD アルバムデータを XML 形式で作成

図 1.1.1-4 課題1での実習イメージ

Page 13: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第1章 概要

- 5 -

課題2 XML データベースへの登録 課題の目的 課題2では、XML データベースの概要を理解し、実際に課題1で作成した XML デー

タを XML データベースに格納します。 必要な知識/習得知識・習得技術 課題2では、「XML の基礎知識」が前提知識として必要になり、XML データベースの

概要についての知識を習得します。 習得知識・習得技術の概要 XML データベースは XML 文書の構造を変えずにそのまま格納・管理することのでき

るデータベースです。XML データベースは階層構造や半定型データを取り扱うことに

優れ、データ構造の変更にも柔軟に対応することができます。 課題1で作成した CD アルバムデータを XML データベースに登録します。この実習は第

3章で行います。 ・CD アルバムデータを XML データベースに登録

図 1.1.1-5 課題2での実習イメージ

Page 14: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第1章 概要

- 6 -

課題 3 CD アルバムデータの検索

課題の目的 課題3では、基本的な XQuery の使用方法を理解し、実際に課題2で格納した XML デ

ータベースに対して検索処理を行います。 必要な知識/習得知識・習得技術 課題3では、「XPath の基礎知識」が前提知識として必要になり、基本的な XQuery に

ついての知識・技術を習得します。 習得知識・習得技術の概要 XQuery は W3C より勧告されている、XML 文書からデータを抽出ための技術です。

XQuery はリレーショナルデータベースで使用されている SQL の SELECT 文に相当

します。また、XQuery で取得した結果を HTML としても出力することができます。 課題2で XML データベースに登録した CD アルバムデータを検索します。この実習は第

4章で行います。 ・特定の CD アルバムデータよりアルバム名、アーティスト名を検索 ・特定の CD アルバムデータより曲名、演奏時間を検索 ・全 CD アルバムデータよりアルバム名、アーティスト名を検索 ・全 CD アルバムデータの一覧(アルバム名、アーティスト名、曲名、演奏時間)を作成 など

図 1.1.1-6 課題3での実習イメージ

Page 15: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第1章 概要

- 7 -

課題 4 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

課題の目的 課題4では、「課題5 検索結果の HTML 表示」で使用するためのデータを XML 形式

で作成します。 必要な知識/習得知識・習得技術 課題4では、「XML の基礎知識」、「XML Schema の基礎知識」が前提知識として必要

になります。 課題3で作成した全 CD アルバムデータの一覧を使用し、学生が自分の好みの楽曲を集

めたオリジナル CD を作成します。この実習は第5章で行います。 ・オリジナル CD データの作成 ・オリジナル CD データを XML データベースに登録

図 1.1.1-7 課題4での実習イメージ

Page 16: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第1章 概要

- 8 -

課題 5 検索結果の HTML 表示

課題の目的 課題5では、XQuery を使用して検索結果を HTML 形式で出力するための技術を習得

します。実際に課題4で格納した XML データベースに対して、検索処理を行い、結果

を HTML 形式で出力します。 必要な知識/習得知識・習得技術 課題5では、「XPath の基礎知識」、「HTML の基礎知識」が前提知識として必要にな

り、基本的な XQuery についての知識・技術を習得します。 習得知識・習得技術の概要 課題3と同様となります。 課題4で作成したオリジナル CD データを使用し、オリジナル CD データの一覧や人気

ランキングなどの各種情報をブラウザで表示できるよう、データを HTML に加工します。

この実習は第6章で行います。 ・オリジナル CD データの一覧を HTML 化する ・クラス内楽曲人気ランキングデータを作成し HTML 化する ・曲名を検索条件に、その楽曲をオリジナル CD に選択した学生の一覧を表示

など

図 1.1.1-8 課題5での実習イメージ

Page 17: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第1章 概要

- 9 -

1.1.2 実習に必要な環境

本教材はオペレーティングシステム(O/S)として Windows 2000/XP を使用し、課題

1、課題4の XML 文書の作成では、オペレーティングシステム(O/S)標準、もしくは講

義で利用しているテキストエディタ、または XML エディタと XML Schema と作成した

XML 文書との妥当性検証を行う検証ツールを、課題2、課題3~課題5では、サイバーテ

ック社製の XML データベース、Cyber Luxeon を使用するものとして書かれています。 本教材では、XML 文書の妥当性検証にインフォテリア社より提供されている検証ツール

を使用します。検証ツールを使用するには、事前に Java 実行環境の 1.4.2 または 5.0 以上

をインストールしておく必要があります。検証ツールの環境設定については、「付録 B 検

証ツールについて」を参照してください。 実習で使用するPCには、あらかじめCyber Luxeonをインストールしておく必要があり、

データベースサーバとなる PC では、実習環境を構築しておく必要があります。実習環境の

構築方法については、「付録 C 実習環境の構築について」を参照してください。

Page 18: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 10 -

第2章 CD アルバムデータ XML 文書の作成 2.1 課題の概要

CD 製作会社の XML データベースに登録するための CD アルバムデータ XML 文書を作

成し、XML ファイルとしてデータを保存します。学生一人一人がデータを入力しファイル

保存しますので、ファイル名の識別のため保存ファイル名に名前を使用することにします。

実際にはブラウザなどを利用した Web アプリケーションなどが用意されますが、ここでは

テキストエディタを使用して、CD アルバムデータ XML 文書を作成します。 リスト 2.1-1 CD アルバムデータ XML 文書のサンプル(下線部は入力データ)

<?xml version="1.0" encoding="Shift_JIS"?> <CDList> <CD> <Title>CD タイトル名</Title> <Artist>アーティスト名</Artist> <Release>2004-06-30</Release> <Image>artist.jpg</Image> <MusicList> <Music Time="777" Title="曲名 1" /> <Music Time="171" Title="曲名 2" /> </MusicList> </CD> </CDList>

Page 19: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 11 -

2.2 CD アルバムデータ XML 文書の構造

データの保存形式は XML ファイルとします。CD アルバムデータを XML として保存す

るため、検討の結果、次のようなスキーマ(構造)の XML でデータを保存することにしま

した。 リスト 2.2-1 CD アルバムデータ XML のスキーマ条件

1.ルート要素名を「CDList」とする 2.1 枚の CD 情報を「CD」要素とし、出現回数は 1 回とする 3.CD タイトル名を「Title」要素とする 4.アーティスト名を「Artist」要素とする 5.発売日を「Release」要素とする 6.「Release」要素の値は date 型とする 7.イメージファイル名を「Image」要素とする 8.曲目情報を「MusicList」要素とする 9.1 曲の情報を「Music」要素とし、出現回数は 1 回以上、上限なしとする 10.「Music」要素の「Time」属性の値は曲の長さを秒数で表し、正の整数とする 11.「Music」要素の「Title」属性に曲名を記述する

Page 20: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 12 -

リスト 2.2-1 をツリー構造にすると図 2.2-1 のようになります。

図 2.2-1 CD アルバムデータ XML 文書のツリー構造

CDList要素

Title要素

Artist要素

Release要素

Image要素

MusicList要素

Time属性

Title属性

Music要素

CD要素

Page 21: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 13 -

リスト 2.2-1 の CD アルバムデータ XML のスキーマ条件を元に XML Schema を使用した

スキーマ定義は、リスト 2.2-2 のようになります。 リスト 2.2-2 CDAlbumData.xsd

1: <?xml version="1.0" encoding="Shift_JIS"?> 2: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 3: <xs:element name="CDList"> 4: <xs:complexType> 5: <xs:sequence> 6: <xs:element ref="CD" /> 7: </xs:sequence> 8: </xs:complexType> 9: </xs:element> 10: 11: <xs:element name="CD"> 12: <xs:complexType> 13: <xs:sequence> 14: <xs:element ref="Title" /> 15: <xs:element ref="Artist" /> 16: <xs:element ref="Release" /> 17: <xs:element ref="Image" /> 18: <xs:element ref="MusicList" /> 19: </xs:sequence> 20: </xs:complexType> 21: </xs:element> 22: 23: <xs:element name="Title" type="xs:string" /> 24: <xs:element name="Artist" type="xs:string" /> 25: <xs:element name="Release" type="xs:date" /> 26: <xs:element name="Image" type="xs:string" /> 27: <xs:element name="MusicList"> 28: <xs:complexType> 29: <xs:sequence> 30: <xs:element ref="Music" minOccurs="1" maxOccurs="unbounded" /> 31: </xs:sequence> 32: </xs:complexType> 33: </xs:element> 34: 35: <xs:element name="Music"> 36: <xs:complexType> 37: <xs:attribute name="Time" type="xs:nonNegativeInteger" /> 38: <xs:attribute name="Title" type="xs:string" /> 39: </xs:complexType> 40: </xs:element> 41: </xs:schema>

Page 22: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 14 -

また実際に保存される XML ファイルは、リスト 2.2-3 のような XML となります。 リスト 2.2-3 CDAlbumData.xml(下線部は入力データ)

1: <?xml version="1.0" encoding="Shift_JIS"?> 2: <CDList> 3: <CD> 4: <Title>CD タイトル名</Title> 5: <Artist>アーティスト名</Artist> 6: <Release>2004-06-30</Release> 7: <Image>artist.jpg</Image> 8: <MusicList> 9: <Music Time="777" Title="曲名 1" /> 10: <Music Time="171" Title="曲名 2" /> 11: </MusicList> 12: </CD> 13: </CDList>

Page 23: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 15 -

2.3 課題の実習について

XML 文書を作成するには XML 文書専用のエディタや専用のツールなど、さまざまなツ

ール類が提供されています。しかし、実際の開発の現場において、それらのツール類を必

ず使っているとは限りませんし、フリーの XML 作成ツール類は企業によって、信頼性やセ

キュリティの観点から使用できない場合もあります。XML 文書はテキスト形式で記述でき

ますので、テキストエディタで XML 文書を作成できるようにしておくことをお勧めします。

テキストエディタなら、オペレーティングシステムに付属していますので、開発環境など

に左右されることなく、XML 文書を作成することができます。 この章では課題全体の流れの「CD アルバムデータ XML 文書の作成」を実習します。

図 2.3-1 課題の実習箇所

CD アルバムデータ

XML 文書の作成

Page 24: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 16 -

課題1 CD アルバムデータ XML 文書の作成

それでは、リスト 2.2-3 を参考に CD アルバムデータ XML 文書を作成します。 また、CD アルバムデータ XML 文書を作成する際の注意事項は以下のとおりです。 ・発売日を表す「Release」要素は "YYYY-MM-DD" の書式で記述する ・1曲の情報を表す「Music」要素は1枚の CD に入っている曲数分出現する ・演奏時間を表す「Time」属性は秒数に変換して記述する CD アルバムデータ XML 文書の作成が終了したら、ファイル名を「CD_個人名(ローマ

字).xml」(例:CD_TaroYamada.xml)として、任意のフォルダに保存します。 CD アルバムデータ XML 文書の保存ができたら、リスト 2.2-1 CDAlbumData.xsd と構

造が一致するか検証ツールを使って確認しましょう。

Page 25: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 17 -

参考1 XML データの検証について

XML データベースに格納する XML 文書は整形式 XML 文書である必要があります。ま

た、XML Schema などのスキーマ定義言語で記述されたスキーマを使用する場合は、XMLデータベースに格納する XML 文書はそのスキーマに対して、妥当な XML 文書とならなけ

ればなりません。 XML データベースの機能の中に XML 文書の検証機能が提供されているものもあり、そ

の機能を利用することもできます。しかし、XML 文書を XML データベースに格納する前

に、事前に検証ツールなどを使って検証することで、効率よく作業を行うことができます。

Page 26: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 18 -

本教材では、以下の検証ツールを使って検証作業を行っていきます。

図 参考 1-1 検証ツール

XML ファイル(X)の入力欄に課題で作成した XML 文書を、XML Schema ファイル(S)の入力欄に templates フォルダ内にある「CDAlbumData.xsd」を指定し、『検証(E)』ボタン

をクリックすると検証を行い、その結果が「検証結果」欄に出力されます。作成した XML文書がスキーマファイル「CDAlbumData.xsd」に対して妥当な場合は、「検証結果」欄に

『妥当です。』と表示されます。妥当でない場合は、エラーが出力されますので、適宜、XML文書を修正してください。

Page 27: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第2章 CD アルバムデータ XML 文書の作成

- 19 -

また、XML ファイルを選択するには『参照(W)』ボタンを、XML Schema ファイルを選択

するには『参照(B)』ボタンをクリックすると、次のようなダイアログボックスが表示され

ますので、検証対象となるファイルを適宜、選択してください。

図 参考 1-2 ファイル選択ダイアログボックス

Page 28: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第3章 XML データベースへの登録

- 20 -

第3章 XML データベースへの登録 3.1 課題の概要

第2章で作成した CD アルバムデータ XML 文書を XML データベースに登録します。実

際にはブラウザなどを利用したアプリケーション側で、「登録」ボタンをクリックする等の

アクションによって、登録処理が実行され、XMLデータベースにデータが登録されますが、

ここでは XML データベースの GUI を使用して、CD アルバムデータ XML 文書を登録しま

す。

図 3.1-1 CD アルバムデータ XML 文書の登録イメージ

Page 29: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第3章 XML データベースへの登録

- 21 -

3.2 XML データベースとは

XML データベースとは XML 文書の構造を変更することなく格納でき、大量の XML 文

書を効率よく管理できるデータベース管理システムのことです。XML データベースからデ

ータを取得するには XQuery を使用します。XQuery は 2007 年 1 月に W3C から勧告され

た仕様で、SQL の SELECT に相当し、データを取得して、XML 形式、HTML 形式などで

の値を返却します。データの更新は、XQuery では行えないため、各 XML データベースが

提供する独自の方法を使って行います。XML データの更新についても W3C によって、

XQuery とは別の仕様として策定しています。

図 3.2-1 XML データベースの概要図

Page 30: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第3章 XML データベースへの登録

- 22 -

XML データベースには、XML 形式のデータを格納し、操作/管理できる「XML ネイテ

ィブデータベース」と、従来のリレーショナルデータベースに XML データベースの機能を

付加し、表形式のデータと XML 形式のデータの両方を格納することができ、それらを操作

/管理できる「ハイブリッドデータベース」と呼ばれるものも存在します。これら 2 種類

のデータベースを称して、「XML データベース」と呼びます。

図 3.2-2 XML データベースの種類

Page 31: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第3章 XML データベースへの登録

- 23 -

3.3 課題の実習について

XML データベースへの XML 文書の登録方法は、現時点で XML データベースごとに異

なるユーザーインターフェースが提供されています。使用する XML データベースによって

は、管理ツールなどを使用して、ファイル選択ダイアログボックスで該当の XML 文書を選

択するものもあれば、管理ツール上に表示されているフォルダなどにドラッグ&ドロップ

するものもあり、簡単に XML データベースに XML 文書を登録することができます。 この実習では XML データベースの GUI を使用して、第2章で作成した CD アルバムデー

タ XML 文書を登録します。 この章では課題全体の流れの「XML データベースへの登録」を実習します。

図 3.3-1 課題の実習箇所

XML データベースへの

登録

Page 32: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第3章 XML データベースへの登録

- 24 -

3.4 XML データベースへの登録

「3.3 課題の実習手順」でも説明したように、現時点で XML データベースごとに異

なるユーザーインターフェースが提供されており、使用する XML データベースによって、

XML 文書を登録する方法が変わってきます。XML 文書の登録方法として、代表的なもの

を以下にまとめます。 ・管理ツール/クライアントツール等の GUI を利用する ・専用の API を使用したプログラムによる登録 ・コマンドラインユーティリティを利用する 大半の XML データベースがいずれか、もしくはすべての機能を提供していますので、利

用用途に合わせて XML 文書の登録方法を選択します。少量の XML 文書を登録する場合や

登録した XML 文書を確認する場合などは、管理ツール/クライアントツール等の GUI を

使用し、実際のシステムで利用する場合は、専用の API を使用しプログラムを作成します。

さらに大量の XML 文書を登録する場合などでは、コマンドラインユーティリティを使用す

ることもできます。

Page 33: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第3章 XML データベースへの登録

- 25 -

課題2 CD アルバムデータ XML 文書の登録

Cyber Luxeon を使用する場合の CD アルバムデータ XML 文書を XML データベースに

登録する手順を以下に示します。 ① 管理ツールの起動 管理ツールを起動するには、[スタート]メニューから[プログラム(P)] -> [Cyber Luxeon] -> [DXE Manager]を選択します。

図 課題 2-1 管理ツールの起動

Page 34: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第3章 XML データベースへの登録

- 26 -

管理ツールが起動できると以下の図 課題 2-2 のような画面が表示されます。

図 課題 2-2 管理ツール起動後の画面

次に管理ツールを XML データベースに接続します。 ツールバーの左端にある ボタンをクリックする、またはメニューバーより[接続

(C)]->[新規接続(N) Ctrl+N]を選択し、接続ダイアログを表示します。そして、ホスト名

にデータベースサーバのホスト名、または IP アドレスを入力します。

図 課題 2-3 データベースへの接続

また、ローカルマシンにインストールされたデータベースに接続するには、ホスト名に

「localhost」と入力します。 ※ XML データベースの実習環境に合わせて、XML データベースがインストールされたサ

ーバのホスト名、または IP アドレスを入力してください。

Page 35: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第3章 XML データベースへの登録

- 27 -

② CD アルバムデータ XML 文書の DB への登録 管理ツールが XML データベースに正しく接続できた場合には、図 課題 2-4 のような画面

が表示されます。

図 課題 2-4 データベース接続後の画面イメージ

Page 36: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第3章 XML データベースへの登録

- 28 -

管 理 ツ ー ル DXE Manager の [SurveyResults] パ ー テ ィ シ ョ ン の 配 下 に あ る

[CDAlbumData]XML Store に作成した CD アルバムデータ XML 文書をドラッグ&ドロッ

プ、もしくは、メニューバーより「ファイル(F)」->「インポート(I)」->「ファイルシス

テムから(F)・・・」を選択し、作成したファイルを選びます。 ※ 登録時に図 課題 2-5 のようなメニューが表示されますので、「サーバのデフォルト設定

を使用(D)」を選択してください。

図 課題 2-5 登録時のデータ格納方式の選択メニュー

また、CD アルバムデータ XML 文書の登録後のイメージは図 課題 2-6 のようになります。

図 課題 2-6 CD アルバムデータ XML 文書の登録後のイメージ

Page 37: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 29 -

第4章 CD アルバムデータの検索 4.1 課題の概要

第3章で登録した CD アルバムデータ XML 文書に対して検索を行います。XML データ

ベースに登録した XML 文書を検索するには XQuery を使用します。XML データベースに

登録された1つまたは複数の XML 文書からアルバム名やアーティスト名、曲名などを検索

し、 終的には全学生分の CD アルバムデータを1つの XML 文書として検索し、表示させ

ます。まずは XQuery の概要と XQuery の構文を学習します。

図 4.1-1 CD アルバムデータ XML 文書の検索イメージ

Page 38: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 30 -

4.2 XQuery とは

XQuery とは1つまたは複数の XML 文書内のデータに対する問い合わせ言語で、2007年 1 月に W3C より勧告されました。XQuery はリレーショナルデータベースで利用されて

いる SQL の SELECT に相当し、XML 文書よりデータを取得し、その結果として XML 形

式や HTML 形式などを返却します。SQL の SELECT 文に「SELECT 列名 1,列名 2・・・ FROM テーブル名 where 列名 = xxx ・・・」という構文があるように、XQuery にも構文

があります。それが FLWOR 式(フラワー式)です。FLWOR 式では大文字と小文字を区

別します。 図 4.2-1 XQuery の概要にある「//CD」はルートノードから CD 要素ノードまでの間を問

わない XPath 式で、対象となる XML 文書中にあるすべての CD 要素ノードを選択します。

図 4.2-1 XQuery の概要

Page 39: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 31 -

4.3 FLWOR 式

FLWOR 式は XQuery の代表的な構文で、for 節、let 節、where 節、order by 節、return節から構成されています。FLWOR 式の構文を図式化すると、以下の図 4.3-1 FLWOR 式

の構文図のようになります。

図 4.3-1 FLWOR 式の構文図

FLWOR 式は、for 節または let 節からはじめ、必要に応じて for 節または let 節を繰り返し

記述することができます。また、where 節、order by 節も必要に応じて記述し、 終的な

結果を return 節で返却します。

for 節

let 節 for 節

let 節 where 節 order by 節

return 節

Page 40: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 32 -

例えばリスト 4.3-1 の XML 文書に対して、リスト 4.3-2 のクエリー式を使って検索を行う

とリスト 4.3-3 のような結果が返されます。 リスト 4.3-1 XML 文書

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

リスト 4.3-2 クエリー式

<MusicList>{ for $music in //Music order by $music/@Title return $music }</MusicList>

リスト 4.3-3 検索結果

<MusicList> <Music Time="777" Title="曲名 1-1" /> <Music Time="171" Title="曲名 1-2" /> <Music Time="150" Title="曲名 1-3" /> </MusicList>

リスト 4.3-2 クエリー式にある「$music/@Title」は music 変数にバインドされた Music要素ノードに属している Title 属性を選択します。XPath では、要素や属性などの区切りを

「/」を使って記述し、属性ノードを選択するには「@」を使って記述します。

Page 41: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 33 -

また、リスト 4.3-2 のクエリー式のようにクエリー式を中括弧({ })で囲み、その前後に要

素の開始タグと終了タグを記述することで、中括弧({ })内の式を評価し、中括弧の前後に

記述された要素の子要素として、検索結果を出力します。これにより XML 形式の文書を生

成することができます。このことを直接コンストラクタと呼び、直接コンストラクタは次

頁以降に解説する return 節でも使用することができます。

<MusicList>{ for $music in //Music order by $music/@Title return $music }</MusicList>

Page 42: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 34 -

4.3.1 for 節

for 節は反復処理を表します。for 節の構文は以下のようになります。

for 変数名 in 式 [,変数名 in 式 ・・・]

変数名は「変数名」の前に「$」を記述し、変数名は任意です。「式」には XPath 式を記述

します。for 節は、式に記述された XPath 式を評価し、XPath 式が返すノードを変数にバ

インドし、反復処理を行います。また、for 節の「変数名 in 式」の部分は、「式」の後にカ

ンマ(,)を用いて複数記述することができます。for 節の構文を図式化すると図 4.3.1-1 の

ようになります。

図 4.3.1-1 for 節の構文図

for 変数 in 式

,

Page 43: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 35 -

for $music in //Music

リスト 4.3-2 の XQuery の for 節では、リスト 4.3-1 の XML 文書内にある Music 要素を1

つずつ music 変数にバインドし、Music 要素の数分だけ、処理を繰り返します。

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> 1回目 <Music Time="777" Title="曲名 1-1" /> 2回目 <Music Time="150" Title="曲名 1-3" /> 3回目 </MusicList> </CD> </CDList>

Page 44: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 36 -

4.3.2 let 節

let 節は変数を宣言して、XPath 式を評価した結果をバインドします。let 節の構文は以

下のようになります。

let 変数名 := 式 [,変数名 := 式 ・・・]

for 節と同様に、変数名の記述は「$変数名」とし、変数名は任意です。「式」には XPath式を記述します。let 節は、式に記述された XPath 式を評価し、XPath 式が返す値を変数

にバインドします。バインドされた値は変数を宣言した let 節以降で参照することが出来ま

す。また、let 節の「変数名 := 式」の部分は、「式」の後にカンマ(,)を用いて複数記述

することができます。let 節の構文を図式化すると図 4.3.2-1 のようになります。

図 4.3.2-1 let 節の構文図

for 節は反復処理を行いますが、let 節は反復処理を行いません。

let 変数 := 式

,

Page 45: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 37 -

let $music := //Music

例えば上記のような let 節が XQuery に記述されている場合、リスト 4.3-1 の XML 文書内

にある Music 要素すべてを music 変数にバインドします。

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

let 節でバインドされる要素

Page 46: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 38 -

4.3.3 where 節

where 節は SQL の where 句と同様に条件式を記述し、データのフィルタリングを行いま

す。where 節の構文は以下のようになります。

where 式 [[ and | or ] 式 ・・・]

where 節は通常、for 節で宣言した変数に対して条件式を記述し、条件式が true となるデ

ータだけにフィルタリングします。条件式は複数記述することができ、すべての条件式を

満たす場合は「and」でつなぎ、いずれかの条件式を満たせばよい場合には「or」でつなぎ

ます。これも SQL の where 句と同じです。where 節の構文を図式化すると図 4.3.3-1 のよ

うになります。

図 4.3.3-1 where 節の構文図

where 式

and

or

Page 47: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 39 -

where $music/@Time > 160

例えば上記のような where 節が XQuery に記述されている場合、リスト 4.3-1 の XML 文

書内にある Music 要素の Time 属性が 160 より大きいデータだけになります。

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

where 節でフィルタリングさ

れる要素

Page 48: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 40 -

4.3.4 order by 節

order by 節は検索結果をソートします。where 節同様、order by 節も SQL の order by句と同じです。order by 節の構文は以下のようになります。

order by 式 [[ ascending | descending ] ,式 ・・・]

order by 節は式に記述された値を使用して、検索結果をソートします。検索結果を昇順に

並べ替えたい場合は、「ascending」と記述し、降順に並べ替えたい場合には「descending」を記述します。また、ascending/descending の記述を省略した場合には、昇順に並べ替え

られます。この部分も SQL の order by 句と同じです。order by 節の構文を図式化すると図 4.3.4-1 のようになります。

図 4.3.4-1 order by 節の構文図

order by 式

,

ascending

descending

Page 49: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 41 -

例えばリスト 4.3.4-1 の XML 文書に対して、リスト 4.3.4-2 のクエリー式を使って検索を

行います。XQuery 内には order by 節が記述されており、Music 要素の Title 属性を使って

昇順に並べ替えをしています。その結果として、リスト 4.3.4-3のような結果が返されます。 リスト 4.3.4-1 XML 文書

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

リスト 4.3.4-2 クエリー式

<MusicList>{ for $music in //Music order by $music/@Title Title 属性の値で昇順に並べ替え return $music }</MusicList>

リスト 4.3.4-3 検索結果

<MusicList> <Music Time="777" Title="曲名 1-1" /> <Music Time="171" Title="曲名 1-2" /> <Music Time="150" Title="曲名 1-3" /> </MusicList>

Page 50: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 42 -

参考2 order by 節の実装について

Cyber Luxeon は W3C においてワーキングドラフトの段階の XQuery 仕様を実装していま

す。ワーキングドラフトの段階のXQuery仕様のFLWOR式ではorder by節の定義がなく、

FLWR 式として定義されており、データをソートするために sortby 句が用意されていまし

た。現時点(2007 年 11 月)で、Cyber Luxeon は order by 節をサポートしていませんの

で、データをソートするには sortby 句を使用します。sortby 句は for 節や let 節、return節の後に記述することができます。

sortby( 式 [[ ascending | descending ] ,式 ・・・])

sortby 句は式に記述された値を使用して、for 節や let 節で抽出された内容や return 節の

式をソートします。昇順に並べ替えたい場合は、「ascending」と記述し、降順に並べ替え

たい場合には「descending」を記述します。また、ascending/descending の記述を省略

した場合には、昇順に並べ替えられます。

Page 51: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 43 -

4.3.5 return 節

return 節は XQuery の検索結果を返却します。return 節の構文は以下のようになります。

return 式

return 節は反復処理1回ごとに式を評価し、反復処理が終了した後にその結果を1つにま

とめて返却します。return 節の構文を図式化すると図 4.3.5-1 のようになります。

図 4.3.5-1 return 節の構文図

また、return 節で複数の検索結果を1つの式として返却するには、以下のように小括弧

( ( ) )とカンマ( , )を使って記述します。

return (式1,式2,式3,・・・)

さらに return 節には XML や HTML などのタグを記述することもでき、開始タグから終了

タグまでが 1 つの式となります。そして開始タグと終了タグの間で別の式を記述するには

中括弧( { } )を使い、中括弧内で複数の検索結果を返却するには、カンマ( , )を使用

します。

return <tag>{ 式 }</tag>

return <tag>{式 1,式2,式3,・・・}</tag>

return 式

Page 52: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 44 -

4.4 課題の実習について

XML データベースへの XML 文書の登録方法と同様に、XQuery の実行方法も XMLデータベースごとに異なるユーザーインターフェースが提供されています。使用する XMLデータベースによっては、管理ツールなどから XQuery を実行するための GUI を起動し、

XQuery を実行します。また、専用のライブラリなどを使用してプログラミング言語から

XQuery を実行することもできます。 この実習では XML データベースの GUI を使用して、XQuery を実行します。 この章では課題全体の流れの「CD アルバムデータの検索」を実習します。

図 4.4-1 課題の実習箇所

CD アルバムデータの

検索

Page 53: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 45 -

課題3 CD アルバムデータの検索

Cyber Luxeon を使用する場合の CD アルバムデータを検索する手順を以下に示します。 ① クエリーダイアログの表示 XQuery を作成、実行するには、クエリーダイアログを使用します。クエリーダイアログを

表示させるには、検索対象となる XML 文書を選択し、右クリックメニューの [クエリー(Q)] -> [クエリーの手動作成(M)...]を選択する、またはメニューバーより [ファイル(F)] -> [クエ

リー(Q)] -> [クエリーの手動作成(M)...]を選択します。

図 課題 3-1 クエリーダイアログの表示

Page 54: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 46 -

クエリーダイアログは図 課題 3-2 の画面となります。

図 課題 3-2 クエリーダイアログ

実際のクエリー式は、「クエリー文字列の入力」欄に入力し、その中で改行する場合には、

Ctrl+Enter で改行します。Ctrl を押さずに Enter キーを入力すると [OK]ボタンをクリッ

クしたことと同じになり、クエリー式が実行されます。また、「クエリータイプ」はデフォ

ルトで [XPath] になっていますので、[XQuery] を選択します。

Page 55: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 47 -

課題3.1 アルバム名とアーティスト名を検索する

② CD アルバムデータの検索 各自作成した CD アルバムデータ XML 文書に対して検索を行います。 課題3.1-1 アルバム名を検索する

FLWOR 式を使って、検索結果がリスト 課題 3.1-1 の検索結果イメージとなるクエリー

を作成します。 リスト 課題 3.1-1 検索結果イメージ(下線部は任意のデータ)

<CD> <Title>CD アルバム名 1</Title> </CD>

クエリー式ができたら、実際にクエリーを実行し、リスト 課題 3.1-1 の検索結果イメージ

と同じような結果が表示されるかを確認しましょう。

Page 56: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 48 -

リスト 課題 3.1-1 の検索結果イメージを出力するためには、どのようなクエリー式を作

成すればよいか考えてみましょう。 リスト 課題 3.1-1 の検索結果イメージには、対象となる XML 文書の Title 要素が出力さ

れていますので、Title 要素を取得し、出力するクエリー式を作成すればよいことがわかり

ます。

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

← Title 要素を取得して出力する

Page 57: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 49 -

次に Title 要素を取得し出力するクエリー式を、FLWOR 式ではどのように表現するかを

考えてみましょう。 Title 要素を取得し出力するには、変数にバインドする必要があります。FLWOR 式にお

いて、変数を宣言し、変数にバインドするには for 節、または let 節を使用します。

for 変数名 in XPath 式

for 節は反復処理を行い、反復処理ごとに XPath 式で評価されたノードを変数にバインド

します。

let 変数名 := XPath 式

let 節は XPath 式で評価された結果を変数にバインドします。 対象となる XML 文書には Title 要素は1つしかありませんので、for 節、let 節のどちら

を使用しても構いません。ここでは、まず let 節を使用してクエリー式を作成しましょう。

XPath 式の部分には、変数にバインドするノードのパスを記述します。「//Title」は『子孫

の中の Title 要素ノード』という指定になり、該当する Title 要素ノードが変数にバインド

されます。

let $title := //Title

リスト 課題 3.1-1 検索結果イメージを出力するために、where 節、order by 節は必要

ありませんので省略します。return 節には let 節で宣言した変数をそのまま記述することで、

Title 要素ノードを返却することができます。

return $title

Page 58: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 50 -

また、クエリー式の返却値を整形式 XML 文書として返却する場合は、直接コンストラク

タを使用して、FLWOR 式の前後にルート要素となる要素を記述するのが一般的です。

<CD>{ let $title := //Title return $title

}</CD> 上記のクエリー式を実行し、検索結果を確認しましょう。時間のある方は、let 節を for節に置き換えてクエリー式を作成/実行し、検索結果を確認してみましょう。

Page 59: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 51 -

参考3 検索結果の確認について

Cyber Luxeon のクエリーダイアログでクエリーを実行すると、図 参考 3-1 のような実行

結果の画面が表示されます。Cyber Luxeon では、クエリーの結果を xlnxql:result 要素の

子要素として表示しますので、検索結果を確認するには、xlnxql:result 要素の子要素のみ

に注目します。

図 参考 3-1 クエリーの実行結果確認画面

Page 60: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 52 -

また、画面上部にあるメニューバーの (IE で表示)ボタンや (ツリーで表示)ボタ

ンで表示を切り替えることができます。

図 参考 3-2 表示画面の切り替え(IE で表示)

図 参考 3-3 表示画面の切り替え(ツリーで表示)

Page 61: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 53 -

課題3.1-2 アーティスト名を検索する

FLWOR 式を使って、検索結果がリスト 課題 3.1-2-1 の検索結果イメージとなるクエリ

ーを作成します。 リスト 課題 3.1-2-1 検索結果イメージ(下線部は任意のデータ)

<CD> <Artist>アーティスト名 1</Artist> </CD>

クエリー式ができたら、実際にクエリーを実行し、リスト 課題 3.1-2 の検索結果イメージ

と同じような結果が表示されるかを確認しましょう。

Page 62: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 54 -

リスト 課題 3.1-2-1 の検索結果イメージを出力するためには、どのようなクエリー式を

作成すればよいか考えてみましょう。課題 3.1-1 のクエリー式を、リスト 課題 3.1-2-2 のよ

うに Artist 要素ノードを取得し出力するように書き換えれば、リスト 課題 3.1-2-1 の検索

結果イメージを出力することができますが、ここでは for 節、または let 節の XPath 式を

CD 要素ノードに変更して、リスト 課題 3.1-2-1 の検索結果イメージを出力するようにしま

す。for 節、または let 節の XPath 式を CD 要素ノードに変更する手順を次ページに示しま

す。 リスト 課題 3.1-2-2 アーティスト名を検索するクエリー式

<CD>{ let $artist := //Artist return $artist

}</CD> または

<CD>{ for $artist in //Artist return $artist

}</CD>

Page 63: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 55 -

for 節、let 節の XPath 式の部分に「//CD」と CD 要素ノードを指定することで、CD 要

素ノードとその子要素ノードを宣言した変数にバインドすることができます。

for $cd in //CD または let $cd := //CD

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

このように CD 要素ノードとその子要素ノードを変数にバインドすることにより、変数

が宣言されたステップ以降で参照でき、子要素ノードや子要素ノードの内容などを参照/

返却することができます。例えば Release 要素ノードを参照するには以下のように変数名

と要素ノードの間を「/」で区切って記述します。

$cd/Release

また、Release 要素ノードの内容(テキストノード)を参照するには以下のような記述を

行います。

$cd/Release/text()

上記の記述を使って、開始タグ、Release 要素ノードの内容、終了タグを出力するには要素

の開始タグ、終了タグ、中括弧( { } )を使って、以下のように記述することもできます。

<Release>{$cd/Release/text()}</Release>

上記の方法でリスト 課題 3.1-2-1 のような検索結果を出力するクエリー式を作成、実行

し、検索結果を確認しましょう。

← $cd にバインドされるノード

Page 64: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 56 -

課題3.1-3 CD アルバム名、アーティスト名を検索する

FLWOR 式を使って、検索結果がリスト 課題 3.1-3-1 の検索結果イメージとなるクエリ

ーを作成します。 リスト 課題 3.1-3-1 検索結果イメージ(下線部は任意のデータ)

<CD> <Title>CD アルバム名</Title > <Artist>アーティスト名</Artist> </CD>

クエリー式ができたら、実際にクエリーを実行し、リスト 課題 3.1-3 の検索結果イメージ

と同じような結果が表示されるかを確認しましょう。 ポイント return 節では、まとまった1つの結果を返しますので、課題 3.1-3 での return 節の記述

には注意が必要です。直接コンストラクタを使って return 節を記述するか、return 節を小

括弧( ( ) )とカンマを使って記述することで 2 つの変数の値を1つの結果として返却で

きます。

return ( 変数1,変数 2 )

Page 65: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 57 -

リスト 課題 3.1-3-1 の検索結果イメージを出力するためには、どのようなクエリー式を

作成すればよいか考えてみましょう。課題 3.1-1、課題 3.1-2 で作成したクエリー式を加工

することでリスト 課題 3.1-3-1 の検索結果イメージを出力できます。 まずは課題 3.1-1 で作成したクエリー式を使って、リスト 課題 3.1-3-1 の検索結果を出力

するクエリー式を作成しましょう。課題 3.1-1 で作成したクエリー式では、let 節で Title要素ノードを$title 変数にバインドしています。

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

Artist 要素ノードを出力するには、$title 変数にバインドされた Title 要素ノードをカレ

ントノードとして、以下のように記述します。

$title/../Artist

上記の方法でリスト 課題 3.1-3-1 のような検索結果を出力するクエリー式を作成、実行

し、検索結果を確認しましょう。

← Title 要素をバインドする

Page 66: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 58 -

次に変数を 2 つ使って、リスト 課題 3.1-3-1 の検索結果を出力するクエリー式を作成し

ましょう。

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

1つの for 節、または let 節で 2 つ以上の変数を宣言するには、「,」で区切って2つの変

数を宣言し、要素ノードなどをバインドします。

for $title in //Title,$artist in $title/../Artist

let $title := //Title,$artist := $title/../Artist

また、Artist 要素ノードを変数にバインドする場合に、$title 変数を参照せず、「//Artist」と記述して変数にバインドすることもできます。

for $title in //Title,$artist in //Artist

let $title := //Title,$artist := //Artist

上記の方法でリスト 課題 3.1-3-1 のような検索結果を出力するクエリー式を作成、実行

し、検索結果を確認しましょう。

← $title 変数にバインドする

← $artist 変数にバインドする

Page 67: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 59 -

課題3.2 アルバム名、アーティスト名、曲目リストを検索する

各自作成した CD アルバムデータ XML 文書に対して検索を行います。 FLWOR 式を使って、検索結果がリスト 課題 3.2 の検索結果イメージとなるクエリーを

作成します。 リスト 課題 3.2 検索結果イメージ(下線部は任意のデータ)

<CD> <Title>CD アルバム名 1</Title > <Artist>アーティスト名 1</Artist> <MusicList> <Music Time="777" Title="曲名 1-1" /> <Music Time="171" Title="曲名 1-2" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD>

クエリー式ができたら、実際にクエリーを実行し、リスト 課題 3.2 の検索結果イメージ

と同じような結果が表示されるかを確認しましょう。

Page 68: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 60 -

リスト 課題3.2の検索結果イメージから、Title要素ノード、Artist要素ノード、MusicList要素ノードとその子要素ノードを出力しなければなりません。

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="777" Title="曲名 1-1" /> <Music Time="171" Title="曲名 1-2" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

これらを出力するクエリー式として考えられるものは、課題 3.1-1 から課題 3.1-3 で作成

したクエリー式すべてが該当します。ここでは、まず let 節を使用して title 要素ノード、

Artist 要素ノード、MusicList 要素ノードをバインドし、返却するクエリー式を作成しまし

ょう。また、return 節の記述にも注意しましょう。

<CD>{ let return }</CD>

上記の方法でリスト 課題 3.2 のような検索結果を出力するクエリー式を作成、実行し、

検索結果を確認しましょう。

Page 69: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 61 -

let 節を使用したクエリー式ができたら、次に課題 3.1-2 で作成したクエリー式を元に、

title 要素ノード、Artist 要素ノード、MusicList 要素ノードとその子要素ノードを取得する

クエリー式を作成しましょう。ここでも、return 節の記述にも注意しましょう。

<CD>{ let return }</CD>

上記の方法でリスト 課題 3.2 のような検索結果を出力するクエリー式を作成、実行し、

検索結果を確認しましょう。また、前述のクエリー式と同じ結果となることも確認しまし

ょう。

Page 70: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 62 -

参考4 検索対象となる XML 文書の指定について

FLWOR 式で検索対象となる XML 文書を指定するには、XQuery の fn:doc 関数を使用し

ます。fn:doc 関数を使用することで特定の XML 文書の文書ノードを取得できます。fn:doc関数の構文は以下の通りです。

fn:doc("ファイルパス+ファイル名")

fn:doc 関数は、主に for 節、let 節で使用され、fn:doc 関数の後に述部を記述することで

対象となるノードをフィルタリングすることができます。これは where 節に条件を記述す

ることと同じです。 リスト 参考 4.1 XML 文書

<CDList> <CD> <Title>CD アルバム名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

Page 71: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 63 -

for $music in fn:doc("SampleData.xml")//Music[@Time > 160]

例えば for 節を上記のように fn:doc 関数と述部を使って記述すると、リスト 参考 4.1 の

XML 文書内にある Music 要素の Time 属性が 160 より大きい Music 要素ノードだけにフ

ィルタリングされます。

<CDList> <CD> <Title>CD タイトル名 1</Title> <Artist>アーティスト名 1</Artist> <Release>2004-06-30</Release> <Image>cdAlbum1.jpg</Image> <MusicList> <Music Time="171" Title="曲名 1-2" /> <Music Time="777" Title="曲名 1-1" /> <Music Time="150" Title="曲名 1-3" /> </MusicList> </CD> </CDList>

複数の XML 文書を検索対象にするには fn:doc 関数を使用せずに、複数の XML 文書が格

納されているコレクション(製品によって名称は異なります。Windows などの OS に例え

るとディレクトリやフォルダのようなもの)を対象とすることで複数の XML 文書を検索対

象にすることができます。つまり XML 文書を基点として、1つ上の階層を指定してクエリ

ー式を実行します。 しかし、Cyber Luxeon では「バインダ」という機能を提供しており、複数の XML 文書

を1つの XML 文書としてまとめることができ、「バインダ」で作成されたドキュメントを

検索対象にすることができます。

フィルタリングされた要素

ノード

Page 72: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 64 -

以下の方法でバインダを作成できます。 ・XML Store やディレクトリ内にあるバインダに含める複数の XML 文書を選択し、

右クリックメニューの「ファイルからバインダを作成(C)...」を選択する

図 参考 4-1 バインダの作成方法

XML Store 内にバインダが作成され、バインダのファイル名を入力することができますの

で、ここでは「CDAlbumList.xml」とします。

図 参考 4-2 バインダの内容

※ バインダの作成は学生の代表者もしくは担当教員にて行ってください。 課題3.3、課題3.4ではここで作成したバインダ「CDAlbumList.xml」を使ってい

きます。

Page 73: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 65 -

課題3.3 全 CD アルバムデータからアルバム名、アーティスト名を検索する

学生全員が作成した CD アルバムデータ XML 文書に対して検索を行います。 FLWOR 式を使って、検索結果がリスト 課題 3.3 の検索結果イメージとなるクエリーを

作成します。 リスト 課題 3.3 検索結果イメージ(下線部は任意のデータ)

<CDList> <CD> <Title>CD アルバム名 1</Title > <Artist>アーティスト名 1</Artist> </CD> <CD> <Title>CD アルバム名 2</Title > <Artist>アーティスト名 2</Artist> </CD> ・ ・ ・ </CDList>

クエリー式ができたら、実際にクエリーを実行し、リスト 課題 3.3 の検索結果イメージ

と同じような結果が表示されるかを確認しましょう。

Page 74: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 66 -

ここでは全学生が作成した CD アルバムデータ XML 文書を検索対象とし、リスト 課題

3.3 の検索結果イメージどおりに出力するには、for 節を使用します。for 節は、繰り返し処

理を行い、繰り返し処理を行うたびに変数に要素ノードなどをバインドします。また、for節を使用した場合の return 節は繰り返し処理のたびに return 節に記述された式を評価し、

繰り返し処理が完了したときに 1 つの返却値として、まとめられて返されます。この特徴

を利用して return 節を記述します。

<CDList>{ for return <CD> { } { } </CD> }</CDList>

return 節に繰り返し処理のたびに出力する要素の開始タグと終了タグを記述し、その間

にバインドした変数などを記述します。その際にバインドした変数などを XQuery の式と

して評価させたい場合には「 { } 」でバインドした変数などを囲みます。 上記の方法でリスト 課題 3.3 のような検索結果を出力するクエリー式を作成、実行し、

検索結果を確認しましょう。

Page 75: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 67 -

課題3.4 全 CD アルバムデータの一覧を作成する

学生全員が作成した CD アルバムデータ XML 文書に対して検索を行います。 FLWOR 式を使って、検索結果がリスト 課題 3.4 の検索結果イメージとなるクエリーを

作成します。 リスト 課題 3.4 検索結果イメージ(下線部は任意のデータ)

<CDList> <CD> <Title>CD アルバム名 1</Title > <Artist>アーティスト名 1</Artist> <MusicList> <Music Time="777" Title="曲名 1-1" /> <Music Time="171" Title="曲名 1-2" /> <Music Time="150" Title="曲名 1-3" /> ・ ・ ・ </MusicList> </CD> <CD> <Title>CD アルバム名 2</Title > <Artist>アーティスト名 2</Artist> <MusicList> <Music Time="676" Title="曲名 2-1" /> <Music Time="185" Title="曲名 2-2" /> <Music Time="145" Title="曲名 2-3" /> ・ ・ ・ </MusicList> </CD> ・ ・ ・ </CDList>

クエリー式ができたら、実際にクエリーを実行し、リスト 課題 3.4 の検索結果イメージ

と同じような結果が表示されるかを確認しましょう。

Page 76: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 68 -

リスト 課題 3.4 の検索結果イメージをみてわかるとおり、前述の課題 3.3 で作成したク

エリー式に MusicList 要素ノードとその子要素ノードを出力する記述を追加することで、

リスト 課題 3.4 の検索結果イメージを出力することができます。 上記の方法でリスト 課題 3.4 のような検索結果を出力するクエリー式を作成、実行し、

検索結果を確認しましょう。 ※ この実習での検索結果は、以降の実習で使用しますので、検索結果をコピーし、テキ

ストエディタなどにペーストし、任意のフォルダにファイルとして保存してください。そ

の際のファイル名は任意とします。また、検索結果のインデントで見づらい場合には、各

自見やすいようにインデントを調整してください。

Page 77: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第4章 CD アルバムデータの検索

- 69 -

参考4 クエリーの実行結果のファイル出力について

XQuery の仕様の中ではクエリー式の実行結果をファイルに出力することについては言

及していませんので、製品独自の機能となります。XML データベース製品によっては、

XQuery や XQuery の実行結果をファイルに出力できる機能を提供しているものもありま

す。 今回の実習で使用している Cyber Luxeon では、XQuery を保存する機能は提供されてい

ますが、XQuery の実行結果を保存する機能は提供されていませんので、クエリーダイアロ

グの実行結果確認画面から実行結果をコピーし、テキストエディタなどにペーストするこ

とで対応します。

図 参考 4-1 クエリーの実行結果確認画面

この部分をコピーし、テキスト

エディタなどにペーストする

Page 78: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

- 70 -

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録 5.1 課題の概要

第4章の 後の実習で得られた検索結果のデータを使用して、その中から自分の好きな

楽曲を選び、それぞれの好みの楽曲一覧 XML 文書を作成し、XML データベースに登録し

ます。 リスト 5.1-1 好みの楽曲一覧 XML 文書のサンプル(下線部は入力データ)

<?xml version="1.0" encoding="Shift_JIS"?> <CDList> <CD> <Name>山田太郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>笑える。何度聞いてもいい!!</Feeling> <Status>p</Status> </Music> </MusicList> </CD> </CDList>

図 5.1-1 好みの楽曲一覧 XML 文書の登録イメージ

Page 79: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

- 71 -

5.2 好みの楽曲一覧 XML 文書の構造

データの保存形式は XML ファイルとします。好みの楽曲一覧を XML として保存するた

め、検討の結果、次のようなスキーマ(構造)の XML でデータを保存することにしました。 リスト 5.2-1 好みの楽曲一覧 XML のスキーマ条件

1.ルート要素名を「CDList」とする 2.好みの楽曲一覧の CD 情報を「CD」要素とする 3.好みの楽曲一覧を作成した学生名を「Name」要素とする 4.曲目情報を「MusicList」要素とする 5.1 曲の情報を「Music」要素とし、出現回数は 1 回以上、上限なしとする 6.「Music」要素の「Artist」属性にアーティスト名を記述する 7.「Music」要素の「Time」属性の値は曲の長さを秒数で表し、正の整数とする 8.「Music」要素に記述された曲の感想を「Feeling」要素とする 9.「Music」要素に記述された曲の処理状況を「Status」要素とし、

『保留』を r(reserve)、『リストに追加』を p(pickup)とする

Page 80: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

- 72 -

リスト 5.2-1 をツリー構造にすると図 5.2-1 のようになります。

図 5.2-1 好みの楽曲一覧 XML 文書のツリー構造

CDList要素

Name要素

MusicList要素

Artist属性

Title属性

Music要素

CD要素

Feeling要素

Status要素

Time属性

Page 81: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

- 73 -

リスト 5.2-1 の XML のスキーマ条件を元に XML Schema を使用したスキーマ定義は、リ

スト 5.2-2 のようになります。 リスト 5.2-2 OriginalCDData.xsd

1: <?xml version="1.0" encoding="Shift_JIS"?> 2: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 3: <xs:element name="CDList"> 4: <xs:complexType> 5: <xs:sequence> 6: <xs:element ref="CD" /> 7: </xs:sequence> 8: </xs:complexType> 9: </xs:element> 10: 11: <xs:element name="CD"> 12: <xs:complexType> 13: <xs:sequence> 14: <xs:element ref="Name" /> 15: <xs:element ref="MusicList" /> 16: </xs:sequence> 17: </xs:complexType> 18: </xs:element> 19: 20: <xs:element name="Name" type="xs:string" /> 21: <xs:element name="MusicList"> 21: <xs:complexType> 22: <xs:sequence> 23: <xs:element ref="Music" minOccurs="1" maxOccurs="unbounded" /> 24: </xs:sequence> 25: </xs:complexType> 26: </xs:element> 27: 28: <xs:element name="Music"> 29: <xs:complexType> 30: <xs:sequence> 31: <xs:element ref="Feeling" /> 32: <xs:element ref="Status" /> 33: </xs:sequence> 34: <xs:attribute name="Artist" type="xs:string" /> 35: <xs:attribute name="Time" type="xs:nonNegativeInteger" /> 36: <xs:attribute name="Title" type="xs:string" /> 37: </xs:complexType> 38: </xs:element> 39: 40: <xs:element name="Feeling" type="xs:string" /> 41: <xs:element name="Status" type="xs:string" /> 42: </xs:schema>

Page 82: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

- 74 -

また実際に保存される XML ファイルは、リスト 5.2-3 のような XML となります。 リスト 5.2-3 OriginalCDData.xml(下線部は入力データ)

1: <?xml version="1.0" encoding="Shift_JIS"?> 2: <CDList> 3: <CD> 4: <Name>山田太郎</Name> 5: <MusicList> 6: <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> 7: <Feeling>笑える。何度聞いてもいい!!</Feeling> 8: <Status>p</Status> 9: </Music> 10: </MusicList> 11: </CD> 12: </CDList>

Page 83: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

- 75 -

5.3 課題の実習について

第2章の課題1と同様に、ここでもテキストエディタを使用して、好みの楽曲一覧 XML文書を作成し、第3章の課題2と同じ方法で XML データベースに作成した好みの楽曲一覧

XML 文書を登録します。 この章では課題全体の流れの「好みの楽曲一覧 XML 文書の作成」と「XML データベース

への登録」を実習します。

図 5.3-1 課題の実習箇所

好みの楽曲一覧 XML 文書の作成

XML データベースへの

登録

Page 84: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

- 76 -

課題4 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

課題4.1 好みの楽曲一覧 XML 文書の作成

それでは、リスト 5.2-3 を参考に、課題 3.4 の検索結果のファイルから好みの楽曲を選ん

で、XML 文書を作成します。また、好みの楽曲一覧 XML 文書を作成する際の注意事項は

以下のとおりです。 ・「Name」要素には各自の名前を記述し、姓と名の間にはスペースを入れない ・「Music」要素は、課題 3.4 の検索結果にある好きな曲数分出現する ・「Feeling」要素には曲の感想を記述する ・「Status」要素には「Music」要素として記述した曲に対して、保留状態にする場合

は『r』を、好みの楽曲一覧に追加する場合は『p』を入力する 好みの楽曲一覧 XML 文書の作成が終了したら、ファイル名を「FV_個人名(ローマ字).xml」(例:FV_TaroYamada.xml)として、任意のフォルダに保存します。 好みの楽曲一覧 XML 文書の保存ができたら、リスト 5.2-2 OriginalCDData.xsd と構造

が一致するか検証ツールを使って確認しましょう。

好みの楽曲一覧 XML 文書の作成

好みの楽曲一覧 XML 文書の登録

Page 85: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

- 77 -

課題4.2 XML データベースへの登録

管理ツール DXE Manager の [SurveyResults] パーティションの配下にある

[OriginalCDData]XML Store に作成した好みの楽曲一覧 XML 文書をドラッグ&ドロップ、

もしくは、メニューバーより「ファイル(F)」->「インポート(I)」->「ファイルシステム

から(F)・・・」を選択し、作成したファイルを選びます。 ※ 登録時に図 課題 4.2-1 のようなメニューが表示されますので、「サーバのデフォルト設

定を使用(D)」を選択してください。

図 課題 4.2-1 登録時のデータ格納方式の選択メニュー

好みの楽曲一覧 XML 文書の作成

好みの楽曲一覧 XML 文書の登録

Page 86: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第5章 好みの楽曲一覧 XML 文書の作成および XML データベースへの登録

- 78 -

また、好みの楽曲一覧 XML 文書の登録後のイメージは図 課題 4.2-2 のようになります。

図 課題 4.2-2 好みの楽曲一覧 XML 文書の登録後のイメージ

Page 87: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 79 -

第6章 検索結果の HTML 表示 6.1 課題の概要

第5章で登録したオリジナル CD データ XML 文書を元に XQuery を使って、検索結果を

HTML 文書として出力します。 初に各自作成したオリジナル CD データ XML 文書に対

して検索を行い、結果を HTML 文書として表示します。さらに全学生分のオリジナル CDデータ XML 文書に対して、人気楽曲のランキングなど出力するための XQuery を実行し、

結果を HTML 文書として表示します。

図 6.1-1 HTML 文書の表示イメージ

Page 88: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 80 -

6.2 課題の実習について

第4章の実習と同様に XQuery の FLWOR 式を使って、検索結果を HTML 文書として出

力するにはどのように記述すればよいのかを学習していきます。 XQuery の検索結果として XML 文書を出力する場合は、直接コンストラクタを使って、

要素の開始タグと終了タグをそのまま記述できます。HTML 文書を出力する場合も同様に、

直接コンストラクタを使用して、HTML タグをそのまま記述します。 リスト 6.2-1 検索対象となる XML 文書

<CDList> <CD> <Name>山田太郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>笑える。何度聞いてもいい!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 2" Time="185" Title="曲名 2-2"> <Feeling>泣きたいときに聴くとよい</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 3" Time="423" Title="曲名 3-3"> <Feeling>素晴らしい!!</Feeling> <Status>p</Status> </Music> </MusicList> </CD> </CDList>

Page 89: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 81 -

リスト 6.2-2 HTML 文書を出力する XQuery の例

<html> <head><title>CD リスト</title></head> <body> <table border="1"> <tr><td>アーティスト名</td><td>曲名</td></tr>{ for $music in //Music return <tr> <td>{string($music/@Artist)}</td> <td>{string($music/@Title)}</td> </tr> }</table> </body> </html>

図 6.2-1 リスト 6.2-2 の出力結果

この章では課題全体の流れの「検索結果の HTML 表示」を実習します。

図 6.2-2 課題の実習箇所

検索結果の HTML 表示

Page 90: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 82 -

課題5 検索結果の HTML 表示

課題5.1 オリジナル CD データの HTML 表示

各自作成したオリジナル CD データ XML 文書に対して検索を行い、結果を HTML 文書

として出力します。 課題5.1-1 個人の CD データの HTML 表示

FLWOR 式を使って、検索結果が図 課題 5.1-1 の HTML 文書となるようなクエリー式を

作成します。ここでは各自作成したオリジナル CD データの内容を HTML 文書として表示

します。

図 課題 5.1-1 検索結果イメージ

Page 91: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 83 -

また、検索結果の HTML 文書のソースコードはリスト 課題 5.1-1 のとおりです。 リスト 課題 5.1-1 検索結果の HTML 文書のソースコード(下線部は XML データ)

<html> <head> <title>山田太郎のオリジナル CD リスト</title> </head> <body> <h2>山田太郎</h2> <br/> <h3>曲名 1-1 12 分 57 秒</h3> <a>感想:笑える。何度聞いてもいい!!</a> <br/> <a>オリジナル CD:追加済み</a> <br/> <h3>曲名 2-2 3 分 5 秒</h3> <a>感想:泣きたいときに聴くとよい</a> <br/> <a>オリジナル CD:追加済み</a> <br/> <h3>曲名 3-3 7 分 3 秒</h3> <a>感想:素晴らしい!!</a> <br/> <a>オリジナル CD:追加済み</a> <br/> </body> </html>

クエリー式ができたら、実際にクエリー式を実行し、図 課題 5.1-1 の検索結果イメージ、

またはリスト 課題5.1-1の検索結果のHTML文書のソースコードが出力されているかを確

認しましょう。

Page 92: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 84 -

リスト 課題5.1-1の検索結果のHTML文書のソースコードから、検索の対象となるXML文書の Name 要素を1度だけ、Music 要素は複数回(ここでは 3 回)、変数にバインドし、

HTML 文書として出力すればよいことがわかります。

<CDList> <CD> <Name>山田太郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>笑える。何度聞いてもいい!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 2" Time="185" Title="曲名 2-2"> <Feeling>泣きたいときに聴くとよい</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 3" Time="423" Title="曲名 3-3"> <Feeling>素晴らしい!!</Feeling> <Status>p</Status> </Music> </MusicList> </CD> </CDList>

1 度だけ変数にバインド

複数回(3 回)変数にバインド

Page 93: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 85 -

return 節には返却する式以外にも FLWOR 式を記述することができますので、ここでは

let 節を使って、Name 要素の内容を変数にバインドし、return 節で HTML のタイトルの

一部と見出しとして出力し、さらに for 節を使って Music 要素を変数にバインドし、return節で Title 属性と Time 属性、Feeling 要素、Status 要素の内容を繰り返し出力するクエリ

ー式を作成します。また、let 節に対応する return 節、for 節に対応する return 節では複数

の式を返却しますので、直接コンストラクタ( { } )または、小括弧( ( ) )を使って、

返却する式を1つにまとめます。

<html>{ let return( , <body>{ , ・ ・ for return( , ・ ・ ) }</body> ) }</html>

要素の内容を出力するには、テキストノードを指定します。Name 要素の内容を出力す

る場合は以下のように記述します。

$cd/Name/text()

属性値を出力するには、string 関数を使用します。Artist 属性の値を出力するには以下の

ように記述します。

string($music/@Artist)

Page 94: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 86 -

対象となる XML 文書の Time 属性の値は秒単位で表現されていますので、これを分と秒

に変換します。秒から分に換算するには、Time 属性の値を 60 で除算(div を使用)し、そ

の結果以下の整数値の 大値を取得(floor 関数を使用)し、Time 属性の値を 60 で除算し

た余り(mod を使用)を取得します。

floor($music/@Time div 60)

$music/@Time mod 60

対象となる XML 文書の Status 要素はオリジナル CD への追加状況を表しています。

Status 要素の内容が "p" の場合は、「追加済み」、Status 要素の内容が "r" の場合は「保

留」という文字列を表示します。この場合は If 式を使って記述します。If 式の構文は以下

のとおりです。

if ( 式 ) then 式が真の場合の式 else 式が偽の場合の式

構文に従って、Status 要素の内容を判断し、該当する文字列を出力するように記述しま

す。 上記の説明とリスト 課題 5.1-1 の検索結果の HTML 文書のソースコードを参考にして、

リスト 課題5.1-1のような検索結果のHTML文書のソースコードが表示されるクエリー式

を作成、実行し、検索結果を確認しましょう。ソースコードが確認できたら、検索結果を

コピーし、テキストエディタなどにペーストして、ファイル名を「exc05_01-01.html」と

し、OS の任意のフォルダに保存します。保存したファイルをブラウザで表示し、図 課題

5.1-1 の検索結果イメージと同じかどうかを確認しましょう。

Page 95: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 87 -

課題5.1-2 表を使った個人の CD データの HTML 表示

FLWOR 式を使って、検索結果が図 課題 5.1-2 の HTML 文書となるようなクエリー式を

作成します。ここでは各自作成したオリジナル CD データの内容を表形式で表示します。

図 課題 5.1-2 検索結果イメージ

Page 96: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 88 -

また、検索結果の HTML 文書のソースコードはリスト 課題 5.1-2 のとおりです。 リスト 課題 5.1-2 検索結果の HTML 文書のソースコード(下線部は XML データ)

<html> <head><title>山田太郎のオリジナル CD リスト</title></head> <body> <h2>山田太郎のオリジナル CD リスト</h2> <table border="1"> <tr> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> <th>感想</th> <th>オリジナル CD</th> </tr> <tr> <td>アーティスト名 1</td> <td>曲名 1-1</td> <td>12 分 57 秒</td> <td>笑える。何度聞いてもいい!!</td> <td>追加済み</td> </tr> <tr> <td>アーティスト名 2</td> <td>曲名 2-2</td> <td>3 分 5 秒</td> <td>泣きたいときに聴くとよい</td> <td>追加済み</td> </tr> <tr> <td>アーティスト名 3</td> <td>曲名 3-3</td> <td>7 分 3 秒</td> <td>素晴らしい!!</td> <td>追加済み</td> </tr> </table> </body> </html>

クエリー式ができたら、実際にクエリー式を実行し、図 課題 5.1-2 の検索結果イメージ、

またはリスト 課題5.1-2の検索結果のHTML文書のソースコードが出力されているかを確

認しましょう。

Page 97: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 89 -

課題 5.1-2 は課題 5.1-1 の表示形式を表形式に変更したものです。よって、検索対象とな

る XML 文書から取得する要素は同じとなりますので、Name 要素を1度だけ、Music 要素

は複数回(ここでは 3 回)、変数にバインドし、HTML 文書として出力すればよいことがわ

かります。

<CDList> <CD> <Name>山田太郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>笑える。何度聞いてもいい!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 2" Time="185" Title="曲名 2-2"> <Feeling>泣きたいときに聴くとよい</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 3" Time="423" Title="曲名 3-3"> <Feeling>素晴らしい!!</Feeling> <Status>p</Status> </Music> </MusicList> </CD> </CDList>

1 度だけ変数にバインド

複数回(3 回)変数にバインド

Page 98: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 90 -

FLWOR 式の構造にも変更はなく、取得したデータを HTML の表形式で出力するための

タグを記述します。

<html>{ let return( , ・ ・ for return ・ ・ ) }</html>

上記の説明とリスト 課題 5.1-2 の検索結果の HTML 文書のソースコードを参考にして、リ

スト 課題5.1-2のような検索結果のHTML文書のソースコードが表示されるクエリー式を

作成、実行し、検索結果を確認しましょう。ソースコードが確認できたら、検索結果をコ

ピーし、テキストエディタなどにペーストして、ファイル名を「exc05_01-02.html」とし、

OS の任意のフォルダに保存します。保存したファイルをブラウザで表示し、図 課題 5.1-2の検索結果イメージと同じかどうかを確認しましょう。

Page 99: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 91 -

課題5.1-3 表を使った全学生分の CD データの HTML 表示

課題 5.1-3 に入る前に、全学生分の好みの楽曲一覧 XML 文書が登録されたこと確認して、

バインダを作成します。バインダのファイル名は「OriginalCDList.xml」とします。ここ

で作成したバインダは以降の実習で使用します。

図 課題 5.1-3-1 バインダの作成イメージ

※ バインダの作成は学生の代表者もしくは担当教員にて行ってください。 課題5.1-3、課題5.2ではここで作成したバインダ「OriginalCDList.xml」を使

っていきます。

Page 100: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 92 -

FLWOR 式を使って、検索結果が図 課題 5.1-3-2 の HTML 文書となるようなクエリー式

を作成します。ここでは全学生分の XML データを対象に、オリジナル CD データの内容を

表形式で表示します。

図 課題 5.1-3-2 検索結果イメージ

Page 101: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 93 -

また、検索結果の HTML 文書のソースコードはリスト 課題 5.1-3-1 のとおりです。 リスト 課題 5.1-3-1 検索結果の HTML 文書のソースコード(下線部は XML データ)

<html> <head><title>全学生の CD リスト</title></head> <body> <h2>全学生の CD リスト</h2> <table border="1"> <tr> <th>学生名</th> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> <th>感想</th> <th>オリジナル CD</th> </tr> <tr> <td>高橋三郎</td> <td>アーティスト名 1</td> <td>曲名 1-1</td> <td>12 分 57 秒</td> <td>こんな曲があったとは知らなかった。</td> <td>保留</td> </tr> <tr> <td>高橋三郎</td> <td>アーティスト名 2</td> <td>曲名 2-2</td> <td>3 分 5 秒</td> <td>おもいっきり泣いた。。。</td> <td>追加済み</td> </tr> <tr> <td>山田太郎</td> <td>アーティスト名 1</td> <td>曲名 1-1</td> <td>12 分 57 秒</td> <td>笑える。何度聞いてもいい!!</td> <td>追加済み</td> </tr> <tr> <td>山田太郎</td> <td>アーティスト名 2</td> <td>曲名 2-2</td>

Page 102: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 94 -

<td>3 分 5 秒</td> <td>泣きたいときに聴くとよい</td> <td>追加済み</td> </tr> <tr> <td>山田太郎</td> <td>アーティスト名 3</td> <td>曲名 3-3</td> <td>7 分 3 秒</td> <td>素晴らしい!!</td> <td>追加済み</td> </tr> <tr> <td>鈴木次郎</td> <td>アーティスト名 1</td> <td>曲名 1-1</td> <td>12 分 57 秒</td> <td>面白い!!</td> <td>追加済み</td> </tr> <tr> <td>鈴木次郎</td> <td>アーティスト名 3</td> <td>曲名 3-1</td> <td>4 分 7 秒</td> <td>結構、泣ける曲です</td> <td>保留</td> </tr> </table> </body> </html>

クエリー式ができたら、実際にクエリー式を実行し、図 課題 5.1-3-1 の検索結果イメー

ジ、またはリスト 課題 5.1-3-1 の検索結果の HTML 文書のソースコードが出力されている

かを確認しましょう。

Page 103: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 95 -

課題 5.1-3 では検索対象となる XML 文書が複数となり、出力の対象となる要素は Name要素、Music 要素と Music 要素の子要素です。これらの要素の内容や属性値を HTML 文書

として出力すればよいことがわかります。

<CDList> <CD> <Name>山田太郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>笑える。何度聞いてもいい!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 2" Time="185" Title="曲名 2-2"> <Feeling>泣きたいときに聴くとよい</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 3" Time="423" Title="曲名 3-3"> <Feeling>素晴らしい!!</Feeling> <Status>p</Status> </Music> </MusicList> </CD> </CDList>

<CDList> <CD> <Name>高橋三郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>こんな曲があったとは知らなかった。</Feeling> <Status>r</Status> </Music> <Music Artist="アーティスト名 2" Time="185" Title="曲名 2-2"> <Feeling>おもいっきり泣いた。。。</Feeling> <Status>p</Status> </Music> </MusicList> </CD> </CDList>

出力の対象となる要素

出力の対象となる要素

出力の対象となる要素

出力の対象となる要素

Page 104: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 96 -

<CDList> <CD> <Name>鈴木次郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>面白い!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 3" Time="247" Title="曲名 3-1"> <Feeling>結構、泣ける曲です</Feeling> <Status>r</Status> </Music> </MusicList> </CD> </CDList>

課題 5.1-2 と異なる点は、好みの楽曲ごとに選んだ学生名が出力されますので、クエリー

式を作成するときには注意しましょう。

出力の対象となる要素

出力の対象となる要素

Page 105: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 97 -

課題 5.1-3 では要素の内容や属性値を繰り返して出力しますので、以下のような構造のク

エリー式になります。

<html> ・ ・ for return </html>

Name 要素の出力については、Music 要素を変数にバインドし、そこから Path 式で階層

を辿って Name 要素の内容を出力する方法と、Name 要素だけを変数にバインドして、そ

の変数を使用して出力する方法の2種類がありますので、どちらの方法でも構いません。 上記の説明とリスト 課題 5.1-3-1 の検索結果の HTML 文書のソースコードを参考にして、

リスト 課題 5.1-3-1のような検索結果のHTML文書のソースコードが表示されるクエリー

式を作成、実行し、検索結果を確認しましょう。ソースコードが確認できたら、検索結果

をコピーし、テキストエディタなどにペーストして、ファイル名を「exc05_01-03.html」とし、OS の任意のフォルダに保存します。保存したファイルをブラウザで表示し、図 課題 5.1-3-2 の検索結果イメージと同じかどうかを確認しましょう。

Page 106: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 98 -

課題5.2 特定楽曲選択者リストの HTML 表示

学生全員が作成したオリジナル CD データ XML 文書(OriginalCDList.xml)に対して

検索を行います。 課題5.2-1 特定楽曲選択者リストの HTML 表示

FLWOR 式を使って、検索結果が図 課題 5.2-1 の HTML 文書となるようなクエリー式を

作成します。ここでは特定の楽曲名を検索条件として、その楽曲を選択した学生名と感想、

オリジナル CD への追加の可否を表示します。

図 課題 5.2-1 検索結果イメージ

Page 107: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 99 -

また、検索結果の HTML 文書のソースコードはリスト 課題 5.2-1 のとおりです。 リスト 課題 5.2-1 検索結果の HTML 文書のソースコード(下線部は XML データ)

<html> <head><title>曲名 1-1 の選択者リスト</title></head> <body> <h2>曲名 1-1 の選択者リスト</h2> <table border="1"> <tr> <th>学生名</th> <th>感想</th> <th>オリジナル CD</th> </tr> <tr> <td>高橋三郎</td> <td>こんな曲があったとは知らなかった。</td> <td>保留</td> </tr> <tr> <td>山田太郎</td> <td>笑える。何度聞いてもいい!!</td> <td>追加済み</td> </tr> <tr> <td>鈴木次郎</td> <td>面白い!!</td> <td>追加済み</td> </tr> </table> </body> </html>

クエリー式ができたら、実際にクエリー式を実行し、図 課題 5.2-1 の検索結果イメージ、

またはリスト 課題5.2-1の検索結果のHTML文書のソースコードが出力されているかを確

認しましょう。

Page 108: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 100 -

課題 5.2-1 では検索対象となる XML 文書が複数となり、出力の対象となる要素は Name要素、Music 要素と Music 要素の子要素です。さらに Music 要素の Title 属性の値によっ

て出力するデータをフィルタリングしますので、これらの要素の内容や属性値を HTML 文

書として出力すればよいことがわかります。以下は、Music 要素の Title 属性の値が"曲名

1-1"であるデータにフィルタリングした場合の例です。

<CDList> <CD> <Name>山田太郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>笑える。何度聞いてもいい!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 2" Time="185" Title="曲名 2-2"> <Feeling>泣きたいときに聴くとよい</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 3" Time="423" Title="曲名 3-3"> <Feeling>素晴らしい!!</Feeling> <Status>p</Status> </Music> </MusicList> </CD> </CDList>

<CDList> <CD> <Name>高橋三郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>こんな曲があったとは知らなかった。</Feeling> <Status>r</Status> </Music> <Music Artist="アーティスト名 2" Time="185" Title="曲名 2-2"> <Feeling>おもいっきり泣いた。。。</Feeling> <Status>p</Status> </Music> </MusicList> </CD> </CDList>

出力の対象となる要素

出力の対象となる要素

Page 109: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 101 -

<CDList> <CD> <Name>鈴木次郎</Name> <MusicList> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>面白い!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 3" Time="247" Title="曲名 3-1"> <Feeling>結構、泣ける曲です</Feeling> <Status>r</Status> </Music> </MusicList> </CD> </CDList>

出力の対象となる要素

Page 110: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 102 -

課題 5.2-1 では要素の内容や属性値を繰り返して出力しますので、以下のような構造のク

エリー式になります。

<html> ・ ・ for ・ ・ return </html>

データのフィルタリングについては、where 節を使用する方法と for 節の XPath 式に述

部を記述する方法がありますので、この2つの方法でデータのフィルタリングを行いまし

ょう。

where $music/@Title = "曲名 1-1"

for $music in //Music[@Title="曲名 1-1"]

Name 要素の出力については、Music 要素を変数にバインドし、そこから XPath 式で階

層を辿って Name 要素の内容を出力する方法と、Name 要素だけを変数にバインドして、

その変数を使用して出力する方法の2種類がありますので、どちらの方法でも構いません。 上記の説明とリスト 課題 5.2-1 の検索結果の HTML 文書のソースコードを参考にして、リ

スト 課題5.2-1のような検索結果のHTML文書のソースコードが表示されるクエリー式を、

where 節を使って作成、実行し、検索結果を確認しましょう。ソースコードが確認できた

ら、検索結果をコピーし、テキストエディタなどにペーストして、ファイル名を

「exc05_02-01.html」とし、OS の任意のフォルダに保存します。保存したファイルをブラ

ウザで表示し、図 課題 5.2-1 の検索結果イメージと同じかどうかを確認しましょう。 where 節を使ったクエリー式ができたら、今度は where 節を削除し、for 節の XPath 式に

述部を記述して、上記と同じ結果が得られるかを確認しましょう。

Page 111: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 103 -

課題5.2-2 人気楽曲ランキングの HTML 表示

FLWOR 式を使って、検索結果が図 課題 5.2-2 の HTML 文書となるようなクエリー式を

作成します。ここでは学生全員分の XML データを対象に、一番多く選ばれた楽曲順にアー

ティスト名、曲名、演奏時間、人数を表示します。また、検索結果を表示する際には人数

をキーにデータを降順に並び替えます。

図 課題 5.2-2 検索結果イメージ

Page 112: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 104 -

また、検索結果の HTML 文書のソースコードはリスト 課題 5.2-2 のとおりです。 リスト 課題 5.2-2 検索結果の HTML 文書のソースコード(下線部は XML データ)

<html> <head><title>人気楽曲ランキング</title></head> <body> <h2>人気楽曲ランキング</h2> <table border="1"> <tr> <th>アーティスト名</th><th>曲名</th><th>演奏時間</th><th>人数</th> </tr> <tr> <td>アーティスト名 1</td> <td>曲名 1-1</td> <td>12 分 57 秒</td> <td>3</td> </tr> <tr> <td>アーティスト名 2</td> <td>曲名 2-2</td> <td>3 分 5 秒</td> <td>2</td> </tr> <tr> <td>アーティスト名 3</td> <td>曲名 3-1</td> <td>4 分 7 秒</td> <td>1</td> </tr> <tr> <td>アーティスト名 3</td> <td>曲名 3-3</td> <td>7 分 3 秒</td> <td>1</td> </tr> </table> </body> </html>

クエリー式ができたら、実際にクエリー式を実行し、図 課題 5.2-2 の検索結果イメージ、

またはリスト 課題5.2-2の検索結果のHTML文書のソースコードが出力されているかを確

認しましょう。

Page 113: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 105 -

ここでは全学生分の XML 文書を対象に人気楽曲のランキングを選んだ学生数が多い順

にデータを表示するクエリー式を作成します。 このクエリー式の流れとしては、以下のようになります。 ① 全学生分のデータの Music 要素以下を変数 1 にバインドする ② 変数1を元に重複を除いた楽曲名リストを変数2にバインドする ③ 変数1の楽曲名と変数2の楽曲名が同じものの件数を変数3にバインドする ④ アーティスト名、曲名、演奏時間、人数を返却する ⑤ 選んだ学生数を降順、かつ楽曲名を昇順にデータをソートする

<html> ・ ・ let for let return </html>

Page 114: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 106 -

次に実際に作成するクエリー式の詳細を説明します。 ① 全学生分のデータの Music 要素以下を変数 1 にバインドする

let $musicList := //Music

let 節を使って、Music 要素以下を musicList 変数にバインドします。バインドされた

musicList 変数のイメージは以下のとおりとなり、このデータを使用して人気楽曲ラン

キング一覧を作成していきます。

<Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>笑える。何度聞いてもいい!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 2" Time="185" Title="曲名 2-2"> <Feeling>泣きたいときに聴くとよい</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 3" Time="423" Title="曲名 3-3"> <Feeling>素晴らしい!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>こんな曲があったとは知らなかった。</Feeling> <Status>r</Status> </Music> <Music Artist="アーティスト名 2" Time="185" Title="曲名 2-2"> <Feeling>おもいっきり泣いた。。。</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 1" Time="777" Title="曲名 1-1"> <Feeling>面白い!!</Feeling> <Status>p</Status> </Music> <Music Artist="アーティスト名 3" Time="247" Title="曲名 3-1"> <Feeling>結構、泣ける曲です</Feeling> <Status>r</Status> </Music>

FV_TaroYamada

.xml のデータ

FV_SaburoTaka

hashi.xml のデータ

FV_JiroSuzuki.

xml のデータ

Page 115: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 107 -

② 変数1を元に重複を除いた楽曲名リストを変数2にバインドする

for $title in distinct-values($musicList/@Title)

変数または XML 文書の中から重複した値を取り除くには、distinct-values 関数を使用

します。distinct-values 関数の引数には XPath 式など記述することができ、重複を取り

除くためのキーとなる値を指定します。ここでは Title 属性をキーとして重複した楽曲

名を取り除きます。title 変数にバインドされる値のイメージは以下のとおりです。

曲名 1-1 曲名 2-2 曲名 3-3 曲名 3-1

※ XQuery1.0 仕様では、distinct-values 関数は上記のように値を返却するようになって

いますが、XQuery のワーキングドラフトの段階では、distinct-values 関数はターゲッ

トとなる要素や属性を返却するようになっていますので、上記の結果とは異なります。

XQuery のワーキングドラフトの段階での distinct-values 関数の返却値は以下のとお

りです。

Title="曲名 1-1" Title="曲名 2-2" Title="曲名 3-3" Title="曲名 3-1"

③ 変数1の楽曲名と変数2の楽曲名が同じものの件数を変数3にバインドする

let $cnt := count($musicList[@Title = $title])

musicList 変数の中にある Title 属性と title 変数が一致するデータ件数を、count 関数

を使用して cnt 変数にバインドします。ここで Title 属性と title 変数が一致するデータ

件数を変数にバインドすることでデータをソートするキーとして利用できます。

Page 116: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 108 -

④ アーティスト名、曲名、演奏時間、人数を返却する アーティスト名、曲名、演奏時間、人数の値を<TD>タグで囲んで出力します。 ⑤ 選んだ学生数を降順、かつ楽曲名を昇順にデータをソートする データをソートする場合、XML データベースで実装されている XQuery によって記述

が変わってきます。ワーキングドラフト段階の XQuery を実装している XML データベ

ースでは以下のような記述になります。sortby 句を return 節の後に記述する場合、

return 節内に記述されているタグで並び替えを行いますので、ここでは sortby 句の式

に<TD>タグを指定します。学生数は<TD>タグの4番目、曲名は<TD>タグの2番目に

ありますので、以下のように記述します。

sortby(td[4] descending,td[2] ascending)

※ XQuery1.0 を実装している XML データベースでは以下のような記述になります。

order by 節は return 節の前に記述しますので、手順の「④ アーティスト名、曲名、

演奏時間、人数を返却する」と「⑤ 選んだ学生数を降順、かつ楽曲名を昇順にデー

タをソートする」が入れ替わります。

order by $cnt descending, $title ascending

記述方法に違いはありますが、処理される結果は同じとなります。 上記の説明とリスト 課題 5.2-2 の検索結果の HTML 文書のソースコードを参考にして、

リスト 課題5.2-2のような検索結果のHTML文書のソースコードが表示されるクエリー式

を作成、実行し、検索結果を確認しましょう。ソースコードが確認できたら、検索結果を

コピーし、テキストエディタなどにペーストして、ファイル名を「exc05_02-02.html」と

し、OS の任意のフォルダに保存します。保存したファイルをブラウザで表示し、図 課題

5.2-2 の検索結果イメージと同じかどうかを確認しましょう。

Page 117: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 109 -

課題5.2-3 オリジナル CD への追加状況一覧の HTML 表示

FLWOR 式を使って、検索結果が図 課題 5.2-3 の HTML 文書となるようなクエリー式を

作成します。ここでは全学生分のオリジナル CD データを対象に、オリジナル CD への追

加状況別のリストを表形式で表示します。また、表示する際にはアーティスト名、楽曲名

をキーに昇順に並び替えます。

図 課題 5.2-3 検索結果イメージ

Page 118: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 110 -

また、検索結果の HTML 文書のソースコードはリスト 課題 5.2-3 のとおりです。 リスト 課題 5.2-3 検索結果の HTML 文書のソースコード(下線部は XML データ)

<html> <head><title>オリジナル CD 追加状況</title></head> <body> <h2>オリジナル CD 追加状況</h2> <h3>追加済み楽曲リスト</h3> <table border="1"> <tr> <th>学生名</th><th>アーティスト名</th><th>曲名</th><th>演奏時間</th> </tr> <tr> <td>山田太郎</td> <td>アーティスト名 1</td> <td>曲名 1-1</td> <td>12 分 57 秒</td> </tr> <tr> <td>鈴木次郎</td> <td>アーティスト名 1</td> <td>曲名 1-1</td> <td>12 分 57 秒</td> </tr> <tr> <td>山田太郎</td> <td>アーティスト名 2</td> <td>曲名 2-2</td> <td>3 分 5 秒</td> </tr> <tr> <td>高橋三郎</td> <td>アーティスト名 2</td> <td>曲名 2-2</td> <td>3 分 5 秒</td> </tr> <tr> <td>山田太郎</td> <td>アーティスト名 3</td> <td>曲名 3-3</td> <td>7 分 3 秒</td> </tr> </table> <br/> <h3>保留中楽曲リスト</h3> <table border="1">

Page 119: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 111 -

<tr> <th>学生名</th><th>アーティスト名</th><th>曲名</th><th>演奏時間</th> </tr> <tr> <td>高橋三郎</td> <td>アーティスト名 1</td> <td>曲名 1-1</td> <td>12 分 57 秒</td> </tr> <tr> <td>鈴木次郎</td> <td>アーティスト名 3</td> <td>曲名 3-1</td> <td>4 分 7 秒</td> </tr> </table> </body> </html>

クエリー式ができたら、実際にクエリー式を実行し、図 課題 5.2-3 の検索結果イメージ、

またはリスト 課題5.2-3の検索結果のHTML文書のソースコードが出力されているかを確

認しましょう。

Page 120: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

第6章 検索結果の HTML 表示

- 112 -

図 課題 5.2-3 の検索結果イメージやリスト 課題 5.2-3 の検索結果の HTML 文書のソー

スコードから追加済みの楽曲一覧と保留中の楽曲一覧の2つの表を出力しますので、以下

のような構造のクエリー式になります。

<html> ・ ・ for return ・ ・ for return </html>

データのフィルタリングについては、where 節を使用する方法と for 節の XPath 式に述

部を記述する方法がありますので、この2つの方法でデータのフィルタリングを行い、結

果を確認しましょう。また、データのソートについては sortby 句を使用します。 上記の説明とリスト 課題 5.2-3 の検索結果の HTML 文書のソースコードを参考にして、

リスト 課題5.2-3のような検索結果のHTML文書のソースコードが表示されるクエリー式

を作成、実行し、検索結果を確認しましょう。ソースコードが確認できたら、検索結果を

コピーし、テキストエディタなどにペーストして、ファイル名を「exc05_02-03.html」と

し、OS の任意のフォルダに保存します。保存したファイルをブラウザで表示し、図 課題

5.2-3 の検索結果イメージと同じかどうかを確認しましょう。

追加済み楽曲一覧を出力

保留中楽曲一覧を出力

Page 121: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 113 -

付録 A 課題3、課題5の解答例 課題 3.1-1 の解答例

<CD>{ let $title := //Title return $title }</CD>

または

<CD>{ for $title in //Title return $title }</CD>

課題 3.1-2 の解答例

<CD>{ let $cd := //CD return $cd/Artist }</CD>

または

<CD>{ for $cd in //CD return $cd/Artist }</CD>

<CD>{ let $cd := //CD return <Artist>{$cd/Artist/text()}</Artist> }</CD>

または

<CD>{ for $cd in //CD return <Artist>{$cd/Artist/text()}</Artist> }</CD>

Page 122: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 114 -

課題 3.1-3 の解答例

<CD>{ for $title in //Title return ($title,$title/../Artist) }</CD>

または <CD>{ let $title := //Title, $artist := $title/../Artist return ($title,$artist) }</CD>

課題 3.2 の解答例

<CD>{ for $cd in //CD return($cd/Title,$cd/Artist,$cd/MusicList) }</CD>

または

<CD>{ let $title := //Title, $artist := //Artist, $musicList := //MusicList return($title,$artist,$musicList) }</CD>

課題 3.3 の解答例

<CDList>{ for $title in //Title let $artist := $title/../Artist return <CD> {$title} {$artist} </CD> }</CDList>

Page 123: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 115 -

課題 3.4 の解答例

<CDList>{ for $title in //Title let $artist := $title/../Artist, $musicList := $title/../MusicList return <CD> {$title} {$artist} {$musicList} </CD> }</CDList>

または

<CDList>{ for $cd in //CD return <CD> {$cd/Title} {$cd/Artist} {$cd/MusicList} </CD> }</CDList>

Page 124: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 116 -

課題 5.1-1 の解答例

<html>{ let $name := //Name return( <head><title>{$name/text()}のオリジナル CD リスト</title></head>, <body>{ <h2>{$name/text()}</h2>, <br/>, for $music in //Music return( <h3>{string($music/@Title)} {floor($music/@Time div 60)}分{$music/@Time mod 60}秒</h3>, <a>感想:{$music/Feeling/text()}</a>, <br/>, <a>オリジナル CD:{if($music/Status/text()="p") then "追加済み" else "保留

"}</a>, <br/> ) }</body> ) }</html>

または <html>{ let $cd := //CD return( <head><title>{$cd/Name/text()}のオリジナル CD リスト</title></head>, <body>{ <h2>{$cd/Name/text()}</h2>, <br/>, for $music in $cd/MusicList/Music return( <h3>{string($music/@Title)} {floor($music/@Time div 60)}分{$music/@Time mod 60}秒</h3>, <a>感想:{$music/Feeling/text()}</a>, <br/>, <a>オリジナル CD:{if($music/Status/text()="p") then "追加済み" else "保留

"}</a>, <br/> ) }</body> ) }</html>

Page 125: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 117 -

課題 5.1-2 の解答例

<html>{ let $cd := //CD return( <head><title>{$cd/Name/text()}のオリジナル CD リスト</title></head>, <body>{ <h2>{$cd/Name/text()}のオリジナル CD リスト</h2>, <table border="1"> <tr> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> <th>感想</th> <th>オリジナル CD</th> </tr>{ for $music in $cd/MusicList/Music return <tr> <td>{string($music/@Artist)}</td> <td>{string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{$music/@Time mod 60}秒</td> <td>{$music/Feeling/text()}</td> <td>{if($music/Status/text()="p") then "追加済み" else "保留"}</td> </tr> }</table> }</body> ) }</html>

Page 126: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 118 -

課題 5.1-3 の解答例

<html> <head><title>全学生の CD リスト</title></head> <body> <h2>全学生の CD リスト</h2> <table border="1"> <tr> <th>学生名</th> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> <th>感想</th> <th>オリジナル CD</th> </tr>{ for $music in //Music let $name := $music/../../Name return <tr> <td>{$name/text()}</td> <td>{string($music/@Artist)}</td> <td>{string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{$music/@Time mod 60}秒</td> <td>{$music/Feeling/text()}</td> <td>{if($music/Status/text()="p") then "追加済み" else "保留"}</td> </tr> }</table> </body> </html>

Page 127: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 119 -

課題 5.2-1 の解答例 - where 節を使用した場合

<html> <head><title>曲名 1-1 の選択者リスト</title></head> <body> <h2>曲名 1-1 の選択者リスト</h2> <table border="1"> <tr><th>学生名</th><th>感想</th><th>オリジナル CD</th></tr>{ for $music in //Music let $name := $music/../../Name where $music/@Title = "曲名 1-1" return <tr> <td>{$name/text()}</td> <td>{$music/Feeling/text()}</td> <td>{if($music/Status/text()="p") then "追加済み" else "保留"}</td> </tr> }</table> </body> </html>

課題 5.2-1 の解答例 - XPath の述部を使用した場合

<html> <head><title>曲名 1-1 の選択者リスト</title></head> <body> <h2>曲名 1-1 の選択者リスト</h2> <table border="1"> <tr><th>学生名</th><th>感想</th><th>オリジナル CD</th></tr>{ for $music in //Music[@Title="曲名 1-1"] let $name := $music/../../Name return <tr> <td>{$name/text()}</td> <td>{$music/Feeling/text()}</td> <td>{if($music/Status/text()="p") then "追加済み" else "保留"}</td> </tr> }</table> </body> </html>

Page 128: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 120 -

課題 5.2-2 の解答例 - sortby 句を使用した場合

<html> <head><title>人気楽曲ランキング</title></head> <body> <h2>人気楽曲ランキング</h2> <table border="1"> <tr> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> <th>人数</th> </tr>{ let $musicList := //Music for $title in distinct-values($musicList/@Title) let $cnt := count($musicList[@Title = $title]) let $music := $musicList[@Title = $title][1] return <tr> <td>{string($music/@Artist)}</td> <td>{string($title)}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> <td>{$cnt}</td> </tr> sortby(td[4] descending,td[2] ascending) }</table> </body> </html>

Page 129: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 121 -

課題 5.2-2 の解答例 - order by 節を使用した場合

<html> <head><title>人気楽曲ランキング</title></head> <body> <h2>人気楽曲ランキング</h2> <table border="1"> <tr> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> <th>人数</th> </tr>{ let $musicList := //Music for $title in fn:distinct-values($musicList/@Title) let $music := $musicList[@Title = $title][1] let $cnt := fn:count($musicList[@Title = $title]) order by $cnt descending, $title ascending return <tr> <td>{fn:string($music/@Artist)}</td> <td>{$title}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> <td>{$cnt}</td> </tr> }</table> </body> </html>

Page 130: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 122 -

課題 5.2-3 の解答例 - sortby 句、where 節を使用した場合

<html> <head><title>オリジナル CD 追加状況</title></head> <body> <h2>オリジナル CD 追加状況</h2> <h3>追加済み楽曲リスト</h3>{ <table border="1"> <tr> <th>学生名</th><th>アーティスト名</th><th>曲名</th><th>演奏時間</th> </tr>{ for $music in //Music sortby(./@Artist,./@Title) where $music/Status/text()="p" return <tr> <td>{$music/../../Name/text()}</td> <td>{string($music/@Artist)}</td> <td>{string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> </tr> }</table> }<br/> <h3>保留中楽曲リスト</h3>{ <table border="1"> <tr> <th>学生名</th> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> </tr>{ for $music in //Music sortby(./@Artist,./@Title) where $music/Status/text()="r" return <tr> <td>{$music/../../Name/text()}</td> <td>{string($music/@Artist)}</td> <td>{string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> </tr> }</table> }</body> </html>

Page 131: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 123 -

課題 5.2-3 の解答例 - XPath の述部、sortby 句を使用した場合

<html> <head><title>オリジナル CD 追加状況</title></head> <body> <h2>オリジナル CD 追加状況</h2> <h3>追加済み楽曲リスト</h3>{ <table border="1"> <tr> <th>学生名</th><th>アーティスト名</th><th>曲名</th><th>演奏時間</th> </tr>{ for $music in //Music[Status/text()="p"] sortby(./@Artist,./@Title) return <tr> <td>{$music/../../Name/text()}</td> <td>{string($music/@Artist)}</td> <td>{string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> </tr> }</table> }<br/> <h3>保留中楽曲リスト</h3>{ <table border="1"> <tr> <th>学生名</th> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> </tr>{ for $music in //Music[Status/text()="r"] sortby(./@Artist,./@Title) return <tr> <td>{$music/../../Name/text()}</td> <td>{string($music/@Artist)}</td> <td>{string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> </tr> }</table> }</body> </html>

Page 132: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 124 -

課題 5.2-3 の解答例 - where 節、order by 節を使用した場合

<html> <head><title>オリジナル CD 追加状況</title></head> <body> <h2>オリジナル CD 追加状況</h2> <h3>追加済み楽曲リスト</h3>{ <table border="1"> <tr> <th>学生名</th><th>アーティスト名</th><th>曲名</th><th>演奏時間</th> </tr>{ for $music in //Music where $music/Status/text()="p" order by $music/@Artist,$music/@Title return <tr> <td>{$music/../../Name/text()}</td> <td>{fn:string($music/@Artist)}</td> <td>{fn:string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> </tr> }</table> }<br/> <h3>保留中楽曲リスト</h3>{ <table border="1"> <tr> <th>学生名</th> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> </tr>{ for $music in //Music where $music/Status/text()="r" order by $music/@Artist,$music/@Title return <tr> <td>{$music/../../Name/text()}</td> <td>{fn:string($music/@Artist)}</td> <td>{fn:string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> </tr> }</table> }</body> </html>

Page 133: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 125 -

課題 5.2-3 の解答例 - XPath の述部、order by 節を使用した場合

<html> <head><title>オリジナル CD 追加状況</title></head> <body> <h2>オリジナル CD 追加状況</h2> <h3>追加済み楽曲リスト</h3>{ <table border="1"> <tr> <th>学生名</th><th>アーティスト名</th><th>曲名</th><th>演奏時間</th> </tr>{ for $music in //Music[Status/text()="p"] order by $music/@Artist,$music/@Title return <tr> <td>{$music/../../Name/text()}</td> <td>{fn:string($music/@Artist)}</td> <td>{fn:string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> </tr> }</table> }<br/> <h3>保留中楽曲リスト</h3>{ <table border="1"> <tr> <th>学生名</th> <th>アーティスト名</th> <th>曲名</th> <th>演奏時間</th> </tr>{ for $music in //Music[Status/text()="r"] order by $music/@Artist,$music/@Title return <tr> <td>{$music/../../Name/text()}</td> <td>{fn:string($music/@Artist)}</td> <td>{fn:string($music/@Title)}</td> <td>{floor($music/@Time div 60)}分{($music/@Time mod 60)}秒</td> </tr> }</table> }</body> </html>

Page 134: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 126 -

付録 B 検証ツールについて 「付録 B 検証ツールについて」はインフォテリア社より提供されているスキーマ検証/

XSLT 変換ツールについてまとめたものです。 スキーマ検証/XSLT 変換ツールは以下の URL より入手できます。

http://www.infoteria.com/jp/training/tool/ 「スキーマ検証/XSLT 変換ツール」は演習内容確認用として配布するものです。XML 文

書の妥当性の検証と、XSLT 変換を実行することができます。 「スキーマ検証/XSLT 変換ツール」には、Apache Software Foundation <http://www.apache.org/>によって開発された「Xerces2 Java Parser」と「Xalan-Java」が含まれています。Apache License Version 2.0 の原文は、本ツールに同梱されている

「readme.txt」を参照してください。 「スキーマ検証/XSLT 変換ツール」を使用した結果、直接的、間接的を問わず、いかなる

損害が発生したとしても、インフォテリアおよび XML 教育実施者は、損害の責任を一切負

いません。 以上をご確認の上、ご使用願います。

Page 135: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 127 -

▼Java 実行環境のインストール -------------------------------------------------------------------------------------------- 1.4.2 または 5.0 以上の Java 実行環境が必要ですのであらかじめインストールしておきま

す。 ▼解凍とファイルの配置 -------------------------------------------------------------------------------------------- 解凍した「XMLToolBox1.1J」フォルダをどこかに置きます。場所はデスクトップ上でもか

まいません。「XMLToolBox1.1J」フォルダ内の構成を変更しないでください。 ▼Java 実行環境が 1.4.2 の場合 -------------------------------------------------------------------------------------------- -- Java 実行環境が 5.0 以上の場合はこの手順は必要ありません。-- -------------------------------------------------------------------------------------------- Java の実行環境が 1.4.2 の場合は、「XMLToolBox1.1J」フォルダ内の「xalan」および

「xerces」フォルダ内の 3 つの jar ファイルを、Java 実行環境の「lib/endorsed」フォルダ

内(たとえば、C:¥Program Files¥Java¥j2re1.4.2_07¥lib¥endorsed)にコピーします。

「endorsed」フォルダがなければ、作成してください。 ▼検証および変換対象ファイルの配置 -------------------------------------------------------------------------------------------- 「XMLToolBox1.1J」フォルダ内の「sample」フォルダ内の各ファイルは実行確認用のサ

ンプルファイルです。これらのファイルは、ファイルパスとして日本語や空白文字が含ま

れない場所に置く必要があります。(たとえばデスクトップ上は不可ですので、

「XMLToolBox1.1J」フォルダをデスクトップ上に置いた場合は、サンプルファイルを他の

場所へコピーしてください。)また検証および変換対象ファイルのファイル名として日本語

を使用することもできません。

Page 136: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 128 -

▼検証および変換の実行 -------------------------------------------------------------------------------------------- 「XMLToolBox1.1J」フォルダ内の「XMLToolBox1.1J.jar」ファイルをダブルクリックし

てツールを起動します。起動時に表示される「使い方」に従って、妥当性の検証もしくは

XSLT 変換を実行します。 妥当性の検証の場合は、XML ファイルとして「sample.xml」ファイルを指定し、「検証」

ボタンをクリックして実行できます。正しく実行できた場合は以下の表示となります。 -------------------------------------------------------------- DTD で検証しました。(Xerces-J 2.9.0) -------------------------------------------------------------- Xerces のバージョン番号が正しく表示されていることを確認します。 XSLT 変換の場合は、XML ファイルとして「sample.xml」ファイルを、XSLT スタイルシ

ートとして「sample.xsl」ファイルをを指定した上で、「変換」ボタンをクリックして実行

できます。正しく実行できた場合は以下の表示となります。 -------------------------------------------------------------- 変換しました。(Xalan Java 2.7.0) -------------------------------------------------------------- Xalan のバージョン番号が正しく表示されていることを確認します。

Page 137: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 129 -

付録 C 実習環境の構築について 「付録 C 実習環境の構築について」は Cyber Luxeon を使用した XML データベースの実

習環境の構築についてまとめたものです。 XML データベースの実習環境の構築の手順は以下のとおりです。 ① 管理ツールの起動 ② パーティションの作成 ③ XML Store の作成 上記の手順に従って、実習環境を構築していきます。次ページ以降に構築手順の詳細を記

します。

Page 138: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 130 -

① 管理ツールの起動 1.管理ツールを起動するには、[スタート]メニューから[プログラム(P)] -> [Cyber

Luxeon] -> [DXE Manager]を選択します。

図 ①-1 管理ツールの起動

2.管理ツールが起動できると以下の図 ①-2 のような画面が表示されます。

図 ①-2 管理ツール起動後の画面

Page 139: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 131 -

3.次に管理ツールを XML データベースに接続します。

ツールバーの左端にある ボタンをクリックする、またはメニューバーより[接続

(C)]->[新規接続(N) Ctrl+N]を選択し、接続ダイアログを表示します。そして、ホス

ト名にデータベースサーバのホスト名、または IP アドレスを入力します。

図 ①-3 データベースへの接続

また、ローカルマシンにインストールされたデータベースに接続するには、ホスト名に

「localhost」と入力します。 ※ XML データベースの実習環境に合わせて、XML データベースがインストールされたサ

ーバのホスト名、または IP アドレスを入力してください。

Page 140: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 132 -

② パーティションの作成 1.管理ツールが XML データベースに正しく接続できた場合には、図 ②-1 のような画

面が表示されます。

図 ②-1 データベース接続後の画面

2.サーバ名または IP アドレスが表示されているアイコンを選択し、右クリックメニュ

ーより「パーティションの作成(C)」を選択します。

図 ②-2 パーティション作成の方法

Page 141: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 133 -

3.パーティションの作成ダイアログが表示されますので、パーティション名の入力欄

に「SurveyResults」、パーティションのパスの入力欄に任意のフォルダ名を入力しま

す。ここで指定する任意のフォルダは事前に作成する必要があります。

図 ②-3 パーティションの作成ダイアログ

4.パーティションが正常に作成されると以下のような画面が表示されます・

図 ②-4 パーティション作成後のイメージ

Page 142: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 134 -

③ XML Store の作成 パーティションが正しく作成できたら、次に XMLStore を作成します。

1.さきほど作成したパーティション「SurveyResults」を選択し、右クリックメニュー

より「XMLStore の作成(C)」をクリックします。

図 ③-1 XMLStore の作成方法

2.XMLStore が作成され、XMLStore 名を入力できる状態になりますので、XMLStore

名に「CDAlbumData」と入力し、Enter キーを押下します。この XMLStore は課題

2、課題3で使用します。

図 ③-2 「CDAlbumData」XMLStore の作成

Page 143: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 135 -

同様に課題4、課題5で使用する XMLStore「OriginalCDData」を作成します。

3.パーティション「SurveyResults」を選択し、右クリックメニューより「XMLStore

の作成(C)」をクリックします。

図 ③-3 XMLStore の作成方法

4.XMLStore が作成され、XMLStore 名を入力できる状態になりますので、

XMLStore 名に「OriginalCDData」と入力し、Enter キーを押下します。

図 ③-4 「OriginalCDData」XMLStore の作成

Page 144: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 136 -

実習環境構築後の Cyber Luxeon の管理ツールには以下のようなパーティション、

XMLStore が作成されています。

図 ③-5 実習環境構築後のイメージ

Page 145: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 137 -

索 引

記号

$ ..............................................................34

/ ........................................................32, 55

@ ..............................................................32

{ } ...................................... 33,43, 55, 66, 85

, ..................................................34, 36, 43

:= ..............................................................36

( ) ..................................................43, 56, 85

and............................................................38

ascending .................................................40

CD アルバムデータ XML 文書の作成 .....4, 10

CD アルバムデータの検索 .....................6, 29

count 関数...............................................107

descending ...............................................40

distinct-values 関数.................................107

div .............................................................86

else ...........................................................86

floor 関数 .................................................. 86

FLWOR 式................................................ 31

fn:doc 関数 ............................................... 62

for 節 ........................................................ 34

if ............................................................. 86

If 式........................................................... 86

in ............................................................. 34

let 節......................................................... 36

mod .......................................................... 86

or ............................................................. 38

order by 節 ....................................... 40, 108

return 節 ................................................... 43

Page 146: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 138 -

sortby 句 ...........................................42, 108

string 関数.................................................85

then...........................................................86

where 節 ...................................................38

XML データベース................................5, 21

XML データベースへの登録 .........5, 7, 20, 70

XML ネイティブデータベース .................22

XQuery ...........................................6, 21, 30

検索結果の HTML 表示 .........................8, 79

好みの楽曲一覧 XML 文書の作成 ......... 7, 70

整形式 XML 文書...................................... 17

妥当な XML 文書...................................... 17

直接コンストラクタ........................... 33, 85

ハイブリッドデータベース...................... 22

Page 147: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 139 -

Page 148: XMLデータベース技術者 育成教材 - unno.jpn.orgunno.jpn.org › H19XML › 0110_text.pdf · xmlデータベース教育教材の開発 教材開発委員会 xmlデータベース技術者

- 140 -

平成19年度 文部科学省委託 専修学校教育重点支援プラン

顧客ニーズに的確に応える豊かな選択肢を持つ「気が利くデータベースエンジニア」を

育成するための XML データベース教育教材の開発

【委員名簿】

●実施委員会

◎佐藤 公一 学校法人日本コンピュータ学園 東北電子専門学校 校長

海野 晴博 日本電子専門学校 コンピュータ技術系 Web 総合技術科 科長

田中 義敏 東京電子専門学校 学部長

岩苔 尚志 ホスピタリティ ツーリズム専門学校 教務部 教育企画室

船山 世界 日本電子専門学校 就職部 部長

今西 英 大阪総合デザイン専門学校 デザイン研究科 主任

徳重 稔 麻生情報ビジネス専門学校 副校長 IT 教育推進室 室長

穴沢 悦子 インフォテリア株式会社 執行役員 教育部長

小野 雅史 株式会社サイバーテック 取締役 セールス&マーケティング部 部長

飯塚 正成 全国専門学校情報教育協会 専務理事 事務局長

●教材開発分科会

○海野 晴博 日本電子専門学校 コンピュータ技術系 Web 総合技術科 科長

石橋 雄一 中央情報専門学校

石山 聡 日本工学院専門学校 IT カレッジ

井東 秀樹 名古屋工学院専門学校 メディア学部 部長

山崎 政博 松山コンピュータ専門学校

山﨑 徹 東北電子専門学校 教務部 共通情報科

大坂 祥郎 東北電子専門学校 教務部 共通情報科

木村 達哉 インフォテリア株式会社 教育部 シニアエンジニア

野中 康弘 インフォテリア株式会社 教育部

藤村 登 全国専門学校情報教育協会 事務局

◎=委員長

○=開発リーダー

平成 19年度 文部科学省委託

専修学校教育重点支援プラン事業

顧客ニーズに的確に応える豊かな選択肢を持つ

「気が利くデータベースエンジニア」を育成するための

XML データベース教育教材の開発

XML データベース技術者育成教材 平成 20 年 1 月

「気が利くデータベースエンジニア」を育成するための XML データベース教育教材開発委員会 連絡先: 〒164-0003 東京等中野区東中野 1-57-8 全国専門学校情報教育協会事務局 電話 03-5332-5081 Fax 03-5332-5083 本書の内容を無断で転載・記載することは禁じます。