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

        <xs:element name="Exams">

           <xs:complexType>

             <xs:sequence>

               <xs:element name="ExamID" msdata:AutoIncrement="true" type="xs:int" />

               <xs:element name="StudID" type="xs:int" minOccurs="0" />

               <xs:element name="Course" minOccurs="0">

                 <xs:simpleType>

                   <xs:restriction base="xs:string">

                     <xs:maxLength value="50" />

                   </xs:restriction>

                 </xs:simpleType>

               </xs:element>

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

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

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

             </xs:sequence>

           </xs:complexType>

        </xs:element>

      </xs:choice>

    </xs:complexType>

    <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>

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

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

      <xs:field xpath="StudID" />

    </xs:keyref>

   </xs:element>

  </xs:schema>

Схема XML-документа — это некий шаблон, которому должен соответствовать любой документ рассматриваемого типа. В схеме описаны правила игры, которые надо соблюдать при составлении XML-документов конкретного типа. Если какой-либо XML-документ содержит ссылку на схему, то в момент его десериализации (чтения) происходит проверка на соответствие указанной схеме.

Нарушение схемы вызывает исключение. Цель всех исключений — помочь найти и исправить ошибки в данных. Такой подход существенно повышает надежность приложений, использующих документы, составленные другими пользователями, или сгенерированные другими приложениями.

Существуют отдельные инструменты (как внутри студии, так и вне ее), позволяющие проверять произвольные XML-документы на соответствие той или иной схеме. Таким образом, файлы данных можно проверить до того, как они будут прочитаны приложением. Когда данные, прошедшие такую проверку, действительно поступят на вход приложения, то можно быть уверенным, что они будут надежно им прочитаны.

Наличие схемы в двоичном файле самого документа (именно это мы обнаружили в файле с расширением stud) повышает его надежность. Если метод Deserialize заметит рассогласование данных с их схемой, то он выбросит исключение. Это лучше, чем проглотить отравленные данные.

Особенности формата XSD

Попробуем разобраться в схеме нашего XML-документа. Первая строка    (<xs:schema id=". . .) представляет собой заголовок, который должен обеспечить уникальность трактовки элементов и атрибутов схемы. Так как теги и атрибуты языка XML произвольны, то в различных пространствах имен они могут иметь разный смысл. Цель подзаголовка — точно определить то пространство имен, в котором описан смысл таких элементов, как: choice, sequence, element, а также таких атрибутов, как: name, xpath, IsDataSet, UseCurrentLocale, и т. д.

Уникальность задания самого пространства имен обеспечивается ссылкой на уникальный URL (Uniform Resource Locator). Эту ссылку: xmlns:xs="http://www.w3.org/2001/XMLSchema", содержащую URL, или адрес сайта, вы видите в заголовке схемы. Уникальность всех URL (идентификаторов абстрактных или физических ресурсов, например, Internet-адресов) гарантирована стандартом их образования.