知見情報の共有に必要となる技術について調査し、 地球惑星科学分野での応用を具体的に考える前段階としての概念的導入と整理を行うべく、 XML、DTD、XML Schema、RELAX、DOM、SAX、XSLT、SVG を織り交ぜながら簡単な例を構成して考察を進め、 知見情報共有システムの姿を模索する。
昨今の計算機技術の進歩に伴い、さらに高速・高精度化された数値計算が 望まれ研究される一方で、個別のプログラムに関して詳細な情報を得る方法、 膨大な量の解析結果から研究者毎に関心のある情報を引き出す手段は、 その技術の進歩に比べて未発達であると言える。
そこで、本来なら共有可能な貴重な情報にも関わらず抜け落ちている情報、 例えば経験に基づいた実験パラメータや、 数値計算プログラム利用の際の計算例などを含め、 増え続ける情報を、効率よく有効に利用可能な仕組みを構築・整備することが 重要となってきた。
こうした状況を受け、2000年11月、伊理正夫らを中心に 知見プラットフォーム推進協議会が発足した。 この協議会は、知見プラットフォームの普及と、 知見共有のために策定したコンテンツ形式と ソフトウェア・アーキテクチャを公開し、標準化を推進することを目的としている *1。
この知見プラットフォーム構想の基となっているのが、 過去に情報処理振興事業協会(IPA)の 次世代デジタル応用基盤技術開発事業(平成10年度)において CAMP(Collaborative Activities for Materials Science Programs) プロジェクトが中心となって研究開発した情報共有システムである。 同システムでは、計算科学分野において萌芽期にあるプログラムの発展の促進を狙い、 従来ソースコードの公開に留まっていたものに、 計算例や計算テクニックなどのプログラム利用に関する様々な知見を付加し、 これの蓄積・流通・活用に至る整備された環境を提供する。
具体的には、既存の情報は知見文書と呼ばれる XML により構造化されたものに書き換え、 これをデータベースに蓄積し管理する知見情報サーバーと、 ネットワークを介した知見文書の検索・取得・登録をこなし 知見文書オーサリングツールという側面も持つ知見情報フロントエンド、 そして、計算プログラムが XML で表現された知見情報を入出力できるようにするための XML I/O ライブラリからなる*2(図1)。
図1:知見プラットフォームの姿。知見文書はサーバーで蓄積管理され、 インターネットなどのネットワークを通じてフロントエンドとやりとりされる。 フロントエンドでは知見文書の閲覧の他、 XML I/O ライブラリを通じて計算プログラムにデータを変換して送り、 その結果を再び登録可能な知見文書として編集可能な状態にする。 |
実証実験は、生体高分子、メッシュ生成、計算流体力学、計算物理の 4分野の研究グループで行われ、以下の有用性が確認されている*2(表1)。
分野 | 参加機関 | アプリケーション |
---|---|---|
生体高分子 |
京都大学:郷研究室 早稲田大学:輪湖研究室 北里大学:猿渡研究室 名古屋大学:郷研究室、垣谷研究室 大正製薬株式会社 |
FEDER/2
|
メッシュ生成 | 東京大学:杉原研究室 |
非構造格子メッシュ生成ソフトウェア
|
計算流体力学 |
東京大学:矢川研究室 九州大学:金山研究室 横浜国立大学:奥田研究室 |
MSF-TSLOW
|
計算物理グループ |
CAMP プロジェクト CAMM フォーラム物理分科会 |
CAMP-Atami
|
知見プラットフォームは研究者間のコラボレーションを支援する、 知的研究基盤である。これは計算科学技術分野に限らず、 科学技術分野全般における研究開発活動を促進する上で 大きな効果が期待されると思われる。
地球惑星科学分野でも知見情報の定式化を行うことが強く要請されているが、 地球惑星科学分野内部での動きは、 地理情報学など行政サイドの必要の強い領域をのぞいては、 非常に鈍いと言わざるをえない。
これは、新たな知見情報を得ることが通常の研究活動とされ、 既存の情報を活かす組合せ方の調査、 さらにはそのための技術を開発することが、 従来、理学的研究とは見なされて来なかったことに加え、 XML 等の最新情報技術や計算機科学の動きを理解している地球惑星科学者が今だ少なく、 従って、このような研究活動に対する理解がない、 あるいは、どう評価していいかわからないことに依る。
今後さらに他分野へと範囲を拡げ発展しゆくと目される 上記知見プラットフォーム推進協議会の生成物と互換性を保つことで得られる種々の情報が、 物理・化学などの枠を超えた総合科学分野ともいえる地球惑星科学において 有用と成りうることは無論のこと、 むしろ総合的位置にあるが故に個別の学問の領域では 満たすことの出来ない知見を得ることのできる地球惑星科学こそが、 視野を拡げ積極的にその情報管理を行うべく活動すべきではないだろうか。
本研究では、知見プラットフォーム推進協議会における 流体工学・地球流体科学知見情報部会を視野に入れつつ、 知見情報の共有に必要となる技術について調査し、 地球惑星科学分野における知見情報共有システムの姿を模索したい。 なお、先駆的な試みゆえ、 地球惑星科学での応用を具体的に考える前段階としての概念的導入と整理を行うべく、 簡単な例を構成して考察を進める。
知見とは字のごとく「見て知ること」である。 つまり知見情報は見て知り得た情報であり、 そうした情報の一部は整理され論文などの形で発表されている。 だが、研究者の頭の中や1研究室内といった範囲に存在する情報のうち、 公にされれば非常に有用であるものも多々ある。
言葉を重ねることになるが、 例えば、数値計算プログラム利用の際の具体的な計算例、 同じ方向性をもつ研究者間で口頭で交わされたきた研究ノウハウや、 論文などに現れにくい失敗談、 実験における経験に基づいたパラメータなどである。
こうした情報がより円滑に交換される環境があれば、 それまで知り得なかった情報を端に、 研究者間の協力が活性化されると考えられる。
では、そうした環境には、どのような事が求められるだろうか。 次節では、それをふまえて、必要とされる要件について述べる。
知見情報共有システムに必要とされる条件は、 情報の記法と情報の操作の2つに大きく分類される*2。
任意の知見情報を効率よく流通させ活用するには、 情報の記法の統一の他、以下の条件を満たすべきである。
任意の知見情報を幅広く流通させ活用するには、 以下の条件を満たすべきである。
上に挙げた要件を満たす手段として、 先の情報共有システムでは、情報の記法に XML 、 操作環境を Java で記述した C/S システムを採択している。
しかし、こと XML においては、その技術自身が発展途上にあるため、 情報共有システムが開発された当時に比べ、 現在、新たな技術や概念が現れ標準化へと向かいつつある。
そこで、4章では XML について紹介し、 知見情報を表現するのに XML が適している理由を述べる。 5章6章では知見プラットフォームにおける知見文書を基に、 システム実装に関わる技術として有望と思われるものを紹介する。
XML(邦訳すると"拡張可能な印付け言語"となるが決して一般的ではない)は、 SGML(Standard Generalized Markup Language) [ISO 8879]*4 のサブセットであり、 W3C(World Wide Web Consortium) によって作成され、その仕様が勧告されている。
これは言語を記述するための言語、即ちメタ言語であり、 言語の構造を記述する手段を提供するものである。 2001年01月現在での最新のものは、 2000年10月06日に勧告された XML 1.0 (Second Edition) である*5。
XML は、文書型が容易に定義でき、SGML で定義された文書が簡単に記述・管理でき、 インターネットを経由してそれらを容易に伝送・共有することを目標としている。
以下に XML 文書の例を示す。
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE document SYSTEM "document.dtd">
<document>
<info>
<title>XML を活用した知見情報共有システムの模索</title>
<author mail="[email protected]">河野 仁之</author>
<lastmodify>
<year>2001</year>
<month>01</month>
<day>31</day>
</lastmodify>
<css>&css_default;</css>
<backto>../index.html</backto>
</info>
<body>
<!--
An exploration with XML for the knowledge management system
in the earth and planetary sciences
-->
<chapter title="Abstract">
<p>
知見情報の共有に必要となる技術について調査し、
:
:
</document>
この様に XML では、全ての情報は文字に置き換えて記録される。
XML 文書はテキスト・データである。 これはバイナリ・データと異なり人間の目で内容が確認できるという事を意味する。 しかし、従来よりみられる一般的なテキスト・データと異なり、 内容を構造化して表現することが可能となっている。 また、コンピュータもその内容を判読できるよう設計されている。
それを可能にしているのが、タグ(tag)によるマークアップである。
「XML の記法」という文字列に、それが表題であるという情報を付加するならば、 <title>XML の記法</title> のように、 不等号で挟まれたもの(ここでは <title>) で文字列を挟む。この行為をマークアップと呼ぶ。 各部の呼称を図2に示す。
図2:XML の要素 |
なお、要素名とは不等号に挟まれた文字列を指し、 要素(element)の型(type)を表す(図2では title)。 また要素(element)は属性(attribute)を持つことができる(図3)。
図3:XML の属性 |
XML では、中身(content)に要素(element)を含めることで階層構造を構成する。 これにより要素間に親子関係が生じ、情報を構造化する事ができる。 このような構造は図4の様な形で視覚的に表現できる。
図4:XML による構造表現 |
上に挙げた要素等は一つの例に過ぎず、 XML では要素名や属性は必要に応じて任意に設定することが可能である。 これによりアプリケーション固有の要求に合わせて機能を拡張することができる。 コンピュータは要素や属性、要素間の構造を捉えることで、 内容を判読する。
一般に、XML を用いた情報表現の長所は"分かりやすさの向上"であり、 短所は"効率の低下"である*6。
ソフトウェア業界が XML に注目し、多くの期待を寄せたのは、 XML が既存の技術に比較してシンプルであったためである。
ソフトウェア業界では、 慢性的な技術者不足に悩まされていた一方で、 市場からはより大規模なソフトウェア開発を求められてきた。
開発効率を高めるために、 既存の資源を再利用可能にする技術が考え出されたが、 実際に再利用可能であるためには、 その技術が多くの開発者に理解しやすいことが望ましい。 また、開発の規模が大きくなるにつれて必要となる技術者の数は増加し、 結果、関与する技術者全体の平均的な技術力は低下する。
そこで、数人の天才だけが理解できる高級なものではなく、 多数の平凡なプログラマーが理解できる、 シンプルで簡単な概念や技術が求められた(江藤, 2000)*7。
こうした要求を満たす解の一つとして、 単純さと高い拡張性を兼ね備える XML は評価されている。
XML は、知見文書に求められる要件を満たすだけでなく、 そのシンプルさゆえに利用者に対する敷居が低いことが利点となるだろう。
情報は、単なるデータではない知見として整理されてなければならないが、 これは1つ1つのデータをタグでマークアップし、意味付けすることで満たされる。
既存のプログラムが知見情報を利用できるようにするためには、 知見情報を直接入出力できるようプログラムを加工するか、 プログラムが直接入出力できるよう知見情報を変換する必要がある。 単純な入出力データを扱うプログラムであれば後者で充分間に合うと思われるが、 ファイルからのデータ読み込みや標準入出力を組み合わせた複雑な仕様のプログラムの場合、 知見情報を直接入出力できることが望ましい。
XML はその柔軟性から、2つ以上の情報形式へ変換する際の、 ソースとして利用しやすい中間媒体的特性を持つ。 例えば1つの XML 形式の文書から、 WWW(World Wide Web)における情報記述用共通言語である HTML(HyperText Markup Language)形式の文書、 表計算やデータベースなどで汎用的に用いられる CSV(Comma Separated Value)形式の文書、 Adobe Systems 社により開発された電子文書用フォーマットである PDF(Portable Document Format)形式の文書等へ、 簡単に変換する手段が用意されている。 これは XML で知見文書を記述すれば 既存プログラムへのデータ変換も容易であることを示唆している。
また、XML 文書をプログラムから操作するための手段も、 Java を筆頭に、C++ 、BASIC、Perl、ECMAScript ‡等々を対象に 複数用意されている。これらは基本的に外部ライブラリとして存在しており、 プログラムは必要に応じてライブラリにアクセスし、処理を行う。 ライブラリの仕様は開発中途ではあるが、最低限必要となる基部の仕様は完成されている。 従って開発者は、開発にどのような言語を選んでいても、 基本的な概念と知識を習得すれば、 同じ感覚で XML 文書を操作することが可能となっている。 これは XML で知見文書を記述すれば、 プログラムから直接知見文書内の情報を入出力する手段が、 豊富に用意されていることを示唆する。
関連情報、即ち履歴や参考文献などの情報を記録する際、 個々の文書内にその全てを記録すると情報が過大になる傾向があるが、 関連情報そのものではなく、その関連情報へのリンクを記録すれば良い。 既存の HTML に比べ、XML ではリンクをより柔軟に扱うことができるよう XLink、XPointer が策定中であり、 これらを利用することで要件は充分満たされるものと思われる。
従って、XML が備える特徴は、 知見文書の記法に求められる要件を満たすのに充分なものと言えよう。
また、XML の取り扱いは専門外である多くの研究者にとって、 XML がシンプルであるという特長は、精神的労力を緩和し、 利用の際の敷居を低くすることが出来るという点で非常に有効である。 このことは、利用者とシステム開発者の境を希薄にし、 システムに対する議論を活性化させ、 ひいてはシステムの改良に繋がり利用者の使い勝手が向上するという、 好ましい循環を生み出す。
XML と同様にタグを用いて情報を表すものに WWW における情報記述用共通言語 HTML があるが、 HTML は WWW 用に設計されているために視覚的意味付けに終始している傾向にあり、 データの論理構造と物理構造が混在した記法をとる。 データの論理構造を記述するための言語を表現するために設計された XML とは 現在は目的が異なっており、 比較競合する対象ではなくむしろ兄弟関係にある。 また、HTML は要素型を独自に定義することを許していない。 XML 自身は SGML の難解・厳格な部分を取り払い、 HTML のインターネットとの親和性を受け継いだ言語とも言える。 今日では XML を利用し、HTML を XHTML として再設計する方向にある。
XML はその拡張性の高さから、既に様々な分野から注目を浴びている。 主要な用途として、 新たなマークアップ言語の策定にメタ言語として利用すること(MathML etc.)、 情報の交換や再利用を円滑に利用できるよう書式を規格化すること(PML etc.)、 異なるシステム間で効率的に連携できるよう入出力を抽象化すること(MML etc.)、 HTML に代わる WWW 上の情報表現手段として利用すること(Compact HTML etc.) などが挙げられる。
以下に具体例を幾つか示す。
† |
これは直接バイナリのまま埋め込むことで回避できる。 また画像においては、 1[pixel2]毎に異なる情報として 取り扱う必要があるデータ(写真など)を除き、 図形情報として取り扱えるデータ(グラフ等)は、 後で紹介する SVG を利用することで積極的に対応できる。 |
‡ |
ECMA(European Computer Manufacturer Association: ヨーロッパ電子計算機工業会)により標準化された JavaScript 。 |
本章では、知見プラットフォームにおける知見文書記法を紹介し、 実際に知見文書を取り扱う際に考慮すべき事柄について述べる。
知見文書は、情報を XML で構造化したものであると述べた。 これは個々の情報をタグでパッケージ化したものと表現することもできる。 知見プラットフォームにおける知見文書の構造の概念図を、図5に示す。
図5:知見文書の概念図 |
左側に計算例を、右側にプログラムを、 それぞれ知見文書として表現した場合の構造を示している。 これは CAMP プロジェクトが中心となり研究開発した 情報共有システムの場合を例にとった。 地球惑星科学分野においては、この他、 観測データや実験データを登録することが考えられる。
表2に、情報共有システムの実証実験において、 知見文書として登録された内容を示す*9。
登録項目 | 内容 |
---|---|
タイトル | 知見文書のタイトル |
登録者名 | 氏名、電子メールアドレス、所属 |
改訂情報 | 改訂版の場合、元の知見文書の指定 |
登録内容 | 登録する知見文書の内容 |
登録ファイル | 登録するファイル名(複数指定可能) |
圧縮情報 | 圧縮して登録する場合の指定 |
リンク情報 | 既登録の知見文書とのリンクの指定 |
日付 | 知見文書が登録された日付 |
実際の知見文書の例を一部、下に引用する(芦野, 2000)*8。
<?xml version="1.0"?>
<C_DOCUMENT>
<C_HEAD>
<C_APPLICATION>CAMP</C_APPLICATION>
<C_PROGRAM VERSION="dsg">CAMP-dsg</C_PROGRAM>
</C_HEAD>
<C_BODY>
<BP_job_title>Al</BP_job_title>
<BP_structure>
<BP_structure_symbol>fcc</BP_structure_symbol>
<BP_unitcell type="latticeconstants">
<BP_unitvector unit="ang">
<BP_ux>0.000</BP_ux>
<BP_uy>0.000</BP_uy>
:
:
</C_DOCUMENT>
(4.2) に示した例と比較すると分かるが、 上の例では <!DOCTYPE document SYSTEM "document.dtd"> に相当する行が存在しない。 また、要素名にアンダースコア( _ )が多用されている。 以下では XML 文書の定義と検証をふまえながら、これらについて述べる。
XML 文書は、XML 宣言、文書型宣言、 XML インスタンスの3つのブロックにより構成される。
XML 文書の第1行目には、その文書が XML で記述されている旨を示す XML 宣言を記述する。XML 宣言では、 記述に用いた XML のバージョンや文字コードなどを宣言する。 2001年01月現在、XML のバージョンは 1.0 のみであり、 基本的にバージョンの違いによる種類の差を考慮する必要はない。
XML 宣言は <? 処理命令ターゲット 処理内容 ?> という処理命令の形式をとる。
具体的には、
<? xml version=" XML のバージョン" encoding="文字コード名" standalone="yes|no" ?>
となる。ここでバージョン番号は必ず記述しなければならない。
また、文字コードの指定とスタンドアローンの指定は任意である。
文字コードは Unicode †
である UTF-8 と UTF-16 が規定値である。
スタンドアローンの指定の規定値は no である。なお、スタンドアローンに関しては後述する。
主な文字コード名 | 解説 |
---|---|
ISO-10646-UCS-2 | Unicode と同一 |
ISO-10646-UCS-4 | 2バイトで表しきれなかった文字を4バイトで表現。 |
UTF-8 | UCS-2 と UCS-4 をカバー。日本語は1文字3バイトになる。 |
UTF-16 | UCS-2 と UCS-4 をカバー。現在はまだ Unicode と同じ。 |
EUC-JP | EUC コード |
Shift-JIS | シフト JIS コード |
ISO-2022-JP | JIS コード |
3番目の構成物 XML インスタンスは、階層構造を持った要素の集合である。 上の例では、<C_DOCUMENT>....</C_DOCUMENT>部が XML インスタンスになる。
2番目の構成物、文書型宣言(document type declaration)は、 文書中の要素、属性などを定義するものである。 文書型宣言で定義される文書型を DTD(Document Type Definition; 文書型定義)と呼ぶ。 DTD を外部ファイルとして用意し、それを XML 文書で利用することもできる。 文書型宣言は省略可能である。文書型宣言の例を2つ以下に示す。
<!DOCTYPE C_DOCUMENT [
<!ELEMENT C_DOCUMENT (C_HEAD, C_BODY)>
<!ELEMENT C_HEAD (C_APPLICATION, C_PROGRAM)>
<!ELEMENT C_APPLICATION (#PCDATA)>
<!ELEMENT C_PROGRAM (#PCDATA)>
<!ATTLIST C_PROGRAM VERSION NMTOKEN #REQUIRED>
<!ELEMENT C_BODY (BP_job_title, BP_structure)>
<!ELEMENT BP_job_title (#PCDATA)>
<!ELEMENT BP_structure (BP_structure_symbol, BP_unitcell)>
<!ELEMENT BP_structure_symbol (#PCDATA)>
<!ELEMENT BP_unitcell (BP_unitvector)>
<!ATTLIST BP_unitcell type NMTOKEN #REQUIRED>
<!ELEMENT BP_unitvector (BP_ux, BP_uy, BP_uz)>
<!ATTLIST BP_unitvector unit NMTOKEN #REQUIRED>
<!ELEMENT BP_ux (#PCDATA)>
<!ELEMENT BP_uy (#PCDATA)>
<!ELEMENT BP_uz (#PCDATA)>
]>
これは (5.1) で例示した XML 文書を、 DTD で定義する場合に想像される文書型宣言である。 この例の内容は、あくまで筆者が XML 文書の構造を元に作り出したものであり、 一般的な文書型宣言の雰囲気を伝える以上の意図はない。 実際の (5.1) で引用した知見文書は、目的を持って文書型宣言を省略したものであり、 この文書型宣言が利用されているわけではないことに注意されたい。
<!DOCTYPE document SYSTEM "document.dtd">
これは (4.2) で例示した XML 文書の文書型宣言である。 上の例では文書型宣言の内容(DTD)が XML 文書内に存在するのに対し、 こちらは別途 document.dtd として DTD を記録したファイルを用意し、 これを文書型宣言の内容として参照している。
先に述べたように、XML では SGML と異なり、DTD の省略が許されている。 DTD の有無により、XML は下記の2種に分類される。
XML がその将来を有力視された理由の一つに、 整形式の XML 文書を許したことが挙げられる。 しかし、異なる組織や研究者間で、円滑に XML 文書を交換する上で、 XML 文書の書き方のルールを曖昧さ無く表現し、 任意の XML 文書が正しい意図通りに記述されているかを検証することは、 非常に重要である。 そのためには、スキーマ言語を利用し、ルールを規定する必要がある。
XML 向けの代表的なスキーマ言語に、DTD を初めとして、以下のものが挙げられる。
なお、(5.1) で引用した知見文書は上のいずれも利用していない。 その代わりに、 タグの定義を独自に定義した整形式の XML 文書(タグ辞書 ‡ と呼称)を用意しており、これをもって知見文書の検証を行っていると推定される。 ここで既存の DTD が採用されなかったのは、後述する DTD の弱点に起因する。 この手法は、後で詳細を述べる XML Schema や RELAX と同じ方向性を持つと言える。
定義の手段にいずれを選ぶにせよ、その記法は (3.1) で述べた要件を満たすよう、 策定する必要がある。 先の情報共有システムでの知見文書においては、 全体を共通タグと分野別タグに二分し、 共通タグセットでは知見情報の構造定義の他、情報提供者名や登録日時といった、 分野に依らない共通項目を表現するようにしている*8。
知見プラットフォーム自体が、まだ試作の段階にあり、 一般公開されていないため、上記一覧にはやや不正確な所があると思われるが、 基本的な設計方針は実際と大きく異なることはない。
ここで注目したいのは、タグを分類する際に、 その目的に応じて要素名に接頭辞を付加している点である。
知見プラットフォームのように、幅広い分野をサポートするシステムを構築する際、 1つの団体が全ての文書型定義(ここではスキーマ言語としての DTD ではなく、定義そのものを指す;タグ辞書)を決定するのではなく、 それぞれの分野に明るい人間が集って各々文書型定義を作成し、 共通部分のみ1団体で統轄する形が現実的である。
そうした場合、共通部分を定義したもの、分野別に制定したもの、 と複数の文書型定義が1つの知見文書内に共存できなくてはならない。 XML では自由にタグが定義できるために、全く同じ名称のタグに、 定義した人それぞれが異なる意味を与える可能性があり、 こうした名前の衝突を解決しなければならない。 また、検証という面からも、どの要素がどの文書型定義により定義されているか、 明らかでなくてはならない。
接頭辞の付加は、この問題に対処すべく考え出されたものと思われる。 この記法が策定された段階では、 まだ後述する XML における名前空間の仕様 (Namespaces in XML)が整っていなかったため、 独自に解決する必要があったことも大きく関与している。 既に名前空間は1999年01月に W3C により仕様が勧告されており、 またそれに対応したソフトウェアも増えてきている。 地球惑星科学分野用の文書型定義を策定する際は、 名前空間をシステム共々考慮した形で進めて問題はないと考えている。
XML における名前空間(以降、名前空間と記する)とは、 複数の XML データ定義を混在させるための XML 拡張仕様である。
XML の仕様では、要素型が同じであるならば同じものと見なすよう 決められている。 そこでこの仕様では、名前空間(namespace)と名前空間接頭辞(namespace prefix) という概念を XML に導入し、混在を可能にした。
実際に名前空間を利用し、(5.1) で引用した知見文書を書き改めたものを次に示す。
<?xml version="1.0"?>
<C:DOCUMENT xmlns:C="http://www.tikenpuratto.org/tiken/common">
<C:HEAD>
<C:APPLICATION>CAMP</C:APPLICATION>
<C:PROGRAM VERSION="dsg">CAMP-dsg</C:PROGRAM>
</C:HEAD>
<C:BODY xmlns:BP="http://www.tikenpuratto.org/tiken/material">
<BP:job_title>Al</BP:job_title>
<BP:structure>
<BP:structure_symbol>fcc</BP:structure_symbol>
<BP:unitcell type="latticeconstants">
<BP:unitvector unit="ang">
<BP:ux>0.000</BP:ux>
<BP:uy>0.000</BP:uy>
:
:
</C:DOCUMENT>
名前空間は URI (Uniform Resource Identifiers) を識別名に用いる。 上の例ならば、"http://www.tikenpuratto.org/tiken/common"や "http://www.tikenpuratto.org/tiken/material"が該当する。 なお、この URI は筆者が説明のために仮に作成したものであり、 例えばブラウザでアクセスしても全く意味はない。 URI は識別名として用いているに過ぎず、該当場所のドキュメントの有無は勿論、 実際にそのホストが存在する必要もない (ただし他者に既に利用されているものを用いてはならない)。 実際は、知見プラットフォームのサイトが完成し公開されれば、 その URI が適当であろう。
例の2行目では、DOCUMENT 要素の名前空間として "http://www.tikenpuratto.org/tiken/common"を指定し、 その名前空間に属する要素名の接頭辞に C を用いる事を定義している。 同様に7行目では、BODY 要素に含まれる接頭辞 BP の要素が、 名前空間"http://www.tikenpuratto.org/tiken/material"に属することを定義している。
名前空間接頭辞を付けなかった場合に、 どの名前空間に属するかを指定する構文が用意されている。 これを利用すると、上の例はもう少しシンプルに表される。
<?xml version="1.0"?>
<DOCUMENT xmlns="http://www.tikenpuratto.org/tiken/common">
<HEAD>
<APPLICATION>CAMP</APPLICATION>
<PROGRAM VERSION="dsg">CAMP-dsg</PROGRAM>
</HEAD>
<BODY xmlns:BP="http://www.tikenpuratto.org/tiken/material">
<BP:job_title>Al</BP:job_title>
<BP:structure>
<BP:structure_symbol>fcc</BP:structure_symbol>
<BP:unitcell type="latticeconstants">
<BP:unitvector unit="ang">
<BP:ux>0.000</BP:ux>
<BP:uy>0.000</BP:uy>
:
:
</DOCUMENT>
ここでは2行目に <DOCUMENT xmlns="http://www.tikenpuratto.org/tiken/common"> と記述することで、 既定の名前空間に"http://www.tikenpuratto.org/tiken/common" を指定している。
前に触れたように、DTD は SGML の頃より用いられているスキーマ言語である。 これにより、要素の名前や順番の指定、親子関係の制限、 必須要素と任意の要素の区別などを設定する。 XML とも異なる独自の記法をとるが、XML Schema や RELAX に比べ、 簡潔に文書型を定義することができる。
しかし、XML の柔軟性に対応しきれず、以下の様な欠点を持つ。
1番目の欠点により、DTD に依存した場合、 大規模な XML を利用したシステムを構築することが困難である。 2番目の欠点により、XML を取り扱う際に型チェックを行わなければならず、 プログラミングの行程が増える。 3番目の欠点により、XML の学習とは別に DTD の文法を学ばねばならない他、 DTD を操作しようと思うならば、ツールを XML とは別個に用意しなければならず、 開発コストが嵩む。
こうした問題点を解決すべく、 W3C が策定している DTD に代わるスキーマ言語が XML Schema である。
DTD の欠点を克服するために W3C により策定されているスキーマ言語である。 DTD と異なり、それ自体が XML によってコーディングされている。 そのため、一般的な XML 用ソフトウェアを用いて構文解析や編集を行うことが可能である。
XML Schema はまだ正式な勧告を受けておらず、 2000年01月現在、以下の3部で構成される。
以下に XML Schema の特長と、その問題点を挙げる。
なお、DTD の問題性はかなり前から指摘されており、 XML Schema の策定開始からもう2年ほど経つが、 2000年10月にようやく勧告候補となったばかりであり、 今までの難航具合を考えると、勧告に至るまでの道のりはまだ長いと思われる。 難航の理由は色々あるが、様々な分野で XML が注目されたために、 様々な分野から意見・要望が押し寄せられていることも一因と言える。
数値計算プログラムへデータを渡す際に、そのデータ型は重要となる。 これは、数値計算プログラム別に対応する入出力のデータ型テーブルを用意し、 フロントエンド側で検証するのは非効率的であり、 従って、データは単なる文字列ではなく、 自己記述的にその情報が提示される形にあることが望ましいからである。
XML Schema の特長の一つである組み込みデータ型には、 XML の DTD より継承したものと、新規に導入されたものがある。 以下に、XML Schema で新たに導入された組み込みデータ型を示す(表4)。 なお、(4.7) で紹介した MML(Medical Markup Language)では 独自にデータ型を規定している*16。
string | boolean | float | double |
decimal | stimeDuration | recurringDuration | binary |
uriReference | QName | language | Name |
NCName | integer | nonPositiveInteger | negativeInteger |
long | int | short | byte |
nonNegativeInteger | unsignedLong | unsignedInt | unsignedShort |
unsignedByte | positiveInteger | timeInstant | time |
timePeriod | date | month | year |
century | recurringDate | recurringDay |
※float | IEEE 単精度 32 ビット浮動小数点 |
※double | IEEE 倍精度 64 ビット浮動小数点 |
RELAX (Regular Language description for XML) は、 収拾のつかなくなってきた XML Schema に対する解決策として、 村田真らを中心に、日本の INSTAC (Information Technology Research and Standardization Center) XML SWG が制定したスキーマ言語である *11。
この委員会は、JSA (Japanese Standards Association) から委託を受け、XML 関連の標準化を行っており、 JSA は RELAX Core を JIS Technical Report として発行した*12。 また、2000年11月に ISO/IEC の DIS (Draft International Standard) 22250-1 としてRELAX Core が発行されており、RELAX の国際的認知度は決して低くない。
RELAX は RELAX Core と RELAX Namespace からなる。 現在、仕様が公開されているのは RELAX Core のみで、 RELAX Core は1つの名前空間に属する要素とその属性を扱い、 RELAX Namespace は複数の名前空間を扱う予定となっている。
RELAX も XML Schema 同様、XML により記述されている。 また、組み込みデータ型も XML Schema を継承している。 RELAX Core の適合水準 classic は DTD と同等であり、 容易に DTD から RELAX Core を用いた表現へ移行できる。
RELAX の検証用プログラムも既に、 C++、Java、BASIC、そして後述する XSLT で用意されている。 また、プログラムは、既存の XML パーサの提供する API (後述)を利用すればよく、 RELAX 独自の API は必要としない。 従って、既存の DTD を利用したシステムは、 比較的容易に RELAX を利用したシステムへ移行することが可能である。
RELAX ほど DTD や XML Schema と適切な互換性を維持しつつ、 ある程度の環境が整っていて実用可能なレベルに達しているスキーマ言語は、 他に類を見ない。 RELAX は近い将来において、 最も有力かつ現実的な XML 用スキーマ言語と言える。
遠い将来まで、RELAX が生き残っているか否か、保証はない。 だが、RELAX から DTD、XML Schema への移行は充分可能であり、 RELAX で書かれた資産が無駄になることはないだろう。
(5.1) で引用した知見文書の構造を元に、(5.2) で文書型宣言を例示したが、 同じ事を RELAX で行ったものを以下に示す。
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "relaxCore.dtd">
<module moduleVersion="1.0"
relaxCoreVersion="1.0"
targetNamespace=""
xmlns="http://www.xml.gr.jp/xmlns/relaxCore">
<interface>
<export label="C_DOCUMENT"/>
</interface>
<tag name="C_DOCUMENT"/>
<elementRule role="C_DOCUMENT">
<sequence>
<ref label="C_HEAD"/>
<ref label="C_BODY"/>
</sequence>
</elementRule>
<tag name="C_HEAD"/>
<elementRule role="C_HEAD">
<sequence>
<ref label="C_APPLICATION"/>
<ref label="C_PROGRAM"/>
</sequence>
</elementRule>
<tag name="C_APPLICATION"/>
<elementRule role="C_APPLICATION" type="string"/>
<tag name="C_PROGRAM">
<attribute name="VERSION" required="true" type="NMTOKEN"/>
</tag>
<elementRule role="C_PROGRAM" type="string"/>
<tag name="C_BODY"/>
<elementRule role="C_BODY">
<sequence>
<ref label="BP_job_title"/>
<ref label="BP_structure"/>
</sequence>
</elementRule>
<tag name="BP_job_title"/>
<elementRule role="BP_job_title" type="string"/>
<tag name="BP_structure"/>
<elementRule role="BP_structure">
<sequence>
<ref label="BP_structure_symbol"/>
<ref label="BP_unitcell"/>
</sequence>
</elementRule>
<tag name="BP_structure_symbol"/>
<elementRule role="BP_structure_symbol" type="string"/>
<tag name="BP_unitcell">
<attribute name="type" required="true" type="NMTOKEN"/>
</tag>
<elementRule role="BP_unitcell">
<ref label="BP_unitvector"/>
</elementRule>
<tag name="BP_unitvector">
<attribute name="unit" required="true" type="NMTOKEN"/>
</tag>
<elementRule role="BP_unitvector">
<sequence>
<ref label="BP_ux"/>
<ref label="BP_uy"/>
<ref label="BP_uz"/>
</sequence>
</elementRule>
<tag name="BP_ux"/>
<elementRule role="BP_ux" type="float"/>
<tag name="BP_uy"/>
<elementRule role="BP_uy" type="float"/>
<tag name="BP_uz"/>
<elementRule role="BP_uz" type="float"/>
</module>
上記の例において、最後の 10 行ほどで、 要素型 BP_ux、BP_uy、BP_uz を定義している。 (5.2) の DTD による文書型宣言と異なる点として、 ここで type="float" としてデータ型に浮動小数点を明示していることに注目されたい。
なお、RELAX で独自に導入したデータ型は、none と emptyString の2つのみで、 RELAX におけるデータ型は、 基本的に XML Schema Part 2 で用意されているものと同一である。
知見情報を XML で表現し、知見文書として流通させるためには、 地球惑星科学分野においても、先の情報共有システムにおける"タグ辞書"に該当する、 文書型の定義が必要となる。
総合科学分野であるがゆえに、 他分野で既に設定された定義を組み合わせて用いることも可能ではある。 しかし、どの分野においてもその分野独自の情報表現は存在するものであり、 またシステムが開発途上にある現在においては、 積極的に環境を整えてゆくべきであり、 地球惑星科学分野用の文書型定義の策定が課題となっている。
実際の策定において採択するスキーマ言語は、 今のところ、RELAX が適切であると言えるが、 その名前空間の仕様を確定させる必要がある。 RELAX Namespace の仕様は、現在、 開発者用メーリングリストにおいて一部公開されており、 盛んな議論が交わされている。 仕様が早期に確定することを期待する (2001年03月には JIS TR として RELAX Namespace が発行される予定のようだ)。
† |
多くの自然言語に対応可能なキャラクタセット。 cf.) http://www.unicode.org/ |
‡ |
知見プラットフォーム関連資料に従い、タグという表現を用いる。 |
知見文書のようにデータを XML で記述した場合、 XML 形式の文書から必要な情報を取り出す、 あるいは XML 形式の文書を作成するといった操作を行う必要がある。
そのための手段として、XML を扱うアプリケーション(応用ソフトウェア)に、 XML 文書の読み込みや、その内容及び構造へのアクセスを提供するソフトウェア、 XML プロセッサがある。XML プロセッサの振る舞いは W3C の Extensible Markup Language (XML) 1.0 (Second Edition) *5 にて規定されており、XML の妥当性を検証するものとしないものに分かれる。
XML パーサ(Parser)は、XML 文書をその構文に応じて解析し、 構文木を生成するプログラムである。 XML プロセッサは SGML の流れを受けており、 厳密には XML プロセッサ と XML パーサは異なるが、 SGML では重要であったその違いも、 XML ではほとんど意味をもたなくなっている。 そういう意味で、XML においては XML プロセッサと XML パーサは 同じものであるとみなして問題はないという。 本論文では、以降 XML プロセッサと XML パーサは、 同じ意味として用いる。
アプリケーションと XML 文書は図6のような関係を持つ。
図6:アプリケーションは XML 文書に、XML パーサを介してアクセスする。 |
XML パーサは、既に数種類公開されており、 一般にアプリケーションは直接 XML 文書を操作するのではなく、 XML パーサを操作して XML 文書を処理する。
以下に代表的な XML パーサを示す。
XML パーサを利用するため、実際のアプリケーションは、 パーサが対応するプログラミング言語で記述するのが自然かつ有利である。
多くの XML パーサは Java 向けに書かれている。 また、ほとんどの XML パーサ自体、Java で記述されている。 これは Java が XML を扱う言語として優れていることを反映している。
Java が XML を扱う上で優れている点に、以下のものがある。
一方、Java での問題点としては、 Java で作成したプログラムの実行速度が、 C++ などの他の言語で作成したプログラムに劣ること、 Java で描くツリー構築・生成のモデルが いささか直感的ではないということ、などが挙げられる。 しかし、前者の問題は Java が登場した頃より指摘され続けていることであり、 その対策として、頻繁に用いるコードはネイティブコードへ コンパイルするといった高速化の技術も現れているため、 大きな問題ではないだろう。また、後者の問題は Java に限ったものではなく、 主要な他言語でも同じといえる。 後者の問題が極めて重要視されるような場合、 Xi などの別の手段を検討する必要がある。
知見情報共有システムの構築においては、 上に述べたメリットの方がデメリットに勝り、 従って Java を採用すると良いと思われる。 ただし、システムの内、 既存プログラムとの連携を担う XML I/O 部は、 XML との親和性もさることながら、 既存プログラムに採用されている言語との親和性が重要となってくるため、 この限りではない。
XML パーサを規定する仕様に DOM (Document Object Model)と SAX (Simple API for XML) がある。 これらは共にソフトウェアから XML を操作するための API(Application Programing Interface)の仕様である。 API 仕様と言う言葉に馴染みがないのであるならば、 XML 文書を扱うソフトウェアをプログラミングする際に用いる、 XML を扱うための関数群の定義仕様と考えて差し支えない。
これらの仕様に準拠した XML パーサであれば、 その仕様に沿った利用が保証される。
DOM は W3C により策定された、XML 文書と HTML 文書のための API 仕様である。 この仕様では、文書の論理構造及び文書にアクセスし操作する方法を定義しており、 Level 1 *18と Level 2 がある。 Level 1 が基本的な XML 操作法を定義するのに対し、 Level 2 ではデータの表現力にも力が置かれている(表5)。
DOM では XML 文書の構造を全て解析したのち、 その構文木を DOM ツリーの形でアプリケーションに提供する。 データを任意に操作でき、ノードの追加や編集も可能だが、 全データをメモリに保有するため、大きな XML 文書を処理する場合、 処理が重くなる傾向にある。動的な XML 操作に向いている。
レベル | 仕様書 | 機能 | 内容 |
---|---|---|---|
Level 1 | Document Object Model (DOM) Level 1 Specification Version 1.0 W3C Recommendation 1 October, 1998 | CORE | 文書オブジェクトにアクセスしたり操作するための オブジェクトやインターフェイスの最小限のセットを定義。 |
HTML | HTML 文書に特有のオブジェクト・メソッドを記述するために、 第1水準コアAPIを拡張。 主に"DOM-0"との後方互換性の問題を処理する。 | ||
Level 2*19 | Document Object Model (DOM) Level 2 Specification Version 1.0 W3C Recommendation 13 November, 2000 | Core | Level 1 の CORE に、 これまで不足していた幾つかの機能を追加したもの。 |
Views | イベントと DOM ツリーを関連付けるための概念。 | ||
Style | スタイルシートと文書の関連づけの情報を扱う DOM Style Sheets と、 CSSそのもののオブジェクトモデルである DOM CSS からなる。 | ||
Events | "マウスボタンが押された"といった出来事をつかまえて、 あらかじめ指定した動作を実行させる機能。 | ||
Traversal and Range | Traversalは、Core で規定されるツリーに対して アクセスするインターフェイスで、 具体的には NodeIterator、NodeFilter、TreeWalker の3つに分けられる。 Range は、DOM ツリー内にて範囲を指定する機能を提供する。 | ||
HTML | (未勧告) |
SAX は DOM 同様、XML 文書を利用したり操作したりするために 標準化されたインターフェースの一つである。 ただし W3C の仕様ではなく、 David Megginson( http://www.megginson.com/SAX/index.html) らが中心となって策定している。 1998年05月に仕様が決まった SAX 1 と、 2000年05月に仕様が決まった SAX 2 がある(表6)。
SAX 仕様のパーサは、イベントドリブンなパーサである。 即ち、XML 文書を順次シーケンシャルに読み込みながら、 XML のタグ(開始タグ、終了タグ、空要素タグ)を検出する毎に、 ユーザが設定した各種ハンドラを起動する。 アプリケーションからは、 SAX インターフェースで規定されたメソッドを実装したハンドラを用意することにより、 XML 文書を処理する。
文書を読み込みながら処理を行うことが出来るため、 反応が早くメモリ消費量の少ないプログラムを作成することが出来る。 文書を読み込み終わるのを待つ必要がないので、 ネットワークなどを介してドキュメントを読み込みながら作業を行うこともできる。 反面、XML 文書の編集や複雑な操作を行うことが出来ない。 静的な XML 操作に向いている。
仕様 | 内容 |
---|---|
SAX 1 | Parser オブジェクトを使って XML ドキュメントを解析する インターフェースを定義する。 |
SAX 2 | XML Reader を使って XML ドキュメントを解析する インターフェースを定義する。 XML Reader は Parser と違って名前空間をサポートする。 |
SAX 2 Extension | 拡張ハンドラ(LexicalHandler, DeclHandler) インターフェースを定義する。 |
以上のように、DOM と SAX には一長一短の特徴があるため、 状況に応じて適切に使い分ける必要がある。 以下にあてはまる場合は SAX を、そうでなければ DOM を利用すると良い。
知見情報共有システムにおいては、 知見情報フロントエンドでは柔軟な操作が求められるため、 DOM が適切であろう。 一方、知見情報サーバにおける知見検索などでは、 その情報量の多さから軽快な SAX が適切であろう。
実際にどのパーサを利用するか決定するのは、 いずれのパーサも開発段階にあるため難しい。 (6.2) で挙げた Xerces、crimson は、 いずれも DOM 及び SAX に対応している。 しかし、こと DOM プログラミングにおいて、 XML ドキュメントの生成や、DOM ツリーの生成は、 DOM の仕様あるいは標準インターフェースで定義されていないため、 XML プロセッサ固有の処理に依存するか、自前で用意しなければいけない。 これは例え DOM に準拠したパーサであっても、 あるパーサから別のパーサへ乗り換える際に、 システムに大きな変更を加えなければならない可能性が、 潜在的に存在することを意味する。 これは XML を取り巻く世界が枯れておらず、刻々と変化することを考えると、 非常に不自由であると言わざるをえない。
JAXP(Java API for XML Processing)は、 そうした問題を解消すべく、 数ある XML パーサを統一的に扱う Java のための機構である。
JAXP は ファクトリ方式と呼ばれる、 XML パーサをプラグイン化して取り扱う方法により、 Java での XML パーサの生成方法や呼び出し方法を統一する。 即ちラッパークラスを用意することで、 利用者側へのインターフェースを統一し、 各パーサ間の違いをそこで吸収させている(図7)。 従って JAXP を通せば、 XML パーサは JAXP 標準の crimson だけでなく Xerces も利用できる (パーサを組み込んでしまえば、共通の API で利用できる)。
図7:JAXP を利用した場合の XML 文書とアプリケーションの関係 |
2001年1月現在の最新版 JAXP は、Ver.1.1ea2(Early Access 2) であり、 XML パーサとして crimson、XSLT パーサとして APACHE XML PROJECT の Xalan が 同梱されている。
現在は、まだ個々のパーサを直接利用するアプリケーションが多いが、 将来的にはほとんどの XML を扱うアプリケーションは、 JAXP を利用することになるだろう。
(4.5) において、 XML は中間媒体的特性を持つため、 XML で知見文書を記述すれば、 既存プログラムへのデータ変換も容易であると述べた。
XML 文書の変換の目的で、 XML パーサを利用した XML 文書を他形式のデータへ変換するプログラムを作ることは、 勿論、可能である。しかし、XML には、 もっと容易に変換を行うことの出来る手段が用意されている。 それが XSLT (XSL Transformation) である。
XML 文書で記述されるのは構造であり、見た目の情報(スタイル)は 含まれない。そのため XML 文書を適切な形で表示するための スタイル指定言語として XSL (eXtensible Stylesheet Language) が考案された。 XSLT は、XSL を構成する2要素の内の1つとして W3C より勧告されており(Ver.1.0)、 XML 文書を他の XML 文書や HTML 文書などに変換するための技術である。 XSL を構成するもう一方の要素は FO (Formatting Objects) で、 こちらはまだ仕様が固まっていない。 XSL:FO を利用すると、例えば XML 文書から容易に PDF を生成することもできる。
以下に代表的な XSLT プロセッサを示す。
XSLT はスタイル指定のための変換が本来の目的なため、 完全に汎用的な変換を目指した言語ではない。
XSLT は XML 文書を先頭から順に解析し、 変換対象となる要素や属性を見つけ次第、 指定された構造に順次書き換えて行く、という方法をとる。
複数ファイルへの出力が行えない、 一度定義した変数の値を変更することができない、 複雑な操作が行えないなどの制限はあるが、 それでも、構造を表現する形式の大抵のデータと XML 文書間で、 変換を行うことができるため、ほとんどの場合、XSLT で充分だろう。
参考のため、 XSLT と一般的なプログラミング言語の機能との対応を下に示す(表7)。 なお、これは XSLT が持つ雰囲気を、 従来のプログラミングの見地から理解する事を助けるために比較したものであり、 実際の動作が完全に対応するわけではないことに注意されたい。 詳細な解説は XSL Transformations (XSLT) Version 1.0 W3C Recommendation 16 November 1999 *20を参照のこと。
一般的なプログラミング言語 | XSLT |
---|---|
変数 | xsl:variable 要素で定義し、 xsl:value-of 要素などで値を利用する。 |
選択構造 | xsl:if 要素、xsl:choose 要素 |
繰り返し構造 | xsl:for-each 要素 |
副関数(サブルーチン) | xsl:telmplate 要素を name 属性付きで定義し、 xsl:call-template 要素で呼び出す。 引数は xsl:param 要素で指定する。 |
パターンマッチ | xsl:template 要素の match 属性、 xsl:apply-templates 要素や xsl:copy-of 要素などの select 属性。 |
† | |
‡ |
以下に、 化学平衡計算を行うプログラムを用いた具体例をもって、 前章までに紹介してきた幾つかの技術の実際を紹介する。 ただし、ここでは XML を利用するとどのような事が行えるのか見ることを目的としており、 平衡計算自体は一切問題にしていないことを予めお断りしておく。
なお、ここで用いたプログラムは FORTRAN 77 で記述され、 Wood and Hashimoto (1992) の手法が用いられている*21。
以下は XML で記述した入力データの1つで、 計算において考慮する化学種とその組成を示している。
<?xml version="1.0" encoding="Shift_JIS"?>
<coce:data xmlns:coce="http://gonta.ep.sci.hokudai.ac.jp/~dongury/coce">
<coce:infomation>
<coce:donor>Hitoshi KONO</coce:donor>
<coce:version>0.1</coce:version>
</coce:infomation>
<coce:elements>
<coce:element id="1" name="H" />
<coce:element id="2" name="O" />
<coce:element id="3" name="C" />
</coce:elements>
<coce:species>
<coce:item id="1" name="H">
<coce:conposition>
<coce:element id="1">1</coce:element>
</coce:conposition>
</coce:item>
<coce:item id="2" name="O">
<coce:conposition>
<coce:element id="2">1</coce:element>
</coce:conposition>
</coce:item>
<coce:item id="3" name="H2">
<coce:conposition>
<coce:element id="1">2</coce:element>
</coce:conposition>
</coce:item>
<coce:item id="4" name="H2O">
<coce:conposition>
<coce:element id="1">2</coce:element>
<coce:element id="2">1</coce:element>
</coce:conposition>
</coce:item>
<coce:item id="5" name="O2">
<coce:conposition>
<coce:element id="2">2</coce:element>
</coce:conposition>
</coce:item>
<coce:item id="6" name="OH">
<coce:conposition>
<coce:element id="1">1</coce:element>
<coce:element id="2">1</coce:element>
</coce:conposition>
</coce:item>
<coce:item id="7" name="CO">
<coce:conposition>
<coce:element id="2">1</coce:element>
<coce:element id="3">1</coce:element>
</coce:conposition>
</coce:item>
<coce:item id="8" name="CO2">
<coce:conposition>
<coce:element id="2">2</coce:element>
<coce:element id="3">1</coce:element>
</coce:conposition>
</coce:item>
<coce:item id="9" name="CH4">
<coce:conposition>
<coce:element id="1">4</coce:element>
<coce:element id="3">1</coce:element>
</coce:conposition>
</coce:item>
</coce:species>
</coce:data>
この他、温度は 1500[K]、圧力 10-3[bar]を仮定し、 各化学ポテンシャルは、 JANAF(Chase et al. 1978)*22の標準化学ポテンシャルを用いた。
上の XML で記述された入力データを、 プログラムが読み込むことのできる、 スペースで区切られたパラメータファイルに変換する。 変換用に以下の XSLT ファイルを作成した(XSLT プロセッサは Xalan を用いた)。
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:coce="http://gonta.ep.sci.hokudai.ac.jp/~dongury/coce"
version="1.0"
exclude-result-prefixes="coce">
<xsl:output
method="xml"
encoding="Shift_JIS"
omit-xml-declaration="yes"
indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="coce:data/coce:species"/>
</xsl:template>
<xsl:template match="coce:item">
<xsl:text disable-output-escaping="yes">'[ </xsl:text>
<xsl:value-of select="@id"/>
<xsl:text>] </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>' </xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="coce:conposition">
<xsl:if test="coce:element[@id = 1]">
<xsl:value-of select="coce:element[@id = 1]"/>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="not(coce:element[@id = 1])">
<xsl:text>0 </xsl:text>
</xsl:if>
<xsl:if test="coce:element[@id = 2]">
<xsl:value-of select="coce:element[@id = 2]"/>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="not(coce:element[@id = 2])">
<xsl:text>0 </xsl:text>
</xsl:if>
<xsl:if test="coce:element[@id = 3]">
<xsl:value-of select="coce:element[@id = 3]"/>
</xsl:if>
<xsl:if test="not(coce:element[@id = 3])">
<xsl:text>0</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
変換の結果を以下に示す。
'[ 1] H' 1 0 0
'[ 2] O' 0 1 0
'[ 3] H2' 2 0 0
'[ 4] H2O' 2 1 0
'[ 5] O2' 0 2 0
'[ 6] OH' 1 1 0
'[ 7] CO' 0 1 1
'[ 8] CO2' 0 2 1
'[ 9] CH4' 4 0 1
これにより、下のような式で値を変数に読み込むことができるようになった。
Do 1 I=1,9
Read(10,*) Comment(I),(Aie(I,E),E=1,3)
1 Continue
こうして計算して得た結果を、 各化学種の存在比を全体を 100% としてグラフに表す。 ここでグラフは XML ベースのベクタ画像形式である SVG(Scalable Vector Graphics)を利用した(図8)。
図8:SVG によるグラフの描画 |
SVG は W3C により策定されており、 2000年01月現在、SVG 1.0 が勧告候補になっている。 これは近く、1.0 として正式に勧告される見込みである。
SVG の策定には Adobe Systems も積極的に参加しており、 既にブラウザ向けに SVG Viewer プラグインが公開されている。 また、PostScript などからも変換可能である。
以下に SVG の特徴を挙げる。
以下に図8の SVG コードを示す。
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd" [
<!ENTITY graphstroke "stroke:black;stroke-width:2;">
]>
<svg width="400" height="400">
<g id="grid" style="stroke-width:1;">
<rect style="stroke:gray;fill:gainsboro;"
x="50" y="20" width="280" height="358"/>
<line style="stroke:dimgray;" x1="50" y1="20" x2="50" y2="378"/>
<line style="stroke:dimgray;" x1="50" y1="378" x2="330" y2="378"/>
<line style="stroke:dimgray;" x1="50" y1="91" x2="330" y2="91"/>
<line style="stroke:dimgray;" x1="50" y1="163" x2="330" y2="163"/>
<line style="stroke:dimgray;" x1="50" y1="235" x2="330" y2="235"/>
<line style="stroke:dimgray;" x1="50" y1="307" x2="330" y2="307"/>
</g>
<g id="percents" style="font-size:20px;">
<text x="340" y="28">100%</text>
<text x="340" y="99">80%</text>
<text x="340" y="171">60%</text>
<text x="340" y="242">40%</text>
<text x="340" y="313">20%</text>
<text x="340" y="384">0%</text>
</g>
<g id="graph" style="&graphstroke;">
<rect style="fill:lightsteelblue;" x="140" y="20" width="100" height="69"/>
<rect style="fill:cornflowerblue;" x="140" y="89" width="100" height="110"/>
<rect style="fill:thistle;" x="140" y="199" width="100" height="111"/>
<rect style="fill:khaki;" x="140" y="310" width="100" height="68"/>
</g>
<g id="species" style="font-size:20px;">
<text x="175" y="64">CO2</text>
<text x="180" y="154">CO</text>
<text x="175" y="264">H2O</text>
<text x="181" y="353">H2</text>
</g>
</svg>
2次元のグラフであれば、ほとんど全てを SVG で記述することが可能である。 XSLT で容易に XML 文書のデータを SVG に変換することが可能なため、 知見情報共有システムにおいては、 知見文書内のデータを可視化する手段として期待される。
既存のプログラムの中には、FORTRAN で書かれたものも少なくない。 そうしたものを XML と連携させるためには、2通りの手段が考えられる。
多くの場合は前者で対応可能だが、 標準入出力や複数のファイルを組み合わせて利用する様な、 複雑なプログラムにおいて前者で全て賄うことは不可能である。
従って FORTRAN 用 XML API の開発が望まれる。 開発にあたっては、他の言語と異なり、 主要な仕様全てに準拠することは現実的ではない。 DOM Level1 に準拠するだけで、本目的は充分叶えられると思われる。
地球惑星科学分野における知見情報共有システムの姿を模索し、 その実現の手段として XML が有用であることを確認した。 また、将来的に有用と思われる情報を収集した。
情報を XML で構造化した知見文書の流通のため必要な 地球惑星科学分野用文書型の定義策定のおけるスキーマ言語として、 現在、RELAX が最も有望であることを確認した。
具体的な例として化学平衡計算を XML と共に動かすことを試み、 プログラムの入出力を XSLT や SVG を利用することで、 XML 文書との連携が現実的に可能であることを確認した。
本研究を進めるにあたり、地球流体力学研究室の林祥介教授には、 この研究テーマを与えて頂いたばかりか、 多くの情報と資源を提供していただき、 また、ご多忙中にもかかわらず、全体に渡りご指導いただきました。
太陽系物理学グループの小笹隆司教授には、 研究テーマの変更を暖かく認めて頂いた他、大変お世話になりました。 橋元明彦助教授には、 2年間の研究生活の中で多くの得難いサポートをして頂きました。
気象庁予報部数値予報課の豊田英司氏には、 FORTRAN 95 におけるオブジェクト指向プログラミングを初め、 研究を進める上で有益な議論をして頂きました。
皆様の御指導のもと、この論文を書くことができました。 最後になりましたが、この場を借りて、皆様に心より御礼申し上げます。
このドキュメントは以下のファイルより自動生成されました。
最終更新日: 2001/01/31 | Copyright © 2001 河野 仁之 |