WebSphere Enterprise Service Bus for z/OS バージョン 6.2.0 オペレーティング・システム: z/OS


モデル・グループ・サポート (all、choice、sequence、および group 参照)

SDO 仕様は、モデル・グループ (all、choice、sequence、および group 参照) を正しい位置に展開して、タイプやプロパティーを記述しないことを必要としています。

基本的に、これは同じ収容構造の中にある構造は、すべて「フラット化される」ことを意味しています。この「フラット化」により、子構造は同じレベルに置かれます。このため、フラット化されたデータから構造が派生した SDO 内で、名前の重複の問題が生じる可能性があります。 XSD がグループをフラット化しない場合でも、さまざまな親に含まれている重複が個別に存在します。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 targetNamespace="http://MultipleGroup">
  <xsd:complexType name="MultipleGroup">
    <xsd:sequence>
      <xsd:choice>
        <xsd:element name="option1" type="xsd:string"/>
        <xsd:element name="option2" type="xsd:string"/>
      </xsd:choice>
      <xsd:element name="separator" type="xsd:string"/>
      <xsd:choice>
        <xsd:element name="option1" type="xsd:string"/>
        <xsd:element name="option2" type="xsd:string"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

option1 と option2 の複数のオカレンスは異なる choice ブロックに含まれており、それらの間には分離するエレメントさえあるため、XSD および XML は、それらを区別するのに何の問題もありません。しかし、SDO によってこれらのグループがフラット化されると、すべてのオプション・プロパティーは MultipleGroup という同じコンテナーに含まれます。

たとえ重複する名前がなくても、これらのグループをフラット化したことによる意味構造の問題もあります。例えば、以下の XSD を考えてみましょう。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 targetNamespace="http://SimpleChoice">
  <xsd:complexType name="SimpleChoice">
    <xsd:sequence>
      <xsd:choice>
        <xsd:element name="option1" type="xsd:string"/>
        <xsd:element name="option2" type="xsd:string"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

重複する名前の変更や XSD への特別な注釈の追加をユーザーに求めるのは実際的ではありません。なぜなら、多くの場合、規格や業界のスキーマのように、ユーザーは作業に使用している XSD を制御できないからです。

すべてのプロパティーに一貫性を持たせるために、ビジネス・オブジェクトは、重複した名前を持つプロパティーの個々のオカレンスに XPath を通じてアクセスするメソッドを含んでいます。EMF 命名規則によると、重複するプロパティー名が検出された場合、それらの名前に次の未使用の数字が付加されます。したがって、例えば次の XSD の場合:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 targetNamespace="http://TieredGroup">
  <xsd:complexType name="TieredGroup">
    <xsd:sequence>
      <xsd:choice minOccurs="0">
        <xsd:sequence>
          <xsd:element name="low" minOccurs="1" 
					maxOccurs="1" type="xsd:string"/>
          <xsd:choice minOccurs="0">
            <xsd:element name="width" minOccurs="0" 
						maxOccurs="1" type="xsd:string"/>
            <xsd:element name="high" minOccurs="0" 
						maxOccurs="1" type="xsd:string"/>
          </xsd:choice>
        </xsd:sequence>
        <xsd:element name="high" minOccurs="1" 
				maxOccurs="1" type="xsd:string"/>
        <xsd:sequence>
          <xsd:element name="width" minOccurs="1" 
					maxOccurs="1" type="xsd:string"/>
          <xsd:element name="high" minOccurs="0" 
					maxOccurs="1" type="xsd:string"/>
        </xsd:sequence>
        <xsd:sequence>
          <xsd:element name="center" minOccurs="1" 
					maxOccurs="1" type="xsd:string"/>
          <xsd:element name="width" minOccurs="0" 
					maxOccurs="1" type="xsd:string"/>
        </xsd:sequence>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

先行する XSD は次の DataObject モデルを生成します。

DataObject - TieredGroup
	Property[0] - low - string
	Property[1] - width - string
	Property[2] - high - string
	Property[3] - high1 - string
	Property[4] - width1 - string
	Property[5] - high2 - string
	Property[6] - center - string
	Property[7] - width2 - string

ここで、widthwidth1、および width2 は width というプロパティーの名前で、この XSD 内の最初のものから始まります。highhigh1high2 も同様です。

これらの新しいプロパティー名は、参照と XPath に使用される名前にすぎず、シリアライズされた内容に影響しません。シリアライズされた XML 内に現れるこれらの各プロパティーの「真の」名前は、XSD 内で指定された値です。したがって、次の XML インスタンスの場合:

<?xml version="1.0" encoding="UTF-8"?>
<p:TieredGroup xsi:type="p:TieredGroup"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://TieredGroup">
  <width>foo</width>
  <high>bar</high>
</p:TieredGroup>

これらのプロパティーにアクセスするためには、以下のコードを使用します。

	DataObject tieredGroup = ...

	// 「foo」を表示する
	System.out.println(tieredGroup.get("width1"));

	// 「bar」を表示する
	System.out.println(tieredGroup.get("high2"));

concept 概念トピック

ご利用条件 | フィードバック


タイムスタンプ・アイコン 最終更新: 2010/07/05


http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r2mx/topic//com.ibm.websphere.wesb620.zseries.doc/doc/cbo_modelgroupsupport.html
Copyright IBM Corporation 2005, 2010. All Rights Reserved.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています (http://www.eclipse.org)。