I was over at OpenSourceCMS.com today playing around with some content management systems: phpWebSite, Xoops, and PostNuke. They were all quite good, with phpWebSite being the one I enjoyed the most. But I want to articulate something I’ve had I was over at OpenSourceCMS.com today playing around with some content management systems: phpWebSite, Xoops, and PostNuke. They were all quite good, with phpWebSite being the one I enjoyed the most. But I want to articulate something I’ve had in the back of my mind for a while…
“Content management systems” are either open or closed. Either the systems manage “content” as they define it, or they can wrap themselves around any content. There are many of the former, and far too few of the latter.
Movable Type, for instance, is sometimes called a “content management system.” But that’s a stretch. Yes, MT will manage content…so long as “content” is defined as an object with a title, a preview, a body, an excerpt, some keywords, and a category assignment. That’s really it. The system is closed in the sense that it’s built around one type of content — blog postings, or perhaps news — to the exclusion of all others. (I made this same argument in a support forum posting several months back. I called MT “a content management engine tied to a defined format.”)
Let’s say you want to use MT to manage book reviews. You’re okay if you use the title field for the book title, and the preview for a summary, and the body for the review. But where do you put the publisher? The number of pages? The ISBN? There are some plug-ins that allow you to store key/value pairs in MT, but you’re getting into hack territory pretty quickly.
(To be fair, Six Apart has never claimed MT is anything but a blogging system. Users being as demanding as they are, however, have tried to stretch MT into other types of content management and then they complain in the support forums when it won’t work.)
phpWebSite, PostNuke, and Xoops were the same. Yes, they managed content, so long as it fit within proscribed guidelines. For news or announcements, you have a headline and a preview and a body. That is the “content” that it manages. (In fact, these three systems have another limitation in that their display side is fairly derivative — phpWebSite looks alike a portal and everything fits in “blocks,” and the other two are essentially three-column layouts. That’s another post, however.)
An “open” content management system would let the user define the parameters of the content (or “objects”) that it manages. For instance, if you wanted to handle book reviews, you could simply define a new object — a “book” — and the fields you needed:
- Author (repeatable for multiple authors)
- Year Published
- Hardcover or Softcover
- Number of Stars
- Cover Image
You could even apply validation rules. “Title” is required. “Year” must be four digits. “Number of Stars” is a select box of whole numbers between 1 and 5. Etc. The CMS would then render a Web-based editor based on the properties you have defined.
Here we have Utopia. This is true “content” management — a system adaptable to whatever content you choose to store in it, whether it be a simple blog system, an employee directory, a database of auto parts, whatever. The system could wrap itself around whatever you wanted.
(How would you store this mess in a database, you ask? You probably wouldn’t — data as volatile and unstructured as objects having arbitrary properties defined on the fly is a textbook case for XML.)
There are systems that do this, but they’re high-end (I’ve done this with Documentum and I’ve seen it done with Interwoven). Is there a low-end system that would accomplish this same thing? Perhaps Ektron’s CMS300 (see this screencap), though at $4,999+, many people wouldn’t consider it “low-end.” (And, besides, Ektron’s system is 100% dependent on their ActiveX-based WYSIWYG editor.)
Is there an open-source system that does this? I’ve never seen one. Perhaps I haven’t looked hard enough. I know that you can write modules for PostNuke and such that may let you emulate some of this functionality, but I’ve never tried it.
So, you ask, if I’m full of all these great ideas, why don’t I write this system? Would it surprise you to know that I’ve already started?in the back of my mind for a while…