ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Data Synchronization Server管理者ガイド
11g リリース1 (11.1.1.7.0)
B69393-02
  目次へ移動
目次

前
 
次
 

8 ハブ・フィールドへのコネクタ・フィールドのマッピング

この章では、ハブ・サーバーとPIMサーバー間のレコードの変換方法について説明します。

この章の構成は、次のとおりです。

8.1 データ変換の概要

異なるタイプのPIMサーバー間の情報交換を有効にするために、ハブでは、各コネクタ・ドメイン・タイプに対するスキーマ表現がスキーマ(XSD)ファイルに定義されます。PIMサーバーから抽出されてハブに戻されるデータは、ハブ・スキーマで定義されている書式に変換されます。コネクタは、インバウンドとアウトバウンドの両方のトランザクション・データをハブXML書式およびPIMサーバーの書式に変換します。抽出されるすべてのインバウンド・レコードについて、コネクタでは、ネイティブPIM API書式から、コネクタ・ドメインに定義されているPIM XMLスキーマに準拠するXMLメッセージに変換する必要があります。コネクタは、PIM XMLメッセージを作成した後、XSLTを使用してメッセージをハブXMLメッセージに変換します。このメッセージは、提供されたハブXMLスキーマに準拠します。

ハブ・ドメインとコネクタ・ドメイン間でのデータのマッピングを有効にするために、コネクタのトランスフォーマ・コンポーネントには、ハブ・ドメインとコネクタ・ドメインの両方のスキーマおよびXSLTドキュメントが含まれています。付録C「コネクタAPI」で説明されているように、UpsertRecordは、ハブとコネクタ間を移動するハブ・レコードの表現です。このデータ構造には、ハブ・レコードのXML表現を格納するhubRecordDataと呼ばれるメンバーが含まれています。ハブ・レコードのXMLはハブ・ドメインのXSDに準拠する必要があるため、コネクタ開発者は次のものを作成する必要があります。

PIMサーバーからの抽出時に、コネクタは、抽出された各レコードが最初にPIM XMLメッセージに変換されていることを確認する必要があります。次に、XSLTを使用してPIM XMLからハブXMLにメッセージを変換します。PIMサーバーにプッシュ(つまり、CreateおよびUpdate操作)されるレコード・イベントに対して、コネクタはXLSTを使用してハブXMLレコードをPIM XMLレコードに変換してからPIMサーバーに書き込みます。

8.2 ドメイン・スキーマについて

BDSSコネクタは、レコード変換時にハブとコネクタのドメイン・スキーマへの参照が含まれているXLSTドキュメントを適用することで、ハブとコネクタの間で受け渡されるメッセージに含まれているレコード・データの堅牢なドキュメント検証を提供します。

ドメイン・スキーマには、各ドメイン・フィールドに定義される次の属性があります。

8.2.1 スキーマ・データ型

スキーマには、次のスキーマ・データ型を使用します。

8.2.1.1 W3Cスキーマ・データ型

ハブで使用されるデータ型は、ネイティブなW3C XMLスキーマ(WXS)データ型のサブセットです。これらのデータ型はhttp://www.w3.orgで定義されています。コネクタは、そのスキーマ・ドキュメントにWXSデータ型を使用します。

ハブ・スキーマで使用されるネイティブなW3C XMLスキーマ(WXS)データ型のサブセットは、次のとおりです。

  • xsd:string

  • xsd:boolean

  • xsd:dateTime


    注意:

    通常、xsd:dateTimeではISO 8601の日時表現を使用できるため、多様な日時をすべて標準的な協定世界時(UTC)で指定できます。

    エンジンとコネクタの間で受け渡されるすべての日時ハブ・フィールドは、次のようにする必要があります。

    1. UTC時間でYYYY-MM-DDhh:mm:ss.fffの書式である必要があります。この書式の詳細は次のとおりです。

      • YYYYは4桁の年(2007など)

      • MMは月(1月は01、12月は12)

      • DDは日(01から始まる)

      • hhは24時間制での時間(00から23)

      • mmは時間の分(00から59)

      • ssは分の秒(00から59)

      • fffは小数秒(つまりミリ秒、000から999)

    2. すべての日時PIMフィールド値には、対応するUTCオフセット・フィールド(+HH:MMまたは-HH:MMの書式)が必要です。

      • +は、正のUTCオフセットを意味します。

      • -は、負のUTCオフセットを意味します。

      • HHは24時間制でのUTCオフセット時間(00から23)。

      • MMはUTCオフセット分(00から59)。

    各PIM日時フィールドにUTC日時とUTCオフセットの両方を提供することで、受信コネクタは、PIMサーバーがローカル時間を使用する場合はローカル時間を計算し、PIMサーバーがフィールドにUTC日時を使用する場合はUTC日時を使用できます。


  • xsd:nonNegativeInteger

  • xsd:unsignedLong

  • xsd:positiveInteger

