次の方法で共有


DiffGram

DiffGram は、データ要素の現在のバージョンと元のバージョンを識別する XML 形式です。DataSet では、DataSet の内容を読み込んで永続化するため、およびネットワーク接続経由で転送する場合にこの内容をシリアル化するために、DiffGram 形式が使用されます。DiffGram として作成された DataSet は、スキーマを使用せずに DataSet の内容を正確に再作成するために必要なすべての情報を DiffGram に格納します。このような情報には、Original 行バージョンと Current 行バージョンの両方の列値、行エラー情報、行順序などがあります。

DiffGram 形式は .NET Framework によって使用されますが、他のプラットフォームで .NET Framework アプリケーションとの間で情報を送受信するときにも使用できます。

XML Web サービスから DataSet を送信または取得するときには、DiffGram 形式が暗黙的に使用されます。また、ReadXml メソッドを使用して XML から DataSet の内容を読み取るときや、WriteXml メソッドを使用して XML へ DataSet の内容を書き込むときは、読み取りまたは書き込みの形式として DiffGram を選択できます。詳細については、「XML からの DataSet の読み込み」と「XML データとしての DataSet の書き込み」を参照してください。

.NET Framework では、DiffGram 形式は主に DataSet の内容をシリアル化するときの形式として使用されますが、Microsoft SQL Server™ 2000 データベース内のテーブルのデータを変更するときにも DiffGram を使用できます。詳細については、https://microsoft.com/japan/msdn/default.asp にある『SQLXML 2.0 (XML for SQL Server 2000 Web Release 2) 日本語版』を参照してください。

DiffGram 形式

DiffGram 形式は、現在のデータ、元のデータ (または前のデータ)、エラーの 3 つのセクションから構成されています。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 を使用します。DataInstance 要素は、DataTable の行または DataSet を表します。実際には DataInstance の代わりに DataSet または DataTable の名前がこの要素に含まれます。DiffGram 形式のこのブロックには現在のデータが含まれています。現在のデータは、変更されている場合と未変更の場合があります。変更されている要素 (行) を識別するため、このような要素には diffgr:hasChanges 注釈が付きます。
  • <diffgr:before>
    DiffGram 形式のこのブロックには、行の元の内容が含まれています。このブロックの要素は、diffgr:id 注釈を使用して DataInstance ブロックの内容と対応しています。
  • <diffgr:errors>
    DiffGram 形式のこのブロックには、DataInstance ブロックの特定の行に関するエラー情報が含まれています。このブロックの要素は、diffgr:id 注釈を使用して DataInstance ブロックの内容と対応しています。

DiffGram 注釈

DiffGram では、DataSet の行バージョンやエラー情報を表すさまざまな DiffGram ブロックの要素を関連付けるため、いくつかの注釈が使用されます。

DiffGram 名前空間 urn:schemas-microsoft-com:xml-diffgram-v1 で定義されている DiffGram 注釈を次の表に示します。

注釈 説明
id <diffgr:before> ブロックと <diffgr:errors> ブロックの要素を <DataInstance> ブロックの要素と対応させるために使用されます。diffgr:id 注釈の値は [TableName][RowIdentifier] という形式で指定されます。たとえば、<Customers diffgr:id="Customers1"> となります。
parentId 現在の要素の親要素である <DataInstance> ブロックの要素を識別します。diffgr:parentId 注釈の値は [TableName][RowIdentifier] という形式で指定されます。たとえば、<Orders diffgr:parentId="Customers1"> となります。
hasChanges <DataInstance> ブロックの行を変更済みとして識別します。hasChanges 注釈には、次の 3 つのいずれかの値を指定できます。
inserted
Added 行を識別します。
modified
対応する Original 行バージョンが <diffgr:before> ブロックに含まれている Modified 行を識別します。Deleted 行の場合、対応する Original 行バージョンが <diffgr:before> ブロックには存在しますが、<DataInstance> ブロックには注釈付き要素が存在しません。
descent
親子関係にある 1 つ以上の子要素が変更された親要素を識別します。
hasErrors <DataInstance> ブロック内で RowError がある行を識別します。エラー要素は <diffgr:errors> ブロックに挿入されます。
Error <diffgr:errors> ブロック内の特定の要素に関する RowError のテキストが含まれています。

DataSet の内容が DiffGram として読み取られる、または書き込まれるときには、DataSet には上記以外の注釈も含まれます。名前空間 urn:schemas-microsoft-com:xml-msdata で定義されている追加の注釈を次の表に示します。

注釈 説明
RowOrder 元のデータの行順序を保持し、特定の DataTable の行のインデックスを識別します。
Hidden 特定の列を ColumnMapping プロパティが MappingType.Hidden に設定されている列として識別します。この属性は、msdata:hidden[ColumnName]="value" という形式で指定されます。たとえば、<Customers diffgr:id="Customers1" msdata:hiddenContactTitle="Owner"> となります。

データが格納されている隠し列だけが DiffGram 属性として書き込まれます。それ以外の場合は無視されます。

DiffGram のサンプル

DiffGram 形式の例を次に示します。この例では、変更のコミット前のテーブル内の行に対する更新結果が示されています。CustomerID の "ALFKI" である行は変更されていますが、更新されていません。このため、<DataInstance> ブロックに diffgr:id が "Customers1" の Current 行があり、<diffgr:before> ブロックに diffgr:id が "Customers1" の Original 行があります。CustomerID が "ANATR" である行には RowError が含まれているため、この行には diffgr:hasErrors="true" という注釈が付いています。<diffgr:errors> ブロックに、この行に関連する要素があります。

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
  <CustomerDataSet>
    <Customers diffgr:id="Customers1" msdata:rowOrder="0" diffgr:hasChanges="modified">
      <CustomerID>ALFKI</CustomerID>
      <CompanyName>New Company</CompanyName>
    </Customers>
    <Customers diffgr:id="Customers2" msdata:rowOrder="1" diffgram:hasErrors="true">
      <CustomerID>ANATR</CustomerID>
      <CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
    </Customers>
    <Customers diffgr:id="Customers3" msdata:rowOrder="2">
      <CustomerID>ANTON</CustomerID>
      <CompanyName>Antonio Moreno Taquería</CompanyName>
    </Customers>
    <Customers diffgr:id="Customers4" msdata:rowOrder="3">
      <CustomerID>AROUT</CustomerID>
      <CompanyName>Around the Horn</CompanyName>
    </Customers>
  </CustomerDataSet>
  <diffgr:before>
    <Customers diffgr:id="Customers1" msdata:rowOrder="0">
      <CustomerID>ALFKI</CustomerID>
      <CompanyName>Alfreds Futterkiste</CompanyName>
    </Customers>
  </diffgr:before>
  <diffgr:errors>
    <Customers diffgr:id="Customers2" diffgr:Error="An optimistic concurrency violation has occurred for this row."/>
  </diffgr:errors>
</diffgr:diffgram>

参照

XML と DataSet | XML からの DataSet の読み込み | XML データとしての DataSet の書き込み | DataSet の作成および使用