Learning objectives
- Define a content model and the idea of reification
- Break down the full anatomy of an attribute
- Distinguish an attribute type from an attribute assignment
- Understand content types as wrappers around attributes
- Nail the critical difference between a type and an object
"Content modeling is the foundation on which a CMS implementation is built. Mistakes made here breed multiple future problems that can be tough to recover from." — Deane Barker, Real World Content Modeling
The collection of content types, attributes, relationships, and datatypes that accurately describes a logical domain of content. "Content modeling" (the verb) is the process of designing that collection.
1Reification: making the abstract concrete
The central intellectual act of content modeling has a name — reification, from the Latin res, "thing." It means making something concrete: converting a vague human idea about content into actual types, attributes, and datatypes a machine can manage.
You could store an address as one blob of text. That's flexible, but the computer can't sort by city or validate a postal code. Or you could break it into labeled fields — street number, street name, city, postal code. Now it's queryable and powerful, but you've traded away some flexibility (every address must now fit that structure). This tension shows up in every modeling decision.
2The anatomy of an attribute
Content, at bottom, is just labeled data: we take a datum and wrap it in a label and context so we can describe, manipulate, and refer to it. That wrapper is an attribute — a bundle of parts working together.
A logical container holding a single piece of managed data along with everything needed to store, display, edit, and validate it.
A single attribute is doing more than it looks. Its parts include:
- Attribute valueThe actual datum — the thing being managed.
- Internal nameA unique, machine-friendly identifier (lowercase, no spaces), like
titleorageInYears. This name may be unchangeable once set. - LabelA human-friendly display name for editors, e.g. "Title" or "Age (in years)." Critical for usability.
- Primitive datatypeHow the value is stored underneath — a string of characters, a number, a date.
- Typed value representation & (de)serializationHow the value appears in the programming language, plus the code that converts it to and from storage.
- Editorial elementThe interface editors use to enter the value — sometimes a simple input, sometimes a complex control.
- Validation rulesConstraints that block the value from being saved unless it meets criteria.
That's a lot, and as an editor you'll rarely see an attribute broken down this far — the parts are usually implied and spread across subsystems. This unique combination of all those pieces is called an attribute type.
3Types: wrappers around attributes
Attributes never float around alone. They're grouped into content types.
A set of attributes that combine to describe a logical unit of content. An Article type might be composed of Title, Body, Author, and Category attributes.
A crucial subtlety: a type contains no data. All data lives in attributes. A type is just a named, reusable wrapper — a boundary around a collection of attributes, plus maybe a few settings like permissions. A type must contain at least one attribute (otherwise it has no reason to exist).
When you assign the "Text" attribute type to the Article type and name it "Title," you create an attribute assignment. The Title on Article is not the same as the Title on Employee Profile — they're separate assignments. Strictly, whenever we say "attribute" on a type, we mean an "attribute assignment": a specific attribute type, assigned to a specific content type, with a specific name and settings. We just say "attribute" because "attribute assignment" is a mouthful.
Finally, a content type is a unique combination of attributes. Could two types have identical attributes? Technically yes — but if they share the exact same attributes with the same settings, they're functionally the same type. In rare cases you might duplicate them for naming or rule differences (Article vs. Blog Post), but that usually just confuses editors.
4Types vs. objects — the cookie cutter
So far we've only described an empty model. The moment we add data, we move from a content type to a content object.
An actual piece of content created from a type — one instance, filled with real data. A type is the pattern; an object is a thing stamped out from that pattern.
The cookie-cutter analogy. Your content model — types and attributes — is a cookie cutter: the pattern for shaping cookies. When you start creating content, you stamp out cookie after cookie in that shape. You might have a million content objects of a single type. "Type" = the cutter (the plan). "Object" = the cookie (actual content).
This idea traces back to Plato's Theory of Forms: everything in the real world is an instance of a more ideal "form." The table in your dining room is a representation of the universal idea of "table-ness." A content type is that ideal form; a content object is a real-world instance of it. (The material only half-jokingly offers bonus points to the first CMS brave enough to call its content types "Platonic Forms.")
Why this all matters: everything else in your CMS — templates, workflow, delivery, search — is built on top of the model. Once a model is loaded with thousands of objects, changing it is genuinely hard, and internal names may be locked. This is why modeling deserves careful thought before you start pouring in content.
🔑 Key terms from this lesson
- Content model
- The collection of types, attributes, relationships, and datatypes describing a content domain.
- Reification
- Making the abstract concrete — turning ideas about content into managed structure.
- Attribute
- A labeled bundle wrapping one datum plus its name, label, datatype, editorial element, and validation.
- Attribute type vs. assignment
- The reusable definition vs. a specific instance of it placed on one content type with a name and settings.
- Content type
- A named, data-free wrapper grouping a unique set of attributes.
- Content object
- A concrete instance of a type, filled with data — the "cookie" from the "cutter."
Review Questions
Test your understanding. Click each question to reveal the answer.