XSD ( определение схемы XML ), рекомендация Консорциума Всемирной паутины ( W3C ), определяет, как формально описывать элементы в документе расширяемого языка разметки ( XML ). Программисты могут использовать его для проверки каждой части содержимого элемента в документе, чтобы убедиться, что он соответствует описанию элемента, в котором он находится. [1]
Как и все языки схем XML , XSD можно использовать для выражения набора правил, которым должен соответствовать документ XML, чтобы считаться «действительным» в соответствии с этой схемой. Однако, в отличие от большинства других языков схем, XSD также был разработан с намерением, чтобы при определении действительности документа производился сбор информации, относящейся к конкретным типам данных . Такой информационный набор после проверки может быть полезен при разработке программного обеспечения для обработки XML-документов.
XML-схема , опубликованная в качестве рекомендации W3C в мае 2001 года, [2] является одним из нескольких языков схем XML . Это был первый отдельный язык схемы для XML , получивший статус Рекомендации W3C. Из-за путаницы между XML-схемой как конкретной спецификацией W3C и использованием одного и того же термина для описания языков схем в целом, некоторые части сообщества пользователей называли этот язык WXS , инициализмом для XML-схемы W3C, в то время как другие ссылались на это как XSD , инициализм для определения схемы XML. [3] [4] В версии 1.1 W3C решил использовать XSD в качестве предпочтительного имени, и это имя используется в этой статье.
В приложении со ссылками спецификация XSD признает влияние DTD и других ранних усилий по созданию схемы XML, таких как DDML , SOX , XML-Data и XDR . Он перенял черты каждого из этих предложений, но также является компромиссом между ними. Из этих языков XDR и SOX продолжали использоваться и поддерживаться некоторое время после публикации XML-схемы. Ряд продуктов Microsoft поддерживали XDR до выпуска MSXML 6.0 (в котором XDR был заменен схемой XML) в декабре 2006 года. [5] Компания Commerce One , Inc. поддерживала свой язык схемы SOX до объявления о банкротстве в конце 2004 года.
Наиболее очевидными функциями, предлагаемыми в XSD, которые недоступны в собственных определениях типов документов XML (DTD), являются осведомленность о пространстве имен и типах данных, то есть возможность определять содержимое элементов и атрибутов как содержащее такие значения, как целые числа и даты, а не произвольный текст.
Спецификация XSD 1.0 была первоначально опубликована в 2001 году, а второе издание последовало в 2004 году с исправлением большого количества ошибок. XSD 1.1 стал рекомендацией W3C в апреле 2012 года.
Технически схема — это абстрактная коллекция метаданных, состоящая из набора компонентов схемы : в основном объявлений элементов и атрибутов, а также сложных и простых определений типов. Эти компоненты обычно создаются путем обработки набора документов схемы , которые содержат определения этих компонентов на исходном языке. Однако в обычном использовании документ схемы часто называют схемой.
Документы схемы организованы по пространству имен: все именованные компоненты схемы принадлежат целевому пространству имен, а целевое пространство имен является свойством документа схемы в целом. Документ схемы может включать в себя другие документы схемы для того же пространства имен и может импортировать документы схемы для другого пространства имен.
Когда документ экземпляра проверяется на соответствие схеме (процесс, известный как оценка ), схема, которая будет использоваться для проверки, может быть либо предоставлена в качестве параметра механизму проверки, либо на нее можно ссылаться непосредственно из документа экземпляра с использованием двух специальных атрибутов. , xsi:schemaLocation
и xsi:noNamespaceSchemaLocation
. (Последний механизм требует, чтобы клиент, вызывающий проверку, достаточно доверял документу, чтобы знать, что он проверяется на соответствие правильной схеме. «xsi» — это обычный префикс для пространства имен «http://www.w3.org/2001/XMLSchema». -пример".)
Документы схемы XML обычно имеют расширение имени файла «.xsd». Уникальный тип интернет-медиа еще не зарегистрирован для XSD, поэтому следует использовать «application/xml» или «text/xml» в соответствии с RFC 3023.
Основными компонентами схемы являются:
Другие более специализированные компоненты включают аннотации, утверждения, обозначения и компонент схемы , который содержит информацию о схеме в целом.
Простые типы (также называемые типами данных) ограничивают текстовые значения, которые могут присутствовать в элементе или атрибуте. Это одно из наиболее существенных отличий XML-схемы от 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 , которые оцениваются по содержимому, которое должно иметь значение true.
После проверки на основе XML-схемы можно выразить структуру и содержимое XML-документа в терминах модели данных , которая была неявной во время проверки. Модель данных XML-схемы включает в себя:
Этот набор информации называется информационным набором после проверки схемы (PSVI). PSVI присваивает допустимому XML-документу его «тип» и облегчает обработку документа как объекта, используя парадигмы объектно-ориентированного программирования (ООП).
Основная причина определения схемы XML — формальное описание XML-документа; однако полученная схема имеет ряд других применений, выходящих за рамки простой проверки.
Схема может использоваться для генерации кода, называемого привязкой данных XML . Этот код позволяет рассматривать содержимое XML-документов как объекты в среде программирования.
Схема может использоваться для создания удобочитаемой документации файловой структуры XML; это особенно полезно, когда авторы использовали элементы аннотации. Официального стандарта для создания документации не существует, но доступен ряд инструментов, таких как таблица стилей Xs3p, которые позволяют создавать высококачественные читаемые HTML и печатные материалы.
Хотя XML-схема успешна в том смысле, что она получила широкое распространение и в значительной степени достигает поставленных целей, она стала предметом серьезной критики, возможно, большей, чем любая другая рекомендация W3C. Хорошее резюме критики предоставлено Джеймсом Кларком, [6] Андерсом Мёллером и Михаэлем Шварцбахом, [7] Риком Джеллиффом [8] и Дэвидом Уэббером. [9]
Общие проблемы:
Практические ограничения выразимости:
Технические проблемы:
XSD 1.1 стал рекомендацией W3C в апреле 2012 года, что означает, что это утвержденная спецификация W3C.
Важными новыми функциями XSD 1.1 являются:
До проекта предлагаемой рекомендации в XSD 1.1 также предлагалось добавление нового числового типа данных — PrecisionDecimal. Это оказалось спорным, и поэтому было исключено из спецификации на поздней стадии разработки.
Спецификация W3C XML Schema 1.0
Спецификация W3C XML Schema 1.1
Другой