Lotus Domino XML 活用の基礎!
2004/12/01
日本・アイ・ビー・エム株式会社 ソフトウェア事業
て、できる限り正確を期すよう努めてはおりますが、いかなる明示または暗黙の保証も
責任も負いかねます。本資料の情報は、使用先の責任において使用されるべきもので
あることを、あらかじめご了承ください。
掲載情報は不定期に変更されることもあります。他のメディア等に無断で転載する事は
ご遠慮ください。
本資料の著作権は日本アイ・ビー・エムにあります。非営利目的の個人利用の場合にお
いて、自由に使用してもかまいませんが、営利目的の使用は禁止させていただきます。
IBM、AIX、WebSphere、は IBM Corporation の商標。
Lotus、Lotus Domino、Lotus Notes、Lotus Workplace Messaging、Lotus Enterprise
Integrator、Lotus Enterprise Script Builder、Lotus Domino Unified Communications
Service、Lotus Instant Messaging/Web Conferencing、Lotus Team Workplace、Lotus
Workplace Team Collaboration、Lotus Learning Management System、Lotus Virtual
Classroom、Lotus LearningSpace、Lotus Workplace Collaborative Learning、Lotus
Domino Document Manager、Lotus Discovery Server、Lotus Extended Search、Lotus
Workplace Web Content Management、Lotus Workflow、は IBM-Lotus の商標。
Domino XML の概要
Domino XML で見栄えの良い Lotus Domino Web
アプリケーションを作成する
データ交換のために
XML を利用した Lotus Domino
Webアプリケーションを作成する
フォームで
XML を利用する
サーバー・サイドで
XML の生成を行う
付録:用語集
XML フォーマットで記述された Lotus Domino デー
タベース構造を表すために設計された言語。
Lotus Notes/Domino R5 から利用可能 (注:本書
の内容は
Lotus Notes/Domino 6.x を基にしてい
ます。)
DXL のスキーマ言語には DTD を使用(Domino
DTD)。<DominoDirectory>¥xmlschemas¥ に
定義。
ブラウザーに
Lotus Domino のデータを渡し、XSL
や
DHTML/Javascript/CSS と組み合わせてアプリ
ケーションを作成する。
Lotus Domino のデータが、そのまま XML として利
用でき、別システムを用意する必要がない
Lotus Domino の優れた機能がそのまま利用できる
セキュリティー
レプリカ
/クラスタリング※/エージェント/全文索引 など
Lotus Domino と XML アーキテクチャの親和性
実装方法によっては、既存のデータベースがほぼその
まま使用できる
※ブラウザーをご利用で、本格的なクラスタリングのフェール・オーバーが必要な場合、別途専用機器を導入する必要があります。
考慮すべき点
Web 化による負荷は考慮されているか?
Lotus Notes Client とブラウザーの機能やユーザービリ
ティの違い、利用方法は考慮されているか?(付録参照)
ブラウザーの修正モジュールによる動作の違いを吸収できる
か。セキュリティー対策ができているか。
Web及びXML化する範囲の特定
表現のために
XML を使うのか or データ交換のために
XML を使うのか?
ブラウザーからのアクセスのみ発生するのか、Lotus
Notes Clientなどからのアクセスもありうるのか?
ユーザーの入力が必要になるのか、参照のみか
?
一般的な
XML アプリケーションの実装方法
XML と XSL をサーバーから取り寄せて使用する。
XML と スクリプト言語/DHTML などを組み合わせて使用
する
サーバー側で
XML データを処理し、 HTML データとしてブ
ラウザーに渡す。
アプリケーション作成の指針
(XML 化の実装方法)
DXL で見栄えの良い
?ReadViewEntries
ブラウザーがビューから
XML として取得するための URLコマンド
通常の
Lotus Domino のビューにアクセスするときの URL
に
?ReadViewEntries の URLコマンドをつける
Domino DTD に沿った DXL の形式で XML データを生成
(Browser)
DXL をビューから取得する
http://servername.co.jp /database.nsf/viewname ?ReadViewEntries http://servername.co.jp /database.nsf/viewname (Lotus Domino の データベースのビューを元に DXL を生成)<?xml version="1.0" encoding="UTF-8"?> <viewentries toplevelentries="2">
<viewentry position="1" unid="727F4F956E9114A149256F38001B7BD3" noteid="936" children="2" descendants="4" siblings="2">
<entrydata columnnumber="1" name="TITLE"> <text>親文書</text></entrydata>
<entrydata columnnumber="2" name=“BODY"> <text>親文書テキスト</text></entrydata> <entrydata columnnumber="3" name=“DATE">
<datetime>20041025T140049,54+09</datetime></entrydata> <entrydata columnnumber="4" name=“AUTHOR">
<text>Haruto Nakamura/LotusBPTech</text></entrydata> </viewentry>
(... 続く)
</viewentries>
DXL の中身
日付と時刻のデータ。 datetime 文字列形式のデータ。 text このエントリが含まれる列の名前。 name このエントリを含む列のインデックス番号。 columnnumber ビューの 1 列に対するデータの単一列のセルを表す。 entrydata ビュー階層でこのエントリに属する同レベルの文書の数 (このエントリを含まない) 。 siblings ビュー階層でこのエントリに属する全子エントリの数 (このエントリを含まない) 。 descendants ビュー階層で、このエントリの直属の子エントリの数。 children 文書の NoteID。 noteid 文書のユニバーサル ID (UNID) 。 unid ビュー階層でのエントリの位置。 position ビューの 1 行を示す。 view entry ビュー内のトップレベルエントリまたは主要文書の数。 toplevelentries Lotus Domino データベースのビューの構造を定義。ルート要素。 viewentriesXML と XSL と結びつける
取得した
XML と XSL を結びつけるためには
?ReadViewEntries で取得した XML に対して XSL に結
びつける方法は?
<? xml-stylesheet type=“text/css” href=“style.xsl” ?>
?Readviewentries には
↑上記の↑のようなタグを
直接
XML データに埋め込む簡単な方法がない
Dynamic XML を利用する。
本書では
HTML と Javascript を組み合わせて、
コーディングのポイント
1. – 設計要素の[ページ]を利用する
ページとは
クライアントに画面を表示するための設計要素。フォームと異なり、文書にひ
もづけられてなく、アプリケーションのどの部分でも使用可能
Web/XML 化でのページの使用
ページのプロパティの
[ページ情報]
タブの
Web アクセスを HTML にする
ブラウザーからページにアクセスする。
http://server/test.nsf/page
Demo:Javascript 内
function applyXSL() {
oResults = document.getElementById("results");
oXML = document.getElementById("testxml");
oXSL = document.getElementById("testxsl");
oResults.innerHTML =
oXML.transformNode(oXSL.documentElement);
}
デモのデータベース内で、testxml, testxsl は xml island, results は div として設定されている
Demo:XLS 内
<td class="Ccol">
<a id="anchor_{../@unid}" href=
"0/{../@unid}"
>
<xsl:value-of select="." />
</a>
</td>
文書の unid を URL に指定することで文書を開く。
ビューを明示的に指定しない方法として 0/ を指定する方法がある。
コーディングのポイント
3. - リンクの作成
例:http://server.co.jp/test.nsf/0/9F7BCBB6ED1746E449256F3B002FC16C
階層構造のビュー
列構造により、親文書と子文書が同じフィールドの値を取れ
るとは限らない
対象のビューを階層構造にしないか、ブラウザー側で加工
パフォーマンス
一度に多くの文書を読み込まない(列数も考慮する)
ブラウザーのレンダリング能力
/スクリプトの処理能力/パー
サーの処理能力を考慮
?
ReadViewEntries を使うときの注意点(1)
ビューの列の順番
ビューの列順どおりに
DXL に読み込まれる
entrydata の name 属性の値
列名ではなく、設計要素名が利用される
<entrydata columnnumber="1" name="TITLE">
各種ブラウザーとの乗り入れ
各種ブラウザー用のコーディング
?ReadViewEntries のオプション(一部)
StartKey の種類を指定します。引数が指定されていない場合、デフォ ルトはテキストです。 KeyType = text|time ( UntilKey は StartKey といっしょに使用するときだけ有効です。 StartKey で指定した文書で始まり UntilKey で指定した文書で終わ るビューエントリの範囲を表示することができます。 UntilKey = string string はソートされたビュー内の文書へのキーです。 StartKey = string n には、ビューの表示を開始する行番号を指定します。階層表示ビュー の行番号にはサブインデックスを含めることができます。 Start = n サーバーの全データ型をテキストに変換します。 PreFormat n は表示する文書数です。 Count = n
Count = n
デフォルトでは
30文書に設定
(例)http://servername/db.nsf/view?ReadViewEntries&Count=100 あまり多くの文書を読み込むと、パフォーマンス低下の可能性
Start = n
表示する文書の順番のうち、最初に表示させる文書を指定
(例)http://servername/db.nsf/view?ReadViewEntries&Start=100 Count との組み合わせで使用すると効果的 (例)http://servername/db.nsf/view?ReadViewEntries&Start=20&Count=20 <viewentry position=“n”....> の n に相当?
ReadViewEntries のオプション(一部)
StartKey = string
DXL で最初に取得する文書のキー
(例)http://servername/db.nsf/view?ReadViewEntries&StartKey=親文書50 ビューがソートされている必要あり。
UntilKey = string
DXL で最後に取得する文書のキー
(例)http://servername/db.nsf/view?ReadViewEntries&StartKey=親文書 50&UntilKey=親文書75 必ず StartKey の指定が必要。?
ReadViewEntries のオプション(一部)
Preformat
text 型以外のデータ型をサーバーが自動変換
(例)http://servername/db.nsf/view?ReadViewEntries&Preformat <datetime>20041025T140049,54+09</datetime> ↓ <text>2004/10/25 14:00:49</text>?
ReadViewEntries のオプション(一部)
DXL による Web 化 -> ポータル化
考慮する点
認証
•
シングルサインオン
(参考)Web サイト領域認証文書
管理
•
表示させるポータル画面の管理
テンプレート開発
•
ポータルの実装のコストと手間
Portal化
本格的なポータルをご検討される場合には、既存の弊社ポータル製品をお勧め致します。
データ交換のために
XMLを利用した
簡単に自動で持ってくる反面、要素名が固定
要素名が長く、階層深い
必要以外のデータが含まれている
データ交換には不向き
?ReadViewEntries での特徴
データ交換のためには
必要な要素名のみを使う
交換しやすいように要素を決定する
xml のタグを直接ビューに含めるような設計にする
列の先頭/末尾に文書を示すタグを含める
各列に文書の要素を示すタグを含める
View の設定
xml のルートタグがxml のタグ
を含めることが出来ないため、
このままでは使用できない。
1. page に埋め込みビューとしてビューを埋め込む
[作成 - 埋め込み設計要素 – ビュー]
ヘッダの内容もブラウザーに渡されるので、必要なければオフにする
2. page に必要なタグを埋め込む
3. ブラウザーに表示できる設定を行う
ビューの設定 → ビューの設定を HTML として扱う
埋め込みビューの設定 → HTML を使用
ページの設定 → コンテントタイプ text/xml (xml island などを使い html データにし
たい場合には、 html をチェック)
page の設定
直接ビューに表示する文書数を操作する方法がない
ビューに SELECT 文を追加してビューで文書を振り分ける
メンテナンス
フィールドの追加/変更には注意を払う
フォームで
XML を利用する
フォームは必ずしも XML 化を行う必要はありません。
ビューだけで機能が充足されるのであれば、必ずしも XML 化を行う必要はない。
ビュー
データベースにひもづけられた設計要素であり、データベースに複数作成す
ることが可能。
フォーム
文書にひもづけられた設計要素であり、基本的に文書に一つのみ。
フォームの XML化 - ビューとフォームの特性の違い
簡単なフォームで、表現力が必要でない場合
機能的に必要でなければ、無理に XML にしない(DHTML と CSS で十分
な場合もある)
Lotus Domino Designerで作成したフォームは自動変換によりブラウザー
に表示可能
Form を XML で表現したい場合
フォームのプロパティのデフォルトタブの Webアクセス内、コンテントタイプ
に [HTML] またはその他にチェックを入れ “text/xml” を指定する
Lotus Notesとブラウザー両方からアクセスする場合には、
そのための仕組みを実装することが必要
フォームの XML化 - 実装方法
フォームの XML化 - Lotus Notes とブラウザーのためのフォームの切り分け方法の例
フォーム内の非表示式で切り分ける
一つのフォーム内の非表示式で Web と Lotus Notes を切り分ける
設計が複雑になりやすいので注意
パススルー HTML を使用する
Lotus Notes 使用時のデザインが通常と異なる
計算結果のサブフォームを利用する
フォームの中に Lotus Notes/ Web で表示するサブフォームを埋め込む
@Clienttype, @Browserinfo などを利用する
同じ別名を持つフォームを作成する
サーバー・サイドで
XML を生成する
長所
クライアント側に負荷がかかりづらい
柔軟なコーディングが可能
Lotus Script や Java で用意されている XML のクラスが使
用できる (DOM parser/SAX)
短所
サーバーサイドで
XML を生成する
手順
1. Lotus Domino Designerで処理を行うエージェントを作成
2. ブラウザーからエージェントを呼び出す
3. ブラウザーに結果が表示される
XML 内で XSL を指定してブラウザーで表示する
page/form ではこの方法が使用できる。
?ReadViewEntries では直接この方法は利用できない
xsl はブラウザーの種類により大きく依存する
XML と スクリプト言語、 DHTML、CSS などを組み合わせて使用する
ご紹介したすべての設計要素で使用できる
スクリプト言語はブラウザーの種類に依存する部分がある
クライアントの負荷に注意。
サーバー側で
XML データを処理し、 HTML データとしてブラウザーに渡す。
柔軟なコーディングが可能だが、若干難度が高い
標準的なHTML をクライアント側に渡せば、クライアントにはほぼ依存しない。
サーバー側の負荷に注意
アプリケーション作成の指針
(XML 化の実装方法)
DXL に関する資料
Lotus Domino Designerでの XML のエクササイズ
http://www-6.ibm.com/jp/domino07/lotus/home.nsf/Content/DN5_X_XML_Designer
XML Powered by Domino How to use XML with Lotus
Domino (英語)
http://www.redbooks.ibm.com/redbooks.nsf/0/7fccf9355f830c15852569510043ef2a? OpenDocument
?ReadviewEntries に関する資料
Using Domino data in Web Applications: XML lessons
from iNotes Web Access (英語)
http://www-10.lotus.com/ldd/today.nsf/Lookup/XML_iNotes
Creating dynamic categorized views (英語)
http://www-10.lotus.com/ldd/today.nsf/lookup/DynamicCategorizedViews
xml islands に関する資料
Lotus Domino Designerで XML データ・アイランドを使う
Web 化全般に関する資料
Building dynamic collapsible views for Web
applications(英語)
•
http://www-10.lotus.com/ldd/today.nsf/Lookup/DynamicCollapsibleViewsWebifying an existing Notes Application(英語)
•
http://www-10.lotus.com/ldd/today.nsf/lookup/Webifying_Notes_applicationsDomino URL 虎の巻
•
http://www-6.ibm.com/jp/domino07/lotus/home.nsf/Content/DN5_X_Domino_URL_cheat_sheet(管理者ヘルプ)
Notes および Web アプリケーションを設計するための
ヒント
xml Document Object model。XML にアクセスするための API。階 層化構造。 xmlDOM HTML 内に存在する xml 文書。 <xml></xml> タグで括られる。 xml island 見栄えのための情報を記述したもの。CSS などが含まれる。 スタイルシート Lotus Notes/Domino R5 から使用できる設計要素で、フォームと似て いるが文書にはひもづいていない。HTML などの記述も可能 ページ データベースの文書の位置情報を示す一意の ID NoteID
Universal IDの略。Lotus Notes/Dominoの文書を一意として識別す るための ID。すべてのレプリカDB上の同じ文書には、同じ UNID が振ら れる。 UNID URL の引数として URL の後ろに付けるコマンド文。サーバー側で処理す るための引数として使われる。 URL コマンド Dynamic に XML 文書にアクセスするための API。 Dynamic XML タグ定義を行う文書の広義。DTD や XML Schema がそれにあたる。 スキーマ言語 埋め込まれたタグの定義を行う定義文書 DTD XML のスタイルを記述するための言語 XSL
Domino DTD で制定されている Lotus Domino 用の XML DXL