---
title: "クラウド上のXML"
date: "2011-01-07"
categories: 
  - "hardware"
tags: 
  - "cloud-services"
  - "databasespy"
  - "missionkit"
description: AltovaのツールをAmazon RDSに接続する方法、MySQLデータベースの構築方法、そしてクラウドベースのデータベースアプリケーションにおいてXML関数を活用する方法について解説します。
---
Status: #blog

Tags:  #cloud-services #databasespy #missionkit

Categories: [xml](/blog/ja/category/xml.md) [cloud](/blog/ja/category/cloud.md)
# クラウド上のXML

## AltovaツールとAmazonのリレーショナルデータベースサービス（Amazon RDS）の連携について

ますます多くの企業が、クラウド上にデータベースアプリケーションを導入することの利点に気づき始めています

- 高い可用性と信頼性
- 自動スケーリング
- ハードウェアの費用やメンテナンスにかかる手間から解放されます

このブログ記事では、Altovaを使用して、Amazon Relational Database Service (Amazon RDS)に接続し、小さなデータベースを構築する方法を解説します [DatabaseSpy](https://www.altova.com/ja/databasespy.html). データベース接続ウィザードは、様々な環境で一貫した機能を提供します [Altova MissionKit](https://www.altova.com/ja/missionkit/software-development-tools.html), 同じ方法で接続することも可能です [XMLSpy](https://www.altova.com/ja/xmlspy.html), [MapForce](https://www.altova.com/ja/mapforce.html), または [StyleVision](https://www.altova.com/ja/stylevision.html). 

もし、以下に説明されている手順を実際に試してみたい場合は、Amazon Web Services (AWS)のアカウントを以下のURLで登録する必要があります：[http://aws.amazon.com/rds/](http://aws.amazon.com/rds/)
また、Altova MissionKitまたは個別のAltovaアプリケーションのフル機能版の無料トライアル版を、以下のURLからダウンロードすることもできます：[https://www.altova.com/download-trial/](https://www.altova.com/ja/download-trial/)

##### ローカル環境でのプロトタイプを構築する

Amazon RDSはMySQLをベースにしているため、まずMySQL Community Editionを使ってローカル環境に小さなデータベースを構築し、その後、Amazon RDSに移行して、クラウド上でデータベースをテストします。 MySQLは、データベースの列に対してXMLをデータ型として直接サポートしていませんが、MySQL 5.1および6.0では、テキストとして保存されたXMLデータに対して、いくつかの操作を行うことが可能です。 この演習では、以下にリストされているMySQLのリファレンス資料にあるXMLのサンプルを一部変更・拡張します。
[http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html](http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html)
[http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html](http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html)
[http://dev.mysql.com/tech-resources/articles/mysql-5.1-xml.html](http://dev.mysql.com/tech-resources/articles/mysql-5.1-xml.html)
まず、DatabaseSpyを起動し、ローカルのMySQL Community Editionに接続しました。 私たちは、新たに「LocalPrototype」というデータソースを作成し、さらに「XMLtest」という名前の新しいデータベーススキーマを作成しました。 以下に、DatabaseSpyのオンラインブラウザとプロパティウィンドウの画面を示します 

[![データベース監視ツール（DatabaseSpy）のプロジェクトウィンドウとプロパティウィンドウ](https://lh3.ggpht.com/_REdrfeVqYdU/TSYvog3-1xI/AAAAAAAAAQc/FmMFHyM0-yc/blogSnap1_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy Project and Properties windows")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYvoDdXvWI/AAAAAAAAAQU/qEea5H03j3U/s1600-h/blogSnap1%5B3%5D.png) 

次に、"books"と"cities"という2つのテーブルを作成し、MySQLのドキュメントに記載されている例に従ってデータを挿入しました。以下に、作成したテーブルのDatabaseSpyのデザインビューを示します 

[![データベース設計ビュー (DatabaseSpyのデザインビュー)](https://lh5.ggpht.com/_REdrfeVqYdU/TSYvpYyta6I/AAAAAAAAAQk/3oJcRfcVafs/blogSnap2_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy Design View")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYvpNqGrlI/AAAAAAAAAQg/m15NZt1yLgU/s1600-h/blogSnap2%5B3%5D.png) 

特定のクエリを実行し、テーブルの内容を積み重ねられた結果ウィンドウに表示することができます

[![DatabaseSpy のスタックされた結果表示ウィンドウ](https://lh6.ggpht.com/_REdrfeVqYdU/TSYvxCJz7BI/AAAAAAAAAQs/KrKbkgW_cKc/blogSnap3_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy stacked results windows")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYvqaOVCqI/AAAAAAAAAQo/sDFsYLrNi7k/s1600-h/blogSnap3%5B3%5D.png)

注意点として、`books`テーブルの`doc`列にはXMLデータが含まれていますが、データ型は`varchar(150)`として定義されています。MySQLは、テキストフィールド内のXMLデータを扱うための2つの関数、`ExtractValue()`と`UpdateXML()`をサポートしており、これらはXPath式を使用して個々の要素に対して操作を実行できます。以下に、`books`テーブルのすべての行から著者名の一部（イニシャル）のみを抽出する、簡単な`ExtractValue()`クエリを示します 

[![ExtractValue() 関数](https://lh3.ggpht.com/_REdrfeVqYdU/TSYvyNUEhfI/AAAAAAAAAQ0/JOPn0w1ZAOA/blogSnap4_thumb%5B1%5D.png?imgmax=800 "ExtractValue( ) function")](http://lh4.ggpht.com/_REdrfeVqYdU/TSYvxiQrogI/AAAAAAAAAQw/rlT5OA5cB-M/s1600-h/blogSnap4%5B3%5D.png) 

`UpdateXML()`関数を使用すると、SQL式を使って個々のXML要素の内容を修正できます。以下のスクリーンショットでは、1行目のクエリが書籍テーブルのすべての行を更新し、2行目のクエリが更新後の新しい値を返しています 

[![`UpdateXML()`関数](https://lh4.ggpht.com/_REdrfeVqYdU/TSYvyzem2KI/AAAAAAAAAQ8/BCW9ZEzc77k/blogSnap5_thumb%5B1%5D.png?imgmax=800 "UpdateXML( ) function")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYvyTiRDNI/AAAAAAAAAQ4/qna29a6Bw6o/s1600-h/blogSnap5%5B3%5D.png)

また、Concat()関数を使用することで、XMLデータではないデータ、例えば「都市」テーブルのようなデータに、以下のようにXML要素を追加することも可能です 

[![Concat() 関数](https://lh3.ggpht.com/_REdrfeVqYdU/TSYvz4jJO8I/AAAAAAAAARE/GECrInoROUM/blogSnap6_thumb%5B1%5D.png?imgmax=800 "Concat( ) function")](http://lh4.ggpht.com/_REdrfeVqYdU/TSYvzdA02MI/AAAAAAAAARA/IHlT_sKpzAk/s1600-h/blogSnap6%5B3%5D.png)

これまでのXMLクエリは、各テーブルのすべての行に対して実行されていました。単一の行に対してクエリを実行しやすくするために、テーブルに一意の行インデックスを格納する列を追加すると便利です。既存の「books」テーブルをコピーし、そのテーブルに「id」という名前の列を追加して、行インデックスを格納することができます。この「id」列は、別のテーブルの行から、テーブル内の個々のXMLドキュメントを参照するための便利な外部キーとしても機能します。 

例えば、求職者の名前を格納するテーブルを定義し、そのテーブルに、別のテーブルに格納されているXML形式の履歴書を参照するための外部キーを設定することができます [SQLエディタ](https://www.altova.com/ja/databasespy/sql-editor.html) DatabaseSpyを使用すると、既存の「books」テーブルに対するCREATE文を生成し、それを直接編集することができます。または、DatabaseSpyの他の機能を利用することも可能です [デザイン担当編集者](https://www.altova.com/ja/databasespy/database-design.html) 表をグラフィカルに作成します。（詳細については、[参照先] をご覧ください。） [DatabaseSpy](https://www.altova.com/ja/databasespy.html) ～の一部 [Altova](https://www.altova.com/ja/) ウェブサイト 

Amazon RDS環境でも後で同じクエリを実行する予定があるため、books2テーブルに対して、SQLのCREATE文とINSERT文を1つのスクリプトにまとめました。以下に、books2テーブルのスクリプトの一部を示します 

[![テーブル作成スクリプトを作成する](https://lh5.ggpht.com/_REdrfeVqYdU/TSYwOm9o6qI/AAAAAAAAARM/DRJQIGyrS7M/blogSnap6a_thumb%5B3%5D.png?imgmax=800 "Create table script")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYv0JrSNhI/AAAAAAAAARI/T4-ylo2HPaY/s1600-h/blogSnap6a%5B7%5D.png) 

books2テーブルに対して、各行に対して一意のID列を表示するクエリを実行できます 

[![SQLのSELECTクエリ](https://lh6.ggpht.com/_REdrfeVqYdU/TSYwQHmnPoI/AAAAAAAAARU/Mi1mEaTUMU4/blogSnap7_thumb%5B4%5D.png?imgmax=800 "SQL SELECT query")](http://lh3.ggpht.com/_REdrfeVqYdU/TSYwPEtwIdI/AAAAAAAAARQ/gPgwsQX94Ak/s1600-h/blogSnap7%5B8%5D.png) 

今、私たちは、UpdateXML() および ExtractValue() のクエリを改良し、個々の行に対して処理を実行できるようにすることができます 

[![ブログスナップ8](https://lh5.ggpht.com/_REdrfeVqYdU/TSYyzesZA8I/AAAAAAAAARc/Le1Qs6k4GMY/blogSnap8_thumb%5B2%5D.png?imgmax=800 "blogSnap8")](http://lh4.ggpht.com/_REdrfeVqYdU/TSYwQfREjtI/AAAAAAAAARY/sUtXyDoOq7A/s1600-h/blogSnap8%5B6%5D.png) [![ブログスナップ9](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy0nw8n2I/AAAAAAAAARk/hRPWhnmcudI/blogSnap9_thumb%5B1%5D.png?imgmax=800 "blogSnap9")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy0LgjvmI/AAAAAAAAARg/yh-JtXmQR2U/s1600-h/blogSnap9%5B3%5D.png) 

これにより、クラウド環境に移行し、Amazon RDSでテストするための、良好な基礎となるサンプルセットが得られます。

## Amazon RDSクラウドにDatabaseSpyを接続します

Amazon RDSでデータベースインスタンスを作成するために、[AWS管理コンソール](http://aws.amazon.com/console/)に記載されている手順に従ってください。その後、DatabaseSpyの利用を開始するために、接続ウィザードを使用します。ここでは、MySQLのオプションを選択してください 

[![DatabaseSpy 接続ウィザード](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy1HzeX7I/AAAAAAAAARs/OV62tBUdU1g/blogSnap10_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy Connection Wizard")](http://lh4.ggpht.com/_REdrfeVqYdU/TSYy04hWtSI/AAAAAAAAARo/ePZmjb3wIbM/s1600-h/blogSnap10%5B3%5D.png) 

初めて接続する際には、新しいデータソース名 (DSN) を作成する必要があります。その後は、既存のデータソース名を使用するオプションを選択することで、リストからDSNを選択できるようになります。また、XMLSpy、MapForce、またはStyleVisionから再度接続する場合でも、元のDSNを使用することができます。

[![MySQLへの接続](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy2KLWVjI/AAAAAAAAAR0/P_SfoWqNqmk/blogSnap11_thumb%5B1%5D.png?imgmax=800 "Connecting to MySQL")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy1s8cwkI/AAAAAAAAARw/Vo8A8G5y5k4/s1600-h/blogSnap11%5B3%5D.png) 

コネクタの設定画面で、以下の情報を入力してください

- **データソース名：** これは、DatabaseSpyプロジェクトのウィンドウや、再接続時に表示される既存のデータソースのリストに表示される名前です。
- **説明：** ユーザー様ご自身の参考情報です。
- **サーバー：** これは、Amazon RDSのアカウントダッシュボードに表示されているエンドポイントの名前です。
- **ポート:** 3306 – IT部門がファイアウォールでこのポートをブロックしていないか確認してください。
- **ユーザー名 / パスワード**: これは、Amazon RDSで設定したユーザー名とパスワードです。
- **データベース：** RDSインスタンスを起動する際に設定した、デフォルトのデータベース名です。

[![MySQL Connector/ODBC (MySQLコネクタ/ODBC)](https://lh4.ggpht.com/_REdrfeVqYdU/TSYy3A4BZNI/AAAAAAAAAR8/MQ-j5h1PdMQ/blogSnap12_thumb%5B1%5D.png?imgmax=800 "MySQL Connector/ODBC")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy2g81jPI/AAAAAAAAAR4/yz8-Isp-rCY/s1600-h/blogSnap12%5B3%5D.png) 

ローカル環境で作成したプロトタイプと同じDatabaseSpyプロジェクトで、Amazon RDSのクラウドデータベースに接続しました。以下は、プロジェクトウィンドウのスクリーンショットで、データソース名と、プロジェクトに追加したSQLファイルが表示されています 

[![クラウド接続機能付きのDatabaseSpyプロジェクトウィンドウ](https://lh6.ggpht.com/_REdrfeVqYdU/TSYy4Z2yQAI/AAAAAAAAASE/jjkGuAVBZYY/blogSnap15_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy Project window with cloud connection")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy3qGsQpI/AAAAAAAAASA/hC99hBGpc3Y/s1600-h/blogSnap15%5B3%5D.png) 

テーブルを作成し、クエリを実行する前に、各システムのバージョンを確認するのは興味深いでしょう。以下に示されたスクリーンショットは、各システムに関するバージョン情報を要求するクエリです。また、各クエリのすぐ上にある灰色のバーは、SQKLステートメントがどのデータ接続に割り当てられているかを示しています。 

[![ローカルサーバーが報告するバージョン](https://lh3.ggpht.com/_REdrfeVqYdU/TSYy5G-k3SI/AAAAAAAAASM/WwjShCXN8NM/blogSnap16_thumb%5B1%5D.png?imgmax=800 "Version reported by the local server")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy4w4Lt3I/AAAAAAAAASI/7HQFtTCam7g/s1600-h/blogSnap16%5B3%5D.png) 

[![クラウドサーバーが報告するバージョン](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy6bIVXoI/AAAAAAAAASU/-JyDD32Kp2g/blogSnap17_thumb%5B1%5D.png?imgmax=800 "Version reported by the cloud server")](http://lh3.ggpht.com/_REdrfeVqYdU/TSYy6A4UeJI/AAAAAAAAASQ/G1YLJDmUqrQ/s1600-h/blogSnap17%5B3%5D.png) 

Amazon RDSのレポートによると、MySQL Community Serverのバージョン5.1が稼働しており、これは弊社のローカル環境で試作しているものと同一です。これは良い兆候と言えるでしょう。

## ローカルプロジェクトをクラウドへ移行する

弊社のオリジナルテーブル作成スクリプトは、プロパティウィンドウで実行対象を再設定することで、クラウドデータベース上で実行することができます 

[![データベースのプロパティウィンドウにおけるデータソースの選択](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy7_iTcXI/AAAAAAAAASc/q0X1LX25ZVI/blogSnap19_thumb%5B1%5D.png?imgmax=800 "Data Source selection in the DatabaseSpy Properties window")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy7SFih4I/AAAAAAAAASY/u2ciH6xLgA4/s1600-h/blogSnap19%5B3%5D.png) 

SQLエディタウィンドウの上部付近にある灰色の「実行対象」バーは、クエリの対象となるクラウド上のAmazon RDSデータベースを示しています

[![DatabaseSpy SQLエディタのウィンドウ](https://lh6.ggpht.com/_REdrfeVqYdU/TSYy8UqW2LI/AAAAAAAAASk/f8LxhxA5KVE/blogSnap18_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy SQL Editor window")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy8HAL2UI/AAAAAAAAASg/rrrnJEP-cZ8/s1600-h/blogSnap18%5B3%5D.png) 

同様に「books」と「books2」というテーブルを作成した後、それぞれのSQLクエリをクラウドデータベース上で実行できます。例えば、すべての行に対してExtractValue()関数を使用する場合： 

[![ExtractValue() 関数](https://lh6.ggpht.com/_REdrfeVqYdU/TSYy9LMPvLI/AAAAAAAAASs/ELCuIt6yr6A/blogSnap20_thumb%5B2%5D.png?imgmax=800 "ExtractValue( ) function")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy8xnwAYI/AAAAAAAAASo/ZiXvT3Dpt3M/s1600-h/blogSnap20%5B6%5D.png) 

テーブル内のXML以外のデータからXML形式の出力を作成するための`Concat()`クエリ： 

[![XML要素を、XML形式でないテーブルのデータに追加するために、Concat()関数を使用します](https://lh4.ggpht.com/_REdrfeVqYdU/TSYy-KZdIUI/AAAAAAAAAS0/tBjejnmSxt8/blogSnap21_thumb%5B1%5D.png?imgmax=800 "Using the Concat( ) function to add XML elements to data from a non-XML table")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy9ozYo3I/AAAAAAAAASw/hiDcxS51Fg8/s1600-h/blogSnap21%5B3%5D.png)

テーブル内の単一の行に対する `UpdateXML()` 関数の使用例。

[![Amazon RDSクラウドにおけるUpdateXML()関数の使用方法](https://lh6.ggpht.com/_REdrfeVqYdU/TSYy-5p4W0I/AAAAAAAAAS8/S-IU7BoJrc4/blogSnap22_thumb%5B1%5D.png?imgmax=800 "Using the UpdateXML( ) function in the Amazon RDS cloud")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy-egtAMI/AAAAAAAAAS4/bEza7pRhyTs/s1600-h/blogSnap22%5B3%5D.png) 

単一の行から値を抽出する： 

[![blogSnap23](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy_qnwgsI/AAAAAAAAATE/gRjQHwNgX3w/blogSnap23_thumb%5B1%5D.png?imgmax=800 "blogSnap23")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy_ePFw3I/AAAAAAAAATA/gc3yssi4DvI/s1600-h/blogSnap23%5B3%5D.png)

## 結論

我々が実施したすべてのテストにおいて、Amazon RDSはローカルで動作するMySQLのコミュニティ版と全く同じように動作しました。この動作により、開発者はクラウドリソースのコストを気にすることなく、新しいクラウドデータベースアプリケーションの開発やテスト、または既存アプリケーションの改良を効率的に行うことができます。 

クラウドデータベースにおいて、テキスト列に格納されたXMLデータに対するMySQLのXML関数が正常に動作することを確認しました。当社のXMLデータは非常に限定的で、書籍テーブルのテキスト列は150文字までしか格納できませんでした。しかし、MySQLでは、単一の列に、はるかに大きなXMLドキュメントを格納できます。各テーブルの最大行サイズは65,535バイトです。テーブルがインデックス列を使用している場合でも、XMLエントリ1つを格納するためのVARCHAR型の列が64KBを超える可能性があります。さらに大きなXMLドキュメントを格納する必要がある場合は、MySQLはBLOBと同様のMediumTextおよびLongTextデータ型を提供しています。MediumTextは1600万文字以上のシングルバイト文字を格納でき、LongTextは最大4GBまで格納できます。このブログ記事では詳しく説明していませんが、MediumTextおよびLongTextデータ型を使用して、ExtractValue()関数とUpdateXML()関数を正常にテストしました。

大規模なXMLデータファイルを扱う場合、個々の要素を特定するためのXPath式を記述することは、開発上の課題となることがあります。XMLSpyに付属するXPathアナライザーは、XPath 1.0および2.0の式を[テストおよびデバッグする上で非常に役立つツール](https://www.altova.com/ja/xmlspy/xpath-analyzer.html)です。アナライザーにXPath式を入力すると、XMLSpyがそれをリアルタイムで評価し、結果として得られるノードセットを返します。これにより、XPathの問題を理解し、特定するために費やすデバッグ時間を大幅に削減できます。 

今後のブログ記事では、XMLSpy、MapForce、DiffDog、DatabaseSpyといったツールが、Amazon RDSを活用したクラウドアプリケーションの開発をどのように効率化できるかについて、さらに詳しく解説していきます。ぜひ、またお立ち寄りください。AltovaのツールがAmazon RDSとどのように連携するか、実際に体験してみたい方は、[無料トライアル版](https://www.altova.com/ja/download/missionkit/software_development_tools_enterprise.html)の[Altova MissionKit](https://www.altova.com/ja/missionkit/software-development-tools.html)を[ダウンロード](https://www.altova.com/ja/missionkit/software-development-tools.html)してみてください。
