Маркет для производителей

Описание формата VendorYML

VendorYML — это стандарт, разработанный Яндексом для принятия и размещения информации в базе данных Яндекс.Маркета. VendorYML основан на стандарте XML (XML DTD). Единый формат представления данных позволяет быстро и качественно обрабатывать предоставляемую производителями информацию о характеристиках товаров.

Описание формата

XML-документ должен соответствовать следующей схеме:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified"
           version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="yml_catalog">
        <xs:complexType>
            <xs:sequence>
                <xs:element type="VendorType" name="vendor" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute type="xs:dateTime" name="date" use="required"/>
            <xs:attribute name="version" use="required">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[1-9]+[0-9]*\.[0-9]+"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="VendorType">
        <xs:sequence>
            <xs:element type="httpURI" name="url" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element type="CategoriesType" name="categories"/>
            <xs:element name="models">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element type="ModelType" name="model" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute type="xs:normalizedString" name="name" use="required"/>
    </xs:complexType>
    <xs:complexType name="CategoriesType">
        <xs:sequence>
            <xs:element name="category" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:normalizedString">
                            <xs:attribute type="xs:nonNegativeInteger" name="id" use="required"/>
                            <xs:attribute type="xs:nonNegativeInteger" name="parentId" use="optional"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ModelType">
        <xs:choice maxOccurs="unbounded">
            <xs:element type="xs:normalizedString" name="name"/>
            <xs:element type="xs:normalizedString" name="vendorCode" minOccurs="0"/>
            <xs:element type="httpURI" name="promoUrl" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element type="httpURI" name="pictureUrl" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element type="httpURI" name="videoUrl" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element type="httpURI" name="instructionUrl" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element type="httpURI" name="driversUrl" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element type="xs:string" name="barcode" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element type="xs:date" name="announceDate" minOccurs="0"/>
            <xs:element type="xs:date" name="inStockDate" minOccurs="0"/>
            <xs:element type="xs:boolean" name="isActual" minOccurs="0"/>
            <xs:element type="PriceType" name="recomendedPrice" minOccurs="0"/>
            <xs:element type="xs:date" name="addDate" minOccurs="0"/>
            <xs:element type="xs:date" name="updateDate" minOccurs="0"/>
            <xs:element type="xs:string" name="description" minOccurs="0"/>
            <xs:element type="ParamType" name="param" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
        <xs:attribute type="xs:nonNegativeInteger" name="id" use="required"/>
        <xs:attribute type="xs:nonNegativeInteger" name="categoryId" use="required"/>
    </xs:complexType>
    <xs:complexType name="ParamType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute type="xs:string" name="name" use="required"/>
                <xs:attribute type="xs:string" name="unit" use="optional"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="PriceType">
        <xs:simpleContent>
            <xs:extension base="xs:decimal">
                <xs:attribute name="currency" use="required">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:pattern value="[A-Z]{3}"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:simpleType name="httpURI">
        <xs:restriction base="xs:anyURI">
            <xs:pattern value="http[s]{0,1}://.*"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

Скачать схему в формате XML

Скачать пример в формате XML

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

Использование символов

Формат VendorYML не допускает использования в текстовых данных управляющих символов с ASCII- кодами в диапазоне значений от 0 до 31, за исключением символов с кодами 9 (табуляция), 10 (перевод строки) и 13 (возврат каретки). Также этот стандарт требует обязательной замены некоторых символов на эквивалентные им символьные примитивы:

Текстовый символ

Замена (символьный примитив)

"

&quot;

&

&amp;

>

&gt;

<

&lt;

'

&apos;