数理解析研究所講究録
第 1572 巻 2007 年 39-49

39xfy における Content MathML の編集プラグインの開発と応用
河田貴幸

中西智美

TAKAYUKI KAWATA*TOMOMI NAKANISHI

甲斐博\dag er

HIROSHI KAI \d ag er

愛媛大学大学院理工学研究科
GRADUATE SCHOOL OF SCIENCE AND ENGINBERING, EHIME UNIVERSITY

田村恭士
YASUSHI TAMURA \S

株式会社ジャストシステム
JUSTSYSTEMS CORPORATION

1

まえがき
近年, インターネットの普及に伴い,XML を利用した様々な技術が発展している. XML は W3C に勧告を受けた文書やデータの意味と構造を記述するためのマークアップ言語であり, ユーザが独自のタグを定義できるため非常に拡張性が高い. また, HTML と互換性を持つ XHTML, 図形描画用の SVG, 数学記
述用の MathML 等, 様々な分野における標準化された XML 文書が考案されている. 今後, 文書の再利用や多様なソフトウェアの間のデータ交換などのために, XML による文書表現はますます重要になってくると考えられる.
このような中, あらゆる XML ボキャブラリを組み合わせた XML 複合文書を WYSIWYG で作成・編集することを目的としたソフトウエアである涛 [2] が発表された. 幻稼は Java により開発されており, プラットフォームに依存しないため移植性が高く, またプラグインや XVCD を開発をすることで XML 編集機能の拡張が可能である.
現在が利用される場面は,’ 単体で用いる一般の文書編集のほかに, RDB などのソフトウエアシステムのフロントエンドやプログなどの Web 上の文書編集など多くの応用が考えられる. 今後は, e-learningのコンテンツ作成や LMS 管理など教育面での利用をはじめ, XML を用いた場面でのさまざまな利用が期待できる.
$x\phi$$x\mathfrak{h}$スについて考察す本研究では涛の数学文書処理に関する研究を目的とし, $\Phi$ の数式処理インタフ
る. 数式処理の計算や結果をで容易に利用できるようになると, 技術文書編集や教育コンテンツ編集などを行う際に役立っ.
$\text{ェ^{}-}$$x\mathfrak{h}^{\gamma}$’lcwttkykOhpc. cs. ehimeu. ac.jp\dagger nakanishi@hpc.cs.ehime-u.ac.jp
lkai@os.ehim6-u.ac.jp-Ihmura\copyright ju8t\epsilon \Psi tom.co.jp$\S_{Ya\epsilon ushi}$

40
Maple や Mathematica などの数式処理システムでは, 現在 MathML をサポートしており, MathML により数式の入出力が行えるようになっている.

しかし XML インタフェースを持つ数式処理システムはまだ一部であり, 数式処理システムを統一的に扱うことのできるフロントエンドはまだない. 一方,$x\mathfrak{h}$ではMathML Presentation Markup が編集可能であるが, これは数式表記を主に考えた仕様であるため計算には向いていてない.

本論では, 数式の意味を表現する MathML Content Markup のエディタをプラグインとして実装することを考える. また, 数式処理機能を利用する方法として, XML との親和性が高い数学 Web サービスの利用を検討する. これにより, 様々な数式処理システムを利用し, 計算やその結果をシームレスに文書編集に利用できる数学文書編集環境が構築できる.

2

xfy
xfy は, XHTML や SVG 等のあらゆる XML ボキャブラリが組み合わされた XML 複合文書の編集を目的としてジャストシステム社で設計開発された統合 XML アプリケーション開発/実行プラットフォームである. また, そのユーザ・インタフェースに関する特徴として,XML 文書の作成編集を WYSIWYGコンポーネントによる機能拡張を可能にするプラッガブルアーで行うことができる. また, \Delta 稼では,キテクチャを採用しており, あらゆる状況において XML 文書の最適な編集環境を実現する.
爵コンポーネントとは, XML 文書の編集, XML 部分木に対する加工や計算, ファイル入出力等の機能$x\mathfrak{h}r$をそれぞれ個別に実装したものである. また,$\Phi$

