Oracle® Fusion Middleware Oracle Business Data Synchronization Server管理者ガイド 11gリリース1 (11.1.1.9.0) B69393-03 |
|
![]() 前 |
![]() 次 |
この章では、ハブ・サーバーとPIMサーバー間のレコードの変換方法について説明します。
この章の内容は次のとおりです。
異なるタイプのPIMサーバー間の情報交換を有効にするために、ハブでは、各コネクタ・ドメイン・タイプに対するスキーマ表現がスキーマ(XSD)ファイルに定義されます。PIMサーバーから抽出されてハブに戻されるデータは、ハブ・スキーマで定義されている書式に変換されます。コネクタは、インバウンドとアウトバウンドの両方のトランザクション・データをハブXML書式およびPIMサーバーの書式に変換します。抽出されるすべてのインバウンド・レコードについて、コネクタでは、ネイティブPIM API書式から、コネクタ・ドメインに定義されているPIM XMLスキーマに準拠するXMLメッセージに変換する必要があります。コネクタは、PIM XMLメッセージを作成した後、XSLTを使用してメッセージをハブXMLメッセージに変換します。このメッセージは、提供されたハブXMLスキーマに準拠します。
ハブ・ドメインとコネクタ・ドメイン間でのデータのマッピングを有効にするために、コネクタのトランスフォーマ・コンポーネントには、ハブ・ドメインとコネクタ・ドメインの両方のスキーマおよびXSLTドキュメントが含まれています。付録C「コネクタAPI」で説明されているように、UpsertRecord
は、ハブとコネクタ間を移動するハブ・レコードの表現です。このデータ構造には、ハブ・レコードのXML表現を格納するhubRecordData
と呼ばれるメンバーが含まれています。ハブ・レコードのXMLはハブ・ドメインのXSDに準拠する必要があるため、コネクタ開発者は次のものを作成する必要があります。
ハブ・ドメインにマップする対応するコネクタ・ドメインのXSD
ハブXML表現のレコードをPIM XML表現のレコードに変換するためのXSL定義
PIM XML表現のレコードをハブXML表現のレコードに変換するためのXSL定義
PIMサーバーからの抽出時に、コネクタは、抽出された各レコードが最初にPIM XMLメッセージに変換されていることを確認する必要があります。次に、XSLTを使用してPIM XMLからハブXMLにメッセージを変換します。PIMサーバーにプッシュ(つまり、Create
およびUpdate
操作)されるレコード・イベントに対して、コネクタはXLSTを使用してハブXMLレコードをPIM XMLレコードに変換してからPIMサーバーに書き込みます。
BDSSコネクタは、レコード変換時にハブとコネクタのドメイン・スキーマへの参照が含まれているXLSTドキュメントを適用することで、ハブとコネクタの間で受け渡されるメッセージに含まれているレコード・データの堅牢なドキュメント検証を提供します。
ドメイン・スキーマには、各ドメイン・フィールドに定義される次の属性があります。
スキーマ・データ型
コネクタは、次のスキーマ・データ型をサポートする必要があります。
W3Cスキーマ・データ型
ハブ・スキーマ・データ型
コネクタ・スキーマ・データ型
PIMフィールド・クラス
コネクタは、変換時またはフローの制御にPIMフィールド・クラスを使用できます。詳細は、第C.1.4項「フィールド・クラス」を参照してください。
スキーマには、次のスキーマ・データ型を使用します。
ハブで使用されるデータ型は、ネイティブなW3C XMLスキーマ(WXS)データ型のサブセットです。これらのデータ型はhttp://www.w3.org
で定義されています。コネクタは、そのスキーマ・ドキュメントにWXSデータ型を使用します。
ハブ・スキーマで使用されるネイティブなW3C XMLスキーマ(WXS)データ型のサブセットは、次のとおりです。
xsd:string
xsd:boolean
xsd:dateTime
注意: 通常、xsd:dateTime ではISO 8601の日時表現を使用できるため、多様な日時をすべて標準的な協定世界時(UTC)で指定できます。
エンジンとコネクタの間で受け渡されるすべての日時ハブ・フィールドは、次のようにする必要があります。
各PIM日時フィールドにUTC日時とUTCオフセットの両方を提供することで、受信コネクタは、PIMサーバーがローカル時間を使用する場合はローカル時間を計算し、PIMサーバーがフィールドにUTC日時を使用する場合はUTC日時を使用できます。 |
xsd:nonNegativeInteger
xsd:unsignedLong
xsd:positiveInteger
ハブ・ドメインは、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
各コネクタは、PIMサーバーのドメイン・スキーマを定義するための一連のスキーマ・データ型を公開しています。これらのデータ型には、次の制限が適用されます。
コネクタ・ドメインに追加される新規のコネクタ・ドメイン・フィールドは、対応するコネクタで公開されている単一のスキーマ・データ型のみに割り当てる必要があります。
コネクタで公開されているスキーマ・データ型は、変更、制限または拡張できません。これらは変更しないでください。
コネクタは、ハブによって提供される次のスキーマを処理する必要があります。
ハブでは、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>
ハブは、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>
次の理由でデータの消失が発生する可能性があります。
ハブとPIMのXSDスキーマのデータ・モデルが同じデータのセットで表現できない場合は、データの消失が発生する可能性があります。たとえば、ハブ・タスク・ドメイン・フィールド(フィールドX)が、PIMサーバーBのタスク・ドメイン・スキーマで表現されず、PIMサーバーAから抽出されたハブ・タスク・レコードにハブ・フィールドXの値が含まれている場合、同期化では、PIMサーバーAからPIMサーバーBにタスク・レコードがそのまま伝播されます。ただし、ハブ・フィールドXの値は、PIMサーバーBに伝播されません。PIMサーバーBからPIMサーバーAへのタスク・レコードのその後の更新では、PIMサーバーAからフィールドXのデータが削除されます。この消失は、PIMサーバーBからの更新レコードではデータを入手できないために発生します。
データの消失によって、制約ファセットの異なる様々なデータ型の間で変換が発生する可能性があります。データが消失する可能性があるデータ型ファセットには、次のものがあります。
対応する同じフィールドのフィールド長がハブ・ドメインとコネクタ・ドメインで異なる場合は、データ消失が発生する可能性があります。たとえば、PIMサーバーAがPIMサーバーBよりタスク・コメント・テキストを多く格納できる場合、タスク・レコードの同期化により、コメント・テキストが、PIMサーバーBで許可される長さに切り捨てられます。
PIMサーバーまたはコネクタが、データ値の内容を変更するデータ・パターンまたはデータ値の制限を適用すると、データが予想外に変更されたり、内容が消失する可能性があります。たとえば、PIMサーバーAのコネクタが、電話番号に顧客テキスト・メモが追加されたPIM連絡先レコードを抽出するとします。同期化ではレコードがそのままPIMサーバーBに伝播されますが、PIMサーバーBのビジネス・ロジックにより、PIMサーバーBにレコードが書き込まれるときにテキスト・メモは除外されます。このレコードに対するPIMサーバーBからのその後の更新では、PIMサーバーAの連絡先レコードからテキスト・メモが削除されます。
列挙の精度は、PIMサーバーまたはハブ・ドメインから入手可能な最も大まかなレベルに緩和されます。たとえば、PIMサーバーAに高と低のタスク優先度レベルがあり、PIMサーバーBに高、中および低のタスク優先度レベルがある場合、2つのPIMサーバー間で同期化が行われると、すべてのタスク優先度レベルの精度は、PIMサーバーAの低い精度になります。
PIMサーバーのビジネス・ロジックによって不要な空白が切り捨てられる場合は、コネクタによるXSLT変換時または同期化の際に空白が切り捨てられる可能性があります。たとえば、PIMサーバーAは空白を削除し、PIMサーバーBは空白を削除しないと仮定します。2つのPIMサーバーで同期化が行われると、PIMサーバーAからの更新のために、PIMサーバーBの空白は削除されます。
データが消失する可能性があるリスト変換のカテゴリには、次のものがあります。
通常、データの消失は、ソース・ドメインからの値のリストまたはセットがターゲット・ドメインで表現できない場合に発生する可能性があります。
複数値フィールドは、トークンのリスト(つまり値リスト)が含まれている単一のフィールドです。このデータ型の一例としてExchangeカテゴリ・フィールドがあります。ソース・ドメイン・フィールドからの値リスト全体をターゲット・ドメインで表現できない場合は、データの消失が発生します。たとえば、Microsoft Exchangeからのタスク・カテゴリ・フィールドに複数値トークンが存在し、ハブ・タスク・ドメインで表現可能な値が、対応するカテゴリ・フィールドの単一値のみである場合は、ハブ・スキーマ書式への変換で1つのトークン値以外のすべてが削除されます。
フィールド・グループは、関連するフィールドの集合またはグループです。グループのフィールド数がハブとPIMのXSDスキーマ間で異なる場合は、情報の消失が発生する可能性があります。たとえば、PIMサーバーAでは3行の住所行が許可され、PIMサーバーBでは4行の住所行が許可されている場合があります。これはデータの消失が必ずしも発生することを意味しているわけではありませんが、データの消失を防止するために特別な変換処理が必要になる可能性があります。
データが消失するレコード重複のタイプには、次のものがあります。
エンジンによる重複のマージ: エンジンが複数のレコードからの変更をマージしたときに発生する重複によって、重複するマージの競合で優先されないレコードにデータの消失が発生する可能性があります。
コネクタPIM重複: コネクタが、PIMレコードの新しい変更と重複する変更をPIMサーバーに書き込むときに発生する重複によって、データが消失する可能性があります。ある時点で変更が上書きされてデータが消失します。