Зачем нужны текстовые форматы?

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

Текстовые файлы (файлы в текстовом формате) можно открыть, прочитать и отредактировать в большом количестве текстовых редакторов.

В файлах конфигурации многих программ применяется текстовый формат, даже если там представлены числа и двоичные переключатели (да / нет).

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

Где сейчас используют XML?

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

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

Выделяют физическую и логическую структуры документа XML. Согласно физической структуре документ состоит из сущностей (entities), каждая из которых может ссылаться на другую.

Единственный корневой элемент — документная сущность. Сущность — это самая маленькая часть в документе. У всех сущностей есть имя и они содержат символы.

Символы в свою очередь разделены на два типа: символы данных (character data) и символы разметки.

К разметке относятся:

  • теги (tags), обозначают границы элементов,
  • объявления и инструкции обработки, включая их атрибуты (attributes),
  • ссылки на сущности,
  • комментарии,
  • последовательности символов, обрамляющие секции "CDATA".

Согласно логической структуре документ состоит из элементов (elements), комментариев (comments), объявлений (declarations), ссылок на сущности (character references) и инструкций обработки (processing instructions). Все это в документе структурируется разметкой (markup).

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

Символы разметки

Разметка всегда начинается символом < и заканчивается символом >.

Вместе с символами < и > (угловые скобки) специальную роль отведена также символу & (амперсанд). Границы элементов, инструкций обработки и некоторых других последовательностей обозначаются угловыми скобками. Амперсанд же помогает при замене текста при помощи сущностей.

Объявление XML

При объявлении XML указывается версия языка, использованная для написания документа. Спецификация предписывает начинать документ с объявления XML, потому что от версии языка зависит трактование содержимого документа.

И если в первой (1.0) версии языка объявление было не обязательным, то в новых версиях это обязательно, и если объявление отсутствует, то под этим понимается версия 1.0. В объявлении также может содержаться информация о кодировке документа.

Пример:

<?XML version="1.1" encoding="UTF-8" ?>

Теги

Тег (tag) — конструкция разметки, которая содержит имя элемента. Теги могут быть открывающимися (начальными) и закрывающимися (конечными). Также существуют теги пустого элемента, которые совмещают в себе открывающийся и закрывающийся.

Примеры:

  • Начальный тег: <tag1>

  • Конечный тег: </tag1>

  • Тег пустого элемента: <empty_tag1 />

Атрибуты

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

Атрибут всегда является парой имя=значение:

name = "value"

Пример атрибута в теге:

<tag1 name = "value">element</tag1>

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

Кодировка пяти служебных символов (<,>,’,”,&)

Очевидно, что символы <, > и & не могут быть использованы в символьных данных и в значениях атрибутов в таком виде. Для их представления нужно использовать специальные последовательности. Также специальные последовательности используются при написании апострофов и кавычек внутри значений атрибутов:

Символ Замена
< &lt;
> &gt;
& &amp;
' &apos;
" &quot;

Кроме того, для написания символа \ необходимо использовать \\.

Секция CDATA

Секция CDATA не является логической единицей текста. Эта секция может встречаться в документе в том месте, где синтаксис позволяет нам размещать символьные данные.

Секция начинается с <![CDATA[ и завершается ]]>. Между этой разметкой размещаются символьные данные, и при этом символы <, > и & могут быть использованы в их непосредственной форме.

Комментарии

Комментарии (comment) не относятся к символьным данным документа. Комментарий начинается с <!-- и заканчивается -->, внутри комментария не может быть использована последовательность символов --. Также внутри комментария символ амперсанда не используется в качестве разметки.

Пример:

<!-- это комментарий -->

Имена

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

Пример

Посмотрим на Java-класс и объект этого класса. Потом попробуем сериализовать объект в формат XML. Код класса:


public class Book {
   private String title;
   private String author;
   private Integer pageCount;
   private List<String> chapters;

   public Book(String title, String author, Integer pageCount, List<String> chapters) {
       this.title = title;
       this.author = author;
       this.pageCount = pageCount;
       this.chapters = chapters;
   }
// геттеры/сеттеры
}

и создание объекта:


Book book = new Book("My Favorite Book", "Amigo", 999, Arrays.asList("Chapter 1", "Chapter 2", "Chapter 3", "Chapter 4", "Chapter 5", "Chapter 6"));

Вот так выглядит пример валидного XML-представления Java-объекта, который содержит 4 поля, одно из которых представляет собой коллекцию (Java-код выше):

<Book>
  <title>My Favorite Book</title>
  <author>Amigo</author>
  <pageCount>999</pageCount>
 <chapters>
    <chapters>Chapter 1</chapters>
    <chapters>Chapter 2</chapters>
    <chapters>Chapter 3</chapters>
    <chapters>Chapter 4</chapters>
    <chapters>Chapter 5</chapters>
    <chapters>Chapter 6</chapters>
 </chapters>
</Book>

XML Schema

XML Schema — язык описания структуры XML-документа. Спецификация XML Schema является рекомендацией W3C.

XML Schema была придумана для определения правил, которым должен подчиняться XML-документ. Но что самое интересное, XML Schema была разработана так, чтобы ее можно было использовать при разработке ПО для обработки XML-документов, то есть мы можем проверять корректность XML-документа программно.

Файл, который содержит XML Schema, имеет расширение «.xsd» (XML Schema definition). Проектирование XML Schema выходит за рамки этой лекции, поэтому просто знай, что такая возможность существует.