<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-документ должен их выполнять.
· Закройте файл со схемой (Students.xsd) и вновь откройте его. Обратите внимание на то, что на сей раз студия автоматически выбирает редактор DataSetEditor и отображает схему в графическом виде.
· В контекстном меню редактора DataSet выберите команду Show Relation Labels и убедитесь, что схема имеет вид, показанный на рисунке.
· Просмотрите все другие команды контекстного меню и оцените новые возможности, которые появились в связи с тем, что наша схема стала схемой DataSet, а не просто схемой двух таблиц.
· Обратите внимание на новые файлы, которые появились в папке Data. Просмотрите их содержимое.
· Удалите из проекта вспомогательный файл Students.cs (если он появился) и уничтожьте его.
Итак, мы убедились, что правильно построенному XML-документу соответствует определенная XML-схема. Схемы способны полностью описать структуру DataSet и ограничить произвол при задании данных. В рассмотренном примере мы получили две схемы: одна была получена на основе данных XML-файла, а другая — на основе существующего набора данных DataSet, используя метод WriteXml.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.