Office XPのXML度を探る(後編)

新野淳一
@IT編集局
2001/7/5

 「Office XPのXML度を探る」の前編では、XML機能を裏で支えるMSXML3についての解説と、ExcelのXML機能について紹介してきた。後編にあたる今回は、AccessがどのようにXML文書を扱うのかと、Office XPの開発環境について触れる。

XML Schemaに早くも対応したAccess

 Access 2002では、従来データベースエンジンに利用していたJetエンジンに加え、SQL Server 2000 Desktop Engineを搭載したのが大きなトピックだろう。そして、XMLデータのインポートとエクスポートも新しい機能として加わっている。

 この2つの新機能は、Accessを企業システムに結合させるのに大きな意味を持つだろう。SQL Server 2000と完全に互換性のあるデータベースエンジンを利用することで、同製品を利用したデータの相互運用性は飛躍的に高まるはずだ。必要な部分だけを手元のPCにレプリケーションして処理する、といったことが非常に容易になる。と同時に、SQL Server 2000でないデータベースとは、XML文書形式でのデータのやりとりで連携できるようになる。

 そのAccessが備えるXML文書のインポート/エクスポート機能について探ってみよう。

テーブルの内容をエクスポート

 まずは、Access 2002のエクスポート機能を紹介しよう。エクスポート機能では、データベースの内容を、Excel形式、テキスト形式、Lotus 1-2-3、Paradox、リッチテキスト形式、HTML形式などで保存することができる。この形式の1つに、XML文書の形式が含まれているわけだ。

 XML文書形式でのエクスポートは、特定のテーブルをXML文書形式にするだけでなく、ビュー、フォーム、レポート、そしてストアドプロシージャ、関数などもXML文書形式にできる。まずはテーブルのエクスポート機能から。

 最初に、下記のようなシンプルなテーブルのエクスポートを試してみよう。このテーブルEmployeesをXML形式で保存してみる。

 すると、下記のようなXML文書が保存される。

<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Employees.xsd">
  <Employees>
      <LASTNAME>Koizumi</LASTNAME>
  </Employees>
  <Employees>
      <LASTNAME>Tanaka</LASTNAME>
  </Employees>
</dataroot>

 ここから分かるのは、Accessはテーブルの内容を次のような形式でXML文書へ変換している、ということだ。

<dataroot>
  <テーブル名>
    <列名>データ</列名>
  
</テーブル名>
  <テーブル名>
    <列名>データ</列名>
  
</テーブル名>
</dataroot>

 試しに、サンプルデータベース「Northwind」から、得意先テーブルをXML文書としてエクスポートしたときのXML文書も見てみよう。元のテーブルを下記に示す。

 ここから生成されたのが、下記のXML文書だ。

<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:noNamespaceSchemaLocation="得意先.xsd">
<得意先>
  <得意先コード>1</得意先コード>
  <フリガナ>キッサタイムマシン</フリガナ>
  <得意先名>喫茶たいむましん</得意先名>
  <担当者名>林  千春</担当者名>
  <部署>店長</部署>
  <郵便番号>8400853</郵便番号>
  <トドウフケン>サガケン</トドウフケン>
  <都道府県>佐賀県</都道府県>
  <住所1>佐賀市長瀬町 23-XX</住所1>
  <電話番号>(0952)26-64XX</電話番号>
</得意先>
<得意先>
  <得意先コード>2</得意先コード>
  <フリガナ>コリョウリナンゴク</フリガナ>
  <得意先名>小料理なんごく</得意先名>
  <担当者名>河本 なみ</担当者名>
  <部署>料理長</部署>
  <郵便番号>9020071</郵便番号>
  <トドウフケン>オキナワケン</トドウフケン>
  <都道府県>沖縄県</都道府県>
  <住所1>那覇市繁多川 1-21-XX</住所1>
  <電話番号>(0988)55-87XX</電話番号>
  <ファクシミリ>(0988)55-87XX</ファクシミリ>
</得意先>
……………以下略…………

 複雑なテーブルをXML文書形式にしても、まったく同じ形式で出力されていることが分かる。

スキーマ情報をXML Schemaで記述

 さて、XML文書形式でエクスポートする場合、下記のような画面が現れて、どのような種類のXML文書を出力するのかが指定できる。1つ目の「データ(XML)」とは、いま説明した元のテーブルの内容を含んだXML文書のことだ。次の項目「データスキーマ」は、XSD形式でテーブルのスキーマ情報も出力できることを意味する。つまり、Accessのエクスポート機能はテーブルのデータだけでなく、構造(スキーマ)をXML文書にして取り出すこともできるわけだ。

 XSD形式とは、XML Schema Definition Languageによって記述されたファイルのこと。XML Schemaは、W3Cによって勧告されたXMLスキーマ言語の1つであり、今後主流になるスキーマ言語だといわれている。このデータスキーマファイルとは、Accessのテーブルのスキーマ情報を、XML SchemaというXML文書のスキーマ言語によって表現している。ちなみに、見て分かるとおり、このXSD文書もXML形式の文書として記述されている。

 XSDによって記述されたデータスキーマのファイルを見てみよう。先ほど例に出したEmployeesテーブルのスキーマは、Access上で見ると下記のようになっている。

 このデータスキーマを、XSD形式で出力したものが下記のリストだ。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
  <xsd:element name="dataroot">
    <xsd:complexType>
      <xsd:choice maxOccurs="unbounded">
        <xsd:element ref="Employees"/>
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Employees">
    <xsd:annotation>
      <xsd:appinfo/>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="LASTNAME" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
          <xsd:simpleType>
            <xsd:restriction base="xsd:string">
              <xsd:maxLength value="255"/>
            
