Схема XML - Википедия - XML schema

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

Есть языки, разработанные специально для выражения схем XML. В определение типа документа (DTD), который является родным для спецификации XML, представляет собой язык схем, который имеет относительно ограниченные возможности, но также имеет другие применения в XML, помимо выражения схем. Еще два широко используемых выразительных языка схем XML: Схема XML (с большой буквы S) и РЕЛАКС НГ.

Механизм связывания XML-документа со схемой зависит от языка схемы. Связь может быть достигнута посредством разметки внутри самого XML-документа или с помощью каких-либо внешних средств.

Проверка

Процесс проверки того, соответствует ли XML-документ схеме, называется Проверка, который отличается от основной концепции синтаксиса XML. правильная форма. Все документы XML должны быть правильно сформированы, но не обязательно, чтобы документ был действительным, если синтаксический анализатор XML не «проверяет», и в этом случае документ также проверяется на соответствие связанной с ним схеме. DTD-проверка парсеры являются наиболее распространенными, но некоторые также поддерживают XML-схему или RELAX NG.


Проверка экземпляра документа относительно схемы может рассматриваться как концептуально отдельная операция от синтаксического анализа XML. Однако на практике многие валидаторы схемы интегрированы с анализатором XML.

Языки

Для указания схемы XML доступно несколько разных языков. У каждого языка есть свои сильные и слабые стороны.

Основная цель языка схемы - указать, какой может быть структура XML-документа. Это означает, какие элементы могут находиться в каких других элементах, какие атрибуты разрешены и запрещены для конкретного элемента и т. Д. Схема аналогична грамматика для языка; схема определяет, каким может быть словарный запас для языка и каково действительное «предложение».

Существуют исторические и текущие языки схем XML:

ЯзыкАббревиатураВерсииОрган власти
Язык ограничений в XMLCLiX2005Независимый[1]
Возможность описания содержания документа для XML, RDF рамки[2]DCDВерсия 1.0 (1998)W3C (Примечание)
Язык разметки определения документаDDMLv0 (1999)W3C (Примечание)
Описание структуры документаDSD2002, 2005БРИКС (несуществующий)
Определение типа документаDTD1986 (SGML)ISO[3]
2008 (XML)ISO / IEC[3]
Язык маршрутизации пространства именNRL2003Независимый[4]
Язык диспетчеризации валидации на основе пространства именNVDL2006ISO / IEC[5]
Механизм сборки контентаCAM2007ОАЗИС
REgular LAnguage для XML следующего поколенияRELAX NG, RelaxNG2001,[6] Компактный синтаксис (2002)[7]ОАЗИС
v1 (2003), v1 Compact Syntax (2006), v2 (2008)ISO / IEC[5]
Схема для объектно-ориентированного XMLSOX??
СхематронНет данных2006ISO / IEC[5]
XML-данные уменьшеныXDR??
ASN.1 Правила кодирования XMLXER??
Схема XMLWXS, XSD1.0 (2004), 1.1 (2012)W3C

Основные (см. Также Поддерживаемые ISO 19757 языки ) описаны ниже.

Хотя доступно несколько языков схемы, основными тремя языками являются: Определения типов документов, Схема W3C XML, и РЕЛАКС НГ. У каждого языка есть свои преимущества и недостатки.

Определения типов документов

Поддержка инструмента

DTD - это, пожалуй, наиболее широко поддерживаемый язык схем для XML. Поскольку DTD являются одними из самых ранних языков схем для XML, определенных до того, как XML даже получил поддержку пространств имен, они широко поддерживаются. Внутренние DTD часто поддерживаются в процессорах XML; внешние DTD поддерживаются реже, но незначительно. Большинство крупных анализаторов XML, поддерживающих несколько технологий XML, также будут поддерживать DTD.

Схема W3C XML

Преимущества перед DTD

