XML Schema (XML схема) — описание структуры XML-документов. Как создать XML и XSD схему и наоборот Читать xsd схемы

Хотелось бы в одном месте рассказать о вполне типичной задаче при работе с XML , а именно, о создании XML на основе существующего. Данная операция будет состоять из нескольких этапов, при выполнении которых, будут решены дополнительные задачи, такие как:

  • Создание XML на основе XSD , и наоборот.
  • Сериализация и десериализация объектов.
  • Создание класса, для будущей сериализации из XML или XSD .
Перед началом планирую, что читатель знаком со словами XML и XSD . Что касается XML , думаю с этим проблем нет, но что касается XSD могу возникнут вопросы, что же это такое. Если коротко, то:
XSD - это язык, для описания XML . И если вы посмотрите содержимое файла содержащего это описание, то возникнет вопрос, зачем же описывать казалось бы очевидные теги вашего XML ? Но представьте, что вы интегрируетесь с какой то внешней системой, и для обмена данных хотите использовать формат XML . Так вот, XSD позволяет описать для каждого элемента его именя, возможные атрибуты, обязательность полей или атрибутов, дать понять, что содержимое какого то тега может содержать лишь один внутренний элемент () и не более, либо узел может иметь последовательность элементов (< a> ... ). Когда внешняя система является вашей, тогда проблем может не возникнуть, но когда это сторонняя организация, тогда данное описание через XSD , будет инструментом урегулирования споров с форматом, а так же, используя утилиты, можно проверить соответствие любой XML изначальному формату.
Итак, что же мы будем делать, для того, что бы научиться штамповать XML на основе вашего эталона? Опишу всё по порядку.

Имеется:
Какой то XML (xmlfile.xml) , сохраненный в текстовом формате в файл. Ниже приведу текст:

< catalog > < book id = " bk101 " > < author > Gambardella, Matthew < title > XML Developer"s Guide < genre > Computer < price > 44.95 < publish_date > 2000-10-01 < description > An in-depth look at creating applications with XML. < book id = " bk102 " > < author > Ralls, Kim < title > Midnight Rain < genre > Fantasy < price > 5.95 < publish_date > 2000-12-16 < description > A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.

Действия для создание нового:

  1. Сначала используя утилиту XSD.exe , либо воспользовавшись онлайн сервисами (искать "xml to xsd" один из них www.freeformatter.com/xsd-generator.html), мы будем создавать из имеющейся XML ее примитивное XSD описание. На выходе мы будем иметь полностью, автоматическим образом, созданный output.xsd файл, который уже подходит к использованию но может быть не полным.
  2. Далее, на основе output.xsd , будут созданы классы на языке C# xmlclass.cs. После чего, мы добавляем его в наш проект. Создавать класс можно используя XSD.exe, либо xsd2code утилитой, или же любым онлайн сервисом.
  3. Теперь мы готовы использовать классы файла xmlclass.cs . Поэтому создадим и наполним данными экземпляры xmlclass , а потом, используя процесс сериализации, будем преобразовывать объекты в XML строку, и после чего сохраним ее в новый файл. Тем самым получим XML на основе имеющегося.
Приступим!

Шаг 1. Создание XSD из XML.

Итак, приведу способы, которыми пользуюсь сам:
  1. Утилита xsd.exe - создатель Microsoft .
  2. Утилита xsd2code.exe - стороннее приложение, которое умеет все тоже самое, что и xsd.exe , но доступно для скачивания напрямую (на данный момент стала платной с Trial периодом).
  3. Использование любых онлайн сервисов.
Для того, что бы получить XSD.exe , вам придется поставить любой Microsoft SDKs , в поставке которого, идет данное приложение. К сожалению, на данный момент ни одна из студий в своем комплекте не содержит этой утилиты.

Ссылка для скачивания и установки одного из SDK :
Windows SDK for Windows 7 and .NET Framework 4 .

Воспользуемся поиском, и найдем файл xsd.exe , после чего (что бы упростить себе работу), скопируем его в созданную в корне диска папку C:\xmltoxsd . Далее в эту же папку мы копируем наш xmlfile.xml и все готово к началу.


