数理解析研究所講究録
第 1572 巻 2007 年 109-113

109

xfy を用いた XML の編集について
田村恭士
YASUSHI TAMURA(株) ジャストシステム
JUSTSYSTEMS, INC.

1

なぜ XML なのか ?

近年データの読み書きや交換、 通信の分野において、 XML が注目されている。 XML とはデータフォーマットの一つの規格で、 eXtensible Markup Language の略である。 注目されている理由として、 W3C より国際標準規格として標準化されているため、 ソフトウエア間のデータ互換性が高いことや、 データの資産を再利用しやすいことなどが挙げられる。
XML では広範囲なデータフォーマットが扱えるため、 さらに用途を絞った様々な規格が公開されている。 これらをボキャブラリと呼ぶことにする。 XHTML もその一つであるが、 これは HTML 規格を XMLに沿うように規格し直したものである。 HTML は XML の前進である SGML のサブセットとなっており、XML 規格に沿っていないことに注意されたい。 標準化されている他のボキャブラリとしては、 数式を表現するための MathML や、 ベクトル系グラフィックスを扱うための SVG などがある。 また、 このような標準化されているポキャブラリ以外にも自分で勝手にボキャブラリを定義することも可能である。 これをプライベートボキャブラリと呼ぶことにする。
XML では、 ボキャブラリの中にボキャブラリを階層的に埋め込むことが可能であり、複数のボキャブラリを混在させることも可能となっている。 これを複合ドキュメント (コンパウンドドキ $z$ メント) と呼ぶ。

2

プライベートボキャブラリ
プライベートボキャブラリのメリットは、 前述したように自分で構造を定義できることにある。 例として、 以下の学生名簿 XML を示す。
$<?m1version\approx’$ 1.0’ ’ $?>$.

$text/xsl$ ’ : hr $ef$ ‘ TEST. xsl’ 2 $?>$‘$<?com$ . xfy vocabulary-connect on href
TEST. xvcd ‘ ‘ $?>$$<?rl-\epsilon tylesheet$tyPe$<tam$ ; list.

$\cdot$‘$i$$<tam$$title\Leftrightarrow$: student $id$

く tam:name $>xfy$’$=$

学生名簿’ ’xmlns: tang) http: $//www$ . justsystem. co. $jp/tam$‘07001’$2>$

太郎</tam:name$>$$</tam$ : student $>$$<tam$: student $id-$ ‘ 070022 $’>$

く tam:name $>xfy$$</tam$ : student $>$$</tam:list>$

花子く/tam:name$>$

$>$

110
3

ブラウザで表示するには ?
前述の XML ファイルを IE などで開いても、 単純に上の表示の状態で表示されるだけであるが、 見栄えを変える方法として XSLT という手法がある。 XSLT とは XML を XML に変換する言語であるが、 XSLTに対応しているブラウザでは、 XML に XSLT を用いて XHTML に変換することによって、表示が可能になる。 また、 XSLT に対応していないブラウザ用に、 サーバ側で XHTML に変換する Servlet なども存在する。

XSLT 言語自体も XML のサブセットとなっていることに注意されたい。 また、 適応させる XSLT を変えることによって、 同じ XML を様々なスタイルに変更して表示させることが可能である。

4XSLT の使用例
以下が XSLT のサンプルである。

$<$?xml $versi_{on}m$ ‘ ‘1.0’ ’ $?>$$<xsl$ ; stylesheet

xmlns: xsl ‘ ‘ http: $//www.w3.org/1999/XSL/Transform$ ’ ’’ ’
http: $//www.w3org/1999/xhtml$ ’ ’
mlns : tam ‘ http: $//www$ . justsystem. co. $jp/tam$ ’ ‘version ‘ 1.0’ $‘>$
$m\ln\epsilon^{\epsilon}$

$=$

$=$

$<xsl$ : output$<xsl$

method‘ ‘$\cdot$html ‘ $’/>$: template match , $’/tam$ : list’ $’>$$\cdot$$<html>$$<body>$く$u1>$$<xsl:apply-templates/>$
く/u$>$$</body>$$</html>$$</xsl$ : template$<xsl$$>$: template match$=$‘

tam: student’ $’>$

く $1i>$$<xsl$: value-of select$<xsl$: value-of select’$\cdot$‘Oid’ $2/><br/>$$tam$: name’ $’/>$$</1i>$$</xsl$ : template $>$$</xsl$ : stylesheet $>$この XSLTを前述の学生名簿 XML に適応させることによって、 以下の XHTML となる。

