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?

XML 仮想ドキュメントのスキーマ依存パスの指定

この章では、XML 仮想ドキュメントのスキーマ依存パスを指定する方法を説明します。以下について説明します。

これらのパスを使用して、値にアクセスしたり値を設定したりすることができます。

この章内の例では、前の章で示したスキーマが使用されています。

XML 要素の内容の取得または設定

要素の内容にアクセスするには、以下のスキーマ依存パスのいずれかを使用します。また、これらのパスは、より複雑なスキーマ依存パスを作成する場合にも使用します (これについては、後の項で説明します)。

構文 参照先
element_name 指定された要素の内容。element_name は、ルート要素の子である必要があります。
parent.element_name 指定された要素の内容。parent は、要素への完全パス (つまり、このテーブルに示す任意の構文) です。この場合、element_name は、parent によって参照される要素の子となります。
parent.element_name(n) 指定された親に含まれる、element_name という名前の n 番目の要素の内容。
parent.element_name(-) 指定された親に含まれる、element_name という名前の最後の要素の内容。

以下の XML ドキュメントについて考えてみましょう。

<?xml version="1.0" ?>
<Patient MRN='000111222' xmlns='http://myapp.com'>
    <Name>Georgina Hampton</Name>
    <FavoriteColors>
        <FavoriteColor>Red</FavoriteColor>
        <FavoriteColor>Green</FavoriteColor>
    </FavoriteColors>
    <Address>
        <Street>86 Bateson Way</Street>
        <City>Fall River</City>
    </Address>
    <Doctor>
        <Name>Dr. Randolph</Name>
    </Doctor>
</Patient>

以下のテーブルに、このドキュメントのパスの例をいくつか示します。

パスの例 現在のパスの値
名前 Georgina Hampton
FavoriteColors(1) Red
FavoriteColors(2) Green
FavoriteColors(-) Green
Address 86 Bateson WayFall River
Address.Street 86 Bateson Way
Doctor Dr. Randolph

XML 属性の値の取得または設定

属性の値にアクセスするには、以下のスキーマ依存パスのいずれかを使用します。この節の以降の部分では、上記のテーブルで説明したように、element_reference は完全なスキーマ依存パスです。

構文 参照先
element_reference.attribute_name element_reference によって示される要素の attribute_name 属性の値。

下の表に、前のドキュメントのパスの例を示します。

パスの例 現在のパスの値
MRN 000111222

コメントと説明

Ensemble では、XML ファイルの読み取り時にコメントが削除されます。したがって、スキーマを記述するときにコメントを使用すべきではありません。コメントを使用する代わりに、ほとんどのスキーマ要素で利用できる description または altdesc 属性を使用できます。

多くの状況では使用できませんが、以下のいずれかのスキーマ依存パスを使用することでコメントにアクセスできます。

構文 参照先
element_reference.# 指定された要素の最初のコメントのテキスト。
element_reference.#(n) 指定された要素の n 番目のコメントのテキスト。
element_reference.#(-) 最後のコメントのテキスト。
Note:

Ensemble では、XML ファイル内の読み取り時にすべてのコメントが削除されます。存在する可能性のあるコメントは、XML ファイルの読み取り以降に追加されたコメントのみです。コメントを追加するには、setValueAt() を前述の表に示されているパスなどと共に使用します。

パス設定時の混合コンテンツの使用

setValueAt() を使用する場合、混合コンテンツ (要素とテキスト・ノードが混在して構成された値) で構成された値を指定できます。以下に例を示します。

 set mixed="SOME TEXT<HOMETOWN>BELMONT</HOMETOWN>"
 set status=target.SetValueAt(mixed,"Address")

以下のテーブルは、異なる状況で Ensemble がこの値をどのように処理するかを説明しています。

パスの参照先 Ensemble が混合コンテンツを処理する方法
要素またはコメント Ensemble は、要素またはコメントの現在のコンテンツを特定の混合コンテンツに置き換えます。
属性 サポート対象外