</xsd:restriction>
          </xsd:simpleType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

 赤字で示したところに、文字列型で最大文字長が255だと記述されている。テーブルのスキーマが、XML Schemaで記述されていることが分かるだろう。

 つまりこれは、あるスキーマをXML Schemaで、(すなわちXSDを利用して)表現したいときに、AccessをXML Schemaの出力ツールとして使うことができることを意味している。上記の例を見れば分かるように、XML Schemaの記述は結構複雑で面倒だ。そんなときは、Accessでテーブルを定義し、列に数値型や文字列型などの属性を付けたら、それをXML文書形式でエクスポートすればいい。簡単にXML Schema形式の文書を得ることができる。

フォームやレポートもXML形式で出力

 さて、前述の画面ではデフォルトでオフになっていた「データ(XSL)のプレゼンテーション」についても説明しよう。このオプションをオンにすると、下記の4つのファイルが生成される。

  • employees.xml (テーブル内のデータが含まれているXML文書)
  • employees.xsd (テーブルのスキーマをXML Schemaで表現したXML文書)
  • employees.xsl (XML文書にスタイルを与えるためのスタイルシート)
  • employees.html (スタイルシートによってスタイルが与えられたXML文書を、Webブラウザで表示するためのスクリプトが含まれたHTML文書)
 後ろの2つが「データ(XSL)のプレゼンテーション」オプションをオンにすると追加されるファイルである。つまり、スタイルシートとしてのXSL文書と、HTML文書が新たに生成される。なにはともあれ、このHTML文書をWebブラウザで表示してみよう。すると、下記のようになる。

 テーブルの内容がWebブラウザ上に表示された。これはHTML文書にこのようなデータが書き込まれているのではなく、このHTML文書からXML文書とXSLTを呼び出して、Webブラウザ上に表示している。

 ただし、普通のテーブルをエクスポートするのでは、上記のように表形式で表示されるだけであり、あまり面白くない。AccessにはフォームやレポートもXML文書形式にエクスポートできるため、フォームをXML文書形式でエクスポートしてみよう。

 まず、Accessにあらかじめ用意されているデモンストレーションデータベース「Northwind」から、フォーム「得意先」を開いてみる。このフォームは下記のような画面になっており、次々に得意先のデータを画面に呼び出せる。

 このフォーム「得意先」も、XML文書としてエクスポートする。フォームをエクスポートすると、デフォルトで下記の3つのファイルが生成される。

  • 得意先.xml (テーブル内のデータが含まれているXML文書)
  • 得意先.xsl (XML文書にスタイルを与えるためのスタイルシート)
  • 得意先.html (スタイルシートによってスタイルが与えられたXML文書を、Webブラウザで表示するためのスクリプトが含まれたHTML文書)

 デフォルトではスキーマは不要なため生成されないが、もちろん同時に生成させることもできる。得意先.xmlのファイルは、得意先テーブルの内容をXML文書にしたものであり、テーブルの内容をXML文書として保存したときと同一のものだ。

 このとき生成されるXSL文書が、レポート形式を表現するためのスタイルシートとなる。XML文書にスタイルシートを適用させて表示するのが、HTML文書になるわけだ。WebブラウザでHTML文書を表示させると下記のようになる。

 XML文書にこうした書式情報を与えるのがXSLであるが、Accessではフォームやレポートの機能を表現するために、マイクロソフトが定義した「ReportML」(Report Markup Language)を利用しているという。ただし、このReportMLが使われているという情報はAccessのヘルプ内に記述があるのだが、それをどのように利用しているのか、どのような言語なのか、といったことについての資料は見つからなかった。

筆者注:2001年7月に、米マイクロソフトからReportMLについての英語版の資料が公開された

XML文書をインポートでテーブル化

