Открыть сервис

XSD

XML Schema Definition (XSD) — это язык описания структуры XML-документа, основанный на синтаксисе XML и используемый для определения допустимых элементов, атрибутов, типов данных и ограничений, которым должен соответствовать корректный XML-файл. XSD является альтернативой более ранним технологиям, таким как DTD (Document Type Definition), и предоставляет более строгие и расширяемые средства валидации.

История и развитие

Изначально для описания структуры XML-документов использовался язык DTD, заимствованный из SGML. Однако DTD обладал рядом недостатков: он не был написан на XML (использовался собственный синтаксис), не поддерживал пространства имён (namespaces) и имел ограниченные возможности по работе с типами данных (все данные трактовались как строки).

В 2001 году консорциум W3C (World Wide Web Consortium) опубликовал первую версию рекомендации XML Schema (XSD 1.0). Эта спецификация ввела строгую типизацию, поддержку пространств имён и возможность наследования типов. В 2012 году была выпущена версия XSD 1.1, которая добавила условные ограничения (assertions), возможность переопределения типов и улучшенную обработку ключей.

Основные понятия и синтаксис

XSD-схема представляет собой XML-документ с корневым элементом <xs:schema>. Пространство имён XSD обычно задаётся как xmlns:xs="http://www.w3.org/2001/XMLSchema". Все элементы и типы данных, определённые в схеме, относятся к целевому пространству имён, которое указывается атрибутом targetNamespace`.

Элементы и атрибуты

Основные строительные блоки XSD:

  • xs:element — определяет элемент XML. Может содержать атрибуты name (имя), type (тип данных) и ref (ссылка на глобальный элемент).
  • xs:attribute — определяет атрибут элемента. Имеет атрибуты name, type и use (обязательность: required или optional).
  • xs:complexType — описывает сложный тип, который может содержать вложенные элементы и атрибуты.
  • xs:simpleType — описывает простой тип, основанный на встроенных типах данных XSD, с возможностью наложения ограничений (facets).

Пример простой схемы: ``xml <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">; <xs:element name="book"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="author" type="xs:string"/> <xs:element name="year" type="xs:integer"/> </xs:sequence> <xs:attribute name="isbn" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:schema> ``

Типы данных

XSD поддерживает широкий набор встроенных типов данных, разделённых на две категории:

  • Примитивные типы: string, boolean, decimal, float, double, dateTime, time, date, anyURI, QName и другие.
  • Производные типы: integer, positiveInteger, negativeInteger, nonNegativeInteger, token, language, NMTOKEN и другие.

Пользователь может создавать собственные простые типы на основе встроенных, накладывая ограничения через фацеты (facets):

  • xs:minInclusive / xs:maxInclusive — диапазон числовых значений.
  • xs:minLength / xs:maxLength — длина строки.
  • xs:pattern — регулярное выражение для проверки строки.
  • xs:enumeration — список допустимых значений.

Пример пользовательского типа: ``xml <xs:simpleType name="ratingType"> <xs:restriction base="xs:integer"> <xs:minInclusive value="1"/> <xs:maxInclusive value="5"/> </xs:restriction> </xs:simpleType> ``

Структура сложных типов

Сложные типы определяют порядок и количество вложенных элементов. Для этого используются композиторы:

  • xs:sequence — элементы должны следовать в указанном порядке.
  • xs:choice — может быть выбран только один из перечисленных элементов.
  • xs:all — элементы могут появляться в любом порядке, каждый не более одного раза (ограничение: не более вложенных элементов).

Атрибуты minOccurs и maxOccurs управляют количеством вхождений элемента. По умолчанию minOccurs="1", maxOccurs="1". Для неограниченного количества используется maxOccurs="unbounded".

Пространства имён и импорт

При работе с несколькими схемами или XML-документами, использующими разные пространства имён, XSD предоставляет механизмы:

  • xs:import — позволяет импортировать схему из другого пространства имён.
  • xs:include — включает в текущую схему содержимое другой схемы с тем же целевым пространством имён.
  • elementFormDefault — атрибут схемы, определяющий, должны ли локальные элементы быть квалифицированы пространством имён (значения: qualified или unqualified).

Валидация XML-документов

Основное назначение XSD — валидация XML-документов. Процесс проверки включает:

  1. Проверку синтаксической корректности XML.
  2. Сопоставление элементов и атрибутов с определениями в схеме.
  3. Проверку типов данных и ограничений.
  4. Проверку уникальности ключей и ссылок (через xs:unique, xs:key, xs:keyref).

Валидацию выполняют парсеры, такие как Xerces (Apache), libxml2, Saxon, а также встроенные средства в языках программирования (например, XmlReader в .NET, lxml в Python).

Применение

XSD широко используется в различных областях:

  • Электронный документооборот: форматы документов (например, счета-фактуры в России, документы в системах ЭДО) часто описываются XSD-схемами.
  • Веб-сервисы: WSDL (Web Services Description Language) использует XSD для описания типов данных, передаваемых в SOAP-сообщениях.
  • Конфигурационные файлы: многие программные системы (например, Spring Framework, Apache Maven) используют XSD для валидации XML-конфигураций.
  • Обмен данными: отраслевые стандарты, такие как UBL (Universal Business Language) и GS1, определяют схемы XSD для унификации обмена данными между организациями.
  • Научные данные: форматы представления данных (например, в биоинформатике, геоинформатике) часто сопровождаются XSD-схемами.

Ограничения и критика

Несмотря на широкое распространение, XSD имеет ряд недостатков:

  • Громоздкость: схемы могут быть очень объёмными и трудными для чтения по сравнению с DTD или Relax NG.
  • Сложность обработки: реализация полной поддержки XSD 1.1 требует значительных вычислительных ресурсов.
  • Неполная поддержка: некоторые процессоры XSD не реализуют все возможности спецификации, особенно из версии 1.1.
  • Альтернативы: существуют более простые и выразительные языки описания схем, такие как Relax NG (часто используется в сочетании с Schematron для дополнительных проверок) и JSON Schema (для JSON-данных).

Инструменты для работы с XSD

Для создания, редактирования и валидации XSD-схем используются:

  • Интегрированные среды разработки (IDE): Visual Studio, Eclipse (с плагинами XML), IntelliJ IDEA, Oxygen XML Editor.
  • Командные утилиты: xmllint (из состава libxml2), Saxon, Apache Xerces.
  • Библиотеки для языков программирования: .NET (System.Xml.Schema), Java (javax.xml.validation), Python (lxml, xmlschema), JavaScript (xsd-schema-validator).

Пример полной схемы

Ниже приведён пример XSD-схемы для описания каталога книг: ```xml <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; targetNamespace="http://example.com/books"; xmlns="http://example.com/books"; elementFormDefault="qualified">

<xs:element name="catalog"> <xs:complexType> <xs:sequence> <xs:element name="book" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="author" type="xs:string"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> <xs:attribute name="isbn" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ```

Источники

  1. W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures. W3C Recommendation, 2012.
  2. W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes. W3C Recommendation, 2012.
  3. Walmsley, P. Definitive XML Schema. Prentice Hall, 2001.
  4. Harold, E. R. XML Bible. Wiley, 2001.
  5. Документация Apache Xerces — XML Schema Validation.
  6. Спецификация UBL 2.1 — Universal Business Language.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →