Перейти к основному содержимому

3.04. XML

Разработчику Аналитику Тестировщику
Архитектору Инженеру

XML

XML (eXtensible Markup Language) - универсальный язык разметки, предназначенный для хранения и передачи данных. Он позволяет структурировать информацию в виде текстового файла, который легко читается человеком и машиной. Его можно открыть в любом текстовом редакторе, работает на любых ОС и устройствах.

Структура XML-документа является самодокументируемой - описывает саму себя через теги и атрибуты. XML позволяет создавать собственные теги для описания данных.

DTD (Document Type Definition) - стандартный способ описания структуры XML, и определяет, какие элементы (теги) могут использоваться, какие атрибуты могут быть у элементов, и каков порядок и вложенность элементов.

XSD (XML Schema Definition) - схема, которая описывает структуру документа. В отличие от DTD, XSD использует сам XML для описания правил.

Пример XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Test1">
<xs:complexType>
<xs:sequence>
<xs:element name="Test2" type="xs:string"/>
</xs:sequence>
<xs:attribute name="Attribute1" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>

Эта схема описывает, что элемент Test1 должен содержать обязательный строковый атрибут Attribute1, и вложенный элемент Test2.

Теги - основные элементы XML, которые «окружают» данные. Они определяют начало и конец элемента:

<note>
<to>Alice</to>
<from>Bob</from>
</note>

Здесь note, to, from - теги, а Alice и Bob - значения элементов.

Атрибуты - дополнительные параметры, которые добавляются к тегам для описания их свойств. Расширим наши note:

<note priority="high">
<to>Alice</to>
<from>Bob</from>
</note>

Здесь priority – это атрибут, а high - значение атрибута.

Узел - любая часть XML-документа, включая элементы, атрибуты, текст и комментарии. XML это дерево узлов, упорядоченных иерархично. В нашем документе будет:

  • note - корневой узел;
  • to - дочерний узел;
  • Alice - текстовый узел.

Синтаксис и правила XML

  1. Единственный корневой элемент. Каждый XML должен иметь один корневой элемент, который содержит все остальные элементы. В нашем случае – это note. У него определенного значения нет - он выступает хранилищем других элементов. Эти элементы по отношению к нему будут дочерними.
  2. Правильное закрытие тегов. Все теги должны быть правильно закрыты:
    • парные теги: <tag>Content</tag>;
    • одиночные теги: <tag/> То есть, тег открывается через фигурные скобки - <>, а закрывается через фигурные скобки через слэш - </>.
  3. Чувствительность к регистру. <Tag> и <tag> - разные теги.
  4. Экранирование специальных символов. Поскольку <, > уже забронированы в языке разметки, чтобы указать в значениях соответствующие зависимые операторы, нужно экранировать символы, подменяя допустим < соответствующей комбинацией символов:
    • &lt;<
    • &gt;>
    • &amp;&
    • &quot;"
    • &apos;'

★ Структура XML

XML-документ состоит из пролога и корневого элемента.

Пролог не обязателен, но выглядит так:

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

Пролог сообщает о том, какая версия XML используется, и какая кодировка текста содержится в документе. Если не указать пролог, то будут использоваться параметры по умолчанию.

Корневой элемент, как мы уже ранее изучили, включает в себя дочерние элементы.

XML применяется для обмена данными между системами, конфигурационных файлов, а порой и для хранения данных в виде файлов. К примеру, Microsoft Office форматы (тот же Word, Excel) это на самом деле XML.

Подробнее об XML также рекомендую почитать на https://www.w3.org/XML/ (официальный сайт W3C, Консорциума Всемирной паутины). Он не переведён на русский язык, но можно найти много интересного.

Практическое задание
Попробуйте составить XML-файл. Создайте родительский тег и закройте его. Добавьте дочерний элемент и закройте его. Добавьте значение дочернего элемента. Добавьте атрибут дочернего элемента. Добавьте значение атрибута.


XPath (XML Path Language) - язык запросов для навигации по XML-документу. Он позволяет находить узлы (элементы, атрибуты, текст) в XML-дереве. Каждый элемент, атрибут или текст – это узел. И XPath определяет путь для обращения к этим узлам. Оси определяют направление поиска.

Синтаксис XPath: /: Выбор корневого элемента. //: Выбор всех элементов, соответствующих условию. @: Выбор атрибута. []: Условие (например, [position()=1]).

Чит-лист - https://cheatsheets.zip/xpath

Пример. У нас есть XML:

<library>
<book id="1">
<title>Война и мир</title>
<author>Лев Толстой</author>
</book>
<book id="2">
<title>Мастер и Маргарита</title>
<author>Михаил Булгаков</author>
</book>
</library>

К такому документу можно обращаться, используя XPath-запросы, чтобы получить информацию из определённого элемента. Допустим:

  1. Выбрать все книги - /library/book
  2. Выбрать заголовок первой книги - /library/book[1]/title
  3. Выбрать книгу с id равным «2» - /library/book[@id='2']
  4. Выбрать всех авторов - //author

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


XSLT (Extensible Stylesheet Language Transformations) - язык преобразования XML-документов. Он используется для преобразования XML в другие форматы или переведение их в другой формат структуры. XSLT берёт XML-документ и применяет к нему шаблон (XSL-файл). Результатом является новый документ который может быть HTML, текстовым файлом или XML c изменённой структуры.

Возьмем ранее приведённый пример XML с библиотекой книг.

Есть у нас XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h1>Список книг</h1>
<ul>
<xsl:for-each select="library/book">
<li>
<xsl:value-of select="title"/> (<xsl:value-of select="author"/>)
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

И преобразуем в HTML, который в итоге будет таким:

<html>
<body>
<h1>Список книг</h1>
<ul>
<li>Война и мир (Лев Толстой)</li>
<li>Мастер и Маргарита (Михаил Булгаков)</li>
</ul>
</body>
</html>

Принцип:

XML - шаблон XSL - процесс преобразования - итоговый файл.

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

Эти инструменты делают XML мощным средством для работы с данными.