■MSのドキュメントにバグ?
この記事を書くに当たって、マイクロソフトのドキュメントを参考にしたが、その中でどうしてもドキュメントが間違っていると思わざるを得ない箇所があった。それは、「Using XML and Access 2002」に説明されているXML文書だ。このページには、Accessインポート用のXML文書のサンプルがあるが、このサンプルはここで説明しているサンプルとは明らかに異なっている。ただし、実際にはマイクロソフトのサンプルは正しくインポートできない。そのため、この記事では筆者が実験して正しいと思われる方のサンプルで説明している。

 今度は、XML文書をAccessで読み込むインポート機能についてみていこう。

 AccessのXML文書のインポート機能はテーブル単位に行われる。つまり、XML文書をインポートすると、その内容は Excelのワークシートのように行と列に分解されてテーブルとして保存されていく。ただし、ExcelでXML文書をインポートする際には、「ExcelのXML機能は使えるか?」で書いたように、XML文書に対する「フラット化」として、シェープツリーや属性のノードへの分解などがXML文書に対して行われたうえで、インポートされていた。あらゆるXML文書がそのまま素直に読み込めるわけではなかった。Accessでもそうした加工が行われているかどうかは重要なチェックポイントだが、調べてみると、AccessがXML文書を読み込む方法はExcelよりも単純な方法のようだ。

 前述のXML文書のエクスポート機能で見たように、AccessでインポートできるXML文書は下記のような構造を持つ。

<dataroot>
  <テーブル名>
    <列名>データ</列名>
  
</テーブル名>
  <テーブル名>
    <列名>データ</列名>
  
</テーブル名>
</dataroot>

 そこで、下記のようなもっとシンプルなXML文書を作って読み込ませてみよう。

<?xml version="1.0" encoding="UTF-8" ?>
<dataroot>
  <Employees>
    <Lastname type="primeminister">Koizumi</Lastname>
  </Employees>
  <Employees>
    <Lastname type="minister">Tanaka</Lastname>
  </Employees>
</dataroot>

 このときは下記のようなテーブルになる。

 これで分かるのは、属性はまったく無視される点だ。では、もう少し複雑なXML文書の場合にどうなるのかを見てみよう。ExcelのXML文書の読み込みで出てきたような、Excelならフラット化が必要な程度に複雑なXML文書を、Accessでインポートしてみた。

<?xml version="1.0" encoding="Shift_JIS" ?>
<Document>
  <Contact>
    <Name>山田太郎</Name>
    <Email>taro@yamada.com</Email>
    <Email>tyamada@atmarkit.co.jp</Email>

  </Contact>
  <Contact>
    <Name>鈴木次郎</Name>
    <Email>jsuzuki@abc.com</Email>

  </Contact>
</Document>

 上記のXML文書を読み込ませた結果が下記のテーブルだ。結果からいうと、Contactがテーブル名となり、要素NameとEmailがそれぞれ列に。その内容がデータとして読み込まれているが、山田太郎氏の最初のメールアドレスは読み込まれていない。これは2つ目のメールアドレスによって上書きされたように考えられる。Accessのインポート機能では、Contact要素ごとに1フィールドが作成されるようだ。そのため、最初のContact要素では、Nameが「山田太郎」に決まると、Emailも1つだけとなり、最後のEmail要素が使われたのだと思われる。

山田太郎氏の1つ目のEmail要素は無視され、2つ目のEmail要素だけが採用されている

 こうしてみると、AccessのXML文書のインポート機能は、Excelのような変換過程をほとんど持たないことが分かる。

AccessのXML機能のまとめ

 説明が少し長くなったため、最後にAccessのXML機能をまとめておこう。基本的にはXML文書のエクスポートとインポートしかないのだが、エクスポート機能では、

  • データのエクスポート
  • テーブルスキーマをXML Schemaで記述したXSDファイルのエクスポート
  • レポートやフォームの表示形式を、XSLのスタイルシート形式にしたエクスポート

 の3種類の機能がある。これにより、AccessをXML SchemaのスキーマエディタやXSLのスタイルシート作成ツールとして使うことも、ある程度は可能だ。また詳細については触れないが、HTMLの代わりに、Internet Information ServerのActive Server Pagesに対応したASPファイルを出力する機能もある。

 インポート機能では、特定の形式で書かれたXML文書をテーブルデータとして読み込める。

 ただし、こうした入出力可能なXML文書の仕様については、やはり詳細な資料はいまのところマイクロソフトから提供されていないようだ。

参考文献
■「Using XML and Access 2002」 Microsoft Assistant Center
(英文)
■「Exporting to XML from Access 2002 (Revised)」 Microsoft Assistant Center
(英文)


開発環境もXML対応へ

Index
Office XPのXML度を探る
  Office XP各製品のXML機能概要
  XML機能の核、「MSXML3」
MSXML3が自動的にインストールされる
Internet Exlorerはバージョンアップしないが……
XML普及の弾みがつくか
  ExcelのXML機能は使えるか
Excel以外のアプリケーションでExcelのデータ分析ができる
XML文書にスタイルシートを適用する場合
XML文書を読み込む
コラム Excelで読み込めるXML文書を作ってみる
XML文書の出力
そのほかのXML機能
XML Schemaに早くも対応したAccess
テーブルの内容をエクスポート
スキーマ情報をXML Schemaで記述
フォームやレポートもXML形式で出力
XML文書をインポートでテーブル化
AccessのXML機能のまとめ
  開発環境もXML対応へ
IntelliSenseがXML対応
Office XP:どれもすぐ使えるXML機能
 


 



XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間