このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

HDML中のCDML

発言者:高坂修
( Date Sunday, March 05, 2000 02:43:18 )


 AppleShareIP6.0(MacOS8.5)とFileMaker4.0(MacOS8.5) (別々のマシンに置
いています)でサイトを運営しています。
 iMODEについては問題なくCDMLを絡めてページを作れたのですが、EZ-Webで
iMODE用に作ったCDMLを含んだページは読み込みエラーが発生して認識できま
せんでした。
 HDMLについては全く知識が無く、現在様々な書籍で勉強中ですが、そもそも
CDMLを埋め込めるのかが解りません。また埋め込めるのであれば、その記述の
仕方についてご存じの方がいらっしゃいましたら是非ご指導下さい。
※AppleShareIPのMIME設定は「HDML」について追加してあります。

高坂修 さんからのコメント
( Sunday, March 05, 2000 02:49:33 )

>iMODE用に作ったCDMLを含んだページは読み込みエラーが発生して認識できま
>せんでした。

 この読めなかったページはiMODE用ですからHTMLです。言葉足らずでした。

wamu さんからのコメント
( Monday, March 06, 2000 10:51:11 )

FMのWebコンパニオンではmime-typeの設定ができません。
よって、FMのCDMLを使って、いかなる方法でHDML文を作っても
FMのWebサーバー機能であるWebコンパニオンではコンパイルエラー等が出るはずです。
方法は同じマシンの中に
●ポート591番のFileMaker
●mime-typeを設定できるポート80番のWebサーバー
の2つ用意し、
FMで何らかの方法で.hdmlファイルをエクスポートし、
この.hdmlファイルをwebサーバーでサーブするという方法があります。
但し、ASIPとFileMakerは同じマシンで動かすとよくダウンするようなので
FMには違うWebサーバーがいいと思います。

その他の方法としては一般的ですが、MacPerlJ+ASIPという方があるでしょうし、
AppleScriptでももちろん可能でしょう。

私は、WebStar+MacPerlJ+FileMakerで、仮装ドメインを使い
imode用(imode.wamu.co.jp):WebStarでサーブ
html用(wp.wamu.co.jp):WebStar+FMでサーブ
hdml用(ez.wamu.co.jp):WebStarでサーブ
3つのホームページを開設しています。


高坂修 さんからのコメント
( Tuesday, March 07, 2000 01:07:50 )

 コメントを頂き、本当にありがとうございます。

>FMのWebコンパニオンではmime-typeの設定ができません。

 なるほど。やはりそこに行き着くわけですね。今までの様々なアクセス実験
で、今丁度その壁に当たり、WEB共有機能拡張で対処できないかとも思ったの
ですが、MIME設定が出来ず、断念しました。
 行き着いた結論の一つは、おっしゃる通り、ASIPと同じサーバでFMProを走
らせる事だったのですが、このパターンは以前実行していたので、いかに不安
定になるかはよく解りますので自分の中で却下していました。
 
 今回の目的は、今現在稼働しているインターネットとiモードで共有して
いるファイルメーカーのデータベースをそのままHDMLでも公開できるように
する事ですので、このためにはAppleScriptかMacJPerlを絡めれば出来るとい
う事でしょうか? その辺りを詳しく教えていただければ助かります。

高坂修 さんからのコメント
( Tuesday, March 07, 2000 01:23:18 )

 ちなみに、FMProのWEBフォルダでHDMLを使えるようにしたとして、ファイル
メーカーはHDMLの中に埋め込んだCDMLにデータを流し込んでくれるのでしょう
か? 取りあえず自分でも試してみようと思っていますが、稼働中のサービス
でしたので、ちょっと躊躇していました。こういう核心の部分を質問するのを
忘れておりました。

wamu さんからのコメント
( Tuesday, March 07, 2000 11:12:26 )

FM本体とWebコンパニオン(Webサーバー)の間のやり取りを
記述するための言語がCDMLですので、高坂さんのやりたいこと
はできません。私もこれで実は悩みました。もしもHDML文の中
にCDMLを書き込んでも、Webサーバーがmime-typeの設定を
変更できないので、要するにデータをサーブできないわけです。

