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-документов. Процесс проверки включает:
- Проверку синтаксической корректности XML.
- Сопоставление элементов и атрибутов с определениями в схеме.
- Проверку типов данных и ограничений.
- Проверку уникальности ключей и ссылок (через
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> ```
Источники
- W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures. W3C Recommendation, 2012.
- W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes. W3C Recommendation, 2012.
- Walmsley, P. Definitive XML Schema. Prentice Hall, 2001.
- Harold, E. R. XML Bible. Wiley, 2001.
- Документация Apache Xerces — XML Schema Validation.
- Спецификация UBL 2.1 — Universal Business Language.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →