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

·  Declaration — первая строка нашего документа (<?xml version="1.0" standalone="yes"?>),

·  Comment — строка, имеющая вид <!-- Текст комментария -->

·  Root element (корневой элемент) — блок <StudsExams> </StudsExams> и его содержимое,

·  Element — это блок вида <Name> Илья Перевалов</Name>,

·  Empty element — пустой элемент (в нашем документе таких нет, вот пример, <IsBusy />),

·  Attribute — пары типа Name="Pete" (в нашем документе они отсутствуют).

Первая (необязательная) строка идентифицирует XML-документ и сообщает нам, что он выполнен в соответствии со стандартом W3C версии 1.0 (version="1.0") и не требует внешнего файла (standalone="yes") с определениями тегов. Иногда стартовый элемент содержит атрибут encoding="utf-8". Он означает, что документ использует сокращенную (UTF-8) версию кодировки Unicode (которая не трогает ASCII-текст — оставляет его однобайтным).

Комментарии игнорируются анализатором XML. Элементы (XML-elements) составляют основное тело документа. Они содержат данные, которые могут быть простыми или сложными (в свою очередь состоять из элементов). Теги <Studs> — пример сложного элемента, Теги <Phone> — пример простого элемента. Теги могут повторяться. Корневой элемент <StudsExams> должен быть единственным.

Общность тегов (например, <Studs>) позволяет интегрировать данные в одну таблицу. Это одно из главных достоинств языка. Для того чтобы данные, поступившие из самых разных источников, попали в одну и ту же таблицу, достаточно, чтобы поставщики данных пометили их одинаковыми тегами. Само имя тега не имеет значения. Вы можете заменить все вхождения <Studs> на <Foo>, и структура таблицы не изменится (изменится лишь ее имя). Имена тегам, в отличие от HTML, дает создатель документа, стараясь сделать максимально ясным смысл содержимого текущего элемента, а также сохранить семантику всего документа.

Одна и та же структура может быть задана как с помощью вложенных элементов (Name, Phone и Addr), так и с помощью атрибутов. Для того, чтобы колонки таблицы были отображены в виде атрибутов, надо изменить свойство таблицы ColumnMapping и присвоить ему константу Attribute перечисления MappingType. Это делается таким образом:

foreach (DataColumn col in ds.Tables[0].Columns)

col.ColumnMapping = MappingType.Attribute;

Вставьте этот фрагмент в метод ConnectAndRead, и нажмите кнопку Save XML. Убедитесь, что элементы таблицы студентов теперь имеют компактный вид:

 <Studs StudID="1" Name="Василий Кузнецов" Phone="111-11-11" Addr="Большой пр. 11-111" />

 <Studs StudID="2" Name="Илья Перевалов" Phone="222-22-22" Addr="Невский пр. 22-222" />

Атрибуты представляют собой альтернативный способ описания данных, который позволяет задавать значения по умолчанию. Атрибуты сокращают объем XML-документа, но ими следует пользоваться лишь тогда, когда описываемая сущность уже не будет разделяться на более мелкие элементы. Например, элемент Addr можно разбить на составляющие части (сделать его сложным). Для этого достаточно описать его новую структуру.

<Addr>

<PostalCode>198354</PostalCode>

<Street>Hi st.</Street>

<House>20</House>

</Addr>

С вложенными элементами: PostalCode, Street, House легко работать, а именно: проверять с помощью языка XSD, отображать в табличном виде, производить поиск с помощью языка XPath, преобразовывать к нужному виду с помощью языка XSLT (XML Stylsheet Transformations). Но если бы адрес был задан в виде атрибута, то делать это было бы несколько сложнее.

Поэкспериментируйте с документом, чтобы понять, как работают теги элементов при описании структуры данных. Попробуйте добавить нового студента, или экзамен. Обратите внимание на подсказки IntelliSense. Попробуйте удалить тег <StudsExams>. Редактор XML мгновенно заметит это нарушение и внесет красную пометку. Если навести на нее курсор, то появится сообщение "XML document cannot contain multiple root elements". Корневой (root) элемент должен быть единственным в любом XML-документе.