0% found this document useful (0 votes)
72 views

Api Open Icecat

Documentación API OpenIcecat

Uploaded by

Jaime Roiges
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
72 views

Api Open Icecat

Documentación API OpenIcecat

Uploaded by

Jaime Roiges
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 48

ICECAT XML Communication

Page 1 of 48

Open Catalog Interface (OCI): Open ICEcat


XML and Full ICEcat XML Repository

Last revised: September 17, 2008, Version 2.19

IMPORTANT NOTES
1) In case of Open ICEcat, please check the Open ICEcat sections.

2) the links and files in the download directories are to be


downloaded with scripts (from server to server). If you try to
download them via your browser, you may sometimes experience
memory problems. This does not mean that on our side the data is
not accessible or correctly available. In case you experience any
problem, contact us via the contact form.

3) By default a daily index file is shown when you only enter the
directory name. This, because it is more efficient for testing and
viewing in a browser. To get the complete index file, include in the
path the full file name of the complete index: files.index.xml (in
Open ICEcat or Full ICEcat).

4) After a rip of our general site, an IP address may be blocked. A rip


is not acceptable as it may hurt site performance and can be a
copyright infringement.
1. SUBJECT OF THIS DOCUMENT..........................................................................................3
OUR MISSION...................................................................................................................................3
INTERNATIONAL STANDARD SUPPORTED...............................................................................................3
OPEN (ICECAT) REPOSITORIES..........................................................................................................3
OPENICECAT FAIR USE POLICY........................................................................................................3
COVERAGE ANALYSIS........................................................................................................................4
ADVANTAGES OF UPGRADING TO FULL ICECAT...................................................................................4
2. DIRECTORIES.........................................................................................................................5
2.1 ACCESS....................................................................................................................................5
2.2 INDIVIDUAL PRODUCT XML (META) REQUESTS............................................................................5
2.3 OPEN ICECAT (FREE) DIRECTORIES, FOR BATCH PROCESSING............................................................6
2.4 FULL ICECAT DIRECTORIES, FOR BATCH PROCESSING.......................................................................6
2.4 LANGUAGES SUPPORTED AND THEIR CODES ...................................................................................7
2.5 USE GZIP / MOD_DEFLATE...........................................................................................................7
2.5 USE OF HTTP LIKE FTP, AND AN EXAMPLE C# SCRIPT TO DOWNLOAD FILES.....................................8
3. INDEX FILES *.INDEX.XML.................................................................................................9
3.1 PURPOSE...................................................................................................................................9
3.2 *.INDEX.XML DTD..................................................................................................................10
4. ADDITIONAL DATA.............................................................................................................11
4.1 MANUFACTURER NAMES MAPPING DATA.......................................................................................11
4.2 MANUFACTURER PART NUMBER MAPPINGS....................................................................................11
ICECAT XML Communication
Page 2 of 48

4.3 REFERENCES............................................................................................................................11
4.3.1 Measures list (units).....................................................................................................13
4.3.2 Features list..................................................................................................................13
4.3.3 Categories list...............................................................................................................13
4.3.4 Suppliers list request (manufacturers).........................................................................14
4.3.5 Category features list request.......................................................................................14
4.3.6 Supplier product families list request...........................................................................15
4.3.7 Languages list...............................................................................................................16
4.3.8 Popularity of products..................................................................................................16
5. PRODUCTS XML DATA FILE............................................................................................16
5.1 REPOSITORY FILE DTD............................................................................................................16
5.2 EXAMPLE PRODUCT XML.........................................................................................................17
6. SQL SET-UP............................................................................................................................27
6.1 EXPLANATION OF ENTITIES.........................................................................................................27
6.2 MYSQL SET-UP (MONOLINGUAL CATALOGUE)............................................................................28
6.3 MS SQL SET-UP (MONOLINGUAL CATALOGUE)..........................................................................35
6.3.1 SET-UP CATEGORY STRUCTURE.................................................................................................35
6.3.2 CREATING TRIGGERS..............................................................................................................47
1. Subject of this document
This document describes the file format used in the ICEcat XML repository. It gives the
basics of how to use the ICEcat repository.

Our mission
It is our mission to provide channel partners and buyer orientation websites with high-
quality product information via our Open Catalog Interface (OCI). More and more
manufacturers work together with ICEcat to take care of their product content; this makes
it possible for us to distribute their product content for free. Here, you can always find the
latest overview of sponsoring (free) brands in Open ICEcat:
http://www.icecat.biz/en/menu/partners/index.htm .

