Magnolia stores data in a Java Content Repository. The repository is a hierarchical object database that is particularly well-suited for storing content. In a content management system you need to be able to store text, documents, images and other binary objects along with their metadata. The data is structured as a tree of nodes. Each node can have one or more types. The type defines what kind of properties the node has, the number and type of its child nodes, and its behavior. See Jackrabbit Node Types for more information and Node Type Visualization for a diagram of the node type hierarchy.
In Magnolia we define custom node types that define Magnolia's custom content model. The JCR in turn enforces the constraints of that model at the repository level. If you need to reference JCR node types in your code, Jackrabbit's JcrConstants is useful. We provide constants also for Magnolia's custom node types but also convenience methods. For example, to update the last modification date of a node, use the
NodeTypes.LastModified.update(node) convenience method. Magnolia node types are registered by the NodeTypes Java class.
JCR primary node type
Mixin node type
Magnolia node type
Node type hierarchy
In this node type hierarchy diagram you can see what extends what. For example,
mgnl:versionable. This means that page is an object you can version. In contrast,
mgnl:component are not versionable – they are subnodes that must be activated together with the parent page. However, all three node types (page, area, component) are renderable which means you can render a component on its own without its parent page.
Primary node types
Every node has a primary node type assigned to it upon creation. The primary node type defines node structure such as allowed and required child nodes and properties. Primary types reflect the business that is represented in the repository. Magnolia's primary node types define content management nodes such as pages, areas, components and resources.
JCR primary node types
|The base type of all primary node types.|
|Unstructured node type that allows any properties and child nodes.|
|Abstract base type for nodes in a structured node hierarchy.|
|JCR representation of a file.|
|This node type is used in the versioning system.|
Magnolia primary node types
|Activatable and versionable content objects such as pages.|
|Typically a content object below page level, such as area or component, that can be rendered also independently.|
|Reserved for system use.|
Mixin node types
Mixin node types specify additional properties or characteristics to the node. A node can have a primary type and several mixin types at the same time. JCR mixins add repository-level functionality such as versioning and locking. Magnolia mixins add content management capabilities such as activating and rendering.
JCR mixin node types
|Mixin type for referenceable nodes. Provides an auto-created |
|Mixin type for versionable nodes.|
|Enables locking capabilities for a node.|
Magnolia mixin node types
Date the node was deleted, the user who deleted it and the deletion comment.
|Date the node was last modified and the user who modified it.|
Date the node was activated, the user who activated it and its current activation status.
Note that on the public instance,
|Date the node was created and the user who created it.|
|Associates a template with the node for rendering.|
|Allows the user to leave a comment on the version.|
Same name siblings are not allowed
The Magnolia node type definition
magnolia-types.xml does not allow same name siblings. This means that you cannot have two nodes at the same level in the node hierarchy with the same name. Typically same name siblings is not an issue because Magnolia enforces the constraint automatically during normal usage. However, if prior to Magnolia 5.2 you imported an XML file that was created outside of Magnolia or was edited by hand, it is possible that the XML import created a same name sibling.
siblings.groovy script to find same name siblings in your repository. The example below searches for identically named areas (
mgnl:area) in the
website workspace under the
/travel/about page. See Groovy module for instructions on how to execute Groovy scripts.
workspace: Any Magnolia workspace.
path: A valid path in the workspace.
/will search for everything under the workspace root.
returnItemType: A valid JCR node type. The query goes through all node types but the results are filtered to the node type you specify. Use
nt:baseas a "wildcard".