Навіщо потрібні текстові формати?

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

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

У файлах конфігурації багатьох програм застосовується текстовий формат, навіть якщо там подано числа та двійкові перемикачі (так/ні).

Це дещо ускладнює програми через потребу у перетворенні текстових даних до внутрішнього формату й навпаки, але дає можливість вносити зміни до конфігурації вручну, без використання засобів налаштування самої програми.

Де зараз використовують 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 виходить за межі цієї лекції, тому просто май на увазі, що така можливість існує.