Как проверить yml файл на валидность
Перейти к содержимому

Как проверить yml файл на валидность

  • автор:

Как проверить валидность фида (YML-файла)

Для того чтобы названия, описания, изображения, ссылки на товары с сайта корректно подтягивались в письма ваших триггерных кампаний, необходимо добавить соответствующий требованиям Яндекс YML-фид в разделе Товары личного кабинета Emailtools.ru. Видеоинструкция по настройке этого пункта здесь.

Подготовить сам файл YML можно несколькими способами:

  1. Установить плагин, формирующий соответствующий файл
  2. Разработать фид кодом (требуются навыки разработчика)

Во втором случае необходимо следовать следующим правилам:

  • Файл должен быть один на все товары, автоматически обновляемым, чтобы не быо устаревшей информации в письмах.
  • Регулярность выбираете сами, обычно это раз в день, на крупных проектах — раз в час.
  • YML — это уже разновидность формата XML, требования к формату общие — https://yandex.ru/support/partnermarket/export/yml.html#yml-format

Как проверить валидность YML

Созданный любым способом фид можно проверить в Вебмастере Яндекса по ссылке https://webmaster.yandex.ru/tools/xml-validator/

Инструкция к сервису проверки YML-файла:

Что нужно выбрать в сервисе проверки:

  1. В пункте «Выберите схему валидации документа» выберите «маркет»
  2. В пункте «Выберите источник XML-данных для валидации» выберите «по ссылке»

Зачем нужен YML-файл и как его создать

Что такое YML-файл и зачем он нужен магазинам: структура и основы синтаксиса. Чем отличается от XML: особенности формата. Как создать и загрузить на Яндекс.Маркет вручную: пошаговая инструкция с примерами. Как проверить файл на валидность и ошибки. Как нас

Рассказываем, зачем нужен YML‑формат, чем отличается от XML и YAML, как делать такие файлы: вручную, с помощью CMS или сторонних сервисов, — а также как проверить файл на ошибки, загрузить его в кабинет продавца на Яндекс Маркете и впоследствии обновить.

Что такое YML‑файл и зачем он нужен

YML‑файл (прайс‑лист) — это документ с данными о товарах, которые вы планируете размещать на Яндекс Маркете. Он создаётся с помощью собственного языка разметки Яндекса — YML (Yandex Market Language).

Логика работы такая: вы загружаете в кабинет файл, а Яндекс превращает его в каталог товаров с карточками, ценами, условиями доставки/самовывоза и прочим.

На Яндекс Маркет можно загружать товары и в форматах CSV и XLS, но площадка отдаёт предпочтение именно YML: так файлы загружать удобнее и быстрее, поэтому мы рассказываем именно об этом формате.

Вот как выглядит YML‑файл:

Как выглядит YML-файл

Сначала кажется, что создать YML‑файл сложно и это что‑то для программистов, но это не так. Главное — знать, какие там есть параметры и как их редактировать. Сейчас всё расскажем, и вы сможете повторить.

Чем YML отличается от XML

XML (eXtensible Markup Language) — расширяемый язык разметки. Он нужен для выделения логического содержимого документа для обработки. XML используется, например, в языках программирования: 1) SVG — для описания изображений в векторном формате; 2) в XAML — для описания интерфейсов приложений. И, конечно, XML — основа XHTML, благодаря чему мы видим страницы в интернете.

YML (Yandex Market Language) — собственный стандарт Яндекс.Маркета, основанный на XML. Он нужен именно для создания товаров в Яндекс.Маркете и работы с ними. YML использует синтаксис XML, но описывает исключительно товары и условия их размещения на Яндекс Маркете.

YML не стоит путать с YAML. YAML (Yet Another Markup Language или YAML Ain’t Markup Language, «ещё один язык разметки» или «YAML — не язык разметки») — это формат хранения данных, похожий на язык разметки, но более удобный и с упрощённым синтаксисом.

YML также не имеет ничего общего с YMYL. YMYL — (Your Money or Your Life, «ваши деньги или ваша жизнь») — таким образом характеризуют контент на сайте, который может повлиять на здоровье, безопасность или финансовое благополучие людей, просматривающих этот сайт.

Из чего состоит YML‑файл

YML‑файлы в общем смысле делятся на 2 типа: такие, которые управляют товарами, и такие, которые управляют размещением (доставкой и самовывозом): у них есть общие элементы, а есть специализированные — для каждого типа свои.