コンポーネントは主に Java 言語で開発され, それらをプラットフォーム上で利用するために JAR 形式でアーカイブされる. xfy には, 予め基本的な機能を提供する xfy コンポーネントが用意されており, XML 文書の閲覧編集ができる. また, 新規に xfy コン$x\Phi$ポーネントを開発することにより, 既存の xf ンコンポーネントと組み合わせて利用することも可能である.

21

XML 複合文書の処理

xfy における XML 複合文書の処理の流れを図 1 に示す. この例では XHTML と SVG が XML 複合文書に含まれている.

図 1: $\Phi$ における XML 複合文書の処理の流れ

Stepl XML 複合文書から DOM ツリー (Source DOM ツリー) を生成する.

Step2 それぞれの名前空間により DOM ツリーを区画化し, 対応するボキャブラリコンポーネントによりそれぞれの処理を行う.

Step3 $Step2$ . で行われた処理結果を統合し, XML 複合文書として表示する.

41xfy では, XML 複合文書のシームレスな処理を目的としているため, 文書構造に関する多くの情報を取得し, 利用する機会が多く, また, 必要に応じて要素の並び替えや, 文書内の任意位置に要素の移動, 追加, 削除を行わなくてはならない. そのため,$x$

取では XML 文書の汎用的な処理のための API である Document

Object Model (DOM) を利用している.

2.2

XVCD

XVCD は XSLT を拡張したスクリプト言語であり, XML 文書の変換及び編集が行える. XVCD によるXML 文書の変換は次のように行われる. 取は XML 文書に対する DOM ツリー (Source DOM tree) を保持しており, XVCD によって XML 文書を変換することで新たな DOM ツリー (Destination DOM tree)を得る. Destination DOM tree の表示はコンポーネントにより行われ, ユーザは XML 文書の閲覧が可能となる. またユーザが Destination DOM tree に対する編集を行うことで, その編集による変更は直ちにSource DOM tree に反映される. XVCD は XML 文書をユーザ独自の表示と編集のためのプラットフォ$x$$x\phi$ームである.

3

MathML とその編集機能についてあらゆる情報交換が電子的に行われている現在において, 特に技術的な情報に関し, それらを検索, 再利用されることが求められている.

しかし, 現在の Web 上における数式の表現は, 主に画像を用いるため,画像に含まれる数学的な情報を検索, あるいは他のアプリケーションにより再利用することができない. そこで,そのような問題を解決するために数式記述用の XML として MathML が W3C に働告された.

MathML には, 数式の表記構造を記述する Presentation Markup と, 数学的な意味を記述する ContentMarkup がある. MathML を記述するには, Presentation Markup と Content Markup のどちらか一方のみでの記述, もしくは両方の記法を混在・並列させて記述することもできる. また, MathML は単独でも使用可能であるが, 名前空間を用いることで XHTML 等の他の XML 文書に埋め込むことも可能である.
Content Markup は, 数式の数学的意味を記述するものであり, 約 150 種類の要素が用意されている. また, それらの要素は 「 $Token$ ElementsJ , 「 $Basic$ Content $Elements$ 」 , 「 $Arithmetic,Algebra$ and Logici ,「 $Relation$ 」, 「 $Calculus$ and Vector $Calculus$ 」 「 $Thoery$ of SetsJ, 「 $Sequenoes$ and SeriesJ , 「 $Elementary$classical $functions\rfloor,$ 「 $Sratistics$ 」, 「 $Linear$ AlgebraJ, 「 $Semantic$ MaPping Elementsi. 「 $Constant$ and.

Symbol $Elements\rfloor$ のいずれかに分類される.

3.1

Content Markup 編集上の注意点

Content Markup はアプリケーションが数式の計算などに関わる処理を容易にするために, 数式の数学的意味を備えた構造として記述される. Content Markup を編集する際には, 次のことに注意すべきである.
注意 1 編集後もその文書構造が数学的な意味を備えている
注意 2 数式が複数の表記を持つことがある
例として, 図 2 に示す数式 $x-y$ を $x-y-z$ に編集した際の編集結果を図 3 に示す. 但し,math 要素は省略している.
注意 1 を解決するための一つの方法は, テンプレートによる編集方法である. テンプレートそのものはXML 文書の部分木として表現することができる. 前述の例をテンプレートを用いて編集する場合, 図 4 に

