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
- Единственный корневой элемент. Каждый XML должен иметь один корневой элемент, который содержит все остальные элементы. В нашем случае – это note. У него определенного значения нет - он выступает хранилищем других элементов. Эти элементы по отношению к нему будут дочерними.
- Правильное закрытие тегов. Все теги должны быть правильно закрыты:
- парные теги:
<tag>Content</tag>; - одиночные теги:
<tag/>То есть, тег открывается через фигурные скобки -<>, а закрывается через фигурные скобки через слэш -</>.
- парные теги:
- Чувствительность к регистру.
<Tag>и<tag>- разные теги. - Экранирование специальных символов. Поскольку
<,>уже забронированы в языке разметки, чтобы указать в значениях соответствующие зависимые операторы, нужно экранировать символы, подменяя допустим<соответствующей комбинацией символов:<—<>—>&—&"—"'—'
★ Структура XML
XML-документ состоит из пролога и корневого элемента.
Пролог не обязателен, но выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
Пролог сообщает о том, какая версия XML используется, и какая кодировка текста содержится в документе. Если не указать пролог, то будут использоваться параметры по умолчанию.
Корневой элемент, как мы уже ранее изучили, включает в себя дочерние элементы.
XML применяется для обмена данными между системами, конфигурационных файлов, а порой и для хранения данных в виде файлов. К примеру, Microsoft Office форматы (тот же Word, Excel) это на самом деле XML.
Подробнее об XML также рекомендую почитать на https://www.w3.org/XML/ (официальный сайт W3C, Консорциума Всемирной паутины). Он не переведён на русский язык, но можно найти много интересного.
★ 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-запросы, чтобы получить информацию из определённого элемента. Допустим:
- Выбрать все книги -
/library/book - Выбрать заголовок первой книги -
/library/book[1]/title - Выбрать книгу с id равным «2» -
/library/book[@id='2'] - Выбрать всех авторов -
//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 мощным средством для работы с данными.