SilvaMetadata 2.2b1

Silva Metadata

Implemented Use Cases

  • Define Metadata
  • Map Metadata to a Content Type
  • Import Metadata Definition
  • Export Metadata Definition
  • Export Metadata for a Content Object
  • Import Metadata for a Content Object
  • Display a Form for Metadata
  • Validate Values for Metadata
  • Restrict Displayable/Editable Metadata based on permissions, roles, or state.
  • Containment Based Metadata Acquisition
  • Invoke Triggers upon Metadata Changes
  • Index/Search Metadata

Todo Use Cases

  • Delegate Metadata Element to a different Definition.
  • Customize an Element of Metadata Set mapped onto a particular Content Type.
  • Upgrade/ChangeSet Engine for updating metadata sets.
  • Canonical/Standards Based XML Generation and Import for Metadata Sets.



Metadata storage is based on annotating content objects. Metadata storage itself is partioned by set namespaces, and also includes a partition for metadata configuration on a per object basis.


Definitions of the metadata are conducted with the metadata tool zmi interface. These definitions are managed as sets composed of elements, with guards and fields attached to elements. These definitions can be exported and imported to xml and are used for validation and display of the metadata. These definitions are then mapped onto content types that they will be available for.

Tool API

The metadata tool api is fairly simple, the core of it is simply one method. getMetadata which returns a binding object, below.

The additional methods are present to conform to the metadata tool api defined by the cmf interfaces.


Bindings functions as an adapter between the content object, the metadata definition, and the stored metdata values. It offers a unified api to the programmer to operate on an object's metadata, and unlike a service or tool, allows for security checks to be automatically performed in the context of the content object.

Additionally the binding adapter makes use of the metadata storage to store configuration options that can be set per object, that affect the runtime behavior of the binding. this capability is used to implement some of the advanced features of the metadata system such as metadata acquisition and mutation triggers, and can be extended as need arises.

Hook Points

To allow for flexibility and customization based on a requirements the metadata system offers two major hook points exposed at by its python api.

The Access hook is used by the metadata tool to construct a binding for a content object. access hooks can be registered on a per content type basis or as a default hook.
Runtime Data Initializer
When a metadata binding is constructed for an object with no metadata annotation data, a runtime data initializer is invoked to construct the binding's runtime data. initializers can be defined on a per content type basis or as a default initializer.


2.2b1 (2010-01-25)

  • Clean CMF compatibility code.
  • Remove the usage of Products.Annotations. We now use regular zope.annotations.
  • Service Metadata is registered as an utility, and is a service inheriting from
  • Catalog service from is now used. It used adapters instead of Products.ProxyIndex. This make possible to copy a metadata value in the catalog, to access it from the brain object without waking up the object itself.

1.2 (2008-09-30)

Features added:

  • Add support in Bindings for rendering the edit views of elements with values from the request.
  • Rewrite documentation as a clean ReST.


Features added:

  • Add id suggestion for set naming convention to add ui.

Bugs fixed:

  • Binding.setValuesFromRequest more cleanly 'fakes' a real HTTPRequest when calling form.validate_all, so that referencelookupwindows can be used as metadata fields.


Bugs fixed:

  • The Zope 2.10 event system was causing importing .zexp which contained the metadata service to fail. Fixed this.


Features added:

  • Made SilvaMetadata Zope-2.10 compliant, so that it works with Silva 2.0.


Features added :

  • 2007-03-15: The default access handler and the MetadataBindingAdapter now have a read_only parameter, False by default, that if set to true will cause all write actions to the binding to be silently ignored.


Bugs fixed:

  • 2007-01-25: Added missing imports in


Bugs fixed:

  • MetadataTool.getMetadataValue did not work correctly for Ghosts and GhostFolders, it does now.


Features added:

  • Added 'Export Metadata Set as XML' button to set overview screen.
  • Changed the button value in Content Type Mappings from 'edit mappings' to 'save mappings'.

Bugs fixed:

  • Bugfix for empty strings in aqcuirable metadata fields blocking acquisition. Many thanks to Nico Grubert for the bug report and proposed fix!


Features added:

  • MetadataTool.getMetadataValue can now get just this objects metadata, not acquiring parent metadata


Features added:

  • If an extension to Silva provides IAcquiredUpdater adapters for content objects, these will used. An IAcquiredUpdater adapter for an IContainer could for instance reindex any sub-objects.
  • Use Zope 3 style interfaces. This means that Zope 2.8 is now required.

Bugs fixed:

  • Stop using deprecated CMFCore.CMFCorePermissions module
  • Even more fixes to the unit tests (issue 1381).


Bugs fixed:

  • Fixed unit tests (issue 1380).


Features added:

  • Metadata sets can have a 'category' property. This property can be used to define special purpose metadata sets.
  • The minimal_role and category properties are exported and imported to/from the XML metadata set definitions.

Bugs fixed:

  • setValuesFromRequest now uses Formulator to validate user input. This solves the infamous 'checkbox' problem.
  • MetadataTool.setMetadataValues() has been removed.
  • XML export/import now works with latest Formulator release (fixing issues with Formulator's i18n support).
  • unit test have been updated to run with Silva.
  • MetadataTool.getMetadataValue now supports object delegation.


Features added

  • Metadata Sets now have a Minimal Role property, that can be used by Silva to restrict access to a Set.


Bugs fixed

  • Make getMetadataValue shortcut a bit more robust. Also some performance tweaks.


Bugs fixed:

  • XML import with unrecognized metadata sets now skips these sets silently.
  • XML export for integers and floats should now work properly when Python 2.1 is used.
  • Make SilvaMetadata field editing work with Formulator 1.6.0.


Bugs fixed:

  • XML import would fail with a NameError if a metadata set is imported that is not registered. Now it fails with a more informative error... What should be happening is that this unrecognized metadata is skipped, instead.


Features added:

  • icon for service_metadata.

Bugs fixed:

  • XML import of complex lists for items now works.
  • Indexing with XML import now works.


Bugs fixed:

  • getMetadataValue was buggy and didn't really work. Fixed.


Features added:

  • Added Infrae standard release documentation.

Bugs fixed:

  • Avoid quadratic behavior while indexing. Previously, for n elements that are indexed, for each element indexing the data for the n indexes was accessed, resulting in quadratic behavior while indexing (n * n values were accessed per object).


  • Initial public release of SilvaMetadata.


Filename Release date Size
Products.SilvaMetadata-2.2b1.tar.gz 2010 1 25 17:01:33 39.6 k


FMI contact Infrae : info at