Схема XML (W3C) - XML Schema (W3C)

Схема XML (W3C)
Расширение имени файла
.xsd
Тип интернет-СМИ
приложение / xml, текст / xml
Разработан Консорциум World Wide Web
Тип формата Язык схемы XML
Расширен с XML
Стандарт 1.0, Часть 1 Структуры (Рекомендация) ,

1.0, Часть 2 Типы данных (Рекомендация) ,
1.1, Части 1 Структуры (Рекомендация) ,

1.1, Часть 2 Типы данных (Рекомендация)

XSD ( определение схемы XML ), рекомендация Консорциума World Wide Web ( W3C ), определяет, как формально описывать элементы в документе расширяемого языка разметки ( XML ). Программисты могут использовать его для проверки каждой части содержимого элемента в документе, чтобы убедиться, что он соответствует описанию элемента, в который он помещен.

Как и все языки схем XML , XSD может использоваться для выражения набора правил, которым должен соответствовать XML-документ, чтобы считаться «действительным» в соответствии с этой схемой. Однако, в отличие от большинства других языков схем, XSD также был разработан с целью, чтобы определение действительности документа производило сбор информации, относящейся к определенным типам данных . Такая пост-проверка Infoset может быть полезной в разработке программного обеспечения для обработки документов XML.

История

Схема XML , опубликованная как рекомендация W3C в мае 2001 года, является одним из нескольких языков схем XML . Это был первый отдельный язык схем для XML, получивший статус Рекомендации W3C. Из-за путаницы между XML-схемой как конкретной спецификацией W3C и использованием того же термина для описания языков схем в целом, некоторые части сообщества пользователей называли этот язык WXS , инициализмом для XML-схемы W3C, в то время как другие ссылались на это как XSD , инициализм для определения схемы XML. В версии 1.1 W3C выбрал XSD в качестве предпочтительного имени, и это имя используется в этой статье.

В приложении со ссылками на спецификацию XSD признается влияние DTD и других ранних схем XML, таких как DDML , SOX , XML-Data и XDR . Он заимствовал особенности каждого из этих предложений, но также является компромиссом между ними. Из этих языков XDR и SOX продолжали использоваться и поддерживаться некоторое время после публикации XML Schema. Ряд продуктов Microsoft поддерживал XDR до выпуска MSXML 6.0 (который отказался от XDR в пользу схемы XML) в декабре 2006 года. 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» -пример ".)

Документы схемы XML обычно имеют расширение имени файла ".xsd". Уникальный тип Интернет-носителя еще не зарегистрирован для XSD, поэтому следует использовать «application / xml» или «text / xml» в соответствии с RFC 3023 .

Компоненты схемы

Основные компоненты схемы:

  • Объявления элементов , которые определяют свойства элементов. К ним относятся имя элемента и целевое пространство имен. Важным свойством является тип элемента, который ограничивает атрибуты и дочерние элементы, которые может иметь элемент. В XSD 1.1 тип элемента может зависеть от значений его атрибутов. Элемент может принадлежать к группе замещения; если элемент E находится в группе подстановки элемента H, то везде, где схема позволяет H появиться, E может появиться на его месте. Элементы могут иметь ограничения целостности: ограничения уникальности, определяющие, что конкретные значения должны быть уникальными в поддереве с корнем в элементе, и ссылочные ограничения, определяющие, что значения должны соответствовать идентификатору некоторого другого элемента. Объявления элементов могут быть глобальными или локальными, что позволяет использовать одно и то же имя для несвязанных элементов в разных частях документа-экземпляра.
  • Объявления атрибутов , которые определяют свойства атрибутов. Снова свойства включают имя атрибута и целевое пространство имен. Тип атрибута ограничивает значения, которые может принимать атрибут. Объявление атрибута может также включать значение по умолчанию или фиксированное значение (которое в таком случае является единственным значением, которое может принимать атрибут).
  • Простые и сложные типы . Они описаны в следующем разделе.
  • Модель группы и группы атрибутов определения. По сути, это макросы: именованные группы элементов и атрибутов, которые можно повторно использовать во многих определениях различных типов.
  • Использование атрибута представляет связь сложного типа и объявления атрибута и указывает, является ли атрибут обязательным или необязательным, когда он используется в этом типе.
  • Элемент частиц аналогично представляет соотношение сложного типа и объявления элемента, и указывает на минимальное и максимальное число раз , которое элемент может появляться в содержимом. Помимо элементарных частиц, модели содержимого могут включать в себя групповые частицы модели , которые действуют как нетерминалы в грамматике: они определяют единицы выбора и повторения в пределах последовательности разрешенных элементов. Кроме того, разрешены частицы с подстановочными знаками , которые разрешают набор различных элементов (возможно, любой элемент, если он находится в определенном пространстве имен).