Обязательные (общие) элементы

Это элементы, которые будут в любом YML‑файле.

Заголовок (шапка)

Занимает первую строку. Каждый файл должен начинаться именно с такой строки без каких‑либо изменений:

Если пользуетесь шаблоном для создания YML‑файлов, не меняйте эту строку. При создании своего файла с нуля просто скопируйте и вставьте эту строку в начало документа.

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

Информация о магазине

Описывает основную информацию о вашем магазине, вкладывается в элемент .

В вкладываются следующие элементы:

Элементы <shop></p>
<p> и их описание» width=»608″ height=»186″ /></p>
<p>В вкладывается неограниченное количество элементов — конкретных товаров с ценами.</p>
<p>Если у вас файл, который управляет товарами, то внутри каждого нужно указать характеристики товара: название, описание, производитель. А если файл, который описывает параметры размещения — то информацию о ценах, скидках, остатках и прочем.</p>
<p>Также у есть атрибут – id. В id должен быть указан SKU — ваш личный идентификатор товара. Многие в качестве SKU используют артикул.</p>
<p><b>Требования к SKU:</b> любая последовательность букв и/или цифр длиной до 80 знаков, английские и русские (кроме ё) буквы, цифры и символы . , ? ( ) [ ] — =.</p><div class='code-block code-block-4' style='margin: 8px 0; clear: both;'>
<!-- 4article -->
<script src=

Опциональные элементы

Это элементы, которые могут быть нужны или не нужны в зависимости от задачи файла.

Элемент не нужен в файле, который управляет размещением, но нужен в файле, который управляет товарами.

Описывает категории товаров. Например, у футболки будет категория «Одежда». Этот элемент вкладывается в элемент .

Каждой категории нужно присвоить уникальный идентификатор — целое положительное число длиной до 18 цифр — и записать его в атрибут id. А чтобы вложить одну категорию в другую (например, «Женскую одежду» в «Одежду»), нужно добавить атрибут parentid.

