Вы находитесь на странице: 1из 18

11/24/21, 2:23 PM XSD — умный XML / Хабр

КАК СТАТЬ АВТОРОМ Неделя тестировщиков Тест: реальное изобретение или выдумка?

Все потоки Разработка Администрирование Дизайн Менеджмент Маркетинг Научпоп

Medal 12 апреля 2010 в 10:25

XSD — умный XML


XML *

XSD — это язык описания структуры XML документа. Его также называют XML Schema. При
использовании XML Schema XML парсер может проверить не только правильность синтаксиса
XML документа, но также его структуру, модель содержания и типы данных.

Такой подход позволяет объектно-ориентированным языкам программирования легко создавать


объекты в памяти, что, несомненно, удобнее, чем разбирать XML как обычный текстовый файл.

Кроме того, XSD расширяем, и позволяет подключать уже готовые словари для описания
типовых задач, например веб-сервисов, таких как SOAP.

Стоит также упомянуть о том, что в XSD есть встроенные средства документирования, что
позволяет создавать самодостаточные документы, не требующие дополнительного описания.

Рассмотрим в качестве примера XSD документ, описывающий часть структуры аккаунта на хабре.

+39 398K 203

https://habr.com/ru/post/90696/ 1/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

Текст XSD схемы и XML документ, соответствующий этой схеме я не стал включать в статью из-
за их размера.

https://habr.com/ru/post/90696/
П XML 2/18
11/24/21, 2:23 PM XSD — умный XML / Хабр
Первая строчка схемы указывает, что документ является XML документом и использует
кодировку UTF-8.
<?xml version="1.0" encoding="UTF-8"?>

Со следующей строки начинается описания главного элемента документа — habra_user.

<xs:element name="habra_user">

Строки, документирующие элемент:

<xs:annotation>
<xs:documentation>Главный элемент схемы. Описывает пользователя
хабра</xs:documentation>
</xs:annotation>

Тег <xs:complexType> описывает «сложный» тип данных user_name. При желании его можно
вынести как отдельный тип данных, по аналогии с contact_info. Для этого, нужно блок
<xs:complexType> перенести в <xs:schema> и указать атрибут name, а элементу задать атрибут
type.

Элементы user_name, first_name, last_name имеют строковый тип и описывают пользователя, имя
и фамилию владельца аккаунта.

Элемент date_of_birth имеет тип данных «дата» и описывает дату рождения.

Дату регистрации описывает register_date, имеющий собственный тип данных customDateTime.


Значение этого тега будет задаваться с помощью атрибута value. На это указывают строки.

<xs:attribute name="value" use="required">

При этом атрибут — обязательный. Чтобы значение соответствовало требованиям, опишем


«проверки»:

<xs:simpleType>
https://habr.com/ru/post/90696/ 3/18
11/24/21, 2:23 PM XSD — умный XML / Хабр
p yp
<xs:restriction base="xs:string">

<xs:length value="19"/>
<xs:pattern value="[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:
[0-5][0-9]:[0-5][0-9]"/>
</xs:restriction>
</xs:simpleType>

В таком случае длина строки будет всегда 19, это задано тегом <xs:length> и само значение будет
соответствовать шаблону, указанным в теге <xs:pattern>.

Элементы contact_info и blog — массивы, на это указывает атрибут maxOccurs=«unbounded».

Тег <xs:choice> определяет то, что вложенным элементом будет один из элементов ICQ или
linkedin.

Тег <xs:sequence> указывает на то, что вложенные элементы будут blog_name и blog_url именно в
такой последовательности. Если последовательность не важна, то нужно использовать тег
<xs:all>.

Дополнительно о XSD схемах можно почитать Wikipedia и W3C. Для создания макета была
использована программа Altova XMLSpy.

Спасибо за внимание!

Теги: XSD, valid, XML, schema, validation

Хабы: XML

https://habr.com/ru/post/90696/ 4/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

Редакторский дайджест
Присылаем лучшие статьи раз в месяц

Электропочта

69 0
Карма Рейтинг

Александр Радионов @Medal


Пользователь

Комментарии 34

sergonavt 12.04.2010 в 11:09

«Такой подход позволяет объектно-ориентированным языкам программирования легко создавать


объекты в памяти»

Легко — это последнее слово, которое приходит в голову при работе с xsd. Сложно описывать (RelaxNG
проще и гибче), сложно валидировать, очень сложно программно создавать новый xml по имеющемуся
xsd.

XSD полезен. Статьи про XSD нужны. Но не используйте в статьях про одно из самых безумных
порождений W3C слова «легко», «просто», «универсально», я вас умоляю.

+13 Ответить

https://habr.com/ru/post/90696/ 5/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

НЛО прилетело и опубликовало эту надпись здесь

allex 12.04.2010 в 16:29

C удовольствием познакомился с RELAX NG года 4 назад, жаль практики мало. Рекомендую всем,
кому необходимо описывать структуру XML документов, обратить внимание на RELAX NG. У
знакомых с BNF сложностей в освоении RELAX NG не будет. У RELAX NG есть два синтаксиса — XML
и компактный.

Смое смешное, что класс документов, которые можно описать с помощью RELAX NG, шире, чем тех,
которые можно описать с помощью XML Schema! Готов поискать пруфлинк.

Пример из статьи на RELAX NG (Compact Syntax):

# Это — документационный комментарий к стартовому правилу


start = HabraUser

## Главный элемент схемы. Описывает пользователя хабра


HabraUser = element habra_user {
attribute user_name { text },
attribute first_name { text },
attribute last_name { text },
# не помню, есть ли встроенный тип для даты
attribute date_of_birth {… },
# для ограничений используются дополнительные средства типа Schematron
attribute register_date { text },
( ContactInfo )*,
( Blogs )*
}

ContactInfo = ICQ | LinkedIn

Blogs = element blog name {… }


https://habr.com/ru/post/90696/ 6/18
11/24/21, 2:23 PM XSD — умный XML / Хабр
ogs e e e t b og_ a e { }
element blog_url {… }

+4 Ответить

Medal 12.04.2010 в 16:37

Да, обратить внимание на Relax NG пожалуй стоит, но вот Compact Syntax — это ведь не XML.
Значит нужен дополнительный парсер, собственно, зачем это нужно?

А обычный Relax NG, конечно, проще XSD, но не на столько, чтобы переходить на него. XSD — это
стандарт, который очень широко распространен. Гораздо шире, чем RNG.

Любой технологии — свое место.

+1 Ответить

Cancel 12.04.2010 в 17:04

Без очень дорогого редактора читать XSD очень тяжко. А RNG/RNC влёт преобразуется один в
другой, и очень легко читается.

0 Ответить

allex 12.04.2010 в 17:11

Преимущества текстовых форматов общеизвестны. XML проще парсить, но сложнее писать. Для
редактирования XML удобный редактор найти можно, но все равно скорее всего будут вылезать
задачи, когда придется смотреть на голый XML (например, дифы сравнивать). А парсер для RNG
есть, RNGOM проект на dev.java.net.

Мне сложно придумать что-либо менее достойное быть стандартом, чем XSD :) Этот тот случай,
когда я бы приложил усилия, чтоб сменить мейнстрим, чем плыть в нем.

https://habr.com/ru/post/90696/ 7/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

+1 Ответить

sylvio 12.04.2010 в 23:39

Прямо сейчас пишу xsd-парсер, это ад. over 20 встроенных базовых типов.

0 Ответить

sp1se 27.01.2011 в 11:31

100%!!) слова «легко», «просто», «универсально» нельзя ставить в одно предложение с XML,XSL,XSD
не в коем случае! исключение только если перед ними стоит частица НЕ!)

0 Ответить

Gospodin 12.04.2010 в 14:13

Стоит отметить то что XSD можно использовать при ручном редактировании XML в Visual Studio, напр.
есть инструкция как там организовать авто-дополнение кода при работе с SVG документами.

