Как подготовить инструментарий для создания xsd-схем
При отладке взаимодействия ИС УВ со СМЭВ возникает потребность в проверке соответствия запросов ИС УВ схемам ВС. Создание схем возможно в любом текстовом редакторе. Такой подход требует заметных затрат времени и может служить источником ошибок. Использование специализированных программных инструментов значительно сокращает трудозатраты на формирование комплекта файлов для регистрации нового ВС.
Рассмотрим возможности применения XML-инструментов для создания ВС для СМЭВ на примере продукта XMLSpy.
Примечание: Использование продукта ALTOVA XMLSpy требует приобретения лицензии.
Создание схемы
Для создания XSD-схемы выберите New в меню File, а затем выберите формат XML Schema v1.0:
Откроется стартовая форма документа — список элементов и типов схемы. Для новой схемы предлагается создать корневой элемент:

Создадим два корневых элемента – request и response. Для этого введем наименование и комментарий к существующей записи списка и добавим еще один корневой элемент.
Для добавления нового элемента или типа в список воспользуйтесь кнопкой Append (или Insert) и выберите тип добавляемого объекта:

Для просмотра древовидной структуры элемента воспользуйтесь кнопкой слева от записи списка:

- applicant с описанием атрибутов физического лица – заявителя
- application с описанием атрибутов заявления
Добавление элементов на схему осуществляется по правой кнопке мыши:

Сначала добавим Sequence, а затем наши элементы:

Аннотации к элементам можно создавать на графе, воспользовавшись командой Edit Annotation in Diagram из меню, вызываемого по правой кнопке мыши.
Приведем схему к следующему виду:

Атрибуты физического лица могут потребоваться в разных разделах схемы, поэтому для них лучше создать отдельный комплексный тип данных, который можно присваивать разным элементам запроса. Для этого нажмите правой кнопкой на элемент applicant и выберите команду «Make Global -> ComplexType»:

Будет создан новый комплексный тип данных с именем, состоящим из названия элемента и слова Type:

Переименуйте applicantType в PersonType и присвойте новый тип элементу applicationSubject:

Практически все операции создания схемы вида сведений можно выполнять на диаграмме схемы.
Ручное редактирование текста схемы также доступно:


Откроется форма с параметрами генерации. Выберите корневой элемент схемы, для которого будет создан XML-файл:

Будет сформирован следующий файл:

Поскольку в параметрах генерации не выбрана опция «Generate non-mandatory elements», то необязательный элемент patronymic не был включен в XML-файл ни для applicant, ни для applicationSubject.
Проверка XML-файла на соответствие схеме

Избежать получения подобных ошибок можно предварительно проверив корректность формируемых для отправки в СМЭВ сообщений. Для этого откройте файл запроса и в меню DTD/Schema воспользуйтесь командой Assign Schema, после чего выберите нужную схему (в примере это вид сведений ГИС ГМП «Прием необходимой для уплаты информации (начисления)»):

В XML-файл с запросом будет добавлена конструкция xsi:schemaLocation и в редакторе XML будут подсвечены все несоответствия запроса указанной схеме:

В разделе Messages отображается детальная информация об ошибках. После устранения выявленных при проверке ошибок в этом же разделе отображается сообщение, что XML полностью соответствует своей схеме:
Any tools to generate an XSD schema from an XML instance document? [closed]
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago .
I am looking for a tool which will take an XML instance document and output a corresponding XSD schema.
I certainly recognize that the generated XSD schema will be limited when compared to creating a schema by hand (it probably won’t handle optional or repeating elements, or data constraints), but it could at least serve as a quick starting point.
10 Answers 10
the Microsoft XSD inference tool is a good, free solution. Many XML editing tools, such as XmlSpy (mentioned by @Garth Gilmour) or OxygenXML Editor also have that feature. They’re rather expensive, though. BizTalk Server also has an XSD inferring tool as well.
edit: I just discovered the .net XmlSchemaInference class, so if you’re using .net you should consider that
You can use an open source and cross-platform option: inst2xsd from Apache’s XMLBeans. I find it very useful and easy.
Just download, unzip and play (it requires Java).
Trang is the best option here. Open source and cross platform (although Java is required)
From the Trang Website:
- RELAX NG (XML syntax)
- RELAX NG compact syntax
- XML 1.0 DTDs
- W3C XML Schema
In VS2010 if you load an XML file into the editor, click the XML menu >> Create Schema.
It can take multiple xml files and extract a common XSD from all of those files.
![]()
If you have .Net installed, a tool to generate XSD schemas and classes is already included by default.
For me, the XSD tool is installed under the following structure. This may differ depending on your installation directory.
Normally the classes and schemas that this tool generates work rather well, especially if you’re going to be consuming them in a .Net language
I typically take the XML document that I’m after, push it through the XSD tool with the /o:<your path> flag to generate a schema (xsd) and then push the xsd file back through the tool using the /classes /L:VB (or CS) /o:<your path> flags to get classes that I can import and use in my day to day .Net projects
C# Разработка
Итак, что же мы будем делать, для того, что бы научиться штамповать XML на основе вашего эталона? Опишу всё по порядку.
Имеется:
Какой то XML (xmlfile.xml), сохраненный в текстовом формате в файл. Ниже приведу текст:
- Сначала используя утилиту XSD.exe, либо воспользовавшись онлайн сервисами (искать «xml to xsd» один из них www.freeformatter.com/xsd-generator.html), мы будем создавать из имеющейся XML ее примитивное XSD описание. На выходе мы будем иметь полностью, автоматическим образом, созданный output.xsd файл, который уже подходит к использованию но может быть не полным.
- Далее, на основе output.xsd, будут созданы классы на языке C# xmlclass.cs. После чего, мы добавляем его в наш проект. Создавать класс можно используя XSD.exe, либо xsd2code утилитой, или же любым онлайн сервисом.
- Теперь мы готовы использовать классы файла xmlclass.cs. Поэтому создадим и наполним данными экземпляры xmlclass, а потом, используя процесс сериализации, будем преобразовывать объекты в XML строку, и после чего сохраним ее в новый файл. Тем самым получим XML на основе имеющегося.
Шаг 1. Создание XSD из XML.
- Утилита xsd.exe — создатель Microsoft.
- Утилита xsd2code.exe — стороннее приложение, которое умеет все тоже самое, что и xsd.exe, но доступно для скачивания напрямую (на данный момент стала платной с Trial периодом).
- Использование любых онлайн сервисов.
— Ссылка для скачивания и установки одного из SDK:
Windows SDK for Windows 7 and .NET Framework 4.
— Далее перейдя в папку:
C:\Program Files (x86)\Microsoft SDKs\Windows>
— Воспользуемся поиском, и найдем файл 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, содержимое которого приведено ниже в сжатом виде:

Шаг 3. Сериализация объектов в XML.
Получившиеся классы у нас лежат в файле xmlfile.cs. Далее его содержимое или сам файл добавляем в проект Visual Studio, после чего можно с ним работать. Я создам демонстративный объекты книг, после чего сохраню в файл в формате XML.
После запуска и открытия Output.xml можно увидеть, что мы сохранили так, как мы хотели (Нижний файл — «Созданный кодом«).
Как мы видим, форматирование было соблюдено, а данные были наполнены нами.
Как сделать xsd схему на основе xml файла
Paste your XSD schema here:
This online tool takes XSD schema as input and generates sample XML as output — simple as that.
Should work for most basic cases.
If you want to make a sample XML file for testing from given XSD schema file, you could spend anything from a few minutes to a few hours manually analyzing and converting XSD to XML (and be bored to tears).
Or you could use this online tool and spend just a few seconds to do it automatically.