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-схему или RELAX NG.

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

Языки

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

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

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

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

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

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

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

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

XML-схема W3C

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

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

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

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

Сходство с RELAX NG

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

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

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

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

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

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

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

Недостатки

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

Хотя быть написанным на XML — это преимущество, в некоторых отношениях это также недостаток. Язык W3C XML Schema, в частности, может быть довольно многословным, в то время как 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 по сравнению с DTD.

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

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

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

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

<zeroOrMore> <ref name= "odd" /> <ref name= "even" /> </zeroOrMore> <необязательно> <ref name = "odd" /> </ необязательно >         

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

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, то первым дочерним элементом элемента должен быть "name", который хранит текст. Если бы "name" не обязательно был первым элементом, то выбор можно было бы обернуть в элемент "interleave" вместе с другими элементами. Порядок указания атрибутов в RELAX NG не имеет значения, поэтому этот блок не обязательно должен быть первым блоком в определении элемента.

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

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

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

Недостатки

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

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

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

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

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

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

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

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

Последовательность
Одно очевидное соображение заключается в том, что теги и имена атрибутов должны использовать согласованные соглашения. Например, было бы необычно создать схему, где некоторые имена элементов будут в camelCase, а другие будут использовать подчеркивания для разделения частей имен или другие соглашения.
Понятные и мнемонические имена
Как и в других формальных языках, хороший выбор имен может помочь пониманию, даже если имена сами по себе не имеют формального значения. Наименование соответствующего тега "chapter" вместо "tag37" поможет читателю. В то же время, это поднимает вопросы выбора естественного языка. Схема, которая будет использоваться для документов на ирландском гэльском языке , вероятно, будет использовать тот же язык для имен элементов и атрибутов, поскольку это будет язык, общий для редакторов и читателей.
Выбор тега или атрибута
Некоторая информация может легко "вписаться" либо в элемент, либо в атрибут. Поскольку атрибуты не могут содержать элементы в 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)». Thai Open Source Software Center, Ltd.
  5. ^ ab "Свободно доступные стандарты". ISO.
  6. ^ Кларк, Джеймс; Макото, МУРАТА, ред. (3 декабря 2001 г.). «Спецификация RELAX NG». OASIS .
  7. Кларк, Джеймс, ред. (21 ноября 2002 г.). «RELAX NG Compact Syntax». OASIS .
  8. ^ Хотя аннотации в RELAX NG могут поддерживать значения атрибутов по умолчанию, спецификация RELAX NG не требует, чтобы валидатор предоставлял эту возможность для изменения набора XML-информации в рамках проверки. Спецификация WXS требует такого поведения. Дополнительная спецификация, связанная с RELAX NG, предоставляет эту возможность. См. Совместимость Relax NG DTD (значение по умолчанию).
  9. Джеймс Кларк (соавтор RELAX NG). RELAX NG и W3C XML Schema Архивировано 27 сентября 2007 г. на Wayback Machine
  10. ^ Ив Малер и Жанна Эль Андалусси (1995). Разработка SGML DTD: от текста к модели и разметке . Prentice Hall PTR. ISBN 978-0133098815.
  11. ^ DeRose, Steven. (1997). Книга часто задаваемых вопросов SGML: понимание основ HTML и XML . Kluwer Academic Publishers. ISBN 978-0792399438.

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