XML
XML (англ. eXtensible Markup Language) расширяемый язык разметки | |
---|---|
Расширение |
..xml |
MIME-тип | application/xml, text/xml (устаревший) |
Разработчик | World Wide Web Consortium |
Опубликован | 1999 |
Тип формата | язык разметки, формат файла, формат сериализации данных[вд] и research tool[вд] |
Расширен из | SGML |
Развит в | XHTML, SVG, XSL, XSL-FO, XSLT и др. |
Сайт | w3.org/XML (англ.) |
Медиафайлы на Викискладе |
XML (англ. eXtensible Markup Language — расширяемый язык разметки; произносится [экс-эм-э́л]) — рекомендованный Консорциумом Всемирной паутины язык разметки, фактически представляющий собой свод общих синтаксических правил. XML — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML), иногда называемых словарями. XML является упрощённым подмножеством языка SGML.
Целью создания XML было обеспечение совместимости при передаче структурированных данных между разными системами обработки информации, особенно при передаче таких данных через Интернет. Словари, основанные на XML (например, RDF, RSS, MathML, XHTML, SVG), сами по себе формально описаны, что позволяет программно изменять и проверять документы на основе этих словарей, не зная их семантики, то есть не зная смыслового значения элементов. Важной особенностью XML также является применение так называемых пространств имён (англ. namespace).
Правильно построенные и действительные документы XML
Стандартом определены два уровня правильности документа XML:
- Правильно построенный (Well-formed). Правильно построенный документ соответствует всем правилам синтаксиса XML. И если, например, начальный тег не имеет соответствующего ему конечного тега, то это неправильно построеный документ XML. Документ, который не правильно построен, не может считаться документом XML, XML процессор (парсер) не должен обрабатывать его обычным образом, и обязан классифицировать ситуацию как фатальная ошибка.
- Действительный (Valid). Действительный документ дополнительно соответствует некоторым семантическим правилам. Это более строгая дополнительная проверка корректности документа на соответствие заранее определённым, но уже внешним правилам, в целях минимизации количества ошибок, например, структуры и состава данного, конкретного документа или семейства документов. Эти правила могут быть разработаны как самим пользователем, так и стороними разработчиками, например, разработчиками словарей или стандартов обмена данными. Обычно такие правила хранятся в специальных файлах — схемах, где самым подробным образом описана структура документа, все допустимые названия элементов, атрибутов и многое другое. И если документ, например, содержит не определённое заранее в схемах название элемента, то XML-документ считается недействительным, проверяющий XML процессор (валидатор) при проверке на соответствие правилам и схемам, обязан (по выбору пользователя) сообщить об ошибке.
Данные два понятия не имеют достаточно устоявшегося стандартизированного перевода на русский язык, особенно понятие valid (англ.), которое можно так же перевести, как имеющий силу, правомерный, надёжный, или даже провереный на соответствие правилам, стандартам, законам. Некоторые XML-программисты применяют в обиходе устоявшуюся кальку «Валидный».
Синтаксис XML
В этом разделе рассматривается лишь правильное построение документов XML, то есть их синтаксис.
XML — это иерархическая структура, предназначенная для хранения любого количества текста или любых данных, визуально структура может быть представлена как дерево. Важнейшее обязательное синтаксическое требование — то, что документ имеет только один корневой элемент (англ. root element) (альтернативно называемый элементом документа (англ. document element)). Это означает, что текст или другие данные всего документа должны быть расположены между единственным начальным корневым тегом и соответствующим ему конечным тегом.
Следующий простейший пример — правильно построенный документ XML:
<book>Это книга: "Книжечка"</book>
Первая строка XML-документа называется объявлением XML (англ. XML declaration) — это необязательная строка, указывающая версию стандарта XML (обычно это 1.0), также здесь может быть указана кодировка символов и внешние зависимости.
<?xml version="1.0" encoding="UTF-8"?>
Спецификация требует, чтобы процессоры XML обязательно поддерживали Юникод-кодировки UTF-8, и UTF-16 (UTF-32 не обязателен). Признаются допустимыми, поддерживаются и широко используются (но не обязательны) другие кодировки, основанные на стандарте ISO/IEC 8859, так же допустимы другие кодировки, например, русские Windows-1251, KOI-8.
Комментарий может быть размещен в любом месте дерева.
XML комментарии начинаются <!-- и заканчиваются -->. Два знака минус (--) не могут быть применены ни в какой части внутри комментария.
<!-- Это комментарий. -->
Ниже приведён пример простого кулинарного рецепта, размеченного с помощью XML:
<?xml version="1.0" encoding="UTF-8"?>
<recipe name="хлеб" preptime="5" cooktime="180">
<title>Простой хлеб</title>
<ingredient amount="3" unit="стакан">Мука</ingredient>
<ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
<ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient>
<ingredient amount="1" unit="чайная ложка">Соль</ingredient>
<Instructions>
<step>Смешать все ингредиенты и тщательно замесить.</step>
<step>Закрыть тканью и оставить на один час в тёплом помещении.</step>
<step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
</Instructions>
</recipe>
Структура
Остальная часть этого XML-документа состоит из вложенных элементов, некоторые из которых имеют атрибуты и содержимое. Элемент обычно состоит из открывающего и закрывающего тегов (меток), обрамляющих текст и другие элементы. Открывающий тег состоит из имени элемента в угловых скобках, например «<step>
»; закрывающий тег состоит из того же имени в угловых скобках, но перед именем ещё добавляется косая черта, например «</step>
». Содержимым элемента (англ. content) называется всё, что расположено между открывающим и закрывающим тегами, включая текст и другие (вложенные) элементы. Ниже приведён пример XML-элемента, который содержит открывающий тег, закрывающий тег и содержимое элемента:
<step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
Кроме содержания у элемента могут быть атрибуты — пары имя-значение, добавляемые в открывающий тег после названия элемента. Значения атрибутов всегда заключаются в кавычки (одинарные или двойные), одно и то же имя атрибута не может встречаться дважды в одном элементе. Не рекомендуется использовать разные типы кавычек для значений атрибутов одного тега.
<ingredient amount="3" unit="стакан">Мука</ingredient>
В приведённом примере у элемента «ingredient» есть два атрибута: «amount», имеющий значение «3», и «unit», имеющий значение «стакан». С точки зрения XML-разметки, приведённые атрибуты не несут никакого смысла, а являются просто набором символов.
Кроме текста элемент может содержать другие элементы:
<Instructions>
<step>Смешать все ингредиенты и тщательно замесить.</step>
<step>Закрыть тканью и оставить на один час в тёплом помещении.</step>
<step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
</Instructions>
В данном случае элемент «Instructions» содержит три элемента «step». XML не допускает перекрывающихся элементов. Например, приведённый ниже фрагмент некорректен, так как элементы «em» и «strong» перекрываются.
<!-- ВНИМАНИЕ! Некорректный XML! --> <p>Обычный <em>акцентированный <strong>выделенный и акцентированный</em> выделенный</strong></p>
Каждый XML-документ должен содержать в точности один корневой элемент (англ. root element или document element), таким образом, следующий фрагмент не может считаться корректным XML-документом.
<!-- ВНИМАНИЕ! Некорректный XML! --> <thing>Cущность №1</thing> <thing>Cущность №2</thing>
Для обозначения элемента без содержания, называемого пустым элементом, допускается применять особую форму записи, состоящую из одного тега, в котором после имени элемента ставится косая черта. Следующие фрагменты полностью равнозначны:
<foo></foo>
<foo />
<foo/>
В XML определены два метода записи специальных символов: ссылка на сущность и ссылка по номеру символа. Сущностью (англ. entity) в XML называются именованные данные, обычно текстовые, в частности спецсимволы. Ссылка на сущность (англ. entity references) указывается в том месте, где должна быть сущность и состоит из амперсанда («&
»), имени сущности и точки с запятой («;
»). В XML есть несколько предопределённых сущностей, таких как «lt» (ссылаться на неё можно написав «<
») для левой угловой скобки и «amp» (ссылка — «&
») для амперсанда, возможно также определять собственные сущности. Помимо записи с помощью сущностей отдельных символов, их можно использовать для записи часто встречающихся текстовых блоков. Ниже приведён пример использования предопределённой сущности для избежания использования знака амперсанда в названии:
<company-name>AT&T</company-name>
Полный список предопределённых сущностей состоит из & («&»), < («<»), > («>»), ' («'»), и " («"») — последние две полезны для записи разделителей внутри значений атрибутов. Определить свои сущности можно в DTD-документе. Иногда бывает необходимо определить неразрывный пробел, который очень часто используется в HTML и обозначается как в XML такой предопределённой сущности нет, его записывают  , а использование вызывает ошибку. Отсутствие этой весьма распространённой сущности у множества программистов, зачастую, вызывает удивление, и это создаёт некоторые трудности при миграции своих HTML разработок в XML;
Cсылка по номеру символа (англ. numeric character reference) выглядит как ссылка на сущность, но вместо имени сущности указывается символ #
и число (в десятичной или шестнадцатеричной записи), являющееся номером символа в кодовой таблице Юникод. Это обычно символы, которые невозможно закодировать напрямую, например буква арабского алфавита в ASCII-кодированном документе. Амперсанд может быть представлен следующим образом:
<company-name>AT&T</company-name>
Существует ещё множество правил, касающихся составления корректного XML-документа, но целью данного краткого обзора было лишь показать основы, необходимые для понимания структуры XML-документа.
История
Временем рождения XML можно считать 1996 год, в конце которого появился черновой вариант спецификации языка, или 1998, когда эта спецификация была утверждена. А началось все с появления в 1986 году языка SGML.
SGML (Standard Generalized Markup Language — Стандартный Обобщенный Язык Разметки) заявил о себе как гибкий, комплексный и всеохватывающий мета-язык для создания языков разметки. И хотя понятие гипертекста появилось в 1945 году, этот язык не имеет гипертекстовой модели. Создание SGML можно с уверенностью назвать попыткой, объять необъятное, т. к. он объединяет в себе такие возможности, которые крайне редко используются все вместе. В этом и состоит его главный недостаток — сложность и, как следствие, дороговизна этого языка ограничивает его использование только крупными компаниями, которые могут позволить себе купить соответствующее программное обеспечение и нанять высокооплачиваемых специалистов. Кроме того, у небольших компаний редко возникают настолько сложные задачи, чтобы привлекать к их решению SGML.
Наиболее широко SGML применяется для создания других языков разметки, именно с его помощью был создан язык разметки гипертекстовых документов — HTML, спецификация которого была утверждена в 1992 году. Его появление было связано с необходимостью организации стремительно увеличивающегося массива документов в сети Internet. Бурный рост количества подключений к Internet и, соответственно, Web-серверов повлек за собой такую потребность в кодировке электронных документов, с которой не мог справиться SGML вследствие высокой трудности освоения. Появление HTML — очень простого языка разметки — быстро решило эту проблему, легкость в изучении и богатство средств оформления документов сделали его самым популярным языком для пользователей Internet. Но, по мере роста количества и изменения качества документов в Сети, росли и предъявляемые к ним требования, и простота HTML превратилась в его главный недостаток. Ограниченность количества тегов и полное безразличие к структуре документа побудили разработчиков в лице консорциума W3C к созданию такого языка разметки, который был бы не столь сложен, как SGML, и не настолько примитивен, как HTML. В результате, сочетая в себе простоту HTML, логику разметки SGML и удовлетворяя требованиям Internet, появился на свет язык XML.
Сильные и слабые стороны
Достоинства
- XML(человеко-ориентированный) — это формат, одновременно понятный и человеку и компьютеру;
- XML поддерживает Юникод;
- в формате XML могут быть описаны основные структуры данных — такие как записи, списки и деревья;
- XML — это самодокументируемый формат, который описывает структуру и имена полей также как и значения полей;
- XML имеет строго определённый синтаксис и требования к анализу, что позволяет ему оставаться простым, эффективным и непротиворечивым;
- XML также широко используется для хранения и обработки документов;
- XML — формат, основанный на международных стандартах;
- иерархическая структура XML подходит для описания практически любых типов документов;
- XML представляет собой простой текст, свободный от лицензирования и каких-либо ограничений;
- XML не зависит от платформы;
- XML является подмножеством SGML (который используется с 1986 года). Уже накоплен большой опыт работы с языком и созданы специализированные приложения;
- XML не накладывает требований на расположение символов на строке [1];
Недостатки
- Синтаксис XML избыточен.
- Размер XML документа существенно больше бинарного представления тех же данных. В грубых оценках величину этого фактора принимают за 1 порядок (в 10 раз).
- Размер XML документа существенно больше, чем документа в альтернативных текстовых форматах передачи данных (например JSON [2], YAML[3]) и особенно в форматах данных оптимизированных для конкретного случая использования.
- Избыточность XML может повлиять на эффективность приложения. Возрастает стоимость хранения, обработки и передачи данных.
- Для большого количества задач не нужна вся мощь синтаксиса XML и можно использовать значительно более простые и производительные решения [4]
- XML не содержит встроенной в язык поддержки типов данных. В нём нет понятий «целых чисел», «строк», «дат», «булевых значений» и т. д.
- Иерархическая модель данных, предлагаемая XML, ограничена по сравнению с реляционной моделью и объектно-ориентированными графами.
- Выражение не иерархических данных (например графов) требует дополнительных усилий
- Кристофер Дейт отмечал, что «…XML является попыткой заново изобрести иерархические базы данных…» [5] (в 1980-е года иерархические базы данных были вытеснены реляционными базами данных).
- Пространства имён XML сложно использовать и их сложно реализовывать в XML парсерах
- Существуют другие, обладающие сходными с XML возможностями, текстовые форматы данных, которые обладают более высоким удобством чтения человеком (YAML [6] , JSON [7], SweetXML [8], XF [9])
Отображение XML во Всемирной паутине
XSL является технологией, описывающей как форматировать или трансформировать данные XML документа. Документ трансформируется в формат, подходящий для отображения в браузере. Процесс аналогичен применению CSS к HTML документу для отображения. Браузер это наиболее частое использование XSL, но не стоит забывать, что с помощью XSL можно трансформировать XML в любой формат, например VRML, PDF, текст.
Без использования CSS или XSL, XML-документ отображается как простой текст в большинстве web-браузеров. Некоторые браузеры, такие как Internet Explorer, Mozilla и Mozilla Firefox отображают структуру документа в виде дерева, позволяя сворачивать и разворачивать узлы с помощью нажатий клавиши мыши.
Для применения CSS при отображении в браузере, XML документ должен содержать специальную ссылку на таблицу стилей. Например:
<?xml-stylesheet type="text/css" href="myStyleSheet.css"?>
Это отличается от подхода HTML, где используется элемент <link>.
Для задания XSL трансформации (XSLT) на стороне клиента требуется наличие следующей инструкции в XML:
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
Словари XML
Так как XML является достаточно абстрактным языком, были разработаны словари XML. Словарь позволяет разработчикам договориться о некотором конечном наборе имен тегов и атрибутов этих тегов. Одним из первых словарей появился XHTML, который понимают большинство браузеров. XHTML часто используют для хранения и редактирования контента в CMS.
Были созданы более специализированные словари, например протокол передачи данных SOAP, который не является человеко-ориентированным и достаточно трудно читаем. Есть коммерческие словари, такие как xCBL и cXML которые используются для передачи данных, ориентированных на торговую деятельность, эти словари включают в себя описание системы заказов, поставщиков, продуктов и прочее. Обычно, описывая какой-либо документ, человек для себя придумывает некоторый словарь, который потом описывается посредством DTD или просто объясняется «на пальцах» заинтересованным лицам.
Одним из интересных словарей, получивших широкое распространение, является FB2 — словарь, описывающий формат книги, со всевозможными сносками, цитатами и даже картинками.
Версии XML
- XML 1.0
- XML 1.1
См. также
- DTD, XSD, XML Schema — языки описания структуры документа XML;
- XLink, XPointer — языки описания ссылок XML;
- XPath — язык адресации XML;
- XQuery — язык запросов XML;
- XML DOM — интерфейс для обработки XML-документов;
- XSL, XSL-FO, XSLT — языки преобразования документов XML;
- SVG — язык масштабируемой векторной графики;
- SOAP — основанный на XML протокол для обмена информацией между программами;
- XML-RPC — основанный на XML стандарт вызова удалённых процедур;
- YAML
- DITA
- MathML — язык описания математических формул, основанный на XML;
- IFX — стандарт интерактивного обмена финансовой информацией, основанный на XML;
- GraphML — язык описания графов, основанный на XML;
- HL7 (медицинский стандарт);
- SGML — базовый язык. XML является его упрощением.
Ссылки
- Раздел XML на сайте Консорциума Всемирной паутины (W3C)
- Официальная спецификация стандарта XML 1.0 (англ.)
- Русский перевод спецификации XML 1.0
- Официальная спецификация стандарта XML 1.1 (англ.)
- Xmlhack.ru: Новости XML и обзоры, форумы, FAQ
- Список XML-редакторов (англ.)
- Краткий учебник по XML Описание возможностей языка XML, а также базовые правила, позволяющие грамотно составлять XML документы.
- Документация по XML на сайте IBM статьи, форумы
- XeML.net
Литература
- Сергеев Александр Петрович. HTML и XML. Профессиональная работа. — М.: «Диалектика», 2004. — С. 880. — ISBN 5-8459-0676-8.
- Роберт Тейбор. Реализация XML Web-служб на платформе Microsoft .NET = Microsoft .NET XML Web Services. — М.: «Вильямс», 2002. — С. 464. — ISBN 0-672-32088-6.