Язык xml схемы данных


Содержание

Понимание XML

Узнайте, как Расширяемый язык разметки (Extensible Markup Language — XML) облегчает универсальный доступ к данным. XML — основанный на Unicode метаязык: язык для описания языков разметки. Он не привязан ни к одному языку программирования, операционной системе или поставщику программного обеспечения. XML обеспечивает доступ к огромному количеству технологий по манипулированию, структурированию, трансформированию и запрашиванию данных.

Введение

Расширяемый язык разметки (XML) изначально был задуман как язык для описания новых форматов документов World W >‘ ’ ). Web-разработчики могут заметить некоторую схожесть между HTML и XML, обусловленную тем фактом, что они оба происходят от SGML.

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

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

XML везде

Кроме способности представлять и структурированные, и псевдоструктурированные данные, XML имеет несколько характеристик, которые обусловили его широкое использование в качестве формата представления данных. XML — расширяемый, плотформо-независимый и поддерживает локализацию, т.к. полностью совместим с Unicode. Тот факт, что XML — текстовый формат, означает, что при возникновении необходимости XML-документы можно читать и редактировать, используя стандартные инструменты редактирования текстов.

Расширяемость XML проявляется многими способами. Прежде всего, в отличие от HTML, у него нет фиксированного словаря. С XML каждый может определить специальные словари для конкретных приложений или различных отраслей промышленности. Во-вторых, приложения, обрабатывающие или использующие форматы XML, более устойчивы к изменениям в структуре предлагаемого им XML, чем приложения, которые используют другие форматы. Например, приложение, которое зависит от обработки элемента с атрибутом customer- > . Такая гибкость несвойственна другим форматам данных и является существенным преимуществом использования XML.

XML не привязан ни к одному языку программирования, операционной системе или поставщику программного обеспечения. Кстати, создавать или потреблять XML, используя различные языки программирования — слишком прямолинейно. Независимость от платформ делает XML очень полезным в качестве средства достижения возможности взаимодействовать между различными платформами программирования и операционными системами.

Преимущества представления данных в виде XML были признаны многими и привели к распространению XML-источников данных. Деловые документы, базы данных и межделовое общение — все это примеры информационных источников, которые переходят или перешли к использованию XML как формата представления. Такие продукты Microsoft как Microsoft Office®, Microsoft SQL Server™ и Microsoft .NET Framework дают возможность конечным пользователям и разработчикам создавать и использовать документы, сетевые сообщения и другие данные в виде XML.

Синтаксис XML 1.0

Как было упомянуто ранее, рекомендация W3C XML 1.0 описывает текстовый формат для описания структурированных и псевдоструктурированных данных, используя синтаксис, подобный HTML.

Сравнение XML и HTML

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

Однако между HTML и XML есть существенные отличия. XML чувствителен к регистру, в то время как HTML — нет. Это значит, что в XML начальные тэги

и

различны, тогда как в HTML — это одно и то же. Другое различие между HTML и XML в том, что XML представляет концепцию правильного построения. Правила построения XML устраняют некоторую неопределенность, присущую обработке таких языков разметки как HTML, вводя такие постулаты, как то, что все значения атрибутов должны быть заключены в кавычки, и что у всех элементов должны быть или начальный и конечный тэги, или явное указание того, что это пустые элементы. Краткое описание правил построения дается в XML FAQ в разделе D.2.

Самое существенное различие между HTML и XML в том, что в HTML есть предопределенные элементы и атрибуты, поведение которых предопределено, в то время как в XML такого нет. Вместо этого, авторы документа могут создавать собственные XML-словари, предназначенные именно для их приложения или деловых нужд. В настоящее время существуют XML-словари для огромного количества отраслей промышленности и приложений: от финансовых картотек (XBRL) и финансовых операций (FpML) до Web-документов (XHTML) и сетевых протоколов (SOAP). Отсутствие предопределенных элементов и атрибутов, которые определяют, как формируется или отображается XML-документ, дает возможность авторам сосредоточиться на создании документов, которые содержат только существенную семантическую информацию в их конкретной предметной области. Отделение содержимого от представления, ставшее возможным с XML-словарями, существенно увеличивает возможности повторного использования информации и перенацеливания содержимого.

Анатомия XML-документа

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

Документ начинается с необязательного описания XML, в котором указывается, какая версия XML и кодирование символом используются. Далее следует инструкция обработки xml-stylesheet, которая используется для связывания таблицы стилей, содержащей инструкции по форматированию, с XML-документом. Таблица стилей используется для формирования привлекательного внешнего вида документа в пользовательских приложениях, таких как Web-браузеры. Инструкции обработки обычно используются для введения информации о приложении в XML-документ. Например, большинство приложений, обрабатывающих содержимое приведенного выше документа, вероятно, проигнорируют инструкцию обработки xml-stylesheet. С другой стороны, приложения, используемые для отображения XML-документа, такие как Web-браузер, могли бы использовать информацию инструкции обработки для того, чтобы определить, где располагается таблица стилей, содержащая специальные инструкции для отображения документа.

Unicode + угловые скобки = возможность взаимодействовать

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

То, что XML основан на Unicode, делает его подходящим для совместного использования информации через глобальные сети, такие как World Wide Web.

Infoset и семейство XML-технологий

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

Информационное множество (Infoset) XML

Рекомендация информационного множества W3C XML (W3C XML Information Set recommendation) описывает абстрактное представление XML-документа. XML Infoset, главным образом, изначально выступает в роли набора определений, используемых XML-технологиями для формального описания того, с какими частями XML-документа они работают. В терминах XML Infoset описаны несколько W3C XML-технологий, включая SOAP 1.2, XML Schema и XQuery.

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

согласно XML Infoset, считается эквивалентным. Аналогично, не имеет значения и тип кавычек, используемых для атрибутов; таким образом, элементы

согласно XML Infoset, эквивалентны. Список аспектов синтаксиса XML 1.0, которые не рассматриваются XML Infoset, приведен в Приложении D рекомендации Информационного множества W3C XML.

