XMLDB開発支援
HOME  >  XMLDB開発支援  >  XML DBプログラミング_3 ~スキーマ変更が及ぼすインパクトを徹底検証する[ASP.NET編]

XML DBプログラミング_3 ~スキーマ変更が及ぼすインパクトを徹底検証する[ASP.NET編]

Xprioriで始めるXML DBプログラミング
~スキーマ変更が及ぼすインパクトを徹底検証する[ASP.NET編]~

2005年1月5日 更新

前回、前々回とXML DB連携の例として、Java言語をベースに説明を行ってきた。しかし当然のことながら、XML DBはJava言語のためだけのものではない。例えば、本連載で取り上げているXprioriならば、Java、C++、Visual Basic、.NETをはじめとした多くのアプリケーション・インターフェイスを標準的に備えている。これらのインターフェイスを利用することで、現在よく使われているほとんどの言語からほぼ同一の手法でXprioriにアクセスすることができる。

本稿では、Java(J2EE)と並んでよく利用されているサーバサイド実行環境の1つとして、ASP.NETを取り上げる。前回の記事で紹介したXmlSearch.javaとXmlSearch2.javaをASP.NETのWebフォームに置き換えてみよう。また、その際、前回のサンプルでは抽出の条件となる注文番号をハード・コーディングしていたが、本稿ではサーバサイド・アプリケーションらしく、ユーザーが入力した注文番号を元にXprioriデータベースを検索するように修正してみよう。

必要なソフトウェアの環境設定

本稿で紹介するアプリケーションを構築/実行するために必要なソフトウェアは、以下のとおりだ。

  • .NET Framework SDK 1.x
  • Visual Studio .NET 2003(以降、VS.NET)
  • Xpriori

本稿ではそれぞれのインストール手順に関する詳細は割愛するが、自環境にインストールされていないものについては適宜、準備してほしい。また、Xprioriのインストール手順については、別稿「Xprioriで始めるXML DBプログラミング」で詳述しているので、併せて参照してほしい。初期データについても、別稿「Xprioriで始めるXML DBプログラミング(2)」で紹介した初期データorder1~3.xmlがあらかじめ投入されているものとする。

●XmlSearch.javaをASP.NETアプリケーションに置き換える

まずは、XmlSearch.javaをASP.NETアプリケーションに置き換える過程で、ASP.NETアプリケーションからXprioriデータベースにアクセスする基本的な手順をおさえておこう。なお本稿では、Visual Basic .NETのコードを用いて解説していく。

[1]Xprioriへの参照を追加する

ASP.NETからXprioriに対してアクセスするには、まずXprioriが提供するCOMコンポーネントに対する「参照」設定を行う必要がある。VS.NETのプロジェクトを起動したら、メニューバーの[プロジェクト]-[参照の追加]を選択する。[参照の追加]ダイアログが表示されるので、[COM]タブから「NeoCoreXMS 3.0 Type Library」を選択する(図1)。

[参照の追加]ダイアログ画面
図1 [参照の追加]ダイアログ

これで、現在のプロジェクトからXprioriのライブラリが利用できるようになった。

[2]Webフォームを作成する

次に、新しいWebフォームページとしてXmlSearch.aspxを作成する。フォーム・デザイナからは、以下のようにサーバ・コントロールを配置する。

XmlSearch.aspxのデザイン画面
図2 XmlSearch.aspxのデザイン

それぞれのサーバ・コントロールに対するプロパティの設定は、以下のとおりだ。

表1 XmlSearch.aspx上に配置されたサーバ・コントロール
コントロール プロパティ 設定値
TextBox (ID) txtOrder
Button (ID)
Text
btnSearch
検索
Label (ID)
Text
lblOrder
△(ブランク)
Label (ID)
Text
lblName
△(ブランク)
Label (ID)
Text
lblSupply
△(ブランク)

[3]イベント・プロシージャを記述する

コントロールの配置ができたら、次にButtonコントロールをクリックしたタイミングで発生する処理を記述しよう。フォーム・デザイナ上に配置された[検索]ボタンをクリックすると、コード・エディタが開き、btnSearch_Clickイベント・プロシージャの骨組みが自動生成される。この骨組みに対して、下記のようなコードを追記する。

Imports System.Xml	←(コード冒頭に追記)

Private Sub btnSearch_Click(ByVal sender As Object, _
  ByVal e As System.EventArgs) Handles btnSearch.Click
  Dim session As NEOCOREXMSLib.NeoCoreAPIClass = _
    New NEOCOREXMSLib.NeoCoreAPIClass()
   ' データベースへのセッションを確立
  session.connectToNeoCoreXMS("localhost", 7700, "ja", "UTF-8", "")
  session.login("Administrator", "admin")
   ' Xprioriデータベースを検索し、注文情報を取得
   ' XmlDocumentオブジェクトを生成する
  Dim objDoc As XmlDocument = New XmlDocument()
  objDoc.LoadXml(session.queryXML("/ND/注文[注文番号='" & txtOrder.Text & "']"))
   ' 生成したDOMツリーから必要な注文情報を出力
  lblOrder.Text = _
    objDoc.GetElementsByTagName("注文番号").Item(0).FirstChild.Value
  lblName.Text = _
    objDoc.GetElementsByTagName("商品名").Item(0).FirstChild.Value
  lblSupply.Text = _
    objDoc.GetElementsByTagName("購入先名").Item(0).FirstChild.Value
   ' データベースからログアウト
  session.closeConnection()