В XSD доступны следующие функции, которые отсутствуют в DTD:

  • Имена элементов и атрибутов учитывают пространство имен
  • Ограничения («простые типы») могут быть определены для текстового содержимого элементов и атрибутов, например, чтобы указать, что они являются числовыми или содержат даты. В качестве стандарта предоставляется широкий набор простых типов, и из них могут быть получены дополнительные определяемые пользователем типы, например, путем указания диапазонов значений, регулярных выражений или перечисления разрешенных значений.
  • Средства для определения ограничений уникальности и ссылочной целостности являются более мощными: в отличие от ограничений ID и IDREF в DTD, они могут быть привязаны к любой части документа, могут относиться к любому типу данных, могут применяться как к элементу, так и к содержимому атрибута, и может состоять из нескольких частей (например, комбинация имени и фамилии должна быть уникальной).
  • Многие требования, которые традиционно обрабатываются с помощью сущностей параметров в DTD, явно поддерживаются в XSD: примеры включают группы подстановки, которые позволяют одному имени (например, «блок» или «встроенный») ссылаться на целый класс элементов; сложные типы, которые позволяют использовать одну и ту же модель контента (или адаптировать путем ограничения или расширения) для нескольких элементов; а также группы моделей и группы атрибутов, которые позволяют определять общие части компонентных моделей в одном месте и повторно использовать их.
  • XSD 1.1 добавляет возможность определять произвольные утверждения (с использованием выражений XPath) как ограничения на содержимое элемента.

Схемы XSD обычно записываются как XML-документы, поэтому можно использовать знакомые инструменты редактирования и преобразования.

Помимо проверки, XSD позволяет аннотировать экземпляры XML информацией о типе ( Информационный набор после проверки схемы (PSVI) ), который разработан, чтобы упростить манипулирование экземпляром XML в прикладных программах. Это может быть путем сопоставления типов, определенных XSD, с типами на языке программирования, например Java («привязка данных»), или путем обогащения системы типов языков обработки XML, таких как XSLT и XQuery (известное как «понимание схемы»).

Общность с RELAX NG

RELAX NG и W3C XML Schema допускают аналогичные механизмы специфичности. Оба допускают определенную степень модульности в своих языках, включая, например, разделение схемы на несколько файлов. И оба они определены или могут быть определены в[требуется разъяснение ] язык XML.

Преимущества перед RELAX NG

RELAX NG не имеет аналогов PSVI. В отличие от XML-схемы W3C, RELAX NG был разработан таким образом, что проверка и расширение (добавление информации о типе и значений по умолчанию) разделены.

W3C XML Schema имеет формальный механизм для присоединения схемы к XML-документу, тогда как RELAX NG намеренно избегает таких механизмов из соображений безопасности и взаимодействия.

RELAX NG не имеет возможности применять данные атрибутов по умолчанию к списку атрибутов элемента (т. Е. Изменять набор информации XML), в отличие от схемы XML W3C. Опять же, этот дизайн является преднамеренным и предназначен для разделения проверки и дополнения.[8]

W3C XML Schema имеет богатую встроенную систему «простых типов» (xs: number, xs: date и т. Д., А также создание пользовательских типов), в то время как RELAX NG имеет чрезвычайно упрощенную схему, поскольку она предназначена для использования разработанных библиотек типов. независимо от RELAX NG, а не выращивать самостоятельно. Некоторые считают это недостатком. На практике для схемы RELAX NG обычно используются предопределенные «простые типы» и «ограничения» (шаблон, maxLength и т. Д.) Схемы W3C XML.

В W3C XML Schema может быть выражено определенное количество или диапазон повторений шаблонов, тогда как в RELAX NG практически невозможно указать вообще ( или ).

Недостатки

XML-схема W3C сложна и трудна для изучения, хотя отчасти это связано с тем, что она пытается сделать больше, чем простую проверку (см. PSVI ).

Хотя написание в XML является преимуществом, в некотором смысле это также и недостаток. В частности, язык схемы W3C XML может быть довольно многословным, тогда как DTD может быть кратким и относительно легко редактируемым.

Точно так же формальный механизм WXS для связывания документа со схемой может создать потенциальную проблему безопасности. Для валидаторов WXS, которые будут следовать URI в произвольное онлайн-место существует вероятность чтения чего-то вредоносного с другой стороны потока.[9]

