The Nuxeo model of folders, documents and properties (sometimes complex ones) is mapped internally to a simpler model based on a hierarchy of nodes and simple properties.
Nodes, Properties, Children
A node represents a complex value having several properties. The properties of a node can be either simple (scalars, including binaries), or collections of scalars (lists usually). A node can also have children which are other nodes.
The parent-child information for nodes is stored in the
The normal children of a document are mapped to child nodes of the document node. If a document contains complex types, they are also mapped to child nodes of the document mode. There are therefore two kinds of children: child documents and complex types. They have to be quickly distinguished in order to:
- Find all child documents and only them.
- Find all complex properties of a document and only them.
- Resolve name collisions.
To distinguish the two, the hierarchy table has a column holding a
isproperty flag to decide if it's a complex property or not.
A fragment table is a table holding information corresponding to the scalar properties of one schema (simple fragment), or a table corresponding to one multi-valued property of one schema (collection fragment).
For a simple fragment, each of the table's columns correspond to a simple property of the represented schema. One row corresponds to one document (or one instance of a complex type) using that schema.
For a collection fragment, the set of values for the multi-valued property is represented using as many rows as needed. An additional
pos column provides ordering of the values.
A node is the set of fragments corresponding to the schemas of that node.
See the VCS Tables page for more details.
Nuxeo properties are mapped to properties or to child nodes:
- A simple type (scalar or array of scalars) is mapped to a property (simple or collection) of the document node,
- A complex type is mapped to a child node of the document node. There are two kinds of complex types to consider:
- Lists of complex types are mapped to an ordered list of complex property children,
- Non-list complex types are mapped to a node whose node type corresponds to the internal schema of the complex type.
Security information is stored as an ACL (Access Control List) which is a collection of simple ACEs (Access Control Entries) holding basic rights information. This collection is stored in a dedicated table in a similar way to lists of scalars, except that the value is split over several column to represent the rich ACE values.