Тарифы Услуги Сим-карты

Основные конструкции XML — элементы XML, теги, атрибуты, процессинговые инструкции, секции CDATA, комментарии. "В жизни все не так, как на самом деле."

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

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

Имена элементов

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

Примечание

Двоеточия зарезервированы для использования с пространствами имен.Дополнительные сведения о том, какие символы Юникод являются допустимыми буквами и цифрами, см. в приложении Б спецификации XML.

Начальные, конечные и пустые теги

Теги устанавливают границы вокруг содержимого элемента, если таковое имеется.

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

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

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

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

Peter Kress

В данном случае элемент Содержит два других элемента, и , а также разделяющий их пробел. Элемент содержит текст Peter, а элемент - текст Kress.

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

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

Отношения между элементами

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

Stephanie Bourne

Stephanie Bourne

Примечание

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

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

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

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

Метафоры семейных отношений предоставляют больше различных уровней для описания отношений. Единственные узлы-сестры - , и ; все они содержатся в элементе . Элемент является родителем для элементов , и ; элементы , и являются дочерними для элемента . Точно так же, элемент - родитель элемента , а элемент - дочерний для элемента , в то время как элемент является родителем элемента , а элемент - дочерним элементом для элемента .

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

XML (Extensible Markup Language) - это новый SGML-производный язык разметки документов, позволяющий структурировать информацию разного типа, используя для этого произвольный набор инструкций. Разработчиков Интернет приложений, пытающихся на практике использовать новую технологию, могут заинтересовать конкретные вопросы, связанные с проблемами создания, обработки XML-документов, их отображения на стороне клиента. В этой статье дается краткое представление о том, что представляет собой и для чего нужен XML-документ и на практических примерах иллюстрируются некоторые простые, но пока, к сожалению, мало описанные механизмы его обработки.

Что такое XML

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

  • В первую очередь, эта технология может оказаться полезной для разработчиков сложных информационных систем, с большим количеством приложений, связанных потоками информации самой различной структурой. В этом случае XML - документы выполняют роль универсального формата для обмена информацией между отдельными компонентами большой программы.
  • XML является базовым стандартом для нового языка описания ресурсов, RDF, позволяющего упростить многие проблемы в Web, связанные с поиском нужной информации, обеспечением контроля за содержимым сетевых ресурсов, создания электронных библиотек и т.д.
  • Язык XML позволяет описывать данные произвольного типа и используется для представления специализированной информации, например химических, математических, физических формул, медицинских рецептов, нотных записей, и т.д. Это означает, что XML может служить мощным дополнением к HTML для распространения в Web "нестандартной" информации. Возможно, в самом ближайшем будущем XML полностью заменит собой HTML, по крайней мере, первые попытки интеграции этих двух языков уже делаются (спецификация ).
  • XML-документы могут использоваться в качестве промежуточного формата данных в трехзвенных системах. Обычно схема взаимодействия между серверами приложений и баз данных зависит от конкретной СУБД и диалекта SQL, используемого для доступа к данным. Если же результаты запроса будут представлены в некотором универсальном текстовом формате, то звено СУБД, как таковое, станет "прозрачным" для приложения. Кроме того, сегодня на рассмотрение W3C предложена спецификация нового языка запросов к базам данных XQL, который в будущем может стать альтернативой SQL.
  • Информация, содержащаяся в XML-документах, может изменяться, передаваться на машину клиента и обновляться по частям. Разрабатываемые спецификации XLink и Xpointer поволят ссылаться на отдельные элементы документа, c учетом их вложенности и значений атрибутов.
  • Использование стилевых таблиц (XSL) позволяет обеспечить независимое от конкретного устройства вывода отображение XML- документов.
  • XML может использоваться в обычных приложениях для хранения и обработки структурированных данных в едином формате.

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

Как создать XML документ?

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

