The Content Tree

By Deane Barker 5 min read
AI Summary

This post explores the concept of a content tree, emphasizing its importance in organizing digital content effectively. The author discusses how a well-structured content hierarchy can enhance user experience and content discoverability, providing insights on implementation and best practices for content management.

A while back, I mentioned the concept of a “content tree” in regards to content management. I cited this as a “functional pattern” and promised to talk about it more, but I never did.

So, here goes –

With every content management system (CMS) I’ve written, I always get back to the concept of a content tree. Additionally, every really good CMS I’ve seen has a content tree as the core structure: Documentum, Ektron, Interwoven, Zope, eZ publish, etc. It has become a pattern of content management if ever there was one.

Simply put, a content tree is a taxonomy – a parent-child structure – of content. You start at a root “folder” or “node” and build down from there. You might have a “folder” full of “article” objects, each of which might contain one or more “image” objects, etc. The idea is that a content object can be the child of another object, and the parent of one or more objects.

Obviously, this idea isn’t new, but I’m going to explain how I grasped this pattern one day. Perhaps my story will help you understand why this is such an important pattern –

I was building perhaps my 20th CMS (I think – they all kind of run together…). The CMS I was developing was “type-centric,” meaning content was grouped into “types” or “classes” (another pattern), and I used different types to organize the content. I would click a menu link for “articles” and get all the articles, for instance.

Type-centrism is really common in CMSs, and pretty much where everyone starts. You want articles, click the menu link and you get a list of them. Same for pages, authors, etc. It seems perfectly simple on the surface.

Then one day I added a type for “movie review.” I had to do a little programming, but I eventually had a shiny new type.

It turned out, however, that my “movie review” type was almost identical to my “article” type. They both had a title, a preview, an author, a body of text, an image, etc. But since my CMS was type-centric, they needed to be of different types to be separated in the system – I couldn’t very well click the “articles” link and get “movie reviews” mixed in, now could I?

Sometime later, I added a type for “book review.” Not surprisingly, this looked a lot like my “article” type too – it had all the same fields. With this, it became obvious that I was going to be doing this for a while.

So I decided I would create a “page” type instead, and add a property for “class” which would tell me what it was. This way I could recycle one type for many different uses. Brilliance!

So I had to hack away at my system for a while to separate content objects not only by “type” (page), but my “class” (article, movie review, etc.). It was done, and it worked.

But later, I decided that I wanted to separate “non-fiction” book reviews from “fiction” book reviews. How could I do this? I could create a new property on the “book review” class for “genre” …but I didn’t have a book review class anymore – I had lumped everything into “page.” And if I added “genre” to the “page” type (class? I was confused…), it would affect everything of that type.

Then it hit me – a content object is defined by two things: (1) its format (the properties it exposes), and (2) where it is located relative to other content. Two pieces of content may look the same (have the same properties), but they could be grouped into similar types: articles, movie reviews, etc.

So I quickly implemented a content tree – a recursive table of “folders” – and started assigning my content to these folders. My page class could now work just fine everywhere: if a “page” was in the folder for “articles,” then it was an article; if it was in the folder for “fiction” which was in the folder for “book reviews,” then it was a review of a work of fiction, etc.

This suddenly opened up other features, since any content object could be “assigned” to another one by virtue of being its child. Instead of having a single property for “image,” a content object could have as many images as it wanted.

I just needed to create an “image” object that could exist in the tree. If an article needed to be supported with 17 images, then the images could fit into the tree as children of the article. It become quite simple for an object to query the tree to collect all its children, so the organization and assignment of content objects suddenly became a breeze.

Additionally, it became easy to address different branches of the tree uniquely. I could decide that all the book reviews would be formatted a certain way, for example. If the system was rendering an object along that branch – however deep it might be – it could apply different images and styles. If I wanted non-fiction book reviews to look different from fiction books reviews, I could further subdivide the branches.

I also found that the content tree eliminated the need for a lot of properties. As I mentioned before, there was no need for “genre” when describing a movie review. That property was covered by where it sat in the tree.

This went on for some time – the content tree had opened up so many new possibilities, that it kept me busy for quite a while. And with that, I realized why most good content management systems have some sort of tree structure as the backbone of their content organization. This is obviously a simplistic overview, but it’s an accurate description of the epiphany that led me to this understanding.

If you’re contemplating a CMS project, consider this story carefully. I’m quite convinced that if you hack away on and refine your system long enough, all roads will lead you to this core concept – this functional pattern.

(Note: if you’re going to implement a content tree, implement the envelope pattern too. Don’t assign letters to the content tree, assign envelopes. Generally speaking, the content tree shouldn’t care about the letters.)

