At the recent Big Apple Sprint, we had one conference call (using iSight) with Brent Lambert from The College of Education and Human Services at Utah State University, to discuss the idea of a content licensing tool for Plone, as described in PLIP #136.
Jonah and I suggested that Brent look at Alec Mitchell’s contentratings product for an example of how to use Zope 3 annotations to add metadata to an object. By the following day, Brent already had a working example of adding a license to a piece of content via the Properties tab.
In the attached screenshots, you can see that there is a content licensing selector in the Properties tab, and when you click on the ‘Choose’ link, the Creative Commons popup box appears where you can select a license.
After you select a license, your choice is fed back to the Plone edit form. So it’s a 3 click process, and has the advantage of using the up-to-date forms on creativecommons.org, so they don’t have to be maintained within the Plone product.
I think the rapid turnaround of this product is testament to the ease with which one can utilize Zope 3 technology to build truly useful tools in a componentized way.
You can browse the code in their subversion repository, and Brent assures me that this will soon be moved over to the collective subversion repository.
What’s next
The tool is currently only selecting the license, but not showing it anywhere on the view page. The tool should also embed a link to the RDF on the view page. It would be great if the tool could also include the CC license in RSS 1.0 and 2.0 feeds. The Creative Commons Web Integration Guide gives some examples for how to display the license information.
Technorati Tags: Creative Commons, plone, zope

It is worth detailing somewhere (here maybe ;-)) the effort that went in to integrating a z3 annotation and z3-style field with an Archetypes derived object and form.
As far as I can tell, that is basically what http://plone.org/products/plone/roadmap/150 is all about. If PLIP #150 had already been implemented, this project would have been much easier. As it was, we needed to figure out how to make z3 annotations appear on the properties tab, and be processed by the Archetypes processForm machinery.
Considering how everyone on irc and the mailing lists has been extolling the virtues of z3-annotations, you would think this would be a snap, but in this transitional period it actually got quite tricky (to us mortals, at least).
Luckily, Rob had encountered a similar situation while working on the openplans software itself (https://svn.openplans.org/svn/OpenPlans/trunk/), and recommending a starting point for thinking about the solution.
In their case, they first took advantage of the extra_bottom slot on the base_view template, and filled it with the z3 view of the field . Then, they subscribed their annotation object to modification events (https://svn.openplans.org/svn/OpenPlans/trunk/metadata.zcml/). Trouble is, that event is not fired currently by zope, and AT doesn’t fire it. Their current transitional solution is to decorate _processForm in a monkey patch (https://svn.openplans.org/svn/OpenPlans/trunk/monkey.py), “manually” firing the z3 event so that the annotation field is notified.
Even with this much contortion its still not a seamless integration since the z3 field is not going to be validated along with the other AT fields (we did confirm that the notified event will not get fired until the FormController finishes processing the rest of the fields).
In practice, we discovered that while base_edit has an extra slot, base_metadata does not. It also would have been wonderful had AT fired this event for us, if possible (Rob and Whit discussed the possibility of subscribing to a special event, not the normal one to avoid duplicate messages once events begin happening automatically).
In summary, despite the enthusiasm to use z3 annotations, our experience actually integrating z3 annotations with an AT schema was tricky. Perhaps an AT storage layer which persists the data using a z3 annotation would be easiest way to integrate with AT schemas, but it does sound a bit silly - once you have a footprint of the persistence on the schema, might as well actually store the data there - maybe?
Perhaps the content licensing effort can grow into a useful example for how and why to use z3 annotations in combination with AT derived objects. But don’t underestimate the amount of work that still needs to happen for PLIP #150 to be completed. The upshot is we all learned a ton about the z3 lifecycle working this problem.