やるなら、FMのデータベースを一度textファイルに書き出しこれ
をMacPerlJで処理して、Webサーバーで公開する。この方法しか
ないと思います。

例えば、住所/氏名/電話番号 という構造のデータベースをそのま
ま公開したいのであれば、FMのスクリプトでFMからTAB付きで書
き出し、これをPerlで切り分け、HDML文を生成し、WebStarで公
開する。という処理が必要なります。
但しFMもMacPerlJも決してスピーディなソフトではないのでクラ
イアントからの要求があった時点で、上記の処理を行うとデータ量
によっては、かなり、お待たせすることになると思いますのでテス
トの必要があるでしょう。

または、FMの計算フィールドを上手く使い、hdml文を作り上げて
これをWebサーバーで公開する。ということも可能かも知れません
が、これは、1フィールド分なら簡単ですが、データベース全体と
なると、かなりの工夫が必要でしょう。
私はこの方法を使って、個人ごとのメール本文を生成していますが。


高坂修 さんからのコメント
( Tuesday, March 07, 2000 18:05:28 )

 作業に先立ってHDML開発元のPHONE.COM社にメールで伺ってみたところ、
以下のような返答が帰ってきたのですが、その後タグの書き方等の詳細
な内容についてメールしましたが、まだ返事が来ていない状態です。

------<PHONE.COM JAPAN からの返答です>------
ファイルメーカーでの検索結果をhdmlで出力されたい
という話ですが、特に問題はありません。出力用の
データをhdmlベースで作成していただき、ただ注意する
べき点としてはmIME形式の設定の部分ぐらいで
あると思います。実際cgiやphp等も利用できます。
--------------------------------------------

 WAMUさんのご意見は先駆者の貴重な意見としてとても嬉しく、励みになりま
す。そこでこの出来るか出来ないかの部分についてはもうちょっと試行錯誤し
てみたいと思っているのが正直なところです。確かにレスポンス速度を考えれ
ばスクリプトでHDMLを生成して何らかの手段でエクスポートするやり方は難し
いですよね。

 昨日の試行錯誤の中でHDMLシミュレーターから今までと違う反応が返って来
始めました。シミュレータのログウィンドウにファイルメーカーから取得して
来たデータが表示されるようになったのです。METHODをPOSTからGETに変えて
みた結果です。

<a task=go method=get dest="http://dbs.00000.CO.JP:591/FMPro?-db=male.fmj&-Lay=list&-format=/ez_listm.hdml&-max=1&-sortfield=no&-sortorder=descend&-findall">2</a>データ<br>

 あと、昨日の真夜中にQPQをFMPRO4.0と同じマシンで走らせ、WEBフォルダの
MIME設定にHDMLを追加してみました。取りあえずWAP端末からWEBフォルダ内の
HDML書類には直接アクセス出来るようにはなったのですが、相変わらず表示は
エラーのままです。
 シミュレータのログを見てみると、どうもWEBフォルダ内のDEFAULT.HTMLを
フォーマットファイルとして拾いに行っているようなのですが、拾って欲しい
書類の名前をDEFAULT.HTMLに変えて見るなど無理矢理な事もしてみましたが、
やはり拾ってくれませんでした。現在この部分に集中してトライアル中です。

おがわまこと さんからのコメント
( Tuesday, March 07, 2000 22:36:35 )

わたしがメーリングリストの方で公開したMAcPerlの
スクリプトを使えば可能かと思います.


→  ファイルメーカのメーリングリスト

おがわまこと さんからのコメント
( Tuesday, March 07, 2000 23:31:11 )

先の件,下記で公開しました.

→  ファイルメーカWEBの負荷分散について

wamu さんからのコメント
( Wednesday, March 08, 2000 17:05:59 )

おがわまこと様
LWPモジュールで何をしてるんでしょう?

おがわまこと さんからのコメント
( Wednesday, March 08, 2000 22:38:13 )

wamu さん,こんにちは

》LWPモジュールで何をしてるんでしょう?
webstarなどのWWWサーバからMacPerlで組んだFMproをCGIとして動作
させています.それが受けたパラメータを LWPモジュールを使って,
ファイルメーカのwebコンパニオンに送ります.それで返ってきたデータ
を,cgiの返答として送り返しています.

