Basic Forms
***********

class Schema(value=Unspecified, **kw)

   Bases: "flatland.schema.containers.Dict"

   A declarative collection of named elements.

   Schemas behave like "Dict", but are defined with Python class
   syntax:

      >>> from flatland import Schema, String
      >>> class HelloSchema(Schema):
      ...     hello = String
      ...     world = String
      ...

   Elements are assigned names from the attribute declaration.  If a
   named element schema is used, a renamed copy will be assigned to
   the Schema to match the declaration.

      >>> class HelloSchema(Schema):
      ...     hello = String.named('hello')    # redundant
      ...     world = String.named('goodbye')  # will be renamed 'world'
      ...
      >>> helloworld = HelloSchema()
      >>> sorted(helloworld.keys())
      [u'hello', u'world']

   Schemas may embed other container fields and other schemas:

      >>> from flatland import List
      >>> class BigSchema(Schema):
      ...     main_hello = HelloSchema
      ...     alt_hello = List.of(String.named('alt_name'),
      ...                         HelloSchema.named('alt_hello'))
      ...

   This would create a Schema with one "HelloSchema" embedded as
   "main_hello", and a list of zero or more dicts, each containing an
   "alt_name" and another "HelloSchema" named "alt_hello".

   Schemas may inherit from other Schemas or Dicts.  Element
   attributes declared in a subclass will override those of a
   superclass.  Multiple inheritance is supported.

   The special behavior of "Schema" is limited to class construction
   time only.  After construction, the "Schema" acts exactly like a
   "Dict".  In particular, fields declared as class attributes as
   above do **not** remain class attributes.  They are removed from
   the class dictionary and placed in the "field_schema":

      >>> hasattr(HelloSchema, 'hello')
      False
      >>> sorted([field.name for field in HelloSchema.field_schema])
      [u'hello', u'world']

   The order of "field_schema" is undefined.

class SparseSchema(value=Unspecified, **kw)

   Bases: "flatland.schema.containers.SparseDict"

   A sparse variant of "Schema".

   Exactly as "Schema", but based upon
   ~flatland.schema.containers.SparseDict`.

class Form(value=Unspecified, **kw)

   Bases: "flatland.schema.containers.Dict"

   An alias for Schema, for older flatland version compatibility.