0 Ответить

НЛО прилетело и опубликовало эту надпись здесь

mikhailian 12.04.2010 в 14:16

Унылый XML…

-10 Ответить

vybe 12.04.2010 в 14:35

https://habr.com/ru/post/90696/
К 'XSD S h ' 'XML S h ' И 'XSD' 8/18
11/24/21, 2:23 PM XSD — умный XML / Хабр
Классно, только вот не 'XSD Schema', а 'XML Schema'. Или просто отдельно 'XSD'.

+6 Ответить

НЛО прилетело и опубликовало эту надпись здесь

Medal 12.04.2010 в 16:13

Поправил, спасибо.

0 Ответить

Beholder 12.04.2010 в 14:53

Тут особенно заметно, насколько XML многословен (в смысле «много букоф»).

0 Ответить

andreycha 12.04.2010 в 15:07

Потому что он сочетает в себе не только данные, но и саму структуру данных.

0 Ответить

Beholder 12.04.2010 в 15:14

Не, потому что, в частности, на каждый <foo:barbazqux ...> надо написать свой
</foo:barbazqux> . И потому что имена атрибутов пишутся лишь для того, чтобы обозначить, что
тут атрибут.

0 Ответить

allter 12.04.2010 в 18:00


https://habr.com/ru/post/90696/ 9/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

И это хорошо. Желающие могут назвать элементы в стиле <x:y42></x:y42> и получить экономию в
размере ценой сотни лучей ненависти в свой адрес от тех, кто будет дебажить эти данные/ПО.

0 Ответить

Beholder 13.04.2010 в 11:47

Многословность не в названии самих элементов, а в необходимости многословных закрывающих


тегов и в обязательности наименования параметров-атрибутов.

0 Ответить

allter 13.04.2010 в 12:08

Во всяком случае, когда отлаживаешься, при большой степени вложенности объектов это
лучше, чем подсчитывать скобки (а-ля JSON, который очень write-only), количество символов/
байт (а-ля Netstrings) или вообще пробелов (а-ля YAML, который больше подходит для
статического задания структур). Человеколюбивей XML пока ничего не придумали(?)…

К слову, в программах я часто пишу в стиле:


if ( predicate_expr )
{
//… больше 20 строк кода…
} // if ( predicate_expr )

Иначе легко запутаться.

0 Ответить

uglock 12.04.2010 в 15:41

https://habr.com/ru/post/90696/ 10/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

Вы так говорите, как будто это что-то плохое.

+3 Ответить

ruzzz 12.04.2010 в 15:36

А в чем картинку делали?

0 Ответить

sgzmd 12.04.2010 в 15:39

Похоже что XmlSpy — есть такой продухт под Виндоуз.

+1 Ответить

zhekanax 12.04.2010 в 16:57

А какой продукт есть не под Виндоуз? :)


Скоро буду писать документ про xml, хотелось бы автоматически дополнить такими полезными
красивостями.

0 Ответить

Cancel 12.04.2010 в 17:05

В Eclipse есть дизайнер, но он очень уж специфичный. Больше ничего не нашёл. Есть ещё какой-
то очень платный, но я его только мельком видел.

+1 Ответить

НЛО прилетело и опубликовало эту надпись здесь

https://habr.com/ru/post/90696/ 11/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

Medal 12.04.2010 в 16:09

XMLSpy. В конце статьи написано

+1 Ответить

ruzzz 12.04.2010 в 16:14

Спасибо, не обратил внимание.

0 Ответить

kkray 12.04.2010 в 20:46

копал на эту тему месяца два назад, вот классная ссылочка:


www.citforum.ru/internet/xml/scheme/
после прочтения сваял себе xsd-файлик, теперь в студии у меня автокомплит и проверка синтаксиса
XML-файлов. сказка просто.

+1 Ответить

sylvio 12.04.2010 в 23:41

О чем топик-то? О том, что «XSD это так клево и вот — поглядите я на вики статью нашел»?

+2 Ответить

