---
title: Основы XML
seo:
  title: Основы XML — Java Developer
  description: Тема «Основы XML» для собеседования Java Developer. Что такое XML? Что такое DTD?
---

[Все темы Java Developer](/java-developer)

## <strong>Что такое</strong> <code>XML</code><strong>?</strong> [#q-14bee738d69b819ca1ffc2eedcaae19e]

<code>XML</code> (eXtensible Markup Language) — это язык разметки,
предназначенный для хранения и передачи данных в формате, который легко читается
как человеком, так и машиной.

#### Основные моменты&#58;

- <strong>Структурированность&#58;</strong> Данные организованы в виде элементов
  с тегами.

- <strong>Расширяемость&#58;</strong> Пользователи могут создавать свои
  собственные теги для описания данных.

- <strong>Универсальность&#58;</strong> Используется для обмена данными между
  различными системами и приложениями.

#### Пример&#58;

```xml
<person>
    <name>John Doe</name>
    <age>30</age>
    <email>john.doe@example.com</email>
</person>
```

XML широко применяется для конфигурационных файлов, веб-сервисов, обмена данными между различными системами и многих других целей.

:::note[Ссылки для изучения]

1. [Гайд по работе с XML документами](https://habr.com/ru/companies/simbirsoft/articles/704818/)
   :::

---

## <strong>Что такое</strong> <code>DTD</code><strong>?</strong> [#q-14bee738d69b812e87b3e9e7dc194a18]

<code>DTD</code> (Document Type Definition) — это набор правил, определяющих
структуру, элементы и атрибуты XML-документа. DTD используется для проверки
правильности и согласованности XML-документов.

#### Основные моменты&#58;

- <strong>Определение структуры&#58;</strong> Задает, какие элементы и атрибуты
  могут присутствовать в документе и в каком порядке.

- <strong>Валидация&#58;</strong> Позволяет проверить, соответствует ли
  XML-документ заданной структуре.

#### Пример&#58;

#### <code>DTD</code>&#58;

```java
<!ELEMENT person (name, age, email)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT email (#PCDATA)>
```

#### <code>XML</code>-документ&#58;

```html
<!DOCTYPE person SYSTEM "person.dtd">
<person>
  <name>John Doe</name>
  <age>30</age>
  <email>john.doe@example.com</email>
</person>
```

DTD помогает гарантировать, что XML-документы соответствуют ожидаемой структуре и содержат все необходимые элементы.

:::note[Ссылки для изучения]

1. [Гайд по работе с XML документами](https://habr.com/ru/companies/simbirsoft/articles/704818/)
   :::

---

## <strong>Чем</strong> <code>well&#45;formed XML</code> <strong>отличается от</strong> <code>valid XML</code><strong>?</strong> [#q-14bee738d69b81ecb610def97d82d960]

<code>Well&#45;formed XML</code> и <code>valid XML</code> имеют различия в
степени проверки их структуры и содержания&#58;

#### Well-formed XML&#58;

{/* prettier-ignore */}
- <strong>Определение&#58;</strong> Документ, который соответствует базовым правилам синтаксиса XML.

- <strong>Требования&#58;</strong>

    - Единый корневой элемент.

    - Правильное вложение и закрытие тегов.

    - Атрибуты заключены в кавычки.

    - Корректные специальные символы.

- <strong>Пример&#58;</strong>

    ```xml
    <note>
        <to>Alice</to>
        <from>Bob</from>
        <message>Hello!</message>
    </note>
    ```

#### Valid XML&#58;

{/* prettier-ignore */}
- <strong>Определение&#58;</strong> Документ, который не только well-formed, но и соответствует определению структуры, заданной DTD или XML Schema.

- <strong>Требования&#58;</strong>

    - Должен быть well-formed.

    - Должен соответствовать правилам и ограничениям, заданным в DTD или XML Schema.

- <strong>Пример&#58;</strong>

    ```html
    <!DOCTYPE note SYSTEM "note.dtd">
    <note>
        <to>Alice</to>
        <from>Bob</from>
        <message>Hello!</message>
    </note>
    ```

    ```java
    <!ELEMENT note (to, from, message)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT message (#PCDATA)>
    ```

:::note[Ссылки для изучения]

1. [Гайд по работе с XML документами](https://habr.com/ru/companies/simbirsoft/articles/704818/)
   :::

---

## <strong>Что такое «пространство имен» в</strong> <code>XML</code><strong>?</strong> [#q-14bee738d69b81fd87cac2ffda42167a]

«Пространство имен» в <code>XML</code> используется для уникальной идентификации элементов и атрибутов в <code>XML</code>-документе. Оно помогает избежать конфликтов имен, особенно когда разные <code>XML</code>-документы объединяются. Пространства имен определяются с помощью <code>URI</code> (Uniform Resource Identifier) и присваиваются элементам и атрибутам с использованием префиксов.

<strong>Пример&#58;</strong>

```xml
<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture">
  <h:table>
    <h:tr>
      <h:td>Apples</h:td>
      <h:td>Bananas</h:td>
    </h:tr>
  </h:table>

  <f:table>
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>
</root>
```

Здесь <code>h</code> и <code>f</code> - префиксы пространств имен, которые различают элементы <code>table</code> и <code>tr</code> в разных контекстах.

:::note[Ссылки для изучения]

1. [Гайд по работе с XML документами](https://habr.com/ru/companies/simbirsoft/articles/704818/)
   :::

---

## <strong>Какие типы существуют в</strong> <code>XSD</code><strong>?</strong> [#q-14bee738d69b81699be3cb1cb6a9209c]

В <code>XSD</code> (XML Schema Definition) существуют два основных типа данных&#58; простые типы (simple types) и составные типы (complex types).

#### Простые типы (Simple Types)

Простые типы данных представляют собой атомарные значения и не содержат элементов или атрибутов.

{/* prettier-ignore */}
1. <strong>Предопределенные типы&#58;</strong>

    - <code>string</code>

    - <code>boolean</code>

    - <code>decimal</code>

    - <code>integer</code>

    - <code>date</code>

    - <code>time</code>

    - и другие

1. <strong>Производные типы&#58;</strong> Создаются на основе предопределенных типов с использованием ограничений (restrictions).

    - Пример&#58;

        ```xml
        <xs:simpleType name="AgeType">
            <xs:restriction base="xs:integer">
                <xs:minInclusive value="0"/>
                <xs:maxInclusive value="120"/>
            </xs:restriction>
        </xs:simpleType>
        ```

#### Составные типы (Complex Types)

Составные типы данных могут содержать элементы и атрибуты.

{/* prettier-ignore */}
1. <strong>Complex Type with Elements&#58;</strong>

    - Пример&#58;

        ```xml
        <xs:complexType name="PersonType">
            <xs:sequence>
                <xs:element name="name" type="xs:string"/>
                <xs:element name="age" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
        ```

1. <strong>Complex Type with Attributes&#58;</strong>

    - Пример&#58;

        ```xml
        <xs:complexType name="PersonType">
            <xs:sequence>
                <xs:element name="name" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:integer" use="required"/>
        </xs:complexType>
        ```

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

:::note[Ссылки для изучения]

1. [Гайд по работе с XML документами](https://habr.com/ru/companies/simbirsoft/articles/704818/)
   :::

---

## <strong>Что такое</strong> <code>JAXP</code><strong>?</strong> [#q-14bee738d69b812a9837f7ba188e141d]

<code>JAXP</code> (Java API for XML Processing) — это интерфейс программирования
приложений (API) на языке Java для обработки <code>XML</code>-документов. Он
предоставляет стандартные методы для парсинга, генерации, трансформации и
проверки <code>XML</code>-документов. Основные компоненты <code>JAXP</code>
включают&#58;

1. <strong>Парсинг</strong>&#58; Поддерживает <code>SAX</code> (Simple API for
   XML) и <code>DOM</code> (Document Object Model) для чтения и обработки
   <code>XML</code>-документов.

1. <strong>Трансформация</strong>&#58; Использует <code>XSLT</code> (Extensible
   Stylesheet Language Transformations) для преобразования <code>XML</code>
   -документов в различные форматы.

1. <strong>Валидация</strong>&#58; Позволяет проверять <code>XML</code>
   -документы на соответствие заданным схемам (например, <code>XSD</code>).

<code>JAXP</code> обеспечивает гибкость и независимость от конкретных
реализаций, позволяя разработчикам использовать различные <code>XML</code>
-парсеры и процессоры трансформации.

:::note[Ссылки для изучения]

1. [Гайд по работе с XML документами](https://habr.com/ru/companies/simbirsoft/articles/704818/)
   :::
