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 仮想ドキュメントのプロパティ・パスの概要を示します。以下について説明します。

次の 2 つの章では、プロパティ・パスの作成方法について詳しく説明します。

Note:

データ変換では通常、ルール・セットや検索テーブルよりもより多くのプロパティ・パスのセットを使用するため、この章で示すコード例はデータ変換の一部です。また、DOM スタイル・パスは手動で作成する必要のあるパスなので、ここでは DOM スタイル・パスに重点を置いています(一方、使用するスキーマを指定する場合、Ensemble にドキュメントの構造が表示されるので、ドラッグ・アンド・ドロップを行うか、自動完了機能を使用すると、スキーマ依存パスが自動的に生成されます)。

XML 仮想ドキュメントの仮想プロパティ・パスの手引き

ここでは、XML 仮想ドキュメントの仮想プロパティ・パスについて簡単に説明します。

前述のとおり、スキーマ依存パスを使用できるのは、該当する XML スキーマをロード済みの場合のみです。一方、DOM スタイル・パスは、使用可能なスキーマがない場合でも常に使用できます。

スキーマ依存パスの基本構文

XML 仮想ドキュメントでは、スキーマ依存パスは以下の例のようにピリオドで区切られた一連のパス・ユニットで構成されます。

unit1.unit2.unit3

ここで、unit1 はドキュメント内の子 XML 要素の名前、unit2unit1 内の子要素の名前、というように続きます。リーフ・ユニットは、子 XML 要素と XML 属性のどちらかの名前です。

以下に例を示します。

HomeAddress.City

詳細は、“スキーマ依存パスの指定” の章を参照してください。

DOM スタイル・パスの基本構文

DOM スタイル・パスは、常にスラッシュで始まり、以下の例のような基本構造を持ちます。

/root_unit/unit1/unit2/unit3

各パス・ユニットのフォームは以下のとおりです。

namespace_identifier:name

namespace_identifier は XML ネームスペースを示します。これは、Ensemble によって実際のネームスペースの URI で置換されるトークンです (詳細は、後の項で説明します)。このトークンは、この章で後述するとおり、その要素または属性がネームスペースに含まれている場合にのみ必要です。

name は、XML 要素または属性の名前です。

以下に例を示します。

/$2:Patient/$2:HomeAddress/$2:City

詳細は、“DOM スタイル・パスの指定” を参照してください。

XML ネームスペース・トークン

スキーマを Ensemble にロードすると、そのスキーマで使用されるネームスペースの一連のトークンが確立され、あらゆる DOM スタイル・パスで使用できるようになります。

トークン $1 はスキーマで宣言された最初のネームスペースで使用され、これは通常、XML スキーマのネームスペース (http://www.w3.org/2001/XMLSchema) と一致します。トークン $2 はスキーマで宣言された次のネームスペースで使用され、$3 は 3 番目のネームスペースで使用される、というように続きます。

Ensemble では、スキーマで宣言されたすべてのネームスペースに対してネームスペース・トークンが割り当てられます。それらのネームスペースが実際に使用されるかどうかは関係ありません。そのため、スキーマで追加のネームスペースが宣言された場合、対象の項目に対して $2 ではなく $3 以上の値が使用される可能性があります。次の節で説明するように、特定のパス・ユニットに正しいトークンを使用していることを確認するには、管理ポータルを使用して個々のパス・ユニットを表示するのが実際に便利です。

ネームスペース・トークンを使用できるのは、該当するスキーマもロード済みの場合 (また、そのスキーマを使用するための適切なビジネス・ホストが構成済みの場合) です。それ以外の場合は、XML ドキュメントで指定されているとおりのネームスペース接頭語を使用する必要があります。

XML 仮想ドキュメントのパス・ユニットの表示

XML 仮想ドキュメントのプロパティ・パスを十分に理解するまでは、管理ポータルを使用して個々のパス・ユニットを表示すると便利です。そのためには、該当するスキーマをロードしておく必要があります。

スキーマ内の要素および属性のパス・ユニットを表示するには、以下の操作を行います。

  1. 前の章の説明に従って、スキーマをロードします。

    例えば、以下の参照用の XML スキーマを考えてみましょう。これは、XML スキーマに精通した読者に役立ちます。

    <?xml version="1.0" encoding="UTF-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
                elementFormDefault="qualified" targetNamespace="http://myapp.com"     xmlns:myapp="http://myapp.com">
      <element name="Patient" type="myapp:Patient"/>
      <complexType name="Patient">
        <sequence>
          <element minOccurs="0" name="Name" type="string"/>
          <element minOccurs="0" name="FavoriteColors" 
                       type="myapp:ArrayOfFavoriteColorString" />
          <element minOccurs="0" name="Address" type="myapp:Address" />
          <element minOccurs="0" name="Doctor" type="myapp:Doctor" />
        </sequence>
        <attribute name="MRN" type="string"/>
        <attribute name="DL" type="string"/>
      </complexType>
      <complexType name="ArrayOfFavoriteColorString">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="FavoriteColor" 
                       nillable="true" type="string"/>
        </sequence>
      </complexType>
      <complexType name="Address">
        <sequence>
          <element minOccurs="0" name="Street" type="string"/>
          <element minOccurs="0" name="City" type="string"/>
          <element minOccurs="0" name="State" type="string"/>
          <element minOccurs="0" name="ZIP" type="string"/>
        </sequence>
      </complexType>
      <complexType name="Doctor">
        <sequence>
          <element minOccurs="0" name="Name" type="string"/>
        </sequence>
      </complexType>
    </schema>

    以下に、この節で示すスキーマに従った 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>
  2. [Ensemble][相互運用][XML][XML スキーマ構造] の順にクリックします。これにより、Ensemble, XML スキーマ ページが表示されます。左の列には、この Ensemble ネームスペースにロードされた XML スキーマがリストされます。

  3. 目的の XML スキーマに対応する行内の [カテゴリ] リンクをクリックします。

    上記の XML スキーマに対応する行のリンクをクリックした場合、以下のように表示されます。

    generated description: doc types

  4. 対象のドキュメント・タイプのリンクをクリックします。

    [Patient] をクリックした場合、以下のように表示されます。

    generated description: path demo patient

    このページでは、以下の操作を実行できます。

    • 上の表で、大文字フォントの値はこの XML 要素の DocType 値を表しています。この場合の DocType は MyApp:Patient です。

    • [名前] 列には、スキーマ依存パスで必要な形式のパス・ユニットが表示されています。

      この場合は、スキーマ依存パス内のパス・ユニットとして、NameFavoriteColorsAddressDoctorMRNDL を使用できることがこのページからわかります。

    • [要素] 列には、DOM スタイル・プロパティ・パスで必要な形式のパス・ユニットが表示されています。

      この場合は、DOM スタイル・パス内のパス・ユニットとして、$3:Name$2:FavoriteColors/$2:FavoriteColor$2:Address$2:Doctor/$2:Name@MRN@DL を使用できることがこのページからわかります。@MRN@DL にはネームスペース接頭語が含まれていないことに注意してください。これらの属性はどのネームスペースにも含まれていません。

  5. 必要に応じて、追加のサブ項目をクリックします。

    [名前] 列の [アドレス] をクリックすると、以下のように表示されます。

    generated description: path demo address

    このページには、Address 内のすべての追加パス・ユニットが表示されています。

    この場合は、このページを表示するために使用したパス・ユニットとの組み合わせでこれらの追加パス・ユニットが使用できることがこのページからわかります。以下に例を示します。

    スキーマ依存パス (部分) ...Address.Street
    DOM スタイル・パス (部分) /.../$2:Address/$2:Street

以下の節では、スキーマの変動による特定の変動に注目しています。

スキーマ依存パスの冗長な内部要素

スキーマ依存パスに対して、Ensemble では冗長な内部要素が縮小されます。これについては、以下の例で最もよく説明しています。

  • <FavoriteColors> 要素には、複数の <FavoriteColor> 要素のシーケンスが含まれています。スキーマ・ビューワ・ページの (スキーマ依存パスのパス・ユニットが表示される) [名前] 列には、<FavoriteColors>FavoriteColors() とだけ表示されます。この列は以下の図では青で表示されています。

    generated description: path demo patient

    これに対して、右側の [要素] 列には、同じ要素が $2:FavoriteColors/$2:FavoriteColorsItem として表示されます。この列には、DOM スタイル・パスのパス・ユニットが表示されます。

    同じタイプを持つ複数の項目のシーケンスの場合、スキーマ依存パスでは内部要素の名前は使用されません(一方、DOM スタイル・パスではすべての要素名が使用されます)。多くの場合、スキーマに含まれる冗長な内部レベルはすべて、スキーマ依存パスでは無視されます。以下の項目で別の例を示します。

  • <Doctor> 要素には、単一の <Name> 要素が含まれています。前の図で示したように、スキーマ・ビューワ・ページの [名前] 列には、<Doctor> 項目が Doctor として表示されます。

    <Doctor> 内のデータへのスキーマ依存パスでは内部要素の名前が使用されないことに注意してください。

    これに対して、右側の [要素] 列には、同じ項目が $3:Doctor/$3:Name として表示されます。この列には、DOM スタイル・パスのパス・ユニットが表示されます。

繰り返しフィールド

指定された要素が複数回生じる場合、[名前] 列には要素名の末尾に括弧 () が表示されます。例えば、前の図の FavoriteColors() 行を参照してください。

[タイプ] 列と [要素] 列には、要素の繰り返し可能な回数が指定されます。この例の場合、要素は 5 回繰り返すことができます。[タイプ] 列の括弧に数字が表示されていない場合、要素は何回でも繰り返すことができます。

重複名

XML スキーマに含まれる同じレベルの複数の要素が同じ名前を持ち、かつそれぞれのタイプが異なる場合は、そのレベルで一意の名前にする必要があるため、_2_3 (以下同様) が Ensemble によって付加されます。この処理は、スキーマ依存パスにのみ適用されます。例えば、<Contact> という名前の 2 つの要素を含む <Person> 要素を定義するスキーマについて考えてみましょう。1 つは <Phone> タイプ、もう 1 つは <Assistant> タイプとします。Ensemble では、<Person> 要素のスキーマが以下のように表示されます。

generated description: duplicate names

同様に、このスキーマに含まれる同じレベルの複数の要素が同じ名前を持ち、かつそれぞれが異なるネームスペースに含まれる場合は、そのレベルで一意の名前にする必要があるため、_2_3 (以下同様) が Ensemble によって付加されます。この処理は、スキーマ依存パスにのみ適用されます。

Choice 構造

一部のスキーマには、下の例のように、<choice> 構造が含まれています。

<xsd:choice>
  <xsd:element name="OptionA"  type="my:OptionType"/>
  <xsd:element name="OptionB"  type="my:OptionType"/>
  <xsd:element name="OptionC"  type="my:OptionType"/>
</xsd:choice>

Ensemble は、この構造を 2 種類のパスとして別々に表現します。以下に例を示します。

generated description: path choice1

スキーマ依存パスの場合は、[名前] に <choice> 構造の一般名が、[タイプ] 列に数値プレースホルダが表示されます。[要素] 列には何も表示されません。

choice をクリックすると、以下のように表示されます。

generated description: path choice2

この場合は、これらのページから、以下のパスを使用して OptionB にアクセスできることがわかります。

スキーマ依存パス (部分) ...Parent.choice.OptionB
DOM スタイル・パス (部分) /.../Parent/OptionB

参照によって追加されたグループ

スキーマには、ref 属性経由で追加された <group> を含めることができます。以下に例を示します。

<s01:complexType name="Patient">
   <s01:sequence>
      <s01:element name="Name" type="s01:string" minOccurs="0"/>
      <s01:element name="Gender" type="s01:string" minOccurs="0"/>
      <s01:element name="BirthDate" type="s01:date" minOccurs="0"/>
      <s01:element name="HomeAddress" type="s02:Address" minOccurs="0"/>
      <s01:element name="FavoriteColors"
        type="s02:ArrayOfFavoriteColorsItemString" minOccurs="0"/>
      <s01:element name="Container" type="s02:ContainerType" minOccurs="0"/>
      <s01:element name="LatestImmunization" type="s02:Immunization" minOccurs="0"/>
      <s01:element ref="s02:Insurance" minOccurs="0"/>
      <s01:group ref="s02:BoilerPlate" minOccurs="1" maxOccurs="1"/>
   </s01:sequence>
...
<s01:group name="BoilerPlate">
   <s01:sequence>
      <s01:element name="One" type="s01:string"/>
      <s01:element name="Two" type="s01:string"/>
      <s01:element name="Three" type="s01:string"/>
   </s01:sequence>
</s01:group>

Ensemble は、この構造を 2 種類のパスとして別々に表現します。以下に例を示します。

generated description: path refgroup1

スキーマ依存パスの場合は、[名前] にグループの名前が、[タイプ] 列に数値プレースホルダが表示されます。[要素] 列にもグループの名前が表示されます。

BoilerPlate をクリックすると、以下のように表示されます。

generated description: path refgroup2

この場合は、これらのページから、以下のパスを使用して Two にアクセスできることがわかります。

スキーマ依存パス (部分) ...Patient.BoilerPlate.Two
DOM スタイル・パス (部分) /.../$2:Patient/$2:Two
FeedbackOpens in a new tab