Отрываем "Командную строку" (Пуск -> "Выполнить" -> "cmd"), переходим в наш каталог и вызываем с параметрами по умолчанию xsd.exe , передавая наш xmlfile.xml параметром:


И видим, что рядом появился файл xmlfile.xsd с содержимым.


Вот и все! Этих действий достаточно, для создания примитивного XSD файла, с которым можно работать. Но стоит понимать, что сам xsd.exe , как и любая другая утилита, ничего не знает про типы ваших полей (поэтому почти всегда тип полей будет string ), а так же о всех вариациях атрибутов и параметров. То есть, если у какого-то тега нет атрибута в вашей XML , тогда его и не будет в описании. Поэтому XML должен быть наиболее полным и в случае, если элемент может содержать несколько дочерних полей, лучше добавить как минимум два, что бы xsd.exe понял, что это коллекция.

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

Шаг 2. Создание Class из XSD.

Для создания класса на языке C#, нам понадобится вновь использоваться xsd.exe но уже с другим параметром /classes , передав путь к нашему xmlfile.xsd .


После выполнения появится файл xmlfile.cs, содержимое которого приведено ниже в сжатом виде:


Как видите, для внутреннего элемента catalog был создан класс catalogBook , у которого поля соответствуют полям в XML , а поле Id помечено как атрибут. Xsd.exe корректно понял, что внутри catalog хранится коллекция книг, поэтому появилось свойство Items , для наполнения дочерней коллекции.
Замечание: xsd.exe не умеет добавлять комментарии к получившимся классам и полям. В описании XSD существует элемент под названием < xs:annotation > , который чаще всего содержит < xs:documentation >, внутри которого размещено описание поля. По идее, оно должно быть размещено в /// описании, но на текущий момент xsd.exe отказывается добавлять текст в описание, поэтому приходится прибегать к альтернативам, таким как xsd2code или онлайн сервисам.

Шаг 3. Сериализация объектов в XML.

Получившиеся классы у нас лежат в файле xmlfile.cs . Далее его содержимое или сам файл добавляем в проект Visual Studio , после чего можно с ним работать. Я создам демонстративный объекты книг, после чего сохраню в файл в формате XML .

