This document serves as a high-level overview why and how BCMS and BCDS is designed and implemented. Though it is a developer document, it does not go into the details to lessen the chances of the document being irrelevant when implementation details are changed. Detailed document can be seen in the api document.
BCMS and BCDS goal is to help implement a CMS solution in a smaller time frame than building your own CMS solution. Normally each organization will have a different way of looking at how they want to use their CMS. Therefore CMS UI will vary from one organization to another, even though functionally they are similar. So BCMS tries to help the developer to create varying UI. OpenACS was chosen as its platform due to the fact that its Content Repository (a CMS core engine) is sound and additional none-CMS functionality can easily be added.
BCMS is made of 3 packages.
Basic Content Management System (BCMS) - core tcl api that just exposes Content Repository (CR) functions in Tcl. Makes CR more accessible. For example to upload a file, in CR you will call about 2-3 plsql and sql statements. Here you call one Tcl function. There is nothing revolutionary about it BCMS.
BCMS uses standard set of naming get_X, create_X, set_X, delete_X, list_Xs, tree_Xs. See bcms standards document.
BCMS does not discourage you to use the CR directly, it just gives you more help in the common operations in CR.
BCMS-UI-* - this packages are the package that calls the BCMS Tcl procs. It a UI package. You set which folder you want to manage in CR, template folder in CR and context. It is possible to manipulate the same data in CR with 2 or more packages that has very different UI. This package will contain forms, wizards, etc. that manages the content in CR with a great help of BCMS Tcl procs.
BCDS - The package that gets content out and displays it. Just like BCMS-UI-* packages you tell the a BCDS package which folder in CR you would like to serve and at what context. Caching of content items or making portals are done in this package.
Its also possible that both BCMS-UI-* and BCDS be implemented in a single package.
Here is currently a picture of CR that is managed by 2 BCMS-UI packages and 2 BCDS packages. Bcms-ui-site-manager is the UI that manages the public site for Company X. This is normally used by the marketing group. Bcds-main-site is the package that renders the public site to visitors of Company X site. Since the site is very heavy on graphics and has lots of presentation another BCDS package renders the site for the intranet. Which normally does not need eye candy. Also bcds-intranet may present or retrieve differently, for example Products and Services maybe displayed in a long functional table that has sortable columns as opposed to the categorized and much simple public site that is served by bcds-main-site. In Company X the product management group works very differently from the marketing group which handles Company X Site. The product management group uses their own UI by using bcms-ui-product-management package. This package is not able to publish a content, but a workflow is created to be sent to a marketing group staff to publish a content to be seen by bcds-main-site.