Вступ

В основі обміну інформацією в мережі Інтернет лежав простий текст (Plain Text):

Log entry: sol 7

Ok, I’ve had a good night’s sleep, and things don’t seem as hopeless as they did yesterday. Today I took stock of supplies, and did a quick EVA to check up on the external equipment. Here’s my situation: The surface mission was supposed to be 31 days. For redundancy, the supply probes had enough food to last the whole crew 56 days. That way if one or two probes had problems, we'd still have enough food to complete the mission. We were six days in when all hell broke loose, so that leaves enough food to feed six people for 50 days. I’m just one guy, so it’ll last me 300 days. And that’s if I don’t ration it. So I’ve got a fair bit of time.

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

LOG ENTRY: SOL 7 Ok, I’ve had a good night’s sleep, and things don’t seem as hopeless as they did yesterday. Today I took stock of supplies, and did a quick EVA to check up on the external equipment. Here’s my situation: The surface mission was supposed to be 31 days. For redundancy, the supply probes had enough food to last the whole crew 56 days. That way if one or two probes had problems, we'd still have enough food to complete the mission. We were six days in when all hell broke loose, so that leaves enough food to feed six people for 50 days. I’m just one guy, so it’ll last me 300 days. And that’s if I don’t ration it. So I’ve got a fair bit of time.

Ще можна якось розбавити стіну тексту ASCII-графікою — і тільки:

  __    __
o-''))_____\\\\
"--__/ * * * )
c_c__/-c____/

Але в інформаційну епоху хочеться більшого:

Для повноцінного вирішення цих завдань були розроблені мови розмітки (Markup Language). Вони дозволяють доповнювати простий текст метаданими – «даними про дані», або «даними про текст» в нашому випадку.

Розмітка (метадані) не видима користувачеві, але доступна браузерам, пошуковим системам та іншим програмам для читання розмічених текстів. Браузери, аналізуючи розмітку, створюють зручне візуальне подання тексту.

Розглянемо кілька прикладів популярних мов розмітки.

MathML

MathML використовується для опису математичних формул. Візьмемо простий текст формули для обчислення коренів квадратного рівняння:

$x = (-b ± √(b^2 - 4ac)) / 2a$

Ми можемо розмітити її, використовуючи теги, які позначають дріб <mfrac> і квадратний корінь <msqrt>:

<math xmlns="<http://www.w3.org/1998/Math/MathML>">
    <mi>x</mi> <mo>=</mo>
    <mfrac>
      <mrow>
        <mo>−</mo> <mi>b</mi> <mo>±</mo>
        <msqrt>
          <msup> <mi>b</mi> <mn>2</mn> </msup>
          <mo>−</mo>
          <mn>4</mn> <mi>a</mi> <mi>c</mi>
        </msqrt>
      </mrow>
      <mrow> <mn>2</mn> <mi>a</mi> </mrow>
    </mfrac>
</math>

Сучасні браузери відобразять нудний текст у вигляді гарно відформатованої формули.