Доступ к данным |Доступ к XML и реляционным данным | 4. XmlDataDocument и Dataset Дальше »
4. XmlDataDocument и Dataset
4.1. Как Dataset определяет структуру документа без схемы
4.2. Использование XML .NET Framework

4. XmlDataDocument и Dataset

Microsoft .NET Framework SDK интегрирует Xml c реляционной моделью XmlDataDocument. Реляционные данные эффективно представляют повторяющиеся наборы строго типизированных значений, например, информации в файлах и системах управления базами данных. Реляционная модель организует данные в таблицах по столбцам и строкам. XML DOM представляет информацию в дереве XML узла, с переменной структурой, например, данных в почтовых системах и WEB, без строгой типизации.
XmlDataDocument расширяет XmlDocument и обеспечивает синхронизацию с Dataset так, как это проиллюстрировано на рисунке.

Данные могут быть загружены в XmlDataDocument средствами XmlReader. В Dataset данные могут быть загружены с помощью управляемого провайдера из реляционного источника данных (например, база данных SQL Server) или средствами XmlReader из XML документа или потока. Загрузка Dataset или XmlDataDocument синхронизирует данные между ними. Другими словами, новая строка, добавленная в Dataset, всегда заканчивается новым узлом в XmlDataDocument. Обратное также возможно. Добавление узлов в XmlDocument может привести к появлению новой строки в таблице Dataset, если этот тип узла отображен к таблице Dataset. Происходит синхронизация между XmlDocument и Dataset. (То есть Dataset, если он использует собственную память, является представлением XML данных) Следовательно, XmlDataDocument дает Вам возможность загрузить реляционные или XML данные и управлять ими, используя объектную модель документа (DOM).
Синхронизация XmlDataDocument и DataSource осуществляется по событиям. При варианте с полной точностью синхронизации DataSource и XmlDataDocument, добавление записи в Dataset всегда создаёт соответствующий узел в XmlDataDocument. Если используется частичная точность синхронизации XmlDataDocument и Dataset, добавление узла в XmlDataDocument создаёт новую запись только в Dataset, если новый узел предназначен для передачи строки в Dataset. XML документ может содержать элементы, которые не соответствуют реляционным требованиям.
Прикладные программы могут использовать XmlDataDocument для совмещения XML и реляционных представлений тех же самых изначальных данных, независимо от источника данных. Есть различия между XML и реляционными представлениями. К XML данным, которые не относятся к реляционному виду, нельзя обращаться, как к объектам Tables и Rows в реляционном понимании. Однако, их не трудно перевести из реляционных строк в эквивалент XML элементов, чтобы получить возможность обращения к этим XML данным.
XmlDataDocument может использоваться во всех случаях, когда используется XmlDocument. Свойство Dataset возвращает объект Dataset, который обеспечивает реляционное представление данных в XmlDataDocument. Чтобы загрузить реляционные данные, определите Dataset, содержащий реляционные данные, во время создания XmlDataDocument. Чтобы загрузить структурированные XML данные в XmlDataDocument, используйте метод Load, загружающий XmlDataDocument из XmlReader. Если Вы создаете объект XmlDataDocument, и нет необходимости загружать набор данных, будет создан набор данных, который будет сопоставлен XmlDataDocument при первом обращении приложения к свойству Dataset в XmlDataDocument.
Когда Вы считываете Xml данные в Dataset, для этого требуется, чтобы схема превратила Xml данные в реляционные. Схема описывает столбцы и типы данных в них также, как ассоциируется узел Xml с различными столбцами и таблицами реляционного вида. Есть два способа применения схемы:

- Вы можете для этого оперировать XDR или XSD схемой для Dataset, чтобы читать Xml данные. В этом случае, Dataset использует схему для отображения данных, поскольку выполняется чтение данных. Такой способ получил название Relational Schema Mapping (Реляционное Отображение Схемы).
- Dataset может осуществлять чтение в самих данных, и из структуры Xml данных генерировать схему. Такой способ получил название Inference.

