При валидации xml произошла ошибка

Область применения электронной подписи (ЭП или ЭЦП) довольно широка. Например, многие специальные сервисы требуют верификации пользователя с её помощью: Госуслуги, онлайн-сервисы для управления средствами в банке, электронные площадки и другие. Поэтому любые технические неполадки, возникающие при использовании ЭЦП, могут вызвать различные серьёзные: от упущенной выгоды до материальных убытков.

Какие бывают ошибки

Проблемы при использовании ЭП, с которыми пользователи встречаются чаще всего, можно условно разделить на три группы:

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

Рассмотрим неполадки подробнее и разберёмся, как их решать.

Сертификат не найден

Иногда при попытке подписать электронный документ с помощью ЭП пользователь может столкнуться с ошибкой «Не удалось найти ни одного сертификата, пригодного для создания подписи».

У подобных ошибок могут быть следующие причины:

  1. На компьютере не установлены корневые сертификаты Удостоверяющего Центра (УЦ), в котором была получена ЭП. Необходимо установить либо обновить корневой сертификат. Установка корневых сертификатов удостоверяющего центра подробно описана в нашей инструкции.
  2. На ПК не установлено ни одного личного сертификата ЭП. Для применения ЭП необходимы и личные сертификаты. Об их установке мы писали в другой статье.
  3. Установленные на компьютере необходимые сертификаты не валидны. Сертификаты отозваны или просрочены. Уточните статус сертификата в УЦ. Ошибка с текстом «Ваш сертификат ключа подписи включён в список отозванных» возникает, если у сертификата закончился срок действия или на ПК нужно обновить список сертификатов. В последней ситуации следует вручную загрузить перечень отозванных сертификатов.

Для установки списка отозванных сертификатов:

  • Откройте личный сертификат пользователя в окне Свойства браузера. Чтобы открыть его, наберите «Свойства браузера» в поисковой строке меню Пуск. Перейдите во вкладку Содержание и нажмите кнопку «Сертификаты».
  • личный сертификат1

  • Во вкладке Состав выберите из списка пункт «Точки распространения списков отзыва».
  • В блоке Имя точки распространения скопируйте ссылку на загрузку файла со списком отзыва.
  • Имя точки2

  • Скачайте по указанной ссылке файл. Нажмите по нему правой кнопкой мыши и выберите в контекстном меню «Установить список отзыва (CRL)».
  • Следуйте указаниям «Мастера импорта сертификатов».

Не виден сертификат на носителе

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

К наиболее распространённым причинам такой проблемы относятся следующие случаи:

  1. Драйвер носителя не установлен или установлен некорректно. Для решения проблемы необходимо извлечь носитель электронной подписи из ПК и скачать последнюю версию драйвера носителя с официальных ресурсов. Если переустановка драйвера не помогла, подключите носитель к другому ПК, чтобы убедиться в исправности токена. Если токен определится другой системой, попробуйте удалить на неисправном компьютере драйвер носителя и установить его заново.
  2. Долгое опознание носителя. Для решения проблемы необходимо дождаться завершения процесса или обновить версию операционной системы.
  3. Некорректная работа USB-порта. Подключите токен к другому USB-порту, чтобы убедиться, что проблема не в носителе ЭП. Если система определила токен, перезагрузите компьютер. Если это не поможет, следует обратиться службу технической поддержки.
  4. Неисправность носителя. Если при подключении токена к другому компьютеру или USB-порту система не определяет его, значит, проблема в самом носителе. Устранение неисправности возможно в данном случае лишь одним путём — нужно обратиться в сервисный центр для выпуска нового носителя.

ЭП не подписывает документ

Причин у подобной проблемы множество. Каждый случай требует отдельной проверки. Среди самых распространённых можно выделить следующие неполадки:

  1. Закрытый ключ на используемом контейнере не соответствует открытому ключу сертификата. Возможно, был выбран не тот контейнер, поэтому следует проверить все закрытые контейнеры на компьютере. Если необходимый контейнер по тем или иным причинам отсутствует, владельцу придётся обращаться в удостоверяющий центр для перевыпуска ЭП.
  2. Ошибка «Сертификат недействителен» (certificate is not valid). Следует повторно установить сертификат ЭП по инструкциям УЦ в зависимости от используемого криптопровайдера — КриптоПро CSP, ViPNet CSP или другого.
  3. Сертификат ЭП определяется как непроверенный. В этом случае необходимо переустановить корневой сертификат удостоверяющего центра.
  4. Истёк срок действия криптопровайдера. Для решения этой проблемы необходим новый лицензионный ключ к программе-криптопровайдеру. Для его получения необходимо обращаться к специалистам УЦ или к ответственным сотрудникам своей организации.
  5. Подключён носитель с другим сертификатом. Убедитесь, что подключён правильный токен. Проверьте также, не подключены ли носители других сертификатов. Отключите другие носители в случае их обнаружения.

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

подписания3

В этой ситуации помогает установка и регистрация библиотеки Capicom:

  1. Скачайте файл архива.
  2. Распакуйте и переместите файлы capicom.dll и capicom.inf в каталог syswow64, находящийся в корневой папке ОС.
  3. Откройте командную строку от имени администратора — для этого в меню Пуск наберите «Командная строка», нажмите по найденному приложению правой кнопкой мыши и выберите Запуск от имени администратора.
  4. «Командная строка»4

  5. Введите «c:windowssyswow64regsvr32.exe capicom.dll» (без кавычек) и нажмите ENTER. Должно появиться уведомление о том, что команда выполнена успешно.
  6. нажмите ENTER5

Выбранная подпись не авторизована

Подобная ошибка возникает при попытке авторизации в личном кабинете на электронных торговых площадках. Например, при входе на площадку ZakazRF отображается сообщение «Выбранная ЭЦП не авторизована».

площадку ZakazRF6

Эта ошибка возникает из-за того, что пользователь не зарегистрирован на площадке, либо не зарегистрирован новый сертификат ключа ЭП. Решением проблемы будет регистрация нового сертификата.

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

Часто задаваемые вопросы

Почему компьютер не видит ЭЦП?

Причина кроется в несовместимости программного обеспечения и физического носителя ЭЦП. Необходимо проверить версию операционной системы и переустановить её до нужной версии. Если токен повреждён, возможно, понадобится обратиться в удостоверяющий центр для перевыпуска электронной подписи.

О том, что делать, если компьютер не видит ЭЦП и о способах проверки настроек, мы подробно писали в нашей статье.

Почему КриптоПро не отображает ЭЦП?

Если КриптоПро не отображает ЭЦП, следует проверить настройки браузера. Также исправляет ошибку добавление программы в веб-обозреватель и загрузка недостающих сертификатов электронной подписи.

Подробнее ознакомиться, как устранить данную неисправность можно в нашей статье.

Где на компьютере искать сертификаты ЭЦП?

Сертификат ЭЦП позволяет проверить подлинность подписи, содержит в себе срок её действия и информацию о владельце. Он автоматически загружается в папку с системными файлами. В операционной системе Windows от 7 версии и выше ЭЦП хранится по адресу:

C:UsersПОЛЬЗОВАТЕЛЬAppDataRoamingMicrosoftSystemCertificates. Вместо ПОЛЬЗОВАТЕЛЬ требуется указать наименование используемого компьютера.

Что такое сертификат ЭЦП и зачем он нужен мы рассказали в нашей статье.

Наличие ошибок в коде страницы сайта всегда влечет за собой негативные последствия – от ухудшения позиций в ранжировании до жалоб со стороны пользователей. Ошибки валидации могут наблюдаться как на главной, так и на иных веб-страницах, их наличие свидетельствует о том, что ресурс является невалидным. Некоторые проблемы замечают даже неподготовленные пользователи, другие невозможно обнаружить без предварительного аудита, анализа. О том, что такое ошибки валидации и как их обнаружить, мы сейчас расскажем.

Комплексный аудит сайта, что входит, как сделать

Ошибка валидации, что это такое?

Для написания страниц используется HTML – стандартизированный язык разметки, применяемый в веб-разработке. HTML, как любой другой язык, имеет специфические особенности синтаксиса, грамматики и т. д. Если во время написания кода правила не учитываются, то после запуска сайта будут появляться различные виды проблем. Если HTML-код ресурса не соответствует стандарту W3C, то он является невалидным, о чем мы писали выше.

Почему ошибки валидации сайта оказывают влияние на ранжирование, восприятие?

Наличие погрешностей в коде – проблема, с которой необходимо бороться сразу после обнаружения. Поисковые системы «читают» HTML-код, если он некорректный, то процесс индексации и ранжирования может быть затруднен. Поисковые роботы должны понимать, каким является ресурс, что он предлагает, какие запросы использует. Особо критичны такие ситуации для ресурсов, имеющих большое количество веб-страниц.

Как проверить ошибки валидации?

Как проверить ошибки валидации
Для этой работы используется либо технический аудит сайта, либо валидаторы, которые ищут проблемы автоматически. Одним из самых популярных является сервис The W3C Markup Validation Service, выполняющий сканирование с оглядкой на World Wide Web Consortium (W3C). Рассматриваемый валидатор предлагает три способа, с помощью которых можно осуществить проверку сайта:

  • ввод URL-адреса страниц, которые необходимо просканировать;
  • загрузка файла страницы;
  • ввод части HTML-кода, нуждающегося в проверке.

После завершения проверки вы получите развернутый список выявленных проблем, дополненных описанием, ссылками на стандарты W3C. По ходу анализа вы увидите слабые места со ссылками на правила, что позволит самостоятельно исправить проблему.

Существуют другие сервисы, позволяющие выполнить проверку валидности кода:

  • Dr. Watson. Проверяет скорость загрузки страниц, орфографию, ссылки, а также исходный код;
  • InternetSupervision.com. Отслеживает производительность сайта, проверяет доступность HTML.

Плагины для браузеров, которые помогут найти ошибки в коде

Решить рассматриваемую задачу можно с помощью плагинов, адаптированных под конкретный браузер. Можно использовать следующие инструменты (бесплатные):

  • HTML Validator для браузера Firefox;
  • HTML Validator for Chrome;
  • Validate HTML для Firefox.

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

Как исправить ошибку валидации?

Как исправить ошибку валидации
В первую очередь нужно сосредоточить внимание на слабых местах, связанных с контентом – это то, что важно для поисковых систем. Если во время сканирования было выявлено более 25 проблем, то их нельзя игнорировать из-за ряда причин:

  • частичная индексация;
  • медленная загрузка;
  • баги, возникающие во время непосредственной коммуникации пользователя с ресурсом.

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

Технический и SEO-аудит

Выявление ошибок – первый шаг, ведь их еще нужно будет устранить. При наличии большого пула проблем целесообразно заказать профессиональный аудит сайта. Он поможет найти разные виды ошибок, повысит привлекательность ресурса для поисковых ботов, обычных пользователей: скорость загрузки страниц, верстка, переспам, другое.

В заключение