42図 2: 数式 $x-y$ ’ の XML 構造

図 3: 編集結果

図 4: 二項減算テンプレート

示すテンプレートを用いる. ここで, テンプレートに含まれる csymbol 要素は minus 要素が適用される被演算子要素であり, また新たな入力枠としての役割を持つものとする.

さらに,この csymbol 要素に対して数や変数が入力されることで cn 要素や ci 要素に変化することを想定している. 削除を行う場合は, 数式の意味を失わないためにテンプレート単位での削除を行う. 但し, 編集の容易さのため, 図 2 の状態からのみを削除した場合は, 図 5 の状態になるべきである.

$y$$<apply>$$<minus/>$$<c\triangleright x</ci>$$<C8ymbol></C8pbol>$$</apply>$

図 5: oeymbol 要素による補完

また, 注意 2 に関しては, 例えば, 数式 $x+yxz$ を Content Markup で記述しそれを表記するためには,という書き方と $x+(yxz)$ という書き方が存在する. また, 優先度が存在しないような場合には,
図 6, 図 7 に示す 2 種類の記述方法があってもよい. ここで, それぞれの Content Markup をその構造が持$x+y\cross z$

つ演算順序等の数学的意味を考慮した上で数式を表現すると,となり, それぞれ数学的意味の異なる数式である.

$(x+y)\cross z$ ’(図 6),$x+(yxz)$

よって, 図 6 の場合において, 少なくとも(図 7)$x+y$’ に対して括弧を付加しなければ Content Markup の構造が表す数学的意味とエディタに表示される数式の持っ数学的意味が異なる.
そのため. 編集中の Content Markup の構造とエディタに表示される数式の持っ数学的意味を対応させるため必要に応じて括弧を数式に加える必要がある. このことは, WYSIWYG 環境で $contentMa\bm{r}kup$ 編

43

図 6: 数式$x+y\cross z$’ の記述例 1

図 7: 数式$x+yxz$ )’ の記述例 2集する上でも必要なことの 1 つである. Content MarkuP において括弧を含む数式の表示を行う方法として
次の 2 つの方法が考えられる.

方法 1 括弧の表示に関する情報をエディタの内部データとして保持させる.
方法 2 括弧を表示用の Presentation Markup 要素である mfenced 要素を XML 文書内に埋め込む.

方法 1 は括弧に関する情報を文書を保存できないため方法 2 についてのみ考える. 方法 2 を図 6 に適用す
ると, 図 8 に示す文書構造となる.

$<apply>$$<timae/>$$<mfencedopen=$ ( close $=$ )
$”$

$>$

$<apply>$$<plus/>$$<ci>x</ci>$$<ci>y</ci>$$</apply>$$</mfenced>$$<ci>z</ci>$$</apply>$

図 8: mfenced 要素を用いた数式 $(x+y)xz$ ’ の記述例

Content Markup を編集する既存のエディタには Formulator MathML Weaver[3], Integre MathML Equation Editor[4] などがあるが, これらの注意点の解決が不十分なことがある.
Formulator MathML Weaver の特徴は, テンプレートによる編集やキーボード入力を採用しており, キーボード入力による数式テンプレートの入力も可能である. また. 数多くの MathML 要素に対応しており,Presentation Markup との混合記述も可能である. しかし, 問題点としては, 編集直後における Content
Markup の構造の変更がエディタに表示される数式に自動的にフィードバックされない場合がある. 例として数式 $xx(y+z)$ を意味する Content Markup を作成する場合を考える. この Content Markup を編集するには乗算と加算のテンプレートを順に入力するが, 表示される数式は $xxy+z$ であり, 演算順序を意味するための括弧は自動で付加されない.

Integre MathML Equation Editor の特徴は, 多項式などの数式編集をオーバーレイを利用することで,テキストエディタのような直接編集を実現している. また, テンプレートによる編集も可能である. 基本

44
的に入力された数式を構文解析することで Content Markup, もしくは Presentation Markup を出力する.
問題点としては, minus 要素が多項演算子として扱われる場合があり, 図 9 のような数学的構造が曖昧なContent Markup ができることである.
$<apply>$$<minus/>$$<ci>x</ci>$$<ci>y</ci>$$<ci>z</ci>$$</apply>$

