summaryrefslogtreecommitdiffhomepage
path: root/ru-ru/xml-ru.html.markdown
blob: d35c91f07c40c6c74303894acdaf9107365a7f7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
---
language: xml
filename: learnxml-ru.xml
contributors:
  - ["João Farias", "https://github.com/JoaoGFarias"]
translators:
  - ["Dmitry Bessonov", "https://github.com/TheDmitry"]
lang: ru-ru
---

XML - это язык разметки, предназначенный для хранения и передачи данных.

В отличие от HTML, XML не определяет, как отображать или формировать данные, он только содержит их.

* XML-Синтаксис

```xml
<!-- Комментарии в XML выглядят вот так -->

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="КУЛИНАРИЯ">
    <title lang="ru">Итальянская кухня каждый день</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="ДЕТИ">
    <title lang="ru">Гарри Поттер</title>
    <author>Дж. К. Роулинг</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="ВСЕМИРНАЯ ПАУТИНА">
    <title lang="ru">Изучаем XML</title>
    <author>Эрик Рэй</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

<!-- Вышеописанный документ - типичный XML-файл.
  Он начинается с определения, информирующее о некоторых метаданных (необязательно).
  
  XML использует древовидную структуру. У вышеописанного документа
  корневой узел - 'bookstore', который содержит три дочерних узла - все 'book'-узлы.
  Такие узлы содержат еще дочерние узлы и т.д.
  
  Узлы создаются с помощью открывающих/закрывающих тегов,
  а дочерние узлы - это узлы между открывающимися и закрывающимися тегами.-->


<!-- XML содержит в себе два типа данных:
  1 - Атрибуты -> Это метаданные узлов.
      Обычно XML-парсер использует эту информацию, чтобы хранить свойства данных.
      Атрибут изображается путем вписывания его в скобки в пределах открытого тега
  2 - Элементы -> Это чистые данные.
      Это то, что парсер извлечет из XML-файла.
      Элементы идут между открытыми и закрытыми тегами без скобок. -->
      
  
<!-- Внизу элемент с двумя атрибутами -->
<file type="gif" id="4293">компьютер.gif</file>


```

* Хорошо отформатированный документ x Проверка достоверности

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

XML-документ, который следует описанию документа, называется действительным,
относительно этого документа. 

С таким инструментом, вы можете проверить XML-данные вне логики приложения.

```xml

<!-- Ниже вы можете увидеть упрощенную версию документа книжного магазина,
  с дополнением DTD-определения.-->

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Bookstore.dtd">
<bookstore>
  <book category="КУЛИНАРИЯ">
    <title >Итальянская кухня каждый день</title>
    <price>30.00</price>
  </book>
</bookstore>

<!-- Этот DTD может быть чем-то вроде:-->

<!DOCTYPE note
[
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title,price)>
<!ATTLIST book category CDATA "Литература">
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>


<!-- DTD начинается с объявления.
  Затем объявляется корневой узел, требующий 1 или более дочерних узлов 'book'.
  Каждый 'book' должен содержать точно один 'title' и 'price', и атрибут,
  называемый 'category', со значением "Литература" по умолчанию.
  Узлы 'title' и 'price' содержат анализируемые символьные данные.-->

<!-- DTD может быть объявлен в самом XML-файле.-->

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

<!DOCTYPE note
[
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title,price)>
<!ATTLIST book category CDATA "Литература">
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>

<bookstore>
  <book category="КУЛИНАРИЯ">
    <title >Итальянская кухня каждый день</title>
    <price>30.00</price>
  </book>
</bookstore>
```