Важная деловая встреча Надо встретиться с Иваном Ивановичем, предварительно позвонив ему по телефону 123-12-12 ... Позвонить домой 124-13-13

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

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

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

Надо заметить, что процесс появления новой спецификации очень длителен и сложен. Любой документ, предлагаемый W3C, прежде чем стать стандартом проходит несколько этапов. Сначала пожелания и рекомендации, поступающие от различных компаний, участвующих в его разработке, оформляются в виде принятого к сведению замечания (Note), своеобразного протокола о намерениях. Информация, изложенная в таких документах предназначена только для обсуждения членами консорциума и никто не дает гарантии того, что эти замечания потом станут рекомендацией.

Следующей этапом продвижения документа является рабочий вариант спецификации, который составляет и изменяет в дальнейшем специально созданная рабочая группа (Working Group), в состав которой входят представители заинтересовавшихся идеей компаний. Все изменения, вносимые в этот документ обязательно публикуются на сервере консорциума www.w3.org и до тех пор, пока рабочий вариант не станет рекомендацией, он может служить для разработчиков лишь "путеводной звездой", с которой компания может сверять свои планы, но не должна использовать при разработке ПО.

В том случае, если стороны договорились по всем основным вопросам и существенных изменений в документ больше вносится, рабочий вариант становится Предложенной Рекомендацией и после голосования членами рабочей группы может стать уже Официальной Рекомендаций W3C, что по статусу соответствует стандарту в WWW.

XML-генераторы

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

Пусть, например, нашей задачей является создание формата хранения данных регистрации каких-то происходящих в системе событий (log-файла). В простейшем случае можно ограничиться фиксированием успешных и ошибочных запросов к нашим ресурсам - в таком документе должна присутствовать информация о времени произошедшего события, его результате (удача/ошибка), IP адресе источника запроса, URI ресурса и коде результата.

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

195.151.62.18 GET /misc/ 200 195.209.248.12 GET /soft.htm 200

Структура документа довольно проста - корневым в данном случае является элемент log, каждое произошедшее событие фиксируется в элементе event и описывается при помощи его атрибутов(date - время и result - тип события) и внутренних элементов (method - метод доступа, ip-from - адрес источника, url-to - запрашиваемый ресурс, response - код ответа). Генерацией этого документа может заниматься, например, модуль аутентификации запросов в систему, а использованием - программа обработки регистрационных данных (log viewer).

Что такое DTD?

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

Небольшой пример для нашего XML-документа:

Сохраните этот файл под именем log.dtd и включите в XML-документ новую строчку:

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

Что такое Namespaces?

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

Чтобы исправить эту ситуацию, мы должны определить уникальные названия элементов и их атрибутов, "дописывая" к их обычным именам некоторый универсальный неповторяющийся префикс. Для этого применяется механизм Namespaces ( Namespaces была официально утверждена W3C в январе 1999 года и сегодня является частью стандарта XML). Согласно этой спецификации, для определения "области действия" тэга (на самом деле этот термин, широко используемый в обычных языках программирования, неприменим в XML, потому что как такового множества, на котором могла бы быть построена "область", внутри структурированного XML документа нет) необходимо определить уникальный атрибут, описывающий название элемента, по которому анализатор документа сможет определить, к какой группе имен оно относится (Namespace идентификаторы могут применяться для описания уникальных названий как элементов, так и их атрибутов). В нашем последнем примере это может быть сделано так:

195.151.62.18

GET

/misc/

200

195.209.248.12

GET

/soft.htm

200

Уникальность атрибуту имени обеспечивает использование в качестве его значения некоторых универсальных идентификаторов ресурсов (например, URI или ISBN) .

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

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

Обработка XML-документов

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

