This page is also available in:
Update
You can use the Data Feed Validator to validate your XML feed according to Skroutz standards.
XML Data Feed Specification Edit the file on GitHub
This document describes the structure of the XML file provided by merchants to Skroutz. We do not require a specific document template as long as the required product attributes are included (see attributes description).
Table of Contents
- Requirements
- Technical Specifications
- XML Declaration
- Attributes
- Data Feed Validator
- XML Examples
- XSDs
Requirements
In general, the XML file must meet the following requirements:
- Clearly defines the document's encoding
- Includes document's creation date
- XML validates according to standards (you can check your XML's validity here)
- In case document's size is bigger than 10MB, it has to be compressed(zip or gzip)
- Doesn't repeat the same products more than once (see Unique ID)
- Includes V.A.T. in prices
Follow this link for a valid XML example or read the XSD definition of the XML.
Alternatively, validate your XML feed against Skroutz standards.
Technical Specifications
SkroutzBot
Skroutz uses a web crawler to download XML feeds. It is identified with the HTTP header "User-Agent: SkroutzBot". Although we call it a bot, it does not comply to the standard definition (www.robotstxt.org).
SkroutzBot does not crawl the whole shop's site but only the following URLs:
- the feed URL
- the feed file images URLs: Skroutz downloads all products' images
- the feed file products URLs: Skroutz downloads a sample of the products for quality control
SkroutzBot originates from the follοwing IPs:
- IPv6: 2a03:e40::/32
- IPv4: 185.6.76.0/22
Make sure that the SkroutzBot IPs have always access to the aforementioned URLs, without any rate limit. The xml link's domain does not matter.
Note
It might be necessary to whitelist SkroutzBot’s URLs on some rate-limiting tools like BitNinja, Cloudflare etc.
SkroutzBot will maintain a reasonable rate of requests.
SkroutzBot accepts https links, but only those that have an intermediate certificate signed by a CA(Certificate Authority) root certificate.
You can verify your certificate here or here.
SkroutzBot does not do basic HTTP authentication or any other kind of authentication. The preferred method is to use IP access control lists.
SkroutzBot sends an Accept-Encoding
header
and it can handle gzip and zip compression. The shop's server should not deny access
to SkroutzBot if it uses exclusively gzip or zip compression.
Note
An easy way to emulate the SkroutzBot is to use the linux program curl, for example:
curl -H 'user-agent: SkroutzBot v1.0' -H 'accept: application/xml,application/gzip,text/csv,application/xhtml+xml;q=0.9,*/*;q=0.8' -H 'accept-encoding: gzip' -i -L --compressed <feed_file_url>
Skroutz ImageBot
Skroutz uses a bot to download the product images. It is identified with the HTTP header "User-Agent: Skroutz ImageBot v1".
Make sure to whitelist the "Skroutz ImageBot" to ensure permanent access to product images.
Note
An easy way to emulate the Skroutz ImageBot is to use the linux program curl, for example:
curl -I -A "Skroutz ImageBot v1" <image_url>
.
Data Feed
For a Data Feed to be accepted all required attributes must be included according to the standards described below.
XML Declaration
The XML declaration head must include the encoding of the file as well as the date it was created. The latter is used to determine if a feed is outdated or not.
Example
<?xml version="1.0" encoding="UTF-8"?>
<mywebstore>
<created_at>2010-04-08 12:32</created_at>
...
</mywebstore>
Note
The encoding included in the XML header must correspond to the actual encoding of the file otherwise your data feed may not be valid and your products will not be updated. For example, a UTF-8 declaration means that the file is encoded in UTF-8.
Note
If your data feed is not created on demand then you should take care that the cached file is invalided and regenerated at least once a day.
Attributes
The table below summarizes the product attributes recognized by Skroutz:
You cannot include HTML notation in any of the product's attributes.
Name | Type | Length | Required | Example |
---|---|---|---|---|
Unique ID | String | 200 | Yes | 322 |
Name | String | 300 | Yes | Samsung Galaxy S4 16GB |
Product Link | String | 1000 | Yes | https://www.someurl.co.uk/products/322.html |
Image Link | String | 400 | Yes | https://www.someurl.co.uk/images/322.jpg |
Additional Image Link | String | 400 | No1 | https://www.someurl.co.uk/images/322/front_view.jpg |
Category Name | String | 250 | Yes | Mobile phones |
Price | Decimal | - (up to 2 decimal places) | Yes | 23.22 |
VAT Rate | Decimal | - (up to 2 decimal places) | No | 24.00 |
Availability | String | 60 | Yes | In 2 days |
Manufacturer | String | 100 | Yes | Samsung |
MPN / ISBN | String | 80 | Yes | GF322234 |
EAN / Barcode | Integer | 13 | Yes | 9780471117094 |
Size | String | 500 | No1 | 4,4.5,5-6,6 1/2 |
Weight | Decimal | - | No2 | 3200 |
InStock Deprecated |
List | - | No | Y |
Shipping Costs | Decimal | - | No | 3.22 |
Color | String | 100 | No3 | Black |
Description | String | 4000 | Yes | SAMSUNG Galaxy A70 as a phablet features 6.7 inch display that affords you a vivid and different visual experience. 4 cameras, 32.0MP + 5.0MP + 8.0MP rear camera + 32.0MP front camera, you can enjoy images with 1080 x 2400 high resolution. It comes with most of the features we've come to expect from a phablet, including 6GB RAM 128GB ROM storage equipped with Android Snapdragon 675 and 4500mAh big capacity battery that you can play games faster. |
Quantity | Integer | 8 | Yes | 10 |
Size Variations | Embedded XML Element | - | No4 | <variations> <variation>...</variation> <variation>...</variation> </variations> |
1 Required by all fashion items with sizes, additional images
2 Required by all shops that use weight in shipping cost rules
3 Required by all fashion items
4 Strongly recommended for all items that require sizes
Unique ID
This attribute represents the unique identifier of a product in your database. The value of this field must remain the same through a product's lifecycle and cannot be reused in other products.
If the title of a product changes between updates so that it no longer refers to the same product (e.g. from Sony LDF700 to Sony LDF800) then the product will be disabled. It is important to note that Unique IDs must always refer to the same product.
A Unique ID cannot refer to more than one product. In such a case the product will be updated only the first time it's encountered in the data feed.
In case your e-commerce application supports more than one languages your data feed should only include definitions in the English language to avoid duplication.
In case you have a WooCommerce store and products with color variations, we recommend the following format for the Unique ID:
<parent product ID>-<attribute term ID>
. You can find additional information in the Skroutz Analytics for WooCommerce plugin.
Example
<UniqueID>32</UniqueID>
<product id="44">...</product>
<PRODUCTID>232AD</PRODUCTID>
Name
The title of the product. It is essential for the title to include all necessary attributes of the product even though some of those attributes maybe included in other parts of the XML as well (i.e. manufacturer, model, color, version, part number, etc). The more accurate the title, the quicker the product will be classified.
The title of products that are second hand or refurbished must clearly state their condition otherwise they will be disabled from the content team.
Example
<Name>Nokia 5800 XpressMusic</Name>
<title>Nokia 5800 XpressMusic</title>
Your product title should not include information about the product guarantee, shipping costs, payment methods, special bundles or marketing actions.
Product Link
The URL that links to your shop's page for the specified product. It must be a
valid URL starting with https
.
Product links should not be URL-encoded.
This link must only point to a product page and not a category page or a collection of products page.
Example
<link>https://www.mydomain.com/products/1</link>
<url>https://www.mydomain.com/products/product.php?itemid=1</url>
<url><![CDATA[https://www.mydomain.com/products/product.php?itemid=1&somevar=3]]></url>
<url>https://www.mydomain.com/products/product.php?itemid=1&amp;somevar=3</url>
In case you do not have an online shop, you should put dummy links in valid URL format.
Image Link
The product's image location. It must be a valid URL starting with https
.
Links to scripts that generate images should be avoided as it may cause
download errors.
It's better to include high resolution images in your data feed. Images are downloaded by Skroutz and proper thumbnails are created.
Images must not be watermarked.
Image links should not be URL-encoded.
Avoid adding
No Image
template images because if you later change it Skroutz might not update it. If a product doesn't have an image yet, you can just send an empty image link. If you later change it the image will be updated normally.
Images should not have bezels. The object shown in the image must have at least one dimension larger than 1000 pixels.
The AVIF format is not supported.
Example
<image>https://www.mydomain.com/photos/1.jpg</image>
<imageurl>https://www.mydomain.com/photos/b&amp;b.jpg</imageurl>
<url><![CDATA[https://www.mydomain.com/photos/b&b.jpg]]></url>
Image links must be publicly accessible, regardless of the domain in which they are hosted.
Additional Image Link
It is used for additional photographs of the product. Additional photos of the same product from different angles or with a different presentation or combinations of the above add value to the presentation of the product in Skroutz.
This field is optional but recommended, except for fashion categories where additional images are required. It can occur multiple times in the feed, once for each different photograph. It has the same limitations as Image Link.
Images should not have bezels. The object shown in the image must have at least one dimension larger than 1000 pixels.
The maximum number of unique image links per product is 15.
Example
<image>https://www.mydomain.com/photos/1.jpg</image>
<imageurl>https://www.mydomain.com/photos/b&amp;b.jpg</imageurl>
<additional_imageurl>https://www.mydomain.com/photos/product1/front.jpg</additional_imageurl>
<additional_imageurl>https://www.mydomain.com/photos/product1/sides.jpg</additional_imageurl>
<additional_imageurl>https://www.mydomain.com/photos/product1/packaged.jpg</additional_imageurl>
<url><![CDATA[https://www.mydomain.com/photos/b&b.jpg]]></url>
Category Name
The product's category path. It is essential that this attribute includes the
full path of the product's category. For example, if the product is an External
Hard Drive
then the category name attribute should look like
Computers > External Hard Drives
Avoid ambigious categories containing different products (e.g. Printers and Scanners) as it will slow down the classification process of your products.
Example
<category>Mobile Phones > Bluetooth</category>
<category_path>Computers - Hardware - CPUs</category_path>
Price
It's the products retail price including V.A.T.
The price of the product must apply to everyone without any special conditions (e.g. offers, discounts pending on location etc).
The price field accepts up to 2 decimal places.
The price should be in euros.
VAT Rate
It's the product's VAT rate.
This field accepts values within the range between
1
and100
, or equal to0
.
The VAT rate field accepts up to 2 decimal places.
Example
<name>SAMSUNG Galaxy A70 4G Smartphone 6GB RAM 128GB ROM - Black</name>
<price>150.0</price>
<vat>24.0</vat>
Availability
This field describes the shipping availability as used throughout your shop.
Skroutz uses a fixed set of availability descriptions that will be crosslinked to the ones provided in your feed.
- In Stock
- refers to products that are available for
Express delivery.
The label
Express delivery
appears when the related shop has the service enabled in Skroutz and the product fulfills the service criteria.
When the service is not enabled, then the related products will be presented to Skroutz with theAvailable
indication.
Any products you don't need to offer in "Express delivery", they should be marked with one of the following availabilities. - Available from 1 to 3 days
- refers to products that are available to the shop or for shipping from the warehouse or the supplier and can be delivered to your customer within the specified days.
- Available from 4 to 10 days
- refers to products that are not available to the shop and can be delivered within the specified days.
- Available up to 30 days
- refers to products that are not in stock and can be delivered only upon order. In any case, the delivery time could not exceed 30 days, which is the maximum limit set by the legislation on e-commerce and distance sales.
Example
<availability>In stock</availability>
Manufacturer
The manufacturer of the product
The manufacturer name must be also include in the title regardless if it is included in this attribute.
The manufacturer attribute must point to the actual manufacturer of the product and not the manufacturer this product is used for in cases of spare parts or accessories.
MPN / ISBN
The unique manufacturer identifier of the product. It is used to identify a product and classify it.
This attribute is required for all categories.
If the product is a Book then this field must include the ISBN
of the book.
Books without their ISBN information will not be classified
EAN / Barcode
The international article number (EAN) used for the identification of retail products.
This attribute is required for all categories A unique EAN is allocated to each separate retail product.
Size
If the product comes in sizes you can include all available sizes in this attribute seperated by commas.
For example, a sport shoe available in 5.5, 6, and 6.5 your XML
will include
the following attribute
<size>5.5,6,6.5</size>
You can also use 1/2
as a half size indicator
<size>5 1/2,6,6 1/2</size>
In case of clothes, sizes can be in one of the following formats:
<size>XXS, XS, S, M, L, XL, XXL, XXXL</size>
<size>Extra Small, Small, Medium, Large, Extra Large</size>
<size>00, 0, 2, 4, 6, 8, 10, 12, 14, 16</size>
If a product fits a size range (e.g. socks) then you can declare the size as a range using the dash (-). e.g.
<size>5.5-6.5</size>
Finally, if a product is identified by two sizes you can include them using the forward slash. (/) e.g.
<size>5.5/42,5.5/45</size>
You should not include the product size within the product title by any means.
Products that are identified by sizes and the size information is not provided will not be classified.
Weight
The product's weight used by your platform to calculate shipping costs in grams. If you wish to provide
it in kilograms you can do so by adding kg
to the value string.
Example
For a product with a weight of 3.2kg
, the value of the weight field can be:
<weight>3200</weight>
or
<weight>3.2 kg</weight>
InStock Deprecated
Stock status of the product
Y
- means that the product is in stock at your outlet or your warehouse and can be picked up immediately.
N
- means that the product is not available in stock.
When no information is provided the value of this attributed is considered as
N
(no stock).
Shipping Costs
The product's shipping cost regardless of the customer's location. If the
product shipping cost is known beforehand you can include the shipping cost here.
If this product is eligible for free shipping, you can indicate it by providing
0
as a value for this attribute.
Shipping costs included here should be independent of the shipping location. If this is not the case , then this attribute should be blank.
Shipping costs will be displayed along with your other product information as long as they are accurate every time. If, even for one product, shipping costs are not accurate then they will be removed from all products in your data feed.
Shipping costs are taken into consideration exclusively for the redirection billing model.
Color
The color of the product. The color attribute functions as a property of the specific product and cannot cover multiple product entries.
It should contain the color of the product as depicted in the product image.
In case multiple colors for a given model exist, they should be submitted as different products with separate Unique IDs.
In case you have a WooCommerce store and products with color variations, we recommend the following format for the Unique ID:
<parent product ID>-<attribute term ID>
. You can find additional information in the Skroutz Analytics for WooCommerce plugin.
Example
<color>Black</color>
<color>green</color>
Description
The product description should explain what a product is and why it's worth purchasing.
The purpose of the product description is to supply customers with important information about the specifications and usage of the product.
Example
<name>SAMSUNG Galaxy A70 4G Smartphone 6GB RAM 128GB ROM - Black</name>
<description>
SAMSUNG Galaxy A70 as a phablet features 6.7 inch display that affords you a vivid and different visual experience. 4 cameras,
32.0MP + 5.0MP + 8.0MP rear camera + 32.0MP front camera, you can enjoy images with 1080 x 2400 high resolution. It
comes with most of the features we've come to expect from a phablet, including 6GB RAM 128GB ROM storage equipped with
Android Snapdragon 675 and 4500mAh big capacity battery that you can play games faster.
</description>
Quantity
The quantity is the amount of items available for purchase via Skroutz.
The quantity field is required for all categories and only accepts integer values greater or equal to
0
and less or equal to10000000
.
If the product is out of stock, the indicated value should be
0
.
Example
<name>SAMSUNG Galaxy A70 4G Smartphone 6GB RAM 128GB ROM - Black</name>
<quantity>10</quantity>
For products with size variations, the quantity is recommended to be the sum of the available sizes. For example: If there are 10 available pieces of Medium size, 15 of Large and 5 of XLarge:
<size>M, L, XL</size>
<quantity>30</quantity>
Size Variation Attributes
"Size variations" are an enhancement to the current XML feed, that introduces new nodes (children) that include the information of size variations nested in the parent product. For the time being, the parent product should be exactly the same as the current XML specification (including all fields, even those that are size variation specific i.e. availability, size, quantity, link, price, mpn and ean).
The table below summarizes the size variation attributes recognized by Skroutz:
Currently, size variations can only be used in products that have size as a required field.
You cannot include HTML notation in any of the size variation's attributes.
Name | Type | Length | Required | Beta1 | Example |
---|---|---|---|---|---|
Variation Unique ID | String | 200 | Yes | No | 12431.XL |
Variation Availability | String | 100 | Yes | No | In 2 days |
Variation Size | String | 64 | Yes | No | M |
Variation Quantity | Integer | 8 | Yes | No | 10 |
Variation Price | Decimal | - (up to 2 decimal places) | No | No | 23.22 |
Variation Link | String | 2000 | No | Yes | https://www.someurl.co.uk/products/322.html |
Variation MPN | String | 80 | No | Yes | GF322234 |
Variation EAN / Barcode | Integer | 80 | No | Yes | 9780471117094 |
1 It is recommended to include beta fields in the XML feed. However, their values will not be initially used and will be overridden by their respective product attributes. Also these fields are subject to removal from the XML feed specification.
Variation Unique ID
This attribute represents the unique identifier of a size variation in your database. The value of this field must remain the same through a size variation's lifecycle and cannot be reused in other variations.
A size Variation Unique ID cannot refer to more than one size variations. In such a case the size variation will be updated only the first time it's encountered in the data feed.
In case your e-commerce application supports more than one languages, your data feed should only include definitions in the English language to avoid duplication.
Example
<variationid>12431.XL</variationid>
Variation Availability
This field describes the shipping availability as used throughout your shop.
Skroutz uses a fixed set of availability descriptions that will be crosslinked to the ones provided in your feed.
- In Stock
- refers to size variations that are available for
Express delivery.
The label
Express delivery
appears when the related shop has the service enabled in Skroutz and the product fulfills the service criteria.
When the service is not enabled, then the related products will be presented to Skroutz with theAvailable
indication.
Any products you don't need to offer in "Express delivery", they should be marked with one of the following availabilities. - Available from 1 to 3 days
- refers to size variations that are available to the shop or for shipping from the warehouse or the supplier and can be delivered to your customer within the specified days.
- Available from 4 to 10 days
- refers to size variations that are not available to the shop and can be delivered within the specified days.
- Available up to 30 days
- refers to size variations that are not in stock and can be delivered only upon order. In any case, the delivery time could not exceed 30 days, which is the maximum limit set by the legislation on e-commerce and distance sales.
Example
<availability>In Stock</availability>
Variation Size
This attribute represents the size corresponding to the current size variation.
For example, a sport shoe available in 38 your XML
will include
the following attribute
<size>38</size>
You can also use 1/2
as a half size indicator
<size>38 1/2</size>
In case of clothes, sizes can be in one of the following formats:
<size>XL</size>
<size>Extra Large</size>
<size>10</size>
If a size variation fits a size range (e.g. socks) then you can declare the size as a range using the dash (-). e.g.
<size>5.5-6.5</size>
Finally, if a size variation is identified by two sizes you can include them using the forward slash. (/) e.g.
<size>5.5/42</size>
You should not include the product size within the product title by any means.
Size variations that the size information is not provided will not be classified.
Variation Quantity
The quantity is the amount of items available for purchase via Skroutz.
The quantity field only accepts integer values greater or equal to
0
and less or equal to10000000
.
If the size variation is out of stock, the indicated value should be
0
.
Example
<quantity>10</quantity>
Variation Price
It's the size variation's retail price including V.A.T.
The price of the size variation must apply to everyone without any special conditions (e.g. offers, discounts pending on location etc).
The price field accepts up to 2 decimal places.
The price should be in euros.
Example
<price>23.22</price>
<pricevat>23.22</pricevat>
Variation Link
The URL that links to your shop's page for the specified size variation. It must be a
valid URL starting with https
.
Size variation links should not be URL-encoded.
This link must only point to a product page and not a category page or a collection of products page.
Example
<link>https://www.mydomain.com/products/1</link>
<url>https://www.mydomain.com/products/product.php?itemid=1</url>
<url><![CDATA[https://www.mydomain.com/products/product.php?itemid=1&somevar=3]]></url>
<url>https://www.mydomain.com/products/product.php?itemid=1&amp;somevar=3</url>
Variation MPN
The unique manufacturer identifier of the product. It is used to identify a size variation and classify it.
This attribute is used for categories where the Manufacturer Product Number is required to identify a size variation with different configurations (e.g. storage, color, etc)
Example
<manufacturersku>GF322234</manufacturersku>
<mpn>GF322234</mpn>
Variation EAN / Barcode
The international article number (EAN) used for the identification of retail products.
This attribute is optional but is strongly recommended for categories where retail products have the same product brand but variations in weight, colour etc. A unique EAN is allocated to each separate retail product.
Example
<ean>9780471117094</ean>
Data Feed Validator
You can use the Data Feed Validator to check your XML feed for compatibility with Skroutz standards.
You can upload your XML file and the validator checks to confirm that it is well-formed, according to the XML specification, tries to identify the XML element corresponding to each one of your products and then scans the products' attributes to ensure that Skroutz requirements are met.
XML Examples
Simple XML
The XML excerpt below is an example of a compatible XML data feed.
<?xml version="1.0" encoding="UTF-8"?>
<mywebstore>
<created_at>2010-04-08 12:32</created_at>
<products>
<product>
<id>322233</id>
<name><![CDATA[Converse All Star Chuck Taylor Ox]]></name>
<link><![CDATA[https://www.mywebstore.co.uk/product/322233]]></link>
<image><![CDATA[https://www.mywebstore.co.uk/product/322233.jpg]]></image>
<additionalimage><![CDATA[https://www.mywebstore.co.uk/product/322233/front.jpg]]></additionalimage>
<category><![CDATA[Outdor > Sneakers]]></category>
<price_with_vat>30.00</price_with_vat>
<vat>24.00</vat>
<manufacturer><![CDATA[Converse]]></manufacturer>
<mpn>M7652C</mpn>
<ean>886952780692</ean>
<availability>Delivery 1 to 3 days</availability>
<size>5.5,6</size>
<weight>2000</weight>
<color>White</color>
<description>
The Chuck Taylor All Star is one of the most iconic sneakers
of all ages. It is a unique design with a classic and comfortable
fit, in white color, with durable non-slip exterior rubber sole.
It is an ideal piece for all kinds of appearances.
</description>
<quantity>10</quantity>
</product>
...
...
...
</products>
</mywebstore>
XML with Size Variations
The XML excerpt below is an example of a compatible XML with variations data feed.
<?xml version="1.0" encoding="UTF-8"?>
<mywebstore>
<created_at>2010-04-08 12:32</created_at>
<products>
<product>
<id>322233</id>
<name><![CDATA[Converse All Star Chuck Taylor Ox]]></name>
<link><![CDATA[https://www.mywebstore.co.uk/product/322233]]></link>
<image><![CDATA[https://www.mywebstore.co.uk/product/322233.jpg]]></image>
<additionalimage><![CDATA[https://www.mywebstore.co.uk/product/322233/front.jpg]]></additionalimage>
<category><![CDATA[Outdor > Sneakers]]></category>
<price_with_vat>30.00</price_with_vat>
<vat>24.00</vat>
<manufacturer><![CDATA[Converse]]></manufacturer>
<mpn>M7652C</mpn>
<ean>886952780692</ean>
<availability>Delivery 1 to 3 days</availability>
<size>43,45</size>
<weight>2000</weight>
<color>White</color>
<description>
The Chuck Taylor All Star is one of the most iconic sneakers
of all ages. It is a unique design with a classic and comfortable
fit, in white color, with durable non-slip exterior rubber sole.
It is an ideal piece for all kinds of appearances.
</description>
<quantity>10</quantity>
<variations>
<variation>
<variationid>322233.43</variationid>
<link><![CDATA[https://www.mywebstore.co.uk/product/322233]]></link>
<availability>Delivery 1 to 3 days</availability>
<manufacturersku>M7652C</manufacturersku>
<ean>886952780692</ean>
<price_with_vat>33.00</price_with_vat>
<size>43</size>
<quantity>6</quantity>
</variation>
<variation>
<variationid>322233.45</variationid>
<link><![CDATA[https://www.mywebstore.co.uk/product/322233]]></link>
<availability>Delivery 1 to 3 days</availability>
<manufacturersku>M7652C</manufacturersku>
<ean>886952780692</ean>
<price_with_vat>30.00</price_with_vat>
<size>45</size>
<quantity>4</quantity>
</variation>
...
...
...
</variations>
</product>
...
...
...
</products>
</mywebstore>
XSDs
Simple XSD
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- required elements -->
<!-- created at -->
<xs:element name="created_at" type="xs:dateTime" />
<!-- unique id -->
<xs:element name="uid">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="200" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- name -->
<xs:element name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="300" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- link -->
<xs:element name="link">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="400" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- image -->
<xs:element name="image">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="400" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- additional image -->
<xs:element name="additional_image">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="400" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- price -->
<xs:element name="price" type="xs:decimal" />
<!-- vat -->
<xs:element name="vat" type="xs:decimal" />
<!-- category -->
<xs:element name="category">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="300" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- manufacturer -->
<xs:element name="manufacturer">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- manufacturer part number -->
<xs:element name="mpn">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- ean -->
<xs:element name="ean">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:totalDigits value="13" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- instock [deprecated] -->
<xs:element name="instock">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Y" />
<xs:enumeration value="N" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- shipping -->
<xs:element name="shipping" type="xs:decimal" />
<!-- availability -->
<xs:element name="availability">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- size -->
<xs:element name="size">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- weight -->
<xs:element name="weight" type="xs:decimal" />
<!-- color -->
<xs:element name="color">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- quantity -->
<xs:element name="quantity" type="xs:integer" />
<!-- basic structure -->
<xs:element name="storedata">
<xs:complexType>
<xs:sequence>
<!-- created at -->
<xs:element ref="created_at" minOccurs="0" />
<!-- products -->
<xs:element name="products">
<xs:complexType>
<xs:sequence>
<!-- product -->
<xs:element name="product" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<!-- required fields -->
<xs:element ref="uid"/>
<xs:element ref="name"/>
<xs:element ref="link"/>
<xs:element ref="image"/>
<xs:element ref="price"/>
<xs:element ref="category"/>
<xs:element ref="manufacturer" />
<xs:element ref="mpn" />
<xs:element ref="availability" />
<xs:element ref="instock" />
<!-- optional fields -->
<xs:element ref="vat" minOccurs="0"/>
<!-- description -->
<xs:element name="description">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="value" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element ref="additional_image" minOccurs="0"/>
<xs:element ref="ean" minOccurs="0"/>
<xs:element ref="size" minOccurs="0"/>
<xs:element ref="weight" minOccurs="0"/>
<xs:element ref="shipping" minOccurs="0"/>
<xs:element ref="color" minOccurs="0"/>
<xs:element ref="quantity" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
<!-- end product -->
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- end products -->
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSD with Size Variations
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- required elements -->
<!-- created at -->
<xs:element name="created_at" type="xs:dateTime" />
<!-- unique id -->
<xs:element name="uid">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="200" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- name -->
<xs:element name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="300" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- link -->
<xs:element name="link">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="400" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- image -->
<xs:element name="image">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="400" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- price -->
<xs:element name="price" type="xs:decimal" />
<!-- category -->
<xs:element name="category">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="300" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- manufacturer -->
<xs:element name="manufacturer">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- manufacturer part number -->
<xs:element name="mpn">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- availability -->
<xs:element name="availability">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- instock [deprecated] -->
<xs:element name="instock">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Y" />
<xs:enumeration value="N" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- optional elements -->
<!-- vat -->
<xs:element name="vat" type="xs:decimal" />
<!-- additional image -->
<xs:element name="additional_image">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="400" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- ean -->
<xs:element name="ean">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:totalDigits value="13" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- size -->
<xs:element name="size">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- weight -->
<xs:element name="weight" type="xs:decimal" />
<!-- shipping -->
<xs:element name="shipping" type="xs:decimal" />
<!-- color -->
<xs:element name="color">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- quantity -->
<xs:element name="quantity" type="xs:integer" />
<!-- basic structure -->
<xs:element name="storedata">
<xs:complexType>
<xs:sequence>
<!-- created at -->
<xs:element ref="created_at" minOccurs="0" />
<!-- products -->
<xs:element name="products">
<xs:complexType>
<xs:sequence>
<!-- product -->
<xs:element name="product" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<!-- required fields -->
<xs:element ref="uid"/>
<xs:element ref="name"/>
<xs:element ref="link"/>
<xs:element ref="image"/>
<xs:element ref="price"/>
<xs:element ref="category"/>
<xs:element ref="manufacturer" />
<xs:element ref="mpn" />
<xs:element ref="availability" />
<xs:element ref="instock" />
<!-- optional fields -->
<xs:element ref="vat" minOccurs="0"/>
<!-- description -->
<xs:element name="description">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="value" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element ref="additional_image" minOccurs="0"/>
<xs:element ref="ean" minOccurs="0"/>
<xs:element ref="size" minOccurs="0"/>
<xs:element ref="weight" minOccurs="0"/>
<xs:element ref="shipping" minOccurs="0"/>
<xs:element ref="color" minOccurs="0"/>
<xs:element ref="quantity" minOccurs="0"/>
<!-- size variations -->
<xs:element name="variations">
<xs:complexType>
<xs:sequence>
<!-- size variation -->
<xs:element name="variation" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<!-- required fields -->
<xs:element type="xs:string" name="variationid"/>
<xs:element type="xs:string" name="availability"/>
<xs:element type="xs:string" name="size"/>
<xs:element type="xs:integer" name="quantity"/>
<!-- optional fields -->
<xs:element type="xs:string" name="link"/>
<xs:element type="xs:string" name="manufacturersku"/>
<xs:element type="xs:integer" name="ean"/>
<xs:element type="xs:decimal" name="price_with_vat"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- end size variation -->
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- end size variations -->
</xs:all>
</xs:complexType>
</xs:element>
<!-- end product -->
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- end products -->
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>