Перейти к основному содержимому

Проверка документа XML

Документ XML считается корректным, если его структура соответствует ожидаемой схеме. Для построения такой схемы используется XML Schema — язык описания структуры документов XML. Данный стандарт позволяет создать полную модель документа со словарями имен, типов и значений элементов, атрибутов и других узлов для строгой валидации XML. Формат, реализующий стандарт XML Schema, называется XML Schema definition (XSD).

В «1С:Шине» реализована проверка документов XML с помощью схемы XSD. Для этого используется специальный тип встроенного языка ПроверкаXml.

Пример

Для следующего документа в формате XML:

<?xml version="1.0" encoding="UTF-8"?>
<Приложения>
<Приложение>
<Название>Демо CRM</Название>
<Сборка>1.0</Сборка>
</Приложение>
<Приложение>
<Название>Демонстрационное приложение</Название>
<Сборка>1.1</Сборка>
</Приложение>
<Приложение>
<Название>1С:Кабинет сотрудника</Название>
<Сборка>2.0</Сборка>
</Приложение>
</Приложения>

так может выглядеть схема XSD, которая описывает структуру документа:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Приложения">
<xs:complexType>
<xs:sequence>
<xs:element name="Приложение" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Название" type="xs:string"/>
<xs:element name="Сборка" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
примечание

В «Шине» поддерживается XML Schema версий 1.0 и 1.1. При проверке документа XML версия схемы определяется автоматически.

Проверка документа может быть выполнена в двух режимах:

  • ПроверитьДоПервойОшибки — проверка документа до первой ошибки, после чего проверка останавливается. Опция по умолчанию.
  • Проверить — полная проверка документа с получением списка всех ошибок. Требует больше системных ресурсов, поэтому рекомендуется к использованию при отладке и тестировании.

Использование схем XSD в проекте

Для проверки XML-документа схема может быть размещена в ресурсах проекта. Для этого необходимо добавить элемент Ресурсы, в котором необходимо загрузить файлы с расширением XSD или создать файл с расширением XSD и добавить в него описание структуры документа XML. Для файлов схем в ресурсе могут быть созданы отдельные каталоги. Если в текущем ресурсе файл схемы ссылается на другую схему этого же ресурса, то указанный путь должен соответствовать относительному пути к целевой схеме в ресурсе.

примечание

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

Разрешение зависимостей

В документе XML могут использоваться ссылки на локальные или внешние ресурсы, например, схемы XSD. Их загрузка и сохранение для повторного использования выполняется с помощью внутреннего механизма технологии.

В «1С:Шине» разрешение зависимостей выполняется автоматически. Загруженные данные добавляются в каталог ресурсов, где внешний идентификатор ресурса (URI) соответствует внутреннему идентификатору ресурса, по которому выполняется загрузка при повторном обращении. Также в данный каталог автоматически добавляются ресурсы проекта, доступ к которым можно получить по специальному имени ресурса (URN).

URIОписаниеПример
URNимя ресурса проекта в формате urn:1c-element:resource:{пространство имен проекта, разделитель "-"}:{путь ресурса в проекте}urn:1c-element:resource:dev-проект-основной:папка1/папка2/схема.xsd
URLссылка на внешний ресурсhttp://xmlcatalogs.org/schema/1.1/catalog.xsd, http://company.local/schema/1.0/entity.xsd

При успешном разрешении внешние зависимости сохраняются в локальной таблице базы данных для повторного использования. Сохраненные данные доступны для всего приложения.

Инициализация каталога выполняется после применения проекта при первом вызове проверки или преобразования XML. У записи каталога есть срок действия — 7 дней. Проверка истечения срока действия и удаление соответствующих записей выполняются после каждого применения проекта при вызове метода проверки или преобразования XML.

Также о разрешении зависимостей с примерами см. здесь.