Схема W3C XML не реализует большую часть возможностей DTD по предоставлению элементов данных в документ.

Хотя возможность W3C XML Schema добавлять атрибуты по умолчанию к элементам является преимуществом, в некоторых отношениях это также и недостаток. Это означает, что XML-файл может быть непригоден для использования без его схемы, даже если документ будет проверяться на соответствие этой схеме. Фактически, все пользователи такого XML-документа должны также реализовать спецификацию W3C XML Schema, тем самым исключая минималистичные или старые XML-анализаторы. Это также может замедлить обработку документа, поскольку процессор потенциально должен загрузить и обработать второй файл XML (схему); однако схема обычно кэшируется, поэтому затраты возникают только при первом использовании.

Поддержка инструментов

Поддержка WXS существует в ряде крупных пакетов синтаксического анализа XML. Xerces и .NET Framework с Библиотека базового класса оба обеспечивают поддержку проверки WXS.

РЕЛАКС НГ

RELAX NG обеспечивает большинство преимуществ, которые W3C XML Schema делает по сравнению с DTD.

Преимущества перед XML-схемой W3C

Хотя язык RELAX NG может быть написан на XML, он также имеет эквивалентную форму, которая больше похожа на DTD, но с большей определяющей способностью. Эта форма известна как компактный синтаксис. Инструменты могут легко конвертировать между этими формами без потери функций или даже без комментариев. Даже произвольные элементы, указанные между XML-элементами RELAX NG, можно преобразовать в компактную форму.

RELAX NG обеспечивает очень сильную поддержку неупорядоченного контента. То есть это позволяет схеме утверждать, что последовательность шаблонов может появляться в любом порядке.

RELAX NG также позволяет использовать недетерминированные модели контента. Это означает, что RELAX NG позволяет специфицировать последовательность, подобную следующей:

<zeroOrMore>  <ссылка имя ="странный" />  <ссылка имя ="четное" /></zeroOrMore><optional>  <ссылка имя ="странный" /></optional>

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

RELAX NG позволяет обрабатывать атрибуты как элементы в моделях содержимого. В частности, это означает, что можно предоставить следующее:

<элемент имя ="some_element">  <choice>    <атрибут имя ="has_name">      <value>ложный</value>    </attribute>    <group>      <атрибут имя ="has_name">        <value>истинный</value>      </attribute>      <элемент имя ="имя"> <текст />    </group>  </choice></element>

В этом блоке указано, что элемент some_element должен иметь атрибут с именем has_name. Этот атрибут может принимать в качестве значений только истину или ложь, и если это истина, первым дочерним элементом элемента должно быть «имя», в котором хранится текст. Если «name» не обязательно должно быть первым элементом, тогда выбор может быть заключен в элемент «interleave» вместе с другими элементами. Порядок спецификации атрибутов в RELAX NG не имеет значения, поэтому этот блок не обязательно должен быть первым блоком в определении элемента.

XML-схема W3C не может определять такую ​​зависимость между содержимым атрибута и дочерними элементами.

Спецификация RELAX NG перечисляет только два встроенных типа (строка и токен), но позволяет определять многие другие. Теоретически отсутствие определенного списка позволяет процессору поддерживать типы данных, которые сильно зависят от предметной области.

Большинство схем RELAX NG могут быть алгоритмически преобразованы в XML-схемы W3C и даже DTD (за исключением случаев использования функций RELAX NG, не поддерживаемых этими языками, как указано выше). Обратное неверно. Таким образом, RELAX NG может использоваться как нормативная версия схемы, и пользователь может преобразовать ее в другие формы для инструментов, которые не поддерживают RELAX NG.

Недостатки

Большинство недостатков RELAX NG описано в разделе, посвященном преимуществам схемы W3C XML перед RELAX NG.