Другие более специализированные компоненты включают аннотации, утверждения, нотации и компонент схемы, который содержит информацию о схеме в целом.

Типы

Простые типы (также называемые типами данных) ограничивают текстовые значения, которые могут появляться в элементе или атрибуте. Это один из наиболее значительных отличий схемы XML от DTD. Например, атрибут может содержать только действительную дату или десятичное число.

XSD предоставляет набор 19 примитивных типов данных ( anyURI , base64Binary , boolean , date , dateTime , decimal , double , duration , float , hexBinary , gDay , gMonth , gMonthDay , gYear , gYearMonth , NOTATION , QName , string , и time ). Это позволяет создавать новые типы данных из этих примитивов с помощью трех механизмов:

  • ограничение (уменьшение набора допустимых значений),
  • список (допускающий последовательность значений) и
  • union (с возможностью выбора значений из нескольких типов).

Двадцать пять производных типов определены в самой спецификации, и дополнительные производные типы могут быть определены пользователями в их собственных схемах.

Механизмы, доступные для ограничения типов данных, включают возможность указывать минимальные и максимальные значения, регулярные выражения, ограничения на длину строк и ограничения на количество цифр в десятичных значениях. XSD 1.1 снова добавляет утверждения, возможность указывать произвольное ограничение с помощью выражения XPath 2.0 .

Сложные типы описывают разрешенное содержимое элемента, включая его дочерний элемент и текст, а также его атрибуты. Определение сложного типа состоит из набора использования атрибутов и модели содержимого. Разновидности модели контента включают:

  • Содержимое только для элементов, в котором не может отображаться текст (кроме пробелов или текста, заключенного в дочерний элемент)
  • простой контент, в котором разрешен текст, но запрещены дочерние элементы
  • пустой контент, в котором не разрешены ни текст, ни дочерние элементы
  • смешанный контент, который позволяет отображать как элементы, так и текст

Сложный тип может быть производным от другого сложного типа путем ограничения (запрещение некоторых элементов, атрибутов или значений, допускаемых базовым типом) или путем расширения (позволяя появление дополнительных атрибутов и элементов). В XSD 1.1 сложный тип может быть ограничен утверждениями - выражениями XPath 2.0, оцениваемыми по содержимому, которое должно быть истинным.

Информационный набор после проверки схемы

После проверки на основе схемы XML можно выразить структуру и содержимое документа XML в терминах модели данных, которая была неявной во время проверки. Модель данных схемы XML включает:

  • Словарь (названия элементов и атрибутов)
  • Модель содержания (отношения и структура)
  • Типы данных

Этот набор информации называется информационным набором после проверки схемы (PSVI). PSVI придает действительному XML-документу его «тип» и помогает рассматривать документ как объект, используя парадигмы объектно-ориентированного программирования (ООП).

Вторичное использование XML-схем

Основная причина определения схемы XML - это формальное описание документа XML; однако полученная схема имеет ряд других применений, выходящих за рамки простой проверки.

Генерация кода

Схема может использоваться для генерации кода, называемого привязкой данных XML . Этот код позволяет обрабатывать содержимое XML-документов как объекты в среде программирования.

Создание документации по структуре файлов XML