В августе 1997 RFC 2376 были утверждены MIME типы для XML-ресурсов: text/xml и application/xml. Поэтому XML документы могут передаваться по HTTP и отображаться программой просмотра также, как и обычные HTML- страницы. Для этого нужно немного изменить конфигурацию Web-сервера (в Apache - добавить в файл mime.types строчку "text/xml xml ddt"), а на стороне клиента иметь броузер, поддерживающий стилевые таблицы или JavaScript. Сегодня такими броузерами являются Microsoft Internet Explorer 5, первый броузер, поддерживающий спецификацию XML 1.0 и стилевые таблицы XSL; броузер Amaya, предлагаемый консорциумом специально для тестовых целей () и поддерживающий практически все разрабатываемые стандарты W3C. Поддержка XML также планируется в будущих версиях Netscape Navigator.

Объектная модель документа DOM

Одним из самых мощных интерфейсов доступа к содержимому XML документов является - DOM.

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

text text

Объектное представление структуры документа не является чем-то новым для разработчиков. Для доступа к содержимому HTML страницы в сценариях давно используется объектно-ориентированный подход, - доступные для Java Script или VBScript элементы HTML документа могли создаваться, модифицироваться и просматриваться при помощи соответствующих объектов. Но их список и набор методов постоянно изменяется и зависит от типа броузера и версии языка. Для того, чтобы обеспечить независимый от конкретного языка программирования и типа документа интерфейс доступа к содержимому структурированного документа в рамках W3 консорциума была разработана и официально утверждена спецификация объектной модели DOM Level 1.

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

Для описания интерфейсов доступа к содержимому XML документов в спецификации DOM применяется платформонезависимый язык IDL и для использования их необходимо "перевести" на какой-то конкретный язык программирования. Однако этим занимаются создатели самих анализаторов, нам можно ничего не знать о способе реализации интерфейсов - с точки зрения разработчиков прикладных программ DOM выглядит как набор объектов с определенными методами и свойствами. В следующем разделе мы вкратце рассмотрим объектную модель Microsoft Internet Explorer 5, доступную из Java Script и VBScript сценариев.

Описание структуры 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-документа;

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

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

4. - используется для определения атрибутов группы элементов;

5. - позволяет включать в XML-документ документацию;

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. список допустимых значений;

5. шаблоны;

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

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

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

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

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

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

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

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

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

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

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

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


Похожая информация.


Синтаксис разметки.

Для ограничения тегов в разметке XML, так же как и в HTML используются угловые скобки: тег начинается со знака "меньше" (<) и завершается знаком "больше" (>). Но необходимо помнить, что в отличие от HTML вся разметка XML чувствительна к регистру символов, это касается как имен тегов, так и значений атрибутов.

Символы.

Поскольку XML предназначен для широкого использования, символы не ограничены 7-битным набором символов ASCII. К числу символов, допустимых в языке XML, относятся три управляющих символа СО стандарта ASCII, все обычные символы этого стандарта и почти все остальные символы Unicode

Имена.

В языке XML все имена должны начинаться с буквы, символа нижнего подчеркивания (_) или двоеточия (:) и продолжаться только допустимыми для имен символами, а именно они могут содержать только буквы, входящие в секцию букв кодировки Unicode, арабские цифры, дефисы, знаки подчеркивания, точки и двоеточия. Однако имена не могут начинаться со строки xml в любом регистре. Имена, начинающиеся с этих символов, зарезервированы для использования консорциумом W3C. Нужно помнить что так как буквы не ограничены исключительно символами ASCII, то в именах можно использовать слова из родного языка.

Структура XML- документа.

Любой XML-документ состоит из следующих частей:

    Необязательный пролог.

    Тело документа.

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

Рассмотрим каждую из частей более подробно.

Пролог XML- документа.

Документ XML начинается с пролога. В прологе содержатся некоторые указания, предназначенные для анализатора XML и приложений.

Пролог состоит из нескольких частей:

    необязательное объявление XML (XML Declaration) которое заключено между символами . Объявление содержит:

    пометку xml и номер версии (version) спецификации XML;

    указание на кодировку символов (encoding), в которой написан документ (по умолчанию encoding="UTF-8");

    параметр standalone который может принимать значения "yes" или "no" (по умолчанию standalone="yes"). Значение "yes" показывает, что в документе содержатся все требуемые декларации элементов, a "no" - что нужны внешние определения DTD.

