Xml программирование. Основы 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 сценариев.

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

На смену HTML был предложен язык гипертекстовой разметки XML (Extensible Markup Language). Этот язык может использоваться для описания грамматики других языков и для контроля правильности составления документов. XML определяет порядок создания тегов, предназначенных для разметки и позволяет легко их расширить. Таким образом появляется возможность определять собственные теги, позволяющие определять данные, содержащиеся в документе. При создании структуры документа, строятся связи между элементами и разметка, необходимая для выполнения операций просмотра, поиска, анализа документа. XML можно использовать в качестве универсального языка запросов к хранилищам информации. Таким образом, XML-документы могут выступать в качестве уникального способа хранения данных, включающего в себя средства для разбора информации и ее представления.

Язык XML привлекает к себе много внимания со стороны разработчиков и пользователей Интернет. Появляются новые языки, созданные на основе XML, возникают Web-сервера, использующие эту технологию для организации хранящейся на них информации. Полные спецификации XML и связанных с ним языков доступны на официальной странице W3C - www.w3.org

Годом рождения XML можно считать 1998 год, когда спецификация языка была утверждена. А началось всё с появления в 1986 году языка SGML. Хотя понятие гипертекста было введено В.Бушем еще в 1945 году и, начиная с 60-х годов, стали появляться приложения, использующие гипертекстовые данные, всплеск активности вокруг этой технологии начался тогда, когда возникла реальная необходимость в механизме объединения множества информационных ресурсов, обеспечения возможности создания, просмотра текста. С помощью SGML можно описывать структурированные данные, организовывать информацию, содержащуюся в документах, представлять эту информацию в некотором стандартизованном формате. Язык SGML предназначен для создания других языков разметки, он определяет допустимый набор тэгов, их атрибуты и внутреннюю структуру документа. Контроль за правильностью использования дескрипторов осуществляется при помощи специального набора правил, называемых DTD- описаниями, которые используются программой клиента при разборе документа. Для каждого класса документов определяется свой набор правил, описывающих грамматику соответствующего языка разметки. Но в виду своей сложности, SGML использовался, в основном, для описания синтаксиса других языков, наиболее известным из которых является HTML.

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

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

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

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

rose,

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

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

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

Что такое XML?

Термин XML обозначает особую разновидность гипертекстовых документов. Чем же плохи обычные текстовые документы и что особенного есть в XML-документах?

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

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

Пример типичного XML-документа

ПРАЙМ-ТАСС

</p><p>Первый серийный самолет "Ту-214" производства КАПО</p><p>совершил первый испытательный полет</p><p>самолета Ту-214, выпущенный в серийном исполнении</p><p>на Казанском авиационно-производственном объединении</p><p>/КАПО/, совершил первый испытательный полет. Об</p><p>этом ПРАЙМ-ТАСС сообщили в Финансовой лизинговой</p><p>компании /ФЛК/.</p><p>Самолет изготовлен для хабаровской авиакомпании</p><p>"Дальавиа" в рамках соглашения, заключенного в 2000</p><p>году между "Дальавиа" и ФЛК, предусматривающего передачу в</p><p>лизинг двух Ту-214, производимых на КАПО. Ту-214</p><p>предназначен для перевозки 164 пассажиров на расстояние</p><p>7,2 тыс км на маршрутах Москва-Хабаровск, а также в Корею</p><p>Общие затраты на подготовку производства самолета составили</p><p>1,2 млрд руб. Из бюджета страны на эти цели было выделено</p><p>всего 1,5 млн руб. Подготовка к производству велась за счет</p><p>средств КАПО и бюджета Татарстана, а также полного</p><p>освобождения предприятия от республиканского и местных</p><p>налогов. Из республиканского бюджета на сертификацию</p><p>самолета было выделено 97 млн руб, а также 275 млн руб</p><p>для запуска механизма лизинга.</p><p>Предварительная стоимость Ту-214 составляет 22-25 млн долл.</p><p></InfoItem></p><p></InfoPacket></p> </td> </tr></table><p>Первые две строчки в этом примере должны присутствовать. Первая строчка означает, что данный документ является XML-документом, а вторая указывает на специальный ресурс <u>http://xml.prime-tass.ru/dtd/UIF.dtd </u>, в котором содержатся правила оформления данного XML-документа). Более подробную информацию по этим "волшебным словам" и не только можно получить на сайте <u>http://www.w3.org </u>.</p><p>Остальные строчки имеют явно выраженную иерархическую структуру, в которой есть один корневой тег <b><InfoPacket> </b>, а остальные теги вложены в него. Все эти теги встечаются парами, например, <b><InfoPacket> </b> и <b></InfoPacket> </b>, или <b><Text> </b> и <b></Text> </b>. Первые - обозначают открывающийся тег, вторые - парный ему закрывающийся. В XML-документе каждый открывающийся тег обязан иметь парный ему закрывающийся.</p><p>Тег <b><InfoPacket> </b> является самым главным тегом - корнем иерархической структуры и предназначен для хранения вложенных в него остальных тегов. Таким образом, он представляет собой своеобразный "конверт" или "обертку" - информационный пакет. В него вложены теги <b><Source> </b>, <b><Time> </b> и <b><InfoItem> </b>. Тег <b><Source> </b> содержит сведения об источнике информации, заключенной в данном информационном пакете ("адрес отправителя"). В теге <b><Time> </b> указано время создания информационного пакета ("время заклеивания конверта"). И, наконец, в теге <b><InfoItem> </b> находится собственно "письмо" - фактическое смысловое наполнение информационного пакета. Что же содержится в этом "письме"? В нем находятся теги <b><Time> </b>, <b><Title> </b> и <b><Text> </b>. В теге <b><Time> </b>, вложенном в тег <b><InfoItem> </b> указано когда наше "письмо" было написано, т.е. время написания содержимого <b><InfoItem> </b>. Не следует путать это время с моментом "заклеивания конверта" (созданием информационного пакета <b><InfoPacket> </b>). Обычно сначала пишут "письмо", а потом "заклеивают конверт" с ним. Кстати, если получателей несколько, то придется "заклеить" несколько "конвертов" с одинаковыми копиями "письма". Или возможна ситуация, когда нужно положить в один конверт несколько "писем" для одного получателя. В этом случае придется поместить внутри тега <b><InfoPacket> </b> несколько тегов <b><InfoItem> </b>. Кроме тега <b><Time> </b> в <b><InfoItem> </b> вложен тег <b><Title> </b>, в котором написан заголовок документа или "письма", если продолжить нашу аналогию. И, наконец, остался тег <b><Text> </b>, который несколько раз встречается внутри тега <b><InfoItem> </b>. Этот тег <b><Text> </b> обозначает просто абзацы документа.</p><p>Осталось только сказать, что означают и для чего нужны записи, типа <b>type="datetime" </b> или <b>type="string" </b> внутри названий тегов <b><Source> </b>, <b><Time> </b> и <b><Title> </b> и почему их нет в тегах <b><Text> </b>. Такого рода записи в XML называются атрибутами тегов. В данном случае мы имеем один атрибут <b>type </b>, который принимает значения <b>"datetime" </b> и <b>"string" </b>. Значения атрибутов в XML всегда заключаются в кавычки. Атрибут <b>type </b> нужен для того, чтобы точно указать как следует интерпретировать последовательность символов, заключенную внутри тега с этим атрибутом. Значение <b>"datetime" </b> означает, что значение тега нужно интерпретировать как дату и время, а значение <b>"string" </b> - как обычную строку. У тега <b><Text> </b> атрибут <b>type </b> отсутствует, т.к. по смыслу этого тега и так ясно, что в этом теге содержится текстовая строка.</p><p>XML - это язык разметки, описывающий целый класс объектов данных, называемых XML- документами. Этот язык используется в качестве средства для описания грамматики других языков и контроля за правильностью составления документов. Т.е. сам по себе XML не содержит никаких тэгов, предназначенных для разметки, он просто определяет порядок их создания. Таким образом, если, например, мы считаем, что для обозначения элемента <i>rose </i>в документе необходимо использовать тэг <i><flower> </i>;, то XML позволяет свободно использовать определяемый нами тэг и мы можем включать в документ фрагменты, подобные следующему:</p><p><flower>rose</flower></p><p>Набор тэгов может быть легко расширен. Если, предположим, мы хотим также указать, что описание цветка должно по смыслу идти внутри описания оранжереи, в которой он цветет, то просто задаем новые тэги и выбираем порядок их следования:</p><p><conservatory></p><p><flower>rose</flower></p><p></conservatory></p><p>Если мы хотим посадить туда еще несколько цветочков, то должны внести следующие изменения:</p><p><conservatory></p><p><flower>rose</flower></p><p><flower>tulip</flower></p><p><flower>cactus</flower></p><p></conservatory></p><p>Как видно, сам процесс создания XML документа очень прост и требует от нас лишь базовых знаний HTML и понимания тех задач, которые мы хотим выполнить, используя XML в качестве языка разметки. Таким образом, у разработчиков появляется уникальная возможность определять собственные команды, позволяющие им наиболее эффективно определять данные, содержащиеся в документе. Автор документа создает его структуру, строит необходимые связи между элементами, используя те команды, которые удовлетворяют его требованиям и добивается такого типа разметки, которое необходимо ему для выполнения операций просмотра, поиска, анализа документа.</p><p>Еще одним из очевидных достоинств XML является возможность использования его в качестве универсального языка запросов к хранилищам информации. Сегодня в глубинах W3C находится на рассмотрении рабочий вариант стандарта XML-QL(или XQL), который, возможно, в будущем составит серьезную конкуренцию SQL. Кроме того, XML-документы могут выступать в качестве уникального способа хранения данных, который включает в себя одновременно средства для разбора информации и представления ее на стороне клиента. В этой области одним из перспективных направлений является интеграция Java и XML - технологий, позволяющая использовать мощь обеих технологий при построении машинно-независимых приложений, использующих, кроме того, универсальный формат данных при обмене информации.</p><p>XML позволяет также осуществлять контроль за корректностью данных, хранящихся в документах, производить проверки иерархических соотношений внутри документа и устанавливать единый стандарт на структуру документов, содержимым которых могут быть самые различные данные. Это означает, что его можно использовать при построении сложных информационных систем, в которых очень важным является вопрос обмена информацией между различными приложениями, работающими в одной системе. Создавая структуру механизма обмена информации в самом начале работы над проектом, менеджер может избавить себя в будущем от многих проблем, связанных с несовместимостью используемых различными компонентами системы форматов данных.</p><p>Также одним из достоинств XML является то, что программы-обработчики XML- документов не сложны и уже сегодня появились и свободно распространяются всевозможные программные продукты, предназначенные для работы с XML-документами. XML поддерживается сегодня в Microsoft Internet Explorer 4/0 и в бэта-версиях IE5. Было заявлено о его поддержке в последующих версиях Netscape Communicator, СУБД Oracle, DB-2, в приложениях MS-Office . Все это дает основания предполагать, что, скорее всего, в ближайшем будущем XML станет основным языком обмена информации для информационных систем, заменив собой, тем самым, HTML. На основе XML уже сегодня созданы такие известные специализированные языки разметки, как SMIL, CDF, MathML, XSL, и список рабочих проектов новых языков, находящихся на рассмотрении W3C, постоянно пополняется.</p> <p>Первые шаги </p><p>Разберем теперь более подробно первый пример. Напомним его текст.</p> <p><?xml version="1.0"encoding="WINDOWS-1251"?> </span><br>< tutorial > <br>< title > "Заметки об XSL"</ title > <br>< author > Леонов Игорь Васильевич</ author > <br></ tutorial > </p> <p>Первая строка информирует браузер о том, что файл имеет формат XML. Атрибут version является обязательным. Атрибут encoding не является обязательным, но если у вас в тексте есть русские буквы, то необходимо вставить этот атрибут, в противном случае XML-файл просто не будет обрабатываться, - вы получите сообщение об ошибке.</p> <p>Следующие строки - это тело XML-файла. Оно состоит из элементов, которые в совокупности образуют древовидную структуру. Элементы идентифицируются тегами и могут быть вложены друг в друга.</p> <p>Элементы могут иметь атрибуты, значения которых тоже могут обрабатываться в соответствии с шаблоном.</p> <p>На верхнем уровне XML-файла всегда находится один элемент. То есть файл вида</p> <p><?xml version="1.0"encoding="WINDOWS-1251"?> </span><br>< tutorial > <br>< title > "Заметки об XSL"</ title > <br>< author > Леонов Игорь Васильевич</ author > <br></ tutorial ><br> < tutorial > <br>< title > "Введение в CSP"</ title > <br>< author > Леонов Игорь Васильевич</ author > <br></ tutorial > </p> <p>не будет обрабатываться браузером. Для преобразования в корректный XML-файл нужно добавить теги элемента верхнего уровня, например</p> <p><?xml version="1.0"encoding="WINDOWS-1251"?> </span><br>< knowledgeDatabase > <br>< tutorial > <br>< title > "Заметки об XSL"</ title > <br>< author > Леонов Игорь Васильевич</ author > <br></ tutorial ><br> < tutorial > <br>< title > "Введение в CSP"</ title > <br>< author > Леонов Игорь Васильевич</ author > <br></ tutorial ><br>< /knowledgeDatabase > </p> <p>Отметим, что имена тегов чувствительны к регистру символов. Подробнее об этом можно прочесть в любой книге по XML - элементам и атрибутам в этих книгах уделяется достаточно большое внимание.</p> <p>Перейдем теперь к шаблону преобразования - к XSL-файлу. Задача XSL-файла - преобразовать дерево XML-файла в другое дерево, которое, например, будет соответствовать формату HTML и может быть изображено на экране браузера с учетом форматирования, выбора шрифтов и т.п.</p> <p>Для того, чтобы браузер выполнил необходимое преобразование, нужно в XML-файле указать ссылку на XSL-файл</p> <p><?xml version="1.0"encoding="WINDOWS-1251"?> </span><br><span><?xml-stylesheet type="text/xsl" href="ex01-1.xsl"?> </p> <p>Рассмотрим теперь текст XSL-файла</p> <p>< xsl:stylesheet version =" 1.0" xmlns:xsl =" <b>http://www.w3.org/TR/WD-xsl </b>"> <br>< xsl:template match =" /"> <br>< p >< strong >< xsl:value-of select =" //title""/> </ strong ></ p > <br>< p >< xsl:value-of select =" //author"/> </ p > <br></ xsl:template > <br></ xsl:stylesheet > </p> <p>Первая строка файла содержит тег элемента xsl:stylesheet . Атрибуты элемента - номер версии и ссылка на пространство имен. Эти атрибуты элемента xsl:stylesheet являются обязательными. В нашем случае пространство имен - это все имена элементов и их атрибутов, которые могут использоваться в XSL-файле. Для XSL-файлов ссылка на пространство имен является стандартной.</p> <p>Заметим, что XSL-файл является одной из разновидностей XML-файлов. Он не содержит пользовательских данных, но формат его тот же самый. Файл содержит элемент верхнего уровня xsl:stylesheet , а далее идет дерево правил преобразования.</p> <p>В настоящем документе мы не будем подробно пояснять, что означает каждый элемент XSL-файла. Мы будем приводить различные примеры и показывать результат в каждом примере. Читатель сможет самостоятельно сопоставить различные элементы XSL-файла и инициируемые этими элементами преобразования исходного XML-файла с пользовательской информацией.</p> <p>В дальнейшем тексты XML- и XSL-файлов мы будем приводить в черно-белом варианте. Вы всегда сможете открыть реальный файл и посмотреть все в цвете. При необходимости закомментируйте ссылку на XSL-файл. Синтаксис комментария следующий - <span><!-- Текст комментария --> </span>. В текст комментария нельзя вставлять символы -- .</p> <p>В первом примере мы посмотрели, как с помощью элемента xsl:value-of можно вывести в HTML-формате содержание элемента (текст, заключенный между тегами). Теперь мы посмотрим, как при помощи того же самого элемента можно вывести значение атрибута элемента.</p> <p>Рассмотрим следующий XML-файл ex02-1.xml</p> <p><?xml version="1.0" encoding="WINDOWS-1251"?><br> <?xml-stylesheet type="text/xsl" href="ex02-1.xsl"?><br> <tutorial><br> <dog caption="Собака: " name="Шарик"><br> <dogInfo weight="18 кг" color="рыжий с черными подпалинами"/><br> </dog><br> </tutorial></p> <p>В этом файле информация хранится не в содержании элементов, а в виде значений атрибутов. Файл ex02-1.xsl имеет вид</p> <p><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl"><br> <xsl:template match="/"><br> <P><B><xsl:value-of select="//dog/@caption"/></B><br> <xsl:value-of select="//dog/@name"/>.<br> <xsl:value-of select="//dogInfo/@weight"/>, <xsl:value-of select="//dogInfo/@color"/>.</P><br> </xsl:template><br> </xsl:stylesheet></p> <p>Обратите внимание на синтаксис ссылки на атрибут элемента - //dog<b>/@ </b>name . Имя элемента и имя атрибута разделены парой символов "/@ ". В остальном синтаксис тот же самый, что и для ссылки на содержание элемента.</p> <p>Результат имеет следующий вид:</p> <p>Собака: <span> Шарик. 18 кг, рыжий с черными подпалинами. </p> <p>Обратим теперь внимание на следующий момент. В XSL-файле мы никак не использовали элемент tutorial . На самом деле можно было использовать полный путь. Перепишем наш XML-файл, увеличив глубину дерева (ex02-2.xml)</p> <p><?xml version="1.0" encoding="WINDOWS-1251"?><br> <?xml-stylesheet type="text/xsl" href="ex02-2.xsl"?><br> <tutorial><br> <enimals><br> <dog caption="Собака: " name="Шарик"><br> <dogInfo weight="18 кг" color="рыжий с черными подпалинами"/><br> </dog><br> </enimals><br> </tutorial></p> <p>XML - очень популярный и гибкий формат в наше время. Каждый программист должен понимать его, это просто must have. Многие технологии завязаны сегодня активно его используют, при чем современные в их числе. </p><h2>Вступление</h2>Здравствуйте, дорогие читатели моей статьи. Сразу хочу сказать, что это только первая статья в моём цикле из трёх статей. Основная цель всего цикла – посвятить каждого читателя в XML и дать, если не полное разъяснение и понимание, то, хотя бы, хороший такой толчок к нему, объяснив основные моменты и вещи. <b>Весь цикл будет для одной номинации – «Внимание к деталям» </b>, а разделение на 3 статьи сделано для того, чтобы вмещаться в лимит символов в постах и разделить большое количество материала на более маленькие порции для большего понимания. Первая статья будет посвящена самому XML и что это такое, а так же одному из способов составления схемы для XML файлов – DTD. Для начала, хотелось бы высказать небольшое предисловие для тех, кто вообще еще не знаком с XML: не нужно пугаться. XML не очень сложный и с ним нужно разобраться любому программисту, так как это очень гибкий, эффективный и популярный формат файлов на сегодняшний день для хранения разнообразной информации, какой вы только захотите. XML используется в Ant, Maven, Spring. Любому программисту нужно знание XML. Теперь, когда вы собрались силами и мотивацией, давайте приступать к изучению. Весь материал я буду пытаться выложить максимально просто, собрав только самое важное и не вдаваться в дебри. <h3>XML</h3>Для более ясного объяснения, правильней будет визуализировать XML примером. < ? xml version= "1.0" encoding= "UTF-8" ? > <span>< company> </span> <span>< name> </span>IT- Heaven< / name> <span>< offices> </span> < office floor= "1" room= "1" > <span>< employees> </span> <span>< employee> </span> <span>< name> </span>Maksim< / name> <span>< job> </span>Middle Software Developer< / job> < / employee> <span>< employee> </span> <span>< name> </span>Ivan< / name> <span>< job> </span>Junior Software Developer< / job> < / employee> <span>< employee> </span> <span>< name> </span>Franklin< / name> <span>< job> </span>Junior Software Developer< / job> < / employee> < / employees> < / office> < office floor= "1" room= "2" > <span>< employees> </span> <span>< employee> </span> <span>< name> </span>Herald< / name> <span>< job> </span>Middle Software Developer< / job> < / employee> <span>< employee> </span> <span>< name> </span>Adam< / name> <span>< job> </span>Middle Software Developer< / job> < / employee> <span>< employee> </span> <span>< name> </span>Leroy< / name> <span>< job> </span>Junior Software Developer< / job> < / employee> < / employees> < / office> < / offices> < / company> HTML и XML похожи синтаксисом, так как у них общий родитель – SGML. Однако, в HTML есть только фиксированные теги конкретного стандарта, в то время, как в XML вы можете создавать свои собственные теги, атрибуты и, в целом, делать все, что захотите, чтобы хранить данные так, как вам будет удобно. По сути, XML файлы может прочитать любой человек, знающий английский язык. Изобразить данный пример можно с помощью дерева. <b>Корень дерева </b> – Company. Он же – корневой (рут) элемент, от которого идут все остальные элементы. <i>В каждом XML файле может быть только один рут элемент. </i> Он должен объявляться после <i>декларации xml файла </i> (первая строчка в примере) и вмещать в себе все другие элементы. Немного о декларации: она <i>обязательная </i> и нужна для идентификации документа как XML. У неё есть три псевдо-атрибуты (специальные предопределенные атрибуты): version (по стандарту 1.0), encoding (кодировка) и standalone (автономность: если yes и к документу подключаются внешние схемы, то будет ошибка, по умолчанию - no). <b>Элементы </b> – это сущности, которые хранят данные с помощью других элементов и атрибутов. <b>Атрибуты </b> – это дополнительная информация об элементе, которая указывается при добавлении элемента. Если перевести объяснение на ООП-поле, то можно привести такой пример: у нас есть машина, у каждой машины есть характеристики (цвет, вместимость, марка и другое) – это атрибуты, и есть сущности, которые внутри машины: двери, окна, двигатель, руль – это другие элементы. Хранить свойства можно как и отдельными элементами, так и атрибутами в зависимости от вашего желания. Как никак, XML – крайне гибкий формат хранения информации про что-либо. После объяснений, нам достаточно разобрать пример выше, чтобы все встало на свои места. В примере мы описали простую структуру компании: есть компания, у которой есть имя и офисы, а в офисах есть сотрудники. Элементы Employees и Offices – элементы-обертки – они служат для того, чтобы собрать в себе элементы одного вида, по сути, соединив их в одно множество для удобства их обработки. Отдельного внимания заслуживают floor и room. Это – атрибуты офиса (этаж и номер), другими словами – его свойства. Если бы у нас был элемент «картинка», то можно было бы передавать её размеры. Вы можете заметить, что у компании нет атрибута name, но есть элемент name. Просто вы можете описывать структуры так, как захотите. Никто не обязывает вас все свойства элементов записывать только в атрибуты, вы можете использовать и просто элементы и записывать внутри них какие-то данные. Например, мы можем записывать имя и должность наших работников, как атрибуты: < ? xml version= "1.0" encoding= "UTF-8" ? > <span>< company> </span> <span>< name> </span>IT- Heaven< / name> <span>< offices> </span> < office floor= "1" room= "1" > <span>< employees> </span> < employee name= "Maksim" job= "Middle Software Developer" > < / employee> < employee name= "Ivan" job= "Junior Software Developer" > < / employee> < employee name= "Franklin" job= "Junior Software Developer" > < / employee> < / employees> < / office> < office floor= "1" room= "2" > <span>< employees> </span> < employee name= "Herald" job= "Middle Software Developer" > < / employee> < employee name= "Adam" job= "Middle Software Developer" > < / employee> < employee name= "Leroy" job= "Junior Software Developer" > < / employee> < / employees> < / office> < / offices> < / company> Как вы видите, теперь имя и должность каждого работника – это его атрибуты. И можно заметить, что внутри сущности (тега) employee ничего нет, все элементы employee – пустые. Тогда можно сделать employee пустым элементом – закрыть его сразу после объявления атрибутов. Это делается довольно просто, достаточно просто поставить слэш: < ? xml version= "1.0" encoding= "UTF-8" ? > <span>< company> </span> <span>< name> </span>IT- Heaven< / name> <span>< offices> </span> < office floor= "1" room= "1" > <span>< employees> </span> < employee name= "Maksim" job= "Middle Software Developer" / > < employee name= "Ivan" job= "Junior Software Developer" / > < employee name= "Franklin" job= "Junior Software Developer" / > < / employees> < / office> < office floor= "1" room= "2" > <span>< employees> </span> < employee name= "Herald" job= "Middle Software Developer" / > < employee name= "Adam" job= "Middle Software Developer" / > < employee name= "Leroy" job= "Junior Software Developer" / > < / employees> < / office> < / offices> < / company> Как вы можете заметить, закрыв пустые элементы мы сохранили всю целостность информации и намного сократили запись, сделав информацию более сжатой и читабельной. Для того, чтобы добавить <i>комментарий </i> (текст, который будет пропускаться при парсинге файла) в XML, есть следующий синтаксис: < ! -- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка. -- > И последняя конструкция – это <i><u>CDATA </u> </i>, означает «символьные данные». Благодаря данной конструкции, можно записывать текст, который не будет интерпретироваться как разметка XML. Это полезно, если внутри XML файла у вас есть сущность, которая хранит в информации XML разметку. Пример: < ? xml version= "1.0" encoding= "UTF-8" ? > <span>< bean> </span> <span>< information> </span> < ! [ CDATA[ <span>< name> </span>Ivan< / name> <span>< age> </span>26 < / age> ] ] > < / information> < / bean> Особенность XML в том, что вы можете расширять его так, как захотите: использовать свои элементы, свои атрибуты и структурировать его по своему желанию. Вы можете использовать для хранения данных как атрибуты, так и элементы (как это было показано в примере ранее). Однако нужно понимать, что придумывать свои элементы и атрибуты на ходу и как вы захотите вы можете, но что, если вы будете работать на проекте, где другой программист захочет перенести элемент name в атрибуты, а у вас вся логика программы написана так, чтобы name был элементом? Как же создать свои собственные правила того, какие элементы должны быть, какие атрибуты у них есть и другие вещи, чтобы можно было проводить валидацию XML файлов и быть уверенным, что правила станут стандартными в вашем проекте и никто их нарушать не будет? Для того, чтобы написать все правила вашей собственной XML разметки, есть специальные средства. Самые известные: DTD и XML Schema. В этой статье будет только про первое. <h2>DTD</h2>DTD создан для того, чтобы описывать типы документов. DTD уже устаревает и сейчас от него активно отказываются в XML, однако еще много XML файлов используют именно DTD и, в целом, его полезно понимать. <b>DTD – это технология валидации XML-документов </b>. DTD объявляет конкретные правила для типа документа: его элементы, какие элементы могут быть внутри элемента, атрибуты, обязательные они или нет, количество их повторений, а так же сущности (Entity). По аналогии с XML, для более ясного объяснения DTD можно визуализировать примером. < ! -- Объявление возможных элементов -- > < ! ELEMENT employee EMPTY> < ! ELEMENT employees (employee+ ) > < ! ELEMENT office (employees) > < ! ELEMENT offices (office+ ) > < ! ELEMENT name (#PCDATA) > < ! ELEMENT company (name, offices) > < ! -- Добавление атрибутов для элементов employee и office -- > < ! ATTLIST employee name CDATA #REQUIRED job CDATA #REQUIRED > < ! ATTLIST office floor CDATA #REQUIRED room CDATA #REQUIRED > < ! -- Добавление сущностей -- > < ! ENTITY M "Maksim" > < ! ENTITY I "Ivan" > < ! ENTITY F "Franklin" > Вот такой вот простой пример у нас есть. В данном примере, мы объявили всю нашу иерархию из XML примера: работник, работники, офис, офисы, имя, компания. Для создания DTD файлов служат 3 основные конструкции, чтобы описывать любые XML файлы: ELEMENT (для описания элементов), ATTLIST (для описания атрибутов для элементов) и ENTITY (для подстановки текста сокращенными формами). <b>ELEMENT </b> Служит для описания элемента. Элементы, которые можно использовать внутри описанного элемента, перечисляются в скобках в виде списка. Можно использовать квантификаторы для указания количества (они аналогичны с квантификаторами из регулярных выражений): + значит 1+ * значит 0+ ? значит 0 ИЛИ 1 <b>Если квантификаторов не было добавлено, то считается, что должен быть только 1 элемент. </b> Если бы нам нужен был один из группы элементов, можно было бы написать так: < ! ELEMENT company ((name | offices) ) > Тогда выбирался бы один из элементов: name или offices, но если бы внутри company было сразу два их, то валидация бы не проходила. Так же можно заметить, что в employee есть слово EMPTY – это значит, что элемент должен быть пустым. Есть еще ANY – любые элементы. #PCDATA – текстовые данные. <b>ATTLIST </b> Служит для добавления атрибутов к элементам. После ATTLIST следует название нужного элемента, а после словарь вида «название атрибута – тип атрибута», а в конце можно добавить #IMPLIED (не обязателен) или #REQUIRED (обязателен). CDATA – текстовые данные. Есть и другие типы, однако все они строчные. <b>ENTITY </b> ENTITY служит для объявления сокращений и текста, который будет на них подстваляться. По сути, мы просто сможем использовать в XML вместо полного текста просто название сущности со знаком & перед и; после. Например: чтобы отличать разметку в HTML и просто символы, левую угловую скобочку часто экранируют с помощью lt; , только нужно еще выставить & перед lt. Тогда мы будем использовать не разметку, а просто символ < . Как вы можете видеть, все довольно просто: объявляете элементы, объясняете, какие элементы объявленные элементы способны содержать, добавление атрибутов этим элементам и, по желанию, можете добавить сущности, чтобы сокращать какие-то записи. И тут вы должны были бы спросить: а как использовать наши правила в нашем XML файле? Ведь мы просто объявили правила, но мы не использовали их в XML. <b>Есть два способа использовать их в XML: </b> <i>1. Внедрение - написание DTD правил внутри самого XML файла, достаточно просто написать корневой элемент после ключевого слова DOCTYPE и заключить наш DTD файл внутри квадратных скобочек. </i> < ? xml version= "1.0" encoding= "UTF-8" ? > < ! DOCTYPE company [ < ! -- Объявление возможных элементов -- > < ! ELEMENT employee EMPTY> < ! ELEMENT employees (employee+ ) > < ! ELEMENT office (employees) > < ! ELEMENT offices (office+ ) > < ! ELEMENT name (#PCDATA) > < ! ELEMENT company (name, offices) > < ! -- Добавление атрибутов для элементов employee и office -- > < ! ATTLIST employee name CDATA #REQUIRED job CDATA #REQUIRED > < ! ATTLIST office floor CDATA #REQUIRED room CDATA #REQUIRED > < ! -- Добавление сущностей -- > < ! ENTITY M "Maksim" > < ! ENTITY I "Ivan" > < ! ENTITY F "Franklin" > ] > <span>< company> </span> <span>< name> </span>IT- Heaven< / name> < ! -- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка. -- > <span>< offices> </span> < office floor= "1" room= "1" > <span>< employees> </span> < employee name= "&M;" job= "Middle Software Developer" / > < employee name= "&I;" job= "Junior Software Developer" / > < employee name= "&F;" job= "Junior Software Developer" / > < / employees> < / office> < office floor= "1" room= "2" > <span>< employees> </span> < employee name= "Herald" job= "Middle Software Developer" / > < employee name= "Adam" job= "Middle Software Developer" / > < employee name= "Leroy" job= "Junior Software Developer" / > < / employees> < / office> < / offices> < / company> <i>2. Импорт - мы записываем все наши правила в отдельный DTD файл, после чего в XML файле используем DOCTYPE-конструкцию из первого способа, только вместо квадратных скобочек нужно написать SYSTEM и указать абсолютный или относительный до текущего местоположения файла путь. </i> < ? xml version= "1.0" encoding= "UTF-8" ? > < ! DOCTYPE company SYSTEM "dtd_example1.dtd" > <span>< company> </span> <span>< name> </span>IT- Heaven< / name> < ! -- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка. -- > <span>< offices> </span> < office floor= "1" room= "1" > <span>< employees> </span> < employee name= "&M;" job= "Middle Software Developer" / > < employee name= "&I;" job= "Junior Software Developer" / > < employee name= "&F;" job= "Junior Software Developer" / > < / employees> < / office> < office floor= "1" room= "2" > <span>< employees> </span> < employee name= "Herald" job= "Middle Software Developer" / > < employee name= "Adam" job= "Middle Software Developer" / > < employee name= "Leroy" job= "Junior Software Developer" / > < / employees> < / office> < / offices> < / company> Так же можно использовать ключевое слово PUBLIC вместо SYSTEM, однако оно вряд ли вам пригодится. Если интересно, то почитать про него (и про SYSTEM тоже) можно подробно тут: ссылочка . Теперь мы не можем использовать другие элементы без их объявления в DTD, а весь XML подчиняется нашим правилам. Можете попробовать записать данный код в IntelliJ IDEA в отдельный файл с расширением.xml и попробовать добавить какие-то новые элементы или удалить элемент из нашего DTD и заметите, как IDE будет указывать вам на ошибку. Однако, у DTD есть свои минусы: <ul><li>У него свой собственный синтаксис, отличный от синтаксиса xml.</li> <li>В DTD нет проверки типов данных, а содержать он может только строки.</li> <li>В DTD нет пространства имён.</li> </ul>О проблеме собственного синтаксиса: вы должны разбираться в двух синтаксисах сразу: в XML и в DTD синтаксисе. Они разные и это может заставлять вас путаться. Так же, из-за этого же сложней отслеживать ошибки в огромных XML файлах в соединении с такими же DTD схемами. Если у вас что-то не заработало, приходится проверять огромное количество текста разных синтаксисов. Это как читать одновременно две книжки: на русском и английском. И если знание у одного языка у вас хуже, то понимать текст будет так же сложней. О проблеме проверки типов данных: у атрибутов в DTD действительно есть разные типы, но все они, по сути своей, являются строковыми представлениями чего-либо, списками или ссылками. Однако, вы не можете требовать только числа, и, тем более, позитивные или негативные. А про объектные типы можете вообще забыть. Последняя проблема будет обсуждаться уже в следующей статье, которая будет посвящена пространствам имён и XML схемам, так как обсуждение её тут бессмысленно. Спасибо всем за внимание, я проделал большую работу и продолжаю её проделывать, чтобы вовремя закончить весь цикл статей. По сути, мне осталось разобраться с XML схемами и придумать их объяснение более ясными словами, чтобы закончить 2-ю статью. Её половина уже сделана, так что можете ожидать её в ближайшее время. Последняя статья будет полностью посвящена работе с XML файлами средствами Java. Удачи всем и успехов в программировании:) Следующая статья: <p>Вероятно, вы слышали о языке XML и вам известно множество причин, по которым его необходимо использовать в вашей организации. Но что именно представляет собой XML? В этой статье объясняется, что такое XML и как он работает.</p> <h2>В этой статье</h2> <h2>Пометки, разметка и теги</h2> <p>Чтобы понять XML, полезно вспомнить о том, как можно помечать данные. Документы создавались людьми в течение многих столетий, и на протяжении всего этого времени люди делали в них пометки. Например, учителя часто делают пометки в работах учащихся, указывая на необходимость переместить абзацы, сделать предложение более ясным, исправить орфографические ошибки и т. д. Посредством пометок в документе можно определить структуру, смысл и внешний вид информации. Если вы когда-либо использовали исправления в Microsoft Office Word, то вы знакомы с компьютеризованной формой добавления пометок.</p> <p>В мире информационных технологий термин "пометка" превратился в термин "разметка". При разметке используются коды, называемые тегами (или иногда токенами), для определения структуры, визуального оформления и - в случае XML - смысла данных.</p> <p>Текст этой статьи в формате HTML является хорошим примером применения компьютерной разметки. Если в Microsoft Internet Explorer щелкнуть эту страницу правой кнопкой мыши и выбрать команду <b>Просмотр HTML-кода </b>, вы увидите читаемый текст и теги HTML, например <p>И <h2> . В HTML- и XML-документах теги легко распознать, поскольку они заключены в угловые скобки. В исходном тексте этой статьи теги HTML выполняют множество функций, например определяют начало и конец каждого абзаца (<p> ... </p> ) и местоположение рисунков.</p> <h2>Отличительные черты XML</h2> <p>Документы в форматах HTML и XML содержат данные, заключенные в теги, но на этом сходство между двумя языками заканчивается. В формате HTML теги определяют оформление данных - расположение заголовков, начало абзаца и т. д. В формате XML теги определяют структуру и смысл данных - то, чем они являются.</p> <p>При описании структуры и смысла данных становится возможным их повторное использование несколькими способами. Например, если у вас есть блок данных о продажах, каждый элемент в котором четко определен, то можно загрузить в отчет о продажах только необходимые элементы, а другие данные передать в бухгалтерскую базу данных. Иначе говоря, можно использовать одну систему для генерации данных и пометки их тегами в формате XML, а затем обрабатывать эти данные в любых других системах вне зависимости от клиентской платформы или операционной системы. Благодаря такой совместимости XML является основой одной из самых популярных технологий обмена данными.</p> <p>Учитывайте при работе следующее:</p> <ul><p>HTML нельзя использовать вместо XML. Однако XML-данные можно заключать в HTML-теги и отображать на веб-страницах.</p> <p>Возможности HTML ограничены предопределенным набором тегов, общим для всех пользователей.</p> <p>Правила XML разрешают создавать любые теги, требуемые для описания данных и их структуры. Допустим, что вам необходимо хранить и совместно использовать сведения о домашних животных. Для этого можно создать следующий XML-код:</p><p> <?xml version="1.0"?> <CAT> <NAME>Izzy</NAME> <BREED>Siamese</BREED> <AGE>6</AGE> <ALTERED>yes</ALTERED> <DECLAWED>no</DECLAWED> <LICENSE>Izz138bod</LICENSE> <OWNER>Colin Wilcox</OWNER> </CAT></p> </ul><p>Как видно, по тегам XML понятно, какие данные вы просматриваете. Например, ясно, что это данные о коте, и можно легко определить его имя, возраст и т. д. Благодаря возможности создавать теги, определяющие почти любую структуру данных, язык XML является расширяемым.</p> <p>Но не путайте теги в данном примере с тегами в HTML-файле. Например, если приведенный выше текст в формате XML вставить в HTML-файл и открыть его в браузере, то результаты будут выглядеть следующим образом:</p> <p>Izzy Siamese 6 yes no Izz138bod Colin Wilcox </p> <p>Веб-браузер проигнорирует теги XML и отобразит только данные.</p> <h2>Правильно сформированные данные</h2> <p>Вероятно, вы слышали, как кто-то из ИТ-специалистов говорил о "правильно сформированном" XML-файле. Правильно сформированный XML-файл должен соответствовать очень строгим правилам. Если он не соответствует этим правилам, XML не работает. Например, в предыдущем примере каждый открывающий тег имеет соответствующий закрывающий тег, поэтому в данном примере соблюдено одно из правил правильно сформированного XML-файла. Если же удалить из файла какой-либо тег и попытаться открыть его в одной из программ Office, то появится сообщение об ошибке и использовать такой файл будет невозможно.</p> <p>Правила создания правильно сформированного XML-файла знать необязательно (хотя понять их нетрудно), но следует помнить, что использовать в других приложениях и системах можно лишь правильно сформированные XML-данные. Если XML-файл не открывается, то он, вероятно, неправильно сформирован.</p> <p>XML не зависит от платформы, и это значит, что любая программа, созданная для использования XML, может читать и обрабатывать XML-данные независимо от оборудования или операционной системы. Например, при применении правильных тегов XML можно использовать программу на настольном компьютере для открытия и обработки данных, полученных с мейнфрейма. И, независимо от того, кто создал XML-данные, с ними данными можно работать в различных приложениях Office. Благодаря своей совместимости XML стал одной из самых популярных технологий обмена данными между базами данных и пользовательскими компьютерами.</p> <p>В дополнение к правильно сформированным данным с тегами XML-системы обычно используют два дополнительных компонента: схемы и преобразования. В следующих разделах описывается, как они работают.</p> <h2>Схемы</h2> <p>Не пугайтесь термина "схема". Схема - это просто XML-файл, содержащий правила для содержимого XML-файла данных. Файлы схем обычно имеют расширение XSD, тогда как для файлов данных XML используется расширение XML.</p> <p>Схемы позволяют программам проверять данные. Они формируют структуру данных и обеспечивают их понятность создателю и другим людям. Например, если пользователь вводит недопустимые данные, например текст в поле даты, программа может предложить ему исправить их. Если данные в XML-файле соответствуют правилам в схеме, для их чтения, интерпретации и обработки можно использовать любую программу, поддерживающую XML. Например, как показано на приведенном ниже рисунке, Excel может проверять данные <CAT> на соответствие схеме CAT.</p> <p><img src='https://i1.wp.com/support.content.office.net/ru-ru/media/a12a0283-2489-4cbe-b9b0-111d55a4b804.gif' height="293" width="331" loading=lazy></p> <p>Схемы могут быть сложными, и в данной статье невозможно объяснить, как их создавать. (Кроме того, скорее всего, в вашей организации есть ИТ-специалисты, которые знают, как это делать.) Однако полезно знать, как выглядят схемы. Следующая схема определяет правила для набора тегов <CAT> ... </CAT>:</p><p> <xsd:element name="CAT"> <xsd:complexType> <xsd:sequence> <xsd:element name="NAME" type="xsd:string"/> <xsd:element name="BREED" type="xsd:string"/> <xsd:element name="AGE" type="xsd:positiveInteger"/> <xsd:element name="ALTERED" type="xsd:boolean"/> <xsd:element name="DECLAWED" type="xsd:boolean"/> <xsd:element name="LICENSE" type="xsd:string"/> <xsd:element name="OWNER" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </p><p>Не беспокойтесь, если в примере не все понятно. Просто обратите внимание на следующее:</p> <ul><p>Строковые элементы в приведенном примере схемы называются объявлениями. Если бы требовались дополнительные сведения о животном, например его цвет или особые признаки, то специалисты отдела ИТ добавили бы к схеме соответствующие объявления. Систему XML можно изменять по мере развития потребностей бизнеса.</p> <p>Объявления являются мощным средством управления структурой данных. Например, объявление <xsd:sequence> означает, что теги, такие как <NAME> и <BREED> , должны следовать в указанном выше порядке. С помощью объявлений можно также проверять типы данных, вводимых пользователем. Например, приведенная выше схема требует ввода положительного целого числа для возраста кота и логических значений (TRUE или FALSE) для тегов ALTERED и DECLAWED.</p> <p>Если данные в XML-файле соответствуют правилам схемы, то такие данные называют допустимыми. Процесс контроля соответствия XML-файла данных правилам схемы называют (достаточно логично) проверкой. Большим преимуществом использования схем является возможность предотвратить с их помощью повреждение данных. Схемы также облегчают поиск поврежденных данных, поскольку при возникновении такой проблемы обработка XML-файла останавливается.</p> </ul><h2>Преобразования</h2> <p>Как говорилось выше, XML также позволяет эффективно использовать и повторно использовать данные. Механизм повторного использования данных называется преобразованием XSLT (или просто преобразованием).</p> <p>Вы (или ваш ИТ-отдел) можете также использовать преобразования для обмена данными между серверными системами, например между базами данных. Предположим, что в базе данных А данные о продажах хранятся в таблице, удобной для отдела продаж. В базе данных Б хранятся данные о доходах и расходах в таблице, специально разработанной для бухгалтерии. База данных Б может использовать преобразование, чтобы принять данные от базы данных A и поместить их в соответствующие таблицы.</p> <p>Сочетание файла данных, схемы и преобразования образует базовую систему XML. На следующем рисунке показана работа подобных систем. Файл данных проверяется на соответствие правилам схемы, а затем передается любым пригодным способом для преобразования. В этом случае преобразование размещает данные в таблице на веб-странице.</p> <p><img src='https://i2.wp.com/support.content.office.net/ru-ru/media/9d561e0d-c053-4df3-bf7d-8eb9ea42bb9f.gif' height="420" width="328" loading=lazy></p> <p>В следующем примере представлено преобразование, которое загружает данные <CAT> в таблицу на веб-странице. Суть примера не в том, чтобы объяснить, как создавать преобразования, а в том, чтобы показать одну из форм, которую они могут принимать.</p><p> <?xml version="1.0"?> <xsl:stylesheet version="1.0"> <TABLE> <TR> <TH>Name</TH> <TH>Breed</TH> <TH>Age</TH> <TH>Altered</TH> <TH>Declawed</TH> <TH>License</TH> <TH>Owner</TH> </TR> <xsl:for-each select="CAT"> <TR ALIGN="LEFT" VALIGN="TOP"> <TD> <xsl:value-of select="NAME"/> </TD> <TD> <xsl:value-of select="BREED"/> </TD> <TD> <xsl:value-of select="AGE"/> </TD> <TD> <xsl:value-of select="ALTERED"/> </TD> <TD> <xsl:value-of select="DECLAWED"/> </TD> <TD> <xsl:value-of select="LICENSE"/> </TD> <TD> <xsl:value-of select="OWNER"/> </TD> </TR> </xsl:for-each> </TABLE> </p><p>В этом примере показано, как может выглядеть текст одного из типов преобразования, но помните, что вы можете ограничиться четким описанием того, что вам нужно от данных, и это описание может быть сделано на вашем родном языке. Например, вы можете пойти в отдел ИТ и сказать, что необходимо напечатать данные о продажах для конкретных регионов за последние два года, и что эти сведения должны выглядеть так-то и так-то. После этого специалисты отдела могут написать (или изменить) преобразование, чтобы выполнить вашу просьбу.</p> <p>Корпорация Майкрософт и растущее число других компаний создают преобразования для различных задач, что делает использование XML еще более удобным. В будущем, скорее всего, можно будет скачать преобразование, отвечающее вашим потребностям без дополнительной настройки или с небольшими изменениями. Это означает, что со временем использование XML будет требовать все меньше и меньше затрат.</p> <h2>XML в системе Microsoft Office</h2> <p>Профессиональные выпуски Office обеспечивают расширенную поддержку XML. Начиная с 2007 Microsoft Office System, Microsoft Office использует форматы файлов на основе XML, например DOCX, XLSX и PPTX. Так как XML хранит данные в текстовом формате, а не в собственном двоичном формате, клиенты могут определять собственные схемы и использовать ваши данные разными способами, без необходимости платить ройалтиес. Дополнительные сведения о новых форматах см. в статье форматы Open XML и расширения имен файлов . Ниже приведены другие преимущества.</p> <i> </i><p>Все это замечательно, но что делать, если у вас есть XML-данные без схемы? Это зависит от того, какую программу Office вы используете. Например, при открытии XML-файла без схемы в приложении Excel оно предполагает, что схема существует, и дает возможность загрузить данные в XML-таблицу. Вы можете использовать XML-списки и таблицы для сортировки, фильтрации и вычисления данных.</p> <h3>Включение средств XML в Office</h3> <p>По умолчанию вкладка "Разработчик" не отображается. Ее необходимо добавить на ленту для использования команд XML в Office.</p> <i> </i> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> <div style="font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both"></div> </div> </article> <style> .VashAdaptTest { width: 100%; height: 300px; } @media(min-width: 500px) { .VashAdaptTest { width: 100%; height: 300px; } } @media(min-width: 800px) { .VashAdaptTest { width: 100%; height: 300px; } } </style> <div id="share_button"> <script type="text/javascript" src="//yandex.st/share/share.js" charset="utf-8"></script> <div class="yashare-auto-init" data-yashareL10n="ru" data-yashareType="button" data-yashareQuickServices="yaru,vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus"></div> </div> <div class='yarpp-related'> <div class="title">Похожие статьи</div> <ul class="related-items"> <li> <img src="/uploads/ed2b1a9e6ad84f6d497c8b0f38b86f90.jpg" width="120" height="120" alt="Первые действия при появлении ошибки «Устройство USB не опознано" / loading=lazy> <a href="/yusb-ne-opoznano-chto-delat-pervye-deistviya-pri-poyavlenii/">Первые действия при появлении ошибки «Устройство USB не опознано</a> </li> <li> <img src="/uploads/ce49988f17ebc16b6b63b6bd47a23c7f.jpg" width="120" height="120" alt="Недостаточно патриотичный" / loading=lazy> <a href="/aleksandr-bon-vedushchii-biografiya-nedostatochno-patriotichnyi-radio-maximum/">Недостаточно патриотичный</a> </li> <li> <img src="/uploads/653067dd6cbb221291259a8a48964503.jpg" width="120" height="120" alt="Компьютер не видит флешку через USB или неопознанное устройство" / loading=lazy> <a href="/komp-ne-raspoznaet-usb-ustroistvo-kompyuter-ne-vidit-fleshku-cherez-usb-ili/">Компьютер не видит флешку через USB или неопознанное устройство</a> </li> <li> <img src="/uploads/ffb85025854ebd2c2769fc7f30b7c382.jpg" width="120" height="120" alt="Использование эквалайзера Windows Как настроит эквалайзер на windows 7" / loading=lazy> <a href="/skachat-na-kompyuter-horoshii-ekvalaizer-muzyki-na-russkom-yazyke/">Использование эквалайзера Windows Как настроит эквалайзер на windows 7</a> </li> </ul> </div> </div> </div> <aside id="sidebar"> <div id="sidebar_wrap"> <div class="section" id="category_block"> <div class="section_title">РУБРИКИ САЙТА:</div> <ul id="cats"> <li class="cat-item cat-item-17"><a href="/category/internet/">Интернет</a></li> <li class="cat-item cat-item-17"><a href="/category/programs/">Программы</a></li> <li class="cat-item cat-item-17"><a href="/category/instructions/">Инструкции</a></li> <li class="cat-item cat-item-17"><a href="/category/browsers/">Браузеры</a></li> <li class="cat-item cat-item-17"><a href="/category/windows-10/">Windows 10</a></li> <li class="cat-item cat-item-17"><a href="/category/android/">Android</a></li> <li class="cat-item cat-item-17"><a href="/category/ios/">Ios</a></li> <li class="cat-item cat-item-17"><a href="/category/communication/">Связь</a></li> </ul> </div> <div class="section section-comments"> <div class="section_title">Последние статьи:</div> <div class="last-comments"> <div class="last-comments__item"> <div class="last-comments__item-box"> <div class="last-comments-item__date">2024-03-06 02:07:19</div> <div class="last-comments__item-text">Microsoft.</div><a href="/razreshenie-ekrana-htc-sensation-xe-htc-sensation-xe---tehnicheskie-harakteristiki/" class="last-comments__item-link" title="HTC Sensation XE - Технические характеристики">HTC Sensation XE - Технические характеристики</a> </div> </div> <div class="last-comments__item"> <div class="last-comments__item-box"> <div class="last-comments-item__date">2024-02-29 02:09:14</div> <div class="last-comments__item-text">Ios.</div><a href="/kak-eto-sdelano-kak-eto-rabotaet-kak-eto-ustroeno-kak-eto-sdelano-kak/" class="last-comments__item-link" title="Как это сделано, как это работает, как это устроено Видео: как работает Picaso Builder">Как это сделано, как это работает, как это устроено Видео: как работает Picaso Builder</a> </div> </div> <div class="last-comments__item"> <div class="last-comments__item-box"> <div class="last-comments-item__date">2024-02-29 02:09:14</div> <div class="last-comments__item-text">Word.</div><a href="/ne-rabotaet-internet-dns-pochemu-dns-server-nedostupen-kak/" class="last-comments__item-link" title="Почему DNS-сервер недоступен: как решить проблему">Почему DNS-сервер недоступен: как решить проблему</a> </div> </div> <div class="last-comments__item"> <div class="last-comments__item-box"> <div class="last-comments-item__date">2024-02-25 02:16:19</div> <div class="last-comments__item-text">Интернет.</div><a href="/posobie-po-rabote-s-kompyuterom-chtoby-nauchitsya-s-nulya/" class="last-comments__item-link" title="Чтобы научиться с нуля работатьна компьютере и ноутбуке, нужны:хороший самоучитель и ваше желание">Чтобы научиться с нуля работатьна компьютере и ноутбуке, нужны:хороший самоучитель и ваше желание</a> </div> </div> <div class="last-comments__item"> <div class="last-comments__item-box"> <div class="last-comments-item__date">2024-02-10 02:54:49</div> <div class="last-comments__item-text">Microsoft.</div><a href="/pgp-na-strazhe-elektronnoi-korrespondencii/" class="last-comments__item-link" title="PGP на страже электронной корреспонденции">PGP на страже электронной корреспонденции</a> </div> </div> </div> </div> <div class="section widget_text" id="text-4"> <div class="textwidget"> </div> </div> </div> </aside> </div> <footer id="footer"> <div id="footer_logo"> <div id="footer_logomob"><img src="/img/logo.png" alt="Все о современной технике. Поломки. Техника. Интернет. Ошибки. Windows" loading=lazy></div> </div> <div id="footer_copyright"> <p>© lab-music.ru, Все о современной технике. Поломки. Техника. Интернет. Ошибки. Windows </p> <p></p> </div> <nav id="footer_nav"> <ul> <li><a href="/sitemap.xml">Карта сайта </a></li> </ul> </nav> </footer> </div> </div> </body> </html>