Схема может использоваться для создания удобочитаемой документации файловой структуры XML; это особенно полезно, когда авторы использовали элементы аннотации. Формального стандарта для создания документации не существует, но доступен ряд инструментов, таких как таблица стилей Xs3p , которые позволяют создавать высококачественные читаемые HTML и печатные материалы.

Критика

Несмотря на то, что XML-схема успешна в том смысле, что она получила широкое распространение и в значительной степени достигает поставленных целей, она стала предметом серьезной критики, возможно, большей, чем любая другая Рекомендация W3C. Хорошее резюме критики дано Джеймсом Кларком, Андерсом Мёллером и Майклом Шварцбахом, Риком Джеллиффом и Дэвидом Уэббером.

Общие проблемы:

  • Он слишком сложен (спецификация составляет несколько сотен страниц на очень техническом языке), поэтому неспециалистам сложно использовать его, но многим неспециалистам нужны схемы для описания форматов данных. Сама рекомендация W3C чрезвычайно трудна для чтения. Большинство пользователей находят, что W3Cs XML Schema Primer намного проще для понимания.
  • XSD не имеет формальной математической спецификации. (Это затрудняет рассуждение о схемах, например, чтобы доказать, что изменение схемы обратно совместимо.)
  • В языке много сюрпризов, например, ограничение элементов работает иначе, чем ограничение атрибутов.

Практические ограничения выразимости:

  • XSD предлагает очень слабую поддержку неупорядоченного содержимого.
  • XSD не может требовать определенного корневого элемента (поэтому для проверки даже самых простых документов требуется дополнительная информация).
  • При описании смешанного содержимого символьные данные не могут быть каким-либо образом ограничены (невозможно указать даже набор допустимых символов).
  • Объявления содержимого и атрибутов не могут зависеть от атрибутов или контекста элемента (это также было указано как центральная проблема DTD).
  • Это не самоописание на 100% (в качестве тривиального примера см. Предыдущий пункт), хотя это было первоначальным требованием к дизайну.
  • Значения по умолчанию нельзя указывать отдельно от объявлений (это затрудняет создание семейств схем, которые отличаются только значениями по умолчанию); значениями по умолчанию для элементов могут быть только символьные данные (не содержащие разметки).

Технические проблемы:

  • Хотя технически он соответствует пространству имен, он, похоже, не следует духу пространства имен (например, «неквалифицированные местные жители»).
  • XSD 1.0 не предоставляет никаких возможностей для утверждения, что значение или наличие одного атрибута зависит от значений или наличия других атрибутов (так называемые ограничения совместного появления ). Это было исправлено в XSD 1.1.
  • Набор предлагаемых типов данных XSD весьма произвольный.
  • Две задачи проверки и дополнения (добавление информации о типе и значений по умолчанию) должны выполняться отдельно.

Версия 1.1

XSD 1.1 стал рекомендацией W3C в апреле 2012 года , что означает, что это утвержденная спецификация W3C.

Важные новые функции XSD 1.1:

  • Возможность определять утверждения относительно содержимого документа с помощью выражений XPath 2.0 (идея заимствована из Schematron ).
  • Возможность выбора типа, по которому будет проверяться элемент, на основе значений атрибутов элемента («условное присвоение типа»).
  • Ослабление правил, согласно которым явные элементы в модели содержимого не должны совпадать с подстановочными знаками, также разрешенными моделью.
  • Возможность указывать подстановочные знаки (как для элементов, так и для атрибутов), которые применяются ко всем типам в схеме, так что все они реализуют одну и ту же политику расширяемости.

До проекта Предлагаемой рекомендации XSD 1.1 также предлагал добавление нового числового типа данных, precisionDecimal. Это оказалось спорным, и поэтому было исключено из спецификации на поздней стадии разработки.

Смотрите также

Рекомендации

дальнейшее чтение

внешняя ссылка

Спецификация W3C XML Schema 1.0

W3C XML Schema 1.1 Спецификация

Другой