1. Краткий обзор
Микрософт .NET Framework использует XML Document Object Model (DOM), чтобы обеспечить доступ к данным в XML документах и дополнительные классы для чтения, записи и навигации в пределах XML документа. Эти классы поддерживаются пространством имён System.XML, которое также объединяет XML DOM с механизмом доступа к данным средствами ADO.NET. XMLDataDocument является одним из подклассов DOM в указанном пространстве имён, и обеспечивает доступ к реляционным данным. XMLDataDocument отображает XML на реляционные данные в ADO.NET DataSet. Микрософт .NET-based прикладные программы могут использовать специальные классы в пространстве имён System.XML для управления и обращения к документам XML и реляционными данными в DataDocument. Этот механизм поддерживает многослойную архитектуру n-tiered для сбора и распределения данных.
Microsoft .NET XML и средства ADO.NET используют единую модель программирования для доступа к XML данным (текст, разграниченный структурирующими данные тэгами) и реляционным данным (таблицы, состоящие из строк и столбцов). XML Framework читает XML данные из любого потока данных в узле дерева DOM, если к данным можно обращаться программным путём, в то время как ADO.NET Framework обеспечивает управление и обращение к реляционным данным в пределах объекта DataSet.
Есть три ключевых компонента для доступа к данным в XML Framework и ADO.NET:
- DataSet, представляющий источник реляционных данных в ADO.NET Framework.;
- XMLDocument, использующий DOM в XML Framework.
- XMLDataDocument, объединяющий ADO.NET и XML Framework и представляющий реляционные данные из DataSet, а также, синхронизирующий их с моделью XML документа.
XMLDataDocument является подклассом XMLDocument. .NET-приложение может использовать XMLDataDocument для загрузки XML или реляционных данных и управлять ими, используя DOM. Когда XMLDataDocument загружает реляционные данные, происходит синхронизация данных между DataSet и DOM. После того, как XMLDataDocument загрузит реляционные данные, приложение может обращаться к ним программным путём, с помощью .NET XML Framework API.
Классы, которые включают XML и ADO.NET Framework, допускают применение трёх общих сценариев:
Сценарий | Задачи |
Доступ к реляционным данным с помощью ADO.NET | - Создание, и использование DataSet для обращения к реляционным данным без использования XML. - Чтение, и запись XML данных в/из DataSet без использования XmlDataDocument (любая информация XML, не соответствующая реляционному представлению, будет потеряна.) |
Доступ к XML документам | - Создание и использование XmlDocument для обращения к потокам XML данных. - Использование структурированных данных в XmlDataDocument без таблиц, строк, столбцов, отношений и других реляционных элементов. Это делается аналогично XmlDocument. |
Доступ к реляционным данным в XML документах (XML и ADO.NET) | - Структурированные, реляционные данные в XmlDataDocument вместе с DataSet. - Получить DataSet из XmlDataDocument, в порядке реляционного представления и запроса структурированного контента XML документа. - Работа с XML представлением реляционных данных в DataSet. - Поддержка реляционных и основанных на XML компонент для приложений, обслуживающих данные. Например, Вы можете редактировать и показывать реляционные данные без воздействия на точность XML документа, применять XSLT (Extensible Stylesheet Language Transformations) к реляционным данным. Исполнение XPath запросов к реляционным данным. |
1.1. Архитектура XML.NET
Классы XML.NET в пространстве имён System.XML предназначены для того, чтобы обеспечить взаимодействие так, как проиллюстрировано на этом рисунке:
Абстрактный класс XmlReader предназначен только для обеспечения быстрой, не кэшируемой отправки потока доступа к XML данным. Абстрактный класс XmlWriter обеспечивает быстрый, не кэшированный, однонаправленный путь создания XML потоков, содержащих XML документы, которые соответствуют спецификация W3C Extensible Markup Language (XML) 1.0 и пространству имён из спецификации XML. XmlTextWriter и XmlTextReader - предназначенные для непосредственного исполнения классы в пространстве имён System.Xml.
Класс XmlDocument обеспечивает инструментарий первого (http://www.w3.org/TR/DOM-Level-1/) и второго (http://www.w3.org/TR/DOM-Level-2/) уровней спецификации W3C XML Document Object Model (DOM).
XmlNodeReader обеспечивает XmlReader API к ответвлениям узла DOM. Он возвращает любые узлы, которые находит в дереве DOM, включая узлы - ссылки на объекты. XmlElement представляет элемент в дереве DOM. XmlAttribute представляет атрибут объекта XmlElement.
Класс XmlTransform осуществляет WC3 преобразования в терминах спецификации XSL (XSLT) (http://www.w3.org/TR/XSLT), которые позволяют преобразовать один XML документ в другой. Он возвращает XmlWriter или XmlReader, чтобы обеспечить запись или чтение преобразованного XML документа.
Класс XmlNavigator определяет доступную для редактирования модель курсора по XML документу. Он обеспечивает встроенные в поддержку для WC3 XML Path Language (XPath) выражения (http://www.w3.org/TR/XPath) и используется XslTransform.
Абстрактный класс XmlResolver разрешает внешние XML ресурсы, называемые Uniform Resource Identifier (URI - унифицированный идентификатор ресурса). XmlResolver используется XmlTextReader для загрузки внешних DTD объектов и схем. Также, он используется XslTransform для обработки элементов <xsl:include>. XmlUrlResolver - конкретное исполнение XmlResolver для URL.
Абстрактный класс XmlNameTable обеспечивает таблицу расщеплённых строковых объектов. Он обеспечивает эффективные средства для синтаксического анализатора XML, который позволяет использовать тот же самый объект-строку для повторных элементов и имён атрибутов в XML документе. Прикладная программа может использовать объект XmlNameTable или его собственное исполнение класса XmlNameTable в целях повышения эффективности.
1.2. Microsoft .NET XML классы
Представленные ниже классы Микрософт.NET Framework обеспечивают поддержку Xml стандартов и предоставляют мощный API для доступа к Xml документам. Обеспечивается поддержка пространств имён, типов данных, XSL схем, XSL операций, сохранения документов, и навигация по документам.
Класс | Описание |
XmlDataDocument | Представляет исполняемый XmlDocument, который может быть связан с объектом ADO.NET DataSet. Вы можете одновременно просматривать и управлять структурированным XML через реляционное представление DataSet или представления DOM XmlDataDocument. |
XmlNavigator (abstract) | Чтение и запись Xml данных с использованием модели курсора. Обеспечивает Xpath, поддерживаемый для XmlDocument. Это абстрактный класс. |
DocumentNavigator | Обеспечивает cursor-style модель, для управления memory-resident деревом Xml и поддерживает XPath выражения. Также, предоставляет XmlNavigator для DOM. |
DataDocumentNavigator | Чтение и запись реляционных данных с использованием модели курсора. Обеспечивает поддержку Xpath для XmlDataDocument. Предоставляет XmlNavigator по XmlDataDocument. |
XmlResolver (abstract) | Определяет внешние Xml ресурсы, называемые Uniform Resource Identifier (URI). Это абстрактный класс. |
XmlUrlResolver | Определяет внешние Xml ресурсы, называемые URI. Обеспечивает XmlResolver для URL. |
XmlSchemaCollection | Содержит набор из пространства имён URI. Каждое пространство имён также имеет связанный собственный кэш данных, соответствующий XML-Data Schema или W3C Xml Schema. XmlSchemaCollection может загружать XSD и XDR схемы, и компилировать их во внутренний "cooked schema representation". Тогда метод Validate() использует это внутреннее представление для эффективной проверки правильности (в смысле: run-time) любого заданного поддерева. |
XmlReader (abstract) | Представляет механизм чтения, который обеспечивает быстрый, non-cached, forward-only поток доступа к Xml данным. Этот механизм чтения может читать поток или документ Xml. Это абстрактный класс. |
XmlTextReader | Обеспечивает быстрый, non-cached, forward-only поток доступ к Xml данным. Обеспечивает XmlReader для байтового потока. |
XmlWriter (abstract) | Обеспечивает быструю, non-cached, forward-only генерацию правильно построенных Xml потоков. Этот механизм записи предназначен для записи в поток или документ. Это абстрактный класс. |
XmlTextWriter | Обеспечивает быструю, non-cached, forward-only генерацию Xml потоков, содержащих Xml документы, которые соответствуют спецификации W3C Xml 1.0 и пространству имён в спецификации Xml. Использует XmlWriter. |
XmlNameTable (abstract) | Таблица, группирующая строки, гарантирует, что обеспечиваются эффективные средства для синтаксического анализатора Xml, и что используется один и тот же объект строки для каждого повторяющегося элемента и имёни атрибута в Xml документе. |
XmlNodeReader | Представляет механизм чтения, который обеспечивает быструю, non-cached отправку потока доступа к Xml данным в XmlDocument или в определенный XmlNode в рамках XmlDocument. |
XslTransform | Преобразовывает Xml данные, используя XSL таблицу стилей. |
XmlConvert | Кодирует и декодирует имена в Xml, которые содержат недопустимые символы (такие, как пробелы или половинчатые символы Katakana) что необходимо при отображении Xml имён без поддержки или представления схем. |
XmlException | Возвращает детализированную информацию о последней ошибке синтаксического анализа, включая: номер ошибки, номер строки, символьную позицию, и текстовое описание. |