Developer documentation
=======================

Objects are mapped by their specification. Polymorphic attributes are
declared as interface attributes; strong typing may be declared using
schema fields; Attributes that are not declared in a schema or
interface are considered volatile.

Unique identifiers (UUID)
-------------------------

A 16-byte unique identification number is used.

Relations
---------

Polymorphic attributes are always stored using foreign key
relations. This is handled transparently by the framework.

The target of a relation may be a basic type such as a string,
integer, tuple or list, or it may be a mapped object.

The following fields allow polymorphic relations of any kind with the
type declared on assignment.

  * zope.schema.Object
  * zope.interface.Attribute

Collections are instrumented objects and may be declared using the
sequence fields:

  * zope.schema.List
  * zope.schema.Dict
  * zope.schema.Set

A note on dictionaries: Dictionaries are keyed by (unicode)
string. Mapped instances may be used as keys in which case a string
representation of the unique instance identifier is used. Dictionaries
support polymorphic values with type set on assignment.