However attractive the free Open ICEcat database is, the Full-ICEcat database still contains
many, many more brands: 2500+ (see
http://www.icecat.biz/en/menu/vendors/index.htm ). If you are interested in subscribing to
the Full-ICEcat database, please contact us via the website.

International Standard Supported


 XML for the exchange of catalog data
 The encoding used in our XML interfaces is UTF8
 HTTP for file transfer
 Gzip for file compression
 UNSPSC (see http://www.unspsc.org) for categorization
 GTIN / EAN / UPC for logistical product codes (when provided by manufacturers)
 ISO 639-1 two character code for languages
 ISO 3166-1 two character code for countries
 All common graphical formats for images (JPEG, GIF, ..)
 Diverse product-specific standards, as mentioned in the feature descriptions.

Open (ICEcat) Repositories


The Full ICEcat XML repository is a set of product data files and an index file, which includes
all pointers to individual product files and gives some basic information like time stamp
updated, content quality level, etc. The ICEcat XML repository contains product information
for products of all brands, and categories that subscribers want us to support. The current
content can be best reviewed on the public website: http://www.icecat.biz/ .

Open ICEcat repository is the part of the ICEcat XML repository that is sponsored by
manufacturers and is provided for free to the channel. Open ICEcat is distributed under the
Open Content License Agreement: http://www.mytrade.nl/get_attachment.cgi?2567 .
Which brands are included in Open ICEcat? The most recent list can always be found on the
ICEcat.biz site: http://www.icecat.biz/en/menu/partners/index.htm
Open ICEcat is also useful during development and for testing purposes.

OpenICEcat Fair Use Policy


The user of OpenICEcat product data (in a free Open ICEcat subscription or as part of the
Full ICEcat data) is required to respect the OpenICEcat Fair Use Policy, which can be found
in the forum: http://forum.icecat.biz/forum/catalogue/index.cgi?
tmpl=view_message.html;message_id=3004;thread_id=17

Explicitly relevant for website development is:


• to mention explicitly the “(c) ICEcat.biz” copyright notice (or “Source: ICEcat.biz”) on all
product data sheets, with a link to the ICEcat.biz web site
• include explicitly the ICEcat "AS IS" disclaimer which can be found here:
http://www.icecat.biz/en/menu/disclaimer/index.htm (and is available in several languages)

Coverage analysis
To decide to make use of ICEcat or Open ICEcat it is important to analyze the coverage of
your portfolio or the portfolio of your supplier. You can always ask us to give you an
overview of the coverage of (stock) portfolio of your suppliers (i.e., distributors) at any
given moment. We strive to cover at least 90% of the stock portfolio (stock > 1) of
mainstream distributors and work together with partners to monitor this coverage daily.

If you want to analyze coverage, you can use this matching file, which is a plain dump of
everything in our catalog:
http://data.icecat.biz/prodid/prodid_d.txt (very large file with all known products in the
ICEcat database, described and standardized or not)
A gzipped version of the matching file can be found here:
http://data.icecat.biz/prodid/prodid_d.txt.gz

Market presence=Y indicates that we notice that the product is currently present in at least
one distributor’s catalog. Quality=ICECAT means that ICEcat editors have standardized the
data-sheet. Quality=SUPPLIER means that the data-sheet is imported from a
manufacturer’s CMS, and may be queued for standardization. Quality=NOEDITOR means
that our editors did not touch and standardized the data; so, it is raw data.

NOTE:
- because we also maintain mappings for manufacturer part numbers (to correct ones), the
actual match on the basis of our xml index files is often 5-10% higher

TIP: discuss with the ICEcat team a service level for your (supplier’s) portfolio.

Advantages of Upgrading to Full ICEcat


What are the main advantages of Full ICEcat over Open ICEcat?
• All product data of all 3000+ brands (see
http://www.icecat.biz/en/menu/vendors/index.htm ; if you see the brand logo the
brand’s product data is also available in free Open ICEcat)
• Support for producing missing data-sheets, cateegories and brands on request (and
often in the form of a coverage guarantee for your categories; ask us about it)

If you want to upgrade to Full ICEcat: you can contact us via the contact form, click on the
“request Full ICEcat access” link after the User Login
(http://www.icecat.biz/en/menu/openicecat/index.htm), or fill in and fax the Full ICEcat
registration form: http://forum.icecat.biz/forum/catalogue/index.cgi?
tmpl=view_message.html;message_id=3191;thread_id=17 that you can find as an attachment.
You will also find in the attached form (pdf) the standard Full ICEcat tariffs.
2. Directories

2.1 Access
To obtain access to the repository you will need a login/password, provided to you by
ICEcat. If you don’t have these, please request one via the contact form on the ICEcat site:
http://www.icecat.biz/en/menu/contacts/index.htm
For full-ICEcat access a separate contract is needed. You can request this contract form via
[email protected] .

Take care that you have provided us with the right IP addresses of your content servers, as
the access is secured. You can test the login/password combination by entering it by hand
in the BASIC HTTP authorization pop-up screen, which appears automatically when the
directory URL is entered. In this case, we need to have added the IP address of your
workplace as well to your profile. If you don’t know this IP address, just type in your
browsers http://www.whatismyip.com/ and email the given address to us.

Of course, for professional use, server access need to be set up. In case of little experience
in this field, we advise you to make use of the URL versions (links to pictures and
datasheets) or ask us for assistance.

2.2 Individual Product XML (Meta) Requests


For smaller catalogs and for testing XML with small data-sets, it may be handy to make use
of our real-time interface (URL2XML) for retrieving Product XML from the (Open) ICEcat
repositories.

The general format of the call is:


http://data.icecat.biz/xml_s3/xml_server3.cgi?
prod_id=<prod_id>;vendor=<vendor_name>;lang=<lang>;output=<out_type>

Where:
prod_id = the manufacturer part number of the requested product,
vendor_name = name of the manufacturer of the requested product,
lng = the language code (INT – for the international/standardized repository, EN, NL, FR… -
for local ones)
out_type = the type of the response. It can be productxml (the product xml file) and
metaxml (the index or meta information on the Brand + ProdID/M_Prod_ID or EAN/UPC)

For example, if you need to get an xml file of product ‘Compaq 6710b Base Model Notebook
PC’. Manufactured by HP, with part number RJ459AV, in English:, the call will be:
http://data.icecat.biz/xml_s3/xml_server3.cgi?
prod_id=RJ459AV;vendor=hp;lang=en;output=productxml

An example of the international (standardized) version of Canon 1447B006AA:


http://data.icecat.biz/xml_s3/xml_server3.cgi?
prod_id=1447B006AA;vendor=Canon;shopname=openICEcat-
xml;lang=int;output=productxml
The meta data:
http://data.icecat.biz/xml_s3/xml_server3.cgi?
prod_id=1447B006AA;vendor=Canon;shopname=openICEcat-
xml;lang=int;output=metaxml

The English version (with for some brands localized data-sheets)


http://data.icecat.biz/xml_s3/xml_server3.cgi?
prod_id=1447B006AA;vendor=Canon;shopname=openICEcat-
xml;lang=en;output=productxml

The German version (with for some brands localized data-sheets)


http://data.icecat.biz/xml_s3/xml_server3.cgi?
prod_id=1447B006AA;vendor=Canon;shopname=openICEcat-
xml;lang=de;output=productxml

XML Server 3 access works via the basic HTTP authorization, also used for other HTTP
requests.

2.3 Open ICEcat (free) directories, for batch processing


Open ICEcat users have access to:
http://data.icecat.biz/export/freexml.int/INT/ for access to the standardized data files
(QUALITY=ICECAT).

TIP: The standardized files are adviced for searching & comparing.
Please, note, where QUALITY=SUPPLIER only the original product data as imported from a
manufacturer’s CMS is available, the respective data-sheet is not yet standardized by our
editors. When it is standardized the parameter is changed to QUALITY=ICECAT.

The language-specific data-files are found here:


http://data.icecat.biz/export/freexml.int/[code], where [code] stands e.g. for NL, EN, FR,
DE, IT, SP, DK.
Please, note that this language-specific content can be either the standardized content
(sames as in INT), which is entered by our editors, or –even better- the original data
imported from the CMS of a manufacturer like HP, Toshiba, Philips etc.

In general, we intend to follow the ISO 639-1 two character code.

TIP: We advise the language-specific product content purely for the display of product
data-sheets, not for search & compare. For that, we advise the standardized product
content in the /INT directory.

TIP: Open ICEcat is also useful for testing purposes before you upgrade to Full ICEcat. The
technical structures are 100% compatible with Full ICEcat

2.4 Full ICEcat directories, for batch processing


Full-ICEcat contains all product data of all 2500+ brands supported. Often provided with
service levels and coverage guarantees.

For the Full ICEcat subscribers, a separate directory structure is in place. The standardized
files are located at:
http://data.icecat.biz/export/level4/INT
TIP: The standardized files are advised for searching & comparing.
Please, note, where QUALITY=SUPPLIER only the original product data as imported from a
manufacturer’s CMS is available, the respective data-sheet is not yet standardized by our
editors. When it is standardized the parameter is changed to QUALITY=ICECAT.

and the language dependent versions are found here:


http://data.icecat.biz/export/level4/[code], where [code] stands e.g. for NL, EN, FR, GE, IT,
SP, DK.
Please, note that this language-specific content can be either the standardized content
(same as in INT), which is entered by our editors, or –even better- the original data
imported from the CMS of a manufacturer like HP, Toshiba, Philips etc.
TIP: We advise the language-specific product content purely for the display of product
data-sheets, not for search & compare. For that, we advise the standardized product
content in the /INT directory.

Examples:
http://data.icecat.biz/export/level4/EN
http://data.icecat.biz/export/level4/NL
http://data.icecat.biz/export/level4/FR
http://data.icecat.biz/export/level4/DE
http://data.icecat.biz/export/level4/IT
http://data.icecat.biz/export/level4/SP
http://data.icecat.biz/export/level4/DK
http://data.icecat.biz/export/level4/SE
http://data.icecat.biz/export/level4/RU
http://data.icecat.biz/export/level4/CZ
http://data.icecat.biz/export/level4/CN
http://data.icecat.biz/export/level4/FI
http://data.icecat.biz/export/level4/PL
http://data.icecat.biz/export/level4/BG
http://data.icecat.biz/export/level4/TR
etc
In general, we intend to follow the ISO 639-1 two character code.

2.4 Languages Supported and their Codes


If you want to know if your country/language is supported look here online for the latest
status: http://www.icecat.biz/index.cgi?language=en;menu=country|language
We currently support most world languages and European languages. Our intention is to
support eventually all languages.

In general we follow the language codes as given by the ISO 639-1 standard. See
http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes . However, in some cases, we will
choose for the two character country codes when for the “country-specific dialect” there is
no language code given (e.g., BR for Brasilian-Portuguese, or US for US English).

In total we support now more than 20 languages. If you feel that your language or the
language that you need is missing, feel free to contact us. Probably we can work something
out.

2.5 Use Gzip / mod_deflate


As files becomes bigger and bigger, and the number of files is growing fast, we support the
gzipping of all interface files. In stead of doing this per file individually, we applied gzipping
to all interface files automatically (mod_deflate). To benefit from it, you have to add one
parameter to your calls.

About mod_deflate:
mod_deflate transports our interface files as compressed gzip data, but will show it
transparantly in its original format in modern browsers.
To benefit in your server scripts from gzip, you must use in any HTTP request this additional
parameter:

Accept-Encoding: gzip

It will enforce gzipping!

Example:
GET /export/level4/INT/10.xml HTTP/1.1
Host: prf.icecat.biz
Accept-Encoding: gzip
User-Agent: Firefox/1.0

2.5 Use of HTTP like FTP, and an example C# script to


download files
We often get questions like can we use FTP in stead. Actually, this is really not necessary as
http has very similar capabilities to FTP. One can use the following format:
http://username:password@Sitename

Here is example code in C# to download files (it can be used also in ASP.NET code). It is
tested and works ok:

public static Byte[] DownloadICEcatFile()

string strDownloadURL = "http://data.icecat.biz/export/freexml.int/INT/480237.xml";

string strUser = "Your Login to ICEcat Repository";


string strPWD = "Your Password to ICEcat Repository";

// Creating an instance of a WebClient

WebClient req = new WebClient();

// Creating an instance of a credential cache,


// and passing the username and password to it

CredentialCache cache = new CredentialCache();


cache.Add(new Uri(strDownloadURL), "Basic", new NetworkCredential(strUser, strPWD));
req.Credentials = cache;

Byte[] fileData = req.DownloadData(strDownloadURL);


return fileData;

In Classic ASP, MSXML2.ServerXMLhttp can be used

Some details are present here: http://www.thescripts.com/forum/thread165261.html


3. Index files *.index.xml

3.1 Purpose
The purpose of the index files is to find the right ICEcat number and thus product xml files
for a given product. The “key” is always Brand + Manufacturer Part Number.

New: We add also EAN / UPC codes as unique identifiers. Plus an indicator if a product is on
the market still or obsolete.

There are two types of index files in our XML-OCI:


• an index file with references to all product data-sheets in ICEcat or Open ICEcat
(*/files.index.xml)
• a smaller index file with only references to the new or changed product data-sheets
of the respective day (*/daily.index.xml)

The complete Full ICEcat index file is located at


http://data.icecat.biz/export/level4/INT/files.index.xml

or per language code: http://data.icecat.biz/export/level4/[code]/files.index.xml ,


Example: http://data.icecat.biz/export/level4/EN/files.index.xml
where [code] stands e.g. for NL, EN, FR, GE, IT, SP, DK, RU, ES, SE, ...

Similarly the index file with changed or new product references is found at
http://data.icecat.biz/export/level4/INT/daily.index.xml
or per language code: http://data.icecat.biz/export/level4/[code]/daily.index.xml ,
where [code] stands e.g. for NL, EN, FR, GE, IT, SP, DK, RU, ES, SE, ...

or in case of Open ICEcat the complete index file can be found here:
http://data.icecat.biz/export/freexml/files.index.xml
or http://data.icecat.biz/export/freexml.int/[code]/files.index.xml, where [code]
stands e.g. for NL, EN, FR, GE, IT, SP, DK, RU, ES, SE, ...

Similarly the index file with changed or new product references is found at
http://data.icecat.biz/export/freexml/daily.index.xml
or per language code: http://data.icecat.biz/freexml.int/[code]/daily.index.xml ,
where [code] stands e.g. for NL, EN, FR, GE, IT, SP, DK, RU, ES, SE, ...

It includes the index information for each product and gives the path to the xml product file.
Below is an example of a file tag in the index file:

<file path="export/level4/INT/344.xml" Product_ID="344" Updated="20080713132122"


Quality="ICECAT" Supplier_id="29" Prod_ID="WD400BB" Catid="219" On_Market="1">
<M_Prod_ID>WD400BB?1PK</M_Prod_ID>
<EAN_UPCS>
<EAN_UPC Value="0718037719696"/>
<EAN_UPC Value="4005922164744"/>
<EAN_UPC Value="603510"/>
</EAN_UPCS>
</file>

The new tag On_Market indicates that a product is still on the market (On_Market=“1”) or
not seen on the market anymore (On_Market=“0”). Per product also the EAN or UPC codes
that are used for logistical purposes are given. It is possible that there are multiple EANs or
UPCs, because depending on packaging or importers different codes are given. Further, the
part number variants that are used in the market are given in a sub list (M_Prod_ID).

files.index.xml and daily.index.xml are refreshed every day by us. You can use
daily.index.xml to update only the data in your local database that has changed or is new in
the ICEcat database. Files.index.xml, you can use the first time for a full import of needed
product information, and for the regular analysis of coverage of your product database.

TIP 1: download ONLY the xml files that you actually need for your shop or application by
using the daily export from your ERP or shop (or actually the daily imports from your
distributor/suppliers) as a filter. It is useless to import all the EMEA/Worldwide data files, if
you only operate in one geographic area or have an assortmet limited to a certain category.

TIP 2: check the timestamps to only download files that have changed or check only for
new files, to improve update performance cycles.

3.2 *.index.xml DTD


<!ELEMENT files (file)+>
<!ELEMENT file (#PCDATA)>
<!ATTLIST files
Generated CDATA #REQUIRED>
<!ATTLIST file
path CDATA #REQUIRED
Product_id CDATA #REQUIRED
Updated CDATA #REQUIRED
Quality CDATA #REQUIRED
Supplier_id CDATA #REQUIRED
Prod_ID CDATA #REQUIRED
Catid CDATA #REQUIRED>

Each product has its own data file in xml format. Its location is defined by the attribute
“path” in the *.index.xml. The file content includes all the available product information for
the respective product.

The "Prod_ID" attribute is a manufacturer’s unique identifier for a product, often called
Manufacturer Part Number (code de fabricant, Produkt-Kode, artikelnummer, etc). In
combination with the "supplier_id" it is the unique key to select a product’s XML file via
ICEcat’s internal identifier ("Product_id").

Catid is ICEcat’s internal category identifier. Catid=”151” referes to Notebooks. For every
category there is a second, external, category identifier based on UNSPSC. In the reference
files or the product xml the meaning of categories can be found.

“Quality” attribute values

Value Explanation
SUPPLIER The content is received from a supplier CMS, but not standardized by an
ICEcat editor. The language-specific directories are likely to contain the full
(unstandardized) data-sheet.
ICECAT The content is entered or standardized by ICECAT editors. The standardized
data can be found in the INT directory and the language-specific directories.
NOEDITOR The content is received from a merchant (in most cases one of the 100s of
distributors we are daily “polling”) and may be parsed. Editors haven’t
described this product yet. The NOEDITOR data is not exported in XML to 3rd
parties.
4. Additional data

4.1 Manufacturer names mapping data


To help you with matching distributor data to the ICEcat rich content, we are publishing the
mappings of used variants of manufacturer names to the ICEcat Suplier_ID.

You can find this file in your repository, named:

supplier_mapping.xml

Within this file you’ll find the match between different manufacturer names variations and
the original manufacturer name.

The format is self explanatory. The DTD for the message format is is available at:
http://data.icecat.biz/dtd/ICECAT-supplier_mapping.dtd

4.2 Manufacturer part number mappings


Different distributors often produce different manufacturer part numbers (MPN) for the
same product.

To help you correct the MPNs from different distributors and to help you to get the best
coverage, we are publishing the available MPN mappings to the official MPN.

In every repository directory, the file with product mappings is published in the index files
(files.index.xml etc).

OBSOLETE METHOD product_mapping.xml:


INT/product_mapping.xml
EN/product_mapping.xml
Etc..

We advise not to use product_mapping.xml files anymore as it has an obsolete structure,


and all product mapping data is already integrated in the XML index files.

4.3 References
In product XML feeds, you will find a lot of structures, which are included as references in
the product data files, e.g. categories, features, measures (units) etc.

The reference files can be found in the /refs/ subdirectory. For example, for Full ICEcat, in
http://data.icecat.biz/export/level4/refs/

The included files (entities) are:


CategoriesList.xml.gz
CategoryFeaturesList.xml.gz
FeaturesList.xml.gz
LanguageList.xml.gz
MeasuresList.xml.gz
SupplierProductFamiliesListRequest.xml.gz
SuppliersList.xml.gz

All files are present in Gzipped format. Typical use of the files is in combination with data
from the INT (international) directory, not the localized directories as there the language-
specific values are already automatically applied to the product XML files.

Note: the single file with all references, refs.xml, is actually replaced by the above-
mentioned firectory, as the refs.xml file became too big to handle easily.

Note about sid & tid:


sid & tid with langid are unique identifiers, which refer to categories, features, measures
etc. name (in the multilingual vocabulary table) & descriptions (in the multilingual tex table)
for a given language.

sid: link to item NAME,


tid: link to item DESCRIPTION.
sid + langid are together the key of the vocabulary table.
tid + langid are together the key of the tex table.

Example:
Category "software" has sid=4 & tid=1. To get the German software description use tid=1 &
langid=4 to access the tex table with multilingual descriptions. For the French software
name use sid=4 & langid=3.

Below a part of the data model is visualized, showing the relationshops between categories
and the vocabulary and the descriptions (tex entity).
4.3.1 Measures list (units)

Example:

<MeasuresList>
<Measure ID="20">
<Sign>GB</Sign>
<Names>
<Name ID="1297" langid="1">Gigabyte</Name>
<Name ID="1298" langid="2">Gigabyte</Name>
</Names>
<Descriptions>
<Description ID="60" langid="2">Opslag- of geheugencapaciteit in GB (miljard
bytes; 1 byte = 1 character)</Description>
<Description ID="59" langid="1">Storage or memory capacity in GB (billion bytes; 1
byte = 1 character)</Description>
</Descriptions>
</Measure>
…………
</MeasuresList>

4.3.2 Features list

Example:

<FeaturesList>
<Feature ID="10">
<Measure ID="21">
<Sign>x</Sign>
</Measure>
<Names>
<Name ID="1307" langid="1">CD-ROM player</Name>
<Name ID="1308" langid="2">CD-ROM-speler</Name>
</Names>
<Descriptions>
<Description ID="70" langid="2">Indien aanwezig, snelheid van de CD-ROM-
speler</Description>
<Description ID="69" langid="1">If present, speed of the CD-ROM
player</Description>
</Descriptions>
</Feature>
…………
</FeaturesList>

4.3.3 Categories list

This chunk provides the information on categories which are used in the ICEcat environment
and for product categorization. Each category may be either searchable or not. Searchable
categories may be used for product lookup by product feature values, as ICEcat editors are
systematically maintain data integrity to allow smart searches.

Explanation to values of the “Searchable” attribute:

Value Explanation
1 This category may be used for product lookup in product list lookup request
0 This category is not made searchable (in our own product finder tools)
"Score" attribute in the response reflects the category usage statistic. The higher number
means the higher usage level

Example:

<CategoriesList>
<Category ID="910" UNCATID="25173107"
ThumbPic="http://data.icecat.biz/thumbs/CAT910.jpg" Searchable="1"
Score="0" LowPic="http://data.icecat.biz/img/low_pic/910-2693.jpg">
<ParentCategory ID="138">
<Names>
<Name ID="278" langid="2">telecommunicatie-apparatuur</Name>
</Names>
</ParentCategory>
<Keywords ID="1288" Value="GPS, navigatiesystemen, global, positioning,
systems" langid="2"/>
<Name ID="5418" Value="GPS navigatiesystemen" langid="2"/>
<Description ID="1946" Value="global positioning systems" langid="2"/>
</Category>
</CategoriesList>

4.3.4 Suppliers list request (manufacturers)

Example:

<SuppliersList>
<Supplier Name="Hitachi" ID="169"/>
<Supplier Name="Lexmark" ID="20"/>
<Supplier Name="Xerox" ID="30"/>
…………
</SuppliersList>

4.3.5 Category features list request

This chunk provides information about features which are assigned to a every certain
category and which are used for describing products in the category.

Each searchable feature will have LimitDirection attribute defined, which will give an advice
for finding a “better” feature value, either ≤ or ≥. E.g. for feature “Hard disk capacity” it
would be ≥.relation, and for the feature “Write seek” it would be ≤ relation.

“LimitDirection ” attribute values explanation

Value Explanation
0 The relation is undefined
1 The relation is ≤
2 The relation is ≥.
3 The relation is =

“Class” attribute values explanation

Value Explanation
0 Key feature
1 Extra feature – tech details
Possible feature values may be restricted to a limited set of value. In that case possible
values for combination Category-Feature are listed into container RestritedValue.

Example:

<CategoryFeaturesList Code="1">
<Category UNCATID="43171801" ID="151" LowPic="">
<Name ID="303" Value="Notebooks" langid="1"/>
<Name ID="304" Value="Notebooks" langid="2"/>
<Feature LimitDirection="0" Searchable="0" CategoryFeatureGroup_ID="36"
ID="990" No="93" Class="1">
<Name ID="3521" Value="Interface type" langid="1"/>
<Name ID="3522" Value="Interfacetype" langid="2"/>
<Measure Sign="" ID="29"/>
</Feature>
<Feature LimitDirection="0" Searchable="0" CategoryFeatureGroup_ID="36"
ID="991" No="94" Class="1">
<Name ID="3523" Value="Number of interfaces type" langid="1"/>
<Name ID="3524" Value="Aantal interface-types" langid="2"/>
<Measure Sign="" ID="29"/>
</Feature>
<Feature LimitDirection="2" Searchable="1" CategoryFeatureGroup_ID="107"
ID="430" No="10000015" Class="1">
<Name ID="2227" Value="Hard disk rotational speed" langid="1"/>
<Name ID="2228" Value="Harde schijf rotatiesnelheid" langid="2"/>
<Measure Sign="RPM" ID="28"/>
<RestrictedValue>1000</RestrictedValue>
<RestrictedValue>4200</RestrictedValue>
<RestrictedValue>5400</RestrictedValue>
<RestrictedValue>7200</RestrictedValue>
<RestrictedValue>10000</RestrictedValue>
<RestrictedValue>15000</RestrictedValue>
</Feature>
……………………………
<CategoryFeatureGroup No="0" ID="109">
<FeatureGroup ID="27">
<Name Value="Energy management" ID="5049" langid="1"/>
<Name Value="Energiebeheer" ID="5050" langid="2"/>
</FeatureGroup>
</CategoryFeatureGroup>
<CategoryFeatureGroup No="2" ID="762">
<FeatureGroup ID="31">
<Name Value="Keyboard" ID="5075" langid="1"/>
<Name Value="Toetsenbord" ID="5076" langid="2"/>
</FeatureGroup>
</CategoryFeatureGroup>
…………………………
</Category>
</CategoryFeaturesList>

4.3.6 Supplier product families list request

This chunk provides the list of supplier product families. Each product family may have
information about it’s Name, Description in different languages, and category.

<SupplierProductFamiliesList>
<ProductFamily Category_ID="132" ID="16">
<Supplier ID="6" Name="3com"/>
<Description ID="6811" Value="" langid="1"/>
<Description ID="6813" Value="" langid="2"/>
<Name ID="9524" Value="test2 e" langid="1"/>
<Name ID="9526" Value="test3 d" langid="2"/>
<ParentProductFamily ID="11"/>
</ProductFamily>
<ProductFamily Category_ID="132" ID="15">
<Supplier ID="6" Name="3com"/>
<Description ID="6808" Value="" langid="1"/>
<Description ID="6810" Value="" langid="2"/>
<Name ID="9521" Value="eee" langid="1"/>
<Name ID="9523" Value="ddd" langid="2"/>
<ParentProductFamily ID="11"/>
</ProductFamily>
<ProductFamily ID="14" ThumbPic="http://bla.bla/img/bla.gif" Category_ID="132"
LowPic="http://bla.bla/img/bla.gif">
<Supplier ID="6" Name="3com"/>
<Name ID="9518" Value="test e" langid="1"/>
<Name ID="9520" Value="test d" langid="2"/>
<Description ID="6805" Value="descr e" langid="1"/>
<Description ID="6807" Value="descr n" langid="2"/>
<ParentProductFamily ID="11"/>
</ProductFamily>
</SupplierProductFamiliesList>

4.3.7 Languages list

Example:
<Language ID="6" Code="spanish" ShortCode="SP" Sid="4797">
<Name ID="14094" Value="Spanish" langid="1"/>
<Name ID="14095" Value="Spanish" langid="2"/>
<Name ID="14096" Value="Spanish" langid="3"/>
<Name ID="18228" Value="Spanish" langid="4"/>
<Name ID="22360" Value="Spanish" langid="5"/>
<Name ID="26492" Value="Spanish" langid="6"/>
</Language>

4.3.8 Popularity of products

All ICEcat product requests (real-time requests by end-users and xml requests) are logged.
This data gives a product popularity indication which can be used to sort products and to
analyze trends as input for marketing decisions. This popularity data is daily published on:
data.icecat.biz/export/level4/data_prod_stat.xml

5. Products XML data file

5.1 Repository file DTD


The XML repository files comply to the standard ICEcat XML response DTD, which is located
at

http://data.icecat.biz/dtd/ICECAT-interface_response.dtd
Please, note that the tag “No=”(example: No="100090") is a Priority indicator. The higher
the number the more important the feature or feature group is considered to be for buyer
orientation. We advise you to sort features and feature groups by priority, to get a more
customer friendly user presentation.

Product code is a deprecated field, eariler it used as product response status. Now, product
code always equals 1.

5.2 Example product XML


Some notes: the Reverse attribute for product relations is obsolete and can be ignored.

Here is an example of an ICEcat repository file

<?xml version="1.0" ?>


<!DOCTYPE ICECAT-interface (View Source for full doctype...)>
- <ICECAT-interface>
- <Product ID="269830" Prod_id="LKN:NDL-152102-002"
ThumbPic="http://data.icecat.biz/thumbs/269830.jpg" Code="1" Quality="ICECAT"
HighPic="http://data.icecat.biz/img/high_pic/269830-843.jpg" Name="AMILO
D-7850 P4-3.2G HT 538"
LowPic="http://data.icecat.biz/img/norm/low/269830.jpg">
- <ProductFamily ID="90">
<Name ID="10161" Value="AMILO D" langid="1" />
<Name ID="10162" Value="AMILO D" langid="3" />
<Name ID="10163" Value="AMILO D" langid="2" />
</ProductFamily>
<ProductRelated />
<ProductBundled />
- <CategoryFeatureGroup ID="269" No="0">
- <FeatureGroup ID="0">
<Name ID="5073" Value="Technical details" langid="1" />
<Name ID="5074" Value="Technische details" langid="2" />
<Name ID="8345" Value="Technical details" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="35" No="10">
- <FeatureGroup ID="1">
<Name ID="4859" Value="Processor" langid="1" />
<Name ID="4860" Value="Processor" langid="2" />
<Name ID="7174" Value="Processor" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="107" No="9">
- <FeatureGroup ID="2">
<Name ID="4861" Value="Disk drive" langid="1" />
<Name ID="4862" Value="Harde schijf" langid="2" />
<Name ID="7175" Value="Disk drive" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="106" No="8">
- <FeatureGroup ID="3">
<Name ID="4863" Value="Memory" langid="1" />
<Name ID="4864" Value="Geheugen" langid="2" />
<Name ID="7176" Value="Memory" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="32" No="6">
- <FeatureGroup ID="4">
<Name ID="4865" Value="Optical drive" langid="1" />
<Name ID="4866" Value="Optische drive" langid="2" />
<Name ID="7177" Value="Optical drive" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="33" No="7">
- <FeatureGroup ID="5">
<Name ID="4867" Value="Display" langid="1" />
<Name ID="4868" Value="Beeldscherm" langid="2" />
<Name ID="7178" Value="Display" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="1183" No="0">
- <FeatureGroup ID="7">
<Name ID="4884" Value="Platform" langid="2" />
<Name ID="4883" Value="Platform" langid="1" />
<Name ID="7173" Value="Platform" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="34" No="4">
- <FeatureGroup ID="8">
<Name ID="4886" Value="Minimale systeemeisen" langid="2" />
<Name ID="4885" Value="System requirements" langid="1" />
<Name ID="7172" Value="System requirements" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="110" No="3">
- <FeatureGroup ID="9">
<Name ID="4978" Value="Audio" langid="2" />
<Name ID="4977" Value="Audio" langid="1" />
<Name ID="6585" Value="Audio" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
<CategoryFeatureGroup ID="31" FeatureGroup="" No="0" />
- <CategoryFeatureGroup ID="36" No="5">
- <FeatureGroup ID="12">
<Name ID="4996" Value="Verbindingsmogelijkheden" langid="2" />
<Name ID="4995" Value="Connectivity" langid="1" />
<Name ID="8182" Value="Connectivity" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="108" No="1">
- <FeatureGroup ID="14">
<Name ID="5023" Value="Weight & dimensions" langid="1" />
<Name ID="5024" Value="Gewicht en omvang" langid="2" />
<Name ID="8323" Value="Weight & dimensions" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="109" No="0">
- <FeatureGroup ID="27">
<Name ID="5049" Value="Energy management" langid="1" />
<Name ID="5050" Value="Energiebeheer" langid="2" />
<Name ID="8335" Value="Energy management" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="1403" No="0">
- <FeatureGroup ID="28">
<Name ID="5068" Value="Operationele condities" langid="2" />
<Name ID="5067" Value="Operating conditions" langid="1" />
<Name ID="8342" Value="Conditions operationelles" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="762" No="2">
- <FeatureGroup ID="31">
<Name ID="5075" Value="Keyboard" langid="1" />
<Name ID="5076" Value="Toetsenbord" langid="2" />
<Name ID="8280" Value="Keyboard" langid="3" />
</FeatureGroup>
</CategoryFeatureGroup>
- <CategoryFeatureGroup ID="1523" No="0">
- <FeatureGroup ID="51">
<Name ID="11285" Value="Videogeheugen" langid="2" />
<Name ID="11284" Value="Video memory" langid="3" />
<Name ID="11283" Value="Video memory" langid="1" />
</FeatureGroup>
</CategoryFeatureGroup>
<ProductDescription ID="304191" URL="http://www.fujitsu-siemens.com/products/
mobile/notebooks/amilo_d.html" ShortDesc="AMILO D-7850 P4-3.2G HT 538 80GB
1024MB15 TFT MN70405 NL (P4)" langid="1" LongDesc="Neither video freaks nor
digital photographers need a desktop any longer. With this power-notebook in a
backpack, advanced graphic features are available everywhere, on a flight, in a
train or on the beach. The special ATI MOBILITY™ RADEON™ 9000 graphic card
guarantees excellent 3D performance as well as smooth DVD-playback. The Intel®
Pentium® 4 processor provides all the power you \nneed for your high-end
applications. You can easily attach other devices through an astonishing range of
multimedia interfaces including FireWire, S-Video and 5 USB 2.0 ports. The AMILO
D, the truly portable powerhouse and mobile alternative to your desktop PC."
WarrantyInfo="" PDFURL="http://data.icecat.biz/pdf/304191-8497.pdf" />
- <ProductFeature ID="10476975" Value="Microsoft® Windows® XP."
CategoryFeature_ID="43" No="105999" CategoryFeatureGroup_ID="1183">
- <Feature ID="73">
<Measure ID="29" Sign="" />
<Name ID="1483" Value="Operating system" langid="1" />
<Name ID="1484" Value="Besturingssysteem" langid="2" />
<Name ID="6752" Value="Operating system" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476972" Value="2 built-in speaker, built-in microphone,
microphone in, headphone out, 1 x volume regulator" CategoryFeature_ID="7181"
No="100000" CategoryFeatureGroup_ID="269">
- <Feature ID="1693">
<Measure ID="29" Sign="" />
<Name ID="5323" Value="Internal audio system" langid="1" />
<Name ID="5324" Value="Intern audiosysteem" langid="2" />
<Name ID="8458" Value="Internal audio system" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476973" Value="2" CategoryFeature_ID="11249"
No="100000" CategoryFeatureGroup_ID="269">
- <Feature ID="1721">
<Measure ID="46" Sign="hrs" />
<Name ID="5385" Value="Battery Life" langid="1" />
<Name ID="5386" Value="Batterij Levensduur" langid="2" />
<Name ID="8488" Value="Battery Life" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476974" Value="5, 2.4" CategoryFeature_ID="11669"
No="100000" CategoryFeatureGroup_ID="269">
- <Feature ID="2191">
<Measure ID="21" Sign="x" />
<Name ID="11238" Value="Double Layer DVD write speed" langid="1" />
<Name ID="11239" Value="Double Layer DVD write speed" langid="3" />
<Name ID="11240" Value="Double Layer DVD write speed" langid="2" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10477299" Value="100 - 240 V" CategoryFeature_ID="2648"
No="33" CategoryFeatureGroup_ID="109">
- <Feature ID="902">
<Measure ID="29" Sign="" />
<Name ID="3345" Value="AC adapter input voltage" langid="1" />
<Name ID="3346" Value="AC adapter input voltage" langid="2" />
<Name ID="7665" Value="AC adapter input voltage" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10477298" Value="50-60" CategoryFeature_ID="2649" No="34"
CategoryFeatureGroup_ID="109">
- <Feature ID="903">
<Measure ID="36" Sign="Hz" />
<Name ID="3347" Value="AC adapter frequency" langid="1" />
<Name ID="3348" Value="AC adapter frequentie" langid="2" />
<Name ID="7666" Value="AC adapter frequency" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10477297" Value="20" CategoryFeature_ID="2650" No="35"
CategoryFeatureGroup_ID="109">
- <Feature ID="904">
<Measure ID="42" Sign="V" />
<Name ID="3349" Value="AC adapter output voltage" langid="1" />
<Name ID="3350" Value="AC adapter output voltage" langid="2" />
<Name ID="7667" Value="AC adapter output voltage" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476979" Value="4000" CategoryFeature_ID="2655"
No="100040" CategoryFeatureGroup_ID="109">
- <Feature ID="909">
<Measure ID="51" Sign="mAh" />
<Name ID="3359" Value="Battery performance" langid="1" />
<Name ID="3360" Value="Geleverde stroom" langid="2" />
<Name ID="7672" Value="Battery performance" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476978" Value="Lithium-Ion" CategoryFeature_ID="1187"
No="101004" CategoryFeatureGroup_ID="109">
- <Feature ID="434">
<Measure ID="29" Sign="" />
<Name ID="2235" Value="Battery technlogy" langid="1" />
<Name ID="2236" Value="Batterij, technologie" langid="2" />
<Name ID="7126" Value="Battery technlogy" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476976" Value="Microsoft Works Suite 2004 including
Word 2002, Works 7.0,\nMicrosoft Encarta® 2003, Microsoft Picture It!® 7.0,
Microsoft\nAutoRoute 2002/2003*, Microsoft Money 2002\nWord /
Works\nAdobe Photoshop Elements 2.0\nAdobe Photoshop Album 1.0\nWin DVD
5.0\nNero 6.0" CategoryFeature_ID="906" No="100002"
CategoryFeatureGroup_ID="1183">
- <Feature ID="251">
<Measure ID="29" Sign="" />
<Name ID="1869" Value="Bundled software" langid="1" />
<Name ID="1870" Value="Gebundelde software" langid="2" />
<Name ID="6943" Value="Bundled software" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10477147" Value="Internet launching button, E-mail"
CategoryFeature_ID="2716" No="101" CategoryFeatureGroup_ID="762">
- <Feature ID="1003">
<Measure ID="29" Sign="" />
<Name ID="3547" Value="Keyboard easy keys" langid="1" />
<Name ID="3548" Value="Toetsenbord, easy keys" langid="2" />
<Name ID="7761" Value="Keyboard easy keys" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10477274" Value="10 - 90" CategoryFeature_ID="2021"
No="19035" CategoryFeatureGroup_ID="1403">
- <Feature ID="703">
<Measure ID="64" Sign="%" />
<Name ID="2937" Value="Operating Humidity Range" langid="1" />
<Name ID="2938" Value="Relatieve luchtvochtigheid, in bedrijf" langid="2" />
<Name ID="7463" Value="Operating Humidity Range" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10477273" Value="5 - 35" CategoryFeature_ID="2023"
No="19037" CategoryFeatureGroup_ID="1403">
- <Feature ID="511">
<Measure ID="65" Sign="&deg;C" />
<Name ID="2553" Value="Maximum Operating Temperature Range" langid="1" />
<Name ID="2554" Value="Maximum temperatuur in bedrijf" langid="2" />
<Name ID="7273" Value="Maximum Operating Temperature Range" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10477209" Value="Touchpad with two mouse buttons and
page-up / page down" CategoryFeature_ID="2752" No="137"
CategoryFeatureGroup_ID="269">
- <Feature ID="1012">
<Measure ID="29" Sign="" />
<Name ID="3565" Value="Pointing device description" langid="1" />
<Name ID="3566" Value="Aanwijsapparaatomschrijving" langid="2" />
<Name ID="7770" Value="Pointing device description" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10477199" Value="User and supervisor
password\nKensington Lock support" CategoryFeature_ID="903" No="153"
CategoryFeatureGroup_ID="269">
- <Feature ID="248">
<Measure ID="29" Sign="" />
<Name ID="1863" Value="Security features" langid="1" />
<Name ID="1864" Value="Beveiligingseigenschappen" langid="2" />
<Name ID="6940" Value="Security features" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10477198" Value="CE Marking, Energy Star"
CategoryFeature_ID="904" No="154" CategoryFeatureGroup_ID="269">
- <Feature ID="249">
<Measure ID="29" Sign="" />
<Name ID="1865" Value="Certification" langid="1" />
<Name ID="1866" Value="Certificering" langid="2" />
<Name ID="6941" Value="Certification" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476939" Value="8" CategoryFeature_ID="1202" No="105300"
CategoryFeatureGroup_ID="32">
- <Feature ID="51">
<Measure ID="21" Sign="x" />
<Name ID="1439" Value="DVD read speed" langid="1" />
<Name ID="1440" Value="DVD leessnelheid" langid="2" />
<Name ID="6732" Value="DVD read speed" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476938" Value="20, 10" CategoryFeature_ID="5265"
No="105367" CategoryFeatureGroup_ID="32">
- <Feature ID="45">
<Measure ID="21" Sign="x" />
<Name ID="1427" Value="CD rewrite speed" langid="1" />
<Name ID="1428" Value="CD-herschrijfsnelheid" langid="2" />
<Name ID="6726" Value="CD rewrite speed" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476937" Value="24" CategoryFeature_ID="1215"
No="105460" CategoryFeatureGroup_ID="32">
- <Feature ID="16">
<Measure ID="21" Sign="x" />
<Name ID="1327" Value="CD read speed" langid="1" />
<Name ID="1328" Value="CD-leessnelheid" langid="2" />
<Name ID="6681" Value="CD read speed" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476936" Value="24" CategoryFeature_ID="5985"
No="105468" CategoryFeatureGroup_ID="32">
- <Feature ID="42">
<Measure ID="21" Sign="x" />
<Name ID="1421" Value="CD write speed" langid="1" />
<Name ID="1422" Value="CD-schrijfsnelheid" langid="2" />
<Name ID="6724" Value="CD write speed" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476935" Value="DVD+R/ +RW, DVD Dual Double Layer"
CategoryFeature_ID="2828" No="202130" CategoryFeatureGroup_ID="32">
- <Feature ID="1120">
<Measure ID="29" Sign="" />
<Name ID="3781" Value="Optical drive type" langid="1" />
<Name ID="3782" Value="Soort optische drive" langid="2" />
<Name ID="7875" Value="Type de lecteur optique" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476934" Value="1024x768" CategoryFeature_ID="9350"
No="100000" CategoryFeatureGroup_ID="33">
- <Feature ID="1585">
<Measure ID="39" Sign="pixels" />
<Name ID="4927" Value="Display resolution" langid="1" />
<Name ID="4928" Value="Resolutie" langid="2" />
<Name ID="6605" Value="Rйsolution de l'affichage" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476928" Value="IDE" CategoryFeature_ID="2705"
No="100090" CategoryFeatureGroup_ID="107">
- <Feature ID="982">
<Measure ID="29" Sign="" />
<Name ID="3505" Value="Hard disk interface" langid="1" />
<Name ID="3506" Value="Harde schijf-interface" langid="2" />
<Name ID="7742" Value="Hard disk interface" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476926" Value="SIS 648 + SIS 963L"
CategoryFeature_ID="5627" No="100000" CategoryFeatureGroup_ID="35">
- <Feature ID="753">
<Measure ID="29" Sign="" />
<Name ID="3037" Value="Chipset" langid="1" />
<Name ID="3038" Value="Chipset" langid="2" />
<Name ID="7513" Value="Chipset" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476924" Value="3500" CategoryFeature_ID="4922"
No="10100000" CategoryFeatureGroup_ID="108">
- <Feature ID="94">
<Measure ID="38" Sign="g" />
<Name ID="1525" Value="Weight" langid="1" />
<Name ID="1526" Value="Gewicht" langid="2" />
<Name ID="6771" Value="Weight" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476923" Value="15" CategoryFeature_ID="2787"
No="10100172" CategoryFeatureGroup_ID="33">
- <Feature ID="944">
<Measure ID="16" Sign="&quot;" />
<Name ID="3429" Value="Display diagonal" langid="1" />
<Name ID="3430" Value="Beeldscherm diagonaal" langid="2" />
<Name ID="7705" Value="Display diagonal" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476922" Value="1024" CategoryFeature_ID="48"
No="10105479" CategoryFeatureGroup_ID="106">
- <Feature ID="6">
<Measure ID="19" Sign="MB" />
<Name ID="1296" Value="Intern geheugen" langid="2" />
<Name ID="1295" Value="Internal memory" langid="1" />
<Name ID="6661" Value="Internal memory" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476921" Value="3200" CategoryFeature_ID="50"
No="10105478" CategoryFeatureGroup_ID="35">
- <Feature ID="5">
<Measure ID="18" Sign="Mhz" />
<Name ID="1292" Value="Processor-kloksnelheid" langid="2" />
<Name ID="1291" Value="Processor clock speed" langid="1" />
<Name ID="6663" Value="Processor clock speed" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476920" Value="Intel Pentium 4"
CategoryFeature_ID="11560" No="10106000" CategoryFeatureGroup_ID="35">
- <Feature ID="2196">
<Measure ID="29" Sign="" />
<Name ID="11271" Value="Processor family" langid="1" />
<Name ID="11272" Value="Soort processor" langid="2" />
<Name ID="11273" Value="Processor family" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476956" Value="64" CategoryFeature_ID="2010"
No="100173" CategoryFeatureGroup_ID="1523">
- <Feature ID="574">
<Measure ID="19" Sign="MB" />
<Name ID="2679" Value="Graphic adapter memory" langid="1" />
<Name ID="2680" Value="Geheugen video-adapter" langid="2" />
<Name ID="7336" Value="Graphic adapter memory" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476955" Value="ATI MOBILITY RADEON ™ 9200"
CategoryFeature_ID="2605" No="141164" CategoryFeatureGroup_ID="1523">
- <Feature ID="614">
<Measure ID="29" Sign="" />
<Name ID="2759" Value="Graphic adapter" langid="1" />
<Name ID="2760" Value="Grafische adapter" langid="2" />
<Name ID="7375" Value="Graphic adapter" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476954" Value="345 x 282 x 41" CategoryFeature_ID="38"
No="100005" CategoryFeatureGroup_ID="108">
- <Feature ID="49">
<Measure ID="24" Sign="mm" />
<Name ID="1435" Value="Dimensions W x D x H" langid="1" />
<Name ID="1436" Value="Afmetingen B x D x H" langid="2" />
<Name ID="6730" Value="Dimensions L x P x H" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476952" Value="VT1612" CategoryFeature_ID="1195"
No="100012" CategoryFeatureGroup_ID="110">
- <Feature ID="442">
<Measure ID="29" Sign="" />
<Name ID="2251" Value="Sound system" langid="1" />
<Name ID="2252" Value="Audiosysteem" langid="2" />
<Name ID="7134" Value="Sound system" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476950" Value="56" CategoryFeature_ID="3683"
No="100000" CategoryFeatureGroup_ID="36">
- <Feature ID="447">
<Measure ID="22" Sign="Kbps" />
<Name ID="2261" Value="Modem speed" langid="1" />
<Name ID="2262" Value="Modemsnelheid" langid="2" />
<Name ID="7138" Value="Modem speed" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476949" Value="10/100 Mbps LAN"
CategoryFeature_ID="4909" No="100000" CategoryFeatureGroup_ID="36">
- <Feature ID="72">
<Measure ID="29" Sign="" />
<Name ID="1481" Value="Networking" langid="1" />
<Name ID="1482" Value="Netwerk" langid="2" />
<Name ID="6751" Value="Networking" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476947" Value="1 x CRT; \n1 x type I/II PC Card slot (32
bit CardBus support);\n1 x microphone in;\n1 x headphone out."
CategoryFeature_ID="2013" No="100004" CategoryFeatureGroup_ID="36">
- <Feature ID="470">
<Measure ID="29" Sign="" />
<Name ID="2471" Value="I/O Ports" langid="1" />
<Name ID="2472" Value="Aansluitingen" langid="2" />
<Name ID="7232" Value="I/O Ports" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476944" Value="V.90 international modem"
CategoryFeature_ID="42" No="105486" CategoryFeatureGroup_ID="36">
- <Feature ID="12">
<Measure ID="29" Sign="" />
<Name ID="1313" Value="Internal modem" langid="1" />
<Name ID="1314" Value="Intern modem" langid="2" />
<Name ID="6675" Value="Internal modem" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476941" Value="5, 4" CategoryFeature_ID="6782"
No="102342" CategoryFeatureGroup_ID="32">
- <Feature ID="1525">
<Measure ID="21" Sign="x" />
<Name ID="4770" Value="DVD herschrijfsnelheid" langid="2" />
<Name ID="4769" Value="DVD rewrite speed" langid="1" />
<Name ID="8211" Value="DVD rewrite speed" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476940" Value="8" CategoryFeature_ID="7894" No="102388"
CategoryFeatureGroup_ID="32">
- <Feature ID="1524">
<Measure ID="21" Sign="x" />
<Name ID="4768" Value="DVD schrijfsnelheid" langid="2" />
<Name ID="4767" Value="DVD write speed" langid="1" />
<Name ID="8212" Value="DVD write speed" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476963" Value="533" CategoryFeature_ID="5459"
No="100000" CategoryFeatureGroup_ID="269">
- <Feature ID="802">
<Measure ID="18" Sign="Mhz" />
<Name ID="3135" Value="System Bus" langid="1" />
<Name ID="3136" Value="Systeembus" langid="2" />
<Name ID="7562" Value="Bus systиme" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10476961" Value="PC/2700 DDR333 (Desktop memory)"
CategoryFeature_ID="12191" No="100000" CategoryFeatureGroup_ID="106">
- <Feature ID="642">
<Measure ID="29" Sign="" />
<Name ID="2815" Value="Memory Type" langid="1" />
<Name ID="2816" Value="Type geheugen" langid="2" />
<Name ID="7402" Value="Mйmoire en standard" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10467331" Value="80" CategoryFeature_ID="47"
No="10105480" CategoryFeatureGroup_ID="107">
- <Feature ID="7">
<Measure ID="20" Sign="GB" />
<Name ID="1300" Value="Opslagcapaciteit" langid="2" />
<Name ID="1299" Value="Hard disk drive capacity" langid="1" />
<Name ID="6659" Value="Hard disk drive" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10467332" Value="Intel Pentium IV" CategoryFeature_ID="49"
No="106000" CategoryFeatureGroup_ID="35">
- <Feature ID="47">
<Measure ID="29" Sign="" />
<Name ID="1431" Value="Processor" langid="1" />
<Name ID="1432" Value="Processor" langid="2" />
<Name ID="6728" Value="Processor" langid="3" />
</Feature>
</ProductFeature>
- <ProductFeature ID="10467333" Value="TFT XGA" CategoryFeature_ID="51"
No="105980" CategoryFeatureGroup_ID="33">
- <Feature ID="83">
<Measure ID="29" Sign="" />
<Name ID="1503" Value="Display" langid="1" />
<Name ID="1504" Value="Beeldscherm" langid="2" />
<Name ID="6760" Value="Display" langid="3" />
</Feature>
</ProductFeature>
<Supplier ID="15" Name="Fujitsu-Siemens" />
- <Category ID="151">
<Name ID="303" Value="notebooks" langid="1" />
<Name ID="304" Value="notebooks" langid="2" />
<Name ID="6224" Value="notebooks" langid="3" />
</Category>
</Product>
</ICECAT-interface>

6. SQL set-up

6.1 Explanation of entities


Below on entity level a short description of the entities used in our data model.

Category = table that holds the category structure informations. category names are in
‘vocabulary’, referenced via ‘sid’ key

Category feature = link between feature and category

Category feature Group = a group that holds few category features, grouped

Category keywords = category keywords that can be used for a search

Feature = holds the information about the features available for product description

Feature group = a generic features groups available in system

Language

Measure = units, e.g. meter, megabyte etc

Product = main information about the product

Product bundled = in case of product is a distri bundle info about components is here

Product description = language specific description

Product family = product lines families per supplier

Product feature = product specs features are here. resolution of features/measures is via - >
category_feature->feature->measure

Product gallery = product gallery – some more product images

Product multimedia object = place for storing multimedia data, like swf, animated gifs, etc

Product related product corss-relations are stored here. type of link can be determenined by
categories. e.g. categories are the same = > link is “alternatives”. Categories are different => link
is “option”.

Sid index = table for holding the autoincrement index for vocabulary. needed only in case of
issuing new records for vocabulary

Supplier = manufacturers are stored in this table


Tex = vocabulary for a large data

Tid index = index of tex table

Vocabulary = table for storing misc language dependent data

6.2 MySQL Set-Up (monolingual catalogue)


-- MySQL dump 8.22
--
-- Host: localhost Database: gccdb
---------------------------------------------------------
-- Server version 4.1.11-standard

--
-- Table structure for table 'account'
--

--
-- Table structure for table 'category'
--

--
-- table that holds the category structure informations
-- category names are in ‘vocabulary’, referenced via ‘sid’ key
--

CREATE TABLE category (


catid int(13) NOT NULL auto_increment,
ucatid varchar(255) default NULL, # a unspsc category code
pcatid int(13) NOT NULL default '1',
sid int(13) NOT NULL default '0',
tid int(13) default NULL,
searchable int(3) NOT NULL default '0',
low_pic varchar(255) NOT NULL default '',
thumb_pic varchar(255) default '',
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
last_published int(14) default '0',
PRIMARY KEY (catid),
KEY pcatid (pcatid),
KEY sid (sid),
KEY catid (catid,sid),
KEY searchable_2 (searchable,catid)
);

--
-- Table structure for table 'category_feature'
-- link between feature and category

CREATE TABLE category_feature (


category_feature_id int(13) NOT NULL auto_increment,
feature_id int(13) NOT NULL default '0',
catid int(13) NOT NULL default '0',
`no` int(5) NOT NULL default '0',
searchable int(3) NOT NULL default '0',
category_feature_group_id int(13) NOT NULL default '0',
restricted_search_values text,
use_dropdown_input char(3) default '',
mandatory tinyint(2) default '0',
PRIMARY KEY (category_feature_id),
UNIQUE KEY catid (catid,feature_id),
KEY feature_id (feature_id)
);

--
-- Table structure for table 'category_feature_group'
-- a group that holds few category features, grouped

CREATE TABLE category_feature_group (


category_feature_group_id int(13) NOT NULL auto_increment,
catid int(13) NOT NULL default '0',
feature_group_id int(13) NOT NULL default '0',
`no` int(15) default '0',
PRIMARY KEY (category_feature_group_id),
UNIQUE KEY uni1 (catid,feature_group_id),
KEY catid (catid,feature_group_id)
);

--
-- Table structure for table 'category_keywords'
-- category keywords that can be used for a search

CREATE TABLE category_keywords (


category_id int(11) default NULL,
langid int(1) NOT NULL default '0',
keywords text,
id int(11) NOT NULL auto_increment,
PRIMARY KEY (id),
KEY category_id (category_id),
FULLTEXT KEY keywords (keywords)
);

--
-- Table structure for table 'feature'
-- holds the information about the features available for product description
--

CREATE TABLE feature (


feature_id int(13) NOT NULL auto_increment,
sid int(13) NOT NULL default '0',
tid int(13) NOT NULL default '0',
measure_id int(13) NOT NULL default '0',
`type` varchar(255) NOT NULL default '',
class int(3) NOT NULL default '0',
limit_direction int(3) NOT NULL default '0',
searchable int(3) NOT NULL default '0',
restricted_values text,
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
last_published int(14) default '0',
PRIMARY KEY (feature_id),
KEY tid (tid)
);

--
-- Table structure for table 'feature_group'
-- a generic features groups available in system

CREATE TABLE feature_group (


feature_group_id int(13) NOT NULL auto_increment,
sid int(13) NOT NULL default '0',
PRIMARY KEY (feature_group_id)
);

--
-- Table structure for table 'language'
--

CREATE TABLE language (


langid int(3) NOT NULL auto_increment,
sid int(13) NOT NULL default '0',
code varchar(20) NOT NULL default '',
short_code varchar(5) NOT NULL default '',
PRIMARY KEY (langid)
);

--
-- Table structure for table 'measure'
-- units, e.g. meter, megabyte etc
--

CREATE TABLE measure (


measure_id int(13) NOT NULL auto_increment,
sid int(13) NOT NULL default '0',
tid int(13) NOT NULL default '0',
sign varchar(255) default NULL,
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
last_published int(14) default '0',
PRIMARY KEY (measure_id)
);

--
-- Table structure for table 'product'
-- main information about the product

CREATE TABLE product (


product_id int(13) NOT NULL auto_increment,
supplier_id int(13) NOT NULL default '0', # manufacturer id
prod_id varchar(235) NOT NULL default '', $ manufacturer product code
catid int(13) NOT NULL default '0', # link to category
name varchar(255) NOT NULL default '',
low_pic varchar(255) NOT NULL default '', # small picture
high_pic varchar(255) NOT NULL default '', # large picture
thumb_pic varchar(255) default NULL, # thumbnail
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
family_id int(13) NOT NULL default '0', # product family
low_pic_size int(13) default '0',
high_pic_size int(13) default '0',
thumb_pic_size int(13) default '0',
PRIMARY KEY (product_id),
UNIQUE KEY unique_supp_prod_id (supplier_id,prod_id),
KEY supplier_id (supplier_id),
KEY catid (catid),
KEY prod_id (prod_id),
KEY product_id (product_id,prod_id,supplier_id),
KEY date_added (date_added),
);

--
-- Table structure for table 'product_bundled'
-- in case of product is a distri bundle info about components is here
--

CREATE TABLE product_bundled (


id int(13) NOT NULL auto_increment,
product_id int(13) NOT NULL default '0',
bndl_product_id int(13) NOT NULL default '0',
PRIMARY KEY (id),
UNIQUE KEY product_id (product_id,bndl_product_id)
);

--
-- Table structure for table 'product_description'
-- language specific description
--

CREATE TABLE product_description (


product_description_id int(13) NOT NULL auto_increment,
product_id int(13) NOT NULL default '0',
langid int(13) NOT NULL default '0',
short_desc text, # short description text
long_desc text NOT NULL, # long description text
official_url varchar(255) NOT NULL default '', # source of the editorial data
used
warranty_info text,
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
pdf_url varchar(255) NOT NULL default '',
pdf_size int(13) default '0',
PRIMARY KEY (product_description_id),
UNIQUE KEY mykey (langid,product_id),
KEY product_id_3 (product_id,updated),
);

--
-- Table structure for table 'product_family'
-- product lines families per supplier
--

CREATE TABLE product_family (


family_id int(17) NOT NULL auto_increment,
parent_family_id int(17) NOT NULL default '1',
supplier_id int(17) NOT NULL default '0',
sid int(13) NOT NULL default '0',
tid int(13) NOT NULL default '0',
low_pic varchar(255) default NULL,
thumb_pic varchar(255) default NULL,
catid int(13) NOT NULL default '0',
PRIMARY KEY (family_id)
);

--
-- Table structure for table 'product_feature'
-- product specs features are here
-- resolution of features/measures is via -> category_feature->feature-
>measure
CREATE TABLE product_feature (
product_feature_id int(13) NOT NULL auto_increment,
product_id int(13) NOT NULL default '0',
category_feature_id int(13) NOT NULL default '0',
`value` text,
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
PRIMARY KEY (product_feature_id),
UNIQUE KEY product_id (product_id,category_feature_id),
KEY category_feature_id (category_feature_id),
KEY product_id_3 (product_id,updated)
);

--
-- Table structure for table 'product_gallery'
-- product gallery – some more product images

CREATE TABLE product_gallery (


id int(13) NOT NULL auto_increment,
product_id int(13) NOT NULL default '0',
link varchar(255) NOT NULL default '',
thumb_link varchar(255) NOT NULL default '',
height int(10) NOT NULL default '0',
width int(10) NOT NULL default '0',
size int(15) NOT NULL default '0',
quality tinyint(2) default '0',
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY product_id (product_id)
);

--
-- Table structure for table 'product_multimedia_object'
-- place for storing multimedia data, like swf, animated gifs, etc.
--

CREATE TABLE product_multimedia_object (


id int(13) NOT NULL auto_increment,
product_id int(13) NOT NULL default '0',
link varchar(255) NOT NULL default '',
short_descr text NOT NULL,
langid int(13) NOT NULL default '0',
size int(15) NOT NULL default '0',
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
content_type varchar(255) NOT NULL default '',
PRIMARY KEY (id),
KEY product_id (product_id,updated)
);

--
-- Table structure for table 'product_related'
-- product corss-relations are stored here
-- type of link can be determenined by categories
-- e.g. categories are the same => link is “alternatives”
-- categories are different => link is “option”
--

CREATE TABLE product_related (


product_related_id int(13) NOT NULL auto_increment,
product_id int(13) NOT NULL default '0',
rel_product_id int(13) NOT NULL default '0',
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
PRIMARY KEY (product_related_id),
KEY rel_product_id (rel_product_id),
KEY product_id_2 (product_id,updated)
);

--
-- Table structure for table 'sid_index'
-- table for holding the autoincrement index for vocabulary
-- needed only in case of issuing new records for vocabulary

CREATE TABLE sid_index (


sid int(13) NOT NULL auto_increment,
dummy int(1) default NULL,
PRIMARY KEY (sid)
);

--
-- Table structure for table 'supplier'
-- manufacturers are stored in this table
--

CREATE TABLE supplier (


supplier_id int(13) NOT NULL auto_increment,
user_id int(13) NOT NULL default '1',
name varchar(255) NOT NULL default '',
low_pic varchar(255) default NULL,
thumb_pic varchar(255) default NULL,
updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
PRIMARY KEY (supplier_id),
);

--
-- Table structure for table 'tex'
-- vocabulary for a large data

CREATE TABLE tex (


tex_id int(13) NOT NULL auto_increment,
tid int(13) NOT NULL default '0',
langid int(3) NOT NULL default '0',
`value` text,
PRIMARY KEY (tex_id),
KEY tid (tid)
);

--
-- Table structure for table 'tid_index'
-- index of tex table

CREATE TABLE tid_index (


tid int(13) NOT NULL auto_increment,
dummy int(1) default NULL,
PRIMARY KEY (tid)
);

--
-- Table structure for table 'vocabulary'
-- table for storing misc language dependent data
--

CREATE TABLE vocabulary (


record_id int(13) NOT NULL auto_increment,
sid int(13) NOT NULL default '0',
langid int(3) NOT NULL default '0',
`value` varchar(255) default NULL,
PRIMARY KEY (record_id),
KEY sid (sid),
KEY langid (langid),
KEY langid_2 (langid,sid)
);

6.3 MS SQL Set-Up (monolingual catalogue)

6.3.1 set-up category structure


use IceCatBiz
--
-- table that holds the category structure information
-- category names are in ‘vocabulary’, referenced to via the ‘sid’ key
--

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =


'category')
BEGIN
DROP Table category
END

CREATE TABLE category (


catid int NOT NULL Primary Key on SECONDARY identity(1,1), -- (1,1)
means it starts with 1 and increments by 1
ucatid varchar(255) default NULL, -- a unspsc category code
pcatid int NOT NULL default 1,
sid int NOT NULL default 0 ,
tid int default NULL,
searchable int NOT NULL default 0,
low_pic varchar(255) NOT NULL default '',
thumb_pic varchar(255) default '',
updated datetime NOT NULL default getdate(), -- (here we need to create
an update trigger for -> on update getdate(),
last_published int default 0
-- PRIMARY KEY (catid -> this is set in the create table statement
-- indizies needs to build seperatelly....
-- KEY pcatid (pcatid),
-- KEY sid (sid),
-- KEY catid (catid,sid),
-- KEY searchable_2 (searchable,catid)
)

create index pcatid on category (pcatid) on SECONDARY


create index sid on category (sid) on SECONDARY
create index catid on category (catid,sid) on SECONDARY
create index searchable_2 on category (searchable,catid) on SECONDARY

--
-- Table structure for table 'category_feature'
-- link between feature and category

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =


'category_feature')
BEGIN
DROP Table category_feature
END
CREATE TABLE category_feature (
category_feature_id int NOT NULL Primary Key on SECONDARY
identity(1,1),
feature_id int NOT NULL default 0,
catid int NOT NULL default 0,
[no] int NOT NULL default 0,
searchable int NOT NULL default 0,
category_feature_group_id int NOT NULL default 0,
restricted_search_values text,
use_dropdown_input char(3) default '',
mandatory tinyint default 0
-- PRIMARY KEY (category_feature_id), ---> done in the create table
statement
-- indizies are created seperatelly
-- UNIQUE KEY catid (catid,feature_id),
-- KEY feature_id (feature_id)
)

create unique index catid on category_feature (catid, feature_id) on


SECONDARY
create index feature_id on category_feature (feature_id) on SECONDARY

--
-- Table structure for table 'category_feature_group'
-- a group that holds few category features, grouped

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =


'category_feature_group')
BEGIN
DROP Table category_feature_group
END

CREATE TABLE category_feature_group (


category_feature_group_id int NOT NULL Primary Key on SECONDARY
identity(1,1),
catid int NOT NULL default 0,
feature_group_id int NOT NULL default 0,
[no] int default 0
-- PRIMARY KEY (category_feature_group_id),
-- UNIQUE KEY uni1 (catid,feature_group_id),
-- KEY catid (catid,feature_group_id)
)

create unique index uni1 on category_feature_group (catid,


feature_group_id) on SECONDARY
create index catid on category_feature_group (catid,feature_group_id) on
SECONDARY -- why do we create two indizies for the same fields ?
-- Table structure for table 'category_keywords'
-- category keywords that can be used for a search

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =


'category_keywords')
BEGIN
DROP Table category_keywords
END

CREATE TABLE category_keywords (


category_id int default NULL,
langid int NOT NULL default 0,
keywords text,
[id] int NOT NULL Primary Key on SECONDARY identity(1,1)
-- PRIMARY KEY (id),
-- KEY category_id (category_id),
-- FULLTEXT KEY keywords (keywords)
)

create index category_id on category_keywords (category_id) on


SECONDARY
--create fulltext index in IceCatFTCat catalog...
-- !!!!!!! these lines need to be moified once the table and primarykey exsit
!!!!!!!!
--EXEC sp_fulltext_table 'category_keywords', 'create', 'IceCatFTCat',
'PrimaryKey_ID'
--EXEC sp_fulltext_column 'category_keywords','keywords','add'
--EXEC sp_fulltext_table 'category_keywords','activate'

-- Table structure for table 'feature'


-- holds the information about the features available for product description
--

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =


'feature')
BEGIN
DROP Table feature
END

CREATE TABLE feature (


feature_id int NOT NULL Primary Key on secondary identity(1,1),
sid int NOT NULL default 0,
tid int NOT NULL default 0,
measure_id int NOT NULL default 0,
[type] varchar(255) NOT NULL default '',
class int NOT NULL default 0,
limit_direction int NOT NULL default 0,
searchable int NOT NULL default 0,
restricted_values text,
updated Datetime NOT NULL default getdate(), --- on update
CURRENT_TIMESTAMP..., will be done via a trigger which is created
seperatelly ...
last_published int default '0'
-- PRIMARY KEY (feature_id),
-- KEY tid (tid)
)

create index tid on feature (feature_id) on secondary

-- Table structure for table 'feature_group'


-- a generic features groups available in system

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =


'feature_group')
BEGIN
DROP Table feature_group
END

CREATE TABLE feature_group (


feature_group_id int NOT NULL Primary Key on secondary identity(1,1),
sid int NOT NULL default 0
--PRIMARY KEY (feature_group_id)
)

-- Table structure for table 'language'


--
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'language')
BEGIN
DROP Table language
END

CREATE TABLE language (


langid int NOT NULL Primary Key on secondary identity(1,1),
sid int NOT NULL default 0,
code varchar(20) NOT NULL default '',
short_code varchar(5) NOT NULL default ''
-- PRIMARY KEY (langid)
)

-- Table structure for table 'measure'


-- units, e.g. meter, megabyte etc
--
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'measure')
BEGIN
DROP Table measure
END

CREATE TABLE measure (


measure_id int NOT NULL Primary Key on secondary identity(1,1),
sid int NOT NULL default 0,
tid int NOT NULL default 0,
[sign] varchar(255) default NULL,
updated datetime NOT NULL default getdate(), --- on update
CURRENT_TIMESTAMP -> seperat trigger created...,
last_published int default 0
-- PRIMARY KEY (measure_id)
)

-- Table structure for table 'product'


-- main information about the product
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'product')
BEGIN
DROP Table product
END

CREATE TABLE product (


product_id int NOT NULL Primary Key on secondary identity(1,1),
supplier_id int NOT NULL default 0, -- # manufacturer id
prod_id varchar(235) NOT NULL default '', --$ manufacturer product code
catid int NOT NULL default 0, --# link to category
name varchar(255) NOT NULL default '',
low_pic varchar(255) NOT NULL default '', --# small picture
high_pic varchar(255) NOT NULL default '', --# large picture
thumb_pic varchar(255) default NULL, --# thumbnail
updated datetime NOT NULL default getdate(), --- on update
CURRENT_TIMESTAMP, --> seperat trigger created
family_id int NOT NULL default 0, --# product family
low_pic_size int default 0,
high_pic_size int default 0,
thumb_pic_size int default 0,
date_added datetime NOT NULL default getdate() -- this field was
missing in your script, but mentioned for the keys !!!!
--PRIMARY KEY (product_id),
--UNIQUE KEY unique_supp_prod_id (supplier_id,prod_id),
--KEY supplier_id (supplier_id),
--KEY catid (catid),
--KEY prod_id (prod_id),
--KEY product_id (product_id,prod_id,supplier_id),
--KEY date_added (date_added),
)

create unique index unique_supp_prod_id on product (supplier_id, prod_id)


on secondary
create index supplier_id on product (supplier_id) on secondary
create index catid on product (catid) on secondary
create index prod_id on product (prod_id) on secondary
create index product_id on product (product_id, prod_id, supplier_id) on
secondary
create index date_added on product (date_added) on secondary

-- Table structure for table 'product_bundled'


-- in case of product is a distri bundle info about components is here
--
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'product_bundled')
BEGIN
DROP Table product_bundled
END

CREATE TABLE product_bundled (


id int NOT NULL Primary Key on secondary identity(1,1),
product_id int NOT NULL default 0,
bndl_product_id int NOT NULL default 0
-- PRIMARY KEY (id),
-- UNIQUE KEY product_id (product_id,bndl_product_id)
)

create unique index product_id on product_bundled (product_id,


bndl_product_id)

-- Table structure for table 'product_description'


-- language specific description
--
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'product_description')
BEGIN
DROP Table product_description
END

CREATE TABLE product_description (


product_description_id int NOT NULL Primary Key on secondary
identity(1,1),
product_id int NOT NULL default 0,
langid int NOT NULL default 0,
short_desc text, --# short description text
long_desc text NOT NULL, --# long description text
official_url varchar(255) NOT NULL default '', --# source of the editorial
data used
warranty_info text,
updated datetime NOT NULL default getdate(), -- on update
CURRENT_TIMESTAMP,--> seperat trigger created
pdf_url varchar(255) NOT NULL default '',
pdf_size int default 0
-- PRIMARY KEY (product_description_id),
-- UNIQUE KEY mykey (langid,product_id),
-- KEY product_id_3 (product_id,updated),
)

