はじめに
XMLデータ操作の前編として、前回は、XMLDB上のデータを操作するための標準であるXQueryとXPathの基本文法について説明しました。前回も説明したように、XQueryのデータ操作機能で、執筆時点(2007年2月時点)で仕様が勧告となっているのは検索機能のみです。XMLデータの更新機能(作成、更新、削除)についての仕様はこれから策定が進められるという状況ですので、XMLDB各製品は独自のXMLデータの更新機能を用意しています。Cyber Luxeonも類に漏れず、独自のXMLデータ更新用機能を用意しており、その更新機能は「XML updategram(以降、XUG)」と言います。後編となる本稿では、最初にこのXUGの概要、基本文法について説明し、その後、サンプルを元にXUGの基本機能について説明します。
XML updategram(XUG)の特徴
XUGはCyber Luxeonが用意している独自のXMLデータの追加・更新・削除機能です。XUGは、複数の追加・更新・削除処理をシンプルな文法で記述することができ、また複数のXMLドキュメントに対する処理もまとめて1トランザクションとして扱うことができるという特徴を持っています。XUGはCyber Luxeonの独自機能ですが、更新対象のXMLドキュメント内の位置を選択する場合には、XPathを使用しますので、初めてXUGを使用する開発者も違和感なく使用することができます。このXUGはシンプルな文法で複雑なXML更新用ロジックを記述することができますので、XUGを活用することで、XMLアプリケーションの開発工数が削減されることが期待できます。XUGは、DXE ManagerやJava API、COMから実行することができます。
XUGを作成する2つの方法
XUGを作成する方法には、DXE ManagerのXUG自動生成機能を使用する方法と、手動でXUGを記述する方法の2通りが用意されています。DXE ManagerのXUG自動生成機能を利用する方法では、詳しいXUGの文法を知らなくても、XML更新のための記述を生成できるという便利さがあります。XUG自動生成機能は、XUGの基本的な文法を学習するのに非常に有用な機能です。一方、手動でXUGを記述する方法は、複雑なXML更新機能を定義する際に使用します。
XUGの自動生成機能
まずは、DXE ManagerのXUG自動生成機能でXUGを作成する方法を説明します。
XUGを自動生成するには、DXE Managerのツリーペイン上で、更新するXMLファイルを右クリックし、[更新]-[更新グラマーの自動作成]を選択します。
上記の図のように選択すると、[Updategramの自動作成]ダイアグラムが表示されます。
ダイアログ上にXMLの階層構造が表示されますので、操作したいノード(要素・属性など)をツリー上で選択し、ダイアログ上部のメニューバーのアイコンで実行したい操作を選択します。要素を選択した場合、要素/属性/テキスト/CDATA/コメントの新規挿入、値の変更、順序の入れ替え、ノード削除の操作が実行できます。属性を選んだ場合、属性名の変更、値の変更、属性の削除が実行できます。以下の表に選択したノードとその際に、使用できるアイコンをまとめました。
選択したノード | ノード新規作成 | ノードの削除 | ノード名の変更 | 値の変更 | 上に移動 | 下に移動 | 保存 |
要素 | ○ | ○ | ○ | × | ○ | ○ | ○ |
属性 | × | ○ | ○ | ○ | × | × | ○ |
テキスト | × | × | × | ○ | × | × | ○ |
CDATA | × | ○ | × | ○ | × | × | ○ |
XMLを更新する操作をダイアログ上で行った後、[保存]ボタンを押下すると、以下の図のように自動作成されたXUGが表示されます。
自動作成されたXUGを編集する場合は、このダイアログ上で編集します。[OK]ボタンを押下すると、XMLドキュメントに更新内容が反映されます。
XUGの手動定義
XUGの自動生成機能は非常に有用な機能ですが、foreach(繰り返し)などのやや複雑な制御を自動生成する機能は用意されていません。従って、そのような複雑な処理を記述したい場合には、手動でXUGを記述する必要があります。ここでは、手動でXUGを記述する方法を説明します。
DXE Managerのツリーペイン(ウィンドウ左側のペイン)上で、更新対象のXMLを右クリックして、[更新]-[更新グラマーの手動作成]を選択します。
「Updategramの手動作成」ダイアログが開きますので、XUGを入力して[OK]ボタンを押下します。
[OK]ボタンを押下すると、更新内容がXMLに反映(コミット)されます。