На всех сайтах наблюдаются ошибки валидации – их невозможно искоренить полностью, но и оставлять без внимания не стоит. Например, если провести проверку сайтов Google или «Яндекс», то можно увидеть ошибки, однако это не означает, что стоит вздохнуть спокойно и закрыть глаза на происходящее. Владелец сайта должен ставить во главу угла комплексное развитие, при таком подходе ресурс будет наполняться, обновляться и «лечиться» своевременно. Если проблем мало, то можно попробовать устранить их своими силами или с помощью привлечения стороннего частного специалиста. В остальных случаях лучше заказать услугу у проверенного подрядчика.

Что такое ошибки валидации и как их исправить

Описание ошибок приёма

Код Наименование Описание
-10 He удалось расшифровать Общая ошибка расшифровки. Возможно, проблема в сертификате, используемом для шифрования.
-11 He удалось проверить ЭЦП. Ошибка сертификата пользователя – в данном случае следует связаться с УЦ, выдавшим вам ЭЦП. XML – файл был подписан дважды, необходимо выбрать и подписать файл расчета еще раз. Нарушен порядок подписания / шифрования файла расчета. Файл расчета сначала подписывается ЭЦП, затем зашифровывается.
-12 ЭЦП не верна. ЭЦП файла расчёта не верна или отсутствует.
-13 В сертификате отсутствует регистрационный номер страхователя. Сертификат пользователя не содержит записи о Регистрационном номере страхователя (свойство 1.2.643.3.141.1.1 поля «Субъект» сертификата). Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-14 В сертификате отсутствует код подразделения ФСС РФ. Сертификат пользователя не содержит записи о Коде подразделения ФСС РФ (свойство 1.2.643.3.141.1.2 поля «Субъект» сертификата). Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-15 Ошибка шифрования Внутренняя ошибка криптосервиса. Необходимо отправить файл расчета повторно.
-16 Неверный формат регистрационного номера страхователя. В сертификате, выданным УЦ, неправильно указан регистрационный номер страхователя (количество цифр регистрационного номера не равно 10). Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-17 Неверный формат кода подразделения ФСС РФ. В сертификате, выданным УЦ, неправильно указан код подразделения ФСС РФ (количество цифр код подразделения не равно 4). Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-18 Расчет зашифрован на ключе, отличном от открытого ключа ФСС.
  1. При подписании и шифровании файла расчета выбран неверный сертификат уполномоченного лица ФСС РФ. В данном случае нужно повторить операцию подписания и шифрования используя сертификат уполномоченного лица ФСС РФ Хасянова Рената Алиевича (Департамент ИТ ФСС РФ).
  2. При подписании и шифровании файла расчета выбран просроченный сертификат уполномоченного лица ФСС РФ. Необходимо использовать новый сертификат уполномоченного лица ФСС РФ. Для этого их необходимо загрузить новый сертификат с официального сайта Фонда http://www.fss.ru/uc и установить в хранилище сертификатов («Обновление сертификатов УЦ ФСС РФ»).
-19 Расчет не зашифрован или не подписан. Необходимо подписать, зашифровать и направить файл расчета на шлюз приема расчетов повторно.
-20 Неизвестный формат файла. Формат файла не xml. Необходимо сформировать новый файл расчёта в соответствии с Технологией приема расчетов (http://fss.ru/ru/legal_information/124/133/258854.shtml).Расчет страхователя по Форма-4 ФСС за 1-й квартал 2017 г. должен быть подготовлен в виде xml файла в формате, заданном следующей XSD-схемой.
-41 Нет доверия к издателю сертификата. Данная ошибка возникает в следующих случаях:
1) Корневой сертификат УЦ не соответствует Федеральному закону от 06.04.2011 № 63-ФЗ (Закон № 63-ФЗ)
2) Не установлен корневой сертификат УЦ
Необходимо связаться с УЦ, выдавшим сертификат пользователя.
-42 Ошибка при проверке сертификата. Общая ошибка шифрования. Необходимо отправить файл расчета повторно.
-43 Сертификат отозван. Сертификат, которым подписан файл расчета, более недействителен. Необходимо связаться с УЦ, выдавшим сертификат пользователя.
-44 Не найден или просрочен СОС издателя сертификата. Ошибка списка отозванных сертификатов (СОС) УЦ, выдавшего сертификат пользователя. Необходимо связаться для консультации с УЦ, выдавшим сертификат пользователя.
-45 Сертификат поврежден. Общая ошибка шифрования. Необходимо отправить файл расчета повторно.
-46 Сертификат просрочен Сертификат пользователя, которым подписан файл расчета , более недействителен. Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-50 В сертификате отсутствует ИНН страхователя. Сертификат пользователя не содержит записи о ИНН страхователя (свойство 1.2.643.3.131.1.1 поля «Субъект» сертификата). Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-51 ИНН, указанный в расчете, отсутствует в базе данных ЕГРЮЛ. Отчет не принят, т.к. ИНН, указанный в расчете, отсутствует в базе данных ЕГРЮЛ. Необходимо обратиться в ФНС по месту регистрации.
-503 XML-файл расчёта не прошел форматный контроль Рекомендуется проверить xml-файл по соответствующей ему XSD схеме. Например, расчет страхователя по Форма-4 ФСС за 1-й квартал 2017 г. должен быть подготовлен в виде xml файла в формате, заданном следующей XSD-схемой. Для других периодов используются соответствующие XSD схемы.
-504 В сертификате указано несуществующее подразделение ФСС РФ В сертификате пользователя, выданным УЦ, неправильно указан код подразделения ФСС РФ. Необходимо обратиться в УЦ, выдавший сертификат для его переиздания.
-505 Неверное наименование файла. Необходимо привести наименование файла в соответствие с Технологией приема расчетов (регистрационный номер страхователя_расчетный год_отчетный квартал.ef4).
-506 Вторые разделы расчёта имеют одинаковые шифры налогообложения Необходимо исправить расчёт.
-507 Нет файла *.xml Не загружен файл расчета. Необходимо отправить файл расчета повторно.
-508 Ошибки логического контроля Рекомендуется исправить ошибочные параметры расчёта(например: не заполнена строка Всего Таблицы 1.1). Отчет принят с замечаниями.
-509 Отчетный период в XML-файле не совпал с отчетным периодом в наименовании файла Необходимо привести содержание xml-файла расчёта в соответствие с наименованием.
-511 Ошибка при чтении XML-файла расчёта Файл пуст или не является XML-файлом
-512 Расчетный год в XML-файле не совпал с расчетным годом в наименовании файла расчёта. Необходимо привести содержание xml-файла расчёта в соответствие с наименованием.
-513 Регистрационный номер страхователя в сертификате не совпадает с регистрационным номером, указанном в имени файла. Файл расчёта подписан ЭЦП, принадлежащей организации, отличной от указанной в расчёте. Необходимо проверить сертификат используемый для ЭЦП.
-514 Регистрационный номер страхователя в XML-файле не совпадает с регистрационным номером в сертификате ЭЦП. Необходимо привести содержание xml-файла расчёта в соответствие с сертификатом.
-515 Регистрационный номер страхователя в XML-файле не совпадает с номером страхователя, указанном в имени файла. Необходимо проверить содержание xml-файла расчёта.
-516 Дополнительный код обособленного подразделения в XML-файле не совпадает с номером страхователя, указанном в имени файла. Необходимо проверить содержание xml-файла расчёта.
-517 Слишком большой файл Размер файла расчёта превышает максимально допустимое значение 2097152 байт. Необходимо сформировать новый файл расчёта
-518 Нулевой размер файла Необходимо сформировать новый файл расчёта
-519 ИНН страхователя в XML-файле не совпадает с ИНН страхователя в сертификате. При сдаче за другое юр. лицо должны соответствовать рег. номер, при сдаче за своё юр. лицо — ИНН. Следует проверить сертификат, используемый для ЭЦП.
-520 ОГРН страхователя в XML-файле не совпадает с ОГРН страхователя в сертификате. Необходимо проверить сертификат используемый для ЭЦП.
-550 Сертификат не является квалифицированным сертификатом. Сертификат пользователя, которым подписан файл расчета, не является квалифицированным сертификатом.
-552 Атрибут QUART_NUM элемента TITLE может иметь значение только из следующего ряда: «3»,»6″,»9″,»0″,»03″,»06″,»09″,»12″. Необходимо исправить значение атрибута QUART_NUM в XML-файле отчёта.
-598 ИНН страхователя в XML-файле отличается от ИНН, соответствующего регистрационному номеру страхователя в БД ФСС РФ. Необходимо проверить актуальность использованного ИНН.
-599 Внутренняя ошибка в модуле контроля принимаемых данных. Сообщите в техническую поддержку.

Просмотров 1.2к. Опубликовано 19.12.2022
Обновлено 19.12.2022

Каждый сайт, который создает компания, должен отвечать принятым стандартам. В первую очередь затем, чтобы он попадал в поисковую выдачу и был удобен для пользователей. Если код страниц содержит ошибки, неточности, он становится “невалидным”, то есть не соответствующим требованиям. В результате интернет-ресурс не увидят пользователи или информация на нем будет отображаться некорректно. 

В этой статье рассмотрим, что такое валидность, какие могут быть ошибки в HTML-разметке и как их устранить.

Содержание

  1. Что такое HTML-ошибка валидации и зачем она нужна
  2. Чем опасны ошибки в разметке
  3. Как проверить ошибки валидации
  4. Предупреждения
  5. Ошибки
  6. Пример прохождения валидации для страницы сайта
  7. Как исправить ошибку валидации
  8. Плагины для браузеров, которые помогут найти ошибки в коде
  9. Коротко о главном

Что такое HTML-ошибка валидации и зачем она нужна

Под понятием  “валидация” подразумевается процесс онлайн-проверки HTML-кода страницы на соответствие стандартам w3c. Эти стандарты были разработаны Организацией всемирной паутины и стандартов качества разметки. Сама организация продвигает идею унификации сайтов по HTML-коду — чтобы каждому пользователю, вне зависимости от браузера или устройства, было удобно использовать ресурс.

Если код отвечает стандартам, то его называют валидным. Браузеры могут его прочитать, загрузить страницы, а поисковые системы легко находят страницу по соответствующему запросу. 

Чем опасны ошибки в разметке

Ошибки валидации могут разными — видимыми для глаза простого пользователя или такими, которые можно засечь только с помощью специальных программ. В первом случае кроме технических проблем, ошибки в разметке приводят к негативному пользовательскому опыту. 

К наиболее распространённым последствиям ошибок в коде HTML-разметки также относят сбои в нормальной работе сайта и помехи в продвижении ресурса в поисковых системах.

Рассмотрим несколько примеров, как ошибки могут проявляться при работе:

  • Медленно подгружается страница 

Согласно исследованию Unbounce, более четверти пользователей покидают страницу, если её загрузка занимает более 3 секунд, ещё треть  уходит после 6 секунд;

  • Не видна часть текстовых, фото и видео-блоков 

Эта проблема делает контент для пользователей неинформативным, поэтому они в большинстве случаев уходят со страницы, не досмотрев её до конца;

  • Страница может остаться не проиндексированной

Если поисковый робот распознает недочёт в разметке, он может пропустить страницу и прервать её размещение в поисковых системах;

  • Разное отображение страниц на разных устройствах

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

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

Как проверить ошибки валидации

Владельцы ресурсов используют 2 способа онлайн-проверки сайтов на наличие ошибок — технический аудит или использование валидаторов. 

Первый случай подходит для серьёзных проблем и масштабных сайтов. Валидаторами же пользуются ежедневно. Наиболее популярный — сервис The W3C Markup Validation Service. Он сканирует сайт и сравнивает код на соответствие стандартам W3C. Валидатор выдаёт 2 типа несоответствий разметки стандартам W3C: предупреждения и ошибки. 

Давайте рассмотрим каждый из типов чуть подробнее.

Предупреждения

Предупреждения отмечают незначительные проблемы, которые не влияют на работу ресурса. Они появляются из-за расхождений написания разметки со стандартами W3C. 

Тем не менее, предупреждения всё равно нужно устранять, так как из-за них сайт может работать медленнее — например, по сравнению с конкурентами с такими же сайтами.

Примером предупреждения может быть указание на отсутствие тега alt у изображения. 

Ошибки

Ошибки  —  это те проблемы, которые требуют обязательного устранения. 

Они представляют угрозу для корректной работы сайта: например, из-за них могут скрываться разные блоки  — текстовые, фото, видео. А в некоторых более запущенных случаях содержимое страницы может вовсе не отображаться, и сам ресурс не будет загружаться. Поэтому после проверки уделять внимание ошибкам с красными отметками нужно в первую очередь.

Распространённым примером ошибки может быть отсутствие тега <!DOCTYPE html> в начале страницы, который помогает информации преобразоваться в разметку. 

Пример прохождения валидации для страницы сайта

Рассмотрим процесс валидации на примере сайта avavax.ru, который создали на WordPress.

пример ошибки валидации

В результате проверки валидатор выдал 17 замечаний. После анализа отчета их можно свести к 3 основным:

  1. атрибут ‘text/javascript’ не требуется при подключении скрипта;
  2. атрибут ‘text/css’ не требуется при подключении стиля;
  3. у одного из элементов section нет внутри заголовка h1-h6.

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

Решить проблемы с предупреждениями для стилей и скриптов можно через добавление кода в файл темы function.php.

Добавление кода в файл

Для этого на хук wp_loaded нужно повесить функцию output_buffer_start(), которая загрузит весь генерируемый код html в буфер. При выводе в буфер вызывается функция output_callback($tag), которая просматривает все теги, находит нежелательные атрибуты с помощью регулярных выражений и заменяет их пробелами. Затем на хук ‘shutdown вешается функция output_buffer_end(), которая возвращает обработанное содержимое буфера.

Для исправления семантики на сайте нужно использовать заголовки. Валидатор выдаёт предупреждение на секцию about, которая содержит фото и краткий текст. Валидатор требует, чтобы в каждой секции был заголовок. Для исправления предупреждения нужно добавить заголовок, но сделать это  так, чтобы его не было видно пользователям:

  1. Добавить заголовок в код:  <h3>Обо мне</h3>

Отключить отображение заголовка:

1 #about h3 {
2 display: none;
3 }

После этой части заголовок будет в коде, но валидатор его увидит, а посетитель — нет. 

За 3 действия удалось убрать все предупреждения, чтобы качество кода устроило валидатор. Это подтверждается зелёной строкой с надписью: “Document checking completed. No errors or warnings to show”.

Как исправить ошибку валидации

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

Поэтому если навыков и знаний не хватает, лучше привлечь сторонних специалистов для улучшения качества разметки. Это могут быть как фрилансеры, так и профессиональные веб-агентства. При выборе хорошего специалиста, результат будет гарантироваться в любом случае, но лучше, чтобы в договоре оказания услуг будут чётко прописаны цели проведения аудита и гарантии решения проблем с сайтом. 

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

Плагины для браузеров, которые помогут найти ошибки в коде

Для поиска ошибок валидации можно использовать и встроенные в браузеры плагины. Они помогут быстро находить неточности еще на этапе создания кода. 

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

  • HTML Validator для браузера Firefox;
  • HTML Validator for Chrome;
  • HTML5 Editor для Opera.

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

Коротко о главном

Валидация — процесс выявления проблем с HTML-разметкой сайта и ее соответствия стандартам W3C. Это унифицированные правила, с помощью которых сайт может нормально работать и отображаться и для поисковых роботов, и для пользователей. 

Проверку ресурса можно проводить тремя путями: валидаторами, специалистам полномасштабного аудита и плагинами в браузере. В большинстве случаев валидатор — самое удобное и быстрое решение для поиска проблем. С его помощью можно выявить 2 типа проблем с разметкой — предупреждения и ошибки. 

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

Даже у крупных сайтов с миллионной аудиторией, например, Яндекс.Дзен или ВКонтакте, есть проблемы с кодом. Но комплексный подход к решению проблем помогает устранять серьёзные моменты своевременно. Нужно развивать сайт всесторонне, чтобы получить результат от его существования и поддержки. Если самостоятельно разобраться с проблемами не получается, не стоит “доламывать” — лучше обратиться за помощью к профессионалам, например, агентствам по веб-аудиту. 

Ошибка валидации

Просмотр 15 сообщений — с 1 по 15 (из 15 всего)

  • Автор

    Сообщения

  • Добрый день. Пишет ошибку у элемента flat отсутствует дочерний элемент. Путь TP/flat/conclusion. Насколько я поняла, это означает, что нет заключения. Но заключения заполнены. Это моя ошибка или ошибка программы? При формировании техплана на здание такого не происходило.

    • Тема изменена 3 года/лет, 7 мес. назад пользователем  ks2310.
    Вложения:

    You must be logged in to view attached files.

    Приложения в xml-схеме помечены как обязательные.

    Здравствуйте.
    Образуем объект незавершенного строительства, состоящий из 6 контуров. Программа выдает ошибку:» учетный/порядковый номер контура» Подскажите, как исправить. Спасибо.

    Вложения:

    You must be logged in to view attached files.

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

    Добрый день!
    Не проходит валидация xml в 06 версии. Ошибка в номере здания/контура.
    В чем дело? не могу понять.

    • Ответ изменён 3 года/лет, 5 мес. назад пользователем  margosay.
    Вложения:

    You must be logged in to view attached files.

    1. У вас номер образуемого здания проставлен. Номер проставляется либо кадастровый, либо если несколько зданий, то порядковый. Номер при образовании одного здания не проставляется.
    2. Не указана система координат — она является обязательным атрибутом
    3. Почему Вы делите здание на два отдельных контура? 2-й этаж здания это не контур. Читайте фз-218. Контур здания определяется как проекция на поверхность первого этажа всех внешних контуров верхних этажей. Контур здания делится, если у Вас два отдельных друг от друга контура. В остальных случаях — фигура определяется проекцией с подписью этажности.
    Надземный конструктивный элемент в виде например балконов не относится к отдельному контуру.
    Надземный контур здания — это здание на колоннах, то есть первый этаж здания располагается выше уровня поверхности земли (под зданием — пустота, либо можно зарегистрировать другое здание, но это будет отдельный техплан).

    1.Не проходит ни с порядковым номером ни без него!
    2. Насчет системы координат — ошибки не выходило при валидации. и что за новый формат СК? код субъекта и номер зоны..
    3.В требованиях это написано и в разъяснениях Минэко. Что этажи — это контура

    Андрей, прошу поясните новшества в версии 6!
    в сравнении с предыдущей — совершенно непонятно как работать в ней.

    Для этого откройте в программе справку (F1) и найдите раздел «Особенности формирования XML-файлов согласно схеме TP_v06». Там много чего разъяснено.

    Но мало что понятно.. к сожалению.
    всегда читаю справку сначала.

    Тогда нужно присылать ваш xcn файл на почту с конкретным вопросом. Будем подсказывать.

    12.02.2020 в 13:07

    #12181

    Добрый день.
    Выдает ошибку при формировании конечного пакета. Ошибка возникает как при введенном порядковом номере сооружения (сооружение одно, номер 1), так и при оставлении поля пустым. Соответственно поле номеров контуров также выдает ошибку.
    Прошу разобраться в ближайшее время.

    Вложения:

    You must be logged in to view attached files.

    12.02.2020 в 15:23

    #12185

    План сооружения обязательный элемент в xml-файле согласно xml-схеме. Нужно хоть что-нибудь там привязать. Как правило, для сооружения можно повторить схему как план сооружения.

    22.11.2020 в 14:39

    #15008

    Добрый день!
    При формировании xml-файла технического плана на уточнение характеристик сооружения, состоящего из нескольких контуров программа выдает ошибку валидации: «Ошибка валидации, строка: 138, позиция: 24 —
    У элемента Plans отсутствует дочерний элемент.
    Путь, по которому в целевом файле выявлена ошибка: TP[1]/Construction[1]/Package[1]/ExistConstruction[1]/Plans[1]
    Форма-таблица, которой соответствует ошибка: Сооружения/Cооружения(Constructions), запись(ряд) номер: 1». Прошу подсказать в чем ошибка и как правильно заполнить данные в программе. Файл техплана прилагаю.
    Спасибо.

    Вложения:

    You must be logged in to view attached files.

    23.11.2020 в 14:37

    #15013

    Планы (этажей/сооружения) для сооружений обязательный элемент, как и для зданий. Для сооружения можно еще раз привязать схему, если нету отдельных планов.

  • Автор

    Сообщения

Просмотр 15 сообщений — с 1 по 15 (из 15 всего)

Для ответа в этой теме необходимо авторизоваться.

В статье освещены основные проблемы при работе с сертификатами (ключами) ЭЦП НУЦ РК:

-невозможно зайти в кабинет налогоплательщика, в egov.kz и др. сервисы еПравительства РК.

-невозможно подписать, отправить документ, заявку и т.п.

В основе правильной работы большинства сервисов электронного правительства РК лежит установка утилиты NCA Layer, которая также содержит корневые сертификаты удостоверяющего центра. Поэтому, даже если какой-либо портал (например ЭСФ или кабинет налогоплательщика) не использует в работе данную утилиту, мы все же рекомендуем установить (обновить) ее.

ШАГ 1. Проверьте утилиту NCA Layer.

Если утилита никогда не устанавливалась то следует скачать ее и установить с сайта удостоверяющего центра по ссылке http://pki.gov.kz/index.php/ru/ncalayer

Необходимо проверить обновление утилиты, а также запущена ли она.

Значок этой уттилиты отображается в области уведомлений системы (возле значка переключения языков).

Значок выглядит так:  NCA Layer в трее

Если область уведомлений свернута то так:

NCA Layer в трее
Если значок есть, нажимаем на него правой кнопкой мыши и выбираем «Выход»
Теперь значок отсутствует. Далее запускаем утилиту NCA Layer  NCA Layer значок  с рабочего стола.
Если программа попросит обновится, то:
В окне с предложением обновления нажимаем «Загрузить». Даем в браузере разрешение на скачивание файла. Пока файл загружается, снова выходим из утилиты NCA Layer в области уведомлений, нажав на значок правой кнопкой мыши и выбрав «выход».
Запускаем скачанный файл. Программа сначала попросит удалить старую версию — соглашаемся. Затем, нажав «далее» несколько раз, устанавливаем новую версию утилиты.
Внимание! Во время установки антивирус может запросить разрешение на выполнение установки программы. Соглашаемся. В конце установки, встроенный файрвол Windows, возможно, так же попросит разрешения на использование программой сети интернет.

Так же проверьте установлены или обновлены ли модули утилиты. Для этого в области уведомлений нужно нажать правой кнопкой мыши на значок NCA Layer и выбрать «управление модулями».

Управление модулями NcaLayer

Проверьте, какие модули Вам нужны для работы и какие модули нужно установить. Например, модуль для работы на сайте Государственных закупок РК не устанавливается по умолчанию. Выберите этот модуль в списке и нажмите «Установить»

В ДОПОЛНЕНИЕ ВАЖНО!

Если Вы используете Кабинет Налогоплательщика, то также в NCA Layer необходимо установить Модуль knpplugin.

Более подробно о настройка кабинета налогоплательщика Вы можете прочесть в нашей статье https://pokompu.kz/кабинет-налогоплательщика/

Если Вы используете сайт Электронные счет-фактуры, то Вам необходимо установить модуль ЭСФ в NCA Layer

О дополнительных настройках и регистрации на портале ЭСФ читайте в нашей статье https://pokompu.kz/регистрация-на-портале-esf-gov-kz-электронны/

ШАГ 2. Проверяем настройки сертификатов и браузера
Выберите вариант браузера, с которым Вы работаете.

Вариант 1. Google Chrome

Если Вы используете Google Chrome, то дополнительные настройки не требуются.

[свернуть]

Вариант 2. Mozilla Firefox

Откройте браузер Mozilla Firefox 

Зайдите на официальный сайт >>> НУЦ РК <<<, чтобы установить корневые сертификаты.

Прокрутите вниз страницы и скачайте корневые сертификаты.

Корневые сертификаты НУЦ

Скопируйте и вставьте в адрес браузера firefox строку about:preferences#advanced или нажмите настройки Настройки firefox — дополнительные — сертификаты.

Далее щелкните «просмотр сертификатов» и выберите вкладку «Центры Сертификации»:

Центр сертификатов Firefox

Жмем «импортировать» и выбираем по порядку все 4 корневых сертификата, которые Вы скачали.

Закрываем браузер Firefox , открываем заново и пробуем воспользоваться сервисом электронного правительства.

[свернуть]

Вы можете также посмотреть короткое видео, как быстро проверить все настройки ЭЦП в компьютере (данное видео устарело, но в целом верно отражает настройки).

Не удалось решить проблему? Обращайтесь к нам через
форму обратной связи.

Или задавайте вопросы в комментариях ниже.

Мне необходимо провалидировать часть XML документа.

XmlClass.verifyTagXMLbytes(…)

При вызове метода постоянно получаю результат -1.

Вовремя валидации в консоль выводятся различные ошибки.

Пример из SDK не работает. Пробовал различные ЭЦП, старые и новые, CA файлы и CER и DER, всеравно получаю ошибку.

В чем может быть дело?

Вот вывод консоли примера из SDK:

verifyTagXMLbytes START.
func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=360:obj=x509-store:subj=X5
09_verify_cert:error=4:crypto library function failed:subj=/serialNumber=IIN9517
35469875/CN=xD0x98xD0x92xD0x90xD0x9DxD0x9ExD0x92 xD0x98xD0x92xD
0x90xD0x9D/SN=xD0x98xD0x92xD0x90xD0x9DxD0x9ExD0x92/GN=xD0x98xD
0x92xD0x90xD0x9DxD0x9ExD0x92xD0x98xD0xA7/C=KZ;err=20;msg=unable to
get local issuer certificate
func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=408:obj=x509-store:subj=un
known:error=71:certificate verification failed:err=20;msg=unable to get local is
suer certificate
func=xmlSecKeysMngrGetKey:file=keys.c:line=1370:obj=unknown:subj=xmlSecKeysMngrF
indKey:error=1:xmlsec library function failed:
func=xmlSecDSigCtxProcessKeyInfoNode:file=xmldsig.c:line=871:obj=unknown:subj=un
known:error=45:key is not found:
func=xmlSecDSigCtxProcessSignatureNode:file=xmldsig.c:line=565:obj=unknown:subj=
xmlSecDSigCtxProcessKeyInfoNode:error=1:xmlsec library function failed:
func=xmlSecDSigCtxVerify:file=xmldsig.c:line=366:obj=unknown:subj=xmlSecDSigCtxS
ignatureProcessNode:error=1:xmlsec library function failed:
Error: signature verify

Вот другая ошибка, возникает в моем коде:

verifyTagXMLbytes START.
func=xmlSecOpenSSLAppCertLoadBIO:file=app.c:line=1249:obj=unknown:subj=PEM_read_
bio_X509_AUX:error=4:crypto library function failed:
func=xmlSecOpenSSLAppKeysMngrCertLoadBIO:file=app.c:line=1134:obj=unknown:subj=x
mlSecOpenSSLAppCertLoadBIO:error=1:xmlsec library function failed:
func=xmlSecOpenSSLAppKeysMngrCertLoad:file=app.c:line=1033:obj=unknown:subj=xmlS
ecOpenSSLAppKeysMngrCertLoadBIO:error=1:xmlsec library function failed:filename=
Assets2015 ProductionCaCertificatesOldOidsnew_NCA_GOST.cer;errno=2
Error: failed to load pem certificate from "╨kп═Р"
mngr is INVALID
func=xmlSecXPathDataExecute:file=xpath.c:line=273:obj=unknown:subj=xmlXPtrEval:e
rror=5:libxml2 library function failed:expr=xpointer(id('kalkanSignedBody'))
func=xmlSecXPathDataListExecute:file=xpath.c:line=373:obj=unknown:subj=xmlSecXPa
thDataExecute:error=1:xmlsec library function failed:
func=xmlSecTransformXPathExecute:file=xpath.c:line=483:obj=xpointer:subj=xmlSecX
PathDataExecute:error=1:xmlsec library function failed:
func=xmlSecTransformDefaultPushXml:file=transforms.c:line=2405:obj=xpointer:subj
=xmlSecTransformExecute:error=1:xmlsec library function failed:
func=xmlSecTransformCtxXmlExecute:file=transforms.c:line=1236:obj=unknown:subj=x
mlSecTransformPushXml:error=1:xmlsec library function failed:transform=xpointer
func=xmlSecTransformCtxExecute:file=transforms.c:line=1296:obj=unknown:subj=xmlS
ecTransformCtxXmlExecute:error=1:xmlsec library function failed:
func=xmlSecDSigReferenceCtxProcessNode:file=xmldsig.c:line=1571:obj=unknown:subj
=xmlSecTransformCtxExecute:error=1:xmlsec library function failed:
func=xmlSecDSigCtxProcessSignedInfoNode:file=xmldsig.c:line=804:obj=unknown:subj
=xmlSecDSigReferenceCtxProcessNode:error=1:xmlsec library function failed:node=R
eference
func=xmlSecDSigCtxProcessSignatureNode:file=xmldsig.c:line=547:obj=unknown:subj=
xmlSecDSigCtxProcessSignedInfoNode:error=1:xmlsec library function failed:
func=xmlSecDSigCtxVerify:file=xmldsig.c:line=366:obj=unknown:subj=xmlSecDSigCtxS
ignatureProcessNode:error=1:xmlsec library function failed:
Error: signature verify
func=xmlSecKeysMngrDestroy:file=keysmngr.c:line=82:obj=unknown:subj=mngr != NULL
:error=100:assertion:

Изменено: 3 года, 10 мес. назад от opewix.

up! У кого-нибудь работает пример подписания XmlTag в ManagedOpenSsl из SDK?

Добрый день!

Метод XmlClass.verifyTagXMLbytes(…) из SDK возвращает -1, так как мы подписываем XMLTag RSA-шным сертификатом, а при верификации указываем ГОСТ-вые CA-шки, поэтому и получеам -1. Чтобы верификация прошла удачна нужно поменять в byte[] xmlMessageBytesOut = xmlEx.signTagXMLbytes(xmlMessageBytesIn, «Id», «body-sign-id», «Security», »
docs.oasis-open.org/wss/2004/01/oasis-20…ecext-1.0.xsd», «….pkcs12rsa_deist.p12», «123456», «sha256») на в byte[] xmlMessageBytesOut = xmlEx.signTagXMLbytes(xmlMessageBytesIn, «Id», «body-sign-id», «Security», »
docs.oasis-open.org/wss/2004/01/oasis-20…ecext-1.0.xsd», «….pkcs12gost_deist.p12», «123456», «sha256»), либо указать при вызове метода xmlEx.verifyTagXMLbytes(): sCertCA[0] = «….ca_certknca_root.cer»;

sCertCA[1] = «….ca_certrca_gost.cer»;

res = xmlEx.verifyTagXMLbytes(xmlMessageBytesOut, «Id», sCertCA);

RSA-шные CA-шки.

Используйте der кодированные сертификаты

Нашел ошибку у себя. Теперь пример в SDK заработал! Спасибо!

Изменено: 3 года, 10 мес. назад от opewix.

Пример SDK заработал, а собственный пример — нет.

Начал выяснять…

Оказалось, метод «verifyTagXMLbytes» в качестве CA файлов принимает сертификаты в base64 формате. Те, что лежат в SDK в папке «Keys and Certs» не подходят.

Чтобы получить сертификат в base64 формате, берете CA сертификат, открываете его — появляется окошко с его информацией. Там во вкладке Details снизу есть кнопка «Copy To». По ее нажатию откроется мастер, в нем надо выбрать формат Base64.

xml:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->

<!DOCTYPE file SYSTEM "ex2.xsd">

<file>
    <medical_record>
        <first_name>Иван</first_name>
        <last_name>Попов</last_name>
        <disease>Ветрянка</disease>
        <disease>Простуда</disease>
    </medical_record>

    <medical_record>
        <first_name>Алексей</first_name>
        <last_name>Иванов</last_name>
        <disease>Простуда</disease>
        <disease>Грип</disease>
        <disease>Астма</disease>
    </medical_record>
</file>

xsd:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="file">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="medical_record" maxOccurs="unbounded" minOccurs="0">
              <xs:complexType>
                <xs:sequence>
                  <xs:element type="xs:string" name="first_name"/>
                  <xs:element type="xs:string" name="last_name"/>
                  <xs:element type="xs:string" name="disease" maxOccurs="unbounded" minOccurs="0"/>
                </xs:sequence>
                <xs:attribute type="xs:string" name="reg-num" use="optional"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Ошибка:
The markup declarations contained or pointed to by the document type declaration must be well-formed. [3]
Ошибка возникает при валидации xml документа, при проверке xsd файла всё нормально. Ругается ошибка на третью строку xsd файла.

Скажите, пожалуйста в чём ошибка.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="timeTable">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="offices">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="office" minOccurs="1" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="name" type="xs:string" />
										<xs:element name="address" type="xs:string" />
									</xs:sequence>
									<xs:attribute name="code" type="xs:string" use="required" />
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="lesson" minOccurs="1" maxOccurs="unbounded">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="date" type="xs:date" />
							<xs:element name="time" type="xs:time" />
						</xs:sequence>
						<xs:attribute name="no" type="xs:ID" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<timeTable
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:noNamespaceSchemaLocation="lab-3-2.xsd">
>
	<offices>
		<office code="БК">
			<name>Комплекс "Бакунинский"</name>
			<address>ул. Бакунинская, 71</address>
		</office>
		<office code="РА">
			<name>Комплекс "Радио"</name>
			<address>ул. Радио, д. 24</address>
		</office>
	</offices>
	<lesson no="id1">
		<date>2013-07-06</date>
		<time>18:30:00</time>
	</lesson>
	<lesson no="id2">
		<date>2013-07-10</date>
		<time>18:30:00</time>
	</lesson>
	<lesson no="id3">
		<date>2013-07-11</date>
		<time>18:30:00</time>
	</lesson>
</timeTable>

Выдает вот
Validation of current file using XML schema:
ERROR: Element ‘timeTable’: Character content other than whitespace is not allowed because the content type is ‘element-only’.

   prog1Csww

19.07.22 — 09:47

Есть следующий формат файла для ЕИС Госзакупок.

Описан здесь

https://zakupki.gov.ru/epz/main/public/download/downloadDocument.html?id=36503

Получился такой файлик

<?xml version=»1.0″ encoding=»WINDOWS-1251″?>

<ФайлПакет ИдТрПакет=»37B62CBA-66A5-4722-A350-5AF49F97E111″ ИдФайл=»ON_NSCHFDOPPR_2ZK-CUS-03223001038_2ZK-SUP-00019150656_20220715_37B62CBA-66A5-4722-A350-5AF49F97E98E» ДатаВрФормир=»2022-07-19T00:00:01″ ТипПрилож=»УПДПрод» ВерсФорм=»1.00″ ИдОтпр=»2ZK-SUP-00019150656″ ИдПол=»2ZK-CUS-03223001038″>

    <Документ>

    <Контент>PNCk  много букв base64 Pg==</Контент>

    </Файл>

    </Документ>

</ФайлПакет>

Но выдает ошибку

РДИК_ИК_0003. Ошибка валидации xml-документа «DP_PAKET»: cvc-datatype-valid.1.2.1: ‘PNCk много букв base64 Pg==’ is not a valid value for ‘base64Binary’.

Что означает эта ошибка?

Формировал base64Binary следующим кодом в 1С

    ВременныйФайл = ПолеВвода3;

    ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл, «CESU-8»);

    ЗаписьТекста.Записать(ПолеВвода1);

    ЗаписьТекста.Закрыть();

    ДД_Файла = Новый ДвоичныеДанные(ВременныйФайл);

    
    ПолеВвода2 = Base64Строка(ДД_Файла);

Потом ПолеВвода2 скопировал в тег «Контент» непосредственно в блокноте.

Как создать рабочий файлик чтобы хоть посмотреть как он выглядит?

   prog1Csww

1 — 19.07.22 — 09:50

Есть наше обращение в техподдержку ЕИС Госзакупок. Может поможет чем…

Вопрос…

Работает ли загрузка документа приемки из файла?

Описание:

Здравствуйте.

1. Зашли в контракты

2. Для отправленного заказчику документа о приемке выбрали «Скачать архив документов»

3. В УПД из архива поменяли ГУИД в имени файла и в тексте xml документа тоже поменяли аттрибут Файл.

4. Поменяли порядковый номер документа и дату первичного документа в тексте xml файла.

5. Попытались загрузить.

6. Выдало ошибку РДИК_ИК_0003. Ошибка валидации xml-документа «DP_PAKET»: cvc-elt.1.a: Cannot find the declaration of element ‘Файл’.

Работает ли Ваша опция загрузки? Или наш подход в корне не верен и выгруженный из ЕИС но подредактированный файл нельзя подгрузить в ЕИС снова?

******************************* Ответ **************************************

Уважаемый пользователь!

Контроль РДИК_ИК_0003 возникает по причине не корректно сформированного транспортного пакета.

Загружается xml-файл (транспортный пакет), не соответствующий интеграционным схемам ЕИС.

Для успешной обработки необходимо передавать транспортный пакет (ФайлПакет) сформированный согласно схеме DP_PAKET_EIS_01_00.xsd.

В составе загружаемого в ЕИС транспортного пакета должны передаваться:

•УПД или УКД

•Приложение к документу, которое является составной и неотъемлемой частью УПД (титул продавца) или УКД (титул продавца) в схеме DP_PACKET_EIS_01_00

Сам пакет должен содержать:

•soap-оболочку (при загрузке xml-файла непосредственно в личном кабинете поставщика soap-оболочка не требуется)

•Шапка (ФайлПакет)

•Документ/Контент в base64 (содержит УПД или УКД)

•Прилож/Контент в base64 (содержит ФайлУПДПрод / ФайлУКДПрод)

УПД — Универсальный передаточный документ (титул Продавца). Интеграционная схема ON_NSCHFDOPPR_1_997_01_05_01_02

УКД — Универсальный корректировочный документ. Интеграционная схема ON_NKORSCHFDOPPR_1_996_03_05_01_01

Отметим, что передаваемые сведения должны иметь кодировку windows-1251 (В шапке ФайлПакет, Файл, ФайлУПДПрод/ФайлУКДПрод необходимо указывать <?xml version=»1.0″ encoding=»windows-1251″ ?>).

Структура документов указана в Схемах Эл. Акт. 12.2 и описана в Альбоме ТФФ Эл Акт 12.2 размещенных в открытой части ЕИС.

https://zakupki.gov.ru/epz/main/public/document/view.html?searchString=§ionId=432&strictEqual=false

   prog1Csww

2 — 20.07.22 — 01:33

Вверх.

   prog1Csww

3 — 20.07.22 — 07:20

Удалось победить первое препятствие

код обработки заменил на

    ПотокВПамяти = Новый ПотокВПамяти();

    Текст = Новый ЗаписьТекста(ПотокВПамяти, КодировкаТекста.UTF8, , Символы.ПС);

    Текст.Записать(ПолеВвода1);

    Текст.Закрыть();

    
    ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();

    СтрокаФорматBase64 = Base64Строка(ДвоичныеДанные);

    
    СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ВК, «»);

    СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ПС, «»);

    
    ПолеВвода2 = СтрокаФорматBase64;

И всё прошло. Но возникла новая проблема

ЕИС ругается на Element type «Р» must be followed by either attribute specifications, «>» or «/>».

Яндекс.Валидатор XML + XSD тоже выдает такую же ошибку причем пишет что сервис временно недоступен.

В XML видимых ошибок нет. Тег «Контент» можно декодировать на сайте http://base64.ru/

Иностранный валидатор XML + XSD https://www.freeformatter.com/xml-validator-xsd.html ошибок не выдает. Жду ответа от техподдержки ЕИСа.

   Ryzeman

4 — 20.07.22 — 07:27

Ну, вообще тебе английским по-белому писало ошибку что в (0) что сейчас. В (0) была проблема с <Контент> как раз то, что ты не написал. В теле ожидалась строка base64Binary, у тебя там были какие-то недопустимые символы. В (3) у тебя где-то в XML незакрытый элемент <p>. То есть он буквально тебе пишет, что открытие тега <p> должно сопровождаться его закрытием. Посмотреть это можно в любой удобной гляделке XML — в браузере или notepad++ с компонентой для XML, например. Не видя что ты там формируешь что-то тебе ещё посоветовать невозможно.

   Ryzeman

5 — 20.07.22 — 07:29

Вариант — у тебя где-то шифруется что то вроде <p или <p>, например, если ты код маркировки передаёшь — это возможно. Тогда надо символы < и > экранировать.

   prog1Csww

6 — 20.07.22 — 09:51

(4) <?xml version=»1.0″ encoding=»WINDOWS-1251″?>

<Файл ИдФайл=»ON_NSCHFDOPPR_2ZK-CUS-03223001038_2ZK-SUP-00019150656_20220715_37B62CBA-66A5-4722-A350-5AF49F97E98E» ВерсФорм=»5.01″ ВерсПрог=»12.2″>

    <СвУчДокОбор ИдОтпр=»2ZK-SUP-00019150656″ ИдПол=»2ZK-CUS-03223001038″>

        <СвОЭДОтпр НаимОрг=»Федеральное казначейство» ИННЮЛ=»7710568760″ ИдЭДО=»2ZK»/>

    </СвУчДокОбор>

    <Документ КНД=»1115131″ Функция=»СЧФДОП» ПоФактХЖ=»Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)» НаимДокОпр=»Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)» ДатаИнфПр=»15.07.2022″ ВремИнфПр=»01.44.16″ НаимЭконСубСост=»ИВАНОВА ОЛЬГА ВЛАДИМИРОВНА» СоглСтрДопИнф=»0000.0000.0000″>

        <СвСчФакт НомерСчФ=»4″ ДатаСчФ=»20.07.2022″ КодОКВ=»643″>

            <СвПрод>

                <ИдСв>

                    <СвИП ИННФЛ=»123456789012″>

                        <ФИО Фамилия=»ИВАНОВА» Имя=»ОЛЬГА» Отчество=»ВЛАДИМИРОВНА»/>

                    </СвИП>

                </ИдСв>

                <Адрес>

                    <АдрРФ КодРегион=»99″ Город=»Г ИВАНОВО»/>

                </Адрес>

                <Контакт Тлф=»7 999 999 9999″ ЭлПочта=»hleb@mail.ru»/>

                <БанкРекв НомерСчета=»99999999999999999999″>

                    <СвБанк НаимБанк=»ПАО СБЕРБАНК» БИК=»999999999″ КорСчет=»99999999999999999999″/>

                </БанкРекв>

            </СвПрод>

            <СвПокуп ОКПО=»99999999″ ИнфДляУчаст=»0″ КраткНазв=»МБДОУ ДЕТСКИЙ САД»>

                <ИдСв>

                    <СвЮЛУч НаимОрг=»МУНИЦИПАЛЬНОЕ БЮДЖЕТНОЕ ДОШКОЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДЕТСКИЙ САД» ИННЮЛ=»9999999999″ КПП=»999999999″/>

                </ИдСв>

                <Адрес>

                    <АдрРФ Индекс=»999999″ КодРегион=»99″ Город=»ГОРОД ИВАНОВО» Улица=»УЛИЦА ИВАНОВА» Дом=»ДОМ 9″/>

                </Адрес>

                <Контакт Тлф=»8 999 999 99 99″ ЭлПочта=»dou@yandex.ru»/>

                <БанкРекв НомерСчета=»99999999999999999999″>

                    <СвБанк НаимБанк=»УФК по Иваново» БИК=»999999999″ КорСчет=»99999999999999999999″/>

                </БанкРекв>

            </СвПокуп>

            <ДопСвФХЖ1 НаимОКВ=»Российский рубль»>

                <ИнфПродГосЗакКазн ДатаГосКонт=»14.06.2022″ НомерГосКонт=»999 999″/>

            </ДопСвФХЖ1>

            <ДокПодтвОтгр НаимДокОтгр=»Документ о приемке» НомДокОтгр=»2″ ДатаДокОтгр=»15.07.2022″/>

        </СвСчФакт>

        <ТаблСчФакт>

            <СведТов НомСтр=»1″ НаимТов=»Хлеб пшеничный» ОКЕИ_Тов=»166″ КолТов=»4.8″ ЦенаТов=»100.33″ СтТовБезНДС=»481.58″ НалСт=»без НДС» СтТовУчНал=»481.58″>

                <Акциз>

                    <БезАкциз>без акциза</БезАкциз>

                </Акциз>

                <СумНал>

                    <БезНДС>без НДС</БезНДС>

                </СумНал>

                <ДопСведТов ПрТовРаб=»1″ НаимЕдИзм=»Килограмм» КодТов=»10.71.11.110″/>

            </СведТов>

            <СведТов НомСтр=»2″ НаимТов=»Хлеб ржано-пшеничный» ОКЕИ_Тов=»166″ КолТов=»2.8″ ЦенаТов=»99″ СтТовБезНДС=»277.2″ НалСт=»без НДС» СтТовУчНал=»277.2″>

                <Акциз>

                    <БезАкциз>без акциза</БезАкциз>

                </Акциз>

                <СумНал>

                    <БезНДС>без НДС</БезНДС>

                </СумНал>

                <ДопСведТов ПрТовРаб=»1″ НаимЕдИзм=»Килограмм» КодТов=»10.71.11.110″/>

            </СведТов>

            <ВсегоОпл СтТовБезНДСВсего=»758.78″ СтТовУчНалВсего=»758.78″>

                <СумНалВсего>

                    <БезНДС>без НДС</БезНДС>

                </СумНалВсего>

            </ВсегоОпл>

        </ТаблСчФакт>

        <СвПродПер>

            <СвПер СодОпер=»Работы выполнены в полном объеме» ДатаПер=»04.07.2022″>

                <ОснПер НаимОсн=»Контракт» НомОсн=»999 9999″ ДатаОсн=»14.06.2022″ ДопСвОсн=»Реестровый номер в реестре контрактов: 9999999999999999999″/>

                <ТранГруз/>

            </СвПер>

        </СвПродПер>

        <Подписант ОблПолн=»5″ Статус=»4″ ОснПолн=»Должностные обязанности»>

            <ИП ИННФЛ=»123456789012″>

                <ФИО Фамилия=»ИВАНОВА» Имя=»ОЛЬГА» Отчество=»ВЛАДИМИРОВНА»/>

            </ИП>

        </Подписант>

    </Документ>

</Файл>

  

prog1Csww

7 — 21.07.22 — 02:18

Ответ техподдержки

Уважаемый пользователь!

Несмотря на то, что в прологе титула продавца указана кодировка <?xml version=»1.0″ encoding=»WINDOWS-1251″?> сведения закодированы в UTF-8.

Просьба сведения, находящиеся в Документ/Контент, формировать в windows-1251, а затем кодировать в base64.

Также отметим, что в загружаемом транспортном пакете отсутствует приложение к титулу продавца (ФайлУПДПрод), которое является составной и неотъемлемой частью УПД (титул продавца) и передается в блоке Прилож/Контент.

Просьба корректно формировать загружаемый xml-файл.

Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.

В статье Проектирование контракта сервиса мы отметили, что действительно самодокументируемый контракт подразумевает возможность автоматической валидации сообщений, которыми данный сервис общается с внешним миром. Пришло время рассмотреть данный процесс подробнее.

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

  1. Мы можем ничего не знать о клиенте нашего сервиса, соответственно нам необходимо проверить запросы, поступающие от данного клиента, перед тем как их обрабатывать.
  2. Сообщения, поступающие от внешних сервисов, т.е. сервисов, которые мы не контролируем, должны подвергаться валидации.

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

Не обязательно осуществлять валидацию сообщений в следующих случаях:

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

В данной заметке мы рассмотрим некоторые приемы валидации сообщений, а так же способы обработки ошибок, возникающих при проверке некорректных сообщений.

Валидация сообщений по схеме

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

Существует два подхода при описании контрактов сервисов:

  • строго-типизированный сервис;
  • слабо-типизированный сервис.

Рассмотрим особенности валидации по схеме при использовании каждого из данных подходов.

Строго-типизированный сервис

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

<xsd:complexType name=«tCreditCard»>

  <xsd:sequence>

    <xsd:element name=«cardType» type=«tCardType»/>

    <xsd:element name=«cardHolderName» type=«tCardHolderName»/>

    <xsd:element name=«cardNumber» type=«tCardNumber» />

    <xsd:element name=«expiryMonth» type=«tExpiryMonth»/>

    <xsd:element name=«expiryYear» type=«tExpiryYear»/>

    <xsd:element name=«securityNo» type=«tSecurityNo» />

  </xsd:sequence>

</xsd:complexType>

<xsd:simpleType name=«tCardType»>

  <xsd:restriction base=«xsd:string»>

    <xsd:enumeration value=«MasterCard»/>

    <xsd:enumeration value=«Visa»/>

   </xsd:restriction>

</xsd:simpleType>

<xsd:simpleType name=«tCardHolderName»>

  <xsd:restriction base=«xsd:string»>

    <xsd:maxLength value=«32»/>

  </xsd:restriction>

</xsd:simpleType>

<xsd:simpleType name=«tCardNumber»>

  <xsd:restriction base=«xsd:integer»>

    <xsd:pattern value=«[0-9]{16}»/>

  </xsd:restriction>

</xsd:simpleType>

<xsd:simpleType name=«tExpiryMonth»>

  <xsd:restriction base=«xsd:integer»>

    <xsd:minInclusive value=«1»/>

    <xsd:maxInclusive value=«12»/>

  </xsd:restriction>

</xsd:simpleType>

<xsd:simpleType name=«tExpiryYear»>

  <xsd:restriction base=«xsd:integer»>

    <xsd:minInclusive value=«2010»/>

    <xsd:maxInclusive value=«9999»/>

  </xsd:restriction>

</xsd:simpleType>

<xsd:simpleType name=«tSecurityNo»>

  <xsd:restriction base=«xsd:integer»>

    <xsd:pattern value=«[0-9]{3}»/>

  </xsd:restriction>

</xsd:simpleType>

В данном примере мы проверяем следующие условия:

  • тип карты: Visa или MasterCard;
  • номер: 16 цифр;
  • месяц, до которого действует карта, от 1 до 12;
  • год, до которого действует карта, от 2010 до 9999;
  • код безопасности: 3 цифры.

Данный подход снижает масштабируемость, например, уже будет сложно добавить обработку карт American Express, т.к. такие карты имеют 15-значный номер и 4-х значный код безопасности. Так же каждый год придется обновлять ограничение на ExpiryYear, т.к. год должен находиться в будущем.

Слабо-типизированный сервис

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

Пример:

<xsd:complexType name=«tCreditCard»>

  <xsd:sequence>

    <xsd:element name=«cardType» type=«xsd:string»/>

    <xsd:element name=«cardHolderName» type=«xsd:string»/>

    <xsd:element name=«cardNumber» type=«xsd:integer»/>

    <xsd:element name=«expiryMonth» type=«xsd:integer»/>

    <xsd:element name=«expiryYear» type=«xsd:integer»/>

    <xsd:element name=«securityNo» type=«xsd:integer»/>

  </xsd:sequence>

</xsd:complexType>

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

Недостаток данного подхода заключается в том, что не предоставляются механизмы контроля данных и требуется валидация с использованием дополнительных механизмов. При этом возможно дублирование кода, если одна и та же валидация используется в нескольких сервисах.

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

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

Несколько советов при реализации валидации по схеме:

  • входящий документ нужно валидировать как можно раньше;
  • валидацию исходящего документа желательно разместить непосредственно перед вызовом внешнего сервиса;
  • если речь идет о валидации ответа от разрабатываемой системы, то нужно понимать, что если мы получили корректный входящий документ (а мы его валидировали) и у нас правильно реализована логика его обработки, то наш ответ так же должен быть корректным.

Использование Schematron для валидации

При использовании Schematron валидация осуществляется следующим образом: вводится ряд утверждений (assertions), если все они исполняются, то документ считается корректным. Утверждения вводятся с помощью XPath-выражений, что позволяет задавать условия, которые в принципе нельзя задать, используя схему, например:

  • если тип карты — American Express, то длина номера — 15 символов, иначе — 16;
  • если тип карты — American Exptess, то длина кода безопасности — 4 символа, иначе — 3;
  • дата окончания действия карты (месяц и год) должна быть больше текущей (т.е. в будущем).

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

Пример: проверка того, что тип карты указан как Visa или MasterCard:

<?xml version=«1.0» encoding=«UTF-8»?>

<schema xmlns=«http://www.ascc.net/xml/schematron»>

  <ns uri=«http://rubiconred.com/obay/ebm/UserAccount» prefix=«ebm»/>

  <ns uri=«http://rubiconred.com/obay/xsd/cmn» prefix=«cmn»/>

  <pattern name=«Check Credit Card Type»>

    <rule context=«/ebm:updateCreditCard/cmn:creditCard»>

      <assert test=«cmn:cardType=’MasterCard’ or cmn:cardType=’Visa'»>

        Credit Card must be MasterCard or Visa

      </assert>

    </rule>

  </pattern>

</schema>

Рассмотрим составные части Schematron-файла.

Утверждения (assertions) задаются в элементах assert. Важный атрибут утверждения — test — определяет XPath-выражение, которое может вернуть true или false. Если тестовое выражение возвращает true, то утверждение считается имеющим силу (met). Если возвращается false, то фиксируется ошибка валидации и содержимое элемента assert возвращается в качестве сообщения о данной ошибке.

Правила (rules). Утверждения определяются внутри правил. Правило содержит атрибут context, который включает в себя XPath-выражение, выбирающее узлы из валидируемого документа, к которым будут применяться утверждения. Для каждого узла будут применены правила, описанные в соответствующем элементе rule.

Пример:

<rule context=«/emb:updateCreditCard/cmn:creditCard»>

:

</rule>

в результате обработки выражения /emb:updateCreditCard/cmn:creditCard будет возвращен один единственный узел:

<cmn:creditCard>

  <cmn:cardType>MasterCard</cmn:cardType>

  <cmn:cardHolderName>John Smith</cmn:cardHolderName>

  <cmn:expiryMonth>10</cmn:expiryMonth>

  <cmn:expiryYear>2013</cmn:expiryYear>

  <cmn:securityNo>5285</cmn:securityNo>

</cmn:creditCard>

к которому и будет применено правило.

Если для правила определено несколько утверждений и все они не верны, то будет возвращено сообщение об ошибке для каждого утверждения.

Можно использовать относительный контекст, например, мы хотим определить правило валидации кредитной карты, независимо от операции в которой карта используется. Для этого нужно определить правило с использованием XPath выражения, возвращающего creditCard независимо от операции, например так:

<rule context=«//cmn:creditCard»>

:

</rule>

Паттерны (patterns). Правила определяются внутри паттерна. Каждый паттерн содержит одно или более связанных правил. Элемент pattern содержит единственный атрибут — name, задающий в свободной форме описание правил, содержащихся внутри паттерна.

<pattern name=«Check Credit Card Type»>

:

</pattern>

Schematron применяет паттерны друг за другом, правила внутри каждого паттерна применяются так же поочередно друг за другом.

Пространства имен (namespaces). Пространства имен описываются с помощью элемента ns. Элемент ns содержит два атрибута: uri — урл, задающий пространство имен и prefix — соответствующий префикс. Используются аналогично атрибуту xmlns схемы.

<ns uri=«http:// rubiconred.com/obay/xsd/cmn» prefix=«cmn»/>

Затем можно в правилах и утверждениях использовать префикс cmn.

Схема (schema) — корневой элемент для Schematron, определен в пространестве имен http://www.ascc.net/xml/schematron.

<?xml version=«1.0» encoding=«UTF-8»?>

<schema xmlns=«http://www.ascc.net/xml/schematron»>

:

</schema>

Примеры

Валидация в зависимости от содержимого нескольких полей:

<rule context=«cmn:CreditCard»>

  <assert test=«((cmn:cardType=’MasterCard’ or cmn:cardType=’Visa’) and

                string-length(cmn:cardNumber) = ’16’) or

                (cmn:cardType=’American Express’ and

                string-length(cmn:cardNumber) = ’15’)»>

     Invalid Card Number.

  </assert>

</rule>

Правило можно переписать красивее — использовать возможности XPath при определении правил:

<rule context=«cmn:creditCard[cmn:cardType=’MasterCard’]»>

  <assert test=«string-length(cmn:cardNumber) = ’16′»>

    Mastercard card number must be 16 digits.

  </assert>

  <assert test=«string-length(cmn:securityNo) = ‘3’»>

    Security code for Mastercard must be 3 digits.

  </assert>

</rule>

Можно использовать функции, появившиеся в XPath 2.0:

<ns uri=«http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20» prefix=«xp20»/>

<assert test=«xp20:matches(cmn:cardNumber, ‘[0-9]{16}’)»>

  Mastercard number must be 16 digits.

</assert>

Валидация дат. Пример проверки того, что указанная дата больше текущей:

cmn:expiryYear > xp20:year-from-dateTime(xp20:current-dateTime()) or

(cmn:expiryYear= xp20:year-from-dateTime(xp20:current-dateTime()) and

cmn:expiryMonth>=xp20:month-from-dateTime(xp20:current-dateTime()) )

Проверка на присутствие элемента:

<rule context=«//cmn:creditCard[cmn:cardType=’American Express’]»>

  <assert test=«cmn:securityNo»>

    Security No must be specified

  </assert>

</rule>

Проверка на присутствие элемента и, если он присутсвует, на исполнение каких-то правил:

<rule context=«//cmn:creditCard[cmn:cardType=’American Express’]»>

  <assert test=«cmn:securityNo and string-length(cmn:securityNo)>0″>

    Security No must be specified

  </assert>

</rule>

Важно! Если для какого-то значения не описано правило, то данное значение всегда будет валидироваться как корректное. Если нужно ограничить набор возможных значений, то необходимо создать отдельное правило.

Пример возврата ошибки валидации с помощью Schematron:

<env:Fault>

  <faultcode>env:Server</faultcode>

  <faultstring>: Schematron validation fails with error

    <ns1:ValidationErrors>

      <error>Security code for Mastercard must be 3 digits.</error>

      <error>Credit Card has expired.</error>

    </ns1:ValidationErrors>

  </faultstring>

  <faultactor/>

  <detail>

    <exception/>

  </detail>

</env:Fault>

Использование бизнес-правил для валидации

Одним из методов реализации валидации является определение правил валидации как бизнес-правил. Это позволяет определить правила валидации один раз и затем использовать в нескольких сервисах. В свою очередь правила могут быть выставлены как веб-сервис, что позволяет легко использовать их из ESB или BPEL-процессов. Сами правила могут быть реализованы, например с помощью Oracle Business Rules, а для выставления их в качестве веб-сервиса может использоваться BPEL-обертка или соответствуюшее Java API.

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

Возврат ошибок валидации из синхронного сервиса

Необходим механизм возврата информации об ошибках валидации потребителям сервиса, желательно с подробной информацией о том, какое именно поле сообщения некорректно.

Для синхронного сервиса механизм возврата основан на использовании SOAP Fault. SOAP Fault содержит 4 раздела:

  1. faultcode: высокоуровневый указатель на причину ошибки. SOAP 1.1 определяет следующие faultcode:
    VersionMistmatch,
    MustUnderstand,
    Client
    Server.

    Если ошибка в содержимом сообщения, полученного от клиента, и клиент должен исправить данную ошибку, то необходимо вернуть Client.

  2. faultstring: должен содержать понятное человеку описание причины возникновения ошибки.
  3. faultactor: описывает в какой точке пути обработки сообщения произошла ошибка. Если ошибка происходит в конечной точке обработки сообщения, то значение данного параметра можно оставить пустым.
  4. detail: опциональный элемент, который используется для предоставления дополнительной информации об ошибке. Необходимо заполнять только если faultstring содержит не всю подробную информацию о причинах ошибки.

SOAP Fault’ы добавляются как дополнительные элементы fault в определение операции (элемент operation) WSDL-файла. Элемент fault имеет два атрибута: name — задает код ошибки и message — содержит дополнительную информацию об ошибке и возвращается внутри элемента soap:detail.

Пример:

<operation name=«updateCreditCard»>

  <input message=«tns:updateCreditCard»/>

  <output message=«tns:updateCreditCardResponse»/>

  <fault name=«tns:invalidCreditCard» message=«tns:invalidCreditCardFault»/>

</operation>

Сервис может так же возвращать ошибки, не описанные в его контракте, однако описание ошибки облегчает потребителю использование сервиса и позволяет разрабатывать более качественные процессы обработки ошибок.

SOAP 1.1 допускает создание своих кодов ошибок реализуемое через т.н. dot-notation: client.invalidCreditCard в пространстве имен http://schemas.xmlsoap.org/soap/envelope/. Однако это ведет к колизиям и создает проблемы интероперабельности, следовательно не является совместимым с WS-I Basic Profile. Нужно избегать таких решений.

Вместо этого необходимо определять коды ошибок в своих собственных пространствах имен. Например, можно определить свой код ошибки invalidCreditCard в том же пространстве имен, что и сервис userManagement.

Важно: Хотя определение своих кодов ошибок в своих пространствах имен и является совместимым с WS-I Basic Profile, WS-I BP рекомендует использовать стандартные коды ошибок SOAP 1.1, а информацию о конкретной ошибке передавать в поле detail.

Возврат ошибок валидации из асинхронного сервиса

Асинхронный сервис не может ничего вернуть потребителю в ответе, т.к. взаимодействие с асинхронным сервисом строится на основе двух однонаправленных сообщений: первое содержит оригинальный запрос, второе — обратный вызов от сервиса, содержащий результат его работы.

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

В большинстве случаев можно считать наименование операции эквивалентом кода ошибки, а содержимое соответствующего сообщения может использоваться для передачи подробной информации об ошибке (например fault string и detail). Пример определения сервиса обработки кредитной карточки как асинхронного:

<porttype name=«UserAccount»>

  <operation name=«updateCreditCard»>

    <input message=«tns:updateCreditCard «/>

  </operation>

</portType>

<porttype name=«UserAccountCallback»>

  <operation name=«updateCreditCardCallback»>

    <input message=» tns:updateCreditCardCallback «/>

  </operation>

  <operation name=«invalidCreditCard»>

    <input message=«tns:invalidCreditCard»/>

  </operation>

</portType>

Соображения о многоуровневой валидации

При валидации существуют потенциальные проблемы, связанные с производительностью (очевидно, что процесс валидации требует времени), поэтому нужно внимательно прослеживать цепочки вызовов. Например, если мы используем сервис для валидации кредитных карт, а операция по карточке у нас проходит через цепочку сервисов, использующих данный сервис валидации, то получится, что он будет вызван N раз, хотя достаточно было бы одного раза.

Так же нужно внимательно управлять распространением ошибок и откатом транзакций (компенсациями). Например, в BPEL-процессе из сервиса A вызываютя сервисы B и C. Сервис B отработал корректно, а при вызове сервиса С произошла ошибка. В данном случае необходимо откатить изменения, сделанные в сервисе В.

В качестве решения данных проблем можно предложить следующую стратегию: низкоуровневые сервисы осуществляют минимально допустимую валидацию, а высокоуровневые — валидацию по-максимуму. В таком случае, в примере с обработкой платежа по карте, высокоуровневый сервис, реализующий бизнес-процесс платежа, будет вызывать сервис валидации кредитной карты, а низкоуровневые сервисы могут лишь ограничиться проверкой допустимости для каждого из них типа карты, верной длины номера и нахождения даты окончания действия карты в будущем.

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

Ресурсы

Статья написана на основе содержимого главы 13 — Building Validation Into Services книги Oracle SOA Suite Developer Guide.

Понравилось сообщение — подпишитесь на блог и Twitter

Мне необходимо провалидировать часть XML документа.

XmlClass.verifyTagXMLbytes(…)

При вызове метода постоянно получаю результат -1.

Вовремя валидации в консоль выводятся различные ошибки.

Пример из SDK не работает. Пробовал различные ЭЦП, старые и новые, CA файлы и CER и DER, всеравно получаю ошибку.

В чем может быть дело?

Вот вывод консоли примера из SDK:

verifyTagXMLbytes START.
func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=360:obj=x509-store:subj=X5
09_verify_cert:error=4:crypto library function failed:subj=/serialNumber=IIN9517
35469875/CN=xD0x98xD0x92xD0x90xD0x9DxD0x9ExD0x92 xD0x98xD0x92xD
0x90xD0x9D/SN=xD0x98xD0x92xD0x90xD0x9DxD0x9ExD0x92/GN=xD0x98xD
0x92xD0x90xD0x9DxD0x9ExD0x92xD0x98xD0xA7/C=KZ;err=20;msg=unable to
get local issuer certificate
func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=408:obj=x509-store:subj=un
known:error=71:certificate verification failed:err=20;msg=unable to get local is
suer certificate
func=xmlSecKeysMngrGetKey:file=keys.c:line=1370:obj=unknown:subj=xmlSecKeysMngrF
indKey:error=1:xmlsec library function failed:
func=xmlSecDSigCtxProcessKeyInfoNode:file=xmldsig.c:line=871:obj=unknown:subj=un
known:error=45:key is not found:
func=xmlSecDSigCtxProcessSignatureNode:file=xmldsig.c:line=565:obj=unknown:subj=
xmlSecDSigCtxProcessKeyInfoNode:error=1:xmlsec library function failed:
func=xmlSecDSigCtxVerify:file=xmldsig.c:line=366:obj=unknown:subj=xmlSecDSigCtxS
ignatureProcessNode:error=1:xmlsec library function failed:
Error: signature verify

Вот другая ошибка, возникает в моем коде:

verifyTagXMLbytes START.
func=xmlSecOpenSSLAppCertLoadBIO:file=app.c:line=1249:obj=unknown:subj=PEM_read_
bio_X509_AUX:error=4:crypto library function failed:
func=xmlSecOpenSSLAppKeysMngrCertLoadBIO:file=app.c:line=1134:obj=unknown:subj=x
mlSecOpenSSLAppCertLoadBIO:error=1:xmlsec library function failed:
func=xmlSecOpenSSLAppKeysMngrCertLoad:file=app.c:line=1033:obj=unknown:subj=xmlS
ecOpenSSLAppKeysMngrCertLoadBIO:error=1:xmlsec library function failed:filename=
Assets2015 ProductionCaCertificatesOldOidsnew_NCA_GOST.cer;errno=2
Error: failed to load pem certificate from "╨kп═Р"
mngr is INVALID
func=xmlSecXPathDataExecute:file=xpath.c:line=273:obj=unknown:subj=xmlXPtrEval:e
rror=5:libxml2 library function failed:expr=xpointer(id('kalkanSignedBody'))
func=xmlSecXPathDataListExecute:file=xpath.c:line=373:obj=unknown:subj=xmlSecXPa
thDataExecute:error=1:xmlsec library function failed:
func=xmlSecTransformXPathExecute:file=xpath.c:line=483:obj=xpointer:subj=xmlSecX
PathDataExecute:error=1:xmlsec library function failed:
func=xmlSecTransformDefaultPushXml:file=transforms.c:line=2405:obj=xpointer:subj
=xmlSecTransformExecute:error=1:xmlsec library function failed:
func=xmlSecTransformCtxXmlExecute:file=transforms.c:line=1236:obj=unknown:subj=x
mlSecTransformPushXml:error=1:xmlsec library function failed:transform=xpointer
func=xmlSecTransformCtxExecute:file=transforms.c:line=1296:obj=unknown:subj=xmlS
ecTransformCtxXmlExecute:error=1:xmlsec library function failed:
func=xmlSecDSigReferenceCtxProcessNode:file=xmldsig.c:line=1571:obj=unknown:subj
=xmlSecTransformCtxExecute:error=1:xmlsec library function failed:
func=xmlSecDSigCtxProcessSignedInfoNode:file=xmldsig.c:line=804:obj=unknown:subj
=xmlSecDSigReferenceCtxProcessNode:error=1:xmlsec library function failed:node=R
eference
func=xmlSecDSigCtxProcessSignatureNode:file=xmldsig.c:line=547:obj=unknown:subj=
xmlSecDSigCtxProcessSignedInfoNode:error=1:xmlsec library function failed:
func=xmlSecDSigCtxVerify:file=xmldsig.c:line=366:obj=unknown:subj=xmlSecDSigCtxS
ignatureProcessNode:error=1:xmlsec library function failed:
Error: signature verify
func=xmlSecKeysMngrDestroy:file=keysmngr.c:line=82:obj=unknown:subj=mngr != NULL
:error=100:assertion:

Изменено: 3 года, 10 мес. назад от opewix.

up! У кого-нибудь работает пример подписания XmlTag в ManagedOpenSsl из SDK?

Добрый день!

Метод XmlClass.verifyTagXMLbytes(…) из SDK возвращает -1, так как мы подписываем XMLTag RSA-шным сертификатом, а при верификации указываем ГОСТ-вые CA-шки, поэтому и получеам -1. Чтобы верификация прошла удачна нужно поменять в byte[] xmlMessageBytesOut = xmlEx.signTagXMLbytes(xmlMessageBytesIn, «Id», «body-sign-id», «Security», »
docs.oasis-open.org/wss/2004/01/oasis-20…ecext-1.0.xsd», «..\..\pkcs12\rsa_deist.p12», «123456», «sha256») на в byte[] xmlMessageBytesOut = xmlEx.signTagXMLbytes(xmlMessageBytesIn, «Id», «body-sign-id», «Security», »
docs.oasis-open.org/wss/2004/01/oasis-20…ecext-1.0.xsd», «..\..\pkcs12\gost_deist.p12», «123456», «sha256»), либо указать при вызове метода xmlEx.verifyTagXMLbytes(): sCertCA[0] = «..\..\ca_cert\knca_root.cer»;

sCertCA[1] = «..\..\ca_cert\rca_gost.cer»;

res = xmlEx.verifyTagXMLbytes(xmlMessageBytesOut, «Id», sCertCA);

RSA-шные CA-шки.

Используйте der кодированные сертификаты

Нашел ошибку у себя. Теперь пример в SDK заработал! Спасибо!

Изменено: 3 года, 10 мес. назад от opewix.

Пример SDK заработал, а собственный пример — нет.

Начал выяснять…

Оказалось, метод «verifyTagXMLbytes» в качестве CA файлов принимает сертификаты в base64 формате. Те, что лежат в SDK в папке «Keys and Certs» не подходят.

Чтобы получить сертификат в base64 формате, берете CA сертификат, открываете его — появляется окошко с его информацией. Там во вкладке Details снизу есть кнопка «Copy To». По ее нажатию откроется мастер, в нем надо выбрать формат Base64.

Ошибка валидации

Просмотр 15 сообщений — с 1 по 15 (из 15 всего)

  • Автор

    Сообщения

  • Добрый день. Пишет ошибку у элемента flat отсутствует дочерний элемент. Путь TP/flat/conclusion. Насколько я поняла, это означает, что нет заключения. Но заключения заполнены. Это моя ошибка или ошибка программы? При формировании техплана на здание такого не происходило.

    • Тема изменена 3 года/лет, 11 мес. назад пользователем  ks2310.
    Вложения:

    You must be logged in to view attached files.

    Приложения в xml-схеме помечены как обязательные.

    Здравствуйте.
    Образуем объект незавершенного строительства, состоящий из 6 контуров. Программа выдает ошибку:» учетный/порядковый номер контура» Подскажите, как исправить. Спасибо.

    Вложения:

    You must be logged in to view attached files.

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

    Добрый день!
    Не проходит валидация xml в 06 версии. Ошибка в номере здания/контура.
    В чем дело? не могу понять.

    • Ответ изменён 3 года/лет, 9 мес. назад пользователем  margosay.
    Вложения:

    You must be logged in to view attached files.

    1. У вас номер образуемого здания проставлен. Номер проставляется либо кадастровый, либо если несколько зданий, то порядковый. Номер при образовании одного здания не проставляется.
    2. Не указана система координат — она является обязательным атрибутом
    3. Почему Вы делите здание на два отдельных контура? 2-й этаж здания это не контур. Читайте фз-218. Контур здания определяется как проекция на поверхность первого этажа всех внешних контуров верхних этажей. Контур здания делится, если у Вас два отдельных друг от друга контура. В остальных случаях — фигура определяется проекцией с подписью этажности.
    Надземный конструктивный элемент в виде например балконов не относится к отдельному контуру.
    Надземный контур здания — это здание на колоннах, то есть первый этаж здания располагается выше уровня поверхности земли (под зданием — пустота, либо можно зарегистрировать другое здание, но это будет отдельный техплан).

    1.Не проходит ни с порядковым номером ни без него!
    2. Насчет системы координат — ошибки не выходило при валидации. и что за новый формат СК? код субъекта и номер зоны..
    3.В требованиях это написано и в разъяснениях Минэко. Что этажи — это контура

    Андрей, прошу поясните новшества в версии 6!
    в сравнении с предыдущей — совершенно непонятно как работать в ней.

    Для этого откройте в программе справку (F1) и найдите раздел «Особенности формирования XML-файлов согласно схеме TP_v06». Там много чего разъяснено.

    Но мало что понятно.. к сожалению.
    всегда читаю справку сначала.

    Тогда нужно присылать ваш xcn файл на почту с конкретным вопросом. Будем подсказывать.

    12.02.2020 в 13:07

    #12181

    Добрый день.
    Выдает ошибку при формировании конечного пакета. Ошибка возникает как при введенном порядковом номере сооружения (сооружение одно, номер 1), так и при оставлении поля пустым. Соответственно поле номеров контуров также выдает ошибку.
    Прошу разобраться в ближайшее время.

    Вложения:

    You must be logged in to view attached files.

    12.02.2020 в 15:23

    #12185

    План сооружения обязательный элемент в xml-файле согласно xml-схеме. Нужно хоть что-нибудь там привязать. Как правило, для сооружения можно повторить схему как план сооружения.

    22.11.2020 в 14:39

    #15008

    Добрый день!
    При формировании xml-файла технического плана на уточнение характеристик сооружения, состоящего из нескольких контуров программа выдает ошибку валидации: «Ошибка валидации, строка: 138, позиция: 24 —
    У элемента Plans отсутствует дочерний элемент.
    Путь, по которому в целевом файле выявлена ошибка: TP[1]/Construction[1]/Package[1]/ExistConstruction[1]/Plans[1]
    Форма-таблица, которой соответствует ошибка: Сооружения/Cооружения(Constructions), запись(ряд) номер: 1». Прошу подсказать в чем ошибка и как правильно заполнить данные в программе. Файл техплана прилагаю.
    Спасибо.

    Вложения:

    You must be logged in to view attached files.

    23.11.2020 в 14:37

    #15013

    Планы (этажей/сооружения) для сооружений обязательный элемент, как и для зданий. Для сооружения можно еще раз привязать схему, если нету отдельных планов.

  • Автор

    Сообщения

Просмотр 15 сообщений — с 1 по 15 (из 15 всего)

Для ответа в этой теме необходимо авторизоваться.

Понравилась статья? Поделить с друзьями:
  • При ближайшем рассмотрении налицо просматривается кризис речевая ошибка
  • При аутентификации произошла ошибка facetime mac os
  • При активации фейстайм произошла ошибка что делать
  • При активации фейстайм произошла ошибка повторите попытку
  • При активации произошла ошибка повторите ошибку