Языки разметки. XML и альтернативные форматы

XML – одна из самых широко используемых в современном интернете технологий работы с данными. Однако в чём именно она заключается, в состоянии сказать лишь немногие пользователи Глобальной сети. Давайте попробуем вместе разобраться в XML и альтернативных ему форматах.

 

Что такое XML?

XML – это eXtensible Markup Language, что в переводе значит «расширенный язык разметки». Фактически, это способ записи данных в структурированном виде, который будет читаем для пользователя, но при этом удобен для обработки программному обеспечению. Вот пример данных в виде XML:

<?xml version="1.0" encoding="UTF-8"?>
<Recipe name="хлеб" prep_time="5 мин" cook_time="3 час">
  <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-базы данных. Давайте посмотрим на него внимательнее. Такая первая строка обязательно присутствует во всех XML-документах, это подтверждение того, что формат действительно XML, и, кроме того, в ней указывается кодировка символов, используемых в документе. После неё уже следует собственно содержимое документа. Наименьший «кусочек» документа, ограниченной парой «скобок» < и > называется тегом. Такое название пришло из языка гипертекстовой разметки HTML, который используется во Всемирной паутине для оформления Web-страниц. При помощи тегов формируются элементы документа – данные, ограниченные парой тегов <tag> и </tag>. Элементы могут содержать в себе атрибуты – например, во второй строке нашего с вами примера атрибутами элемента Recipe будут name, prep_time и cook_time. Также внутри этого элемента ещё содержатся другие, вложенные элементы – это содержимое элемента. Вместо пары тегов для обозначения границ элемента может использоваться один тег вида <tag/>, но тогда у такого элемента не может быть вложенных элементов.

Содержимое XML-документа можно представить в виде древовидной структуры данных. При этом стандарт XML требует, чтобы у этого дерева был «ствол» ‑ корневой элемент, который будет содержать внутри себя все остальные, и такой корневой элемент должен быть единственным. Как и в HTML-разметке, специальные символы (амперсанд «&», знаки неравенства, кавычки и апостроф) должны быть записаны в виде специальных символьных комбинаций, которые называются предопределёнными сущностями. Аналогично можно вставлять ссылки на сущности – это символическая замена какой-либо сущности (то есть комбинации символов) выражением вида «&имя_сущности;» (без кавычек в документе). При этом ссылка может быть на предопределённую сущность или на какую-то сущность, хранящуюся в DTD-документе.

 

Что такое DTD?

DTD (англ. Document Type Definition – описание типа документа) – документ, в котором описывается структура XML-документа. Описание документа при помощи DTD выглядит примерно следующим образом:

<!ELEMENT list (item*)>
<!ELEMENT item (par1, par2?)>
<!ELEMENT par1 (#PCDATA) >
<!ELEMENT par2 (#PCDATA) >

Здесь мы видим следующую картину: корневой элемент – это list, а элементы, содержащиеся внутри него – это item. Значок «*» означает, что этих элементов может быть любое число, от 0 до практически бесконечности. Каждый элемент item содержит в себе элементы par1 и par2, причём значок вопроса означает, что присутствие par2 не является обязательным.

В последнее время формат описания структуры DTD всё больше меняется на XML Schema. Оба эти формата описывают, какие элементы должен содержать в себе XML-документ, какими атрибутами могут обладать эти самые элементы и какого типа должны быть значения атрибутов и элементов. Синтаксисы DTD и Schema существенно отличаются. С помощью Schema то же самое можно записать следующим образом:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="list" type="List"/>
 <xs:complexType name="List">
  <xs:sequence>
   <xs:element name="par1" type="xs:string"/>
   <xs:element name="par2" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:schema>

Как видите, описание документа при помощи Schema больше похоже на саму XML-разметку (собственно, если присмотреться, это именно она и есть).

 

JSON – первая альтернатива XML

Несмотря на то, что XML – очень распространённый способ записи данных, он не является единственным и неповторимым в своём роде. Одна из альтернативных текстовых форм записи данных называется JSON. Расшифровывается эта аббревиатура как JavaScript Object Notation – что-то вроде «запись объектов с помощью JavaScript». Стоит отметить, что для пользователя этот формат, на мой взгляд, удобнее, чем XML. Для того, чтобы это утверждение не выглядело голословным, приведу пример данных в JSON-представлении:

var earth =
{
 "planet" :
 {
  "name" : "earth",
  "type" : "small",
  "info":
  [
   "Earth is a small planet, third from the sun",
   "Surface coverage of water is roughly two-thirds",
   "Exhibits a remarkable diversity of climates and landscapes"
  ]
 }
};

Пользователю гораздо проще, как говорится, отделить зёрна от плевел, чем в случае с XML, поскольку нет открывающих и закрывающих тегов. Это, кстати, приводит и к тому, что на больших объёмах данных экономится память, которую эти теги занимают. Программистам будет приятно узнать, что JSON лучше, чем XML, подходит и для использования в AJAX. Основное его преимущество – в простоте обработки JSON-данных на стороне клиента.

 

Вторая альтернатива: YAML

YAML – это рекурсивная аббревиатура, которая расшифровывается как «YAML Ain't Markup Language» (по-русски это будет звучать как «YAML не является языком разметки»). Чем он при этом является, правда, его создатели уточнять не берутся, но, пожалуй, определение «язык разметки» будет всё-таки довольно подходящим. Чем YAML отличается от XML? Компактностью представления данных и удобством их редактирования для человека. Вот как выглядят данные, записанные с помощью YAML:

---
 -
    - PRIVMSG
    - newUri
    - '^http://.*'
 -
    - PRIVMSG
    - deleteUri
    - ^delete.*
 -
    - PRIVMSG
    - randomUri
    - ^random.*

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

 

Зачем нужны XML, JSON, YAML?

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

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

Что касается XML, то очень широкое применение этот стандарт нашёл во Всемирной паутине. На базе XML разработана технология XSL, с помощью которой XML-документы преобразуются специальным образом, в соответствии со стандартами и правилами, в HTML-документы, которые уже можно отображать в браузере. Хотя на самом деле суть технологии XSL значительно шире, и её можно применять для преобразования XML-документа в практически любой формат. JSON и YAML используются пока что реже, но у этих технологий большой потенциал, связанный с развитием Web 2.0, и в интернете можно найти всё больше мест, где они также применяются.

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 2
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя tamakio

JSON используется реже?

Я уже лет 5 xml новых проектов на xml не видел. он используется там, где его ещё не успели заменить.

+1
Аватар пользователя antonkw

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

+1
Аватар пользователя dnki

Коротко, но толково