XML-схема
XML-схема (XML Schema, также известная как XSD — XML Schema Definition) — это язык описания структуры и ограничений содержимого XML-документов, основанный на синтаксисе XML. XML-схема определяет допустимые элементы, атрибуты, типы данных, их иерархию и правила валидации, позволяя проверять корректность XML-документов по заданному шаблону. Является более мощной и гибкой альтернативой DTD (Document Type Definition).
История и развитие
Первая версия спецификации XML Schema была разработана консорциумом W3C (World Wide Web Consortium) и принята в качестве рекомендации 2 мая 2001 года (XML Schema 1.0). Основной целью было создание языка, который бы преодолел ограничения DTD: использование XML-синтаксиса, поддержка пространств имён (namespaces), строгая типизация данных и возможность расширения.
В 2004 году вышла вторая редакция XML Schema 1.0, исправлявшая неточности. Работа над версией 1.1 была завершена в апреле 2012 года, когда она стала рекомендацией W3C. Основные нововведения XML Schema 1.1 включали поддержку условных ограничений (assertions), возможность переопределения типов и улучшенную обработку атрибутов.
Структура XML-схемы
XML-схема сама является XML-документом, корневой элемент которого обычно называется <xs:schema> (префикс xs: указывает на пространство имён http://www.w3.org/2001/XMLSchema`). Схема состоит из следующих основных компонентов:
Простые типы данных (simple types)
Простые типы определяют значения, не содержащие дочерних элементов или атрибутов. XML Schema включает встроенные примитивные типы (например, xs:string, xs:integer, xs:decimal, xs:date, xs:boolean) и позволяет создавать собственные пользовательские типы путём ограничения встроенных.
Пример пользовательского простого типа: ``xml <xs:simpleType name="positiveInteger"> <xs:restriction base="xs:integer"> <xs:minInclusive value="1"/> </xs:restriction> </xs:simpleType> ``
Сложные типы данных (complex types)
Сложные типы описывают элементы, которые могут содержать дочерние элементы, атрибуты или оба компонента. Они подразделяются на несколько видов:
- Содержащие только элементы (sequence, choice, all).
- Содержащие только атрибуты (simpleContent с расширением).
- Содержащие и элементы, и атрибуты (complexContent).
Пример сложного типа: ``xml <xs:complexType name="ProductType"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> <xs:attribute name="id" type="xs:ID" use="required"/> </xs:complexType> ``
Элементы и атрибуты
Элементы объявляются с помощью тега <xs:element>, атрибуты — <xs:attribute>. Они могут ссылаться на простые или сложные типы, а также быть определёнными непосредственно внутри схемы.
Ограничения (facets)
Для простых типов XML Schema предоставляет набор ограничений, таких как:
minLength/maxLength— длина строки.minInclusive/maxInclusive— диапазон числовых значений.pattern— регулярное выражение для шаблона.enumeration— перечисление допустимых значений.whiteSpace— обработка пробелов.
Пространства имён (namespaces)
XML Schema поддерживает пространства имён, что позволяет объединять схемы из разных источников и избегать конфликтов имён. Атрибут targetNamespace определяет пространство имён для элементов, описываемых схемой.
Классификация XML-схем
По способу использования различают:
- Встроенные схемы — определяются непосредственно в XML-документе (например, с помощью атрибута
xsi:schemaLocation). - Внешние схемы — хранятся в отдельных файлах с расширением
.xsdи подключаются через импорт или включение. - Схемы с пространством имён — используют
targetNamespace. - Безымянные схемы — не имеют целевого пространства имён.
По сложности:
- Простые схемы — содержат базовые типы и простую иерархию.
- Сложные схемы — включают наследование типов, переопределение и условные ограничения.
Применение XML-схем
XML-схемы широко используются в различных сферах информационных технологий:
Валидация данных
Основное назначение — проверка XML-документов на соответствие заданной структуре. Валидаторы (например, Xerces, Saxon, libxml2) сравнивают документ с XSD-схемой и выявляют ошибки: отсутствие обязательных элементов, неверные типы данных, нарушение ограничений.
Обмен данными между системами
XML-схемы служат контрактом при интеграции различных информационных систем. Например, в протоколах SOAP (Simple Object Access Protocol) и RESTful веб-сервисах XSD описывает структуру запросов и ответов.
Документирование форматов
XSD-схемы используются для документирования XML-форматов, таких как:
- Office Open XML (форматы .docx, .xlsx, .pptx) — Microsoft Office.
- SVG (Scalable Vector Graphics).
- XHTML — расширенная версия HTML на основе XML.
- RSS (Really Simple Syndication) — формат лент новостей.
- EBICS (Electronic Banking Internet Communication Standard) — в банковской сфере.
Генерация кода
На основе XSD-схем автоматически генерируются классы для языков программирования (Java, C#, Python) с помощью инструментов вроде JAXB, XSD.exe, pyxb. Это упрощает обработку XML-документов в приложениях.
Базы данных и XML
Некоторые СУБД (например, Oracle, PostgreSQL, Microsoft SQL Server) поддерживают хранение и индексацию XML-данных с привязкой к XSD-схемам для обеспечения целостности.
Пример XML-схемы и соответствующего XML-документа
Схема (catalog.xsd): ```xml <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/catalog" xmlns="http://example.com/catalog" 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="year" type="xs:gYear"/> <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> ```
XML-документ (catalog.xml): ``xml <?xml version="1.0" encoding="UTF-8"?> <catalog xmlns="http://example.com/catalog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.com/catalog catalog.xsd"> <book isbn="978-5-17-123456-7"> <title>Война и мир</title> <author>Лев Толстой</author> <year>1869</year> <price>599.99</price> </book> <book isbn="978-5-04-987654-3"> <title>Преступление и наказание</title> <author>Фёдор Достоевский</author> <year>1866</year> <price>450.00</price> </book> </catalog> ``
Инструменты и программное обеспечение
Для работы с XML-схемами существует множество инструментов:
- Редакторы XML: Oxygen XML Editor, Altova XMLSpy, Visual Studio Code с расширениями.
- Валидаторы: онлайн-сервисы (например, xmlvalidation.com), библиотеки для языков программирования (libxml2, Xerces-C++, Saxon).
- Генераторы схем: из XML-документов (trang) или из реляционных баз данных.
- Генераторы кода: JAXB (Java), XSD.exe (.NET), pyxb (Python).
Критика и ограничения
Несмотря на широкое распространение, XML-схемы имеют ряд недостатков:
- Избыточность синтаксиса — XSD-файлы часто значительно больше по размеру, чем сами XML-документы, что затрудняет их чтение и сопровождение.
- Сложность — полное освоение всех возможностей XSD (включая наследование, переопределение, условные ограничения) требует значительного времени.
- Производительность — валидация по сложной схеме может быть медленной для больших документов.
- Ограниченная поддержка — не все реализации XML-парсеров полностью поддерживают XML Schema 1.1 (например, условные ограничения).
Альтернативой XML-схемам являются более лёгкие языки описания, такие как Relax NG (более простой синтаксис) и Schematron (основанный на паттернах), а также JSON Schema для формата JSON.
Источники
- W3C Recommendation: XML Schema Part 1: Structures (Second Edition) — 28 October 2004.
- W3C Recommendation: XML Schema Part 2: Datatypes (Second Edition) — 28 October 2004.
- W3C Recommendation: XML Schema 1.1 Part 1: Structures — 5 April 2012.
- W3C Recommendation: XML Schema 1.1 Part 2: Datatypes — 5 April 2012.
- Harold, E. R., & Means, W. S. (2004). XML in a Nutshell. O'Reilly Media.
- Walmsley, P. (2007). Definitive XML Schema. Prentice Hall.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →