|
https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Работа с XML
Файлы определения схемы документа
Согласно современному стандарту, валидный документ должен соответствовать связанному с ним файлу 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">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 даже подставляет теги из этого файла.