図 9: 数学的構造が曖昧な Content Markup

4

ContentMarkupEditor プラグイン

コンポーネントにつ
本節では幼 y 上で Content Markup を作成編集することを目的として開発した
いて述べる. Content Markup の編集を容易にするためには, GUI による入力インタフェースを備える必要がある. Padovani らは数式エディタが備えるべき入カインタフェースを既存の Presentation Markup エ$x\theta$

ディタ等の様々な挙動を調査し, 望まれる機能 [5] を次のようにまとめている.
入力スロット (以下, スロット) は, ユーザに対してデータが未入力である

入カスロットの表示部分を明示的に表示することで, その位置へ値の入力を促すためのものである. 入力スロッ

トの表示は “?” や編集位置の表示とその移動$\blacksquare$等のように表現は様々である.
数や変数などを挿入する位置を示すためにキャレットが用いられる.

一般にこのキャレットは点滅する垂直の棒として表現される. また, キャレットは編集位置を表すものであるので移動可能である必要があり, その望ましい挙動として方向キーによる上下左右への幾何的な移動ができること, また移動が対称であることである. 対称な動きとは$arrow$

キーによる移動後,$‘arrow$

キーにより以前の移動経路と逆順にたどることができる動きであり, 上下移動についても同様である.

現在選択されている領域をフオーカスがある領域があると呼び, その領域が編集可能であることを表す. 領域には入力スロットを含む. またフォーカスの表示には, ある領域を実線や破線の矩形で囲んだり, あるいは領域内の文字の色や背景色を反転させる

編集領域の選択などの手法が用いられる. フォーカスの選択はマウスによるポインティングやドラッグ操作, あるいは Shift キー+方向キーによるキャレットの移動等で行われる.
カット (コピー) & ペースト

フォーカスのある領域を切り取り, あるいはコピーして別の編集位置に貼り付ける編集操作である. この編集操作により, 既存の数式の記述情報を再利用することが容易となる.
テンプレートとオーバーレイ

Content Markup において数式の持っ構造を入力する方法としてテンプレートやオーバレイが利用できる. これらの入力方法は, 数式の構造を表したアイコン等を選択することでキャレット位置に入力できる. テンプレートとオーバーレイは類45
似する入力方法であるが, 前者の方法は先に数式の構造を与えた後に残りの入カスロットに対して数式を入力する方法であり, 一方, 後者の方法では既存の数式に対して新たに別の数式の構造を与えることができる入力方法である.
数式を容易に編集するためには, テキストエディタでのキーボード入力による直接編集が望ましい. 多項式のような頻繁に利用される数式を直接編集できることは, 編

数式の直接編集集時におけるキーボードとマウスの交互利用回数の軽減に繋がるため, ユーザの編集に対する煩わしさをも軽減できると考えられる.
これらの特徴を備えた Content Markup 編集用の涛コンポーネントを 「 $ContentMarkupEditor$ プラグイン (以下, 本エディタ)」 と呼ぶことにし, 以下では本エディタの持つ入力インタフェースや編集機能について述べる.

4.1

入カスロット本エディタにおける入力スロットの表記は $[?]$ であり, math 要素が子要素を持たない場合やトークン要素が値を持たない場合等に表示される. 図 10 は実際に本エディタ上で表示される入力スロットの様子である.

$?\sim J|$$\tau_{\backslash }\#\epsilon_{t}*\grave{\nu}$$-\sim\simarrow^{v}\cdot-\prime\prime w\cdot r\backslash -\cdot!\cdot-\sim*-arrow\cdot\etaarrow R\vee---v\cdot\cdot\tau*$

図 10: 入力スロット

4.2

キャレットの表示と幾何的な移動

本エディタにおけるキャレットは青色の縦棒として表現している. 但し, 現実装段階において点滅はしなキーによる左右対称なキー,い. また, キャレットの Tab キーや方向キーによる移動について,$arrow$移動を達成している. 図 11 は$arrow$$arrow$

キーのみによる本エディタでのキャレットの表示, 及びその移動の様子を示す.

図 11: キャレットの動き

46
4.3

入カフオーカス本エディタにおける入力フォーカスによる編集状態を図 12 に示し, それぞれの状態について以下に述.

