> For the complete documentation index, see [llms.txt](https://daymonri.gitbook.io/techwritersummary/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://daymonri.gitbook.io/techwritersummary/languages-formats/xml.md).

# XML

**XML** – «расширяемый язык разметки», язык описания данных.

Как и в HTML, главная составная часть XML – **теги**, открывающий (\<tag>) и закрывающий (\<tag/>). Теги всегда парные, могут быть вложенными, регистрозависимые.

```xml
<?xml version="1.0" encoding="UTF-8"?>
<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
</note>
```

HTML – для отображения данных, XML – для хранения и передачи.

**Тег верхнего уровня** – корневой, он обязателен. С точки зрении вложенности теги бывают **родительские** и **дочерние** по отношению друг к другу. Теги на одном уровне – **братья/сёстры**.

Теги могут иметь атрибуты (обязательно заключаются в кавычки). Пример:

```xml
<price currency="US dollar">15000.00</price>
```

*Здесь у тега price есть атрибут currency, который говорит о том, в какой валюте указана цена.*

Первая строка prolog указывает на версии XML и кодировку:

```xml
<?xml version="1.0" encoding="UTF-8"?>
```

В отличие от HTML, в XML теги не предопределены, пользователь сам даёт им названия. Конфликты с одинаковыми сущностями решаются префиксами. В примере ниже префиксы *real* и *toy* позволяют отличить реальные машины от игрушечных:

```xml
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
```

В данном примере, *атрибут xmlns* в теге **\<table>** определяет префиксам **h:** и **f:** квалифицирующее пространство имен.

Чтобы использовать префиксы, их нужно предварительно зарегистрировать в **пространстве имён** (атрибут xmlns в начальном теге элемента). Обычно **префикс** – это URI, но можно использовать **URI-подобные строки**, чтобы отслеживать иерархию имён. Когда пространство имен определено для какого-то элемента, то все его дочерние элементы с тем же префиксом ассоциируются с его пространством имен.

В примере ниже URI-подобная строка подсказывает, что за группа разработчиков отвечает за проект, и из какого они отдела:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
```

Вместо символов, используемых в синтаксисе XML, нужно прописывать их сущности:

<div align="left"><figure><img src="https://956387675-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FczgjL0lfenykQjm6DQfO%2Fuploads%2FPmcVTtbvURhPfy6AMCib%2Fimage.png?alt=media&amp;token=7dfd2714-9dd2-4870-99f1-bc55c0471a74" alt="" width="563"><figcaption></figcaption></figure></div>

**Комментарии** пишутся так же, как в HTML:

```xml
<!-- Это комментарий -->
```

**Пример подключения CSS-файла к XML-файлу:**

```xml
<?xml-stylesheet type="text/css" href="//msiter.ru/cd_catalog.css"?>
```

**Стандарт** – набор расширений для XML. Самые популярные стандарты:

* **AJAX** позволяет менять содержимое веб-страницы без её перезагрузки;
* **XSLT** позволяет преобразовывать XML в другие форматы (например, в HTML);
* **XML DOM** позволяет получать, изменять, добавлять и удалять отдельные элементы из XML-файла.
* **DTD** позволяет определить список разрешенных элементов для сущностей в XML-файле.
