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
131
132
133
134
135
136
137
138
139
140
141
142
|
---
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 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>
```
## DTD совместимость и определение XML Schema(схем/структуры)
Поддержка DTDs является повсеместным, потому что это довольно старая технология. К сожалению, современные функции XML как пространств имен(namespaces) не поддерживаются DTDs. Определения XML-схемы (XSDs) предназначены для замены DTDs которая в свою очередь предназначена для определения грамматики XML-документа.
## Ресурсы
* [Валидатор XML (ссылка на английском языке)](http://www.xmlvalidation.com)
## Для будущего прочтения
* [XML Schema Definitions Tutorial (ссылка на английском языке)](http://www.w3schools.com/schema/)
* [DTD руководство (ссылка на английском языке)](http://www.w3schools.com/xml/xml_dtd_intro.asp)
* [XML руководство (ссылка на английском языке)](http://www.w3schools.com/xml/default.asp)
* [использование XPath запросов для парсинга XML (ссылка на английском языке)](http://www.w3schools.com/xml/xml_xpath.asp)
|