LWPモジュールでWEBクライアントにしているわけです.SOCKETを直接
制御してもOKです.

HDMLについては詳しくありませんが,私も別経路で,mime-type
を指定する必要があるという情報を得ています.結果を返す時に,
ヘッダにmime-typeを入れてやれば良いでしょう.


なお,このツールのrealbasic版を作成していますが,あと一歩の
ところで止まっています.そのうち公開できると思いますが.


おがわまこと さんからのコメント
( Wednesday, March 08, 2000 23:53:40 )

そもそも,今回のやつはMIME-TYPEをかえるだけですみますので,
[FMP-ContentMIMEType: MIMEタイプ ]
が使えますね.

CDMLが有効になるような呼び出し方だと,ファイルメーカだけでも
可能です.

→  MIMEタイプの事例

高坂修 さんからのコメント
( Thursday, March 09, 2000 11:22:29 )

 おがわさん、初めまして、こんにちは。具体的な解決策を提示して頂き、
心から感謝しております。以下の内容についてもう少々踏み込んで教えて
下さい。

(wwwサーバとwebコンパニオンのurlを共通化させる部分について)

 フォルダのエイリアスを作って,wwwサーバのルートフォルダに入れるとの
事ですが、Webフォルダ自体がルートフォルダになっている場合はどうしたら
よいでしょうか?ルートフォルダというのはWWWサーバで指定してある公開
フォルダという解釈で良いのでしょうか?(初歩的な質問ですいません)
 そして、ポート番号を除いて階層を共有化するのはどうしてですか?

wamu さんからのコメント
( Thursday, March 09, 2000 14:17:26 )

高坂さん 大変申し訳ないです。
おがわさんがおっしゃるようにcdmlでmime-typeの設定できたんですね。
cdmlリファレンスにしっかり出てました。ここは気が付きませんでした。
わたしのところも、hdml版のデータをcdmaoneで見られるようにします。
テストしたら、確かにできました。
おがわさん さすがですね。ML、私も読んでいるのに。。。
高坂さんの質問のおかげです。感謝。

高坂修 さんからのコメント
( Thursday, March 09, 2000 17:41:57 )

 おがわさん、wamuさんこんにちは。早速MacJPerlにて、パスとアドレスだけ
を変更して走らせてみましたが、まだ成功には至っておりません。シミュレー
タによる現在のエラーログは「No Content-Type header found」となっていま
す。ヘッダについての指定についてはおがわさんも随所で触れていますが、具
体的にどういうやり方で指定したらよろしいのでしょうか?無知な僕はフォー
マットファイル(HDML)の一番上に

----------------------------
[FMP-CONTENTMIMETYPE: text/x-hdml;charset=Shift_Jis]

<hdml version=3.0 ttl=300>
<display>
○○リスト
----------------------------
 …と書き込んでいたのですが…、これってひょっとして大バカでしょうか?
もしPerl Script 内に書き込む必要があるのであれば、記述内容と記述場所を
教えて下さい。

 wamuさん、成功おめでとうございます。僕はまだですから頑張ります。ここ
でおがわさんが教えて下さった方法を、既にwamuさんは動かしてるんですよね。
 HDMLから偽FMPro(Perl CGI) に検索内容を渡すときのHDMLタグはどう書い
ていますでしょうか?また、フォーマットファイルのタグの書き方についても
具体的に教えて貰えますでしょうか。


高坂修 さんからのコメント
( Friday, March 10, 2000 21:07:32 )

 みなさん、こんにちは。まだ成功していない高坂です。(^^;) 小川さんか
ら提示していただいたPerlについて以下のようなエラーが出ておりますが、
CGI/Perlについての専門書をひっくり返しながら調べまくっていますが、まだ
理解できずにいる落第生状態です(^^;)
 ところで、MacJPerlの構文チェックで見てみると以下のようなエラーが出る
のですが、対処方法が解りません。


# syntax error, near "www HD:"
File 'Kosaka HD:Desktop Folder:EZ-Web:FMPro'; Line 1
# BEGIN not safe after errors--compilation aborted.
File 'Kosaka HD:Desktop Folder:EZ-Web:FMPro'; Line 36

==============================
use LWP::Simple;  ←Line 36
==============================

おがわまこと さんからのコメント
( Sunday, March 12, 2000 07:31:01 )

高坂修様

まず,偽FMpro法とFMP-ContentMIMETypeを使う方法は別物ですので,まず,
FMP-ContentMIMETypeを使う方法をお勧めします.

以下偽FMpro法についてです.

》ポート番号を除いて階層を共有化するのはどうしてですか?
FMproの時だけファイルメーカにアクセスさせるためです.

MIME-TYPEに合わせて下記のスクリプトを書き換えてください
print "Content-type: text/html\n";

LWPのエラーについて
ファイル検索でLWPを検索し,MacPerlのライブラリにLWP.pmがあるか確認.
初期設定でライブラリフォルダが指定されているか確認.

高坂修 さんからのコメント
( Tuesday, March 14, 2000 01:13:31 )

 おがわさんこんにちは。 今日も戦っております。(笑)今回の件は動的
にFMProとHDMLページを結びつける事が目的ですから、FMP-ContentMIMEType
を使う方法ですと動的検索が出来ないという点で後者の方法を選択していま
す。それとLWPについては、確かにLibへのパスを指定していませんでした。
不慣れとはいえ、初歩的な確認不足で赤面しております。

 進行状況は、最近はとにかくヘッダのcontent-typeが指定されていませんと
いう旨のエラーログが出ていますが、おがわさんのスクリプト、上の方
print "Content-type: text/html\n";はContent-type: text/x-hdml\n";に書
き換え、以下の内容もHDML用に書き換えたのですが、それでもエラーログは同
じ内容になっています。これで、一体どこの部分にどういう書き方で
content-typeを入れたらいいのかについて実験中です。(^^;) かなり参って
きましたが…、せっかくおがわさんから色々教えていただいた手前、くじける
わけにはいきません!(笑)何が何でも実現しますよ!頑張ります!(^^)/


おがわまこと さんからのコメント
( Monday, March 20, 2000 22:17:56 )

HDMLを直接触ったことがありませんが
下記のページはいかがでしょ.

→  HPを作ってみよう!

高坂修 さんからのコメント
( Wednesday, March 22, 2000 15:00:31 )

皆さん、こんにちは。さて、小川さんから頂いたPerlScript実行環境について
の問題(?)も無事解決し、FMProと命名し、早速走らせてみました。以下が
その状況です。(小川さん本当に感謝です)

NetScape:FMPro(CGI)にHITして、きちんとHDML形式でデータをダウンロード(成功)
U.P.Sim :Access control error

cdmaOne :このページへのアクセスは否定されました

 命令文はきちんとFMPro(CGI)→FMPro(本体)と流れているのは確認出来たの
ですが、やはりフォーマットファイルを取りに行けないみたいなんです。
 只今この最終段階で実験中です。あと一歩です!頑張ってwamuさんに続き
ますよ!

高坂修 さんからのコメント
( Wednesday, March 22, 2000 18:38:41 )

 現在の稼働状況では、HTMLで命令文を打ち込んだページからは以下の流れで正確
にHDML書類が出てきますので、少なくとも「WAP/HTML/Browser→FMPro(CGI)→FMPro(
本体)」の流れは間違いないのは解りました。問題はHTMLブラウザだとFMPro(本体)に
データが渡った後、通常通りフォーマットファイルを認識してデータを返してきます
が、WAP系(U.P.Sim/cdmaOne)では「このページへのアクセスは否定されました」と
いう状況になる点です。つまりFMPro>Webフォルダにアクセスできない状況自体は、
問題解決していないという事になります。wamuさんはFMProから戻ってきたデータ
をWebStarでサーブするというヒントを下さったのですが、その構造がどうしても
理解できないのです。Perlにデータを受けた後にデータを流し込むフォーマットファ
イルの指定まで書き足すという事なのでしょうか?

NetscapeNavigator→FMPro(CGI)→FMPro(本体)→NetscapeNavigator(HDML形式でダウ
ンロード)

cdmaOne→FMPro(CGI)→FMPro(本体)→「このページへのアクセスは否定されました」



