統合ソフトJustArks/PrezArkファイルの文書構造について
このページでは、Just Arks(PrezArk)の様々な面に焦点を当てて、開発スタッフ自らがメッセージを発信します。
今回は、Javaプレゼーションソフト「PrezArk」ファイルをテキストエディタや一太郎Arkで編集できるようになる技を紹介します。
XHTMLへの挑戦
みなさんはじめまして。毎年恒例の健康診断が近いこともあり、マフィンの食べ過ぎを解消すべく、週に3回ほどジム通いしているPrezArkファイル担当のIです。
今回はPrezArkファイルの文書構造について紹介します。
ファイル形式としてXHTMLを採用した経緯からPrezArk固有の要素、属性まで説明していきます。
文書構造を丸裸にしますので、テキストエディタや一太郎Arkなどを使って遊んでみてください(テキストエディタ等で編集したPrezArkファイルの動作は保証対象外)。
PrezArkは、Arkアーキテクチャを継承するプロジェクトなので、開発当初から独自バイナリ形式という話は一切出ませんでした。
「やっぱりバイナリじゃなくてXMLだよね」というメンバーの総意から、プレゼンテーションに必要な要素を洗い出し、新しく文書型を設計し、ある程度実装が進み、レビューをすることになりました。そこで「なぜ独自のXML形式なのか?既存のボキャブラリを流用すべき」という意見からXHTMLにしてはどうかということになりました。SMILも候補にあがりましたが、アウトラインプロセッサとしての方向性と異なることから見送りました。ちょうどそのころXHTML1.0は勧告(2000年1月)になったばかりでタイミングも良かったのです。
XHTMLにするメリットは、
画面1 Netscape6.1での表示例
独自のXML形式にこだわる理由はありませんでした。既存のXHTMLの語彙で足らない部分だけを拡張するという方針に切り替え、PrezArkファイルはホスト言語をXHTMLとしたXML複合文書として再設計することになりました(ベクトルデータはSVGとしています)。
Technology Preview版(以下TP版)では、再設計したXHTML形式となりましたが、製品ではもう一段階進化しています。それはそのままブラウザで表示できることを考慮して若干の変更を加えたことです。TP版ではそのままブラウザで表示すると、ページが重なるように表示されていましたが、製品ではページが重ならないように属性を設定し、ハイパーリンクでページを送る機能をつけました。
PrezArkファイルは、ホスト言語をXHTMLとしたXML複合文書として設計しています。
XHTMLに定義されていないPrezArk固有の要素、属性については、XML名前空間を利用し、XHTMLのタグ、属性名と衝突しないように定義します。
文書は、次の3つの部分から構成されます。
XML宣言(リスト1の001行目)
宣言的ヘッダの部分 (リスト1の004行目~021行目, head要素として区切られる)
文書の実際の内容を含む、本体 (リスト1の022行目~054行目, body要素)
XML宣言は、すべてのXML文書に必須というわけではありませんが、XHTML文書ではXML宣言を使うよう強く奨励されています。文書のキャラクタエンコーディングがデフォルトの UTF-8 か UTF-16 以外のものであるときは、宣言は必須なので、PrezArkでは必ずつけることにします。
ヘッダは、文書のタイトル、作成者、文書共通のスタイル情報([書式-タイトルページの設定]、[書式-スライドページ共通の設定]で設定される)、その他文書の内容以外のデータを格納します。
文書の本体には、文書の内容が含まれます。
PrezArkでは、独自の拡張属性を用い、XHTML文書にページ、枠、ノートの構造を付加しています。
リスト1 :サンプルXHTMLファイル抜粋「sample.html」
sample.htmlはutf-8で記述されていますので、IEなどのブラウザで閲覧時にはエンコードしてご確認ください。 [#u45d7812]
1:<?xml version="1.0" encoding="utf-8"?>
2:<html xmlns:pa="http://www.justsystem.co.jp/ark/xmlns/prezark/" pa:version="1.0"
3: xml:lang="ja-JP" lang="ja-JP"xmlns="http://www.w3.org/1999/xhtml">
4:<head>
5: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6: <link rel="schema.DC" href="http://dublincore.org/qdcmes/1.0/" />
7: <meta content="2001-09-17 14:28" name="DC.Date" />
8: <meta content="text/html" name="DC.Format" />
9: <meta content="PrezArk(Muffin/1.0)" name="generator" />
10: <meta content="タイトル" name="DC.Title" />
11: <meta content="isikawa" name="DC.Creator" />
13: <pa:permit>
14: <pa:item title=" " />
15: </pa:permit>
21:</head>
23:<div class="navi" style="position: absolute;left: 0px;width: 800px;height: 50px;top: 1px;">
24:<a name="pa:page1"></a>
25:<div>[previous] [<a href="#pa:page2">next</a>] [top]</div>
27:<div class="tmPage" pa:type="page" pa:layout="title" style="top: 30px;">
28: <div class="tmTitle" style="z-index: 0;" pa:type="area.title">
31: <div class="tmSubTitle" style="z-index: 1;" pa:type="area.subtitle">
34: <div class="note" pa:type="note">タイトルページのノート</div>
36:<div class="navi" style="position: absolute;left: 0px;width: 800px;height: 50px;top: 650px;">
37:<a name="pa:page2"></a>
38:<div>[<a href="#pa:page1">previous</a>] [next] [<a href="#pa:page1">top</a>]</div>
40:<div class="smPage" pa:type="page" pa:layout="list" style="top: 680px;">
41: <div class="smTitle" style="z-index: 0;" pa:type="area.title">
44: <div class="smArea1A" style="z-index: 1;" pa:type="area.list">
50: <div class="note" pa:type="note">箇条書きページのノート</div>
52:<div class="navi" style="position: absolute;left: 0px;width: 800px;height: 600px; top: 1330px;">
リスト1の文書をPrezArkで読み込み、DOMツリー表示プラグインでツリー表示させたのが下の画面2です。
html要素をルートとし、文書本体のbody要素にページが並んでいます。リスト1ではページごとに存在しているページへのリンク情報がDOMツリーにないのは、読み込みの際、PrezArkにとっては必要のないデータなので、削除しているためです。これは、ファイルへの保存時に復活します。
1ページ目の要素を展開させています。名前空間 http://www.justsystem.co.jp/ark/xmlns/prezark/ に属するpa:type属性でページ、枠、ノートを区別しています。
画面2 DOMツリー表示プラグインでの表示例
画面2 DOMツリー表示プラグインでの表示例
XHTMLでは表現できないため拡張したPrezArk固有の要素と属性について紹介します。
固有の要素はすべて管理用で、head要素に格納され、レンダリング対象外となっています。
permit要素
パーソナライズドビューの管理情報を保持します。パーソナライズドビューの個数だけitem要素を子供として持ちます。
head要素の子供として出現します。
item要素
パーソナライズドビューの項目情報を保持します。title属性で名前、selected属性で選択されているかどうかを表します。
permit要素の子供として出現します。
tmaster要素
[書式-タイトルページの設定]で追加した枠の情報を保持します。
この要素は、タイトルページの設定で枠を追加しない場合は存在しません。
head要素の子供として出現します。
smaster要素
[書式-スライドページ共通の設定]で追加した枠の情報を保持します。
この要素は、スライドページ共通の設定で枠を追加しない場合は存在しません。
head要素の子供として出現します。
version属性
PrezArkのバージョン情報を格納します。PrezArkのファイルかどうかの判別にも使用しています。
設定場所は、html要素です。
type属性
ページ、枠、ノートを表します。属性値については以下の表を参照してください。
設定場所は、div要素です。
表1 type属性値の一覧
属性値 | 意味 |
page | ページを表します。body要素直下に並びます。 |
note | ノートを表します。存在する場合は、ページ最後の子要素となります。 |
area.title | タイトルの枠を表します。ページ先頭の子要素として必ず存在します。 |
area.subtitle | サブタイトルの枠を表します。 |
area.list | 箇条書きの枠を表します。 |
area.image | 画像の枠を表します。 |
area.clipart | クリップアートの枠を表します。 |
area.object | オブジェクトの枠を表します。 |
area.misc | 上記の種別に該当しない枠を表します。 |
permit属性
パーソナライズドビューの表示、非表示の情報を格納します。
設定場所は、箇条書き項目(li要素)、タイトル(h1要素)、画像(img要素)、タイトル/箇条書き/画像以外の枠です。
以下のようなパーソナライズドビューの設定時
pa:permit>
pa:item title="英語" />
pa:item title="日本語" selected="selected" />
/pa:permit>
2つのパーソナライズドビューが存在し、以下のような例の場合は日本語のパーソナライズドビューが選択されている場合のみ有効となります。(0:OFF 1:ON を表す)
li pa:permit="01">この項目は日本語の項目です。</li>
effect属性
[書式-画面切替のエフェクト]、[書式-枠のエフェクト]での設定値を保持します。以下の表は現在のプラグインで実装されているエフェクトの一覧です。エフェクトプラグインは拡張できるようになっているので、仕様が公開されれば、自分好みのエフェクトを作成することも可能になります。
設定場所は、画面切替のエフェクトはページ、枠のエフェクトは枠です。
表2 effect属性値の一覧
属性値 | エフェクト名 |
wipe-right | ワイプ(右へ) |
wipe-left | ワイプ(左へ) |
wipe-down | ワイプ(下へ) |
wipe-up | ワイプ(上へ) |
wipe-open-horizontal | ワイプ(開く(左右)) |
wipe-close-horizontal | ワイプ(閉じる(左右)) |
wipe-open-vertical | ワイプ(開く(上下)) |
wipe-close-vertical | ワイプ(閉じる(上下) |
slide-right | スライド(右へ) |
slide-left | スライド(左へ) |
slide-down | スライド(下へ) |
slide-up | スライド(上へ) |
disolve | ディゾルブ |
box-in | ボックスイン |
box-out | ボックスアウト |
|random-stripe-horizontal|ランダムストライプ(縦)|
random-stripe-vertical | ランダムストライプ(横) |
expand属性
[アウトライン-展開]、[アウトライン-折り畳み]で設定されるアウトラインのページを展開するか折り畳むかの情報を保持します。
設定場所はページです。
表3 expand属性値の一覧
属性値 | 状態 |
|expand|アウトラインは展開されている(初期値)|
collapse | アウトラインは折り畳まれている |
layout属性
[挿入-新しいページ]、[書式-スライドのレイアウト]で設定されたスライドのレイアウト情報を保持します。
設定場所はページです。
表4 layout属性値の一覧
属性値 | スライドのレイアウト名 |
title | タイトル |
list | 箇条書き(初期値) |
list2 | 2段組箇条書き |
clipart | クリップアート |
|clipart_list| テキストとクリップアート1|
list_clipart | テキストとクリップアート2 |
blank | 白紙 |
category属性
クリップアートの分類名(グループ名)を保持します。
設定場所はクリップアートのimg要素です。
keyword属性
クリップアートのキーワードを保持します。
設定場所はクリップアートのimg要素です。
data属性
クリップアート挿入時のURIを保持します。
設定場所はクリップアートのimg要素です。
rehearsal属性
リハーサル予定(期待)時間を部分クロック値(MM:SS 例 02:33)で保持します。
設定場所はページです。
frame-decoration属性
枠飾りの情報をCSSライクな仕様で保持します。「プロパティ名: 値」という書式で1組のプロパティを形成し、各プロパティ宣言がセミコロンで区切られるスタイルです。
設定場所は枠です。
表5 frame-decoration属性値の一覧
プロパティ名 プロパティ説明 値 値説明
shape 枠飾りの型 rect 長方形(初期値)
round-rect 角丸長方形
lozenge 菱形
ellipse 楕円
cloud 雲形
balloon 吹き出し
direction 向き(吹き出し) btt 上向き(初期値)
ttb 下向き
ltr 右向き
rtl 左向き
border-style 縁取りの線種 solid 実線(初期値)
none 枠なし
dotted 点線(背景色に重ねられる)
dashed 破線(背景色に重ねられる)
border-width 縁取りの太さ medium 中くらいの太さ(初期値)
thin 細い
thick 太い
border-color 縁取りの色 色 CSS2で指定されている色と同じ
shadow 影 none 影なし(初期値)
横位置,
縦位置,
色 影の性質を設定します。書式は、横位置, 縦位置, 色です。“横位置”、“縦位置”では、影の位置を長さで与えます(負の値も許される)。
通常の枠飾りの位置を基準にして、横は右方向を、縦は下方向を正にとります。
たとえば、3px, 2px, black であれば,影は枠飾りの 3 ピクセル右、2 ピクセル下にできます。
content属性
ページ内容を示す文字列を保持します。
設定場所はページです。
表6 content属性値の一覧
属性値 | 内容 |
table_of_contents | 目次ページを表します([ツール-目次生成]で目次を生成したとき設定されます)。 |
PrezArkファイルの文書構造についての紹介はいかがでしたか?
これであなたもPrezArkファイルをテキストエディタ等で編集することが可能(?)ですね。テキストエディタ等で編集したPrezArkファイルの動作は保証対象外となりますが、ぜひ遊んでみてください。