компонент может иметь атрибут xml: lang, в котором указывается язык написания самой аннотации.
разработки, таблицы стилей и других приложений. Например, в середине компонента appInfo можно представить информацию о том, какие фасетки могут быть применены к каждому простого типа.
Типы данных
Объявление элемента
Обратите также внимание на то, что при указании типа элемента обязательно необходимо задавать пространство имен:
Объявление атрибутов
Необязательный атрибут use может принимать одно из следующих значений:
Простые и комплексные типы данных
simpleType
Простые типы в основном используются для сужение типов (restriction)
Cужение типов (restriction)
С помощью сужение типов (restriction) Мы можем контролировать любой тип данных на наличие его значения то есть ограничивать его значения Приме: Схема
Название фасетки
Описание
Наибольшее значение, которое больше не входит в определяем тип
Наибольшее значение определяемого типа
Наименьшее значение, которое больше не входит в Определяемый тип
Наименьшее значение определяемого типа
Общее количество цифр в определяемого числовом типе; сужение типа decimal
Количество цифр в дробной части числа
Длина значений определяемого типа
Наибольшая длина значений определяемого типа
Наименьшее длина значений определяемого типа
Одно из перечисленных значений
В тегах-фасетка также могут иметь атрибуты. Эти атрибуты называют базисными фасетками (fundamental facets). Среди них выделяют:
complexType
Схема: базовый элемент
Группы элементов
Группа позволяет описать общие элементы. (работает как include) Схема:
Цель XML-схемы является определение правовых строительных блоков документа XML:
Зачем изучать XML-схемы?
В мире XML, сотни стандартных форматов XML в ежедневном использовании.
Многие из этих стандартов XML определяются XML-схемы.
Типы XML-схемы данных Поддержка
Одна из самых больших прочности XML-схем является поддержка типов данных.
XML-схемы используют синтаксис XML
Еще одна большая сила о XML-схемы является то, что они написаны на XML.
XML-схемы являются расширяемым, потому что они написаны на XML.
С помощью расширяемого определения схемы вы можете:
XML-схемы Secure Data Communication
С помощью XML-схемы, отправитель может описать данные таким образом, что приемник будет понять.
Тем не менее, XML-элемент с типом данных, как показано ниже:
Хорошо сформированная не хватает
Хорошо сформированный XML-документ представляет собой документ, который соответствует правилам синтаксиса XML, как:
Даже если документы хорошо сформированные они все еще могут содержать ошибки, и эти ошибки могут иметь серьезные последствия.
Подумайте о следующей ситуации: вы заказываете 5 брутто лазерных принтеров, а не 5 лазерных принтеров. С помощью XML-схем, большинство из этих ошибок может быть перехвачено вашей программой валидация.
Если вы тестируете API, то должны знать про два основных формата передачи данных:
XML, в переводе с англ eXtensible Markup Language — расширяемый язык разметки. Используется для хранения и передачи данных. Так что увидеть его можно не только в API, но и в коде.
Этот формат рекомендован Консорциумом Всемирной паутины (W3C), поэтому он часто используется для передачи данных по API. В SOAP API это вообще единственно возможный формат входных и выходных данных!
См также: Что такое API — общее знакомство с API Что такое JSON — второй популярный формат Введение в SOAP и REST: что это и с чем едят — видео про разницу между SOAP и REST.
Так что давайте разберемся, как он выглядит, как его читать, и как ломать! Да-да, а куда же без этого? Надо ведь выяснить, как отреагирует система на кривой формат присланных данных.
Содержание
Как устроен XML
Возьмем пример из документации подсказок Дадаты по ФИО:
И разберемся, что означает эта запись.
В XML каждый элемент должен быть заключен в теги. Тег — это некий текст, обернутый в угловые скобки:
Текст внутри угловых скобок — название тега. Тега всегда два:
Ой, ну ладно, подловили! Не всегда. Бывают еще пустые элементы, у них один тег и открывающий, и закрывающий одновременно. Но об этом чуть позже!
С помощью тегов мы показываем системе «вот тут начинается элемент, а вот тут заканчивается». Это как дорожные знаки:
— На въезде в город написано его название: Москва — На выезде написано то же самое название, но перечеркнутое: Москва*
* Пример с дорожными знаками я когда-то давно прочитала в статье Яндекса, только ссылку уже не помню. А пример отличный!
Корневой элемент
В любом XML-документе есть корневой элемент. Это тег, с которого документ начинается, и которым заканчивается. В случае REST API документ — это запрос, который отправляет система. Или ответ, который она получает.
Чтобы обозначить этот запрос, нам нужен корневой элемент. В подсказках корневой элемент — «req».
Он мог бы называться по другому:
Да как угодно. Он показывает начало и конец нашего запроса, не более того. А вот внутри уже идет тело документа — сам запрос. Те параметры, которые мы передаем внешней системе. Разумеется, они тоже будут в тегах, но уже в обычных, а не корневых.
Значение элемента
Значение элемента хранится между открывающим и закрывающим тегами. Это может быть число, строка, или даже вложенные теги!
Вот у нас есть тег «query». Он обозначает запрос, который мы отправляем в подсказки.
Внутри — значение запроса.
Это как если бы мы вбили строку «Виктор Иван» в GUI (графическом интерфейсе пользователя):
Пользователю лишняя обвязка не нужна, ему нужна красивая формочка. А вот системе надо как-то передать, что «пользователь ввел именно это». Как показать ей, где начинается и заканчивается переданное значение? Для этого и используются теги.
Система видит тег «query» и понимает, что внутри него «строка, по которой нужно вернуть подсказки».
Параметр count = 7 обозначает, сколько подсказок вернуть в ответе. Если тыкать подсказки на демо-форме Дадаты, нам вернется 7 подсказок. Это потому, что туда вшито как раз значение count = 7. А вот если обратиться к документации метода, count можно выбрать от 1 до 20.
Откройте консоль разработчика через f12, вкладку Network, и посмотрите, какой запрос отправляется на сервер. Там будет значение count = 7.
Атрибуты элемента
У элемента могут быть атрибуты — один или несколько. Их мы указываем внутри отрывающегося тега после названия тега через пробел в виде
Зачем это нужно? Из атрибутов принимающая API-запрос система понимает, что такое ей вообще пришло.
Например, мы делаем поиск по системе, ищем клиентов с именем Олег. Отправляем простой запрос:
А в ответ получаем целую пачку Олегов! С разными датами рождения, номерами телефонов и другими данными. Допустим, что один из результатов поиска выглядит так:
Давайте разберем эту запись. У нас есть основной элемент party.
У него есть 3 атрибута:
Внутри party есть элементы field.
У элементов field есть атрибут name. Значение атрибута — название поля: имя, дата рождения, тип или номер телефона. Так мы понимаем, что скрывается под конкретным field.
Это удобно с точки зрения поддержки, когда у вас коробочный продукт и 10+ заказчиков. У каждого заказчика будет свой набор полей: у кого-то в системе есть ИНН, у кого-то нету, одному важна дата рождения, другому нет, и т.д.
Но, несмотря на разницу моделей, у всех заказчиков будет одна XSD-схема (которая описывает запрос и ответ):
— есть элемент party; — у него есть элементы field; — у каждого элемента field есть атрибут name, в котором хранится название поля.
А вот конкретные названия полей уже можно не описывать в XSD. Их уже «смотрите в ТЗ». Конечно, когда заказчик один или вы делаете ПО для себя или «вообще для всех», удобнее использовать именованные поля — то есть «говорящие» теги. Какие плюшки у этого подхода:
— При чтении XSD сразу видны реальные поля. ТЗ может устареть, а код будет актуален. — Запрос легко дернуть вручную в SOAP Ui — он сразу создаст все нужные поля, нужно только значениями заполнить. Это удобно тестировщику + заказчик иногда так тестирует, ему тоже хорошо.
В общем, любой подход имеет право на существование. Надо смотреть по проекту, что будет удобнее именно вам. У меня в примере неговорящие названия элементов — все как один будут field. А вот по атрибутам уже можно понять, что это такое.
Помимо элементов field в party есть элемент attribute. Не путайте xml-нотацию и бизнес-прочтение:
У элемента attribute есть атрибуты:
Такая вот XML-ка получилась. Причем упрощенная. В реальных системах, где хранятся физ лица, данных сильно больше: штук 20 полей самого физ лица, несколько адресов, телефонов, емейл-адресов…
Но прочитать даже огромную XML не составит труда, если вы знаете, что где. И если она отформатирована — вложенные элементы сдвинуты вправо, остальные на одном уровне. Без форматирования будет тяжеловато…
А так всё просто — у нас есть элементы, заключенные в теги. Внутри тегов — название элемента. Если после названия идет что-то через пробел: это атрибуты элемента.
XML пролог
Иногда вверху XML документа можно увидеть что-то похожее:
Эта строка называется XML прологом. Она показывает версию XML, который используется в документе, а также кодировку. Пролог необязателен, если его нет — это ок. Но если он есть, то это должна быть первая строка XML документа.
UTF-8 — кодировка XML документов по умолчанию.
XSD-схема
XSD (XML Schema Definition) — это описание вашего XML. Как он должен выглядеть, что в нем должно быть? Это ТЗ, написанное на языке машины — ведь схему мы пишем… Тоже в формате XML! Получается XML, который описывает другой XML.
Фишка в том, что проверку по схеме можно делегировать машине. И разработчику даже не надо расписывать каждую проверку. Достаточно сказать «вот схема, проверяй по ней».
Если мы создаем SOAP-метод, то указываем в схеме:
Поэтому зачем запускать сложную процедуру, если запрос заведом «плохой»? И выдавать ошибку через 5 минут, а не сразу? Валидация по схеме помогает быстро отсеять явно невалидные запросы, не нагружая систему.
Более того, похожую защиту ставят и некоторые программы-клиенты для отправки запросов. Например, SOAP Ui умеет проверять ваш запрос на well formed xml, и он просто не отправит его на сервер, если вы облажались. Экономит время на передачу данных, молодец!
А простому пользователю вашего SOAP API схема помогает понять, как составить запрос. Кто такой «простой пользователь»?
Итого, как используется схема при разработке SOAP API:
Правильный запрос
Неправильный запрос
Нет обязательного поля name
Опечатка в названии тега (mail вместо email)
.
.
Попробуем написать для него схему. В запросе должны быть 3 элемента (email, name, password) с типом «string» (строка). Пишем:
А в WSDl сервиса она записана еще проще:
Конечно, в схеме могут быть не только строковые элементы. Это могут быть числа, даты, boolean-значения и даже какие-то свои типы:
А еще в схеме можно ссылаться на другую схему, что упрощает написание кода — можно переиспользовать схемы для разных задач.
Практика: составляем свой запрос
Ок, теперь мы знаем, как «прочитать» запрос для API-метода в формате XML. Но как его составить по ТЗ? Давайте попробуем. Смотрим в документацию. И вот почему я даю пример из Дадаты — там классная документация!
Что, если я хочу, чтобы мне вернуть только женские ФИО, начинающиеся на «Ан»? Берем наш исходный пример:
В первую очередь меняем сам запрос. Теперь это уже не «Виктор Иван», а «Ан»:
Далее смотрим в ТЗ. Как вернуть только женские подсказки? Есть специальный параметр — gender. Название параметра — это название тегов. А внутри уже ставим пол. «Женский» по английски будет FEMALE, в документации также. Итого получили:
Ненужное можно удалить. Если нас не волнует количество подсказок, параметр count выкидываем. Ведь, согласно документации, он необязательный. Получили запрос:
Вот и все! Взяли за основу пример, поменяли одно значение, один параметр добавили, один удалили. Не так уж и сложно. Особенно, когда есть подробное ТЗ и пример )))
Попробуй сам! Напишите запрос для метода MagicSearch в Users. Мы хотим найти всех Ивановых по полному совпадению, на которых висят актуальные задачи.
Well Formed XML
Разработчик сам решает, какой XML будет считаться правильным, а какой нет. Но есть общие правила, которые нельзя нарушать. XML должен быть well formed, то есть синтаксически корректный.
Чтобы проверить XML на синтаксис, можно использовать любой XML Validator (так и гуглите). Я рекомендую сайт w3schools. Там есть сам валидатор + описание типичных ошибок с примерами.
В готовый валидатор вы просто вставляете свой XML (например, запрос для сервера) и смотрите, всё ли с ним хорошо. Но можете проверить его и сами. Пройдитесь по правилам синтаксиса и посмотрите, следует ли им ваш запрос.
Правила well formed XML:
Давайте пройдемся по каждому правилу и обсудим, как нам применять их в тестировании. То есть как правильно «ломать» запрос, проверяя его на well-formed xml. Зачем это нужно? Посмотреть на фидбек от системы. Сможете ли вы по тексту ошибки понять, где именно облажались?
1. Есть корневой элемент
Нельзя просто положить рядышком 2 XML и полагать, что «система сама разберется, что это два запроса, а не один». Не разберется. Потому что не должна.
И если у вас будет лежать несколько тегов подряд без общего родителя — это плохой xml, не well formed. Всегда должен быть корневой элемент:
Нет
Да
Есть элементы «test» и «dev», но они расположены рядом, а корневого, внутри которого все лежит — нету. Это скорее похоже на 2 XML документа
А вот тут уже есть элемент credential, который является корневым
Что мы делаем для тестирования этого условия? Правильно, удаляем из нашего запроса корневые теги!
2. У каждого элемента есть закрывающийся тег
Тут все просто — если тег где-то открылся, он должен где-то закрыться. Хотите сломать? Удалите закрывающийся тег любого элемента.
Но тут стоит заметить, что тег может быть один. Если элемент пустой, мы можем обойтись одним тегом, закрыв его в конце:
Это тоже самое, что передать в нем пустое значение
Аналогично сервер может вернуть нам пустое значение тега. Можно попробовать послать пустые поля в Users в методе FullUpdateUser. И в запросе это допустимо (я отправила пустым поле name1), и в ответе SOAP Ui нам именно так и отрисовывает пустые поля.
Итого — если есть открывающийся тег, должен быть закрывающийся. Либо это будет один тег со слешом в конце.
Для тестирования удаляем в запросе любой закрывающийся тег.
3. Теги регистрозависимы
Как написали открывающий — также пишем и закрывающий. ТОЧНО ТАК ЖЕ! А не так, как захотелось.
А вот для тестирования меняем регистр одной из частей. Такой XML будет невалидным
4. Правильная вложенность элементов
Элементы могут идти друг за другом
Один элемент может быть вложен в другой
Но накладываться друг на друга элементы НЕ могут!
5. Атрибуты оформлены в кавычках
Даже если вы считаете атрибут числом, он будет в кавычках:
Для тестирования пробуем передать его без кавычек:
Итого
XML (eXtensible Markup Language) используется для хранения и передачи данных.
Передача данных — это запросы и ответы в API-методах. Если вы отправляете SOAP-запрос, вы априори работаете именно с этим форматом. Потому что SOAP передает данные только в XML. Если вы используете REST, то там возможны варианты — или XML, или JSON.
Хранение данных — это когда XML встречается внутри кода. Его легко понимает как машина, так и человек. В формате XML можно описывать какие-то правила, которые будут применяться к данным, или что-то еще.
Вот пример использования XML в коде open-source проекта folks. Я не знаю, что именно делает JacksonJsonProvider, но могу «прочитать» этот код — есть функционал, который мы будем использовать (featuresToEnable), и есть тот, что нам не нужен(featuresToDisable).
Формат XML подчиняется стандартам. Синтаксически некорректный запрос даже на сервер не уйдет, его еще клиент порежет. Сначала проверка на well formed, потом уже бизнес-логика.
Правила well formed XML:
Если вы тестировщик, то при тестировании запросов в формате XML обязательно попробуйте нарушить каждое правило! Да, система должна уметь обрабатывать такие ошибки и возвращать адекватное сообщение об ошибке. Но далеко не всегда она это делает.
А если система публичная и возвращает пустой ответ на некорректный запрос — это плохо. Потому что разработчик другой системы налажает в запросе, а по пустому ответу даже не поймет, где именно. И будет приставать к поддержке: «Что же у меня не так?», кидая информацию по кусочкам и в виде скринов исходного кода. Оно вам надо? Нет? Тогда убедитесь, что система выдает понятное сообщение об ошибке!
Что такое JSON — второй популярный формат
PS — больше полезных статей ищите в моем блоге по метке «полезное». А полезные видео — на моем youtube-канале
XSD — это язык описания структуры XML документа. Его также называют XML Schema. При использовании XML Schema XML парсер может проверить не только правильность синтаксиса XML документа, но также его структуру, модель содержания и типы данных.
Такой подход позволяет объектно-ориентированным языкам программирования легко создавать объекты в памяти, что, несомненно, удобнее, чем разбирать XML как обычный текстовый файл.
Кроме того, XSD расширяем, и позволяет подключать уже готовые словари для описания типовых задач, например веб-сервисов, таких как SOAP.
Стоит также упомянуть о том, что в XSD есть встроенные средства документирования, что позволяет создавать самодостаточные документы, не требующие дополнительного описания.
Рассмотрим в качестве примера XSD документ, описывающий часть структуры аккаунта на хабре.
Текст XSD схемы и XML документ, соответствующий этой схеме я не стал включать в статью из-за их размера.
Первая строчка схемы указывает, что документ является XML документом и использует кодировку UTF-8.
xs:annotation > xs:documentation > Главный элемент схемы. Описывает пользователя хабра xs:documentation > xs:annotation >
Тег описывает «сложный» тип данных user_name. При желании его можно вынести как отдельный тип данных, по аналогии с contact_info. Для этого, нужно блок перенести в и указать атрибут name, а элементу задать атрибут type.
Элементы user_name, first_name, last_name имеют строковый тип и описывают пользователя, имя и фамилию владельца аккаунта.
Элемент date_of_birth имеет тип данных «дата» и описывает дату рождения.
Дату регистрации описывает register_date, имеющий собственный тип данных customDateTime. Значение этого тега будет задаваться с помощью атрибута value. На это указывают строки.
xs:simpleType > xs:restriction base =»xs:string» > xs:length value =»19″ /> xs:pattern value =»1659-14-27 11:57:51″ /> xs:restriction > xs:simpleType >
Элементы contact_info и blog — массивы, на это указывает атрибут maxOccurs=«unbounded».
Тег определяет то, что вложенным элементом будет один из элементов ICQ или linkedin.
Дополнительно о XSD схемах можно почитать Wikipedia и W3C. Для создания макета была использована программа Altova XMLSpy.
Определение схемы XML, широко известное как XSD, является способом точного описания языка XML. XSD проверяет правильность структуры и словаря XML-документа по отношению к грамматическим правилам соответствующего языка XML.
XML-документ может быть определен как —
На следующей диаграмме показано, как XSD используется для структурирования документов XML:
Вот простой код XSD. Посмотрите на это.
Характеристики
Вот список некоторых популярных функций XSD —
Синтаксис XSD
XML XSD хранится в отдельном документе, и затем документ может быть связан с документом XML для его использования.
Синтаксис
Основной синтаксис XSD следующий:
Элемент
Схема является корневым элементом XSD, и это всегда требуется.
Приведенный выше фрагмент указывает, что любые элементы, объявленные в этой схеме, должны быть квалифицированы в пространстве имен, прежде чем использовать их в любом документе XML. Это необязательно.
Схема ссылок
Взгляните на следующую схему ссылок:
Приведенный выше фрагмент определяет объявление пространства имен по умолчанию. Это пространство имен используется средством проверки схемы, что все элементы являются частью этого пространства имен. Это необязательно.
XSD — валидация
Мы будем использовать XSD-валидатор на основе Java для валидирования student.xml и по адресу student.xsd.
students.xml
students.xsd
XSDValidator.java
Шаги для проверки XML на XSD
Скопируйте файл XSDValidator.java в любое место, например, E: > java
Скопируйте Students.xml в то же место E: > Java
Скопируйте Students.xsd в том же месте E: > Java
Скомпилируйте XSDValidator.java с помощью консоли. Убедитесь, что на вашем компьютере установлен JDK 1.5 и более поздних версий и настроены пути к классам. Подробнее о том, как использовать JAVA, смотрите Учебное пособие по JAVA.
Скопируйте файл XSDValidator.java в любое место, например, E: > java
Скопируйте Students.xml в то же место E: > Java
Скопируйте Students.xsd в том же месте E: > Java
Скомпилируйте XSDValidator.java с помощью консоли. Убедитесь, что на вашем компьютере установлен JDK 1.5 и более поздних версий и настроены пути к классам. Подробнее о том, как использовать JAVA, смотрите Учебное пособие по JAVA.
Проверьте вывод
Вы увидите следующий результат —
XSD — Простые типы
В этой главе мы увидим простые типы, которые определяет XSD.
S.No.
Простой тип и описание
1
Простой элемент может содержать только текст. Он не может содержать никаких других элементов.
Атрибут сам по себе является типом и используется в сложном элементе.
Ограничение определяет допустимые значения элемента XML.
Простой элемент может содержать только текст. Он не может содержать никаких других элементов.
Атрибут сам по себе является типом и используется в сложном элементе.
Ограничение определяет допустимые значения элемента XML.
XSD — сложные типы
Комплексный элемент — это элемент XML, который может содержать другие элементы и / или атрибуты. Мы можем создать сложный элемент двумя способами —
Определите сложный тип, а затем создайте элемент, используя атрибут типа
Определите сложный тип непосредственно, назвав
Определите сложный тип, а затем создайте элемент, используя атрибут типа
Определите сложный тип непосредственно, назвав
Определите сложный тип, а затем создайте элемент, используя атрибут типа.
Определите сложный тип непосредственно, назвав.
Ниже приведен список сложных типов, которые поддерживает XSD.
S.No.
Простой тип и описание
1
Сложный Пустой элемент сложного типа может иметь только атрибуты, но без содержимого.
Элемент сложного типа «Только элементы» может содержать только элементы
Текстовый элемент сложного типа может содержать только атрибут и текст.
Смешанный элемент сложного типа может содержать элемент, атрибут и текст.
Индикаторы контролируют способы организации элементов в документе XML.
Сложный Пустой элемент сложного типа может иметь только атрибуты, но без содержимого.
Элемент сложного типа «Только элементы» может содержать только элементы
Текстовый элемент сложного типа может содержать только атрибут и текст.
Смешанный элемент сложного типа может содержать элемент, атрибут и текст.
Индикаторы контролируют способы организации элементов в документе XML.
XSD — Строка
Строковые типы данных используются для представления символов в документах XML.
тип данных
Тип данных может содержать символы, переводы строк, возврат каретки и символы табуляции. Процессор XML не заменяет символы перевода строки, возврата каретки и символов табуляции в содержимом пробелами и сохраняет их нетронутыми. Например, несколько пробелов или вкладок сохраняются во время отображения.
Пример
Объявление элемента в xsd —
Использование элемента в xml —
тип данных
Тип данных является производным от типа данных и может принимать символы, переводы строк, возврат каретки и символы табуляции. Процессор XML удалит переводы строк, табуляции, возврат каретки, начальные и конечные пробелы и несколько пробелов.
Пример
Объявление элемента в xsd —
Использование элемента в xml —
Типы данных String
S.No.
Имя и описание
1
Представляет атрибут ID в XML и используется в атрибутах схемы.
Представляет атрибут IDREF в XML и используется в атрибутах схемы.
Представляет действительный идентификатор языка
Представляет правильное имя XML
Представляет атрибут NMTOKEN в XML и используется в атрибутах схемы.
Представляет строку, которая не содержит перевода строки, возврата каретки или табуляции.
Представляет строку, которая может содержать переводы строк, возврат каретки или вкладки.
Представляет строку, которая не содержит перевода строки, возврата каретки, табуляции, начальных или конечных пробелов или нескольких пробелов
Представляет атрибут ID в XML и используется в атрибутах схемы.
Представляет атрибут IDREF в XML и используется в атрибутах схемы.
Представляет действительный идентификатор языка
Представляет правильное имя XML
Представляет атрибут NMTOKEN в XML и используется в атрибутах схемы.
Представляет строку, которая не содержит перевода строки, возврата каретки или табуляции.
Представляет строку, которая может содержать переводы строк, возврат каретки или вкладки.
Представляет строку, которая не содержит перевода строки, возврата каретки, табуляции, начальных или конечных пробелов или нескольких пробелов
ограничения
Следующие типы ограничений могут быть использованы с типами данных String —
XSD — дата и время
Типы данных Date и Time используются для представления даты и времени в документах XML.
тип данных
Тип данных используется для представления даты в формате ГГГГ-ММ-ДД.
ГГГГ — представляет год
ММ — представляет месяц
ДД — представляет день
ГГГГ — представляет год
ММ — представляет месяц
ДД — представляет день
Пример
Объявление элемента в XSD —
Использование элемента в XML —
тип данных
Тип данных используется для представления времени в формате чч: мм: сс.
чч — представляет часы
мм — представляет минуты
сс — представляет секунды
чч — представляет часы
мм — представляет минуты
сс — представляет секунды
Пример
Объявление элемента в XSD —
Использование элемента в XML —
тип данных
Тип данных используется для представления даты и времени в формате ГГГГ-ММ-ДДЧч: мм: сс.