Last-modified: 2003-12-15 (月) 10:40:32 (7437d)

2000年上半期 技術検証論文

XML週報ワークフローシステム プロトタイプ

2000.09.27
日進ソフトウエア株式会社 ネットビジネス推進室
定村 和彦
 

1. はじめに

 ここ数年、日本でもインターネットが急速に普及し、企業もウェブを利用したサービスを積極的に利用しようとする動きが活発になっています。このような需要を受けて、ソフトウエアベンダー側も、ウェブを利用したB2B(business to business)、B2C(business to consumer)システムを次々と発表し、この新しい分野でのイニシアティブをめぐって激しい競争になっています。最近ではIBM、Microsoft、Aribaなど30社余りが「UDDI(Universal Description, Discovery and Integration)」というプロジェクトを共同で立ち上げ、企業間電子商取引の標準仕様を策定、取引環境の統合を目指しているようです。

 そのような状況のなか、B2B、B2Cシステムのための新製品、新技術も開発、公開されています。BEA WebLogic、IBM WebSphere、Oracle iAS 8i等、企業での実用に十分な機能を持ったWeb Application Serverも普及し始めていますし、企業間連携を容易にするBizTalkフレームワークや、企業間通信のためのファイアウォール通過可能なプロトコルSOAPが、Microsoftを筆頭として推進されています。そして、これらのベースとしてXML(eXtensible Markup Language)というマークアップ言語が広く利用されています。

 今回は、B2Bシステムの一部であり、その原型であるB2E(business to employee)システムの構築に取り組みました。B2Eシステムとは従来形式の書簡、社員便、ファックス等での情報交換を電子的に行うことにより、印刷物コストの削減、総務担当者の削減、情報の迅速な配信を目的とするシステムの総称です。

 これから述べるシステムは、プロジェクトチーム内でメンバが上長に毎週提出する「週報」を電子化するシステムです。前述した電子化の利点に加えて、週報ファイルにXMLを用いることで書式の固定をはかり、デザインを統一することで週報を読みやすくしています。まず、システムに用いた技術や規格の概略を説明し、後にシステム自体の説明をさせて頂きます。

2. XML

2.1. 概略

 XMLは「拡張可能マークアップ言語(eXtensible Merkup Language)」の略で、HTML(Hypertext Markup Language)がもつインターネットとの親和性、手軽さを保ちつつ、SGML(Standard Generalized Markup Language)がもつ柔軟性、応用のし易さを取り入れて開発された言語です。Webに関する規格のほとんどを制定、管理しているW3C(World Wide Web Consortium)によって開発、標準化されました。

2.2. XMLの必要性(HTMLの限界)

 XMLが必要とされるようになった裏には、HTML規格の肥大化、複雑化があります。

 ここ数年、Webは対話性をもつメディアとして急速に成長し、それとともにHTMLも拡張され、新しいタグがいくつも追加されました。その結果、HTML4.0では100種近くにまでタグが増え、HTMLはとてもコンパクトな言語とはいえなくなりました。しかし、ウェブの多様化にしたがって、更に多くのタグの追加が求められています。例えば、電子商取引用のタグ、ストリーミング用のタグ、データベース用のタグという風に、用途ごと、アプリケーションごとに異なるタグを必要としていて、HTML規格はこの問題を解決できずにいます。

 また、最近ではPDA(Personal Digital Assistant)や携帯電話からWebにアクセスする人が急増していて、W3CもPCに代わってこれらの端末が主流になっていくと予想しています。こういった携帯コンピュータはPCほど強力でないので、HTMLのような複雑で曖昧さを許す言語を処理できない、という問題があります。非力なコンピュータでも処理が可能で、HTMLに代わることができるマークアップ言語が必要です。

2.3. XMLとHTMLの比較

 XMLはこれらの経緯を経て、主にHTMLの欠点を補うために開発されました。HTMLと比較した場合の本質的な変更点は、

  • 定義済みのタグは1つもない
  • タグの記述、構造等がHTMLよりも厳密である

ということです。これによって、

  • 必要な全てのタグを自分で定義することによって、必要最小限のタグセットのみで文書を構成でき、かつ独自の拡張が可能である。
  • 曖昧な書式や間違った書式のチェックとエラー処理が容易なので、ブラウザがより小さく、速くなる。

という効果があります。これによって、前述したHTMLの短所が補われています。

