stringtranslate.com

XML-схема

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

Существуют языки, разработанные специально для выражения схем XML. Язык определения типа документа (DTD), который является родным для спецификации XML, представляет собой язык схем с относительно ограниченными возможностями, но который также имеет в XML и другие применения, помимо выражения схем. Два более выразительных языка схем XML, широко используемые, — это XML Schema (с заглавной буквы S ) и RELAX NG .

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

Определение схемы XML обычно называют XSD.

Проверка

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

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

Языки

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

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

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

Основные из них (см. также языки, одобренные стандартом ISO 19757 ) описаны ниже.

Хотя существует несколько языков схем, основными тремя языками являются определения типов документов , XML-схема W3C и RELAX NG . Каждый язык имеет свои преимущества и недостатки.

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

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

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

XML-схема W3C

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

Доступные в XSD функции, отсутствующие в DTD, включают:

Схемы 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), в то время как W3C XML Schema это делает. Опять же, эта конструкция является намеренной и предназначена для разделения проверки и дополнения. [8]

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

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

Недостатки

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

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

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

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

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

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

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

РАССЛАБИТЬСЯ НГ

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

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

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

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

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

<zeroOrMore> <ref name= "odd" /> <ref name= "even" /> </zeroOrMore> <optional> <ref name= "odd" /> </optional>         

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

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

<element name= "some_element" > <choice> <attribute name= "has_name" > <value> false </value> </attribute> <group> <attribute name= "has_name" > <value> true </value> </attribute> <element name= "name" ><text /></element> </group> </choice> </element>                

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

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

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

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

Недостатки

Большинство недостатков RELAX NG описаны в разделе о преимуществах XML-схемы W3C перед 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. Средство проверки множественных схем для Java компании Sun Microsystems имеет надстройку, позволяющую проверять схемы RELAX NG со встроенными правилами Schematron.

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

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

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

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

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

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

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

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

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

Языки:

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

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

Внешние ссылки