Хотя способность RELAX NG поддерживать определяемые пользователем типы данных полезна, недостатком ее является наличие только двух типов данных, на которые может положиться пользователь. Теоретически это означает, что использование схемы RELAX NG в нескольких валидаторах требует либо предоставления этих типов данных, определенных пользователем, этому валидатору, либо использования только двух основных типов. Однако на практике большинство процессоров RELAX NG поддерживают набор типов данных W3C XML Schema.

Схематрон

Schematron - довольно необычный язык схем. В отличие от трех основных, он определяет синтаксис XML-файла как список XPath основанные на правилах. Если документ соответствует этим правилам, значит, он действителен.

Преимущества

Специфика Schematron очень сильна из-за своей основанной на правилах природы. Может потребоваться, чтобы содержимое элемента контролировалось одним из его братьев и сестер. Он также может запрашивать или требовать, чтобы у корневого элемента, независимо от того, каким элементом он является, были определенные атрибуты. Он даже может указывать необходимые отношения между несколькими файлами XML.

Недостатки

Хотя Schematron хорош в реляционных конструкциях, его способность определять базовую структуру документа, то есть, какие элементы могут идти куда, приводит к очень подробной схеме.

Типичный способ решить эту проблему - объединить Schematron с RELAX NG или W3C XML Schema. Для обоих языков доступно несколько процессоров схем, поддерживающих эту комбинированную форму. Это позволяет правилам Schematron указывать дополнительные ограничения для структуры, определенной W3C XML Schema или RELAX NG.

Поддержка инструментов

Эталонная реализация Schematron на самом деле XSLT преобразование, которое преобразует документ Schematron в XSLT, проверяющий XML-файл. Таким образом, потенциальный набор инструментов Schematron - это любой XSLT-процессор, хотя libxml2 предоставляет реализацию, не требующую XSLT. Sun Microsystems средство проверки нескольких схем для Ява имеет надстройку, позволяющую проверять схемы RELAX NG, в которые встроены правила Schematron.

Язык маршрутизации пространства имен (NRL)

Технически это не язык схемы. Его единственная цель - направить части документов в отдельные схемы на основе пространства имен обнаруженных элементов. NRL - это просто список Пространства имен XML и путь к схеме, которой каждый соответствует. Это позволяет каждой схеме заниматься только определением своего собственного языка, а файл NRL направляет средство проверки схемы к правильному файлу схемы на основе пространства имен этого элемента.

Этот формат XML не зависит от языка схемы и работает практически для любого языка схемы.

Терминология

Использование заглавных букв в схема слово: существует некоторая путаница относительно того, когда использовать заглавное написание «Схема», а когда - строчное. Строчная форма является общим термином и может относиться к любому типу схемы, включая DTD, XML-схему (также известную как XSD), RELAX NG или другие, и всегда должна быть написана в нижнем регистре, за исключением случаев, когда она появляется в начале предложения. Форма «Схема» (с заглавной буквы), широко используемая в сообществе XML, всегда относится к Схема W3C XML.

Варианты создания схемы

В центре внимания схема определение - это структура и некоторая семантика документов. Однако проектирование схемы, как и проектирование баз данных, компьютерных программ и других формальных конструкций, также включает многие аспекты стиля, условностей и удобочитаемости. Подробное обсуждение проблем проектирования схемы можно найти, например, в Maler (1995).[10] и ДеРоуз (1997).[11]