2.4. XMLの特徴

 HTMLにない性質としては、XMLファイルに一意性を持たせる「名前空間」という概念があります。XMLのタグセットにURI(Universal Resouce Identifier)を関連付けておくことで、同一名のタグを使ったXML文書をやり取りしても、タグの衝突が避けられます。これにより、複数の企業やグループで文書のやり取りをする場合、XMLを用いればより円滑にできると考えられます。

 更に、XMLには「タグに意味をもたせられる」という利点があります。つまり、人間だけでなく、コンピュータもそのタグが何を意味しているのか理解できるということです。この長所を利用して、XMLはPublishing以外の分野にも利用が期待されています。例えば、Microsoft、IBMが提案するSOAPというプロトコル規格でもXMLが使われています。SOAPでは「何がメッセージの中にあるのか」「誰がそれを処理すべきなのか」「それは選択可能か必須かどちらなのか」といったことを表現するための枠組みを定義する必要があり、XMLを用いて実現しています。

 また、「構造が厳密」で「タグが意味を持つ」のですから、XMLをデータベースとして利用することも考えられます。W3CはそのためにXQL(XML Query Language)という規格を開発しました。これは、1つのXMLデータベースに保存されている複数の文書を問い合わせるための規格です。XMLデータベースは、これまでとは大きく異なる仕様を持ったデータベースとしてさまざまな用途に期待されています。

2.5. XMLをベースとした関連規格

 他にも、XMLを応用した言語、関連規格がいくつも開発されています。数式記述用の「MathML」、マルチメディア情報を同期させて表示する「SMIL(Synchronized Multimedia Integration Lnaguage)」、標準2次元ベクトルグラフフォーマット「SVG(Scalable Vector Graphics)」、XML文書に対するでデジタル署名規格「XML-Dsig」等がW3Cで検討されています。必要とされて開発されているこれら全ての規格のベースはXMLであり、XMLが今後重要度を更に増していくことは間違いありません。

3. XML利用技術

 次に、XMLを取り扱う技術について紐解いていきます。出版様式を決める「XSL(Extensible Stylesheet Language)」や「XSLFO(XSL Format Object)」、より進めて構造変換まで可能な「XSLT(XSL Transformations)」、XMLの構造を解析しアプリケーションに渡す「Parser」とそのインターフェースである「DOM(Document Object Model)」、イベントベースのインターフェースである「SAX(Simple API for XML)」についてです。

3.1. XSL、XSLT、XSLFO

 XML文書は、同じ文書に異なるスタイルシートを適応することによって、異なる形式にレンダリングすることができます。ここで、HTMLと異なる点は、文書情報とスタイルシートが完全に別個のファイルとして分離していること、文書の「見た目」よりも文書の構造を整えることに重点を置いていることです。

 W3Cではスタイルシート用の言語としてXSLという勧告を公開しています。XSLは、HTML用のCSSよりも積極的に、表示する以前の文書変形を可能としています。XSLTとは、端的に言うとXSLの文書構造変形機能を拡張したものといえます。XSLFOとはその逆で文書の「見た目」を決定する言語です。

3.2 DOMとParser

 XMLをプログラムで扱えるようにする技術の一つには、DOMという概念があります。DOMはW3Cがブラウザ用に開発したもので、Netscape NavigatorとInternet Explorerのオブジェクトモデルを統一しようとして生み出されたものです。DOMはオブジェクトベースのインターフェースですから、利用する際にはオブジェクトの構造を知る必要があります。それを解析するのがParserです。ParserはアプリケーションとXMLファイルの間に位置し、開発者から複雑なXMLの構文を隠すことを目標としています。ParserがXMLのツリー構造をメモリ内に構築し、DOMはプログラム的にそのXMLツリーを走査します。

 現在、Microsoft、IBM、Oracle、Lotus等のベンダーが提供しているXML ParserはDOMを主にサポートしています。

3.3. SAX

 DOMのデメリットは、XML全体をメモリにロードするためにオーバーヘッドが大きいことです。また、ネットワーク経由でXMLデータを送信する場合、ファイル全体の送信が終わるまで待たなければファイルの処理を開始できません。

 そこで、XML-DEVメーリングリストのメンバーがSAXというイベントベースの非常にシンプルなインターフェースを開発しました。SAXでは、XMLプロセッサが1つのXML要素を読み終えるとすぐに処理することができます。専用のデータ構造と専用のオブジェクトを持つアプリケーションではDOMのツリー構造を利用するよりも、自身のデータ構造に文書を直接読み込む方が効率的です。そのような場合にはSAXが有効です。

 一般に、SAXはDOMと比較して、パフォーマンスは大幅に向上しますが、ある程度の開発柔軟性を失う、ということになります。

4. 検証システム(XML週報ワークフロー)

 今回作成したXML週報ワークフローシステムのプロトタイプは非常にシンプルです。コードは「XML作成」部分と「XML閲覧」部分に分かれています。

4.1. XML作成

 まずは、「XML作成」部分をご説明します。まず、週報作成者はフォームに必要事項を記入していきます。ここで、自分のメールアドレスと、閲覧者のメールアドレスも記入します。今回のシステムではユーザ認証を省いたので、このメールアドレスでユーザを識別することになります。全ての入力が終了したら、ボタンを押すと、フォームの内容がASPファイルに送られます。そこで、JScriptによりXMLファイルが生成されます。ここでは、XMLジェネレーターとしてDOMが使われています。コードは、JScriptです。まず、