Private void Example() { // Создание первой книги var book1 = new catalogBook () { author = "King" , description = "Very interesting book" , genre = "Fantasy" , price = 22.ToString(), id = "42011" , title = "It" }; // Создание второй книги var book2 = new catalogBook () { author = "O"Brien, Tim" , description = "Microsoft"s .NET initiative is explored in detail in this deep programmer"s reference." , genre = "Computer" , price = 36.ToString(), id = "30012" , title = "Microsoft .NET: The Programming Bible" }; // Создание корневого элемента каталога, содержащего две книги выше var catalog = new catalog () { Items = new { book1, book2 } }; // Содержит XML объекта catalog var xmlCatalog = Serialize(catalog); // Записываем строку в файл // TODO Сделано для демонстрации. Желательно вызывая метод Serialize передавать Stream к файлу File .WriteAllText("Output.xml" , xmlCatalog); } private string Serialize(TType sourceObject) { if (sourceObject == null ) { return string .Empty; } // Используем XmlSerializer для перобразования в XML строку var xmlserializer = new XmlSerializer (typeof (TType )); var stringWriter = new StringWriter (); using (var writer = XmlWriter .Create(stringWriter, new XmlWriterSettings () { Indent = true })) { xmlserializer.Serialize(writer, sourceObject); return stringWriter.ToString(); } } После запуска и открытия Output.xml можно увидеть, что мы сохранили так, как мы хотели (Нижний файл - "Созданный кодом ").

Все будет сухо, без лирики и т.п.

Итак. Мне принесли задание. Подружить 1С с внешним сервисом по приему отчетности в виде xml файла.

Сторонний сервис имеет свой API по приему файлов, на выходе выдает некий код «батч», по которому я смогу вызвать еще одну функцию и получить по этому батчу, всю развернутую информацию по ошибкам.

Файл схема xsd небольшая, но типов данных много, на основе этой схемы полностью сформированный XML файл занимает что-то около 200Мб.

В итоге я имел на руках некий файл с расширением «xsd».

На тот момент я даже понятия не имел, что это и с чем и как его едят.

Очень помог Инфостарт (не без этого, конечно, - огромное спасибо).

Для начала ниже материал, которым я пользовался, пока не завершил этот мини проект, и поэтому вот ссылки вам в помощь, которые могут понадобиться в дальнейшем, я думаю, это «маст-хэйв» для тех, кто хочет обучиться правилам XDTO:

Что в итоге.

Просьба смотреть «не в воду», а в суть.

Тут главные строки это:

Для получения каких-либо реквизитов свойства в схеме xsd пользуюсь такой конструкцией кода,

Но скажу, что видел и другие способы, тут, как говорится, дело ваше.

Результат рисунков с 7 по 12

Выглядит вот так в готовом файле:

И вот что я заметил (ну местные гуру, может, и знают давным-давно).

Это как бы и правила, и пометка.

Рассмотрим свойство «ContractCode»

Вот его описание:

Если это свойство имеет форму как «Элемент», то тогда код выглядит таким:

Т.е. я срази пишу значение в параметр, просто «= равно» и пошел.

Если свойство имеет форму как «Элемент», но он записан через знак «+»

Как вот тут

То его код выглядит немного иначе

Т.е. нужно сначала создать через фабрику этот тип, получить его подчиненные подтипы и уже им присваивать значения из ваших данных.

И в итоге получается вот что.

Если в схеме это свойство имеет форму «элемент»

То в готовом файле запишется такая запись:

Т.е. все будет записано внутри т.н. «тегов».

Т.е. у свойства «FundingType» есть подчиненный элемент «id», где его форма равна «Атрибут»

В этом случае код при написании НЕ изменится:

Замечу, что этот код похож на рис.16

Воот, а результат будет немножко другой:

Т.е. значение запишется сразу в сам «тег».

Есть такое свойство, как «Gender»

У вас есть проблема с открытием.XSD-файлов? Мы собираем информацию о файловых форматах и можем рассказать для чего нужны файлы XSD. Дополнительно мы рекомендуем программы, которые больше всего подходят для открытия или конвертирования таких файлов.

Для чего нужен файловый формат.XSD?

Файловое расширение .xsd относится к типу файлов "Определение схемы XML" (XML Schema Definition, XSD). XML Schema — это международный стандарт со статусом рекомендации консорциума W3C, а тип файлов XSD служит типовым обозначением файлов схем XML. XSD является подмножеством XML, и его основная концепция схожа с более ранним механизмом DTD (Document Type Definition - Определение типа документа) в том, что XSD — это метаязык, используемый для построения и применения правил произвольного XML-языка.

Файл .xsd представляет собой текстовый листинг исходного кода XML. В нем дается определение схемы XML — структурированной прототипной модели обычных XML-документов. Файлы схем XML (.xsd ) можно использовать для создания собственных языков на базе XML и проверки (валидации) XML-документов на соответствие правилам, введенным той или иной схемой XSD.



Схемы XML (.xsd ) используются целым рядом современного ПО с поддержкой XML, включая веб-браузеры, операционные системы, офисные пакеты, интегрированные среды разработки и др. Кроме того, при наличии практических знаний синтаксиса XML Schema любой файл .xsd можно вручную открыть и отредактировать в текстовом редакторе.

Без всякого отношения к вышеописанному, расширение .xsd также ассоциируется с типом и форматом файлов "Файл данных схемы вышивки крестом Pattern Maker" (XSD). Pattern Maker является платным приложением (Майкрософт Windows) для создания подробных схем вышивки "крестиком" на основе цифровых растровых изображений. Файл .xsd — это представление схемы вышивки, созданный при помощи Pattern Maker. Такие файлы XSD можно открывать, просматривать и печатать при помощи как Pattern Maker, так и утилиты Pattern Viewer, в то время как редактирование возможно только в среде Pattern Maker.



Программы для открытия или конвертации XSD файлов

Вы можете открыть файлы XSD с помощью следующих программ: 

При выполнении различных форм отчётности (а то и во время обычной работы в сети) некоторые пользователи могут встретиться с файлом, имеющим расширение XSD. Данный файл обычно представляет собой схему описания XML-данных, но бывают и случаи, когда упомянутый файл является производным продуктом программы Pattern Maker. В этой статье я расскажу, чем открыть XSD файл, какие программы нам в этом помогут, а также опишу суть ошибки «Файл не соответствует xsd схеме».

Что такое XSD

Термин «XSD» является аббревиатурой от английских слов «XML Schema definition» . Файл с таким расширением являет собой схему описания XML-данных, использующую свой собственный язык для описания структуры документов XML.

В файле xsd описываются элементы, находящиеся в документе XML. Обычно это фиксированные данные, значения по умолчанию, синтаксис данных, правила, которым должен соответствовать данный документ и так далее, при этом некоторые элементы часто взаимосвязаны с другими элементами, и ссылаются на них.

Стандарт XSD 1.1 получил одобрение Консорциума Всемирной Паутины в апреле 2012 года, обладая несколькими важными преимуществами перед существовавшими до него схемами XML, такими как DTD (Document Type Definition) или SOX (Simple Object XML). К примеру, это то, что XSD написан на XML, имеется автоматическое создание схемы и так далее.


Как открыть xsd формат

Для открытия большинства файлов xsd будет достаточно использовать любые подручные текстовые редакторы (тот же «Блокнот», Notepad++, PSPad Editor и др.). Также в открытии xsd формата могут пригодиться такие программы как Microsoft XML Notepad, Oxygen XML Editor , Liquid XML Studio и другие аналоги.

Если же данный файл являет собой результат работы программы Pattern Maker for Cross stitch (обычно это рисунок-схема для вышивки), то такой файл можно просмотреть или с помощью указанной программы, или с помощью специального просмотрщика под названием «Pattern Maker Viewer ».


Вышивка формата.XSD

Файл не соответствует xsd схеме — что это?

При этом бывают ситуации, когда описание файла XML, содержащееся в файле XSD, не совпадает с фактическими данными, имеющимися в файле XML. Ошибка может быть как в самих данных, так и в способе введения этих данных, при этом система реагирует стандартным образом, выдавая упомянутое сообщение «Файл не соответствует xsd схеме».


Часто такая ситуация происходит в случае подачи бухгалтерской и иной формы отчётности, когда специалист контролирующего органа, при попытке открытия xml-файла, обнаруживает упомянутую ошибку.

  1. Проверьте корректность данных в файле xml , делая акцент на наличие синтаксических ошибок (лишние дефисы, пробелы и так далее);
  2. Обновите программу, в которой вы работали с xml-файлом (возможно её текущая версия устарела);
  3. Обратитесь в техническую поддержку , занимающуюся обслуживанием данного программного продукта (или в техподдержку контролирующего органа).

Заключение

Как открыть XSD файл? Ответом на вопрос станет использование любого сподручного текстового редактора (тот же «Блокнот»). Если же нужный xsd-файл является продуктом программы «Pattern Maker», тогда рекомендую открывать его с помощью данной программы, или использовать комплементарный инструмент для просмотра «Pattern Maker Viewer».

Наиболее часто встречаемой проблемой, из-за которой пользователи не могут открыть этот файл, является неверно назначенная программа. Чтобы исправить это в ОС Windows вам необходимо нажать правой кнопкой на файле, в контекстном меню навести мышь на пункт "Открыть с помощью", а выпадающем меню выбрать пункт "Выбрать программу...". В результате вы увидите список установленных программ на вашем компьютере, и сможете выбрать подходящую. Рекомендуем также поставить галочку напротив пункта "Использовать это приложение для всех файлов XSD".

Другая проблема, с которой наши пользователи также встречаются довольно часто - файл XSD поврежден. Такая ситуация может возникнуть в массе случаев. Например: файл был скачан не польностью в результате ошибки сервера, файл был поврежден изначально и пр. Для устранения данной проблемы воспользуйтесь одной из рекомендаций:

  • Попробуйте найти нужный файл в другом источнике в сети интернет. Возможно вам повезет найти более подходящую версию. Пример поиска в Google: "Файл filetype:XSD" . Просто замените слово "файл" на нужное вам название;
  • Попросите прислать вам исходный файл еще раз, возможно он был поврежден при передаче;