Caché からの XML のエクスポート
Caché は、前の章で提供するツールを活用すると共に、Caché サーバ・ページを使用することにより、多様な方法で XML データを提供できます。この章では、以下の項目について説明します。
-
データベース内に格納されているオブジェクトに基づいて、XML ドキュメントを提供する XML サーバを作成する方法
また、Caché を使用して、Web サービスを作成することができます。詳細は、"Caché での Web サービスおよび Web クライアントの作成" を参照してください。
XML のエクスポートの概要
Caché サーバ・ページ (CSP) から XML を提供するための要件は、以下のとおりです。
-
XML サーバは、%CSP.PageOpens in a new tab クラスのサブクラスでなければなりません。
-
サーバのコンテンツ・タイプは、"text/xml" でなければなりません。これは、CONTENTTYPE クラス・パラメータによって制御されます。
-
OnPage() クラス・メソッドは、XML ドキュメントを現在のデバイス (つまり、ブラウザ) に出力する必要があります。
-
"オブジェクトの XML への投影" に記載されているように、Caché オブジェクトを XML として提供するには、そのオブジェクトが XML 対応オブジェクトでなければなりません。この場合、OnPage() クラス・メソッドは、%XML.WriterOpens in a new tab クラスのインスタンスを作成し、これを使用して XML ドキュメントを記述します。
単純な Caché XML サーバの作成
このセクションでは、着信 HTTP 要求に応答して静的 XML コンテンツを提供する、単純な HTTP ベースの XML サーバの例を示します。XML サーバは、HTML の代わりに XML を提供するために拡張された、%CSP.PageOpens in a new tab クラスのサブクラスです。このようなサーバ・クラスは、以下のようになります。
Class GXML.Server Extends %CSP.Page
{
Parameter CONTENTTYPE = "text/xml";
ClassMethod OnPage() As %Status
{
write "<?xml version=""1.0""?>"
write "<Person><Name>Jaynes,Janice Q.</Name>"
write "<DOB>1959-09-03</DOB></Person>"
quit $$$OK
}
}
このクラスは %CSP.PageOpens in a new tab クラスを拡張し、CONTENTTYPE パラメータを "text/xml" にオーバーライドし、OnPage() メソッドをオーバーライドして、XML コンテンツを書き出します (この場合は静的コンテンツ)。
この例の動作
前述の例のようなサンプル・コードを記述した場合、以下の 2 つの方法で表示できます。
-
スタジオでソースを表示する場合、[ビュー]→[Web ページ] を選択します。
-
ブラウザで、以下のフォームの URL を開きます。
http://127.0.0.1/csp/samples/GXML.Server.cls
GXML.Server を、使用しているパッケージ名とクラスで置き換えます。また、必要に応じてルート URL も置き換えます。
ブラウザによって、XML ツリーが表示されたり、テキストだけが表示されたりします。いずれの場合も、ブラウザの [ソース] コマンドで、送信された実際の XML を表示できます。
新規クラス・ウィザードで例を作成する
スタジオの新規クラス・ウィザードを使用すると、詳細を忘れた場合でも前述のようなコードを簡単に作成できます。手順は、以下のとおりです。
-
[ファイル]→[新規作成] を選択します。
-
[Cacheクラス定義] を選択します。
-
ウィザードの最初のページで、パッケージ名とクラス名を入力します。
-
ウィザードの 2 ページ目で、新規クラス定義のタイプを [CSP ページ] と指定します。
-
ウィザードの 3 ページ目で、CSP が転送するコンテンツ・タイプを [XML] と指定します。
-
[完了] を選択します。
-
この時点で、以下のように、スタジオに新規クラス定義が表示されます。
Class GXML.Server Extends %CSP.Page { Parameter CONTENTTYPE = "text/xml"; ClassMethod OnPage() As %Status { Write "<?xml version=""1.0"" ?>",! Quit $$$OK } }
-
それから、必要に応じて OnPage() メソッドを編集します。
CSP から XML としてオブジェクトを提供する
前の例のように静的 XML を記述するよりは、Caché オブジェクトのコンテンツを含む XML ドキュメントを記述する方が面白いコードとなります。このためには、オブジェクト・クラスが XML 対応でなければなりません。つまり、%XML.AdaptorOpens in a new tab を拡張したもので、要素名などの任意の必要な設定が指定されている必要があります (既定を使用しない場合)。"オブジェクトの XML への投影" を参照してください。
また、“Caché オブジェクトからの XML 出力の記述” で説明するように、OnPage() メソッドを変更して XML 出力を生成します。OnPage() メソッドは、%XML.WriterOpens in a new tab のインスタンスを作成し、そのメソッドを呼び出して出力を生成する必要があります。
XML サーバ・クラスの変更
このセクションでは、XML サーバ・クラスが、永続オブジェクトから生成された XML を提供する方法を示します。ここで、OnPage() メソッドは XML 対応クラスの 1 つのインスタンス (GXML.Person1) を XML ドキュメントとして記述します。既定で、ブラウザから呼び出された場合、つまりブラウザに出力が送られる場合には、%XML.WriterOpens in a new tab は現在のデバイスに出力を生成します。
Class GXML.Server2 Extends %CSP.Page
{
Parameter CONTENTTYPE = "text/xml";
ClassMethod OnPage() As %Status
{
set writer=##class(%XML.Writer).%New()
set writer.Indent=1
set obj=##class(GXML.Person1).%OpenId(1)
set status=writer.RootObject(obj)
if $$$ISERR(status) { quit $$$ERROR($$$GeneralError,"Error writing root object") }
quit $$$OK
}
}
ブラウザで以下の URL を入力し、この結果を表示します。
http://127.0.0.1/csp/samples/GXML.Server2.cls
前述の例で説明したように、これは XML ドキュメントをブラウザに提供します。この場合、表示されるドキュメントは、ID が 1 に等しい GXML.Person1 のインスタンスに対応しています。より堅牢なサーバを使用した場合、ユーザは、既存の格納済みオブジェクトからオブジェクトを選択し、その後選択したオブジェクトを表示できます。