SQLXML 4.0 の DiffGram の概要
ここでは、DiffGram の概要を説明します。
DiffGram の書式
一般的な DiffGram の書式は次のとおりです。
<?xml version="1.0"?>
<diffgr:diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DataInstance>
...
</DataInstance>
[<diffgr:before>
...
</diffgr:before>]
[<diffgr:errors>
...
</diffgr:errors>]
</diffgr:diffgram>
DiffGram の書式は次のブロックで構成されています。
- <DataInstance>
この要素の名前 DataInstance は、このドキュメントでの説明用に使用するものです。たとえば、DiffGram が .NET Framework で 1 つのデータセットを基に生成される場合、この要素の名前にはデータセットの Name プロパティの値を使用します。このブロックには、変更後のすべての関連データを指定します。変更されていないデータも指定できます。DiffGram の処理ロジックでは、このブロックで diffgr:hasChanges 属性が指定されていない要素は無視されます。
- <diffgr:before>
省略可能なブロックです。更新または削除する必要がある元のレコード インスタンス (要素) を指定します。DiffGram で変更 (更新または削除) されるすべてのデータベース テーブルは、<before> ブロックの最上位要素に指定する必要があります。
- <diffgr:errors>
省略可能なブロックです。DiffGram の処理ロジックでは無視されます。
DiffGram の注釈
DiffGram の注釈は、DiffGram の名前空間 "urn:schemas-microsoft-com:xml-diffgram-01" で定義します。
- id
この属性は、<before> と <DataInstance> ブロック内の要素を組み合わせるために使用します。
- hasChanges
挿入または更新操作の場合、DiffGram ではこの属性を値 inserted または modified と共に指定する必要があります。この属性が存在しない場合、処理ロジックで <DataInstance> 内の対応する要素は無視され、更新は実行されません。実際のサンプルについては、「DiffGram の例 (SQLXML 4.0)」を参照してください。
- parentID
この属性は、DiffGram の要素間の親子リレーションシップを指定するときに使用します。この属性は <before> ブロックのみで指定します。この属性は更新の適用時に SQLXML で使用されます。親子リレーションシップは、DiffGram の要素の処理順序を決定するために使用されます。
DiffGram の処理ロジックについて
DiffGram の処理ロジックでは、一定の規則に従い、挿入、更新、削除のうちどの操作であるかが判断されます。次の表は、この規則についてまとめたものです。
操作 | 説明 |
---|---|
挿入 |
<DataInstance> ブロックに指定されている要素に対応する要素が <before> ブロックになく、その要素に diffgr:hasChanges 属性が指定されている場合 (diffgr:hasChanges=inserted)、DiffGram は挿入操作を示します。この場合、DiffGram では <DataInstance> ブロックで指定されたレコード インスタンスがデータベースに挿入されます。 diffgr:hasChanges 属性を指定しない場合、処理ロジックでこの要素は無視され、挿入は実行されません。実際のサンプルについては、「DiffGram の例 (SQLXML 4.0)」を参照してください。 |
更新 |
<DataInstance> ブロックに指定されている要素に対応する要素が <before> ブロックにもある場合 (両方の要素に同じ値の diffgr:id 属性が指定されている場合) で、<DataInstance> ブロックの要素に diffgr:hasChanges 属性が値 modified と共に指定されている場合、DiffGram は更新操作を示します。 <DataInstance> ブロックの要素に diffgr:hasChanges 属性が指定されていない場合、処理ロジックではエラーが返されます。実際のサンプルについては、「DiffGram の例 (SQLXML 4.0)」を参照してください。 <before> ブロックで diffgr:parentID が指定されている場合は、parentID で指定される要素の親子リレーションシップによって、レコードの更新順序が決定されます。 |
削除 |
<before> ブロックに指定されている要素に対応する要素が <DataInstance> ブロックにない場合、DiffGram は削除操作を示します。この場合、DiffGram では <before> ブロックで指定されたレコード インスタンスがデータベースから削除されます。実際のサンプルについては、「DiffGram の例 (SQLXML 4.0)」を参照してください。 <before> ブロックで diffgr:parentID が指定されている場合は、parentID で指定される要素の親子リレーションシップによって、レコードの削除順序が決定されます。 |
メモ : |
---|
DiffGram にパラメータを渡すことはできません。 |