べる.

FOCUS-SELECTED 状態
破線の矩形で囲まれたノードが選択された状態であり, 入力が可能な状態. また, この状態にあり, かつキャレットが左側 (右側) にある場合に DELETE (BACKSPACE) キーが入力されると,$\bullet$.

FOCUS-DELETABLE 状態に遷移する.

FOCUS-CONTEXT 状態
背景色が色付けされたノードのテキストノード値を編集するための状態. ci 要素や cn 要素が持っテキストノード値の編集用の状態.

FOCUS-DELETABLE 状態
文字色や背景色が反転したノード及びその子ノードの削除が可能な状態.

$\bullet$

FOCUS-OUT 状態
ノードが編集対象でない状態.

図 12: フォーカスによる編集状態

44

入力例

本エディタにおけるテンプレート入力の様子を図 13, 及び図 14 に示す. ここでは総和を入力する例を用いている. 本エディタでは Integre MathML Euation Editor と同様に,キーポード入力からのオーバーレ

イの入力ができ, テキストエディタによる自然な数式編集に近い編集が行える. 例えば, 本エディタで数式$x+y-1$ を入力する場合, *一入力は編集が行える.

($x,$$+,$$y,-,$ $1’$の順に入力すればよく, 中置記法を意識した数式の47

フ\mbox{\boldmath $\tau$} $C_{\dot{\hslash}}\Phi u\otimes$$-\not\supset$$r\underline{\sim}’\wedge\sim-\bigwedge_{\wedge}z$)$\prime^{arrow\hslash\prime\Phi}\wedge J\nu\theta u$.