Схема, созданная вторым способом, допустима для данных, но не обязательно для любых других данных. Чтобы создать схему, Dataset использует правила, описанные в разделе, посвящённом тому, как Dataset определяет структуру документа без схемы.

4.1. Как Dataset определяет структуру документа без схемы

Когда метод ReadXml объекта Dataset открывает XML документ, который не имеет связанной схемы, Dataset выводит структуру документа, поскольку необходимо загрузить данные. Вывод схемы - это двух шаговый процесс. Сначала Dataset извлекает элементы, которые возможно были определены как таблицы и в соответствии с правилами, которые последуют ниже. После этого сохранённые элементы - это определенные столбцы в одной из определенных таблиц.

Определение Dataset

Если корневой узел документа содержит элементы, которые не являются таблицами, то корневой узел становится таблицей. Иначе, корневой узел определяет Dataset. Dataset Name, Namespace и Prefix принимаются от Document Element LocalName, NamespaceURI, и Prefix. Если Document Element содержит атрибуты, они помещаются в расширенные свойства Dataset.

Определение Таблиц

Следующие правила регламентируют признаки, по которым таблицы определяются без схемы:
- Элементы с атрибутами автоматически становятся таблицами.
- Любой элемент, который содержит другой элемент, становится таблицей.
- Если элемент с тем же самым именем встречается более чем единожды, он становится таблицей.
- Все прямые наследники корневого узла становятся таблицами. Если элемент имеет только единственное текстовое значение, то и таблица будет содержать единственный столбец с названием <ElementName>, и значением, являющимся содержанием узла.

Определение иерархических таблиц

Вложенные таблицы - Xml представление иерархических отношений и имеют локальный контекст в пределах родительской таблицы. Исключение является случай, когда элемент вложен в другой элемента, который имеет то же самое имя.

Определение отношений

Для родительских и порождённых таблиц в конец таблицы добавляется дополнительный столбец, который идентифицирует отношения между таблицами. Для обеих таблиц, имя добавочного столбца - это имя родительской таблицы с окончанием "_Id". Имя отношения - это строка "Relation", дополняемая целым числом, которое делает это имя уникальным в пределах Dataset.

Значения ключей установки

Каждая строка родительской таблицы имеет уникальное ключевое значение, а связанный столбец для каждой строки в порождённой таблице принимает то же самое значение.

Определение столбцов

Всё, что не было определено как таблица, становится столбцом. Элементы, которые не находятся непосредственно под корневым узлом, которые не повторяются и не имеют никакие порожденных элементов, становятся столбцами содержащего их элемента. В качестве имени столбца используется имя элемента.
Элементам Table, которые содержат текст, также как вложенным элементам, добавляется дополнительный столбец, который представляет текстовое значение. Именем этого столбца является имя элемента, сопровождаемое окончанием "_Text". Если уже есть столбец с этим именем, в конец добавляется номер, что делает имя уникальным.

Определение строк

Строки создаются из контента Xml файла. Ниже следующие правила применяются при чтении контента в строки столбца:
1. Если столбец соответствует контенту Xml данных, то текстовое значение читается в строку столбца.
2. Если никакой текстовый контент не присутствует в Xml данных, то значение устанавливается в соответствии со следующими правилам:
- если столбец является TextOnly, то его значение устанавливается в String.Empty.
- если свойство Column.AllowNull = False, следовательно, значение устанавливается в Column.DefaultValue.
- если свойство Column.AllowNull = True, следовательно, значение устанавливается в DBNull.

4.2. Использование XML .NET Framework

Содержание этого раздела отсутствовало в англоязычном оригинале, доступном автору перевода. Если Вы располагаете оригинальным содержанием этой главы, автор перевода будет Вам премного обязан, получив его от Вас по электронной почте на адрес: mssqlhelp@pisem.net

Доступ к данным |Доступ к XML и реляционным данным | 4. XmlDataDocument и Dataset Дальше »
Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz