Pull to refresh

XSD — умный XML

XML *
XSD — это язык описания структуры XML документа. Его также называют XML Schema. При использовании XML Schema XML парсер может проверить не только правильность синтаксиса XML документа, но также его структуру, модель содержания и типы данных.

Такой подход позволяет объектно-ориентированным языкам программирования легко создавать объекты в памяти, что, несомненно, удобнее, чем разбирать 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.

Спасибо за внимание!
Tags:
Hubs:
Total votes 59: ↑49 and ↓10 +39
Views 398K
Comments Comments 34