[Zope3-dev] Content Types: What are they? Do we need them for Zope 3

Martijn Faassen faassen@vet.uu.nl
Sat, 16 Nov 2002 22:13:46 +0100


Jim Fulton wrote:
> Historically, Zope has a notion of "type" that has not been
> very well defined.
> 
> - Zope 2 has something called "meta type".  This is used for at
>   least two different things in Zope 2:
[snip]
>   In addition, I'm told that Silva selects UI components based om
>   meta type.

That's correct. You can register views for a meta_type (add view,
edit view, public view); these views have various methods,
mostly page templates and python scripts.

[snip]
> Does Zope 3 need a "content type" concept? Is so, what should
> content types be used for?

* determining what's in any add list. I'd propose we go back to the
  original idea of Zope 3: nothing should occur in the
  add list that does not add one specific object; for any other
  actions we should be doing something else. We will be providing
  a separate list for such actions.

  But even if this is not directly reflected into the UI, we need
  such a separation of concerns internally.

  By itself knowing which content types exist is not enough to
  determine what should be in the add list; there is commonly
  a subset. In the content part of the tree, you'd get only
  content related objecs. In the service managers there may
  be an entirely different set of objects addable, though there
  may be some overlap as well. The word 'content' is potentially
  confusing here as we're sometimes talking about software.

* An object that is of a content type needs some standard set of meta data;
  the meta data can then be counted on in the user interface;
  I'm thinking of such things as 'title' and 'description';
  Dublin Core stuff. This is the same as saying all content types
  should implement some minimal interface/can be adapted to a minimal
  interface.

* A content type by itself may also need some meta information,
  though in part that is taken care of by being of an interface.
  I can also imagine 'addability' could be determined by interface
  information; perhaps an object that should be addable to the
  FooServiceManager container needs to implement IAmAddableToFoo :)
  Do I have to specify such interface then to make it addable
  at all, in addition to making the object implement the content
  type interface? Or is there some other, better way to solve this?

  Lots of the 'meta data' we may consider hooking up to 
  content types is already taken care of by the component 
  architecture and having an interface; views and adapters and such.

  Can all conceivable content type meta data be similarily absorbed away 
  by the component architecture or is any left that cannot be?

* An object that is of a content type will appear in a certain way 
  in the folder hierarchy. Will it be possible for non-content type
  objects to be visible in the folder hierarchy in the same way?

* Content types will have a URL. The URL should in some way be
  discoverable. Can non-content types have a url as well? 
  I imagine so, but we may have less introspection/discovery 
  guarantees for them?

Anyway, random thoughts mostly..

Regards,

Martijn