Выглядит это так:

 `Товары для животных Кошки Собаки Корм для кошек Сухой Шлейки и амуниция Игрушки  

Параметры доставки

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

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

Параметры способа доставки задаются с помощью атрибутов:

  • cost — это атрибут для технической проверки файла, он не используется для передачи какой‑то информации и не виден покупателям. Просто напишите в этом атрибуте любое целое число.
  • days — атрибут, который рассказывает о том, за сколько дней будет осуществлена доставка. Минимум — 0 (если вы доставляете день в день), максимум — 60 дней. Если не указать этот атрибут, товар скроется с витрины: Яндекс не приемлет товары с неизвестным сроком доставки.
  • order‑before — атрибут, показывающий, до которого часа нужно оформить заказ, чтобы срок доставки начал отсчитываться с текущего дня. Можно не указывать — его значение по умолчанию 13 (если будете указывать, то указывайте целое число от 0 до 24).

Выглядит сложно, но вы сможете разобраться. Вот так это выглядит в файле:

Здесь мы показали, что в одном способе доставки нужно заказать товар до 15:00, чтобы он был отправлен в этот же день, и доставка будет длиться 7 рабочих дней, а во втором — что заказать нужно до 12:00, и заказ будет доставлен за 3 дня.

Элемент может быть вложен как в , так и в . В первом случае он будет показывать условия доставки для всего магазина, во втором — для конкретного товара.

Параметры самовывоза

Здесь всё так же, как с параметрами доставки:

  • внутри может быть до пяти элементов , описывающих разные способы самовывоза;
  • параметры способа самовывоза так же, как и параметры доставки, задаются атрибутами cost (технический), days (срок, в который товар будет в ПВЗ) и order‑before.
  • атрибут может быть вложен в для описания самовывоза для всего магазина и в для описания самовывоза конкретного товара.

❗️Элементы и нужны только в файлах, которые управляют размещением.

Ещё они нужны только тем магазинам, которые работают по модели DBS — это когда вы храните товары у себя на складе и доставляете их сами. Для двух других моделей — FBY (хранение на складе Маркета и доставка его силами) и FBS (хранение на вашем складе, доставка силами Маркета) — эти два элемента не актуальны.

Если ваш магазин не доставляет заказы покупателям или у него нет самовывоза, добавьте в файл такие строчки:

Пример полного YML‑файла

Хорошие примеры YML‑файлов обоих типов, сформированные корректно и с учётом всех особенностей площадки, у самого Яндекса. Вот они:

На основе этих файлов и описанных выше элементов с атрибутами и будем создавать свой файл для загрузки в Маркет.

Как создать YML‑файл

Вручную

Сначала нужно зарегистрироваться на портале для селлеров и добавить магазин.

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

Через модули CMS

Сделать файл через CMS можно, только если вы используете одну из следующих систем:

  • 1C‑Bitrix;
  • InSales;
  • WordPress;
  • Shop‑Script;
  • AdvantShop;
  • NetCat;
  • ReadyScript;
  • UMI.CMS;
  • Magento;
  • Simpla;
  • Okay CMS;
  • Ecwid;
  • Tilda Publishing.

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

Для этого перейдите в «Настройки» → «Настройки API» и нажмите на «Интеграционные модули».

Настройки API

С помощью специальных сервисов

Таких сервисов на момент написания статьи мы нашли два:

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

Этот вариант пригодится тем, у кого много позиций, но нет интеграции с CMS. Однако этот вариант не идеальный: это может быть небезопасно, а файл может быть сформирован с ошибками.

Как проверить файл на ошибки

Сейчас у вас уже должен быть готовый файл.

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

Результат проверки файла

Но можно и проверить, например через XML‑валидатор фидов в Вебмастере (проверяет и YML‑файлы).

Загрузите файл и выберите схему проверки «Маркет»:

Проверка YML-файла в Вебмастере

Возможные ошибки при загрузке файла

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

  1. Критичные ошибки. Они затрагивают весь файл, поэтому их обязательно нужно исправить.
  2. Ошибки в предложениях. Это ошибки в конкретных товарах. Стоит исправить, иначе опубликуются только те товарные позиции, где всё верно.
  3. Общие ошибки. Эти ошибки касаются раздела , их лучше всего исправить. Файл с такими ошибками, скорее всего, опубликуется, но с неточностями в товарах.
  4. Предупреждения в предложениях. Этот тип означает, что есть ошибки в некоторых позициях: лучше всего исправить, но опубликуется всё, просто с неточностями.
  5. Рекомендации. Это советы по улучшению листа — можно прислушаться, можно не обращать внимания (но лучше прислушаться).

Как загрузить файл на Яндекс Маркет

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

Файлом

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

Перейдите в «Товары» → «Каталог» → «Загрузить файл».

Страница Каталога в Маркете

Добавьте файл, он должен быть не более 100 Мб.

Загрузка файла

Можете указать, какие данные отражать, а какие нет.

Выбор данных для отображения

Ссылкой

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

Загрузите созданные файлы в любое облачное хранилище (Яндекс Диск или Google Drive), откройте доступ по ссылке.

Перейдите в «Товары» → «Автообновление каталога» → «Добавить ссылку на файл».

Раздел «Автообновление»

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

Вставьте ссылку, она должна быть не длиннее 512 символов.

Добавляем ссылку для автообновления

Здесь также можно выбрать, какая информация будет отражена в итоговом каталоге. А ещё можно указать логин и пароль от хранилища, на которое ведёт ссылка, если оно закрытое.

Поля для заполнения в Автообновлении

Как обновить файл

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

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

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

Интересное по теме:

How do I validate my YAML file from command line?

While there are plenty of online YAML validators, which I have tried and have helped, I’d like to validate my YAML files from the command line and integrate this into my continuous integration pipeline.

131k 31 31 gold badges 209 209 silver badges 600 600 bronze badges
asked Oct 19, 2010 at 19:11
user375566 user375566
Try: travis lint .travis.yml
Dec 20, 2015 at 17:12
python -c «from yaml import load, Loader; load(open(‘.travis.yml’), Loader=Loader)»
Aug 4, 2016 at 12:17

This question should not be closed. Perhaps re-word it to «How do I validate my YAML file from command line». This is a valid and useful question

Jul 29, 2017 at 8:42

Seconded @hanxue — This comes up as the first result when searching the topic and should be a useful reference when google lands us here.

Oct 31, 2017 at 13:36
Yeah, this question should not be closed. I don’t think the answers are opinionated or spam.
Apr 30, 2018 at 15:20

10 Answers 10

With basic Ruby installation this should work:

ruby -ryaml -e "p YAML.load(STDIN.read)" < data.yaml 

Python version (thx @Murphy):

pip install pyyaml python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml 

5,980 4 4 gold badges 41 41 silver badges 41 41 bronze badges
answered Dec 6, 2013 at 9:23
31.5k 16 16 gold badges 130 130 silver badges 142 142 bronze badges

If you remove the puts y from the end of this then you get a more standard UNIX behavior: if the file is valid then nothing will be printed, and if it’s invalid then you’ll see an exception and stack trace.

Jan 22, 2015 at 14:39

And if you're really just using this as part of a ci test pipeline, then there's no need for puts at all. Return code is simply 0 if valid, else non-zero and you'll get a exception stack trace. Reduces noise on the CLI output if you're even looking at it.

Feb 25, 2018 at 17:17

If you use the following: ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])" you can then pass the filename in after, instead of needing to edit the snippet directly.

Apr 28, 2018 at 4:49
python -c 'import yaml, sys; yaml.safe_load(sys.stdin)' < data.yaml for python enthusiasts.. Dec 6, 2018 at 0:27

python3 -c 'import yaml, sys, pprint; pprint.pprint(yaml.safe_load(sys.stdin))' < data.yaml Pretty prints

Jul 31, 2019 at 15:19

You could use yamllint. It's available in Homebrew, etc. It can be used for syntax validation as well as for linting.

answered Jan 16, 2020 at 20:50
James Hiew James Hiew
6,587 5 5 gold badges 28 28 silver badges 41 41 bronze badges

To correct your .yaml files I recommend the tool yamllint. It can be launched easily from the local console.

The package yamllint is available for all major operating systems.

It's installable from the system's package sources. (e.g. sudo apt-get install yamllint ). See documentation for quick start and installation.

answered Mar 17, 2020 at 15:24
514 4 4 silver badges 5 5 bronze badges

yamllint by default calls a lot of things "errors" which are actually perfectly acceptable. e.g. line too long, or "wrong" indentation. I'm sure it's customizable to fix these, but it's too picky for a lot of common use-cases.

Jan 5, 2022 at 0:43

Given that you have a perl install on the server you are working on, and it has some of the basic YAML tools, you can use.

perl -MYAML -e 'use YAML;YAML::LoadFile("./file.yaml")' 

It should be noted that this will be strict in it's interpretation of the file, but useful.

answered Dec 27, 2012 at 22:58
CS Marshall CS Marshall
409 4 4 silver badges 3 3 bronze badges
Can't locate YAML.pm
Aug 4, 2016 at 12:09
/usr/bin/perl -MCPAN -e 'install YAML'
Sep 22, 2016 at 17:18

probably a problem with CPAN installation but: Can't locate object method "install" via package "YAML" at -e line 1.

Oct 9, 2020 at 15:56

If the above doesn't work you can always try: perl -MCPAN -e 'shell' and then at the command line do install YAML

Oct 9, 2020 at 15:57

Use the yq tool!

yq eval your.yaml 

It also displays all the values, you can suppress that by redirecting the output (anyway errors will be displayed):

yq eval your.yaml > /dev/null 

Install yq tool:

  • MacOS:
    brew install yq
  • Linux:
    snap brew install yq

More on the yq GitHub page (including Windows binaries): https://github.com/mikefarah/yq

answered Mar 1 at 10:01
971 7 7 silver badges 12 12 bronze badges
Note this works from yq version 4.19.1 (when eval keyword was defined)
Apr 22 at 13:35

yamllint -d ">" 

234k 13 13 gold badges 41 41 silver badges 82 82 bronze badges
answered Sep 27, 2023 at 13:01
890 2 2 gold badges 11 11 silver badges 42 42 bronze badges

My preferd way is using yamllint ( pip install yamllint )

Since I really want to catch quote errors, e.g. validate: bash -c ' ' \""

This is valid yaml, since yaml will just quote the string and turn it into: validate: "bash -c ' ' \\\"\""

Whilst there was just clearly a quote missing at the beginning of the validate comand.

So a normal yaml checker will not detect this, yamllint wil not even detect this in it's default configuration, so turn on quoted-strings checker.

answered May 3, 2022 at 16:25
Jens Timmerman Jens Timmerman
9,536 1 1 gold badge 42 42 silver badges 48 48 bronze badges

Another option is yaml-lint that depends on Node.JS:

  • installation (CLI): npm install -g yaml-lint
  • usage: yamllint file.yaml

answered Nov 28, 2023 at 14:24
Alexei - check Codidact Alexei - check Codidact
22.6k 20 20 gold badges 150 150 silver badges 175 175 bronze badges

If you got no interpreter installed in your environment but still got a curl, then you could use an online linter project like Lint-Trilogy:

curl -X POST --data "data=$(cat myfile.yml)" https://www.lint-trilogy.com/lint/yaml/json 

It delivers the validation result incl. error descriptions (if any) as json or csv or, where sufficient, as plain text true or false.

It's available as docker file, too. So if you often need a REST based linter, perhaps in a CI/CD pipeline, it may be handy to host an own instance on your site.

YML-файл: что это

С появлением возможности скачивать и выгружать данные на сайт интернет-магазины научились легко переносить информацию о своей продукции. Платформа Яндекс.Маркет разработала формат YML, позволяющий быстро и качественно обрабатывать информацию об ассортименте товаров, услуг и размещать ее в каталоге. С применением YML формата файла регулярно проходит обновление каталога на Яндекс.Маркете и автоматически отображаются все текущие изменения (цена, наличие, новинки). Рассмотрим подробнее, что такое формат YML и его функции.

Формат YML

Формат YML (Yandex Market Language) — формат данных для товарных платформ, разработанный Яндексом для ввода информации в базу данных сервиса Яндекс.Маркет. Он создан на основе стандарта XML и использует файловые кодировки UTF-8, windows-1251.

Формат файла YML используется интернет-магазинами для передачи данных о предлагаемых товарах или услугах. YML поддерживает все типы предложений и данных. Структура данных представляет собой объект с простыми в использовании методами. Формат используется при формировании прайс-листов из редакторов таблиц Google Docs, OpenOffice, Excel, базы данных Яндекс.Маркета.

Структура YML

Синтаксис кода YML содержит xml header (стандартный заголовок XML), yml_catalog (корневой элемент), элемент shop, включающий описание онлайн-магазина, его предложений (offers), подарков (gifts), промо-акций (promos). Раздел shop предоставляет такую информацию, как название магазина, компании, владеющей магазином, URL-адрес, используемая CMS, список валют, курс конвертации, список категорий, стоимость доставки заказов по регионам, перечень товарных предложений.

Выгрузка YML

Главная функция экспорта YML — передача данных на сервисы и платформы, включая Яндекс.Маркет, в едином формате, что позволяет стандартизировать документы при их отправке.

YML имеет следующие преимущества:

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

Выгрузка товаров с сайта на Яндекс.Маркет

Чтобы выгрузить товары на Яндекс.Маркет, необходимо перейти на вкладку с продуктами и справа нажать на значок XML напротив продукта, который нужно выгрузить.

Также можно использовать фильтр для поиска существующих позиций на рынке.

С помощью фильтра можно сочетать бренды с категориями товаров, которые есть в Яндекс.Маркете. Все выбранные товары попадут в ленту. Для просмотра добавляют yandex.xml в свой домен.

Возможные ошибки при экспорте данных

В Яндексе есть шаблон файла YML с подробными описаниями требований и возможных ошибок в справке. Хотя выгрузка YML происходит автоматически, ниже приведены распространенные случаи ошибок:

  • несоответствие спецификациям XML. Спецификации проверяют путем изменения расширения файла на .xml и просмотра в браузере или запуском через валидатор;

Валидация экспортного YML файла для интернет-магазина

  • нарушение требований к формату YML (неправильный порядок элементов, не заполнены обязательные параметры, есть недопустимые символы);
  • стандарт YML не поддерживает непечатаемые символы от 0 до 31 с кодами ASCII (кроме символов с кодами 9, 10, 13; возврата каретки, табуляции, новой строки);
  • неправильная кодировка. Допустимые кодировки файлов YML: UTF-8, windows-1251;
  • повторяющийся, не уникальный идентификатор;
  • неправильный URL-адрес (наличие символов кириллицы, пробелов, цифр). Обращают внимание на протокол и www,
  • расположенные на поддомене или другом сайте.

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

Заключение

YML — формат файла, используемый для экспорта данных на платформу Яндекс.Маркет, который обеспечивает быструю качественную обработку файлов и удобное размещение в каталогах на товарной площадке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *