XMLを超えて BeyondXML
PostScriptのようにXMLも裏方に

小学生もご隠居もXML活用へ

2008年 7月25日改訂
2008年 5月 7日改訂
2008年 5月 1日改訂
2008年 4月14日改訂
2008年 3月10日改訂
2008年 3月24日改訂
2008年 1月30日初版

あなたはスキーマを書けますか?

    BeyondXMLを使えば,スキーマを自動生成できます!

あなたはスキーマにあわせてマークアップできますか?

    BeyondXMLを使えば,XMLデータを自動入出力できます!

あなたはスキーマにあわせてスタイルシートを書けますか?

    BeyondXMLを使えば,スタイルシートを自動生成できます!(開発中)

私(岸 和孝)は,印刷・出版業界における低調なXML活用の現況を少しでも打破できるようにするために,「はじめにXMLありき」「XML対応は専用のアプリケーションで」のパラダイムから「PostScriptのようにXMLも裏方に」「小学生もご隠居もXML活用へ」というパラダイムへの転回を提唱します。その新しいパラダイムを実現するために,実験ツール「BeyondXML」を開発しています。実験の途上ですので,まだ検討しなければならない課題も多くあり,ご意見を賜りたく存じます。また,興味深いサンプルや問題となるサンプルがありましたら,ぜひお寄せください。

現在,スプレッドシート向けの,BeyondXML for Calcと,定型帳票向けのBeyondXML for Tableが実現しています。これらのツールは,OpenOfficeのWriter文書のフィルターとして働きます。

BeyondXMLを使うことによって,XMLの知識が全くないユーザーでも,自ら作ったOpenOffice文書からRelaxNG形式のスキーマが作れるようになり,それに合わせたXML文書インスタンスを出力(エクスポート)したり,入力(インポート)できるようになります。対象となるOpenOffice文書についてはサンプルをご覧ください。

BeyondXMLの特徴

BeyondXMLによって,OpenOfficeの簡単な操作さえできれば,XMLをすぐに扱えるようになります。

BeyondXMLによって,個々のOpenOffice文書ごとのスキーマが自動的に推定されます。

BeyondXMLによって,OpenOffice文書の内容をXMLデータへエクスポートしたり,あるいはXMLデータからインポートするためのフィルターを個々の文書ごとに開発する必要がありません。

BeyondXMLによって,個々のOpenOffice文書ごとのスキーマを全く意識することなく,その文書のXMLデータが扱えます。

BeyondXMLによって,エクスポートされたXMLデータを他のシステムへ渡したり,OpenOffice文書へ再びインポートしたりできます。

BeyondXMLの扱うXMLデータはOpenDocument Format(ODF)形式ではなく,利用者独自のXML形式です。

BeyondXMLの利用は,無償です。

 

BeyondXMLのFAQ

BeyondXMLがあれば,XMLの知識は不要になるのですか?

 当面は,そうはいかないでしょうが,多くのソフトウェア開発業者が「XMLを超えて」の考えに賛同して,XMLを意識しなくてもXMLデータを扱える,利用者向けのツールをどんどん開発してくれるようになれば,XMLの知識は不要になるでしょう。

BeyondXMLを理解するのに,この説明書を理解しなければならないのですか?

 BeyondXMLは,XMLの知識が全くないユーザーでも扱えるようになっていますが,この説明書を理解するには,XMLの知識が必要です。初心者向けの説明書は別途書くつもりです。

BeyondXMLとは,OpenOfficeでしか使えないのですか?

 「XMLを超えて」は,XMLに対するひとつの考え方であって,OpenOfficeにおけるその実現をBeyondXMLと呼んでいます。Microsoft社のOfficeで実現できれば,それも結構な話です。InDesignなどのDTPツールでの実現も期待しています。

BeyondXMLは,既存のスキーマ(例えば,JDF,XBRL)に対応できますか?

 BeyondXMLは,大半の既存のスキーマに対応できません。つまり,既存のスキーマこそ「はじめにXMLありき」だからです。ここでは「はじめに情報ありき」です。

BeyondXMLでエクスポートしたXMLデータを加工するツールはありますか?

 BeyondXMLとしてはまだありませんが,検討中です。当面は既成のツールをお使いください。

BeyondXMLを改造してビジネスに使ってもかまいませんか?

 BeyondXMLの翻案や商業的利用は,私の著作権を保持する条件下において可能です。

BeyondXMLの不具合によってデータの破壊などの障害は,起こりえますか?

 BeyondXMLの使用によって生じる障害は予測できません。なるべく十分なテストを行ってから利用してください。仮に損害が生じても私は何らの責任を負いません。

BeyondXMLの自動的なインストーラーはありませんか?

 BeyondXMLフィルターのインストーラーについては,XMLフィルター・インストーラーを利用してください。

 BeyondXML version 0.9(英語版)のダウンロード

version 0.9からの変更点
  • BeyondXML for Tableを修正しました。
    • 不具合を修正しました。

目 次

1 なぜXMLを超えなければならないのか
 1.1 「はじめにXMLありき」ではない
 1.2 OpenOfficeを使っているだけではXMLの活用にはならない
 1.3 源流指向
2 スキーマをどのように推定するのか
 2.1 名簿の例
 2.2 受注伝票の例
 2.3 名刺の例
 2.4 属性を意味するスタイル名
 2.5 ユーザー定義のスタイル名
 2.6 推定されるデータ型
3 BeyondXML for Calc
 3.1 BeyondXML-Calc-to-XML
 3.2 BeyondXML-XML-to-Calc
 3.3 BeyondXML-Calc-to-RNG
 3.4 BeyondXML-for-Calc
 3.5 BeyondXML for Calcの問題点
4 BeyondXML for Table
 4.1 BeyondXML-Table-to-XML
 4.2 BeyondXML-Table-to-XSL
 4.3 BeyondXML-Table-to-RNG
 4.4 BeyondXML-for-Table

付録1 OpenOfficeの入手とインストール
付録2 XMLフィルターの設定方法
付録3 サンプル・データについて
付録4 BeyondXMLで用いたXSL変換の手法について

1 なぜXMLを超えなければならないのか

1.1 「はじめにXMLありき」ではない

現在,夥しい数の電子文書(例えば,Word文書,PDF文書,HTML文書)が毎日作られ,ネット上で交換されています。ところが,その中に,相互運用性が低い文書表現形式(例えば,Word文書のMS Word形式)で表された文書が数多く含まれています。そのプラットフォーム(例えば,MS Office)を持たない者(あるいは持ちたくても持てない者)はそれらを再利用(とりわけ再編集)できません。言い換えれば,相互運用性が低い文書とは再処理可能性が低い文書のことです。このことは情報格差(デジタル・デバイド)の原因にもなっています。