Рекомендация Информационного множества W3C XML описывает концепцию синтетических информационных множеств, которые создаются средствами, отличными от синтаксического разбора текстового XML-документа. Синтетические информационные множества подготавливают почву для обработки с помощью XML-технологий не-XML-данных, которые могут быть преобразованы в XML Infoset. Примером обработки синтетического информационного множества является ObjectXPathNavigator (http://msdn.microsoft.com/library/en-us/dnexxml/html/xml03172003.asp), который обеспечивает возможность запрашивать объекты в .NET Framework, используя XPath, или преобразовывать их, используя XSLT.

Языки Схемы

Язык XML-схемы используется для описания структуры и содержимого XML-документа. Например, схема может использоваться для определения документа, состоящего из одного или более элементов compact-disc, каждый из которых включает в качестве дочерних элементы price, title и artist. Во время обмена документами XML-схема описывает контракт между производителем и потребителем XML, поскольку она описывает то, что составляет действительное XML-сообщение передаваемое между двумя сторонами. Хотя для XML существует несколько языков схемы, от DTD до XDR, ведущим является Язык описания XML-схемы W3C (W3C XML Schema Definition Language), сокращенно XSD.

XSD уникален среди языков XML-схемы, потому что он первым пытается вывести роль XML-схемы за рамки традиционного ее применения для описания контракта между двумя сущностями, обменивающимися документами. XSD представляет концепцию Post Schema Validation Infoset (PSVI). Совместимый XSD-обработчик принимает XML Infoset как входные данные и после проверки преобразовывает его в Информационное множества после проверки схемы (PSVI). PSVI — это исходные входные данные XML Infoset с добавленными к существующим новыми единицами информации и новыми свойствами. В Рекомендации XML-схема W3C приведен список дополнений в Информационное множества после проверки схемы (PSVI).

Одним важным классом дополнений PSVI является аннотации типов. Элементы и атрибуты получают строгий контроль типов и имеют ассоциированную информацию о типе данных. Такие XML со строгим контролем типов весьма универсальны, потому что теперь они с помощью таких технологий как XmlSerializer (http://msdn.microsoft.com/library/en-us/dnexxml/html/xml01202003.asp) из .NET Framework могут быть преобразованы в объекты, с помощью технологий SQLXML (http://msdn.microsoft.com/sqlxml) и DataSet (http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDataDataSetClassTopic.asp) из .NET Framework они могут быть преобразованы в реляционные таблицы или их можно обработать с помощью языков запросов XML, таких как XPath 2.0 и XQuery, которые используют преимущество строгого контроля типов.

Ниже показан пример фрагмента схемы, который описывает элемент items документа-образца, приведенного в разделе Анатомия XML-документа.

API, использующие модель дерева
Древовидная модель API представляет XML-документ как дерево узлов, которые обычно загружаются в память все сразу. Самая популярная древовидная модель API для XML — Объектная модель документа W3C (W3C Document Object Model — DOM). DOM обеспечивает возможность программно читать, манипулировать и изменять XML-документ.

Ниже приведен пример использования класса XmlDocument (http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlXmlDocumentClassTopic.asp) в .NET Framework для получения имени исполнителя и названия первого compact-disc в элементе items.

Курсорные APIs

Курсорные API в XML можно представить как лупу, которая проходит по XML-документу, согласно указаниям фокусируясь на отдельных аспектах документа. Класс XPathNavigator в .NET Framework — это пример курсорного API в XML. Преимущество курсорных API над древовидной моделью API в том, что для них не требуется, чтобы весь XML-документ был загружен в память, что открывает двери оптимизациям со стороны создателя XML, в которых документ загружается «по мере надобности».

Вот пример использования класса XPathNavigator (http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNavigatorClassTopic.asp) в .NET Framework для получения имени исполнителя и названия первого compact-disc в элементе items.

Потоковые API

Потоковые API для обработки XML позволяет обрабатывать XML-документ, сохраняя в памяти только содержимое обрабатываемого в данный момент узла. Такие API делают возможной обработку больших XML-файлов без использования слишком больших объемов памяти. Существует два основных класса потоковых API для обработки XML: передающие XML-анализаторы и принимающие XML-анализаторы.

Передающие синтаксические анализаторы, такие как SAX, проходят по XML-потоку, а затем при встрече с XML-узлами «выталкивают» события в зарегистрированные обработчики событий (методы обратного вызова). Принимающие анализаторы, такие как класс XmlReader (http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlXmlReaderClassTopic.asp) в .NET Framework, работают в XML-потоке как однонаправленные курсоры.

Ниже представлен пример использования класса XmlReader в .NET Framework для получения имени исполнителя и названия первого compact-disc в элементе items.

XML-запрос

XML-преобразование

Часто надо преобразовать XML-документы из одного словаря в другой. Иногда так можно сгенерировать их в готовом для печати формате или в Web-браузере; также с помощью преобразования можно превратить документы, полученные извне, в более привычный формат.

XSLT (http://www.w3.org/TR/xslt) — первый язык XML-преобразования. Преобразование, выраженное в XSLT, описывает правила преобразования исходного дерева в результирующее дерево. Преобразование достигается путем ассоциирования шаблонов. Шаблон — это выражение XPath, может рассматриваться как регулярное выражение, ставящее части исходного дерева XML в соответствие частям строки. Шаблон ставится в соответствие элементам исходного дерева. В случаях совпадения создается экземпляр шаблона для создания части результирующего дерева. При создании результирующего дерева элементы исходного дерева могут быть отфильтрованы и реорганизованы, а произвольная структура может быть добавлена.

Следующая таблица стилей XSLT преобразовывает элемент items в Web-страницу XHTML, содержащую таблицу с информацией о компакт дисках.

XHTML-документ, созданный с использованием этой таблицы стилей, показан ниже:

Заключение

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

I. Коротко об XML¶

Введение в XML¶

XML ( англ. eXtensible Markup Language) — расширяемый язык разметки, предназначенный для хранения и передачи данных.

Простейший XML-документ выглядит следующим образом:

Первая строка — это XML декларация. Здесь определяется версия XML (1.0) и кодировка файла. На следующей строке описывается корневой элемент документа (открывающий тег). Следующие 4 строки описывают дочерние элементы корневого элемента ( title , author , year , price ). Последняя строка определяет конец корневого элемента (закрывающий тег).

Документ XML состоит из элементов (elements). Элемент начинается открывающим тегом (start-tag) в угловых скобках, затем идет содержимое (content) элемента, после него записывается закрывающий тег (end-teg) в угловых скобках.

Элементы могут содержать атрибуты, так, например, открывающий тег lang=»en»> имеет атрибут lang , который принимает значение en . Значения атрибутов заключаются в кавычки (двойные или ординарные).

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

Структура XML¶

XML документ должен содержать корневой элемент. Этот элемент является «родительским» для всех других элементов.

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

Все элементы могут иметь подэлементы (дочерние элементы):

Правила синтаксиса (Валидность)¶

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

Основные правила синтаксиса XML:

  1. Теги XML регистрозависимы — теги XML являются регистрозависимыми. Так, тег не то же самое, что тег .

Открывающий и закрывающий теги должны определяться в одном регистре:

  1. XML элементы должны соблюдать корректную вложенность:
  1. У XML документа должен быть корневой элемент — XML документ должен содержать один элемент, который будет родительским для всех других элементов. Он называется корневым элементом.
  1. Значения XML атрибутов должны заключаться в кавычки:

Сущности¶

Некоторые символы в XML имеют особые значения и являются служебными. Если вы поместите, например, символ внутри XML элемента, то будет сгенерирована ошибка, так как парсер интерпретирует его, как начало нового элемента.

В примере ниже будет сгенерирована ошибка, так как в значении «ООО » атрибута НаимОрг содержатся символы и > .

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

Чтобы ошибки не возникали, нужно заменить символ на его сущность. В XML существует 5 предопределенных сущностей:

Таблица I.1 — Сущности ¶

Сущность Символ Значение
меньше, чем
> > больше, чем
& & амперсанд
апостроф
« « кавычки

Только символы и & строго запрещены в XML. Символ > допустим, но лучше его всегда заменять на сущность.

Таким образом, корректными будут следующие формы записей:

В последнем примере английские двойные кавычки заменены на французские кавычки («ёлочки»), которые не являются служебными символами.

Поиск информации в XML файлах (XPath)¶

XPath ( англ. XML Path Language) — язык запросов к элементам XML-документа. XPath расширяет возможности работы с XML.

XML имеет древовидную структуру. В документе всегда имеется корневой элемент (инструкция version=”1.0”?> к дереву отношения не имеет). У элемента дерева всегда существуют потомки и предки, кроме корневого элемента, у которого предков нет, а также тупиковых элементов (листьев дерева), у которых нет потомков. Каждый элемент дерева находится на определенном уровне вложенности (далее — «уровень»). У элементов на одном уровне бывают предыдущие и следующие элементы.

Это очень похоже на организацию каталогов в файловой системе, и строки XPath, фактически, — пути к «файлам» — элементам. Рассмотрим пример списка книг:

XPath запрос /bookstore/book/price вернет следующий результат:

Сокращенная форма этого запроса выглядит так: //price .


С помощью XPath запросов можно искать информацию по атрибутам. Например, можно найти информацию о книге на итальянском языке: //title[@lang=»it»] вернет lang=»it»>Everyday Italian .

Чтобы получить больше информации, необходимо модифицировать запрос //book[title[@lang=»it»]] вернет:

В приведенной ниже таблице представлены некоторые выражения XPath и результат их работы:

Таблица I.2 — Выражения XPath ¶

Выражение XPath Результат
/bookstore/book[1] Выбирает первый элемент book , который является потомком элемента bookstore
/bookstore/book[position() Выбирает первые два элемента book , которые являются потомками элемента bookstore
//title[@lang] Выбирает все элементы title с атрибутом lang
//title[@lang=’en’] Выбирает все элементы title с атрибутом lang , который имеет значение en
/bookstore/book[price>35.00] Выбирает все элементы book , которые являются потомками элемента bookstore и которые содержать элемент price со значением больше 35.00
/bookstore/book[price>35.00]/title Выбирает все элементы title элементов book элементов bookstore , которые содержать элемент price со значением больше 35.00

Кодировки¶

И еще один важный момент, который стоит рассмотреть — кодировки. Существует множество кодировок, о них подробнее можно прочитать в статье Набор символов.

Самыми распространенными кириллическими кодировками являются Windows-1251 и UTF-8 . Последняя является одним из стандартов, но большая часть ФНС отчетности имеет кодировку Windows-1251 .

В XML файле кодировка объявляется в декларации:

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

Таблица I.3 — Смена кодировки в разных программах ¶

Программа Кодировка
Notepad++ «Документ → Кодировка»
Geany «Документ → Установить кодировку»
Firefox «Вид → Кодировка»
Chrome «Настройка → Дополнительные инструменты → Кодировка»

В большинстве случаев при работе с русскоязычными файлами помогает переключение кодировки на Windows-1251 или UTF-8 . Если все равно не удается прочитать содержимое XML документа, стоит открыть его в Mozilla Firefox, он отлично распознает кодировки.

Если ничего не помогает, вполне возможно, что файл был поврежден.

XSD схема¶

XML Schema — язык описания структуры XML-документа, его также называют XSD. Как большинство языков описания XML, XML Schema была задумана для определения правил, которым должен подчиняться документ. Но, в отличие от других языков, XML Schema была разработана так, чтобы её можно было использовать в создании программного обеспечения для обработки документов XML.

После проверки документа на соответствие XML Schema читающая программа может создать модель данных документа, которая включает:

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

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

Подробнее об XSD смотрите:

Примером использования XSD cхем может служить электронная отчетность:

XML Схема учебник

Что такое XML-схемы?

XML-схема описывает структуру документа XML.

Язык XML — схемы также упоминается как XML Schema Definition (XSD) .

XSD Пример

Цель XML-схемы является определение правовых строительных блоков документа XML:

  • элементы и атрибуты, которые могут появиться в документе
  • количество (and order of) дочерних элементов
  • типы данных для элементов и атрибутов
  • по умолчанию и фиксированные значения для элементов и атрибутов

Зачем изучать XML-схемы?

В мире XML, сотни стандартных форматов XML в ежедневном использовании.

Многие из этих стандартов XML определяются XML-схемы.

XML — схема является XML на основе (and more powerful) альтернатива DTD.

Типы XML-схемы данных Поддержка

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

  • Это проще описать допустимое содержание документа
  • Это проще, чтобы проверить правильность данных
  • Это легче определить аспекты данных (restrictions on data)
  • Это легче определить шаблоны данных (data formats)
  • Это проще для преобразования данных между различными типами данных

XML-схемы используют синтаксис XML

Еще одна большая сила о XML-схемы является то, что они написаны на XML.

  • Вам не придется выучить новый язык
  • Вы можете использовать редактор XML для редактирования файлов схемы
  • Вы можете использовать XML-анализатор для анализа ваших файлов схемы
  • Вы можете манипулировать вашей схеме с XML DOM
  • Вы можете преобразовать вашу схему с помощью XSLT

XML-схемы являются расширяемым, потому что они написаны на XML.

С помощью расширяемого определения схемы вы можете:

  • Повторное использование вашей схемы в других схемах
  • Создавать свои собственные типы данных, полученных от стандартных типов
  • Ссылка несколько схем в том же документе

XML-схемы Secure Data Communication

При отправке данных от отправителя к получателю, очень важно , чтобы обе части имеют одинаковые «expectations» относительно содержания.

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

Дата , как: «03-11-2004» будет, в некоторых странах, можно интерпретировать как 3.November и в других странах , как 11.March.

Тем не менее, XML-элемент с типом данных, как показано ниже:

обеспечивает взаимное понимание содержания, так как тип данных XML «date» требуется формат «YYYY-MM-DD» .

Хорошо сформированная не хватает

Хорошо сформированный XML-документ представляет собой документ, который соответствует правилам синтаксиса XML, как:

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

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

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

Описание структуры XML-документов. Язык XML Schema Definition (XSD).

Описание структуры XML-документов.

Каждый XML-документ несет информацию о данных и их структуре (описание метаданных).

XML-документы могут быть двух типов:

1. документы, созданные с учетом логических и структурных правил;

2. документы, не использующие никаких правил, кроме синтаксических правил оформления XML-документов.

Проверку документов первого типа на соответствие заданным правилам осуществляет XML-процессор. Проверка документов второго типа выполняется разработчиком.

При создании документа первого типа описание его структуры может быть выполнено с использованием таких языков, как Document Type Definitions (DTD), XML Schema, RELAX NG, XML Data-Reduced и др. Наибольшее распространение получили языки DTD и XML Schema.

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

Язык XML Schema Definition (XSD).

Язык XML Schema Definition (XSD) основан на XML и обладает более широкими возможностями описания структуры документа, чем DTD. Он поддерживает типизацию данных, пространства имен, регулярные выражения.

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

Основным преимуществом языка XML Schema является поддержка строго типизированных данных. При обмене данными между различными приложениями и базами данных задача согласования типов данных всегда остается актуальной, поскольку в разных системах определения типов данных могут отличаться. К таким отличиям относятся: максимальное и минимальное воз­можные значения, наибольшая длина, поддержка дробных чисел, внутренняя кодировка и внешний формат (например, для даты и времени). Таким образом, несмотря на возможное совпадение названий типов данных, их реализация в различных продуктах может отличаться. Применение типов данных в схемах позволяет проводить необходимую верификацию данных документа при обмене или совместном использовании данных несколькими системами.

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

XML Schema всегда создается в отдельном файле, имеющем расширение xsd. Файл XML связывается с соответствующей схемой с помощью атрибута schemaLocation пространства имен схемы. Для того чтобы использовать атрибут schemaLocation, необходимо определить пространство имен схемы. Все эти определения указываются в корневом элементе документа XML.

Рассмотрим основные элементы структуры XML Schema.

Корневым элементом всегда является элемент . Описание атрибутов элемента приводится в табл. 2.10.

Корневой элемент может содержать следующие дочерние элементы:

1. — используется для определения элементов XML-документа;

3. — необходим для определения группы элементов, предназначенной для повторного использования в рамках схемы по ссылке на имя группы;

6. — позволяет использовать компоненты указанной внешней схемы в основной схеме (обеспечивает модульность схем);

7. — добавляет все компоненты указанной внешней схемы в основную схему (обеспечивает модульность схем);

8. — содержит определение нотации, описывающей формат не-XML-данных в XML-документе;

9. — переопределяет компоненты внешней схемы, имеющей то же пространство имен, что и основная схема;

10. — объявляет простой тип содержимого элемента. Элементы с простым типом данных могут содержать только символьные данные и не могут включать атрибуты и дочерние элементы;

11. — объявляет сложный тип содержимого элемента, который может включать атрибуты и другие элементы.

XML Schema поддерживает три основные категории типов данных:

1. предопределенные примитивные типы — фундаментальные типы данных, на которые можно ссылаться и применять их к элементам и атрибутам. Примерами примитивных типов данных являются String, Float, Double, Time, Date, Decimal, AnyURI;

2. предопределенные производные типы — встроенные типы, полученные на основании примитивных типов. Примерами производных типов данных являются Integer, Long, Byte, Short, nonPositivelnteger, nonNegativelnteger, ID и др.;

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

Для описания элементов и атрибутов, имеющих предопределенные (примитивные и производные) типы данных, в XML Schema используются следующие синтаксические конструкции.

Дополнительно для элементов и атрибутов можно указать атрибуты fixed или default для задания фиксированных значений элементов/атрибутов или значений по умолчанию.

Если необходимо описать нестандартный тип данных для элемента или атрибута, то это следует делать с помощью тега , описав в нем новый тип данных.

Новые нестандартные простые типы данных получают путем:

1. сужения (restriction) встроенного или ранее определенного простого типа с помощью задания дополнительных ограничений;

2. объединения (union) простых типов;

3. использования списка (list) простых типов.

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

Пример использования нового простого типа данных, полученного путем объединения базовых типов (элемент или атрибут могут принимать неотрицательные или неположительные целые значения):


Пример использования списка простых типов (атрибут shoeSizes объявляется в качестве списка, содержащего десятичные значения 10.5, 9, 8 и 11):

Язык XML Schema использует различные типы ограничений на данные (см. табл. 2.8):

1. ограничения длины (количество символов);

2. границы значений (наибольшее и наименьшее значения как диапазон или порог);

3. ограничения количества цифр десятичного числа (общее количество цифр или количество цифр после запятой);

4. список допустимых значений;

6. обработка символов пробела.

Примеры использования различных ограничений приведены в табл. 2.11.

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

Любой простой тип данных может содержать произвольный набор ограничений, который определяется бизнес-логикой приложения, работающего с данными.

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

В данном примере определен нестандартный тин данных с именем «Код», базирующийся на типе «string»: он использован как тип данных для элементов «Код1» и «Код2».

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

При описании сложного типа указываются порядок вхождения дочерних элементов (с помощью специальных тегов — индикаторов порядка, см. табл. 2.11), а также степень кардинальности повторяющихся элементов (с использованием атрибутов minOccurs и maxOccurs).

Атрибут minOccurs определяет минимальную степень кардинальности, то есть наименьшее возможное количество повторений дочернего элемента. Значение minOccurs, равное нулю, указывает на необязательность (опциональность) элемента.

Атрибут maxOccurs определяет максимальную степень кардинальности, или наибольшее количество повторений элемента. Максимальная и минимальная степени кардинальности задаются определенными значениями. Для maxOccurs может быть указано значение unbounded (элемент встречается любое количество раз).

В данном примере описан сложный тип данных для элемента «Книга», содержащего дочерние элементы «Название», «Автор», «Код», «Цена». Тег является индикатором порядка вхождения дочерних элементов (табл. 2.12), а атрибут maxOccurs показывает максимально допустимое количество повторений элемента «Автор».

Индикатор порядка choice указывает, что элемент этого типа «Цена» может содержать либо элемент «Рубли», либо элемент «Доллары», но не оба.

Дата добавления: 2020-12-28 ; просмотров: 1042 | Нарушение авторских прав

АйТи бубен

Инструменты пользователя

Инструменты сайта

Содержание

Введение в XML

XML — расширяемый язык разметки. Рекомендован Консорциумом Всемирной паутины. Спецификация XML описывает XML-документы и частично описывает поведение XML-процессоров.

XML (eXtensible Markup Language — расширяемый язык разметки; произносится [икс-эм-э́ль])- набор правил и соглашений о синтаксисе, с помощью которого можно создавать собственные наборы элементов разметки. Эти элементы, в свою очередь, можно использовать для описания содержимого. Своим появлением XML обязан невозможности применения HTML для описания данных самого разного рода, которые пользователи желают распространять через Web. Так, HTML практически невозможно использовать для описания финансовых данных, руководств по инсталляции программного обеспечения, математических выражений и множества данных других типов, которыми буквально наполнена сеть Интернет. Истинное назначение языка разметки XML — описывать части документа, не касаясь способов его визуализации и отображения. Разметка позволяет структурировать данные, а уже затем эти данные можно использовать по-разному.

В то время как XML описывает структуру данных, XSL и XLink представляют их в определенной форме и организуют связь между ними.

Правила XML:

Интеграция XML в HTML

Визуальное представление данных XML при помощи CSS

XML документы могут быть визуально представлены при помощи таблиц стилей — Основы работы с CSS.

Для подключения стилей существует специальная инструкция xml:stylesheet

Атрибут type указывает используемый тип стилевых таблиц. При использовании таблиц стилей XSL значение атрибута type поменяется на «text/xsl». Атрибут href указывает расположение файла таблицы стилей.

XML Schema (XSD)

Альтернативу определениям DTD представляют XML схемы. XML Schema была задумана для определения правил, которым должен подчиняться документ. Схемы используют синтаксис языка XML для определения правил словаря XML документа. К достоинствам схем можно отнести расширяемость и возможность наследования, поддержку пространств имен, поддержку большего, по сравнению с DTD, количества типов данных.

После проверки документа на соответствие XML Schema, читающая программа может создать модель данных документа (словарь; модель содержания;типы данных). Каждый элемент в этой модели ассоциируется с определённым типом данных, позволяя строить в памяти объект, соответствующий структуре XML-документа. В XML схеме один словарь может ссылаться на другой, и, таким образом, разработчик может использовать уже существующие словари и легче устанавливать и распространять стандарты XML структуры для определённых задач (например, словарь протокола SOAP).

XML Schema (XML схема) — описание структуры XML-документов

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

Чтобы оценить преимущество XML схем (XML Schema) перед DTD, давайте более подробно рассмотрим основные недостатки DTD, которые с успехом были исправлены в XML схемах. О них я уже упоминал в статье «XML DTD», но для лучшего понимания давайте повторим.

Недостатки XML DTD перед XML Schema

  1. Отличный от XML синтаксис языка. То есть, DTD не является XML. В связи с этим могут возникать разнообразные проблемы с кодировкой и верификацией XML-документов.
  2. Нет проверки типов данных. В XML DTD существует лишь один тип данных – строка. В связи с этим, например, если в числовом поле будет текст, документ все равно пройдет верификацию, так как XML DTD не может проверить тип данных.
  3. Нельзя поставить в соответствие одному XML-документу больше одного DTD описания. То есть, верифицировать документ можно лишь одним DTD описанием. Если их несколько, то придется переделывать описания и совмещать все в одном файле, что очень неудобно.

Это были основные недостатки XML DTD, которые с успехом исправлены в промышленном стандарте описания XML-документов XML Schema.

XML Schema – промышленный стандарт описания XML-документов

Если быть кратким, то XML Schema делает следующее:

  1. Описывает названия элементов и атрибутов (словарь).
  2. Описывает взаимосвязь между элементами и атрибутами, а также их структуру (модель содержания).
  3. Описывает типы данных.

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

Пример XML Schema для валидации XML-документа

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

Пример простой схемы XML

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

Итак, вернемся к нашей XML схеме. Как вы уже заметили, для создания XML схем используется уже известный нам XML. Единственное отличие здесь в том, что в XML Schema уже определены элементы, в отличие от обычного XML. В связи с этим используются пространства имен. В данном случае обязательным пространством имен будет «http://www.w3.org/2001/XMLSchema», которое будет задаваться при помощи префиксов «xs».

Сразу хочу заметить, что можно использовать как префиксы пространств имен, так и задавать пространство имен для корневого элемента. Как таковой разницы здесь нет. Каждый сам решает, как ему поступать в данной ситуации. Скажу только, что обычно используются префиксы «xs» или «xsd».

Ну а теперь давайте разберемся, как же расшифровать вышеприведенную схему. Как уже говорилось выше, XML Schema это описание словаря и типов данных. Отталкиваясь от этого, произведем расшифровку каждого элемента.

  • — объявляем элемент «книга» с типом «Книга».
  • — объявляем комплексный тип с именем «Книга» (xs:complexType – может содержать в себе вложенные элементы).
  • — объявление вложенности. То есть, тип будет содержать вложенные элементы.
  • — объявляем элемент с именем «название» (стандартного типа «строка» — xs:string).
  • — объявляем элемент с именем «цена» (стандартного типа «число» — xs:decimal).

Как видите, ничего сверхсложного здесь нет. Если вдуматься, то все очень просто.

Основные элементы XML Schema

Если быть кратким, то XML схему можно описать следующим образом.

Как видно с примера, каждая XML схема состоит с корневого элемента «schema» и обязательного пространства имен «http://www.w3.org/2001/XMLSchema». Далее идет описание схемы и собственно сама схема. При этом очень часто в очень качественных схемах описание бывает куда большим, чем сама XML Schema.

Описание элементов в XML Schema

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

Теперь давайте рассмотрим второй способ написания XML Schema, который основывается на том, чтобы описывать тип сразу внутри элемента. Данный способ подойдет в том случае, если вы не планируете использовать одно и то же описание для разных элементов. Для наглядности рассмотрим пример.

Как видно с примера, элемент объявляется при помощи специальной конструкции «element» с использованием соответствующего префикса. В данном случае мы определяем элемент с названием «root» без указания типа (type), так как он будет описан внутри элемента. То есть, есть два способа описания элементов.

1 способ

2 способ

Вы можете использовать как первый способ, так и второй. Все они работают одинаково. Вопрос лишь в удобстве в данном конкретном случае.

Далее после объявления элемента мы указываем, что он комплексного типа ( ) и перечисляем ( ) вложенные элементы. В данном случае это элементы name и age с типами «xs:string» и «xs:integer». Префикс xs означает, что это базовый тип, который уже описан в стандарте XML Schema.

Как видите, пока все довольно просто. Опять же, углубляться во все подробности мы не будем, так как данная статья предназначена для ознакомления с XML Schema, а не ее детальным изучением.

Как ставится в соответствие XML Schema и документ

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

На случай, если обработчик не знает где лежит схема, мы можем указать, где ее искать. Делается это при помощи специального атрибута «schemaLocation». Поскольку этот атрибут принадлежит другому пространству имен, то перед началом использования атрибута пространство тоже нужно указать. Для наглядности рассмотрим пример.

XML Schema

XML-документ

Теперь давайте подробно разберем каждую строчку.

  • targetNamespace=»http://www.site.com» – указываем для какого пространства имен эта XML Schema.
  • xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» – подключаем пространство имен в котором описан атрибут «schemaLocation».
  • xsi:schemaLocation=»http://www.site.com/product.xsd» – указываем, где можно найти схему на случай, если парсер не знает где она лежит. Если XML-документ не принадлежит никакому пространству имен, а следовательно и в схеме нет на него указания, то атрибут «schemaLocation» заменяется на «noNamespaceSchemaLocation» (указание на схему без определения пространств имен).

Рекомендую также ознакомиться с другими статьями по XML и XSLT:

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

На этом все. Удачи вам и успехов в изучении XML!

C# Разработка

Блог о создании приложений на платформе .NET Framework

10 ноября 2020 г.

Как создать XML и XSD схему и наоборот

Итак, что же мы будем делать, для того, что бы научиться штамповать XML на основе вашего эталона? Опишу всё по порядку.

Имеется:
Какой то XML (xmlfile.xml), сохраненный в текстовом формате в файл. Ниже приведу текст:

Действия для создание нового:

  1. Сначала используя утилиту XSD.exe, либо воспользовавшись онлайн сервисами (искать «xml to xsd» один из них www.freeformatter.com/xsd-generator.html), мы будем создавать из имеющейся XML ее примитивное XSD описание. На выходе мы будем иметь полностью, автоматическим образом, созданный output.xsd файл, который уже подходит к использованию но может быть не полным.
  2. Далее, на основе output.xsd, будут созданы классы на языке C# xmlclass.cs. После чего, мы добавляем его в наш проект. Создавать класс можно используя XSD.exe, либо xsd2code утилитой, или же любым онлайн сервисом.
  3. Теперь мы готовы использовать классы файла xmlclass.cs. Поэтому создадим и наполним данными экземпляры xmlclass, а потом, используя процесс сериализации, будем преобразовывать объекты в XML строку, и после чего сохраним ее в новый файл. Тем самым получим XML на основе имеющегося.

Приступим!

Шаг 1. Создание XSD из XML.

Итак, приведу способы, которыми пользуюсь сам:

  1. Утилита xsd.exe — создатель Microsoft.
  2. Утилита xsd2code.exe — стороннее приложение, которое умеет все тоже самое, что и xsd.exe, но доступно для скачивания напрямую (на данный момент стала платной с Trial периодом).
  3. Использование любых онлайн сервисов.



Для того, что бы получить XSD.exe, вам придется поставить любой Microsoft SDKs, в поставке которого, идет данное приложение. К сожалению, на данный момент ни одна из студий в своем комплекте не содержит этой утилиты.

— Далее перейдя в папку:
C:\Program Files (x86)\Microsoft SDKs\Windows>

— Воспользуемся поиском, и найдем файл xsd.exe, после чего (что бы упростить себе работу), скопируем его в созданную в корне диска папку C:\xmltoxsd. Далее в эту же папку мы копируем наш xmlfile.xml и все готово к началу.

Отрываем «Командную строку» (Пуск -> «Выполнить» -> «cmd»), переходим в наш каталог и вызываем с параметрами по умолчанию xsd.exe, передавая наш xmlfile.xml параметром:

И видим, что рядом появился файл xmlfile.xsd с содержимым.

Вот и все! Этих действий достаточно, для создания примитивного XSD файла, с которым можно работать. Но стоит понимать, что сам xsd.exe, как и любая другая утилита, ничего не знает про типы ваших полей (поэтому почти всегда тип полей будет string), а так же о всех вариациях атрибутов и параметров. То есть, если у какого-то тега нет атрибута в вашей XML, тогда его и не будет в описании. Поэтому XML должен быть наиболее полным и в случае, если элемент может содержать несколько дочерних полей, лучше добавить как минимум два, что бы xsd.exe понял, что это коллекция.

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

Шаг 2. Создание Class из XSD.

Для создания класса на языке C#, нам понадобится вновь использоваться xsd.exe но уже с другим параметром /classes, передав путь к нашему xmlfile.xsd.

После выполнения появится файл xmlfile.cs, содержимое которого приведено ниже в сжатом виде:

Замечание: xsd.exe не умеет добавлять комментарии к получившимся классам и полям. В описании XSD существует элемент под названием xs:annotation > , который чаще всего содержит xs:documentation >, внутри которого размещено описание поля. По идее, оно должно быть размещено в /// описании, но на текущий момент xsd.exe отказывается добавлять текст в описание, поэтому приходится прибегать к альтернативам, таким как xsd2code или онлайн сервисам.

Шаг 3. Сериализация объектов в XML.

Получившиеся классы у нас лежат в файле xmlfile.cs. Далее его содержимое или сам файл добавляем в проект Visual Studio, после чего можно с ним работать. Я создам демонстративный объекты книг, после чего сохраню в файл в формате XML.

После запуска и открытия Output.xml можно увидеть, что мы сохранили так, как мы хотели (Нижний файл — «Созданный кодом«).

Как мы видим, форматирование было соблюдено, а данные были наполнены нами.

Язык xml схемы данных

Консорциум W3C выработал рекомендацию языка определения схем XML (XSD), объединив наиболее популярные языки описания схем в один стандарт. Основная цель, которая при этом преследовалась, — получение стандарта, который можно широко реализовать и при этом он платформно-независимый.

Язык XML Schema Definition Language, который также называют XML Schema Language, во многом похож на язык XDR, с которым вы познакомились раньше. Схемы XSD способны решать следующие задачи:

  • Перечисление элементов в документе XML и проверка наличия в документе только объявленных элементов.
  • Объявление и определение атрибутов, модифицирующих элементы документа.
  • Определение родительско-дочерних отношений между элементами.
  • Определение состояний и моделей содержания для элементов и атрибутов.
  • Задание типов данных.
  • Установка значений по умолчанию.
  • Возможность расширения.
  • Поддержка использования пространств имен.

Корневым элементом в схеме XML является элемент , который содержит все остальные элементы в документе схемы. В рамках корневого элемента схемы XSD атрибутом определяется пространство имен , которое содержит элементы и атрибуты XSD схемы.

Все элементы XSD начинаются с префикса , который указывается для пространства имен XSD, объявленного в корневом элементе экземпляра схемы.

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

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

Ссылка на конкретную схему приводится в атрибуте

Объявление элемента и атрибута XSD

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

Основное объявление элемента состоит из имени и типа данных

В схемах XSD дескрипторы, используемые в документах XML, разделяются на две категории — сложные типы и простые типы. Элементы сложных типов могут содержать другие элементы, а также обладают определенными атрибутами; элементы простых типов такими возможностями не обладают.

Атрибут — объявление простого типа, которое не может содержать другие элементы. Объявление атрибута похоже на объявление элемента:

Простые типы данных

Есть две главных категории простых типов:

  • встроенные типы;
  • определенные пользователем простые типы.

Язык XSD имеет большое количество данных. Встроенные типы включают в себя примитивные типы и производные. данных не получены из других типов данных. Например, числа с плавающей запятой — математическое понятие, которое не получено из других типов данных. данных определены в терминах существующих типов данных. Например, целое число — частный случай, полученный из десятичного типа данных.

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

Примитивные типы данных

Тип данных Аспекты Описание
length, pattern, maxLength, minLength, enumeration, whiteSpace Представляет символьную строку.
pattern, whiteSpace Представляет логическое значение, которое может быть true или false.
enumeration, pattern, totalDigits, fractionDigits, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет произвольное число.
pattern, enumeration, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет 32-битовое число с плавающей запятой одиночной точности.
pattern, enumeration, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет 64-битовое число с плавающей запятой двойной точности.
enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет продолжительность времени. Шаблон для duration следующий — PnYnMnDTnHnMnS, где nY представляет число лет; nM — месяцев; nD — дней; Т — разделитель даты и времени; nH — число часов; nM — минут; nS — секунд.
enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет конкретное время. Шаблон для dateTime следующий — CCYY-MM-DDThh:mm:ss, где CC представляет столетие; YY — год; MM — месяц; DD — день; Т — разделитель даты и времени; hh — число часов; mm — минут; ss — секунд. При необходимости можно указывать доли секунды. Например, сотые доли в шаблоне: ss.ss
enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет конкретное время дня. Шаблон для time следующий -hh:mm:ss.sss (долевая часть секунд необязательна).
enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет календарную дату. Шаблон для date такой — CCYY-MM-DD (здесь необязательна часть, представляющая время).
enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет конкретный месяц конкретного года (CCYY-MM ).
enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет календарный год (CCYY).
enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет конкретный день конкретного месяца (—MM-DD).
enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет календарный день (—DD).
enumeration, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, whiteSpace Представляет календарный месяц (—MM—).
length, pattern, maxLength, minLength, enumeration, whiteSpace Представляет произвольную шестнадцатерично-закодированную двоичную информацию. HexBinary — набор двоичных октетов фиксированной длины, состоящий из четырех пар шестнадцатеоисных символов. Например, 0-9a-fA-F.
length, pattern, maxLength, minLength, enumeration, whiteSpace Представляет произвольную Base64-закодированную двоичную информацию. Base64Binary — набор двоичных октетов фиксированной длины.
length, pattern, maxLength, minLength, enumeration, whiteSpace Представляет URI как определено в RFC 2396. Значение anyURI может быть абсолютно или относительно, и может иметь необязательный идентификатор фрагмента.
length, enumeration, pattern, maxLength, minLength, whiteSpace Представляет составное имя. Имя составлено из префикса и локального названия, отделенного двоеточием. И префикс и локальные названия должны быть NCNAME. Префикс должен быть связан с namespace URI ссылкой, используя объявление пространства имени.
length, enumeration, pattern, maxLength, minLength, whiteSpace Представляет тип атрибута СИСТЕМЫ ОБОЗНАЧЕНИЙ. Набор QNAMES.

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

Производные типы данных

Тип данных Аспекты Описание
length, pattern, maxLength, minLength, enumeration, whiteSpace Представляет нормализованные строки. Этот тип данных получен из string.
enumeration, pattern, length, minLength, maxLength, whiteSpace Представляет маркированные строки. Этот тип данных получен из normalizedString.
length, pattern, maxLength, minLength, enumeration, whiteSpace Представляет идентификаторы естественного языка (определенный RFC 1766). Этот тип данных получен из token
length, maxLength, minLength, enumeration, whiteSpace Представляет тип атрибута IDREFS. Содержит набор значений типа IDREF.
length, maxLength, minLength, enumeration, whiteSpace Представляет тип атрибута ENTITIES. Содержит набор значений типа ENTITY.
length, pattern, maxLength, minLength, enumeration, whiteSpace Представляет тип атрибута NMTOKEN. NMTOKEN — набор символов имен (символы, цифры и другие символы) в любой комбинации. В отличие отName и NCNAME, NMTOKEN не имеет никаких ограничений на первый символ. Этот тип данных получен из token.
length, maxLength, minLength, enumeration, whiteSpace Представляет тип атрибута NMTOKENS. Содержит набор значений типа NMTOKEN.
length, pattern, maxLength, minLength, enumeration, whiteSpace Представляет имена в XML. Name — лексема(маркер), которая начинается с символа, символа подчеркивания или двоеточия и продолжается символами имен (символы, цифры, и другие символы). Этот тип данных получен из token.
length, pattern, maxLength, minLength, enumeration, whiteSpace Представляет неколонкированные названия. Этот тип данных — тот же, что и Name, но не может начинаться с двоеточия. Этот тип данных получен из Name.
length, enumeration, pattern, maxLength, minLength, whiteSpace Представляет тип атрибута ID, определенный в XML 1.0 Рекомендации. ИДЕНТИФИКАТОР не должен иметь двоеточия (NCName) и должен быть уникален в пределах XML документа. Этот тип данных получен из NCNAME.
length, enumeration, pattern, maxLength, minLength, whiteSpace Представляет ссылку к элементу, имеющему атрибут ID, который точно соответствует установленному ИДЕНТИФИКАТОРУ. IDREF должен быть NCNAME и должен быть значением элемента или атрибута типа ID в пределах XML документа. Этот тип данных получен из NCNAME.
length, enumeration, pattern, maxLength, minLength, whiteSpace Представляет тип атрибута ENTITY. Это — ссылка к неанализируемому объекту с именем, которое точно соответствует установленному имени. ENTITY должен быть NCNAME и должен быть объявлен в схеме как неанализируемое имя объекта. Этот тип данных получен из NCNAME.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет последовательность десятичных цифр с необязательным знаком (+ или -). Этот тип данных получен из decimal.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число, меньшее или равное нулю. NonPositiveInteger состоит из отрицательного знака (-) и последовательности десятичных цифр. Этот тип данных получен из целого числа.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число, меньшее нуля. Этот тип данных получен из nonPositiveInteger.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число с минимальным значением -9223372036854775808 и максимумом 9223372036854775807. Этот тип данных получен из целого числа.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число с минимальным значением -2147483648 и максимумом 2147483647. Этот тип данных получен из long.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число с минимальным значением -32768 и максимумом 32767. Этот тип данных получен из int.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число с минимальным значением -128 и максимумом 127. Этот тип данных получен из short.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число, большее равное нулю. Этот тип данных получен из целого числа.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число с минимумом нуль и максимумом 18446744073709551615. Этот тип данных получен из nonNegativeInteger.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число с минимумом нуль и максимумом 4294967295. Этот тип данных получен из unsignedLong.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число с минимумом нуль и максимумом 65535. Этот тип данных получен из unsignedInt.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число с минимумом нуля и максимума 255. Этот тип данных получен из unsignedShort.
enumeration, fractionDigits, pattern, minInclusive, minExclusive, maxInclusive, maxExclusive, totalDigits, whiteSpace Представляет целое число, которое является большим чем нуль. Этот тип данных получен из nonNegativeInteger.

Определённые пользователем простые типы

Получены из встроенных типов, применением к ним именованых ограничений, называемыми аспектами(Facets). Аспекты ограничивают допустимые значения простых типов. Синтаксис применения аспектов ограничения следующий:

Аспекты ограничения простых типов

Аспект Значение
Определенный набор значений. Ограничивает тип данных указанными значениями.
Значение с определенным максимальным числом десятичных цифр в дробной части.
Целочисленное число единиц длины. Единицы длины зависят от типа данных.
Верхний предел значений (все значения — меньше указанного).
Максимальное значение.
Целочисленное число единиц максимальной длины.
Нижний предел значений (все значения — больше указанного).
Минимальное значение.
Целочисленное число единиц минимальной длины.
Литеральный шаблон, которому должны соответствовать значения.
Значение с определенным максимальным числом десятичных цифр.
Одно из предопределенных значений: preserve, replace или collapse
Значения аспекта
Значение Описание
Никакая нормализация не выполняется.
Все #x9 (tab), #xA (line feed) and #xD (carriage return) заменяются на #x20 (пробел).
После replace-обработки все внутренние цепочки #x20 разрушаются до одного пробела, а окружающие пробелы удаляются.

Аспекты могут быть указаны только однажды в определении типа, кроме и — они могут иметь многократные вхождения и группируются.

Именованный тип данных

В языке XSD, в отличие от тех двух, с которыми вы познакомились раньше, существует концепция именованных типов. Например, при создании определения, можно присвоить этому определению имя, чтобы повторно использовать его в схеме XSD. Вы можете создать определение простого типа и назвать его, например, . В результате вы получите именованное ограничение. После этого вы сможете применять это ограничение и к другим элементам в схеме. Это особенно полезно, когда в определении применяются аспекты ограничения типа данных, чтобы не повторять их каждый раз в других определениях. Например, элемент может быть связан с элементом и атрибутом для объявления содержания этих элемента и значения атрибута как строковых данных:

Обратили внимание на ключевое слово в объявлении атрибута? Как и в предыдущих схемах, оно все так же означает обязательность использования объявленного атрибута. Другими предопределенными значениями атрибута элемента схемы могут быть ключевые слова и . Если первое из них означает необязательность использования, то второе запрещает использование объявленного атрибута. Такая необходимость возникает в случае локального объявления ранее определенной группы атрибутов элементом схемы , например:

далее в контексте определения элемента сложного типа мы делаем ограничение на применение атрибутов этой группы:

Сложные типы данных

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

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

Перечень объявлений дочерних элементов приводится в структуре группирующих XSD-элементов choice, sequence, и all.

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

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

Определение элемента сложного типа

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

Язык xml схемы данных

XML технологии и средства разработки Gupta
Team Developer: XML технологии (Часть 1)

В статье, которая состоит из двух частей, рассмотрены основные понятия и возможно-сти технологий XML при построении информационных систем (часть 1) и возможности использования их при программировании в Gupta (Centura) Team Developer часть 2). Техно-логии XML обеспечивают высокий уровень универсальности при обмене данными между приложениями, при хранении данных в БД и универсализации доступа к данным в WEB-приложениях.

Язык XML появился относительно недавно в поле зрения IT специалистов, но уже завоевал всестороннее признание. Достаточно сказать, что он стал основой WEB технологий, универ-сальным механизмом взаимодействия программных систем и способом представления ин-формации в БД. Внешне он похож на язык HTML (тэговые операторные скобки), но, несо-мненно, функционально имеет более широкую сферу применения, и, думаю, не ошибусь, большое будущее.

В настоящее время на базе XML (Extensible Markup Language) появилось много новейших технологий, число которых постоянно растет. Некоторые их них мы рассмотрим ниже. Не-смотря на значительную простоту XML обеспечивает высокую универсальность — в простоте гениальность новых решений.

На рисунке 1 показаны основные возможности XML и основные программные компоненты, участвующие процессе обработки XML информации.

Рис. 1 Обобщенный взгляд на XML технологии.

Основные технологические процессы выделены красным цветом: обработка данных, обмен данными, хранение данными, проверка данных, преобразование данных и их генерирование. На рисунке выделены разновидности программных систем (синим цветом), участвующих в обработке данных: программные приложения, СУБД XML, XSL процессоры и WEB сервер-клиент компоненты. Данные на рисунке представлены (серые прямоугольники) в формате XML. Они необходимы: для непосредственного хранения (XML документ), для описания структур данных (XML схемы) и для преобразования данных (XSL правила-программы).

    XML позволяет описывать структурированные данные. XML — язык описания данных. (Можно описывать все традиционные структуры данных: таблицы, массивы, вложенные структуры, деревья, списки, сети и т.д.)

XML — поддерживается общедоступными СОМ и АХ объектами, интегрируемыми в опе-рационную систему и Интернет. СОМ XML позволяет генерировать, проверять, считы-вать, преобразовывать данные. XML поддерживает UNICODE формат данных. XML — это независимое от платформ средство описания данных. Имеются сопровождаемые ком-поненты XML (SDK XML), которые обеспечивают обработку данных практически в лю-бых языках программирования: C++, JAVA, Jscript, VBScript и др.

  • Язык XML — внешне похож на формат HTML. Имеет тэги и атрибуты. XML — текстовый формат представления данных, однако, они не предназначены для чтения, а для перера-ботки, хранения и представления данных в WEB.
  • XML — это семейство технологий, которые постоянно развиваются:

    4.1. XML 1,0 базовый стандарт языка,
    4.2. XLINK — описывает правила добавления ссылок (URL) в XML документы,
    4.3. XPOINTER — описывает правила создания графических ссылок (URL),
    4.4. CSS — работает также как и для HTML,
    4.5. XSL и XSLT — это продвинутые языки преобразования и обработки XML докумен-тов,
    4.6. DOM — это стандартный объект (функции и методы) позволяющие про граммировать все действия по работе с XML документами.
    4.7. XML Schemas (1/2) — позволяет описывать свои подмножества языка XML и прове-рят ь правильность их построения
    4.8. XML Query — язык доступа к данным на основе запросов и многие другие.

    Рассмотрим теперь некоторые из этих возможностей: описание данных на языке XML, про-верку данных на основе схем, преобразование данных на основе XSL, классы SDK XML.

    Язык XML, в самом общем виде, — это набор простых правил для описания вложенных тек-стовых структур данных. Понятие документа: документ это совокупность элементов. Сам документ является элементом. Элемент может иметь произвольное число атрибутов (свойств). Атрибуты имеют значения и тип. На рисунке, расположенном ниже, представлен вид простейшего XML документа. Он состоит из заголовка и текста документа, включающе-го другие элементы и их атрибуты (в примере элементы: article, part, picture; атрибуты: version, file). Кроме того, в документе может располагаться обычный текст.

    Рис. 2. Пример простого XML документа.

    Описание элементов обязательно включает ключевые тэги (заголовки) начальный и конеч-ный, которые должны совпадать по наименованию:

    Язык определения XML схем

    Что такое язык определения XML схем

    Язык определения XML схем или XSD (XML Schema Definition) – расширение XML, призванное стать основным инструментом описания структуры XML документов. Спецификация XSD является одной из рекомендаций консорциума W3C (World Wide Web Consortium), а не инициативой какой-то отдельной IT компании. Можно также сказать, что с использованием XML схемы можно формализовать набор правил, с соблюдением которых необходимо составлять XML документ конкретного назначения. С помощью сервисов XSD можно также проверить, удовлетворяет ли рассматриваемый документ установленным правилам — является ли он валидным конкретной XML схеме. Базовый синтаксис XML определяет то, каким образом в тексте должны выделяться элементы и их атрибуты, а также, правила описания структурных отношений между элементами. Синтаксис XSD декларирует то, какие именно элементы должны содержаться в XML документе, какой набор атрибутов должен или может иметь каждый из них, и где их место в общей иерархии. Стандарт XSD никоим образом не расширяет базовый синтаксис XML, поскольку каждая XML схема является правильно построенным (well-formed) XML документом.

    Основные элементы XSD

    Поскольку основными объектами любого XML документа являются элементы, их атрибуты и образованная ими иерархическая структура, то вполне логично, что основные типы элементов XSD — это определение элементов (element), их атрибутов (attribute), а также сложный тип (complexType), который описывает составные элементы и простой тип (simpleType), определяющий элементарные типы данных. Далее нужно быть внимательным, чтобы не запутаться в терминологии.

    Элемент имеет простой тип (simpleType), если он не имеет атрибутов, а его содержимое (данные между открывающим и закрывающим тэгом) соответствует элементарному типу данных или просто отсутствует. Соответственно, все остальные элементы имеют сложный тип (complexType). Значения всех атрибутов также соответствуют простым типам. Для описания элемента простого типа достаточно определить его имя (атрибут name), а в качестве типа (атрибут type) указать любой простой тип данных, например строковый (string).

    Сложный тип (complexType) определяет сложное содержимое (complexContent) или простое содержимое (simpleContent) элемента. Сложное содержимое – это список атрибутов и набор дочерних элементов. Простое содержимое – это также список атрибутов и простой тип содержимого элемента.

    Помимо всего прочего, XSD поддерживает наследование типов. Например, можно описать новый сложный тип, набор атрибутов и дочерних элементов которого расширяет (extension) сложное содержимое базового типа. Можно, наоборот, ввести ограничения (restriction) на значения атрибутов и элементов базового типа. Аналогично можно накладывать ограничение на значения простых типов или расширять их область допустимых значений. Надеюсь, что приведенные далее примеры прояснят ситуацию и снимут все вопросы.

    Примеры XML схем

    XSD и структурированные наборы данных

    В статье о применении XML я писал, что довольно часто его используют для обмена структурированными наборами данных между различными информационными ресурсами. Формироваться эти данные могут операторами (людьми, занимающимися вводом данных) вручную или посредством специальных программных утилит. В любом случае, принимающую сторону сам способ создания набора интересует мало: ей важно убедиться, что переданные ей данные соответствуют определенному формату или набору правил. Проверить это достаточно легко, имея XML схему получаемого документа.

    Все примеры, как это обычно бывает на сайте codingcraft.ru, сопровождаются специальными демонстрационными программами, с помощью которых в достоверности написанного легко убедиться. Для этой статьи также создана небольшая утилита, которая позволяет загружать XSD, вводить XML и отслеживать факт его валидности выбранной XML схеме.

    Скачать демонстрационную программу.
    Скачать Microsoft .NET Framework 3.5 SP1.

    Пример XML схемы.

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

    По легенде, XML документ должен содержать имя клиента, контактные телефоны и электронную почту. Для этих целей в XML схеме определен элемент для хранения личных параметров пользователя client сложного типа client_type. Содержимым client_type является последовательность (sequence) простых элементов: name, phone и email. Атрибуты minOccurs и maxOccurs определяют минимальное и максимальное количество вхождений каждого из элементов в последовательность. Телефон должен быть обязательно, но максимум их может быть два. Электронная почта является необязательным элементом ( minOccurs=0 ). Значения minOccurs и maxOccurs по умолчанию – единица, т.е. элемент name должен присутствовать обязательно в единственном экземпляре.

    Для контроля корректности вводимого номера телефона и адреса электронной почты я использую регулярные выражения. Чтобы подключить проверку на основе регулярных выражений, необходимо определить собственные типы элементарных данных (simpleType): для phone — phone_type, а для email – email_type. Оба типа являются производными от обычного строкового типа ( base=”xs:string” ) и сужают (restriction) область допустимых значений посредством шаблона регулярного выражения (pattern). Помимо строкового типа, XSD поддерживает другие элементарные типы: целочисленный тип (integer), вещественный (float, double), логический (boolean), дату (date) и т.д.

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

    Пример невалидного XML.

    XSD и интерпретатор бизнес — сценариев

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

    Для начала следует описать сам пример. Сразу скажу, что это полностью выдуманный пример, для которого не существует никакого интерпретатора. Здесь я попытался с помощью XML описать хранимую функцию некоего фреймворка, которая на вход принимает три параметра S,N,D, а в качестве результата возвращает логическое значение Result. В теле функции происходит инициализация пользовательского элемента управления (Control) и запуск цикла (While) с предусловием (Expression). В теле цикла (Do) выполняется условный оператор (If). В случае истинности условия (Then) выполняется обращение к внешнему компоненту (Invoke). В случае неистинности условия (Else) выполняется обращение к другой хранимой функции (Call). В ходе практически всех операций осуществляется передача входных (In) и получение выходных параметров (Out), которые, как предполагается, могут изменяться в процессе выполнения этих операций. В конце каждой итерации цикла выполняется вывод на печать (Print) параметра D. Если напрячься, то можно для всего этого выдумать какой-нибудь смысл, но пока цель только одна – продемонстрировать на этом примере возможности XSD.

    Для корневого элемента Task определен тип Task_type, который является производным от типа Parametrized_call (параметризованный вызов). Тип Task_type расширяет Parametrized_call элементом Main и двумя атрибутами Name и Description. Атрибут use для каждого атрибута определяет его “обязательность”: атрибут Name является обязательным, а атрибут Description (описание) может отсутствовать. Напомню, что конструкция sequence определяет строгую последовательность дочерних элементов: элемент Main должен строго следовать за элементами, определенными в базовом типе Parametrized_call, а именно за элементами In и Out.

    Далее, вплоть до определения простого типа Value_enum нет ничего особенного: определяется тип параметризованного вызова (Parametrized_call), тип списка определений параметров (Parameters_def_list) и тип определения параметра (Parameter_def). Тип Value_enum – это перечисление элементарных типов рассматриваемого XML интерпретатора. Он примечателен тем, что ограничивает (restriction) базовый элементарный тип string, но не на основе шаблона, как в предыдущем примере, а на основе перечисления конкретных значений строк .

    Типы списка ссылок на параметры (Parameters_list) и тип ссылки на параметр (Parameter_ref) по легенде используются для передачи ссылок на объявленные ранее в элементе Parametrized_call данные. Ссылки на входные (In) и ссылки на выходные (Out) параметры объединены в группу In_Out, с тем, чтобы при объявлении других, более сложных конструкций не повторяться, а ссылаться на описанную ранее группу по ее имени. Можно то же самое реализовать с использованием наследования, как в случае типа Task_type, но для демонстрации применения групп я выбрал именно такую реализацию. Ссылаются на эту группу тип вызова внешнего компонента (Invoke_type) и тип вызова хранимой функции (Call_type). Для описания ссылки на вызываемый внешний программный компонент тип Invoke_type использует переопределенный элементарный тип Signature_type, накладывающий на область допустимых значений строкового типа фильтр на основе регулярного выражения вызова внешней команды.

    Самым сложным XSD типом элементов в рассматриваемом примере является тип последовательности инструкций Sequence_type. Во-первых, содержимое этого типа определяется уже не последовательностью (sequence), а многократным выбором (choice) элементов из некоторого множества. Использование конструкции choice позволяет снять ограничение на строгую последовательность элементов. Количество таких выборов регламентируется атрибутами minOccurs и maxOccurs, и в нашем случае оно ничем не ограничено ( minOccurs=»0″ maxOccurs=»unbounded» ). Во-вторых, здесь приведен пример рекурсивного определения типа, когда элемент типа Sequence_type является одним из возможных дочерних элементов самого себя (под именем Sequence). Также, тип Sequence_type используется в определении типов составных операторов: цикла While и условного оператора If – рекурсия через одно определение. В заключении призываю обратить внимание на то, как определен элемент логического выражения Expression – он определен отдельно, а сложные типы While_type и If_type на него ссылаются посредством атрибута ref.

    XSD и описание пользовательского интерфейса

    Заключительный пример этого раздела не проработан подробно, а лишь иллюстрирует саму идею описания пользовательского интерфейса с помощью XML. Идея это не нова и про нее можно кратко прочитать здесь. Цель этого примера — показать еще один способ организации множества дочерних элементов в сложном типе. Конструкция all используется именно для описания множества элементов: порядок появления элементов произвольный, но каждый из них может быть представлен не более чем в одном экземпляре. Попытка, например, определить значение атрибута maxOccurs больше 1 приведет к ошибке.

    На этом все. Более подробно про XML схемы можно узнать на сайте их авторов:

    или в технической документации Microsoft:

    Пример работы с XSD на C# можно посмотреть здесь.

    Илон Маск рекомендует:  InputQuery - Функция Delphi
  • Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL