=============
 zope.schema
=============

.. image:: https://img.shields.io/pypi/v/zope.schema.svg
   :target: https://pypi.org/project/zope.schema/
   :alt: Latest Version

.. image:: https://img.shields.io/pypi/pyversions/zope.schema.svg
   :target: https://pypi.org/project/zope.schema/
   :alt: Supported Python versions

.. image:: https://github.com/zopefoundation/zope.schema/workflows/tests/badge.svg
   :target: https://github.com/zopefoundation/zope.schema/actions?query=workflow%3Atests
   :alt: Tests Status

.. image:: https://readthedocs.org/projects/zopeschema/badge/?version=latest
   :target: https://zopeschema.readthedocs.org/en/latest/
   :alt: Documentation Status

.. image:: https://coveralls.io/repos/github/zopefoundation/zope.schema/badge.svg
   :target: https://coveralls.io/github/zopefoundation/zope.schema
   :alt: Code Coverage

Schemas extend the notion of interfaces to detailed descriptions of
Attributes (but not methods).  Every schema is an interface and
specifies the public fields of an object.  A *field* roughly
corresponds to an attribute of a Python object.  But a Field provides
space for at least a title and a description.  It can also constrain
its value and provide a validation method.  Besides you can optionally
specify characteristics such as its value being read-only or not
required.

See https://zopeschema.readthedocs.io/ for more information.