Medal 13.04.2010 в 07:00

Статья — реальный пример, как нужно создавать XSD. Ничего подобного на хабре не было.

-2 Ответить

https://habr.com/ru/post/90696/ 12/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

afi 13.04.2010 в 11:32

очередной Hello, world…

+2 Ответить

Medal 13.04.2010 в 12:21

Если написано просто о сложных вещах, о которых не все знают — это не значит плохо.

Напишите лучше, все в Ваших руках.

0 Ответить

НЛО прилетело и опубликовало эту надпись здесь

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Реклама

ПОХОЖИЕ ПУБЛИКАЦИИ

29 января 2019 в 02:36

Jaxb (XJC) генерация классов из XML Schema (XSD) с описаниями классов и полей в виде
аннотаций. XJC плагин

+12 21K 35 5 +5

https://habr.com/ru/post/90696/ 13/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

26 мая 2013 в 00:45

Простой JSON Schema валидатор для Objective-C

+8 9.6K 45 6 +6

7 ноября 2008 в 16:28

Аппаратный XML-парсер от Intel

+64 2.8K 9 57 +57

МИНУТОЧКУ ВНИМАНИЯ Разместить

Событие Турбо Мегапост

YaTalks 2021: почему IT — новый Трудно быть богом: обсуждаем, Смотрим на изобретения,
космос как строить стек в хаосе задач получившие James Dyson Award

ВОПРОСЫ И ОТВЕТЫ

Как подтянуть xml либо json в js из той же директории?


JavaScript · Простой · 1 ответ

https://habr.com/ru/post/90696/ 14/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

Как загрузить содержимое XML в ListBox?


Delphi · Средний · 1 ответ
Как пропарсить XML документ C#?
C# · Простой · 1 ответ

React native как извлечь данные xml?


XML · Средний · 0 ответов

Есть ли сервисы которые режут xml файл?


XML · Простой · 0 ответов

Больше вопросов на Хабр Q&A

ЛУЧШИЕ ПУБЛИКАЦИИ ЗА СУТКИ

вчера в 20:43

Пока, Хабр

+126 31K 25 328 +328

вчера в 14:10

Как работает аллергия и что такое «прививка от аллергии»

+44 8.2K 58 53 +53

вчера в 13:54

Есть чем зашить AVR'ку?

+41 4.3K 31 7 +7

https://habr.com/ru/post/90696/ 15/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

вчера в 11:00

Почему большинство разработчиков заканчивают средними: или как мы убиваем свою


креативность

+38 6.4K 49 16 +16

вчера в 17:03

Как хорошо уметь читать! А уметь хорошо читать — ещё лучше

+36 4.4K 55 9 +9

Реклама

ЧИТАЮТ СЕЙЧАС

Пока, Хабр

31K 328 +328

Если мошенники украли деньги с банковской карты — не спешите в полицию

113K 130 +130

Турецкая лира упала на 15%, Apple приостановила продажи своей продукции в стране

2.5K 2 +2

Команда модераторов Rust уволилась в полном составе: они хотели возможность банить Core Team и
требовали соблюдения CoC

https://habr.com/ru/post/90696/ 16/18
11/24/21, 2:23 PM XSD — умный XML / Хабр

37K 172 +172

Как я разблокировал Upwork профиль и заработал более $250k за год

5.6K 13 +13

YaTalks 2021: IT как новый космос

Турбо

Ваш аккаунт Разделы Информация Услуги

Войти Публикации Устройство сайта Реклама

Регистрация Новости Для авторов Тарифы

Хабы Для компаний Контент

Компании Документы Семинары

Авторы Соглашение Мегапроекты

Песочница Конфиденциальность

Настройка языка
https://habr.com/ru/post/90696/ 17/18
11/24/21, 2:23 PM XSD — умный XML / Хабр
Настройка языка

О сайте

Техническая поддержка

Вернуться на старую версию

© 2006–2021 «Habr»

https://habr.com/ru/post/90696/ 18/18

Вам также может понравиться