Difference between revisions of "XML Format"

From the Directed Edge Developer Base
Jump to: navigation, search
(First example)
(link element)
Line 61: Line 61:
  
 
== link element ==
 
== link element ==
 +
 +
<link>product_1</link>
 +
<link weight="3">product_2</link>
 +
 +
The link element, surprise, surprise &mdash; indicates a link between two items.  The identifier used in the text, here ''product_1'' and ''product_2'' is just the IDs of items in the database.
 +
 +
'''Links to items that do not exist will be ignored unless those items are defined in the same import.'''  In other words, if you have a link to an item that's defined lower in the same batch of XML, no problemo.  But if you create a dead link, that just gets ignored.
 +
 +
'''Note:''' You'll want to watch this space in general.  The next update of the API will allow for distinct types of links, e.g. ''purchased'', ''rated'', ''clicked''.  We're still ironing out the kinks in those for the moment.
 +
 +
=== weight attribute ===
 +
 +
The weight attribute is what we use for stuff like rankings.  Weights can be in the range of 1 to 10 (or zero if you want to explicitly say there's no weight).
 +
 +
So, if we want to say ''user_1 gave product_1 a rating of 5'' that looks like this:
 +
 +
<item id="user_1">
 +
  <link weight="5">product_1</link>
 +
</item>

Revision as of 22:13, 21 May 2009

So, keeping in mind all of the basic structures from API Concepts, here's what they look like in XML.

First example

<?xml version="1.0" encoding="UTF-8"?>
<directededge version="0.1">
 <item id='user_1'>
  <link>product_1</link>
  <tag>customer</tag>
  <property name='last name'>Schmidt</property>
  <property name='first name'>Bob</property>
 </item>
 <item id='product_1'>
  <tag>product</tag>
  <property name='artist'>Beatles</property>
  <property name='name'>White Album</property>
 </item>
</directededge>

Here we've got a customer, named Bob Schmidt that's connected to an album called The White Album by Beatles. So we've got two items and one link. Let's start breaking this down a little.

If you imported this to your Directed Edge account using the REST API, you'd have a database with two items.

Before you start sending XML to our server, we recommend passing it through xmllint or similar to make sure that the XML is valid. The most common problem that we see with users that are new to the API is sending invalid XML and then our servers choking on it.

XML header

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

Good old garden variety XML header. We prefer UTF-8, but we shouldn't blow up if you send us other stuff.

directededge element

<directededge version="0.1">

Nothing too exotic here for the moment. This wraps up all of the stuff that you'll send our receive for the moment. Version is always 0.1 for the moment because, well, we're too lazy to bump the version. (Though we'll do better versioning once we're out of beta.)

item element

 <item id='user_1'>

An item is the container for all of the stuff in our database. Exactly what items are is explained in API Concepts.

id attribute

Every item must have an id attribute. That's the handle that we use to refer to the item everywhere. If you want to update or delete the item, you refer to it by its id. You can use any scheme that you want to for creating item identifiers, so long as they're unique. Often something like type_number is convenient.

tag element

Tags are always a child element of an item. Tags can be free form as well. Usually they're things like user, product, page, but they can also be much more specific like, artist, album, sci-fi, etc. You can associate as many tags as you would like with a particular item.

property element

<property name='last name'>Schmidt</property>

Properties are a set of key-value pairs associate with an item. Again, they are free form. You don't need to insert all of the values that you store locally in your database, in fact, most of the time you don't need to associate any at all. These are only useful if you later would like to grab data from the Directed Edge REST API about the items that you're storing there. You can associate as many properties with an item as you like, so long as their names are unique.

name attribute

Every property must have a name attribute. This can be anything that you like, but there may only be one property with a given name per item.

link element

<link>product_1</link>
<link weight="3">product_2</link>

The link element, surprise, surprise — indicates a link between two items. The identifier used in the text, here product_1 and product_2 is just the IDs of items in the database.

Links to items that do not exist will be ignored unless those items are defined in the same import. In other words, if you have a link to an item that's defined lower in the same batch of XML, no problemo. But if you create a dead link, that just gets ignored.

Note: You'll want to watch this space in general. The next update of the API will allow for distinct types of links, e.g. purchased, rated, clicked. We're still ironing out the kinks in those for the moment.

weight attribute

The weight attribute is what we use for stuff like rankings. Weights can be in the range of 1 to 10 (or zero if you want to explicitly say there's no weight).

So, if we want to say user_1 gave product_1 a rating of 5 that looks like this:

<item id="user_1">
 <link weight="5">product_1</link>
</item>