Conversations often run aground on problems of definitions. Indeed, What is a content type? has generated approximately 1743839754 Slack posts at Soapbox and prompted many a long Twitter conversation. (Have I mentioned how much I love my job?)
This set of really good questions by @jjosephmiller gets at the heart of what the CMS's job is. Do its "content types" (or templates, or post types, or entity types, etc) necessarily map to the conceptual "kinds of content" that exist in the high level map of an org's content? https://t.co/6z2fWtN0qm
— Actually, (@eaton) October 28, 2020
If you’re an author, content type refers to the types of things you create. For think tanks, that means stuff like reports and briefs and working papers. If you’re someone who builds think tank websites, then content type is a term of art, one that revolves around particular collections of fields and permissions.
In the interest of preserving our company Slack as something other than a single-issue message board, I’m going to avoid using the term //content type// through the rest of this piece.
Also note that the discussion of attributes and entities that follow is adapted Deane Barker’s excellent Real World Content Modeling. If you’re already familiar with Deane’s book, you can skip to the next entry or scroll on down to the bottom and choose where you'd like to go next.
An attribute is the most basic level of stuff that a CMS database holds. It consists most fundamentally of two things:
A piece of data.
A label for that data.
In practice, attributes hold a bunch of other information (e.g., an internal name, a user-facing label, a datatype, and a UI interface). All those things are important for how your website is built, but they aren’t as important here, so we’re going to ignore them.
What matters for our purposes is that an attribute is a data point together with the full set of things stored with that data point (datatype, internal name, user-facing label, etc.).
An entity is a set of attributes that forms a logically independent piece of content.
An entity acts as a wrapper for a particular set of attributes. The entity itself does not store data—the information is contained in the attributes. The entity simply defines an object as a particular set of attributes.
(Okay, technically, an entity is a sort of super attribute that contains a machine name, a human name, and some validation and permission rules. Again, this is important for developing a CMS, but not so important here.)
Leibnitz’s principle of the identity of indiscernibles applies to entity types. That means entities P and Q are the same entity type if every attribute possessed by P is also possessed by Q.