8.2.1.2 ハブ・スキーマ・データ型

ハブ・ドメインは、W3Cスキーマ・データ型を使用して作成されます。


注意:

ハブ・スキーマまたはハブ・スキーマ・データ型を変更する場合は、対応する変更を各コネクタのXSLTドキュメントにも適用する必要があります。ハブ・スキーマ表現とPIMスキーマ表現の間で正しい変換が行われるように、XSLTドキュメントを変更する必要があります。


ハブ定義のデータ型

ネイティブなW3C XMLスキーマ(WXS)データ型に加え、BDSSには、電話番号や住所などの一般的なPIMデータ型のXSDが用意されています。これらのデータ型には基本的な制限がいくつかあります。たとえば、例8-1に示すように、HubPhoneNumberは単純な文字列に制限されます。

例8-1 ハブ定義のデータ型に対する事前定義の制限

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
              xmlns="http://xmlns.oracle.com/pss/hub/ContactDomain"
              elementFormDefault="qualified">
   <xsd:simpleType name="HubPhoneNumber">
    <xsd:restriction base="xsd:string"></xsd:restriction>
   </xsd:simpleType>
</xsd:schema>

BDSSでは他の制限は定義していませんが、必要に応じて、より詳細な制限を定義できます。例8-2の太字は、HubPhoneNumberデータ型の長さと書式に対する追加の制限を示しています。

例8-2 ハブ定義のデータ型に対する追加の制限

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns="http://xmlns.oracle.com/pss/hub/ContactDomain"
             elementFormDefault="qualified">
   <xsd:simpleType name="HubPhoneNumber">
    <xsd:restriction base="xsd:string"></xsd:restriction>
<xsd:pattern value="([0-9]){0,2}\([0-9]{3}\)[0-9]{3}\-[0-9]{4}( Ext:[0-9]{4})?" />
   </xsd:simpleType>
</xsd:schema>

ハブ定義のデータ型には、次のものが含まれます。

  • xsd:HubPercent

  • xsd:HubUnsignedLong

  • xsd:HubTokens

  • xsd:HubUtcOffest

  • xsd:HubPhoneNumber

  • xsd:HubAddress

  • xsd:HubState

  • xsd:HubCountry

  • xsd:HubEmailAddress

  • xsd:HubNamePrefix

  • xsd:HubNameSuffix

8.2.1.3 コネクタ・スキーマ・データ型

各コネクタは、PIMサーバーのドメイン・スキーマを定義するための一連のスキーマ・データ型を公開しています。これらのデータ型には、次の制限が適用されます。

  • コネクタ・ドメインに追加される新規のコネクタ・ドメイン・フィールドは、対応するコネクタで公開されている単一のスキーマ・データ型のみに割り当てる必要があります。

  • コネクタで公開されているスキーマ・データ型は、変更、制限または拡張できません。これらは変更しないでください。

8.2.2 ハブ・スキーマのドキュメント

コネクタは、ハブによって提供される次のスキーマを処理する必要があります。

8.2.2.1 ハブ・スキーマ・タイプのライブラリ

ハブでは、HubTypeLibrary.xsdドキュメントにカスタムXMLスキーマ・タイプのライブラリを定義します(例8-3)。これらのスキーマ・タイプは、ハブまたはコネクタのドメイン・スキーマに対して使用可能です。

