MMLビュワーの開発を通して、MMLの応用や実装をするうえで役立つと思われるソフトウェアコンポーネントの開発を行った。このプロジェクトで開発したコンポーネントはGNU準拠のフリーウェアとするが、実用的で質が高く、ベンダーが商品を開発するうえでも有用であることを前提とした。またこれをベースにより多くの人からフィードッバクを得、さらに有益なものへと発展させて行きたいと考えている。
このプロジェクトは次のような目的に基づいている。
MMLの普及支援 |
標準的なツールやコンポーネントを提供することで、より多くの人(特に医療機関)が低コストでMMLを評価することができる。
開発の足がかり |
MMLはSGMLのサブセットであり、多くの機関や企業がノウハウを持ち得ていない状況である。コンポーネントレベルのソフトウェアは理解しやすく、変更も容易なので開発の足がかりとして非常に有用である。
新しい応用 |
MMLは電子カルテ同士のデータ交換を目的としているが、インフォームドコンセントや患者紹介システムにおけるデータ形式としても大いに期待できる。コンポーネントの提供はこうした新しい試みを容易に実験できると期待される。
今後の情報処理システムとして期待されるイントラネットや分散オブジェクトは、みなコンポーネントをベースとしたコンピューティング環境と言ってよい。イントラネットの例では、ユニバーサルクライントであるWebブラウザの要求をWebサーバーがそれぞれのアプリケーションサーバにディスパッチしている。(図1参照)一つのアプリケーションサーバは一つのビジネスロジックを担当しており、ソフトウェアの構造からしてもCGIやサーブレットなどのコンポーネントとして開発されることが多い。この構成はコンポーネント単位に処理が分散されるため、拡張やメンテナンスが容易であるばかりでなく、高速でもあり、使いやすい医療情報システムの実現が期待できる。
またこのようなコンポーネント自体が、さらにそれより小さい単機能的コンポーネントを利用して開発される時代を迎えている。すなわち、利用面においても開発においても、コンポーネントの重要性が大きくなっている。
上記目標を達成するため、このプロジェクトにおいて開発したコンポーネントはフリーウェアとしソースコードも公開している。GNUと同等であり、扱いを以下に要約する。
ソースコードが公開されており、自由に変更して使用することができる | |
営利・非営利を問わず、自由に使用できまた配布が可能 |
ただし、ここで開発されたコンポーネントやそれらを改造したコンポーネントを使用して何らかの被害や損害賠償の責任を被ったとしても、電子カルテ研究会は一切責任を負えない。コマーシャルユースに耐えうる品質の確保を目指しているが、使用にあたっては個々の責任において行うべきである。
本プロジェクトを成功させるためには、なるべく多くの人のアイデアが必要である。そこで以下のような項目について意見や実際のプログラムを募集し、継続して発展させたいと考えている。
コンポーネントのアイデア |
コンポーネントへの分け方は無限にあり、どれが正解と言うことはない。こんなコンポーネントがあったら便利だとか、既存コンポーネントの改良に関するアイデア。
改良ソースコードのアップロード |
パフォーマンスや使いやすさの向上を目的とした改良版ソースコード。
コンポーネント自体の提供 |
アイデアのみならず、実際に動作するコンポーネント。この場合はフリーウェアでも商品でも可。 ソースコードの公開についても自由判断。
上記いずれの場合も、当面電子メールで受付けWebで公開する方法して行く予定である。担当者の電子メールアドレスは以下の通り。
今回開発したシステムは、MMLインスタンスを解析して表示することのできるビュワーである。ビジュアル開発ツール上でコンポーネントを組み合わせ、このようなアプリケーションが簡単に作れることを目標にコンポーネントを抽出した。
設計にあたり次のことを考慮した。
クロスプラットフォーム - Java Beans の採用 |
コンポーネントはクロスプラットフォーム性を重視し Java Beans を採用した。
SGML検証機能 |
本ビュワーには簡単なSGML検証機能をつけた。これは専用のSGMLパーサがなくてもMMLインスタンスの検証(論理構造のチェック)ができるようにし、実用性を高めるためである。しかしこれは完全なSGMLパーサではなく、インスタンスの論理構造に間違いがあれば必ず指摘できるが、それがどの原因(要素の親子関係・要素の出現順、要素の出現回数)に帰するものかの判定まではできない。ここまでの検証が必要な場合は専用のツール(SP http://www.jclark.com/sp/index.htmが事実上唯一)を使用する必要がある。
明示的でカスタマイズのヒントを与える |
プログラムは明示的なモデルに従い、カスタマイズのヒントを与えて理解しやすく利用しやすいものとした。
このシステムはMMLインスタンスを解析し表示するものである。ところでMMLインスタンスはカルテの持つ情報を構造化したものであり、カルテのモデルに他ならない。(図2参照)
したがってシステムにはこのモデルを操作し表示する機能が求められる。このような問題を扱う場合、SmallTalkで用いられたMVC(Model View Control)のデザインパターンが非常に有効である。そこで本システムもこのパターンそって分析を行い、次のコンポーネントを抽出した。
MMLBean |
これはこのシステムのモデルに相当するオブジェクトである。今回はバージョン1.02で定義された一番外側のSECTIONタグをプロパティに持つオブジェクトとして定義した。すなわちこのオブジェクトは、
MML-INFORMATION-SECTION
PATIENT-ID-SECTION
LIFESTYLE-SECTION
HEALTH-INSURANCE-SECTION
CLINIC-ALLERGY-SECTION
REGISTERED-DIAGNOSIS-SECTION
FIRST-ENCOUTER-PROFILE-SECTION
CLINICAL-ENCOUNTER-SECTION
CLINICAL-SUMMARY-SECTION
をプロパティに持つ。他のオブジェクトはこれらの値を操作するか表示するかのどちらかである。
またこのオブジェクトは、初期化の段階でDTDファイルを読み込み、MMLインスタンスの論理構造を検証するための木構造を確立している。そのため内部にDTDParserBeanを有している。
要約すると、MMLBeanはカルテの情報を構造化していると共に、DTDをパースして自分自身を検証することもできる、文字通りMMLそのもの、システムのコアとなるオブジェクトである。
MMLViewerBean |
これはモデルのView(表示)を担当し、唯一GUIを持つオブジェクトである。モデルの構造を反映し、各セクション毎に情報を表示する機能を持つ。
SGMLParserBean |
MMLインスタンスから上記のモデルを構築するためには、インスタンスをパースし、タグとテキスト(トークン)に切り分けるとやりやすくなる。このオブジェクトはパースを行うと共に、切り出したトークンをMMLBeanに伝える役目を持つ。
ベンダーにとっては、このBeanが一番有用であると思われる。
Java Beans間の通信には、Infobusとイベントシステムによる方法があるが、今回は全てイベントによる方法を採用した。理由はこれらのBeanには非常に密接な関係があるからである。
束縛プロパティ |
MMLBeanのプロパティは束縛プロパティとし、値が変更されると自動的にViewerへ通知される方法を採用した。これはJava Beansアーキテクチャでサポートされている標準のメカニズムである。
パース要求イベント |
これはインスタンスのパースを開始するためのイベントであり、ViewerからParserに送られるようにした。すなわち、ViewerはMMLインスタンスが格納されたファイルを読み込み、パース要求イベントでそれをParserに送る。Parserはインスタンスデータを受け取りパースを開始する。
要素イベント |
Parserはインスタンスを先頭から順次タグとテキストに区切り要素イベントでMMLBeanに通知する。MMLBeanは受け取ったタグやテキストから各セクションオブジェクトを構築しプロパティ値として格納する。この時、送られたきたタグがDTDの木構造に照らし合わせて問題がないかどうかの検証をしている。問題ありと判断した場合は、その旨をViewerへ通知するようになっている。
以上の関係をまとめると図2のようになる。
ソースコードは頻繁に改良されるので、解読に必要な情報はソースコード自体に記述している。同時にJava Doc スタイルによるオンラインドキュメント http://miyazaki-med.ac.jp/mmlbeans/ を作成しているので、クラス階層や主要メソッド等を調べることができる。
Java バーチャルマシン SUN JDK1.6 以降 | |
GUI SWING 1.1 以降 |
MMLBean(モデル)の変更 |
モデルオブジェクトを変更することで、もっと詳細な情報を抽出したり、異なる角度から分析ができるシステムを作ることができる。
ViewerとMMLBeanの統合 |
このモデルではViewerとMMLBeanが同じ情報を重複して持っている。これらを統合することでより高率的なシステムとなる可能性がある。
イントラネットへの応用 |
MMLBeanにHTML化のメソッドを持たせ、イントラネットで使用することができる。
クラスファイル |
ソースコード |
ftp.miyazaki-med.ac.jp/mmlbeans/mmlviewer/sources/
本プロジェクトは、厚生省科学研究費(1997年度情報技術開発研究事業 医療情報の交換手順の標準化に関する研究)を得て行われました。また、以下の企業(順不同)からご協力いただきましたを、厚くお礼申し上げます。
(株)NEC | |
(株)日本光電 | |
CAIシステム(株) | |
(株)アボック西村 | |
富士通(株) | |
住友電工システムズ(株) | |
(株)デジタルグローブ |