So as I mentioned on my blog, now seems like a good time to introduce
The Open Data Definition.
So, what is ODD?
ODD is an XML based data exchange format which is designed to be simple
to implement and use. It consists of a framework and an extension format
defining keywords.
When developing the initial spec I reduced things down to their lowest
common denominators, therefore we have three main components - Entities,
Metadata and Relationships.
These components are atomic, and the format itself has virtually no
nesting. This is slightly unconventional, but it makes the format easy
to parse, supports partial import/export and makes it easy to extend the
format to support the live pinging of updates.
This gives us:
*** Entity ***
Entities are “things”, for example a web log post or a user account. The
entity has a “class” attribute to specify what type of entity it is and
can be subclassed.
All entities are identified by a UUID, this is important and I’ll get on
to that later.
*** Metadata ***
Metadata provides information about an entity as a name/value pair.
Optionally, you can give a type to specify the type of metadata - e.g.
attribute or annotation.
*** Relationship ***
As the name suggests, a relationship defines the relationship between
two entities. To do this they use a “verb” (as defined in the extension
format mentioned above). Doing it this way permits setting and
un-setting operations - for example, friend & unfriend, join & leave.
*** The UUID ***
An important concept in all this is the UUID.
The UUID is a URL which must point to an ODD representation of the thing
it represents. I think this is quite a powerful concept since it permits
truly distributed networks to be build.
Marcus
--
Marcus Povey : Senior Developer : Curverider Ltd
W: http://www.marcus-povey.co.uk
E: mar...@elgg.com
> I'm not sure if I see where graph interaction data comes in. A vampire bit B
> at 2pm in the Parlor Room.
We can define a user called Vampire Dan:
<social:entity uuid="http://example/uuid/user/1/" class="user" />
<social:metadata entity_uuid="http://example/uuid/user/1/"
uuid="http://example/uuid/user/1/metadata/1" name="name">Vampire
Dan</social:metadata>
And someone else called Victim Jim:
<social:entity uuid="http://example/uuid/user/2/" class="user" />
<social:metadata entity_uuid="http://example/uuid/user/2/"
uuid="http://example/uuid/user/2/metadata/1" name="name">Victim
Jim</social:metadata>
Dan bit Jim:
<social:relationship uuid_one="http://example/uuid/user/1/"
verb="bite" uuid_two="http://example/uuid/user/2/" />
We could also add a piece of location metadata to each called
"location" where the value was "Parlor room". The next version of the
draft will contain an optional "published" attribute on everything, so
we can say exactly when the bite took place.
Of course, all we actually need to know is the relationship tag
(perhaps in a stream or a syndication file), and as the spec requires
the UUIDs to point to OOD representations of those users, a system can
go off and find the information it needs.
Ben
--
Ben Werdmuller
Elgg http://elgg.com/ | Personal http://ben.elgg.com/
Skype benjaminmorayhouse1