XSD-схема
XSD-схема вида сведений – используется СМЭВ в качестве правил, на основании которых выполняется форматный контроль сообщений. XSD - это файл, содержащий XML Schema
. В свою очередь XML Schema - язык описания структуры XML-документа.
Электронные сообщения в СМЭВ передаются в формате XML в кодировке UTF-8
с указанием кодировки в заголовке сообщения. Соответствующие им WSDL и XSD файлы также должны использовать кодировку UTF-8
с указанием кодировки в заголовке сообщения.
Правила формирования
Форматы передаваемых данных разрабатываются владельцем сведения с использованием языка описания схем данных XML Schema Definition
(XSD) и должны соответствовать следующим правилам:
- для каждого протокола обмена один из элементов СМЭВ-заголовка, описанных на корневом уровне схемы, должен представлять собой «элемент запроса», содержащий бизнес-данные запроса или рассылки;
- для каждого протокола обмена, один из элементов СМЭВ-заголовка, описанных на корневом уровне схемы, должен представлять собой «элемент ответа», содержащий бизнес-данные ответа;
- для каждого протокола обмена корневой элемент запроса, и корневой элемент ответа должны быть описаны в одной схеме (иметь одно и то же пространство имен схемы). При этом схема может быть разбита на несколько XML-документов (конструкция
xs:include
), а также ссылаться на другие XML-схемы (конструкцияxs:import
); - для директивных протоколов обмена необходимо включать в состав элементов, описанных на корневом уровне схемы, специализированные инструкции, содержащие директивы для процессинга СМЭВ;
- для директивных протоколов обмена в состав форматов передаваемых данных необходимо включать схемы СМЭВ-вложений; XML схемы протоколов обмена, причём как СМЭВ-заголовков, так и СМЭВ-вложений, регистрируемые в СМЭВ, должны удовлетворять требованиям документа «Требования к XML-схемам, регистрируемым в СМЭВ».
ИС участников взаимодействия в теле электронных сообщений должны поддерживать применение блоков и элементов данных, а также электронных подписей, описанных в данном документе. Использование других блоков и элементов, отличных от описанных в данном документе, не допускается.
Целевое пространство имён (target namespace) любой схемы, используемой в СМЭВ, должно быть глобально уникально.
Чтобы облегчить соблюдение этого требования, в СМЭВ каждому ОИВ – владельцу данных должен присваиваться базовый URI. Все схемы, регистрируемые в СМЭВ этим Владельцем данных, должны иметь target namespace
, начинающиеся с базового URI этого владельца. Таким образом, ответственность за уникальность базовых URI несёт оператор СМЭВ, а Владелец данных отвечает за уникальность target namespace в области действия своего базового URI.
Проверка схемы и сообщений
XSD-схема ВС должна проходить проверку на соответствие Методическим рекомендациям СМЭВ с помощью инструмента «Проверка корректности xsd-схем».
Проверка самих XML-сообщений на соответствие Методическим рекомендациям СМЭВ может быть выполнена с помощью инструмента «Проверка корректности xml-сообщения».
Пример XSD-схемы
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://kvs.pfr.com/snils-validation/1.0.1" xmlns:smev="urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" targetNamespace="http://kvs.pfr.com/snils-validation/1.0.1" elementFormDefault="qualified" attributeFormDefault="unqualified" jxb:version="2.0">
<import namespace="urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1" schemaLocation="smev-supplementary-commons-1.0.1.xsd"/>
<element name="SnilsValidationRequest">
<complexType>
<sequence>
<group ref="smev:PhysicalPersonQualifiedName-ModelGroup"/>
<element name="Snils" type="smev:SNILSType" nillable="false"/>
<element name="Gender" type="smev:GenderType" minOccurs="0"/>
<element name="BirthDate" type="date" minOccurs="0"/>
</sequence>
</complexType>
</element>
<element name="SnilsValidationResponse">
<complexType>
<group ref="tns:SnilsValidationGroupResponse" minOccurs="0"/>
</complexType>
</element>
<group name="SnilsValidationGroupResponse">
<sequence>
<element name="Result" type="boolean" nillable="false"/>
</sequence>
</group>
</schema>