繰り返し要素の特殊なバリエーション

この節では、繰り返し要素を参照するときに適用される仮想プロパティ・パスのバリエーションについて説明します。

繰り返し要素を通した繰り返し

パスで繰り返し要素が参照されている場合は、以下の構文を使用してその要素のすべてのインスタンスを通して繰り返すことができます。

構文 参照先
element_name() 指定されたコンテキスト内の指定された名前の要素を通して繰り返します。

ここで、以下のコードのみを含むデータ変換を使用するとします。

 set status=target.SetValueAt("REPLACED COLOR","FavoriteColors()")
 if 'status {do $system.Status.DisplayError(status) quit}

このコード行は、前述したドキュメントを次のように変換します。

<?xml version="1.0" ?>
<Patient MRN='000111222' xmlns='http://myapp.com'>
    <Name>Georgina Hampton</Name>
    <FavoriteColors>
        <FavoriteColor>REPLACED COLOR</FavoriteColor>
        <FavoriteColor>REPLACED COLOR</FavoriteColor>
    </FavoriteColors>
    <Address>
        <Street>86 Bateson Way</Street>
        <City>Fall River</City>
    </Address>
    <Doctor>
        <Name>Dr. Randolph</Name>
    </Doctor>
</Patient>

要素のカウント

パスで繰り返し要素が参照されている場合は、以下の構文を使用して要素の数を返すことができます。

構文 参照先
element_name(*) 指定されたコンテキスト内の指定された名前の要素の数。この構文は、スキーマで element_name が繰り返し要素として定義されている場合にのみ有効です。
element_name.* 指定されたコンテキスト内の指定された名前の要素の数。この構文は、任意の element_name に対して有効です。

下の表に、前述したドキュメント用のパスの例を示します。

パスの例 現在のパスの値
FavoriteColors.* 2
FavoriteColors(*) 2

ターミナルでのスキーマ依存パスのテスト

特に、構文に精通している場合は、仮想ドキュメント・プロパティ・パスをビジネス・プロセスやデータ変換などで使用する前にターミナルでテストできると便利です。スキーマ依存 XML パスに対してこれを行うには、次の手順を実行します。

  1. 対応する 1 つまたは複数の XML スキーマを Ensemble にロードします。そのためには、“利用可能なツール” の章の説明に従って、[XML スキーマ構造] ページを使用します。

  2. 管理ポータルを使用して、テストするドキュメントのルート要素に関する DocType 値を探します。以下に例を示します。

    generated description: doc type

    前述した “XML 仮想ドキュメントのパス・ユニットの表示” を参照してください。

  3. ターミナルまたはテスト・コード内:

    1. 適切な XML ドキュメントのテキストを含む文字列を作成します。

    2. EnsLib.EDI.XML.DocumentOpens in a new tabImportFromString() メソッドを使用してこの文字列から XML 仮想ドキュメントのインスタンスを作成します。

    3. このインスタンスの DocType プロパティを設定します。

    4. このインスタンスの GetValueAt() および SetValueAt() メソッドを使用します。

下のメソッドはステップ 3 を実行します。

ClassMethod TestSchemaPath()
{
    set string="<Patient xmlns='http://myapp.com'>"
    _"<Name>Jack Brown</Name>"
    _"<Address><Street>233 Main St</Street></Address>"
    _"</Patient>"
    set target=##class(EnsLib.EDI.XML.Document).ImportFromString(string,.status)
    if 'status {do $system.Status.DisplayError(status)  quit}
    
    //Use the DocType displayed in the Management Portal
    set target.DocType="MyApp:Patient"
    
    set pathvalue=target.GetValueAt("Address.Street",,.status)
    if 'status {do $system.Status.DisplayError(status)  quit}
    write pathvalue
}

このメソッドの出力を以下に示します。

ENSDEMO>d ##class(Demo.CheckPaths).TestSchemaPath()
233 Main St

GetValueAt() のその他のオプションは、後述する “pFormat 引数” を参照してください。

FeedbackOpens in a new tab