例8-3 カスタムXMLスキーマ・タイプ

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://xmlns.oracle.com/pss/hub/TypeLibrary"
            elementFormDefault="qualified">
  <xsd:simpleType name="HubPercent">
    <xsd:restriction base="xsd:positiveInteger">
      <xsd:maxInclusive value="100"/>
      <xsd:minInclusive value="0"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="HubUnsignedLong">
    <xsd:annotation>
      <xsd:documentation>Specifies an amount of work in terms of minutes.</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:unsignedLong"/>
  </xsd:simpleType>
  <xsd:complexType name="HubTokens">
    <xsd:sequence>
      <xsd:element name="Token" maxOccurs="unbounded" nillable="false"
                   minOccurs="0" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="HubUtcOffset">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value='[+|-][0-9]{2}:[0-9]{2}'/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>

8.2.2.2 ハブ・タスク・スキーマ

ハブは、XMLスキーマをハブとコネクタ間でタスク・レコード・データを受け渡す中心的なデータ書式として定義します。スキーマはHubTask.xsdドキュメントに定義されます(例8-4)。

例8-4 ハブ・タスクXMLスキーマのリスト

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://xmlns.oracle.com/pss/hub/TaskDomain"
            targetNamespace="http://xmlns.oracle.com/pss/hub/TaskDomain"
            elementFormDefault="qualified">
  <xsd:include schemaLocation="HubTypeLibrary.xsd"/>
  <xsd:simpleType name="HubTaskPriority">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="High"/>
      <xsd:enumeration value="MediumHigh"/>
      <xsd:enumeration value="Medium"/>
      <xsd:enumeration value="MediumLow"/>
      <xsd:enumeration value="Low"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="HubTaskStatus">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="NotStarted"/>
      <xsd:enumeration value="InProgress"/>
      <xsd:enumeration value="Completed"/>
      <xsd:enumeration value="WaitingOnSomeoneElse"/>
      <xsd:enumeration value="Deferred"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:element name="HubTaskDomain">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="ActualWork" type="xsd:unsignedLong" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="BillingInfo" type="xsd:string" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="Category" type="HubTokens" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="Comments" type="xsd:string" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="Companies" type="HubTokens" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="CompletedFlag" type="xsd:boolean" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="DateCompleted" type="xsd:dateTime" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="DateCompletedUtcOffset" type="HubUtcOffset" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="DueDate" type="xsd:dateTime" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="DueDateUtcOffset" type="HubUtcOffset" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="Mileage" type="xsd:string" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="PercentComplete" type="HubPercent"/>
        <xsd:element name="Priority" type="HubTaskPriority"/>
        <xsd:element name="Private" type="xsd:boolean"/>
        <xsd:element name="Reminder" type="xsd:boolean" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="ReminderOffset" type="xsd:dateTime" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="ReminderOffsetUtcOffset" type="HubUtcOffset" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="StartDate" type="xsd:dateTime"/>
        <xsd:element name="StartDateUtcOffset" type="HubUtcOffset" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="Status" type="HubTaskStatus"/>
        <xsd:element name="Subject" type="xsd:string"  minOccurs="0"
                     maxOccurs="1" nillable="true"/>
        <xsd:element name="TotalWork" type="HubUnsignedLong" minOccurs="0"
                     maxOccurs="1" nillable="true"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

8.3 同期化に起因するデータの副作用

次の理由でデータの消失が発生する可能性があります。

8.3.1 データ・モデルの不適合

ハブとPIMのXSDスキーマのデータ・モデルが同じデータのセットで表現できない場合は、データの消失が発生する可能性があります。たとえば、ハブ・タスク・ドメイン・フィールド(フィールドX)が、PIMサーバーBのタスク・ドメイン・スキーマで表現されず、PIMサーバーAから抽出されたハブ・タスク・レコードにハブ・フィールドXの値が含まれている場合、同期化では、PIMサーバーAからPIMサーバーBにタスク・レコードがそのまま伝播されます。ただし、ハブ・フィールドXの値は、PIMサーバーBに伝播されません。PIMサーバーBからPIMサーバーAへのタスク・レコードのその後の更新では、PIMサーバーAからフィールドXのデータが削除されます。この消失は、PIMサーバーBからの更新レコードではデータを入手できないために発生します。