create unique index mykey on product_description (langid, product_id) on


secondary
create index product_id_3 on product_description (product_id, updated) on
secondary

-- Table structure for table 'product_family'


-- product lines families per supplier
--
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'product_family')
BEGIN
DROP Table product_family
END

CREATE TABLE product_family (


family_id int NOT NULL Primary key on secondary identity(1,1),
parent_family_id int NOT NULL default 1,
supplier_id int NOT NULL default 0,
sid int NOT NULL default 0,
tid int NOT NULL default 0,
low_pic varchar(255) default NULL,
thumb_pic varchar(255) default NULL,
catid int NOT NULL default 0
-- PRIMARY KEY (family_id)
)

-- product specs features are here


-- resolution of features/measures is via -> category_feature->feature-
>measure

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =


'product_feature')
BEGIN
DROP Table product_feature
END

CREATE TABLE product_feature (


product_feature_id int NOT NULL primary key on secondary identity(1,1),
product_id int NOT NULL default 0,
category_feature_id int NOT NULL default 0,
[value] text,
updated datetime NOT NULL default getdate() -- on update
CURRENT_TIMESTAMP, -> trigger created seperatelly
-- PRIMARY KEY (product_feature_id),
-- UNIQUE KEY product_id (product_id,category_feature_id),
-- KEY category_feature_id (category_feature_id),
-- KEY product_id_3 (product_id,updated)
)

