XSD ( XML Schema Definition ), рекомендация Консорциума Всемирной паутины ( W3C ), определяет, как формально описывать элементы в документе Extensible Markup Language ( XML ). Он может использоваться программистами для проверки каждого фрагмента содержимого элемента в документе, чтобы убедиться, что он соответствует описанию элемента, в который он помещен. [1]
Как и все языки схем XML , XSD может использоваться для выражения набора правил, которым должен соответствовать XML-документ, чтобы считаться «действительным» согласно этой схеме. Однако, в отличие от большинства других языков схем, XSD также был разработан с намерением, чтобы определение действительности документа создавало набор информации, соответствующей определенным типам данных . Такой набор данных после проверки может быть полезен при разработке программного обеспечения для обработки XML-документов.
XML Schema , опубликованный в качестве рекомендации W3C в мае 2001 года, [2] является одним из нескольких языков схем XML . Это был первый отдельный язык схем для XML, получивший статус Рекомендации от W3C. Из-за путаницы между XML Schema как конкретной спецификацией W3C и использованием того же термина для описания языков схем в целом, некоторые части сообщества пользователей называли этот язык WXS , аббревиатура от W3C XML Schema, в то время как другие называли его XSD , аббревиатура от XML Schema Definition. [3] [4] В версии 1.1 W3C решил принять XSD в качестве предпочтительного названия, и это название используется в этой статье.
В приложении к справочной информации спецификация XSD признает влияние DTD и других ранних усилий по созданию XML-схем, таких как DDML , SOX , XML-Data и XDR . Она переняла особенности каждого из этих предложений, но также является компромиссом между ними. Из этих языков XDR и SOX продолжали использоваться и поддерживаться некоторое время после публикации XML Schema. Ряд продуктов Microsoft поддерживали XDR до выпуска MSXML 6.0 (который отказался от XDR в пользу XML Schema) в декабре 2006 года. [5] Commerce One , Inc. поддерживала свой язык схемы SOX до объявления о банкротстве в конце 2004 года.
Наиболее очевидными функциями, предлагаемыми в XSD, которые отсутствуют в собственных определениях типов документов (DTD) XML, являются поддержка пространств имен и типов данных, то есть возможность определять содержимое элементов и атрибутов как содержащее такие значения, как целые числа и даты, а не произвольный текст.
Спецификация XSD 1.0 была первоначально опубликована в 2001 году, а второе издание вышло в 2004 году для исправления большого количества ошибок. XSD 1.1 стала рекомендацией W3C в апреле 2012 года.
Технически, схема — это абстрактная коллекция метаданных, состоящая из набора компонентов схемы : в основном, деклараций элементов и атрибутов, а также сложных и простых определений типов. Эти компоненты обычно создаются путем обработки коллекции документов схемы , которые содержат определения этих компонентов на исходном языке. Однако в популярном использовании документ схемы часто называют схемой.
Документы схемы организованы по пространству имен: все названные компоненты схемы принадлежат целевому пространству имен, а целевое пространство имен является свойством документа схемы в целом. Документ схемы может включать другие документы схемы для того же пространства имен и может импортировать документы схемы для другого пространства имен.
Когда документ экземпляра проверяется на соответствие схеме (процесс, известный как оценка ), схема, которая будет использоваться для проверки, может быть либо предоставлена в качестве параметра механизму проверки, либо на нее можно ссылаться непосредственно из документа экземпляра с помощью двух специальных атрибутов и xsi:schemaLocation
. xsi:noNamespaceSchemaLocation
(Последний механизм требует, чтобы клиент, вызывающий проверку, доверял документу в достаточной степени, чтобы знать, что он проверяется на соответствие правильной схеме. «xsi» — это общепринятый префикс для пространства имен «http://www.w3.org/2001/XMLSchema-instance».)
Документы XML Schema обычно имеют расширение имени файла ".xsd". Уникальный тип интернет-носителя пока не зарегистрирован для XSD, поэтому следует использовать "application/xml" или "text/xml" в соответствии с RFC 3023.
Основными компонентами схемы являются:
Другие более специализированные компоненты включают аннотации, утверждения, нотации и компонент схемы , который содержит информацию о схеме в целом.
Простые типы (также называемые типами данных) ограничивают текстовые значения, которые могут появляться в элементе или атрибуте. Это одно из наиболее существенных отличий XML Schema от DTD. Например, атрибут может быть ограничен только допустимой датой или десятичным числом.
XSD предоставляет набор из 19 примитивных типов данных ( anyURI
, base64Binary
, boolean
, date
, dateTime
, decimal
, double
, duration
, float
, hexBinary
, gDay
, gMonth
, gMonthDay
, gYear
, gYearMonth
, NOTATION
, QName
, string
, и time
). Он позволяет создавать новые типы данных из этих примитивов с помощью трех механизмов:
Двадцать пять производных типов определены в самой спецификации, а дополнительные производные типы могут быть определены пользователями в их собственных схемах.
Механизмы, доступные для ограничения типов данных, включают возможность указания минимальных и максимальных значений, регулярных выражений, ограничений на длину строк и ограничений на количество цифр в десятичных значениях. XSD 1.1 снова добавляет утверждения, возможность указания произвольного ограничения с помощью выражения XPath 2.0 .
Сложные типы описывают разрешенное содержимое элемента, включая его элементы и текстовые дочерние элементы и его атрибуты. Определение сложного типа состоит из набора использований атрибутов и модели содержимого. Разновидности модели содержимого включают:
Сложный тип может быть получен из другого сложного типа путем ограничения (запрещая некоторые элементы, атрибуты или значения, которые допускает базовый тип) или путем расширения (позволяя появляться дополнительным атрибутам и элементам). В XSD 1.1 сложный тип может быть ограничен утверждениями — выражениями XPath 2.0, оцениваемыми по содержимому, которое должно оцениваться как истинное.
После проверки на основе XML Schema можно выразить структуру и содержание XML-документа в терминах модели данных , которая подразумевалась во время проверки. Модель данных XML Schema включает:
Этот набор информации называется Post-Schema-Validation Infoset (PSVI). PSVI дает допустимому XML-документу его «тип» и облегчает обработку документа как объекта, используя парадигмы объектно-ориентированного программирования (ООП).
Основной причиной определения XML-схемы является формальное описание XML-документа; однако полученная схема имеет ряд других применений, выходящих за рамки простой проверки.
Схему можно использовать для генерации кода, называемого XML Data Binding . Этот код позволяет обрабатывать содержимое XML-документов как объекты в среде программирования.
Схему можно использовать для создания читаемой человеком документации структуры файла XML; это особенно полезно, когда авторы использовали элементы аннотации. Не существует формального стандарта для создания документации, но доступен ряд инструментов, таких как таблица стилей Xs3p, которые будут создавать высококачественные читаемые HTML и печатные материалы.
Хотя XML Schema успешна в том, что она широко принята и в значительной степени достигает того, для чего она была создана, она стала предметом большой критики, возможно, более резкой, чем любая другая Рекомендация W3C. Хорошие резюме критики предоставлены Джеймсом Кларком [6] , Андерсом Мёллером и Михаэлем Шварцбахом [7], Риком Джеллиффом [8] и Дэвидом Уэббером. [9]
Общие проблемы:
Практические ограничения выразительности:
Технические проблемы:
XSD 1.1 стал рекомендацией W3C в апреле 2012 года, что означает, что он является одобренной спецификацией W3C.
Важные новые функции XSD 1.1:
До проекта Proposed Recommendation, XSD 1.1 также предлагал добавление нового числового типа данных, precisionDecimal. Это оказалось спорным и поэтому было исключено из спецификации на поздней стадии разработки.
Спецификация W3C XML Schema 1.0
Спецификация W3C XML Schema 1.1
Другой