そこで,標準の文書表現形式(例えば,SGML,XML,PDF)を採用すれば,プラットフォームに依存することなく,文書交換時における文書の相互運用性を高められ,情報化基盤を整備できる,と考えられています。果たして既存の標準でない文書表現形式から標準のXML形式への移行が声高に論じられています。これは確かにもっともな意見に聞こえます。

しかし,「はじめにXMLありき」は,あまりに技術に偏った考え方ではないでしょうか。私自身も反省するところ大です。本来,文書の表現形式は,応用から見れば何でもかまわないはずです。XMLのためのエディターが数多く開発されていますが,それらは技術者向けのもので,一般のユーザーが使いこなせるものではありません。「PostScriptのようにXMLも裏方に」とは,文字通り,ユーザーがXMLを意識しなくてもXMLを活用でき,文書の相互運用性を高められるような仕組みを考える,という発想です。そうした仕組みが実現すれば,「小学生もご隠居もXML活用へ」進めるはずです。

なるほど,RSSニュースリーダーのようにユーザーからXMLが隠されている仕組みも既に多数あります。しかし,個別的なXML応用では,やはりXSL変換などの処理を個別に開発しなければなりません。「XML対応は専用のアプリケーションで」は誰もができるという話でなく,時間も費用もかかります。小学生やご隠居がXML活用へ進むには,もっと簡単にXMLが利用できる仕組みがなければなりません。

1.2 OpenOfficeを使っているだけではXMLの活用にはならない

フリーウェアのオフィス・スイート「OpenOffice」は,そうした要件を満たしているように見えます。OpenOfficeは,OASISが開発しISO規格となった,XML形式の「OpenDocumet Format(ODF)」で文書を表現しますので,PostScriptのようにXMLも「裏方(うらかた)」に回っていますし,無償で入手できることから,誰もがXML活用へ進める,と思われがちです。OpenOfficeの入手とインストールについては「付録 OpenOfficeの入手とインストール」を参照してください。

しかし,OpenOfficeを使っているだけでは,XMLを活用していると言えません。と言うのも,ODFは数あるXMLボキャブラリの一つに過ぎないからです。XMLボキャブラリは,ユーザーの必要に応じて限りなく作り出されるものであり,ODFなどの標準があったとしても,それがすべてを包含できるわけではありません。HTMLにしても同じことです。例えば,Adobe Dreamweaverを使うと,HTMLを意識することなくウェブ文書を制作できます。しかし,HTMLも数あるXMLボキャブラリの一つに過ぎません。まして,ユーザーがOpenOffice文書から任意のXMLデータを抽出したり,別のXMLデータと併合したりするには,XMLボキャブラリ(スキーマ)に合わせてフィルター(XSLスタイルシート)を用意しなければなりません。それは小学生やご隠居にできることではありません。

1.3 源流指向

現在,XMLは明らかに「表方(おもてかた)」にあって,その活用は専門家の手に委ねられています。今まで当たり前と思われている,そうしたパラダイムを転回して,誰もがXMLボキャブラリを簡単に扱え,情報を管理できるようになるような仕組み作りへ向かうべきです。私は,誰もが簡単に利用できるOpenOfficeでそうした仕組みを実現してみよう,と考えました。もちろん,その仕組みが実現したからと言っても,XML対応の専用アプリケーション開発が無くなるわけではありません。私は,XML活用については情報が最初に生み出される場面(データ発生時点)を重視しています。言わば「源流指向」です。

一般に専門家がスキーマを作るというのは,様々に関連する情報がよく整理されるという利点はあるでしょうが,スキーマは,情報が最初に生み出される場面においてその情報を捉えた人によって決定される,と考えたほうが理にかなっていまし,その人にとっても有益なことだと思われます。現在,XMLを知らなくても扱えるXML対応アプリケーションが少ないので,「源流」でのデータのXML化には余り利点はないかもしれませんが,XML対応アプリケーションはこれから充実していく傾向にありますので,「源流」からXML化を始めることが大事だと考えます。

2 スキーマをどのように推定するのか

さて,OpenOfficeにおいてXML文書インスタンスを入出力(あるいは輸出入)を自動的に行なうには,先ず,その対象となる文書のXMLボキャブラリ(スキーマ)がどのようなものであるか分からなければなりません。しかし,そのスキーマは何から推定できるでしょうか。一つの仮定として「見えている内容に対するスタイルの名前がスキーマに対応するという枠組み」が考えられます。そのスタイルは,スタイル名さえ異なれば,同じ書体や文字サイズ,同じ表示色であっても構いません。肝心なことは,内容に対するスタイル名がその文書においてユニークであることです。

OpenOfficeにおけるスタイルには次のような種類があります。これらはユーザーが任意な名前で登録し,見えている内容に対して指定できます。

どのような文書でも,そのような枠組みでスキーマを推定できるかを以下のケーススタディで見てみましょう。

2.1 名簿の例

例えば,スプレッドシート文書で図2.1-1のような「名簿」を表したとします。XMLの概念では,「名前」と「住所」は要素名であり,「桃 太郎」や「鬼が島」はその要素の内容となります。さらに,XMLの背景にあるオブジェクトの概念では,要素名は「クラス名」に等しく,要素の内容は「インスタンス」と等しいものです。言い換えれば,要素名は「集合の名前」に等しく,要素の内容は「集合の元」と等しいものです。このスプレッドシートでは,それらの違いを強調するために,「名前」クラスに属すインスタンスと,「住所」クラスに属すインスタンスをそれぞれ別の背景色で表示しています。最初のタイトル行はクラスであり,2行目以降はデータ行(=インスタンス)です。XPath式で表すと,「桃 太郎」は「名簿/表の行[1]/名前」,「箱根足柄山」は「名簿/表の行[2]/住所」となります。私たちは,そうしたスタイルを付けなくても,タイトル行の各名前はクラスの名前,データ行はそのクラスごとのインスタンスであることを(用語はともかく)経験的に知っており,A列は「名前」のインスタンス,B列は「住所」のインスタンスとして内容を入力しています。

▼図2.1-1 名簿
 AB
1名前住所
2金 太郎箱根足柄山
3桃 太郎瀬戸内海鬼が島
4浦島 太郎何処海之底

 ここで,スタイル名は表2.1-2のように設定されたものとします。

▼表2.1-2 名簿のスタイル名
スタイル名スタイルの種類
名簿ページ・スタイル
名前セル・スタイル
住所セル・スタイル

この文書からSGML形式のスキーマ(DTD)は図2.1-3のように推定されます。ここで,「表の行」は行を意味する要素名の予約語とします。

▼図2.1-3 名簿のスキーマ(DTD)
<!DOCTYPE  名簿 [
<!ELEMENT  名簿  (表の行+) >
<!ELEMENT  行    (名前,住所) >
<!ELEMENT  名前  (#PCDATA) >
<!ELEMENT  住所  (#PCDATA) >
]>

2.2 受注伝票の例

例えば,テキスト文書で図2.2-1のような「受注伝票」を表したとします。こうした罫線で囲んだ定形様式のテキスト文書では,「得意先」や「数量」といった見出し欄(=クラス)とその記入欄(=インスタンス)に分かれます。私たちは,スタイルを付けなくても,見出し欄はクラスの名前,記入欄はそのクラスのインスタンスであることを経験的に知っており,見出し欄に対応する記入欄に内容を入力しています。なお,ここでは,あえて記入欄におけるスタイルの違いを強調するためにそれぞれ別の背景色で表示しています。なお,OpenOfficeでは,こうしたテキスト文書はスプレッドシートが埋め込まれた形になります。

▼図2.2-1 受注伝票
得意先受注日
八百八商店2008-02-06
商品種類数量単価金額
にんじん 野菜 30 100 3,000
こまつな 野菜 50 200 10,000
         

 ここで,スタイル名は表2.2-2のように設定されたものとします。

▼表2.2-2 受注伝票のスタイル名
スタイル名スタイルの種類
受注伝票ページ・スタイル
得意先セル・スタイル
受注日セル・スタイル
商品セル・スタイル
種類セル・スタイル
数量セル・スタイル
単価セル・スタイル
金額セル・スタイル

この文書からSGML形式のスキーマは図2.2-3のように推定されます。ここで,「表の行」は行を意味する要素名とします。

▼図2.2-3 受注伝票のスキーマ(DTD)
<!DOCTYPE  受注伝票 [
<!ELEMENT  受注伝票  (得意先,受注日,表の行+) >
<!ELEMENT  表の行    (商品,種類,数量,単価,金額) >
<!ELEMENT  得意先    (#PCDATA) >
<!ELEMENT  受注日    (#PCDATA) >
<!ELEMENT  商品      (#PCDATA) >
<!ELEMENT  種類      (#PCDATA) >
<!ELEMENT  数量      (#PCDATA) >
<!ELEMENT  単価      (#PCDATA) >
<!ELEMENT  金額      (#PCDATA) >
]>

また,この文書からSGML形式のスキーマは図2.2-4のようにも推定されます。ここで,「表1の行」「表2の行」は行を意味する要素名とします。

▼図2.2-4 受注伝票のスキーマ(DTD)
<!DOCTYPE  受注伝票 [
<!ELEMENT  受注伝票  (表1の行,表2の行+) >
<!ELEMENT  表1の行   (得意先,受注日) >
<!ELEMENT  得意先    (#PCDATA) >
<!ELEMENT  受注日    (#PCDATA) >
<!ELEMENT  表2の行   (商品,種類,数量,単価,金額) >
<!ELEMENT  商品      (#PCDATA) >
<!ELEMENT  種類      (#PCDATA) >
<!ELEMENT  数量      (#PCDATA) >
<!ELEMENT  単価      (#PCDATA) >
<!ELEMENT  金額      (#PCDATA) >
]>

2.3 名刺の例

例えば,テキスト文書で図2.3-1のような「名刺」を表したとします。このような文章主体のテキスト文書では,クラスが明示されていません。見えている(要素の)内容(=インスタンス)を書式付けしているスタイルをクラスとみなし,そのスタイルの名前をクラス名(要素名)とします。ここではスタイルの違いを強調するためにそれぞれ別の色で表示しています。

▼図2.3-1 名刺

桃 太郎

〒89
 瀬戸内海鬼が島

電話 123-4567
momotaro@onigashima.com/

 ここで,スタイル名は表2.3-2のように設定されたものとします。

▼表2.3-2 名刺のスタイル名
スタイル名スタイルの種類
名刺ページ・スタイル
ロゴフレーム・スタイル
名前パラグラフ・スタイル
住所パラグラフ・スタイル
住所の郵便番号キャラクター・スタイル
電話パラグラフ・スタイル
メールパラグラフ・スタイル

この文書からSGML形式のスキーマ(DTD)は図2.3-3のように推定されます。ここで,「画像」は画像データのURLを意味する属性名とします。

▼図2.3-3 名刺のスキーマ(DTD)
<!DOCTYPE  名刺 [
<!ELEMENT  名刺    (ロゴ,名前,住所,電話,メール) >
<!ELEMENT  ロゴ    EMPTY >
<!ATTLIST  ロゴ  画像  CDATA #REQUIRED >
<!ELEMENT  名前    (#PCDATA) >
<!ELEMENT  住所    (#PCDATA) >
<!ATTLIST  住所  郵便番号  CDATA #REQUIRED >
<!ELEMENT  電話    (#PCDATA) >
<!ELEMENT  メール  (#PCDATA) >
]>

2.4 属性を意味するスタイル名

属性を意味するスタイル名は,例えば,図2.4-1から図2.4-2のように推定されます。

見えている内容(=インスタンス)がある要素の属性である場合は,スタイル名は「要素名属性名」という形で表現します。例えば「住所ノ郵便番号」というスタイル名であれば,要素名は「住所」となり,属性名は「郵便番号」となります。この場合,要素名のスタイル名は定義されているものとし,見えている内容は属性値と解釈します。

▼図2.4-1 スタイル名の例
 ABCD
1名前ふりがな住所郵便番号
2金 太郎きん たろう箱根足柄山123
3桃 太郎もも たろう瀬戸内海鬼が島456
4浦島 太郎うらしま たろう何処海之底789
5    
顧客名簿
 
名前

名前ノふりがな

住所

住所ノ郵便番号
▼図2.4-2 図2.4-1のスタイル名から推定されるスキーマ(DTD)
<!ELEMENT  名前  (#PCDATA) >
<!ATTLIST  名前  ふりがな CDATA #REQUIRED >
<!ELEMENT  住所  (#PCDATA) >
<!ATTLIST  住所  郵便番号 CDATA #REQUIRED >

2.5 ユーザー定義のスタイル名

OpenOfficeではシステムがあらかじめ用意したスタイルが数多くありますが,この仕組みでは,ユーザーが独自に定義したスタイル名をスキーマの推定に用いることにします。

OpenOfficeがあらかじめ用意したスタイル名は,その表示と実際は異なり,「見出し」が「Heading」,「結果」が「Result」,「標準」が「Default」のようになっていますので,名前付けでは注意しなければなりません。BeyondXMLの処理は,ODFを対象とするXSL変換なので,名付けられたスタイル名が「ユーザー定義のスタイル名」であるどうかを判別できません。そうしたことから,スタイル名として「ユーザー定義のスタイル名」を指定することを勧めるわけです。

ユーザー定義のスタイル名は,漢字,平仮名,カタカナ(半角を除く),英数字,下線,ハイフンから構成されるものとし,先頭の文字は数字であってはなりません。スタイル名は,要素名や属性名になりますので,下線とハイフン以外の特殊記号(例えば,コロン,セミコロン,コンマ,ピリオド,アットマークなど)を含めることはできません。

図2.5-1に示すスタイル名は,BeyondXMLとして予約されたもので,その目的外には使用できません。

▼図2.5-1 予約されたスタイル名
スタイルの意味日本語表示英語表示説明
タイトル行のスタイル**タイトル****TITLE**インポート時にタイトル行のスタイルを表します。
表の行の要素名Nの行=要素名RowOfSheetN=要素名N番目に出現する表の行の要素名を表します。
表の要素名N=要素名SheetN=要素名N番目に出現する表の要素名を表します。Writer文書の定型帳票の場合に利用できます。
属性名要素名属性名属性名-of-要素名要素名属性名を表します。
注1:属性名というスタイル名が付いたデータは存在しなければなりません。
注2:「ノ」は格助詞として働きます。

2.6 推定されるデータ型

スキーマの推定において,データの内容をサンプルとして表2.6-1に示すデータ型が推定されます。このデータ型は,BeyondXMLによるエクスポートまたはインポート時の内容の処理に影響します。現在,BeyondXML for Calcは,サンプル数を50としていますが,BeyondXML for Tableでは,反復するデータであっても最初のデータだけをサンプルとします。したがって,内容によっては,期待外れのスキーマが生じるかもしれません。

▼表2.6-1 データ型
データ型内容エクスポートされる内容インポート時の内容
decimal固定小数点表示の10進数コンマを除いた数値
内容が空の場合は「0000」
右揃え,コンマを除いた数値
dateYYYY-MM-DD形式または
YYYY/MM/DD形式の日付
YYYY-MM-DD形式の日付
内容が空の場合は「0001-01-01」
左揃え,日付
anyURIホームページ・アドレスまたは
メール・アドレス
そのままの文字列左揃え,文字列
string上記以外の文字列そのままの文字列左揃え,文字列

3 BeyondXML for Calc

BeyondXML for Calcは,表3-1のような機能を実現します。このツールは,OpenOfficeのCalc文書のフィルターとして働きます。BeyondXML for Calcを使うことによって,XMLの知識が全くないユーザーでも,Calc文書からRelaxNG形式のスキーマが作れるようになり,それに合わせたXML文書インスタンスを入出力できるようになります。

▼表3-1 BeyondXML for Calcの機能と設定条件
BeyondXML for Calc機 能設 定
フィルター名アプリケーションファイルの
種類名前
ファイル
拡張子
変換
BeyondXML-Calc-to-XMLCalc文書 → XML文書Calc-to-XMLOpenOffice.org CalcCalc-to-XMLxmlエクスポート
BeyondXML-XML-to-CalcXML文書 → Calc文書XML-to-CalcOpenOffice.org CalcXML-to-Calcxmlインポート
BeyondXML-Calc-to-RNGCalc文書 → RelaxNGスキーマCalc-to-RNGOpenOffice.org CalcCalc-to-RNGrngエクスポート
BeyondXML-for-Calc共通ライブラリ     

BeyondXML for Calcの設定については「付録 XMLフィルターの設定方法」を参照してください。

BeyondXML for Calcの処理対象となるCalc文書は,図3-2のような形のスプレッドシートとします。そうでない形のスプレッドシートは,処理対象とはなりません。図3-2において,異なる背景色で強調されているデータ行(セル)には,異なるスタイル名が付いています。もちろん実際の書式は任意ですが,背景色を使うことで入力時の誤りが防げます。

▼図3-2 Calc文書
 ABCD  
1名前会社名住所      ← タイトル行 
2金 太郎金時茶屋箱根足柄山     ← データ行 
3桃 太郎 瀬戸内海鬼が島     ← データ行 
4浦島 太郎竜宮何処海之底     ← データ行 
5        ← データ行 
顧客名簿 ← 表の名前 
 
名前

会社名

住所

なし

スタイル名

図3-3は,表の名前として「顧客名簿」,データ行の列の名前(スタイル名)として「名前」(黄緑色),「会社名」(桃色),「住所」(黄色)が付いていることを表しています。D列目より右方向,5行目より下方向はすべて空のセルからなっています。

▼図3-3 スタイル名が正しく付けられたCalc文書の例(処理できる例)
 ABCD
1名前会社名住所        
2金 太郎金時茶屋箱根足柄山     
3桃 太郎 瀬戸内海鬼が島     
4浦島 太郎竜宮何処海之底     
5        
顧客名簿

図3-4は,スタイル名が正しく付けられていないCalc文書の例を表しています。A3には「名前」でなく「会社名」のスタイル名が付いています。B3には「会社名」でなく「名前」のスタイル名が付いています。B4には「会社名」のスタイル名が付いていません。BeyondXML for Calcは,こうしたCalc文書を正しく処理できません。

▼図3-4 スタイル名が正しく付けられていないCalc文書の例(処理できない例)
 ABC
1名前会社名住所
2金 太郎金時茶屋箱根足柄山
3桃 太郎 瀬戸内海鬼が島
4浦島 太郎竜宮何処海之底
5   
顧客名簿

図3-5は,空白行のあるCalc文書の例を表しています。B列目はすべてスタイル名が付いていません。また,3行目はすべて空のセルからなっていますが,BeyondXML for Calcは,こうしたCalc文書を正しく処理できます。

▼図3-5 空白行のあるCalc文書の例(処理できる例)
 ABCD
1名前 会社名住所
2金 太郎     金時茶屋箱根足柄山
3        
4桃 太郎      瀬戸内海鬼が島
5浦島 太郎     竜宮何処海之底
6        
顧客名簿

図3-6は,一つの表に複数の表を含むCalc文書の例を表しています。それぞれにスタイル名は付いていますが,1〜5行の表と6〜8行の表は,その構成要素が異なります。BeyondXML for Calcは,こうしたCalc文書を正しく処理できません。

▼図3-6 一つの表に複数の表を含むCalc文書の例(処理できない例)
 ABC
1名前会社名住所
2金 太郎金時茶屋箱根足柄山
3桃 太郎 瀬戸内海鬼が島
4浦島 太郎竜宮何処海之底
5   
6名前電話番号 
7力 太郎12-3456 
8かぐや姫78-9012 
8   
顧客名簿

BeyondXML-Calc-to-RNGを使うと,RelaxNG形式のスキーマが得られます。

表の名前が一つの表を指す要素名となり,データ行の列のスタイル名が要素名となります。

表の名前が指定されていても内容を持たない場合,その要素は空要素としてもエクスポートされません。

3.1 BeyondXML-Calc-to-XML

BeyondXML-Calc-to-XMLは,ユーザーが任意に作ったCalc文書をサンプルとしてスキーマ定義を自動的に推定し,そのスキーマに合わせてCalc文書のデータをXML文書インスタンスとして自動的に出力(エクスポート)します。

図3.1-1に示すCalc文書があったとします。「ファイル」メニューから「エクスポート」アイテムを選ぶと,ダイアログが表示されます。ファイル書式として「BeyondXML-Calc-to-XML」を選んでエクスポートすると,図3.1-2に示すようなXML文書インスタンスが得られます。

▼図3.1-1 Calc文書の例
▼図3.1-2 Calc文書からエクスポートされたXML文書インスタンス 「サンプル名簿.xml」
<?xml version="1.0" encoding="UTF-8"?>
<!--
=================================
   BeyondXML for Calc
     version 0.8
 (C)2008 kisi-kazutaka@nifty.com
=================================

文書情報:
  作成者:
  起草日時:2008-04-03T10:17:12
  編集日時:2008-04-29T18:14:39
  編集回数:15
  編集周期:PT11H27M54S
  処理系:NeoOffice/2.2$Unix OpenOffice.org_project/
-->
<名簿>
  <名簿3年A組>
    <徴収記録>
      <名前 ふりがな="" 姓="か">かぐや</名前>
      <学級費>2000</学級費>
      <給食費>1000</給食費>
      <備考/>
    </徴収記録>
    <徴収記録>
      <名前 ふりがな="うりこ" 姓="うり">瓜子</名前>
      <学級費>2000</学級費>
      <給食費>50</給食費>
      <備考/>
    </徴収記録>
    <徴収記録>
      <名前 ふりがな="ちから たろう" 姓="ちから">力 太郎</名前>
      <学級費>0000</学級費>
      <給食費>500</給食費>
      <備考>学級費は来月納入</備考>
    </徴収記録>
  </名簿3年A組>
  <名簿3年B組>
    <個人情報>
      <名前 ふりがな="きん たろう">金 太郎</名前>
      <生年月日>1996-01-01</生年月日>
      <年齢>12</年齢>
      <住所 郵便番号="123">箱根足柄山</住所>
      <電話番号>123-4567</電話番号>
      <メール>kintoro@kintoki.com</メール>
    </個人情報>
    <個人情報>
      <名前 ふりがな="もも たろう">桃 太郎</名前>
      <生年月日>0001-01-01</生年月日>
      <年齢>0000</年齢>
      <住所 郵便番号="456-789">瀬戸内海鬼が島</住所>
      <電話番号>98-7654</電話番号>
      <メール/>
    </個人情報>
    <個人情報>
      <名前 ふりがな="うらしま たろう">浦島 太郎</名前>
      <生年月日>1996-08-28</生年月日>
      <年齢>12</年齢>
      <住所 郵便番号="890">何処海之底</住所>
      <電話番号>12345</電話番号>
      <メール>urashima@ryugu.co.jp</メール>
    </個人情報>
  </名簿3年B組>
</名簿>

3.2 BeyondXML-XML-to-Calc

BeyondXML-Calc-to-XMLは,BeyondXML-Calc-to-XMLによって出力(エクスポート)されたXML文書インスタンスをCalc文書のデータとして自動的に入力(インポート)します。インポートは「ファイル」メニューの「開く」アイテムで指定します。これは可逆的な入出力のようになりますが,エクスポートされたXML文書インスタンスからは,Calc文書のスタイル情報が消えてしまいますので,再びインポートしてもデータは保持されていますが,そのスタイルはもとのようにはなりません。

BeyondXML-Calc-to-XMLは,まったく任意のXML文書インスタンスをCalc文書へ入力(インポート)することはできません。

3.3 BeyondXML-Calc-to-RNG

BeyondXML-Calc-to-RNGは,ユーザーが任意に作ったCalc文書をサンプルとしてスキーマを自動的に推定し,RelaxNG形式のスキーマとして自動的に出力(エクスポート)します。

図3.1-1に示すCalc文書をBeyondXML-Calc-to-RNGを使ってエクスポートすると,図3.3-1に示すようなRelaxNG形式のスキーマが得られます。

▼図3.3-1 Calc文書からエクスポートされたRelaxNG形式のスキーマ 「サンプル名簿.rng」
<?xml version="1.0" encoding="UTF-8"?>
<!--
=================================
   BeyondXML for Calc
     version 0.8
 (C)2008 kisi-kazutaka@nifty.com
=================================

文書情報:
  作成者:
  起草日時:2008-04-03T10:17:12
  編集日時:2008-04-29T18:14:39
  編集回数:15
  編集周期:PT11H27M54S
  処理系:NeoOffice/2.2$Unix OpenOffice.org_project/
-->
<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" 
         xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="名簿">
      <element name="名簿3年A組">
        <oneOrMore>
          <element name="徴収記録">
            <optional>
              <ref name="名前"/>
            </optional>
            <optional>
              <ref name="学級費"/>
            </optional>
            <optional>
              <ref name="給食費"/>
            </optional>
            <optional>
              <ref name="備考"/>
            </optional>
          </element>
        </oneOrMore>
      </element>
      <element name="名簿3年B組">
        <oneOrMore>
          <element name="個人情報">
            <optional>
              <ref name="名前"/>
            </optional>
            <optional>
              <ref name="生年月日"/>
            </optional>
            <optional>
              <ref name="年齢"/>
            </optional>
            <optional>
              <ref name="住所"/>
            </optional>
            <optional>
              <ref name="電話番号"/>
            </optional>
            <optional>
              <ref name="メール"/>
            </optional>
          </element>
        </oneOrMore>
      </element>
    </element>
  </start>
  <define name="学級費">
    <element name="学級費"><data type="decimal"/></element>
  </define>
  <define name="給食費">
    <element name="給食費"><data type="decimal"/></element>
  </define>
  <define name="備考">
    <element name="備考"><data type="string"/></element>
  </define>
  <define name="名前">
    <element name="名前">
      <optional>
        <attribute name="姓"><data type="string"/></attribute>
      </optional>
      <optional>
        <attribute name="ふりがな"><data type="string"/></attribute>
      </optional>
      <data type="string"/>
    </element>
  </define>
  <define name="生年月日">
    <element name="生年月日"><data type="date"/></element>
  </define>
  <define name="年齢">
    <element name="年齢"><data type="decimal"/></element>
  </define>
  <define name="住所">
    <element name="住所">
      <optional>
        <attribute name="郵便番号"><data type="string"/></attribute>
      </optional>
      <data type="string"/>
    </element>
  </define>
  <define name="電話番号">
    <element name="電話番号"><data type="string"/></element>
  </define>
  <define name="メール">
    <element name="メール"><data type="anyURI"/></element>
  </define>
  </grammar>

3.4 BeyondXML-for-Calc

BeyondXML-for-Calc.xslは,BeyondXML-Calc-to-XML.xslBeyondXML-XML-to-Calc.xslBeyondXML-Calc-to-RNG.xslの各フィルターに共通の機能を集めたライブラリで,それらと同じフォルダーに置きます。このフィルターの設定は不要です。

3.5 BeyondXML for Calcの問題点

BeyondXML-Calc-to-XMLによってインポートしたXML文書インスタンスの最上位要素(Calc文書全体を指す要素)の名前がページの名前になるようにしてありますが,現実にはそうなりません。これは現在のOpenOfficeの不具合のようです。


4 BeyondXML for Table

BeyondXML for Tableは,表4-1のような機能を実現します。このツールは,OpenOfficeのWriter文書のフィルターとして働きます。BeyondXML for Tableを使うことによって,XMLの知識が全くないユーザーでも,Writer文書からRelaxNG形式のスキーマが作れるようになり,それに合わせたXML文書インスタンスを入出力できるようになります。

▼表4-1 BeyondXML for Tableの機能と設定条件
BeyondXML for Table機 能設 定
フィルター名アプリケーションファイルの
種類名前
ファイル
拡張子
変換
BeyondXML-Table-to-XMLWriter文書 → XML文書Table-to-XMLOpenOffice.org WriterTable-to-XMLxmlエクスポート
BeyondXML-Table-to-XSLWriter文書 → フィルターTable-to-XSLOpenOffice.org WriterTable-to-XSLxslエクスポート
BeyondXML-Table-to-RNGWriter文書 → RelaxNGスキーマTable-to-RNGOpenOffice.org WriterTable-to-RNGrngエクスポート
BeyondXML-for-Table共通ライブラリ     

BeyondXML for Tableの設定については「付録 XMLフィルターの設定方法」を参照してください。

BeyondXML for Tableの処理対象となるWriter文書は,図4-2のような定型帳票の形からなる一つの表とします。そうでない形の表は,処理対象とはなりません。図4-2において,異なる背景色で強調されている記入欄(セル)には,異なるスタイル名が付いています。もちろん実際の書式は任意ですが,異なる背景色で区別することによって入力時の誤りが防げます。見出し欄(セル)には,「標準」というスタイル名が付いています。これはスプレッドシートのタイトル行と同様にデータではありません。また,このページには「伝票」という名前が付いています(図4-2の底部に示します)。各セルに付けたスタイル名と,セルの内容から推定されるデータ型を表4-3に示します。

▼図4-2 Writer文書
 
 得意先受注日 
 八百八商店2008-02-06  
 商品種類数量単価金額  
 にんじん野菜301003,000  
 こまつな野菜5020010,000  
        
 商品配送先住所メールアドレス  
 大根山田さん常盤町yamada@tokiwa-tyou.com  
       
 備考  
 薩摩芋の入荷は大幅遅れ  
 
伝票 
▼表4-3 図4-2のWriter文書に付けられたスタイル名
スタイル名推定されるデータ型
標準(見出し欄を示す)
得意先string
受注日date
商品string
種類string
数量decimal
単価decimal
金額decimal
配送先string
住所string
メールアドレスanyURI
備考string

見出し欄と記入欄の一対を一つの表とみなすことによってCalc文書との相似が得られます。図4-4にそれを示します。このことは,BeyondXML for TableBeyondXML for Calcの相互運用が可能であることを意味します。例えば,Writer文書からエクスポートしたXML文書をCalc文書にインポートできます。あるいは,Calc文書からエクスポートしたXML文書をWriter文書にインポートできます。

▼図4-4 図4-2のWriter文書の表をCalc文書として見た場合の相似
 
 A   B  
1得意先受注日 
2八百八商店2008-02-06  
表1 
 
 ABCDE  
 商品種類数量単価金額  
1にんじん野菜301003,000  
2こまつな野菜5020010,000  
3       
表2 
 
 ABCD   
 商品配送先住所メールアドレス  
1大根山田さん常盤町yamada@tokiwa-tyou.com  
2      
表3 
 
 A      
1備考  
2薩摩芋の入荷は大幅遅れ  
表4 
 
伝票 

つまり,定型帳票の形を表す一つの表は,見出し欄と記入欄の一対ごとの表に分解されます。BeyondXML for Tableでは,BeyondXML for Calcの場合と同様に,次のように「表の名前」と「行の名前」を設定できます。

4.1 BeyondXML-Table-to-XML

BeyondXML-Table-to-XMLは,ユーザーが任意に作ったWriter文書をサンプルとしてスキーマ定義を自動的に推定し,そのスキーマに合わせてWriter文書のデータをXML文書インスタンスとして自動的に出力(エクスポート)します。

図4.1-1に示すWriter文書があったとします。「ファイル」メニューから「エクスポート」アイテムを選ぶと,ダイアログが表示されます。ファイル書式として「BeyondXML-Table-to-XML」を選んでエクスポートすると,図4.1-2に示すようなXML文書インスタンスが得られます。

▼図4.1-1 Writer文書の例
▼図4.1-2 Writer文書からエクスポートされたXML文書インスタンス 「サンプル伝票.xml」
<?xml version="1.0" encoding="UTF-8"?>
<!--
=================================
   BeyondXML for Table
     version 0.7
 (C)2008 kisi-kazutaka@nifty.com
=================================

文書情報:
  作成者:kazutaka kisi
  起草日時:2008-03-26T11:12:17
  編集日時:2008-04-08T17:06:46
  編集回数:140
  編集周期:P4DT5H41M40S
  処理系:NeoOffice/2.2$Unix OpenOffice.org_project/
-->

<伝票>
  <顧客欄>
    <顧客明細>
      <得意先>八百八商店</得意先>
      <受注日>2008-02-06</受注日>
    </顧客明細>
  </顧客欄>
  <受注欄>
    <受注明細>
      <商品>人参</商品>
      <種類>野菜</種類>
      <数量>30</数量>
      <単価>100</単価>
      <金額>3000</金額>
    </受注明細>
    <受注明細>
      <商品>小松菜</商品>
      <種類>野菜</種類>
      <数量>50</数量>
      <単価>200</単価>
      <金額>10000</金額>
    </受注明細>
  </受注欄>
  <配送欄>
    <配送明細>
      <商品>大根</商品>
      <配送先>山田さん</配送先>
      <住所>常盤町</住所>
      <メールアドレス>yamada@tokiwa-mati.com</メールアドレス>
    </配送明細>
  </配送欄>
  <備考欄>
    <備考明細>
      <備考>薩摩芋の入荷は大幅遅れ</備考>
    </備考明細>
  </備考欄>
</伝票>

4.2 BeyondXML-Table-to-XSL(開発中)

BeyondXML-Table-to-XSLは,BeyondXML-Table-to-XMLによって出力(エクスポート)されたXML文書インスタンスをWriter文書に再び入力(インポート)するフィルターを自動的に生成します。そのインポート・フィルターは,インポートしたXML文書インスタンスに現在のWriter文書のスタイル情報を与えるように組み立てられますので,別の内容を持つXML文書インスタンスをインポートして組版できる専用のフィルターになります。言い換えれば,このような専用のフィルターを書こうとするならば,先ずスキーマを理解し,次に結果のWriter文書のスタイルを想定し,その対応に基づいてXSL変換の処理を考えながら書いていくことになるでしょう。それはODFについての知識とXSL変換についての十分な経験を持たなければ,到底できない作業です。BeyondXML-Table-to-XSLは,その作業を自動的に行います。

BeyondXML-Table-to-XSLBeyondXML-Table-to-XML,自動的に生成される専用フィルターの関連と利用の手順を図4.2-1に示します。

  1. Writer文書においてレイアウト設計を行います。記入欄にユーザー定義のスタイル名を付けて,そのスタイルの条件を設定します。
  2. そのWriter文書からBeyondXML-Table-to-XSLによってインポート・フィルターを自動的に生成します。例えば,そのインポート・フィルターに任意な文字列で「見積XML-to-見積書.xsl」のような名前をつけます。
  3. そのWriter文書をテンプレートとして保存します。
  4. そのテンプレートとしてのWriter文書に基づいてさまざまなインスタンスを作り,それをXML文書インスタンスとして出力(エクスポート)します。それらは別の処理へ回されるかもしれません。
  5. (別の処理から回ってきたかもしれない)同じスキーマに基づくXML文書インスタンスを前述のインポート・フィルター(例えば,「見積XML-to-見積書.xsl」)を介してWriter文書に入力(インポート)すると,自動的に組版されます。

ここで,こうした流れは「ODFによるデータ交換の流れと同じではないか」という疑問が生じるかもしれません。なるほど,Writer文書を別の処理へ回したり,別の処理から受け取ったりする流れは実現できるでしょうが,ここでは,ODFのボキャブラリではなく,利用者独自のボキャブラリで表したXML文書インスタンスを扱うことに重点を置いています。

▼図4.2-1 BeyondXML-Table-to-XSLBeyondXML-Table-to-XML,自動的に生成される専用フィルターの関連と利用の手順

            設計        エクスポート
           
  現在のWriter文書 ──→ BeyondXML-Table-to-XML ──→ 現在の内容を持つXML文書インスタンス ─→ 別の処理へ
           
      │ │
      │ └───→ BeyondXML-Table-to-XSL ──→ あなたのインポート・フィルター 
      │
      ↓
             
  テンプレートとしての             
    Writer文書    ──→ 別のWriter文書 
                         


                      インポート
            組版
  新しいWriter文書 ←── あなたのインポート・フィルター ←── 別の内容を持つXML文書インスタンス ←─ 別の処理から
           

4.3 BeyondXML-Table-to-RNG

BeyondXML-Table-to-RNGは,ユーザーが任意に作ったWriter文書をサンプルとしてスキーマを自動的に推定し,RelaxNG形式のスキーマとして自動的に出力(エクスポート)します。

図4.1-1に示すWriter文書をBeyondXML-Table-to-RNGを使ってエクスポートすると,図4.3-1に示すようなRelaxNG形式のスキーマが得られます。

▼図4.3-1 Writer文書からエクスポートされたRelaxNG形式のスキーマ 「サンプル伝票.rng」
<?xml version="1.0" encoding="UTF-8"?>
<!--
=================================
   BeyondXML for Table
     version 0.7
 (C)2008 kisi-kazutaka@nifty.com
=================================

文書情報:
  作成者:kazutaka kisi
  起草日時:2008-03-26T11:12:17
  編集日時:2008-04-08T17:06:56
  編集回数:140
  編集周期:P4DT5H41M40S
  処理系:NeoOffice/2.2$Unix OpenOffice.org_project/
-->

<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="伝票">
      <element name="顧客欄">
        <element name="顧客明細">
          <ref name="得意先"/>
          <ref name="受注日"/>
        </element>
      </element>
      <element name="受注欄">
        <oneOrMore>
          <element name="受注明細">
            <ref name="商品"/>
            <ref name="種類"/>
            <ref name="数量"/>
            <ref name="単価"/>
            <ref name="金額"/>
          </element>
        </oneOrMore>
      </element>
      <element name="配送欄">
        <oneOrMore>
          <element name="配送明細">
            <ref name="商品"/>
            <ref name="配送先"/>
            <ref name="住所"/>
            <ref name="メールアドレス"/>
          </element>
        </oneOrMore>
      </element>
      <element name="備考欄">
        <element name="備考明細">
          <ref name="備考"/>
        </element>
      </element>
    </element>
  </start>
  <define name="得意先">
    <element name="得意先"><data type="string"/></element>
  </define>
  <define name="受注日">
    <element name="受注日"><data type="date"/></element>
  </define>
  <define name="種類">
    <element name="種類"><data type="string"/></element>
  </define>
  <define name="数量">
    <element name="数量"><data type="decimal"/></element>
  </define>
  <define name="単価">
    <element name="単価"><data type="decimal"/></element>
  </define>
  <define name="金額">
    <element name="金額"><data type="decimal"/></element>
  </define>
  <define name="商品">
    <element name="商品"><data type="string"/></element>
  </define>
  <define name="配送先">
    <element name="配送先"><data type="string"/></element>
  </define>
  <define name="住所">
    <element name="住所"><data type="string"/></element>
  </define>
  <define name="メールアドレス">
    <element name="メールアドレス"><data type="anyURI"/></element>
  </define>
  <define name="備考">
    <element name="備考"><data type="string"/></element>
  </define>
</grammar>

4.4 BeyondXML-for-Table

BeyondXML-for-Table.xslは,BeyondXML-Table-to-XML.xslBeyondXML-Table-to-XSL.xslBeyondXML-Table-to-RNG.xslの各フィルターに共通の機能を集めたライブラリで,それらと同じフォルダーに置きます。このフィルターの設定は不要です。

付録1 OpenOfficeの入手とインストール

OpenOfficeをインストールする実行環境に合わせて,表A1-1の入手先サイトからダウンロードしてください。必要に応じて最新のパッチもダウンロードしてください。

▼表A1-1 OpenOfficeの入手先
実行環境OpenOfficeの種類入手先サイト
Windows 2000/XP/VistaOpenOfficeオープンオフィスの入り口
MacOS XNeoOfficeNeoOffice

参考までに,私の実行環境は,表A1-2のとおりです。

▼表A1-2 私の実行環境
マシンの種類OSの種類OpenOfficeの種類
IBM ThinkPad A20m
512MB RAM
Microsoft Windows XP Professional Version 2002 Service Pack2OpenOffice.org 2.3.0
日本語版
Apple MacBook Pro
1.5GM RAM
Mac OS X バージョン10.5.2NeoOffice 2.2.3 Patch 2
言語パックの日本語のパッチを当ててあります。

OpenOffice(またはNeoOffice)のインストールは,簡単な操作です。ダウンロードしたパッケージを任意の場所に置いてダブルクリックし,そのインストーラーを実行します。その後は,表示されるガイドにしたがって進めるだけです。パッチのパッケージのインストールはその後行います。

付録2 XMLフィルターの設定方法

先ず,設定するXMLフィルターをディスクの任意の場所に置きます。次に「ツール」メニューの中から「XMLフィルタ設定」アイテムを選ぶと,図A2-1のダイアログが表示されます。図A2-1には,あらかじめインストールされたフィルターが表示されますが,その種類は,OpenOffice(またはNeoOffice)のバージョンによって異なります。

▼図A2-1 新しいXMLフィルターの設定

図A2-1の「新規作成」ボタンを押すと,図A2-2のダイアログが表示されます。

▼図A2-2 XMLフィルターの設定

このダイアログの各記入欄に必要な内容を図A2-3のように入力します。

▼図A2-3 全般の設定(BeyondXML-Calc-to-XMLの例)

各記入欄の意味は,表A2-4のとおりです。

▼表A2-4 変換の設定
内容
フィルタ名フィルターの名前を任意の文字列で指定します。
アプリケーションこのフィルターがOpenOfficeのどのアプリケーションで働くかをポップアップ・メニューの中から選びます。
ファイルの種類名前インポート(開く)やエクスポートのダイアログで示される「ファイルの種類」を任意の文字列で指定します。
ファイル拡張子インポートまたはエクスポートする際のファイルの拡張子を任意の文字列で指定します。
コメント単なる備考です。

図A2-3の「変換」タグを押すと,図A2-5のダイアログが表示されます。ここで,インポートまたはエクスポートで用いるフィルターを「インポート用XSLT」または「エクスポート用XSLT」の右側にある「検索」ボタンを押して設定します。「検索」ボタンを押すと,「ファイルを開く」のダイアログが表示されます。そこで,該当するフィルターが記述されたファイルを指定することによって設定できます。図A2-5で指定したフィルターの記憶場所を変更した場合は,この操作をし直さなければなりません。

▼図A2-5 変換の設定

図A2-3または図A2-5のダイアログの「OK」ボタンを押すと,図A2-6のダイアログが表示され,あらかじめインストールされている他のフィルターとともに,追加されたXMLフィルターを確認できます。ここで「閉じる」ボタンを押すと,XMLフィルターの設定が終了し,それは直ちに利用可能になります。

▼図A2-6 追加されたXMLフィルターの確認

付録3 サンプル・データについて

サンプル名簿
サンプル辞典
サンプル伝票
サンプル報告書

サンプル名簿

「サンプル名簿」は,二つの表を含むCalc文書であり,Calcで開いた時の内容を図A3-1に示します。「ふりがな」欄が「名前ノふりがな」として「名前」要素の「ふりがな」属性になり,また「郵便番号」欄が「住所ノ郵便番号」として「住所」要素の「郵便番号」属性になることに注目してください。これはBeyondXML for Calcで処理します。

▼図A3.1-1 Calc文書で表した「サンプル名簿」
■図A3.1-2 Calc文書で表した「サンプル名簿」のスキーマ
■図A3.1-3 Calc文書で表した「サンプル名簿」のXML文書インスタンス

サンプル辞典

「サンプル辞典」は,1000行を超える大きなCalc文書であり,Calcで開いた時の内容を図A3-2に示します。これはBeyondXML for Calcで処理します。インポートやエクスポートにはかなり時間がかかりますので,ご注意ください。

▼図A3.2-1 Calc文書で表した「サンプル辞典」
■図A3.2-2 Calc文書で表した「サンプル辞典」のスキーマ
■図A3.2-3 Calc文書で表した「サンプル辞典」のXML文書インスタンス

サンプル伝票

「サンプル伝票」は,見出し欄と記入欄を罫線で囲んだWriter文書であり,Writerで開いた時の内容を図A3-3に示します。これはBeyondXML for Tableで処理します。

▼図A3.3-1 Writer文書で表した「サンプル伝票」
■図A3.3-2 Writer文書で表した「サンプル伝票」のスキーマ
■図A3.3-3 Writer文書で表した「サンプル伝票」のXML文書インスタンス

サンプル報告書

「サンプル報告書」は,記入欄だけを罫線で囲んだWriter文書であり,Writerで開いた時の内容を図A3-4に示します。「所属部門」欄が「報告者ノ部門」として「報告者」要素の「部門」属性になり,また科目の未語側にある「備考」欄が「科目ノ備考」として「科目」要素の「備考」属性になることに注目してください。これはBeyondXML for Tableで処理します。

▼図A3.4-1 Writer文書で表した「サンプル報告書」
■図A3.4-2 Writer文書で表した「サンプル報告書」のスキーマ
■図A3.4-3 Writer文書で表した「サンプル報告書」のXML文書インスタンス

付録4 BeyondXMLで用いたXSL変換の手法について

BeyondXML for CalcBeyondXML for Tableの開発にあたっては,次のようなXSL変換の手法をとっています。必ずしも洗練されたコーディングではありませんが,フィルター開発の参考になれば幸甚です。また,この手法に疑問や問題があれば,ぜひご指摘ください。