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

           <xs:element name="Course" type="xs:string" />

           <xs:element name="Credit" type="xs:boolean" />

           <xs:element minOccurs="0" name="Date" type="xs:dateTime" />

           <xs:element name="Mark" type="xs:unsignedByte" />

        </xs:sequence>

      </xs:complexType>

    </xs:element>

   </xs:sequence>

  </xs:complexType>

</xs:element>

</xs:schema>

Мы видим, что эта схема имеет подозрительно простой вид, она не содержит элемента DataSet, не содержит ограничения (Constraint) и сведений о связи между таблицами студентов и экзаменов. Таким образом, мы убедились, что схема содержит тонкие настройки, которые более точно описывают структуру документа, чем это можно вывести на основе анализа данных в формате XML. XML-документ без схемы не содержит деталей, которые могут оказаться важными при создании типизированного DataSet.

·  Закройте документ Student.xsd, и не сохраняйте его, так как с усеченной схемой мы работать не можем.

Постараемся восстановить подробную схему, сделать ее внешней по отношению к XML-документу, и продолжить работу именно с ней. Стеки Undo-Redo Visual Studio настолько велики и так надежно работают, что мы легко справимся с этой задачей.

·  Откройте XML-файл Student.xml, который был создан методом WriteXml класса DataSet.

·  Используйте комбинацию Ctrl+Z до тех пор, пока в XML-документе не появится удаленная ранее схема.

·  Вырежьте (Ctrl+X) восстановленную схему. Будьте внимательны, выделите только схему, то есть блок тегов, начиная с <xs:schema id="StudsExams" . . .> и до </xs:schema>.

·  Добавьте в проект (внутрь папки Data) новый файл типа XML schema, назовите его Students.xsd.

·  Восстановите текст вырезанной схемы вместо той заготовки, которую создала студия. Сохраните файл (Ctrl+S) Students.xsd.

·  Вновь откройте XML-документ (файл Students.xml), в окне его свойств найдите свойство Schemas и добавьте ссылку на XSD-файл (Students.xsd). Диалог XML Schemas содержит много схем, которые доступны из нашего приложения, но вы выберите тот XSD-файл (Students.xsd), который расположен в папке Data.

·  Повторите опыт по добавлению нового студента и убедитесь, что IntelliSense вновь обрел уверенность, так как имеется ссылка на схему документа.

Роль XML-схем в иерархии классов .NET Framework достаточно велика. Перед тем как продолжить работу с нашей схемой, рассмотрим аналогию, которая существует между связями в мире XML и мире объектно-ориентированного программирования. Вы знаете, что класс в ООП задает правила игры, а объект класса их выполняет. Объект класса — это игрок, который вынужден играть по правилам, заданным классом. XML-схема относится к XML-документу так же, как класс к объекту. Схема задает правила игры, а XML-документ должен их выполнять.

understandxsd_02

Графическое отображение схемы

·  Закройте файл со схемой (Students.xsd) и вновь откройте его. Обратите внимание на то, что на сей раз студия автоматически выбирает редактор DataSetEditor и отображает схему в графическом виде.

·  В контекстном меню редактора DataSet выберите команду Show Relation Labels и убедитесь, что схема имеет вид, показанный на рисунке.

·  Просмотрите все другие команды контекстного меню и оцените новые возможности, которые появились в связи с тем, что наша схема стала схемой DataSet, а не просто схемой двух таблиц.

·  Обратите внимание на новые файлы, которые появились в папке Data. Просмотрите их содержимое.

·  Удалите из проекта вспомогательный файл Students.cs (если он появился) и уничтожьте его.

Создание типизированного DataSet

Итак, мы убедились, что правильно построенному XML-документу соответствует определенная XML-схема. Схемы способны полностью описать структуру DataSet и ограничить произвол при задании данных. В рассмотренном примере мы получили две схемы: одна была получена на основе данных XML-файла, а другая — на основе существующего набора данных DataSet, используя метод WriteXml.