8.3.2 データ型ファセットの相違

データの消失によって、制約ファセットの異なる様々なデータ型の間で変換が発生する可能性があります。データが消失する可能性があるデータ型ファセットには、次のものがあります。

8.3.2.1 長さ

対応する同じフィールドのフィールド長がハブ・ドメインとコネクタ・ドメインで異なる場合は、データ消失が発生する可能性があります。たとえば、PIMサーバーAがPIMサーバーBよりタスク・コメント・テキストを多く格納できる場合、タスク・レコードの同期化により、コメント・テキストが、PIMサーバーBで許可される長さに切り捨てられます。

8.3.2.2 パターン

PIMサーバーまたはコネクタが、データ値の内容を変更するデータ・パターンまたはデータ値の制限を適用すると、データが予想外に変更されたり、内容が消失する可能性があります。たとえば、PIMサーバーAのコネクタが、電話番号に顧客テキスト・メモが追加されたPIM連絡先レコードを抽出するとします。同期化ではレコードがそのままPIMサーバーBに伝播されますが、PIMサーバーBのビジネス・ロジックにより、PIMサーバーBにレコードが書き込まれるときにテキスト・メモは除外されます。このレコードに対するPIMサーバーBからのその後の更新では、PIMサーバーAの連絡先レコードからテキスト・メモが削除されます。

8.3.2.3 列挙

列挙の精度は、PIMサーバーまたはハブ・ドメインから入手可能な最も大まかなレベルに緩和されます。たとえば、PIMサーバーAに高と低のタスク優先度レベルがあり、PIMサーバーBに高、中および低のタスク優先度レベルがある場合、2つのPIMサーバー間で同期化が行われると、すべてのタスク優先度レベルの精度は、PIMサーバーAの低い精度になります。

8.3.2.4 空白

PIMサーバーのビジネス・ロジックによって不要な空白が切り捨てられる場合は、コネクタによるXSLT変換時または同期化の際に空白が切り捨てられる可能性があります。たとえば、PIMサーバーAは空白を削除し、PIMサーバーBは空白を削除しないと仮定します。2つのPIMサーバーで同期化が行われると、PIMサーバーAからの更新のために、PIMサーバーBの空白は削除されます。

8.3.3 リスト変換

データが消失する可能性があるリスト変換のカテゴリには、次のものがあります。

通常、データの消失は、ソース・ドメインからの値のリストまたはセットがターゲット・ドメインで表現できない場合に発生する可能性があります。

8.3.3.1 複数値フィールド

複数値フィールドは、トークンのリスト(つまり値リスト)が含まれている単一のフィールドです。このデータ型の一例としてExchangeカテゴリ・フィールドがあります。ソース・ドメイン・フィールドからの値リスト全体をターゲット・ドメインで表現できない場合は、データの消失が発生します。たとえば、Microsoft Exchangeからのタスク・カテゴリ・フィールドに複数値トークンが存在し、ハブ・タスク・ドメインで表現可能な値が、対応するカテゴリ・フィールドの単一値のみである場合は、ハブ・スキーマ書式への変換で1つのトークン値以外のすべてが削除されます。

8.3.3.2 フィールド・グループ

フィールド・グループは、関連するフィールドの集合またはグループです。グループのフィールド数がハブとPIMのXSDスキーマ間で異なる場合は、情報の消失が発生する可能性があります。たとえば、PIMサーバーAでは3行の住所行が許可され、PIMサーバーBでは4行の住所行が許可されている場合があります。これはデータの消失が必ずしも発生することを意味しているわけではありませんが、データの消失を防止するために特別な変換処理が必要になる可能性があります。

8.3.4 レコードの重複

データが消失するレコード重複のタイプには、次のものがあります。

  • エンジンによる重複のマージ: エンジンが複数のレコードからの変更をマージしたときに発生する重複によって、重複するマージの競合で優先されないレコードにデータの消失が発生する可能性があります。

  • コネクタPIM重複: コネクタが、PIMレコードの新しい変更と重複する変更をPIMサーバーに書き込むときに発生する重複によって、データが消失する可能性があります。ある時点で変更が上書きされてデータが消失します。