var xmldoc = new ActiveXObject("Microsoft.XMLDOM");

として、オブジェクトを生成します。これにXMLの要素であるノードを追加していきます。

 XML要素(ノード)の作成では、まず最初にツリー構造の先頭ノードを作成します。あとは、その子ノード、孫ノードとして要素を次々と追加してやります。例えば、フォームの「報告者」の内容から「reporter」というノードを作成するには、以下のように記述します。

emRepo_name = xmldoc.createElement("reporter");
emRepo_name.text = Request("repo-name");
topNode.appendChild(emRepo_name);

 第一文で「reporter」という名前のノードを作成するために、要素オブジェクトを生成します。第2文で先に入力したフォームの内容のうちIDが「repo-name」であるものの内容をテキストとして要素オブジェクトに代入します。第3文で、その要素オブジェクトをXMLツリー構造に追加しています。これだけで、ノードの作成・追加ができます。

 あとはこれを繰り返し、最後に

xmldoc.save(Server.MapPath (filename));

としてやれば、XMLファイルがサーバに保存されます。

 例えば、保存されたXMLファイルは以下のような構造になります。

<weekly_report>
<reporter>定村</reporter>
<date>00/10/11</date>
</weekly_report>

4.2. XML閲覧

 次に「XML閲覧」部分についてご説明します。週報閲覧者は受け取ったメールに記述されているURLを直接ブラウザに送るか、ブラウザ上で閲覧する週報を選択するかして週報ファイルを開きます。今回のシステムでは「閲覧者」は、週報作成者が指定した「第一閲覧者」「第2閲覧者」と「それ以外」の3種類に分類されます。この選択は閲覧者自身に任されます。作成者が指定した閲覧者は週報に対して、「承認」もしくは「変更を要求」できます。

 閲覧部分も全てJScript、DOMで構成されています。コードは今回も非常に簡単で、

var xmldoc=new ActiveXObject("Microsoft.XMLDom"); 

として、オブジェクトを生成した後、

xmldoc.load(Server.MapPath (XMLpath)); 

として、サーバ上にあるXMLファイルを読み込んでやります。これだけで、メモリ上にXMLツリー構造ができているので、ノードの操作が可能になります。例えば、mail01という名前のノードの中身を得たいなら、

var mail01Node = xmldoc.getElementsByTagName("mail01");
Response.Write(mail01Node(0).text);

としてやれば、要素オブジェクトmail01Nodeにmail01というタグ名のノードが割り当てられ、その中で一番最初のノードの内容がテキスト表示されます。
少しだけ注意する点は、生成したファイルオブジェクトxmldocを明確に閉じるメソッドをDOMは定義していないことです。ですから、ファイルの操作が終わったら、

var xmldoc = null; 

としてやる必要があります。

5. 考察

5.1. DOMについて

 4章に説明したように、XMLファイルの操作はDOMを用いれば非常に簡単です。DOMを用いなくても同様の操作はできますが、その場合コードが何倍にも増えますし、見た目にもわかりにくくなります。

 ただ、ツリー構造をメモリ上に確立しなければ操作が始められないため、巨大なファイルをネットワーク経由で扱う際などには、不利であると思われます。
尚、今回はMicrosoft Internet Explorer 5に同梱されているパーサー(msxml.dll)を用いた(Internet Explorer 4に付属のmsxml.dllはバージョンが古い)わけだが、XML操作部分は基本的なメソッドしか用いていないので、DOMをサポートしている他のパーサーでも同様に利用できます。

5.2. プロトタイプシステムについて

 今回のシステムはXMLとDOMの検証という意味合いが強く、実用のためには残念ながら不備があります。例えば現行のままでは、ユーザー認証に問題がありますし、異なるプロジェクトチームでシステムを共有するのであれば、週報のスタイルを選択する機能も必要です。

5.3. サーバーサイドジョブについて

 将来的には、クライアントにアプリケーションをインストールすることなく、「サーバー上に公開されたアプリケーションをウェブを介して端末から利用する」という方式がより一般的になるかもしれません。Web Application Serviceの普及やMicrosoftの.NET(ドットネット)構想も、目指す方向は同じと考えます。

6. 終わりに

 XMLは様々な用途での利用が提案されており、異なるアプリケーションや異なるネットワークでデータの送受信を可能にすると考えられます。特にここ数年で飛躍的に発展したWeb Publishingの分野でXMLは広く用いられるでしょう。様々な関連規格をもつことで非常に利用しやすいXMLは今後必須の技術になることは間違いありません。

7. 参考文献・URL


添付ファイル: filedemo01.zip 2700件 [詳細] filedemo02.zip 2661件 [詳細] filexml2000.zip 5437件 [詳細]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS