All Plone content types—including everything in FSD, like people and departments—are written atop a framework called Archetypes, which provides much of their complex behavior:
The familiar multi-tab Edit pages
Widgets—little snippets of user interface—for displaying and editing various types of fields: dates, simple and styled text, images, so on
Logic for storing content in and retrieving it from the ZODB or elsewhere
All of this is driven by a schema, a data structure that describes a content type field by field. Here, for example, is a snippet of the schema of FSD's Person type, defining the First Name field:
StringField( name='firstName', widget=StringWidget( label=_(u"FacultyStaffDirectory_label_firstName", default=u"First Name"), i18n_domain='FacultyStaffDirectory', ), required=True, schemata="Basic Information", searchable=True ),
A complete schema is essentially a list of these field definitions.
Because practically all of a type's behavior depends on its schema...