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

Текст XSD схемы и XML документ, соответствующий этой схеме я не стал включать в статью из-за их размера.
Первая строчка схемы указывает, что документ является XML документом и использует кодировку UTF-8.
<?xml version="1.0" encoding="UTF-8"?>
Со следующей строки начинается описания главного элемента документа — habra_user.<xs:element name="habra_user">
Строки, документирующие элемент: <xs:annotation>
<xs:documentation>Главный элемент схемы. Описывает пользователя хабра</xs:documentation>
</xs:annotation>
Тег <xs:complexType> описывает «сложный» тип данных user_name. При желании его можно вынести как отдельный тип данных, по аналогии с contact_info. Для этого, нужно блок <xs:complexType> перенести в <xs:schema> и указать атрибут name, а элементу задать атрибут type.Элементы user_name, first_name, last_name имеют строковый тип и описывают пользователя, имя и фамилию владельца аккаунта.
Элемент date_of_birth имеет тип данных «дата» и описывает дату рождения.
Дату регистрации описывает register_date, имеющий собственный тип данных customDateTime. Значение этого тега будет задаваться с помощью атрибута value. На это указывают строки.
<xs:attribute name="value" use="required">
При этом атрибут — обязательный. Чтобы значение соответствовало требованиям, опишем «проверки»: <xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="19"/>
<xs:pattern value="[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]"/>
</xs:restriction>
</xs:simpleType>
В таком случае длина строки будет всегда 19, это задано тегом <xs:length> и само значение будет соответствовать шаблону, указанным в теге <xs:pattern>.Элементы contact_info и blog — массивы, на это указывает атрибут maxOccurs=«unbounded».
Тег <xs:choice> определяет то, что вложенным элементом будет один из элементов ICQ или linkedin.
Тег <xs:sequence> указывает на то, что вложенные элементы будут blog_name и blog_url именно в такой последовательности. Если последовательность не важна, то нужно использовать тег <xs:all>.
Дополнительно о XSD схемах можно почитать Wikipedia и W3C. Для создания макета была использована программа Altova XMLSpy.
Спасибо за внимание!