Все это вместе может выглядеть следующим образом:

.

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

    комментарии.

    команды обработки.

    символы пустых пространств.

    необязательное объявление типа документа, DTD (Document Type Declaration) которое заключено между символами и может занимать несколько строк. В этой части объявляются теги, использованные в документе, или приводится ссылка на файл, в котором записаны такие объявления.

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

Поскольку все эти части необязательны, пролог может быть опущен.

Тело XML-документа.

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

Имя корневого элемента считается именем всего документа и указывается во второй части пролога после слова Doctype. Если определение DTD находится внутри XML- документа, то оно помещается в квадратных скобках после имени корневого элемента:

Но обычно определение DTD составляется сразу для нескольких XML -документов. В таком случае его удобно записать отдельно от документа и тогда вместо квадратных скобок записывается одно из слов System или Public после которого идет адрес в форме URI (Uniform Resource Identifier) файла с определением DTD. Для всех практических целей URI считается эквивалентом адреса URL, хотя в принципе это может быть любое уникальное имя. Определение DTD, например, может выглядеть следующим образом:

Пространства имен XML

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

В дальнейшем имена тегов и атрибутов, которые мы хотим отнести к пространству имен "http://URI_namespace", снабжаются префиксом ns, например:

Новосибирск.

Атрибут xmlns может появиться в любом элементе XML, а не только в корневом. Определенный им префикс можно применять в том элементе, в котором записан атрибут xmlns, и во всех вложенных в него элементах. Более того, в одном элементе можно определить несколько пространств имен. Во вложенных элементах пространство имен можно переопределить, связав префикс с другим идентификатором. Появление имени тега без префикса в документе, использующем пространство имен, означает, что имя принадлежит пространству имен по умолчанию. Префиксы, начинающиеся с символов xml с любым регистром букв, зарезервированы за самим языком XML.

Имя вместе с префиксом называется расширенным или уточненным именем. Часть имени, записанная после двоеточия, называется локальной частью имени.

Идентификатор пространства имен должен иметь форму URI. Адрес URI не имеет никакого значения и может не соответствовать никакому действительному адресу Интернета. В данном случае URI можно рассматривать как уникальную строку символов, идентифицирующую пространство имен.

По правилам SGML и XML, двоеточие может применяться в именах как обычный символ, поэтому любая программа , "не знающая" пространства имен, анализируя документ, рассматривает уточненное имя как обычное уникальное имя. Отсюда следует, в частности, что в объявлении типа документа (Document Type Declaration) нельзя опускать префиксы имен.

Элементы.

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

Открывающие теги.

Открывающий тег начинается со знака "меньше" (<) и завершается знаком "больше" (>), внутри которых помещаются имя элемента:

<имя_элемента>.

Закрывающие теги.

Закрывающий тег начинается со знака "меньше" (<) за которым следует "косая черта" (/) после которой повторяется имя элемента из соответствующего открывающего тега и завершается знаком "больше" (>):

.

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

Таким образом, полностью элемент выглядит следующим образом:

<имя_элемента> содержание элемента

Пустые элементы.

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

Таким образом, тег пустого элемента начинается со знака "меньше" (<) за которым следует имя элемента и завершается знаками "косая черта" (/) после которой идет знак "больше" (>):

<имя_элемента/>.

Символьные данные.

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

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

код_символа_в_Unicode;.

Код символа можно записать и в шестнадцатеричном виде. В этом случае перед ним ставится символ "x":

Шестнадцатеричный_код_символа;.

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

Символы

Именованные подстановки

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

Комментарии.

Если надо вставить в текст документа комментарий либо сделать какой-то фрагмент "невидимым" для программы-анализатора, то его оформляют следующим образом: