XML-это язык разметки общего назначения, который можно использовать для управления структурой данных. Несмотря на то, что многие предпочитают простоту JSON, он все же имеет много преимуществ. Что делает его таким хорошим?
XML очень похож на HTML, и это неудивительно, поскольку они оба основаны на одной и той же базовой технологии - стандартном обобщенном языке разметки SGML.
XML был разработан, чтобы быть как человеком, так и машиной, и в результате он может быть многословным и не таким компактным способом упаковки данных, как вы могли бы пожелать. Его также можно критиковать за то, что он слишком много набирает, но в большинстве случаев генерация и потребление XML выполняется программами, в которых люди участвуют только тогда, когда что-то идет не так.
Если вы знаете HTML, то вы, безусловно, узнаете XML. В некотором смысле XML является универсальной версией HTML. Вы используете HTML для разметки веб-страниц, но вы можете использовать XML для разметки и придания структуры любым данным, о которых вы хотите думать. Была даже попытка сделать HTML подмножеством XML, то есть XHTML, но от этого отказались в пользу HTML5.
Несмотря на то, что XML, возможно, не захватил мир разметки данных, как это было задумано, он все еще имеет достаточно преимуществ, чтобы быть предпочтительным во многих ситуациях, и это означает, что как программист вы должны что-то знать об этом. Он имеет репутацию трудного для обработки с нуля, но дело в том, что большинство языков имеют библиотеки XML, которые делают работу с ним просто вопросом правильных вызовов функций.
Итак, давайте посмотрим, что это такое..
Теги, ничего, кроме тегов
EXtensible Markup Language, чтобы дать XML его полное название, это способ указать, где различные части документа начинаются и заканчиваются.
Например, если вы ведете список своих любимых книг, вы можете использовать что - то вроде:
Title: Life of Pi
Author: Yann Martel
Publisher: Canongate
Вы используете соглашение о том, что двоеточие отделяет “имя поля”, которое описывает и идентифицирует данные, от фактических данных. XML использует другое, но столь же очевидное соглашение, чтобы сделать то же самое. Он использует имена полей, заключенные в “угловые скобки” или теги, и в этом случае соглашение заключается в том, что фактические данные находятся между открывающим и закрывающим тегом.
Если вы знаете HTML, это будет казаться очевидным, и, как и в случае HTML5, теги XML следует интерпретировать как обеспечивающие семантическую структуру данных. То есть теги говорят вам, о чем данные, а не о том, как их следует обрабатывать. Конечно, если вы знаете, о чем данные, их семантика, то то, что вы делаете с ними, часто следует сразу.
Например, одни и те же данные книги в XML будут выглядеть примерно так:
<Title> Life of Pi </Title>
<Author> Yann Martel </Author >
<Publisher >Canongate</Publisher>
Из этого видно, что для каждого открывающего тега есть закрывающий тег с тем же именем, но начинающийся с /.
Красота этой системы заключается в том, что макет документа не имеет никакого значения, и данные могут включать разрывы строк без каких-либо проблем. Например, эта версия документа означает точно то же самое, что и предыдущая:
<Title>
Life of Pi
</Title>
<Author>
Yann Martel
</Author >
<Publisher >
Canongate
</Publisher>
Все дело в том, что XML может представлять структуру данных без какой-либо конкретной компоновки.
Например, вы можете читать XML-документ буква за буквой по телефону, а человек на другом конце может записать его как одну длинную строку текста. Это все еще означает то же самое, и способность “сериализовать” XML-документы позволяет хранить их на диске или передавать их байт за байтом или даже бит за битом по сети без какой-либо специальной обработки.
Вложенность
Все может быть немного интереснее, чем в приведенном выше примере, потому что вы можете использовать теги внутри содержимого других тегов.
В частности, чтобы быть строго корректным, приведенный ранее пример XML нуждается во внешней паре тегов, которые заключают все. То есть:
<Books>
<Title>
Life of Pi
</Title>
<Author>
Yann Martel
</Author >
<Publisher >
Canongate
</Publisher>
</Books>
Обратите внимание, что отступ был использован, чтобы ясно показать, что все остальные теги находятся в паре <Книги><Книги></Книги>. К настоящему времени вы уже знаете, что макет не имеет отношения к смыслу XML-документа, но он помогает сделать его читабельным.
XML – документ всегда начинается с тега, который заключает в себе все – так называемого тега “верхнего уровня”.
Вы можете повторять идею “тег внутри тега” так часто, как вам нравится, и это одна из многих вещей, которые делают XML мощным. Это также делает XML более сложным, чем он есть на самом деле.
Эта структура вложенности означает, что XML способен представлять любые данные, образующие иерархию или древовидную структуру.
Отображение XML
Например, более полная запись может быть показана в виде:
<Books>
<Title>
Life of Pi
</Title>
<Author>
Yann Martel
</Author >
<Production>
<Format>
Paperback
</Format>
<Pages>
348
</Pages>
<ISBN>
184195392X
</ISBN>
</Production>
<Publisher >
Canongate
</Publisher>
</Books>
Хотя это выглядит намного сложнее, вы можете видеть, что это всего лишь основной принцип использования открывающих и закрывающих тегов для вложения данных или других тегов.
Что может вас удивить, так это то, что если вы введете этот XML в документ и сохраните его под подходящим именем pie.xml скажем, тогда вы сможете загрузить его в недавнее и просмотреть структуру данных гораздо более четко.
Веб - браузеры попытаются отформатировать любой файл, заканчивающийся на .xml, с отступом и окраской, чтобы показать теги и структуру.
На рисунке 1 показано, как он выглядит при загрузке в Проводник.
Рис. 1. Просмотр XML
Сила XML
В XML не так много больше, чем теги, которые окружают данные, и вы вполне можете подумать, что этого недостаточно, чтобы оправдать суету?
Тем не менее, вы должны быть в состоянии видеть, что XML можно использовать для придания структуры любым данным, которые вы хотите себе представить. Вы можете свободно изобретать любые теги, которые вам нужны, и использовать их для создания структур, которые соответствуют вашим данным.
Полученный XML-файл должен быть понятен другому человеку и, что особенно важно, он должен быть правильно обработан любой программой, которая понимает XML. Например, несмотря на то, что Internet Explorer не имел предварительных знаний о структуре нашей записи данных книги, ему удалось выполнить разумную работу по ее отображению.
Стоит сказать, что большинство XML-документов, скорее всего, были созданы автоматически приложением и автоматически потреблены другим приложением. XML может быть удобочитаемым человеком, но это не значит, что люди всегда являются источником или предполагаемым местом назначения XML-документов.
В большинстве случаев XML будет скрываться в фоновом режиме, заставляя некоторые желаемые объекты работать без того, чтобы вы действительно знали, почему или как.
Расширяемый ML?
Однако чтобы сделать XML полностью практичным, нам нужны некоторые дополнительные функции. Во-первых, XML-теги могут быть немного сложнее, чем просто имя.
Вы можете включить атрибуты в тег, чтобы “описать” следующие данные. Атрибуты также являются частью HTML, но в этом случае то, что вы можете использовать, в основном определяется стандартом HTML.
В XML вы можете придумать свои собственные атрибуты.
Например, вы можете включить оценку для книги в тег <Book> :
<Book rating=5>
Такое включение информации внутри тега, а также данных между тегами имеет множество преимуществ. Он позволяет проводить различие между данными и дополнительной информацией или метаданными, относящимися к реальным данным.
Например, в этом случае он позволяет выбрать, какие записи <Book> обрабатывать, не изменяя данные в теле записи.
Конечно, это вопрос мнения, должно ли что-то быть атрибутом или просто другой парой тегов.
Например, рейтинг может быть представлен в виде:
<Rating>5</Rating>
Может быть трудно решить, когда изобретать новый тег или когда использовать атрибут, но в целом:
Элемент используется, когда:
· содержимое имеет длинную или переменную длину
· порядок имеет значение (порядок атрибутов игнорируется)
· информация действительно является “контентом".
Атрибут используется, когда:
· информация изменяет элемент таким образом, который естественным образом не является частью содержимого
· когда вы хотите ограничить возможные используемые значения
· очевидно,что информация-это метаданные.
Способность изобретать новые теги и атрибуты-это то, что делает XML расширяемым.