12.2 Flow Object Tree
A flow object tree is an abstract representation of the merger of the formatting specification and the source document.  The nodes of the flow object tree are flow objects.  Each flow object is of a type called a flow object class.  A flow object is said to be an instance of its class.  A flow object also has a set of characteristics.  The characteristics that are applicable to a flow object depend on the flow object's class.  A flow object's class and characteristics together constitute a specification of the desired formatting behavior of the flow object.
Each flow object has a set of ports to each of which an ordered list of flow objects can be attached. The set of ports may be empty. One port of each flow object that has any ports may be distinguished as the principal port.  The principal port is unnamed. Every other port has a name which uniquely identifies it in the context of its flow object. The list of flow objects attached to a port is known as a stream, and the members of the list are called members of the stream.  There is a single flow object in the flow object tree that is not a member of any stream. This flow object is called the root of the flow object tree.  Every other flow object in the flow object tree is a member of exactly one stream. This stream is referred to as the flow object's stream.  The flow object to which a flow object's stream is attached is called the flow parent of the flow object.  The set of ports that a flow object has is controlled by its class, and for some classes also by its characteristics.  A flow object that has no ports is called an atomic flow object, and a flow object class whose instances are always atomic is an atomic flow object class. The relative positioning of flow objects in different streams can be constrained by synchronizing the flow objects.  In addition, the value of a characteristic may result in the creation of a flow object.