The Nuxeo model is mapped internally to a model based on a hierarchy of nodes and properties. This model is similar to the basic JCR (JSR-170) data model.
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.
Children
The parent-child information for nodes is stored in the hierarchy
table.
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.
Fragment Tables
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.
Fields Mapping
Nuxeo fields 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
Security information is stored as an ACL which is a collection of simple ACEs 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.