ADO.NET. Управление базами данных. Связь по схеме OLE DB провайдера. Коррекция стилей DataGridView, страница 38

XML-процессор

Все XML-документы проходят стадию обработки, которая носит название parsing (синтаксический разбор, или анализ). При этом XML-процессор анализирует документ на правильность построения. Затем содержимое документа может быть дополнительно проверено на соответствие схеме данных (XML-validating). Говорят, что документ построен правильно (well-formed), если он не содержит синтаксических ошибок, то есть:

·  Существует только один корневой элемент;

·  Закрыты все открытые теги;

·  Не нарушена вложенность тегов;

·  Не нарушены имена тегов с учетом их чувствительности к регистру;

·  Атрибуты элементов (в одном и том же открывающем теге) не повторяются.

Термин “well-formed formula“ (правильно построенная формула) вы, возможно, встречали в некоторых вузовских курсах. Он используется в исчислении предикатов, теории формальных грамматик (конечных автоматов) и теории баз данных. Сходный термин “well-formed XML-document“ используется и в языке XML для обозначения документов, в которых с точки зрения XML-анализатора (XML-parser) отсутствуют синтаксические ошибки. Процедура анализа документа (parsing) подразумевает разбиение его текста на части (выделение отдельных лексем), и проверку их на соответствие грамматическим правлам языка.

Вы неоднократно могли убедиться в том, что дизайнер XML производит синтаксический разбор (XML-parsing) документа автоматически, в процессе работы с xml-файлом, и немедленно отмечает все обнаруженные ошибки.

XML-документ может не содержать синтаксических ошибок, но это еще не означает, что он отвечает тем правилам, которые заданы схемой документа. Он может пройти первую стадию проверок (parsing), но не пройти вторую (validating). Возможность проверять данные на соответствие схеме появляется только если предварительно задать схему документа.

В рамках студии мы можем построить схему документа, опираясь на его данные. Это выполнимо, если существующий документ правильно построен (is well-formed). Строит схему специальный инструмент студии Xsd.exe. Он анализирует XML-файл и на его основе создает новый файл с расширением XSD, который содержит описание схемы исходного документа.

Сериализация данных

Теперь рассмотрим формат, которым пользуется DataSet при осуществлении другого способа хранения своих данных — метода Serialize. Суть сериализации данных была описана в ранее, поэтому просто повторим те действия, которые необходимо выполнить для того, чтобы (используя принятую в Microsoft терминологию) сериализовать данные DataSet на постоянном носителе.

·  Вставьте в форму кнопку со свойствами: Text = Serialize Binary, (Name) = btnSerialize.

·  Введите в класс формы ветвь для обработки нажатия кнопки и метод SerializeBinary.

void SerializeBinary ()

{

Stream stream = new FileStream(@"..\..\Data\Students.stud",   FileMode.Create);

IFormatter fmt = new BinaryFormatter();

fmt.Serialize (stream, ds);

stream.Close();

}

Здесь, как и ранее, мы пользуемся услугами класса BinaryFormatter, который реализует интерфейс IFormatter. Тот факт, что мы присваиваем ссылку на объект класса BinaryFormatter переменной fmt типа IFormatter, означает, что из всей функциональности класса BinaryFormatter нам понадобятся только те методы, которые объявлены в интерфейсе IFormatter (методы Serialize и Deserialize). Но сам формат вывода определяется объектом класса DataSet, ссылку на который надо подать в метод Serialize в качестве параметра.

Интерфейс IFormatter — это стандарт общения с классами, форматирующими данные. Он определяет сигнатуры методов: object Deserialize(Stream); void Serialize(Stream, object); и свойств (SerializationBinder Binder {get; set;}, StreamingContext Context {get; set;} и ISurrogateSelector SurrogateSelector {get; set;})

Запустите приложение, нажмите кнопку Serialize. Файлы Students.stud и Students.xml физически находятся в папке Data нашего проекта, но Solution Explorer не отображает этот факт. Работать с файлами данных будет удобнее, если вы добавите их в папку с помощью команды AddExisting Item.