| Правило |
Правильно |
Неправильно |
| Один корневой элемент |
<root>...</root> |
Несколько корневых |
| Все теги закрыты |
<tag>...</tag> или <tag/> |
<tag> без закрытия |
| Правильная вложенность |
<a><b></b></a> |
<a><b></a></b> |
| Регистрозависимость |
<Name></Name> |
<Name></name> |
| Атрибуты в кавычках |
id="123" |
id=123 |
<?xml version="1.0" encoding="UTF-8"?>
<element>content</element>
<selfClosing/>
<withAttribute id="123">content</withAttribute>
<product id="1" category="electronics" available="true">
<name>Laptop</name>
</product>
<!-- Это комментарий -->
<!--
Многострочный
комментарий
-->
- Буквы (любые):
<name>, <имя>
- Цифры (не в начале):
<item1>, <row2>
- Дефис:
<user-name>
- Подчеркивание:
<user_name>
- Точка:
<user.name>
- Начинать с цифры:
<1item>
- Начинать с xml/XML:
<xmlData>
- Пробелы:
<user name>
- Спецсимволы:
<user@name>
Избежать конфликтов имен при объединении XML из разных источников.
<book xmlns:bk="http://example.com/book">
<bk:title>XML Guide</bk:title>
</book>
<book xmlns="http://example.com/book">
<title>XML Guide</title>
</book>
<root xmlns:ns1="http://example.com/ns1"
xmlns:ns2="http://example.com/ns2">
<ns1:element>Data</ns1:element>
<ns2:element>Data</ns2:element>
</root>
| Тип |
Описание |
xs:string |
Любая строка |
xs:normalizedString |
Без переносов строк |
xs:token |
Без лишних пробелов |
| Тип |
Диапазон/Описание |
xs:integer |
Целое число |
xs:positiveInteger |
> 0 |
xs:nonNegativeInteger |
>= 0 |
xs:int |
-2147483648 до 2147483647 |
xs:decimal |
Десятичное число |
xs:float |
С плавающей точкой |
xs:double |
Двойной точности |
| Тип |
Формат |
Пример |
xs:date |
YYYY-MM-DD |
2025-12-10 |
xs:time |
hh:mm:ss |
14:30:00 |
xs:dateTime |
YYYY-MM-DDThh:mm:ss |
2025-12-10T14:30:00 |
| Тип |
Описание |
xs:boolean |
true, false |
xs:anyURI |
URI/URL |
xs:base64Binary |
Base64 данные |
<xs:simpleType name="Username">
<xs:restriction base="xs:string">
<xs:minLength value="3"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Email">
<xs:restriction base="xs:string">
<xs:pattern value="[^@]+@[^@]+\.[^@]+"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Status">
<xs:restriction base="xs:string">
<xs:enumeration value="pending"/>
<xs:enumeration value="approved"/>
<xs:enumeration value="rejected"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Age">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="150"/>
</xs:restriction>
</xs:simpleType>
| Назначение |
Паттерн |
| Email |
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} |
| Телефон |
\+?[0-9]{10,15} |
| Дата YYYY-MM-DD |
[0-9]{4}-[0-9]{2}-[0-9]{2} |
| Только буквы |
[a-zA-Z]+ |
| Буквы и цифры |
[a-zA-Z0-9]+ |
<xs:complexType name="Address">
<xs:sequence>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="zipCode" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Элементы должны идти именно в этом порядке.
<xs:complexType name="Person">
<xs:all>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
</xs:all>
</xs:complexType>
Элементы могут идти в любом порядке.
<xs:complexType name="Contact">
<xs:choice>
<xs:element name="email" type="xs:string"/>
<xs:element name="phone" type="xs:string"/>
<xs:element name="skype" type="xs:string"/>
</xs:choice>
</xs:complexType>
Только один из указанных элементов.
| Атрибуты |
Значение |
Описание |
minOccurs="0" |
0+ |
Необязательный |
minOccurs="1" |
1+ |
Обязательный (default) |
maxOccurs="1" |
0-1 |
Макс. один раз (default) |
maxOccurs="5" |
0-5 |
От 0 до 5 раз |
maxOccurs="unbounded" |
0-∞ |
Неограниченно |
<!-- Необязательный, может повторяться -->
<xs:element name="tag" type="xs:string"
minOccurs="0" maxOccurs="unbounded"/>
<!-- Необязательный, не повторяется -->
<xs:element name="description" type="xs:string"
minOccurs="0"/>
<!-- Обязательный, не повторяется -->
<xs:element name="id" type="xs:string"
minOccurs="1"/>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="status" type="xs:string" use="optional"/>
<xs:attribute name="version" type="xs:string" default="1.0"/>
<xs:attribute name="currency" type="xs:string" fixed="USD"/>
| Атрибут |
Описание |
use="required" |
Обязательный |
use="optional" |
Необязательный (default) |
default="value" |
Значение по умолчанию |
fixed="value" |
Фиксированное значение |
<?xml version="1.0" encoding="UTF-8"?>
<order id="ORD-123456">
<customer>John Smith</customer>
<item sku="PROD-001">
<name>Laptop</name>
<quantity>2</quantity>
<price>999.99</price>
</item>
<total>1999.98</total>
<status>processing</status>
<date>2025-12-10</date>
</order>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="StatusType">
<xs:restriction base="xs:string">
<xs:enumeration value="pending"/>
<xs:enumeration value="processing"/>
<xs:enumeration value="shipped"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="ItemType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="quantity">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="999"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
<xs:attribute name="sku" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="OrderType">
<xs:sequence>
<xs:element name="customer" type="xs:string"/>
<xs:element name="item" type="ItemType" maxOccurs="unbounded"/>
<xs:element name="total" type="xs:decimal"/>
<xs:element name="status" type="StatusType"/>
<xs:element name="date" type="xs:date"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
<xs:element name="order" type="OrderType"/>
</xs:schema>