Введение в работу с дельтами в SQLXML 4.0

В этом разделе приводится краткое введение в дельты (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>

Формат дельты состоит из следующих блоков.

  • <DataInstance>
    Имя этого элемента, DataInstance, используется в этом документе для примера. Например, если элемент дельты был сформирован из набора данных платформы .NET Framework, то значение свойства Name набора данных будет использоваться как имя этого элемента. Этот блок содержит все соответствующие данные после изменения, в том числе, возможно, данные, которые не были изменены. В средствах обработки блока дельты не учитываются элементы этого блока, для которых не задан атрибут diffgr:hasChanges.

  • <diffgr:before>
    Этот необязательный блок содержит исходные экземпляры (элементы) записи, которые необходимо обновить или удалить. Все таблицы базы данных, изменяемые (обновляемые или удаляемые) с помощью дельты, должны присутствовать в качестве элементов верхнего уровня в блоке <before>.

  • <diffgr:errors>
    Этот необязательный блок не учитывается средствами обработки дельт.

Заметки дельт

Эти заметки определяются в пространстве имен дельт "urn:schemas-microsoft-com:xml-diffgram-01":

  • id
    Этот атрибут используется для сопоставления элементов в блоках <before> и <DataInstance>.

  • hasChanges
    Применительно к любой операции вставки или обновления дельта должна задавать этот атрибут со значением inserted или modified. Если этот атрибут отсутствует, то соответствующий элемент в <DataInstance> не учитывается средствами обработки и обновления не выполняются. Рабочие образцы см. в разделе Примеры дельт (SQLXML 4.0).

  • parentID
    Этот атрибут используется для определения связи «родители-потомки» между элементами в дельте. Этот атрибут присутствует только в блоке <before>. Он используется в SQLXML при применении обновлений. Связь типа «родители-потомки» используется для определения порядка, в котором обрабатываются элементы дельты.

Основные сведения о средствах обработки дельт

В средствах обработки дельт используются определенные правила для определения того, является ли операция вставкой, обновлением или удалением. Описание этих правил приведено в следующей таблице.

Операция

Описание

Вставка

Дельта задает операцию вставки, если элемент присутствует в блоке <DataInstance>, но отсутствует в соответствующем блоке <before>, а для элемента задан атрибут diffgr:hasChanges (diffgr:hasChanges=inserted). В этом случае дельта применяется для вставки в базу данных экземпляра записи, указанного в блоке <DataInstance>.

Если атрибут diffgr:hasChanges не указан, то элемент не учитывается средствами обработки и вставка не выполняется. Рабочие образцы см. в разделе Примеры дельт (SQLXML 4.0).

Обновление

Дельта задает операцию обновления, если в блоке <before> имеется элемент, для которого предусмотрен соответствующий элемент в блоке <DataInstance> (т. е. оба элемента имеют атрибут diffgr:id с одинаковым значением), а атрибут diffgr:hasChanges задан со значением modified в элементе блока <DataInstance>.

Если атрибут diffgr:hasChanges для элемента в блоке <DataInstance> не задан, то средства обработки возвращают ошибку. Рабочие образцы см. в разделе Примеры дельт (SQLXML 4.0).

Если атрибут diffgr:parentID задан в блоке <before>, то связь «родители-потомки» для элементов, заданных parentID, используется для определения порядка обновления записей.

Удаление

Дельта задает операцию удаления, если элемент присутствует в блоке <before>, но отсутствует в соответствующем блоке <DataInstance>. В этом случае дельта применяется для удаления экземпляра записи, указанной в блоке <before>, из базы данных. Рабочие образцы см. в разделе Примеры дельт (SQLXML 4.0).

Если атрибут diffgr:parentID задан в блоке <before>, то связь «родители-потомки», которая относится к элементам, заданным атрибутом parentID, используется для определения порядка удаления записей.

ПримечаниеПримечание

Передача параметров в дельты не предусмотрена.