111$<html>$$<body>$$<u1>$$<1i\succ$

07001 $<br/>$xfy 太郎く/li\succ$<1i>$

07002 $<br/>$xfy 花子$</1i>$$</u1>$$</body>$$</html>$

このように、 XML であってもブラウザで表示可能である。 しかしブラウザでは 「編集できない」。

5xfy とは?

爵とは XML の表示、 および WYSIWYG で「編集」 ができるツールである。 プラグイン機構により、プライベートボキャブラリなどのあらゆる XML の表示、編集が可能となっている。 このプラグイン機構はJava で拡張する方法と、 XSLT を元にした双芳向変換言語 XVCD による拡張方法が存在する。 XSLT は単方向のみであることに注意されたい。 ここでは、 XVCD による WYSIWYG 編集方法を例に挙げたい。
実際の XVCD の例を示す。
$<?r1$ version$\cdot$1.0$?>$$<xvcd$ : xvcd.

rlns:xvcd

xmlns: $ui$

’http: $//mlns$ . xfy. $com/xvcd$ ‘ ’’http: $//mlns$ xfy. $com/ui$ ‘ ‘$\cdot$.

http: $//www$ . justsystem. co. $jp/tam$ ’ ’
http: $//www.w3.org/1999/xhtml’$ ’

xmlns: $tam\sim$mlns$\cdot$‘ ‘version$\cdot$‘‘1.0 ‘ $’>$

く xvcd:vocabulary $name\approx$$<xvcd$ : template

name$\cdot$‘‘

学生名簿’ ’match’root’$=$’tam: list ‘ ’ call-template$’\succ$$<html>$$<head>$$<title><xvcd$ : value-of$select\Leftrightarrow$’Qtitle’ $’/></t$ itle $>$$</head>$$<body>$く hl $>$$<xvcd$ : text-ofselect‘ Qtitle’ $‘/>$$=$‘root’ $‘/>$

112$</h1>$$<u1>$$<xvcd$ : apply-t $emplates/>$$</u1>$$</body>$$</html>$$</xvcd:template>$$<xvcd$ ; templatematch$\cdot$‘tam: student’ $’>$$<1i>$$<xvcd$ ; text-of $select\sim$$<xvcd$ : text-of’Oid ‘ $’/><br/>$$select-$ ‘tam: name’ $‘/>$$</1i>$$</xvcd$ : template$</xvcd$ : xvcd

$>$

$>$

以上の XVCD を前述の学生名簿 XML に適応させると、 ブラウザ上と同じ表示が坊上で得られる。 また、name タグや id 属性を編集可能である。

6

XVCD コマンド
前述の XVCD では学生の追加などの編集操作はできない。 そこで、 以下のような変更を XVCD に加える。
く xvcd:vocabulary names ‘ ’ 学生名簿’ ’mat$<ui$

: ui $version-$: main-menu

$<ui$

$<ui$

‘$</ui$tam: list’ ’’root’ $’>$

1.0’ $’>$$\cdot$‘Entry‘ $’>$

menu-item $label\approx$ ’add2 ‘ command: menu$call-template\approx$$>$: menu label$<ui$ ;’$ch\approx$$\cdot$‘AddEntry’ $’/>$$>$$</ui:main-menu>$$</ui:ui>$$</xvcd$ : vocabulary$>$$<xvcd$ : command

name$\cdot$$<xvcd$ : insert

ref$\cdot$$<tam$: student’AddEntry‘ $’>$$‘/tam$ : list’ ’ position$=$’$last-child$ $‘>$$>$$<tam:name/>$$</tam:student>$$</xvcd$ : insert$>$$</xvcd:command>$
これにより、 爵のメインメニ $=$ ーに $Entryarrow AddEntry$ という項目が新たに追加される。 実際にその追加された項目を選択すると、 xvcd:insert 文が実行され、 新たに $tam:student$ 要素が加わるようになる。

113
7

最後に

xfy は XVCD を書くことによって、 自分で定義したオリジナル XML 文書でも WYSIWYG で編集できるようになる。 以下の URL にて、 登録するだけで無償でダウンロード可能なので、 是非とも試用してもらいた$\iota_{\text{。}}^{a}$http: $//www.x\phi.com/$