End Sub

前回のコードでは、queryXMLメソッドに対して固定的なXPath式をハード・コーディングしていたのに対して、本稿ではTextBoxコントロールから入力された注文番号をもとに動的にXPath式を生成している。しかし、コードとしての流れは前回のそれとほとんど変わらないことが分かるだろう。

コードの編集が完了したら、ツールバーの[>](開始)ボタンをクリックする。自動的にコードのコンパイル処理が行われ、コードに問題がなければ、Internet Exploler(IE)にXmlSearch.aspxが表示される。

XmlSearch.aspxの初期画面
図3 XmlSearch.aspxの初期画面

XmlSearch.aspxの実行結果画面
図4 XmlSearch.aspxの実行結果

テキストボックスから入力された注文番号に従ってXprioriデータベースを検索し、マッチした注文情報が表示された。

図4のように、注文番号に対応する注文情報が表示されれば、まずは成功だ。

●Xprioriのスキーマ情報を変更する

それでは次に、スキーマ情報の変更を行ってみよう。データとしては、前回の記事でも用いたorder4.xmlを用いる。order1~3.xmlと異なる点は、新たに仲介情報を追加している点だ。

前回の記事でもそうであったように、XML DBではスキーマの変更に際して、なにかしら特別な操作を行う必要はない。スキーマ変更が必要になったデータから順に、新たなフォーマットでデータを投入していけばよいのだ。後は、新たに追加した情報に対応できるようアプリケーションを変更してやればよい。

以下、XmlSearch.aspxからの変更個所に注目してみていこう。

[1]Labelコントロールを追加する

まずは、取得した仲介情報(仲介業者名)を表示するためのLabelコントロールを、フォーム・デザイナから追加する。

XmlSearch.aspxの変更画面
図5 XmlSearch.aspxの変更

LabelコントロールのlblMiddleにおけるプロパティの設定は、以下のとおりだ。

コントロール プロパティ 設定値
Label (ID)
Text
lblMiddle
△(ブランク)

[2]イベント・プロシージャを変更する

次に、btnSearch_Clickイベント・プロシージャに仲介情報を取得するためのコードを追加する。以下リストの太字部分が前述のコードからの変更部分になる。

Private Sub btnSearch_Click(ByVal sender As Object, _
  ByVal e As System.EventArgs) Handles btnSearch.Click
  Dim session As NEOCOREXMSLib.NeoCoreAPIClass = _
    New NEOCOREXMSLib.NeoCoreAPIClass()
  session.connectToNeoCoreXMS("localhost", 7700, "ja", "UTF-8", "")
  session.login("Administrator", "admin")
  Dim objDoc As XmlDocument = New XmlDocument()
  objDoc.LoadXml(session.queryXML("/ND/注文[注文番号='" & txtOrder.Text & "']"))
  lblOrder.Text = _
    objDoc.GetElementsByTagName("注文番号").Item(0).FirstChild.Value
  lblName.Text = _
    objDoc.GetElementsByTagName("商品名").Item(0).FirstChild.Value
  lblSupply.Text = _
    objDoc.GetElementsByTagName("購入先名").Item(0).FirstChild.Value
  Dim objElm As XmlNode = objDoc.GetElementsByTagName("仲介業者名").Item(0)
  If IsNothing(objElm) Then
    lblMiddle.Text = ""
  Else
    lblMiddle.Text = objElm.FirstChild.Value
  End If
  session.closeConnection()
End Sub

途中でスキーマ情報を変更した場合、必ずしもすべての注文情報に<仲介業者名>要素が含まれていない可能性がある。このような要素であっても、アプリケーション側でNothing(C#ならばnull)の判定を行うコードを追加するだけで簡単に対応できる。本稿のサンプルでは、XMLデータのスキーマ変更がアプリケーションに与える影響を分かりやすく解説するために、<仲介業者名>要素についてのみチェックを追加したが、実際の開発では各ノードにあらかじめnull判定のコードを実装しておけば、スキーマ変更時のインパクトはさらに小さくなるだろう。

以上、コードの編集が完了したら、先ほどと同様に、アプリケーションを開始してみよう。仲介情報を持つ注文データを検索すると、以下のように仲介業者名が表示されるはずだ。

変更したXmlSearch.aspxの実行結果画面
図6 変更したXmlSearch.aspxの実行結果

以上、本稿では前回で紹介したJavaアプリケーションをASP.NETアプリケーションに移植してみたが、JavaでもASP.NETでも、まったく同じ要領でスキーマの変更に対応できることがお分かりいただけただろう。XML DBのスキーマ変更における耐性は、扱う言語や技術に限定されるものではないのだ。

企画協力:アイティメディア株式会社
アイティメディア株式会社ロゴ

▲このページのTOPへ

  • XMLとは?IT初心者でもすぐわかるXML超入門
  • 無償で使える!XMLDB「NeoCore」
  • サイバーテック求人情報
  • メールマガジン申し込み
  • TEchScore

  • ▲NeoCoreについて記載されています!

  • ▲XMLマスター教則本です。試験対策はこれでばっちり!
Copyright (c) CyberTech corporation ltd. All ights Reserved. | サイバーテックについて | ご利用ガイド