Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Caché からの XML のエクスポート

Caché は、前の章で提供するツールを活用すると共に、Caché サーバ・ページを使用することにより、多様な方法で 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 を表示できます。

新規クラス・ウィザードで例を作成する

スタジオの新規クラス・ウィザードを使用すると、詳細を忘れた場合でも前述のようなコードを簡単に作成できます。手順は、以下のとおりです。

  1. [ファイル]→[新規作成] を選択します。

  2. [Cacheクラス定義] を選択します。

  3. ウィザードの最初のページで、パッケージ名とクラス名を入力します。

  4. ウィザードの 2 ページ目で、新規クラス定義のタイプを [CSP ページ] と指定します。

  5. ウィザードの 3 ページ目で、CSP が転送するコンテンツ・タイプを [XML] と指定します。

  6. [完了] を選択します。

  7. この時点で、以下のように、スタジオに新規クラス定義が表示されます。

    Class GXML.Server Extends %CSP.Page
    {
    Parameter CONTENTTYPE = "text/xml";
    
    ClassMethod OnPage() As %Status
    {
        Write "<?xml version=""1.0"" ?>",!
        Quit $$$OK
    }
    }
  8. それから、必要に応じて 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 のインスタンスに対応しています。より堅牢なサーバを使用した場合、ユーザは、既存の格納済みオブジェクトからオブジェクトを選択し、その後選択したオブジェクトを表示できます。

FeedbackOpens in a new tab