Основы ASP.NET 2.0

       

Файлы определения схемы документа


Согласно современному стандарту, валидный документ должен соответствовать связанному с ним файлу XSD (XML Schema Definition) — файлу определения схемы XML, который определяет конкретный язык, то есть описывает, какие элементы и типы могут появляться в документе. Схемы XSD призваны заменить DTD (Document Type Definition), разница между ними заключается в том, что файлы XSD сами тоже используют синтаксис XML. Схемы XSD позволяют определить, какие теги разрешены, обязательны они или нет, могут ли повторяться в документе и так далее. Таким образом, XML описывает данные, а XSD — структуру этих данных, или метаданные. В терминах программирования, XSD — описание типов, в то время как в XML-файле описаны объекты этих типов. По адресу http://www.w3.org/TR/2003/WD-xmlschema-11-req-20030121/ находится рабочий проект стандарта XSD 1.1.

Файл описания схемы начинается с описания префикса пространства имен, который включается затем во все элементы этого файла. Адрес http://tempuri.org предназначается для задания URI для пространств имен ASP .NET:

<xs:schema id="XMLSchema2" targetNamespace= "http://tempuri.org/XMLSchema2.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema2.xsd" xmlns:mstns="http://tempuri.org/XMLSchema2.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">

Создавая схемы XSD, можно:

1. декларировать элементы и атрибуты.

<xs:element name="Author" type="xs:string" default="Пушкин" minOccurs="1" maxOccurs="1" />


Например, это определение задает, что элемент "Author" строкового типа, должен появляться один и только один и раз, и если он не указан, то принимает значение "Пушкин".

<xs:element name="Child" type=" xs:string" maxOccurs="unbounded"/>

Параметр maxOccurs="unbounded" указывает, что элемент может встречаться любое количество раз.

Параметр ref позволяет ссылаться на уже описанный в данном файле глобальный элемент или атрибут, чтобы избежать повторного описания одних и тех же элементов.

2. определить простые и сложные типы.

В XSD есть предопределенные типы — примерно такие же, как в .NET. Во время работы приложения они преобразуются в типы .NET. На их основании можно строить сложные типы, похожие на структуры языков программирования. Сложный тип состоит из последовательности описаний элементов. Определим сложный тип:

<xs:complexType name="Quote"> <xs:sequence> <xs:element name="Text" type="xs:string" minOccurs="1" maxOccurs="1" /> <xs:element name="Author" type="xs:string" default="Пушкин" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType>

Тег <xs:sequence> определяет, что элементы в данном типе должны появляться в заданном порядке. Если бы использовался тег <xs:all>, то порядок появления элементов мог бы быть любым.

Тег <xs:choice> похож на структуру с вариантами.



Он определяет, что в элементе данного типа должен быть только один из вложенных элементов:

<xs:complexType name="StateProvinceType"> <xs:choice> <xs:element name="State" type="xs:string"/> <xs:element name="Province" type="xs:string"/> </xs:choice> </xs:complexType>



Простые типы тоже строятся на основе стандартных типов, накладывая разные ограничения. Типы могут быть глобальными или вложенными в определение элементов. В предыдущем примере определен глобальный сложный тип Quote.

Глобальный тип можно использовать в определении элементов:

<xs:element name="Quote" type="Quote" maxOccurs="unbounded" />

В следующем примере определен простой тип, вложенный в определение элемента MyValue:

<xs:element name="MyValue" type="MyInteger"/> <xs:simpleType name="MyInteger"> <xs:restriction base="xs:positiveInteger"> <xs:minInclusive value="1"/> <xs:maxInclusive value="10"/> </xs:restriction> </xs:simpleType>

Значениями этого типа могут быть целые положительные числа от 1 до 10.

Простой тип может быть перечислением:

<xs:simpleType name="Answers"> <xs:restriction base="xs:string"> <xs:enumeration value="yes"> </xs:enumeration> <xs:enumeration value="no" /> <xs:enumeration value="don't know" /> </xs:restriction> </xs:simpleType>



3. добавлять новые группы и группы атрибутов.

В определении сложного типа могут фигурировать атрибуты. Предположим, мы хотим построить схему такого файла:

<?xml version="1.0" encoding="utf-8" ?> <FilmChoices> <Film Title='Броненосец "Потемкин"'> <Year>1925</Year> <Director>Эйзенштейн</Director></Film> <Film Title="Война и мир"> <Year>1967</Year> <Director>Сергей Бондарчук</Director> </Film> <Film Title ="Девятая рота"> <Year>2005</Year> <Director>Федор Бондарчук</Director> </Film> </FilmChoices>

Необходимо потребовать наличие атрибута Title:

<xs:attribute name="Title" type="xs:string" use="required"/>

Атрибуты могут быть только простых типов.

4. добавлять аннотации.

Аннотации позволяют вставлять описание существующих элементов — таким образом, в файл добавляется документация:

<xs:complexType name="Quote"> <xs:annotation> <xs:documentation> Цитаты разных авторов </xs:documentation> </xs:annotation>

<xs:documentation> предназначается для читателей файла, а <xs:appinfo> — для обрабатывающих файл программ.

Полное описание синтаксиса XSD можно прочитать по адресу http://www.w3.org/2001/XMLSchema.xsd.

Редактировать XSD-файлы в Visual Studio 2005 можно и через исходный код, и с помощью дизайнера. Для XML-документа можно автоматически сгенерировать соответствующую ему схему.В окне свойств XML-документа можно задать как файл схемы, так и файл преобразования. В таком случае студия автоматически проверяет файл на соответствие схеме и IntelliSense даже подставляет теги из этого файла.


Содержание раздела