Links to this – Words, Links, and Centrality: Evaluating 17 Years of Gadgetopia Content April 1, 2019
What do you do when you have too much content to review?
Links to this – Varying Levels of Content Structure August 22, 2011
Content structure is achieved at a variety of levels -- structure within a property, structure withing a content object, structure between different content objects, etc.
Links to this – Content Geography: The CMS Feature You Take for Granted July 17, 2011
One of the highest manifestations of content structure is the overhead "geography" that content gets organized into.
Links to this – My Obsession with Content Trees and Subcontent February 15, 2009
A discussion of how an obsession with a certain form of CMS architecture can make us blind to alternative forms.
Links to this – Menuing in Content Management: Implicit vs. Explicit April 5, 2008
Menuing and navigation in content management can be handled explicitly, where navigation is its own subsystem, or implicitly, where navigation is built based on the content structure. There are advantages and disadvantages to both.
Links to this – The Problem of Context August 14, 2010
Content is not isolated in its presentation -- it's often presented with other information that is somehow related to it. Modeling and managing these relationships can be harder than you think.
Links to this – Chasing the Ideal: Relational Content Modeling in Content Management April 11, 2011
Every CMS tries, in some extent, to duplicate the classic model of the relational database. Some come closer than others to this "ideal."
Links to this – Virtual Staging vs. True Staging Environments May 15, 2011
Once considered a norm, the concept of a separate "content staging environment" has slipped into disuse. It still has some advantages, but the alternative -- a live, "virtual" staging environment -- probably has more.
Links to this – What Makes a Content Management System? June 30, 2007
Comprehensive post discussing the most common features found in content management systems today.
Links to this – The Four Disciplines of Content Management November 24, 2007
All of the disciplines put under the "content management" moniker can actually be split into four distinct groups.
Links to this – Discrete vs. Relational Content Modeling May 31, 2006
Content modeling "inside" a single content object is generally quite simple. What's trickier is content modeling between multiple content objects.
Links to this – The Necessity of Subcontent May 20, 2007
The ability to organize content into trees consistent of parent-child relationshps is a core feature of content modeling, and resolves so many modeling patterns
Links to this – Architecture and Functionality in Content Management November 28, 2006
Some content management features are "out of the box," while some are developed during integration. Which pattern is better than the other, and why?
Links to this – The Site Access Pattern and the Joy of eZ August 19, 2005
A case study example on the seperation of content and presentation channels.
Links to this – The Art and Practice of Content Assembly: Where IA and CMS Meet October 1, 2012
Making your content strategy work with your CMS is tricky. Often it comes down to issues of content assembly. Capabilities in this space vary greatly.
Links to this – Episerver's Custom Page Providers February 20, 2009
Discussion of an example of content aggregation, or the ability to raw in content from disparate sources and present it as part of a unified system.
Links to this – Grokking CMS November 21, 2016
Reflections on what it means to really understand a CMS, down to its bones.
Links to this – The Tortured Metaphor of Spatial Content Relativity January 4, 2017
We often try to force-fit content into physical metaphors, where it doesn't always fit.
Links to this – Is Content Geography Just Another Property? September 12, 2013
Reasons why content geography -- meaning the spatial relationship of content to other content -- is a proportionately more powerful way to model content then a simple, discrete content property.
Links to this – Uber-Text Pages and the Lack of Inheritance in Content Management April 21, 2008
In any CMS implementation, you invariably end up with a generic "text page" other, more structured, pages. What is the dividing line between these pages, and how could it be more effectively handled?
Links to this – Rivers, Not Trees: The Challenge to Organizational IA June 17, 2012
Organizational communication is about dynamic rivers of content, not static trees.
Links to this – Channeled Interfaces: Hiding the Big Picture June 24, 2006
Not every CMS editor needs access to all CMS functionality, and often this access can be confusing. In many cases, to pays to "channel" the interface down to just the functionality a particular role needs to see.
Links to this – The "Named Content Views" Pattern June 10, 2006
By concentrating on the different "views" a content object may have, you can simplify your content templating considerably.
Links to this – Moving from Content Management to Information Management December 7, 2005
We tend to think of content management as being used to manage content that will be consumed by people outside our organization. However, it can be used for purely internal content as well.
Links from this – Functional Design Patterns July 6, 2005
Applications have patterns – ways of doing things that have stood the test of time. These aren’t object modeling patterns , about which books and books have been written, these are…best practices for how to solve a particular type of functional problem. Around my city, you see a certain style of...
Links from this – The Envelope Pattern of Content Management August 4, 2005
CMS don't need to have an intimate knowledge of the content they're managing. Rather, they just need to know that they're managing content in general, and leave the specifics to the implementation.