Важно, чтобы магия непонятных символов не похоронила едва теплящуюся искру понимания. (Во многих книгах вместо 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 легко запомнить, если сопоставить их с правилами образования таблицы базы данных.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.