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

Важно, чтобы магия непонятных символов не похоронила едва теплящуюся искру понимания. (Во многих книгах вместо xs вы увидите xsd). Мне сразу стало легче, когда я заменил все вхождения префикса xs (с настройкой — только слово целиком) на любую другую комбинацию символов, например, на префикс s. XML-парсеру все равно, какой использован префикс, он ведь заменяет его на "http://www.w3.org/2001/ XMLSchema". Префикс просто позволяет сократить запись длинного (уникального) имени. Представьте, как "легко" было бы (человеку) читать документ, если произвести обратную замену — заменить все xs на "http://www.w3.org/2001/XMLSchema". Префикс msdata ссылается на другое, уникальное пространство имен, которое выходит за рамки стандарта языка XSD, разработанного организацией W3C. Префикс msdata обозначает Mocrosoft-расширение стандарта XSD.

Покончив с уникальностью, перейдем к анализу следующих строк схемы. Они описывают структуру данных документа, который будет считаться правильным, то есть удовлетворяющим схеме. Чтобы понять требования схемы, медленно читайте следующие описания, одновременно сверяя их с текстом самой схемы.

·  Элемент данных (<xs:element name="StudsExams">) определяет DataSet (msdata:IsDataSet="true"),

·  В него могут быть вложены элементы сложного типа (complexType).

·  В DataSet может входить произвольное количество (maxOccurs="unbounded") групп (choice), но их может и не быть (minOccurs="0"),

·  Каждая группа состоит из элементов (element) типа Studs (name="Studs"), которые являются сложными (complexType). Элемент Studs фактически является строкой таблицы Studs.

·  Каждая строка состоит из полей (attribute). Первое поле (name="StudID") является обязательным (use="required") счетчиком (AutoIncrement = "true") типа (type="xs:int"). Второе поле (name="Name") является простым (simpleType), имеет тип (string) с ограничением (restriction) по длине (maxLength value="50"). Далее перечисляются остальные поля таблицы студентов.

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

   <xs:unique name="Constraint1" msdata:PrimaryKey="true">

    <xs:selector xpath=".//Studs" />

    <xs:field xpath="@StudID" />

   </xs:unique>

   <xs:unique name="Exams_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">

    <xs:selector xpath=".//Exams" />

    <xs:field xpath="ExamID" />

   </xs:unique>

·  Далее в схему таблицы Exams входит описание связи между двумя таблицвми Studs и Exams.

   <xs:keyref name="StudsExams" refer="Constraint1">

    <xs:selector xpath=".//Exams" />

    <xs:field xpath="StudID" />

   </xs:keyref>

Поле (field xpath="StudID") каждой строки подчиненной таблицы Exams (selector xpath=".//Exams") ссылается (refer) с помощью связи (keyref name="StudsExams") на поле (field xpath="@StudID"), определенное в ограничении целостности (Constraint1). Выражения вида xpath="@StudID" являются операторами языка XPath, который позволяет производить поиск и отбор данных в XML-документе. Символ @ означает, что StudID задан в виде атрибута, а не элемента.

Поясним смысл группы sequence, в которую вложены теги, описывающие колонки обеих таблиц. Описатель sequence означает, что элементы этой группы должны присутствовать в DataSet и должны следовать в строго заданном порядке, который определен схемой. Описатель sequence в некотором смысле противоположен описателю choice. Различие в правилах, задавемых группами choice и sequence легко запомнить, если сопоставить их с правилами образования таблицы базы данных.