Как открыть XML-документ – особенности работы с XML-файлами
Что такое XML
XML – это язык разметки, созданный консорциумом World Wide Web Consortium (W3C) для определения синтаксиса кодирования документов, которые могут быть прочитаны людьми и машинами. Он делает это с помощью тегов, которые определяют структуру документа, а также то, как документ должен храниться и транспортироваться.
Проще всего сравнить его с другим языком разметки, с которым вы можете быть знакомы, – язык гипертекстовой разметки (HTML), используемый для кодирования веб-страниц. HTML использует предопределенный набор символов разметки (короткие коды), которые описывают формат содержимого на веб-странице.
Однако, отличие XML в том, что он является расширяемым. У XML нет предопределенного языка разметки, как у HTML. Вместо этого, XML позволяет пользователям создавать свои собственные символы разметки для описания контента, формируя неограниченный и самоопределяемый набор символов.
По сути, HTML – это язык, который фокусируется на представлении контента, в то время как XML – это выделенный язык описания данных, используемый для хранения данных.
XML часто используется в качестве основы для других форматов документов, которых сотни. Вот несколько, которые вы можете узнать:
Таким образом, если у вас есть XML-файл, это не обязательно говорит Вам, для какого приложения он предназначен. Впрочем, Вам и не нужно беспокоиться об этом, если только вы не разрабатываете XML-файлы.
Как открыть XML-файл
Существует несколько способов открыть XML-файл напрямую. Вы можете открывать и редактировать их с помощью любого текстового редактора, просматривать их с помощью любого веб-браузера или использовать веб-сайт, который позволяет просматривать, редактировать и даже конвертировать их в другие форматы.
Используйте текстовый редактор при регулярной работе с XML
Поскольку XML-файлы – это просто текстовые файлы, их можно открыть в любом текстовом редакторе. Однако, многие текстовые редакторы, такие как Notepad, просто не предназначены для отображения XML-файлов с их правильной структурой. Это может быть полезно для быстро ознакомления с содержанием XML-файла. Но, существуют более удобные инструменты для работы с ними.
Примечание: мы используем Windows, но то же самое справедливо и для других операционных систем. Найдите хороший сторонний текстовый редактор, предназначенный для поддержки XML-файлов.
Вот тот же XML-файл, открытый в Notepad++
Использование веб-браузера для просмотра XML-файла
Если Вам не нужно редактировать XML-файл, но просто нужно просмотреть содержимое, с этой задачей справиться ваш браузер. Более того, ваш веб-браузер, скорее всего, уже настроен как стандартное средство просмотра XML-файлов. Таким образом, двойной щелчок XML-файла должен открыть его в браузере.
Если нет, вы можете щелкнуть правой кнопкой мыши файл, чтобы найти варианты его открытия с любым другим приложением. Просто выберите ваш веб-браузер из списка программ.
Когда файл откроется, вы должны увидеть хорошо структурированные данные. Это не так красиво, как цветной вид, который вы получаете в Notepad++, но гораздо лучше, чем блокнот.
Использование онлайн-редактора для XML-файлов
Если вы хотите редактировать случайный XML-файл и не хотите загружать новый текстовый редактор, или Вам нужно конвертировать XML-файл в другой формат, существует несколько достойных онлайн-редакторов XML, доступных бесплатно.
TutorialsPoint.com, XMLGrid.net и CodeBeautify.org – позволяют просматривать и редактировать XML-файлы. После завершения редактирования можно загрузить измененный XML-файл или даже преобразовать его в другой формат.
Для примера используем CodeBeautify.org. Страница разделена на три раздела. Слева находится XML-файл, с которым вы работаете. В середине вы найдете несколько функций. Справа вы увидите результаты некоторых вариантов, которые вы можете выбрать.
Например, на рисунке ниже слева находится наш полный XML-файл, а на панели результатов отображается представление в виде дерева, так как мы нажали кнопку Tree View посередине.
Используйте кнопку Browse для загрузки XML-файла с вашего компьютера или кнопку Load URL для извлечения XML из интернет-источника
Кнопка Tree View отображает данные в хорошо отформатированной древовидной структуре на панели результатов, со всеми тегами, выделенными оранжевым цветом, и атрибутами справа от тегов.
Beatify отображает ваши данные в аккуратном, легко читаемом виде.
Кнопка Minify отображает ваши данные, используя наименьшее количество пробелов. Эта функция будет разместить каждый каждый кусок данных на одной строке. Это пригодится при попытке сделать файл меньше, что сэкономит некоторое пространство.
И, наконец, Вы можете использовать кнопку XML to JSON для преобразования XML в формат JSON, и кнопку Export to CSV для сохранения данных в виде файла значений, разделенных запятыми, или кнопку Download для загрузки любых изменений, которые вы сделали в новом XML-файле.
Узнайте, как Расширяемый язык разметки (Extensible Markup Language — XML) облегчает универсальный доступ к данным. XML — основанный на Unicode метаязык: язык для описания языков разметки. Он не привязан ни к одному языку программирования, операционной системе или поставщику программного обеспечения. XML обеспечивает доступ к огромному количеству технологий по манипулированию, структурированию, трансформированию и запрашиванию данных.
Введение
Расширяемый язык разметки (XML) изначально был задуман как язык для описания новых форматов документов World Wide Web. XML происходит от Стандартного обобщенного языка разметки (Standard Generalized Markup Language — SGML) и может считаться метаязыком: языком для определения языков разметки. SGML и XML — это ориентированные на текст форматы, которые обеспечивают механизмы описания структур документов с помощью тэгов разметки (слов, взятых в угловые скобки ‘ ’ ). Web-разработчики могут заметить некоторую схожесть между HTML и XML, обусловленную тем фактом, что они оба происходят от SGML.
Поскольку применение XML возросло, сейчас общепринято считать, что XML полезен не только при описании новых форматов документов для Web, но также подходит для описания структурированных данных. Примеры структурированных данных включают информацию, которая обычно содержится в крупноформатных таблицах, файлах конфигурации программы и сетевых протоколах.
XML является предпочтительным для существовавших ранее форматов данных, потому что XML может запросто представить и табличные данные (такие как реляционные данные из базы данных или больших таблиц), и псевдоструктурированные данные (такие как Web-страницы или деловые документы). Популярные ранние форматы, такие как файлы с разделяемыми запятой значениями (CSV), или подходят для табличных данных и плохо описывают псевдоструктурированные данные, или, как RTF, слишком специализированы для псевдоструктурированных текстовых документов. Это привело к широкому распространению XML как языка для обмена информацией.
XML везде
Кроме способности представлять и структурированные, и псевдоструктурированные данные, XML имеет несколько характеристик, которые обусловили его широкое использование в качестве формата представления данных. XML — расширяемый, плотформо-независимый и поддерживает локализацию, т.к. полностью совместим с Unicode. Тот факт, что XML — текстовый формат, означает, что при возникновении необходимости XML-документы можно читать и редактировать, используя стандартные инструменты редактирования текстов.
XML не привязан ни к одному языку программирования, операционной системе или поставщику программного обеспечения. Кстати, создавать или потреблять XML, используя различные языки программирования — слишком прямолинейно. Независимость от платформ делает XML очень полезным в качестве средства достижения возможности взаимодействовать между различными платформами программирования и операционными системами.
Синтаксис XML 1.0
Как было упомянуто ранее, рекомендация W3C XML 1.0 описывает текстовый формат для описания структурированных и псевдоструктурированных данных, используя синтаксис, подобный HTML.
Сравнение XML и HTML
И HTML, и XML документы состоят из элементов, каждый из которых включает «начальный тэг» ( ), «конечный тэг» ( ) и информацию, заключенную между этими двумя тэгами (которая называется содержимым элемента). Элементы могут быть аннотированы атрибутами, содержащими метаданные об элементе и его содержимом.
Однако между HTML и XML есть существенные отличия. XML чувствителен к регистру, в то время как HTML — нет. Это значит, что в XML начальные тэги
и
различны, тогда как в HTML — это одно и то же. Другое различие между HTML и XML в том, что XML представляет концепцию правильного построения. Правила построения XML устраняют некоторую неопределенность, присущую обработке таких языков разметки как HTML, вводя такие постулаты, как то, что все значения атрибутов должны быть заключены в кавычки, и что у всех элементов должны быть или начальный и конечный тэги, или явное указание того, что это пустые элементы. Краткое описание правил построения дается в XML FAQ в разделе D.2.
Самое существенное различие между HTML и XML в том, что в HTML есть предопределенные элементы и атрибуты, поведение которых предопределено, в то время как в XML такого нет. Вместо этого, авторы документа могут создавать собственные XML-словари, предназначенные именно для их приложения или деловых нужд. В настоящее время существуют XML-словари для огромного количества отраслей промышленности и приложений: от финансовых картотек (XBRL) и финансовых операций (FpML) до Web-документов (XHTML) и сетевых протоколов (SOAP). Отсутствие предопределенных элементов и атрибутов, которые определяют, как формируется или отображается XML-документ, дает возможность авторам сосредоточиться на создании документов, которые содержат только существенную семантическую информацию в их конкретной предметной области. Отделение содержимого от представления, ставшее возможным с XML-словарями, существенно увеличивает возможности повторного использования информации и перенацеливания содержимого.
Анатомия XML-документа
Ниже приведен пример XML-документа, который представляет заказ покупателя в магазине музыкальных CD. На что надо обратить внимание — это то, как просто документ представляет и строго структурированные данные, которые описывают информацию о компакт дисках, и псевдоструктурированные данные, содержащие специальные инструкции и комментарии по определенному покупателю.
Документ начинается с необязательного описания XML, в котором указывается, какая версия XML и кодирование символом используются. Далее следует инструкция обработки xml-stylesheet, которая используется для связывания таблицы стилей, содержащей инструкции по форматированию, с XML-документом. Таблица стилей используется для формирования привлекательного внешнего вида документа в пользовательских приложениях, таких как Web-браузеры. Инструкции обработки обычно используются для введения информации о приложении в XML-документ. Например, большинство приложений, обрабатывающих содержимое приведенного выше документа, вероятно, проигнорируют инструкцию обработки xml-stylesheet. С другой стороны, приложения, используемые для отображения XML-документа, такие как Web-браузер, могли бы использовать информацию инструкции обработки для того, чтобы определить, где располагается таблица стилей, содержащая специальные инструкции для отображения документа.
Unicode + угловые скобки = возможность взаимодействовать
Сочетание тех фактов, что синтаксис XML 1.0 — текстовый и слишком простой для синтаксического разбора, привело к использованию XML как нового формата обмена данными в случаях, когда требуется возможность межплатформенного взаимодействия. Широкая доступность синтаксических анализаторов XML для большинства популярных операционных систем упрощает для неравноправных сторон на разных платформах стандартизацию XML как формата преобразования в случае необходимости совместного использования информации.
То, что XML основан на Unicode, делает его подходящим для совместного использования информации через глобальные сети, такие как World Wide Web.
Infoset и семейство XML-технологий
Хотя возможность взаимодействовать и расширяемость платформ, получаемые при использовании текстового синтаксиса XML, и являются прекрасным примером выгоды от применения XML как формата представления данных, это всего лишь одно из преимуществ, которые XML предоставляет разработчикам приложений. Другое важное преимущество от использования XML — он предоставляет единый подход к множеству технологий по манипулированию, структурированию, преобразованию и запрашиванию данных.
Информационное множество (Infoset) XML
Рекомендация информационного множества W3C XML (W3C XML Information Set recommendation) описывает абстрактное представление XML-документа. XML Infoset, главным образом, изначально выступает в роли набора определений, используемых XML-технологиями для формального описания того, с какими частями XML-документа они работают. В терминах XML Infoset описаны несколько W3C XML-технологий, включая SOAP 1.2, XML Schema и XQuery.
XML Infoset — древовидное иерархическое представление XML-документа. Информационное множество XML-документа состоит из ряда единиц информации, которые являются абстрактным представлением компонентов XML-документа. Существуют единицы информации, представляющие документ, его элементы, атрибуты, инструкции обработки, комментарии, символы, нотации, пространства имен, неразбираемые синтаксическим анализатором сущности, неразвернутые ссылки на сущности и объявление типа документа. XML Infoset — официальная попытка определить то, что должно считаться важной информацией в XML-документе. Например, Infoset не делает различий между двумя формами пустого элемента. Таким образом, следующее
согласно XML Infoset, считается эквивалентным. Аналогично, не имеет значения и тип кавычек, используемых для атрибутов; таким образом, элементы
согласно XML Infoset, эквивалентны. Список аспектов синтаксиса XML 1.0, которые не рассматриваются XML Infoset, приведен в Приложении D рекомендации Информационного множества W3C XML.
Языки Схемы
Язык XML-схемы используется для описания структуры и содержимого XML-документа. Например, схема может использоваться для определения документа, состоящего из одного или более элементов compact-disc, каждый из которых включает в качестве дочерних элементы price, title и artist. Во время обмена документами XML-схема описывает контракт между производителем и потребителем XML, поскольку она описывает то, что составляет действительное XML-сообщение передаваемое между двумя сторонами. Хотя для XML существует несколько языков схемы, от DTD до XDR, ведущим является Язык описания XML-схемы W3C (W3C XML Schema Definition Language), сокращенно XSD.
XSD уникален среди языков XML-схемы, потому что он первым пытается вывести роль XML-схемы за рамки традиционного ее применения для описания контракта между двумя сущностями, обменивающимися документами. XSD представляет концепцию Post Schema Validation Infoset (PSVI). Совместимый XSD-обработчик принимает XML Infoset как входные данные и после проверки преобразовывает его в Информационное множества после проверки схемы (PSVI). PSVI — это исходные входные данные XML Infoset с добавленными к существующим новыми единицами информации и новыми свойствами. В Рекомендации XML-схема W3C приведен список дополнений в Информационное множества после проверки схемы (PSVI).
Ниже показан пример фрагмента схемы, который описывает элемент items документа-образца, приведенного в разделе Анатомия XML-документа.
API, использующие модель дерева Древовидная модель API представляет XML-документ как дерево узлов, которые обычно загружаются в память все сразу. Самая популярная древовидная модель API для XML — Объектная модель документа W3C (W3C Document Object Model — DOM). DOM обеспечивает возможность программно читать, манипулировать и изменять XML-документ.
Курсорные APIs
Потоковые API
Потоковые API для обработки XML позволяет обрабатывать XML-документ, сохраняя в памяти только содержимое обрабатываемого в данный момент узла. Такие API делают возможной обработку больших XML-файлов без использования слишком больших объемов памяти. Существует два основных класса потоковых API для обработки XML: передающие XML-анализаторы и принимающие XML-анализаторы.
XML-запрос
XML-преобразование
Часто надо преобразовать XML-документы из одного словаря в другой. Иногда так можно сгенерировать их в готовом для печати формате или в Web-браузере; также с помощью преобразования можно превратить документы, полученные извне, в более привычный формат.
XSLT (http://www.w3.org/TR/xslt) — первый язык XML-преобразования. Преобразование, выраженное в XSLT, описывает правила преобразования исходного дерева в результирующее дерево. Преобразование достигается путем ассоциирования шаблонов. Шаблон — это выражение XPath, может рассматриваться как регулярное выражение, ставящее части исходного дерева XML в соответствие частям строки. Шаблон ставится в соответствие элементам исходного дерева. В случаях совпадения создается экземпляр шаблона для создания части результирующего дерева. При создании результирующего дерева элементы исходного дерева могут быть отфильтрованы и реорганизованы, а произвольная структура может быть добавлена.
Следующая таблица стилей XSLT преобразовывает элемент items в Web-страницу XHTML, содержащую таблицу с информацией о компакт дисках.
XHTML-документ, созданный с использованием этой таблицы стилей, показан ниже:
Заключение
XML — это больше, чем просто текстовый формат для описания документов. Это механизм для описания структурированных и псевдоструктурированных данных, который обеспечивает доступ к богатому семейству технологий обработки таких данных. Мощные абстракции, такие как Информационное множество XML, открывают двери к обработке нетекстовых данных, таких как файловые системы, реестр Windows®, реляционные базы данных и даже объекты языков программирования, с помощью XML-технологий. XML еще на один шаг приблизил нас к универсальному доступу к данным.
Чем открыть XML файл, как редактировать XML формат
Работая с документами, вы можете встретить файл с расширением XML. Обычно в Windows данное расширение файла не привязано к программе и поэтому открыть XML файл двойным кликом не получится.
В данной статье мы расскажем о том, что это за файл, для чего он может использоваться и чем его открыть.
Что такое XML файл
Перед тем, как приступать к открытию XML файлов, несколько слов о том, что это за файлы и для чего они используются. XML файл – это текстовый файл, построенный с использованием языка разметки XML или eXtensible Markup Language. Данная разметка была разработана для создания документов, которые было бы не сложно обрабатывать программным путем, а также было просто читать человеку без использования специальных программ. Это свойство позволяет открывать и редактировать XML файлы с помощью практически любого текстового редактора.
Язык XML – это набор простых правил, которым должен следовать файл для того, чтобы соответствовать формату. При этом XML не фиксирует разметку, которая используется в документе, позволяя ее определять разработчику программы. Благодаря этому каждый разработчик может создать собственную разметку для решения своих задач и использовать ее в своих XML документах. Это открывает большие возможности по созданию новых форматов файлов на основе XML.
Сейчас язык разметки XML используется в множестве других форматов файлов. Например, известные всем пользователям офисного пакета Microsoft Office форматы DOCX, XLSX и PPTX хранят текстовую информацию в виде XML. Другой пример – популярный формат электронных книг FB2, который также построен на основе XML.
Чем открывать файлы
Как мы уже сказали, XML файл можно открыть с использованием любого текстового редактора. Например, можно использовать стандартный текстовый редактор Блокнот, который есть во всех версиях операционной системы Windows. Просто запустите Блокнот, воспользуйтесь меню «Файл – Открыть», выберите все типы файлов и откройте ваш XML файл. Также вы можете просто перетащить XML файл в окно программы Блокнот.
После этого вы увидите содержимое XML файла в программе «Блокнот». При необходимости вы даже можете его отредактировать и сохранить файл.
Если возможностей стандартного Блокнота вам недостаточно, то можете воспользоваться бесплатной программой Notepad++ (скачать). Данная программа является специализированным текстовым редактором для программистов и веб-мастеров. Главным преимуществом Notepad++ перед простым Блокнотом является подсветка синтаксиса, которая значительно упрощает работу с XML файлами.
Также вы можете открыть XML файл с помощью любого веб-браузера (Google Chrome, Mozilla Firefox, Opera и другие). Для этого просто перетащите файл в окно браузера, и он автоматически откроется. Веб-браузеры умеют подсвечивать синтаксис XML, что значительно упрощает чтение файла, но отредактировать XML файл при помощи браузера уже не удастся.
В некоторых случаях для просмотра содержимого XML файла удобно использовать табличный процессор Excel. Для этого откройте Excel, воспользуйтесь меню «Файл – Открыть» и выберите XML файл. После этого появится небольшое окно в котором необходимо выбрать «XML-таблица» и нажать «ОК».
В результате содержимое XML файла будет конвертировано в таблицу Excel, а столбцам будут даны соответствующие названия.
Дальше с содержимым XML файла можно работать как с обычной таблицей Excel.
Как редактировать XML файлы
Как и любой текстовый файл, XML файл можно открыть и отредактировать в любом текстовом редакторе. Но, в большинстве случаев редактировать XML в обычных редакторах очень неудобно. Для решения этой задачи есть специализированные программы, которые обладают подсветкой, подсказками и другими облегчающими работу инструментами. Вот некоторые из таких программ:
Есть и онлайн-редакторы, которые позволяют открыть 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-канале