> UPブラウザー     WebStar         FMPro(エリアス) FileMaker4.1
> ---------------------------------------------------------------------------
>1<CE Dest=〜を指定 → 2 FMPro(cgi)を実行 → 3 Fileaker4.1へ   → 4 ?以下を実行
>                                (コンパニオン
>                                   として)
>                                  ↓
>7 list.hdmlを閲覧   ← 6 list.hdmlサーブ  ←        ← 5 list.hdmlの生成



【今現在の動作環境】

port80 :FileMaker4.0
port591:Quid Pro Quo2.1.6


DBSServer


 > MacHD  > QPQ Folder
          > System Folder


 > DBS_HD > www(*QPQ RootFolder) > FMPro 4.0  > Web > ez_listm.hdml
                                                    > FMPro(本体のalias)

                                 > ez-web     > default.hdml
                                              > reader.hdml
                                              > others...
                                 > FMPro(CGI)

 この配置内容ではどこに問題があると思われるでしょうか?ここについても教えて
下さい。

高坂修 さんからのコメント
( Friday, March 24, 2000 07:27:46 )

 ついに成功しました。この場を借りまして、お力を貸していただいた皆様
に感謝致します。

【成功動作環境】

使用Version:FMPro4.1

データベースサーバ>FMPro4.1         (port=80)
         >Quid Pro Quo2.1.2(port=591)

※同一サーバで稼働させました。他サーバからのリンクについてはまだ試して
 いません。

※FMProのエイリアスをリンク元のファイルが入っているフォルダに入れて、
 実行命令はこのエイリアスにHITする様に飛ばしました。

※今月一杯は時間がないのですが、来月に入って時間が出来たら、もうちょっ
 と詳細な報告が出来ると思います。

おがわまこと さんからのコメント
( Monday, March 27, 2000 18:45:05 )

》www(*QPQ RootFolder) > FMPro 4.0  > Web >
サーバのルートフォルダ内にファイルメーカが入ったフォルダがあるのなら,
ログが丸見えになりますので,やめた方が良いですよ.

高坂修 さんからのコメント
( Sunday, April 02, 2000 05:55:26 )

 おがわさん、ありがとうございます。稼働させることに一生懸命になりすぎて、セキュリティ
なんて二の次のような感覚になっていました。ファイルメーカーのフォルダはルートから外して
入れないようにしました。

高坂修 さんからのコメント
( Monday, April 03, 2000 14:34:44 )

 その後の実験結果をまとめて報告します。

・まずファイルメーカーのバージョンは4.1以上であること。
・同一サーバ内でportはどちらが80でも591でも構わないが、ファイルメーカ
 ーと何らかのサーバソフト(私はQPQ2.1.2を使用/ASIPは安定性が悪いので
 注意)を同時に立ち上げる
・ファイルメーカーを呼び出す際に、その呼び出すHDML書類と同一階層にファ
 イルメーカーのエイリアスを置く(名前を"FMPro"に変える)
・ファイルメーカーから呼び出されるwebフォルダ内のフォーマットファイル
 は必ずヘッダに[FMP-CONTENTMIMETYPE: text/x-hdml;charset=Shift_Jis]
 を付ける。
・基本的にHDMLからファイルメーカーに命令を送る際には「GET」でHTMLにて
 一列に表記している書き方で指定する。この場合、変数名に"_"を使用しな
 いようにする。HDMLでは日本語表示について問題が生じるとの事でGETの使
 用を推奨していませんが、私が使っている限り問題は出ていません。
・[FMP-LinkNext]や[FMP-LinkPrevious]、[FMP-CurrentSkip]は使えないので
 「次の5件」等の指定をする際にはファイルメーカー内に"SKIP"というフィ
 ールド(計算)を作り、「status(ファイル番号)+"?"」と定義する。"?"には
 "SKIP"が-max値と同じになるように、例えば-max=5であれば4を入れておき、
 命令文の中でこのフィールドをスキップ用の値として参照するようにする。
 FMPro?-db=.......&-max=5&-skip=[FMP-Field:skip]&....の様にする。

 以上がHDML内でCDMLを使用する際のポイントだと思います。ここに至るまで、
 小川さんやwamuさんから大いにお力を貸して頂きました。お陰様で目的を
 達成する事が出来ました。本当にありがとうございました。