create unique index product_id on product_feature (product_id,


category_feature_id) on secondary
create index category_feature_id on product_feature (category_feature_id)
on secondary
create index product_id_3 on product_feature (product_id, updated) on
secondary

--
-- Table structure for table 'product_gallery'
-- product gallery – some more product images
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'product_gallery')
BEGIN
DROP Table product_gallery
END

CREATE TABLE product_gallery (


[id] int NOT NULL primary key on secondary identity(1,1),
product_id int NOT NULL default 0,
link varchar(255) NOT NULL default '',
thumb_link varchar(255) NOT NULL default '',
height int NOT NULL default 0,
width int NOT NULL default 0,
size int NOT NULL default 0,
quality tinyint default 0,
updated datetime NOT NULL default getdate() -- on update
CURRENT_TIMESTAMP, seperate trigger created
-- PRIMARY KEY (id),
-- KEY product_id (product_id)
)

create index product_id on product_gallery (product_id) on secondary

-- Table structure for table 'product_multimedia_object'


-- place for storing multimedia data, like swf, animated gifs, etc.
--
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'product_multimedia_object')
BEGIN
DROP Table product_multimedia_object
END

CREATE TABLE product_multimedia_object (


[id] int NOT NULL primary key on secondary identity(1,1),
product_id int NOT NULL default 0,
link varchar(255) NOT NULL default '',
short_descr text NOT NULL,
langid int NOT NULL default 0,
size int NOT NULL default 0,
updated datetime NOT NULL default getdate(), -- on update
CURRENT_TIMESTAMP, seperat trigger created
content_type varchar(255) NOT NULL default ''
-- PRIMARY KEY (id),
-- KEY product_id (product_id,updated)
)