Последовательность
Одним из очевидных соображений является то, что теги и имена атрибутов должны использовать согласованные соглашения. Например, было бы необычно создать схему, в которой некоторые имена элементов верблюд но другие используют подчеркивание для разделения частей имен или других соглашений.
Ясные и мнемонические имена
Как и в других официальных языках, правильный выбор имен может помочь в понимании, даже если сами по себе имена не имеют формального значения. Назовите соответствующий тег "chapter", а не "tag37", это поможет читателю. В то же время возникает вопрос о выборе естественного языка. Схема, которая будет использоваться для Ирландский гэльский документы, вероятно, будут использовать один и тот же язык для имен элементов и атрибутов, поскольку это будет общий язык для редакторов и читателей.
Тег против атрибут выбор
Некоторая информация может легко «уместиться» либо в элементе, либо в атрибуте. Поскольку атрибуты не могут содержать элементы в XML, этот вопрос возникает только для компонентов, которые не имеют дополнительной подструктуры, о которой должен знать XML (атрибуты действительно поддерживают несколько токенов, таких как несколько значений IDREF, что можно рассматривать как небольшое исключение). Атрибуты обычно представляют информацию, связанную со всем элементом, в котором они встречаются, в то время как подэлементы вводят новую собственную область видимости.
Текстовое содержание
Некоторые схемы XML, особенно те, которые представляют различные виды документы убедитесь, что все «текстовое содержимое» (грубо говоря, любая часть, которую можно было бы озвучить при чтении документа вслух) встречается как текст, а не в атрибутах. Однако есть много крайних случаев, когда это не выполняется: во-первых, есть XML-документы, которые не используют «естественный язык» вообще или только минимально, например, для телеметрии, создания векторной графики или математических формул и т. Д. . Во-вторых, такая информация, как постановка сцены в пьесах, номера стихов в классических произведениях и произведениях Священного Писания, а также исправление или нормализация орфографии в транскрибированных произведениях - все это создает проблемы интерпретации, которые разработчики схем для таких жанров должны учитывать.
Повторное использование схемы
Новый Схема XML могут быть разработаны с нуля или могут повторно использовать некоторые фрагменты других Схемы XML. Все языки схемы предлагают некоторые инструменты (например, включают и контроль модульности над пространствами имен) и рекомендовать повторное использование там, где это возможно. Различные части обширного и сложного Инициатива кодирования текста схемы также повторно используются во множестве других схем.
Семантическое против синтаксического[сомнительный ]
За исключением RDF, нет язык схемы выражают формально семантическую, только структуру и типы данных. Несмотря на то, что это идеал, включение допущений RDF очень плохо и не является рекомендацией в разработка схемы рамки.

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

Языки:

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

  1. ^ Маркони, Майкл; Нентвич, Кристиан, ред. (31 января 2004 г.). «Спецификация языка CLiX версии 1.0».
  2. ^ Брей, Тим; Франкстон, Чарльз; Малхотра, Ашок, ред. (31 июля 1998 г.). «Описание содержимого документа для XML: представление в консорциум World Wide Web». Консорциум World Wide Web.
  3. ^ а б «Стандарты и проекты под непосредственной ответственностью Секретариата ISO / IEC JTC 1 / SC 34». Каталог стандартов ISO.
  4. ^ Кларк, Джеймс (13 июня 2003 г.). "Язык маршрутизации пространства имен (NRL)". Тайский Центр программного обеспечения с открытым исходным кодом, Ltd.
  5. ^ а б c «Свободно доступные стандарты». ISO.
  6. ^ Кларк, Джеймс; Макото, Мурата, ред. (3 декабря 2001 г.). «Спецификация RELAX NG». ОАЗИС.
  7. ^ Кларк, Джеймс, изд. (21 ноября 2002 г.). "Компактный синтаксис RELAX NG". ОАЗИС.
  8. ^ Хотя аннотации в RELAX NG могут поддерживать значения атрибутов по умолчанию, спецификация RELAX NG не требует, чтобы валидатор предоставлял эту возможность изменять информационный набор XML как часть валидации. Спецификация WXS требует такого поведения. Дополнительная спецификация, связанная с RELAX NG, действительно предоставляет эту возможность. Видеть Relax NG DTD Compatibility (значение по умолчанию).
  9. ^ Джеймс Кларк (соавтор RELAX NG). XML-схема RELAX NG и W3C В архиве 27 сентября 2007 г. Wayback Machine
  10. ^ Ева Малер и Жанна Эль Андалуси (1995). Разработка SGML DTD: от текста к модели и разметке. Prentice Hall PTR. ISBN  978-0133098815.
  11. ^ ДеРоуз, Стивен. (1997). Книга часто задаваемых вопросов SGML: понимание основ HTML и XML. Kluwer Academic Publishers. ISBN  978-0792399438.

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