崗叱 r’uwr(r\kappa$\backslash \prime l\hslash\phi tt0$($\backslash \#\underline{\ovalbox{\tt\small REJECT}}$$ : $H-$:($\tau’$--}.*r.

フ $r$ イル e$t..\}-sg$;$\frac{a..\vee.u}{j\ldots\backslash \backslash }l_{\}^{\vee|\bullet}\mathfrak{B}^{-}*$.

$\infty\hslash i\otimes$a

ププク▼-ym$\prime J^{-r_{\nu\Phi}}\wedge k\theta\otimes.$.

$:–.a\mapsto-*w\cdot\cdot z$$t\mathfrak{B}\vee${ $n$ , \dag er $B$$b^{9})*\{r$$|$$-’-\backslash r_{c\frac{-}{}\cdot u\not\simeq\alpha r}^{arrow}\vee$

$v$

$v$

$-\wedge$$\hat{\ovalbox{\tt\small REJECT}}_{*\wedge^{\backslash }}^{r_{::^{\vee^{\backslash \cdot\vee}}}^{\backslash }}\backslash \overline{\backslash }\mathfrak{d}^{\backslash \overline{\gamma}}\epsilon\vee\mu_{\wedge\backslash \backslash \wedge^{\backslash }}^{\check{\dot{\nu}}_{j}^{\wedge^{\vee}}}\approx\ Y^{\vee}\dot{*}$.

$\sum_{=\{?J}^{[?3}$($t^{7}+$

$1$)

$|$

$\ovalbox{\tt\small REJECT}$5

k 褒 $r.\cdot\cdot*\cdot\cdot m_{-}vsvmx_{J\prime}u-*u_{A}\epsilon ua\alpha t--\cdot$$nrv:-**\sim u\ovalbox{\tt\small REJECT}_{:}^{-\simeq}$.

図 13: テンプレートの選択

図 14: テンプレート入力

xfy 上での数式処理
数式処理システムのインタフエースは様々であり, その計算機能を Web サービスとして利用するための仕組みが数学 Web サービスとして研究されてきた $[6, 7]$ . 数学 Web サービスでは, サービスの内容やインタフエースを WSDL に記述し, 数式処理機能を統一的に http 上の SOAP プロトコルで Web 上から利用できる. 本論では, Lupin 数学 Web サービス [6] を晦から利用する方法について検討する. すなわち, 涛は数式の編集や数学 Web サービスの実行コマンドを扱うのためのフロントエンドとしての働きをする.

xfy 上で Web サービスを用いて数式処理を利用するためには, そのためのクライアントを作成する必要がある. 我々は SOAP 通信を行うためにプラグインを開発し, Web サービスを利用するためにプライベー
ト XML を定義した.
クライアントの構成図を図 15 に示す. プライベート XML は, WSDL, SOAP, MathML 等を含んだXML 複合文書である. プライベート XML は XVCD を用いて xfy 上で編集できるようになる. 計算の際に

図 15: Web サービスクライアントのアーキテクチャスを記述した WSDL を選択する. また, 本研究で作成した Content
Markup プラグインを用いて必要な数式を入力する. 入力が SOAP プラグインにより Web サービスに渡さは, まず Web サービスのインタフエーれることにより Web サービスが実行される. 結果は Content Markup として返されるので,坊はプラグインを用いてそれを表示する. 以上のような手順で計算が可能になる. これらの全ての操作は同じワーク48
スペース上で行われている.

Lupin における因数分解の数学 Web サービスへのアクセスの例を示す. WSDL ファイル (AsirFctrService.wsdl) はクライアントにロードされ\rangle x 魯はクライアントを生成する (図 17) . 数式処理システム$Risa/Asir$ の fctr コマンドが入力 $x^{5}+x^{4}-2y^{2}x^{3}-2y^{2}x^{2}+y^{4}x+y^{4}$ に対して数学 Web サービスにおいて実行され (図 18), 結果 $(x+1)(x+y)^{2}(x-y)^{2}$ が MathML プラグインを用いてワークスペース上に表示される (図 19).

図 16: 実行開始画面

図 17: Web サービスの WSDL を選択$f_{:_{\_{j^{\backslash \cdot i}}’\theta\hat{\mathfrak{U}}^{\wedge}\cdot\ :^{\wedge}?_{\backslash }\#\cdot\hat{\mathscr{H}}^{n^{}\cdot:_{k:}:::}\# i\ddot{\sim}\dot{\grave{r}}}}^{\wedge\infty\overline{.\cdot,.,}\vee\cdot\cdot\cdot.\cdot...\cdot\cdot\cdot\dot{m};}u\cdot:\nwarrow s\wedge$$–../\cdot 4\#\cdot\cdot$

図 18: 本エディタによる Content Markup の編集$\Phi$,$i\sim\cdots\cdot\cdot 2-*\cdot\cdot\vee$.

$*-\cdot\cdot\cdot lA.Y\backslash \cdot\iota\#*.k\propto.A.::\backslash ’.\backslash .$;図 19: Web サービスの出力結果

は XML 複合文書を編集するソフトウエアであるので, プログ文書 (図 20) や e-learning コンテンツ(図 21)

等といった他のアプリケーションにおいて容易に数式処理の計算結果を用いることができるようになる.

図 20: プログ文書の編集

49

図 21: e-learnhg コンテンツの編集

6

おわりに

本研究では, 数式の数学的意味を記述する MathML Content Markup を WYSIWYG で編集するプラグインの実装を行った. この晦コンポーネントは, 直接編集も可能なテンプレートエディタとして実装を行っており, 数式エディタに必要な機能を備えるように注意した. 数式処理機能の提供は従来から我々が行ってきた数学 Web サービスにより提供することで. 爵に数式処理機能を追加することができる. これにより, 数式処理システムによる計算やその結果を文書編集にシームレスに利用できる数学文書編集環境が構築できる.

参考文献[1] MathML, http: $//ww.w3.org/TR/Kathm.2/$[2] $\Phi$, https: $//www$ . xfytec. $com/$[3] Formulator MathML Weaver, http: $//mmlsoft.com/projects/fornulator/$[4] Integre MathML Equation Editor, http: $//www$ . integretechpub. $com/zed/$[5] Luca Padovani and Ricardo Solmi: An Investigation on the Dynamics of Diret-Manipuation Editors
for Mathematics,MKM 2004, Lecture Notes in Computer Science Vol.3119, pp.302-316, 2004
[6] Kai Li, Masato Sakai, Yukihiro Morizane, Masahiro Kono, Matu-Tarow Noda, Lupin: Towards theframework of web-based problem solving environments, In Proc. ATCMZOOS, pages 276-285, 2003.
[7] MONET Home Page, http: $//monet$ . nag. co. uk.