create index product_id on product_multimedia_object (product_id,


updated) on secondary

-- Table structure for table 'product_related'


-- product corss-relations are stored here
-- type of link can be determenined by categories
-- e.g. categories are the same => link is “alternatives”
-- categories are different => link is “option”
--
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'product_related')
BEGIN
DROP Table product_related
END

CREATE TABLE product_related (


product_related_id int NOT NULL primary key on secondary identity(1,1),
product_id int NOT NULL default 0,
rel_product_id int NOT NULL default 0,
updated datetime NOT NULL default getdate() -- on update
CURRENT_TIMESTAMP, seperte trigger created
-- PRIMARY KEY (product_related_id),
-- KEY rel_product_id (rel_product_id),
-- KEY product_id_2 (product_id,updated)
)

create index rel_product_id on product_related (rel_product_id) on


secondary
create index product_id_2 on product_related (product_id, updated)

-- table for holding the autoincrement index for vocabulary


-- needed only in case of issuing new records for vocabulary
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'sid_index')
BEGIN
DROP Table sid_index
END

CREATE TABLE sid_index (


sid int NOT NULL primary key on secondary identity(1,1),
dummy int default NULL
-- PRIMARY KEY (sid)
)

-- Table structure for table 'supplier'


-- manufacturers are stored in this table
--
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'supplier')
BEGIN
DROP Table supplier
END

CREATE TABLE supplier (


supplier_id int NOT NULL primary key on secondary identity(1,1),
[user_id] int NOT NULL default 1,
[name] varchar(255) NOT NULL default '',
low_pic varchar(255) default NULL,
thumb_pic varchar(255) default NULL,
updated datetime NOT NULL default getdate() -- on update
CURRENT_TIMESTAMP, -> trigger created seperatelly
-- PRIMARY KEY (supplier_id),
)

-- Table structure for table 'tex'


-- vocabulary for a large data
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'tex')
BEGIN
DROP Table tex
END

CREATE TABLE tex (


tex_id int NOT NULL primary key on secondary identity(1,1),
tid int NOT NULL default 0,
langid int NOT NULL default 0,
[value] text
-- PRIMARY KEY (tex_id),
-- KEY tid (tid)
)

--
-- Table structure for table 'tid_index'
-- index of tex table
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'tid_index')
BEGIN
DROP Table tid_index
END

CREATE TABLE tid_index (


tid int NOT NULL primary key on secondary identity(1,1),
dummy int default NULL
-- PRIMARY KEY (tid)
)

--
-- Table structure for table 'vocabulary'
-- table for storing misc language dependent data
--
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name =
'vocabulary')
BEGIN
DROP Table vocabulary
END
CREATE TABLE vocabulary (
record_id int NOT NULL primary key on secondary identity(1,1),
sid int NOT NULL default 0,
langid int NOT NULL default 0,
[value] varchar(255) default NULL
-- PRIMARY KEY (record_id),
-- KEY sid (sid),
-- KEY langid (langid),
-- KEY langid_2 (langid,sid)
)

create index sid on vocabulary (sid) on secondary


create index langid on vocabulary (langid) on secondary
create index langid_2 on vocabulary (langid, sid) on secondary

6.3.2 Creating triggers

-- creating the triggers


-- it should be run separately !!!!

create trigger category_updated on category for update as


declare @catid int
select @catid=catid from inserted
update category set updated=getdate() where catid=@catid

create trigger feature_updated on feature for update as


declare @fid int
select @fid=feature_id from inserted
update feature set updated=getdate() where feature_id=@fid

create trigger measure_updated on measure for update as


declare @mid int
select @mid=measure_id from inserted
update measure set updated=getdate() where measure_id=@mid

create trigger product_updated on product for update as


declare @pid int
select @pid=product_id from inserted
update product set updated=getdate() where product_id=@pid

create trigger product_description_updated on product_description for


update as
declare @pdid int
select @pdid=product_description_id from inserted
update product_description set updated=getdate() where
product_description_id=@pdid

create trigger product_feature_updated on product_feature for update as


declare @pfid int
select @pfid=product_feature_id from inserted
update product_feature set updated=getdate() where
product_feature_id=@pfid

create trigger product_gallery_updated on product_gallery for update as


declare @id int
select @id=[id] from inserted
update product_gallery set updated=getdate() where [id]=@id

create trigger product_mmo_updated on product_multimedia_object for


update as
declare @id int
select @id=[id] from inserted
update product_multimedia_object set updated=getdate() where [id]=@id

create trigger product_related_updated on product_related for update as


declare @prid int
select @prid=product_related_id from inserted
update product_related set updated=getdate() where
product_related_id=@prid

create trigger supplier_updated on supplier for update as


declare @sid int
select @sid=supplier_id from inserted
update supplier set updated=getdate() where supplier_id=@sid

You might also like