Skip to main content

Create, edit and use hierarchical taxonomies in Plone!

Project description

This add-on provides support for hierarchical taxonomies in multiple languages, letting users easily associate existing content with terms from one or more taxonomies.

Taxonomy is the “discipline of defining groups […] on the basis of shared characteristics and giving names to those groups. Each group is given a rank and groups of a given rank can be aggregated to form a super group of higher rank and thus create a hierarchical classification”.

Here’s an example of the “taxonomic kingdoms of life”:

Living Organisms
Living Organisms -> Eukaryotic
Living Organisms -> Eukaryotic -> Simple multicells or unicells
Living Organisms -> Eukaryotic -> Multicellular
Living Organisms -> Eukaryotic -> Multicellular -> Autotrophic
Living Organisms -> Eukaryotic -> Multicellular -> ...
Living Organisms -> Prokaryotic
Living Organisms -> Prokaryotic -> Archaebacteria
Living Organisms -> Prokaryotic -> Eubacteria
Living Organisms -> Prokaryotic -> Eubacteria -> ...

Taxonomies can be quite large, sometimes in the tens of thousands (10,000+). And in sites with multiple languages, each title – or caption – must appear in translation.

Note that the selection of a term in the hierarchy implies the selection of all its parents. In the example above this means that if “Eubacteria” is selected, then also “Prokaryotic” and “Living Organisms” will be.

Overview

The implementation tries to meet the following requirements:

  1. Support many (10,000+) terms.

  2. Terms can be organized in a hierarchical classification.

  3. Easily import and export in a common format (VDEX).

  4. Taxonomies will provide vocabularies that are translateable.

  5. Use behaviors to provide a choice field for each taxonomy.

  6. Manage taxonomies and assign to content types “through-the-web”.

In the description below, we touch on each of these requirements.

Data structure

In order to limit both the memory and computation requirements, the term data is contained in exactly one persistent index per language, a mapping from the materialized term path to its term identifier.

The term:

Living Organisms -> Eukaryotic -> Simple multicells or unicells

will be indexed under this path:

"Living Organisms/Eukaryotic/Simple multicells or unicells"

The index allows us to provide an iterator over the sorted vocabulary terms, virtually without cost (as well as containment queries).

At the same time, while the hierarchy is encoded, we can quickly look up terms in a subtree.

Data exchange

While collective.taxonomy (this package) does make it possible to create, manage and edit taxonomies from a browser-based interface, the primary focus is to support the exchange of terms in the VDEX format:

The IMS Vocabulary Definition Exchange (VDEX) specification defines a grammar for the exchange of value lists of various classes: collections often denoted “vocabulary”.

This exchange is integrated with GenericSetup which manages imports and exports using setup profiles. Is is also possible to use the controlpanel for importing and exporting VDEX files.

The package comes with integration for the Dexterity content type framework: for each taxonomy, a behavior is available that adds a choice field which pulls its vocabulary from the taxonomy. The behavior is configurable in terms of field name, title and whether it allows the selection of one or more multiple terms.

How does it work?

The main objective during this project has been to get a high rate of through-the-Web administration. Therefore the use of the product will not require any Python programming nor configure.zcml directives.

In the controlpanel (/@@taxonomy-settings), the user can:

  1. Import taxonomies from VDEX files.

  2. Export taxonomies existing to VDEX files.

  3. Delete taxonomies

  4. Add and delete behaviours for taxonomies

When a new behavior is created for a taxonomy, it can easily be added to the desired content types using the content type control panel, provided by Dexterity. After this is done, the taxonomy is available on add- and edit forms, and it is also available for collections, if plone.app.collection is used on the site. An index is also created, so the taxonomies can easily been used for catalog queries.

Requirements

  • Plone 4.3

  • or an older version using a recent version of plone.dexterity/plone.app.dexterity

Frequently Asked Questions

How can I import an existing ATVocabularyManager vocabulary?

Use the script provided in this gist. Just remember to edit the vocabIdentifier and vocabName.

To-Do

  • Implement drag’n’drop for editing taxonomies.

  • Better documentation.

Contributors

Author

Contributors

Existing work

In 2010, Rok Garbas <rok@garbas.si> reimplemented and extended prior work by Seantis and released collective.vdexvocabulary. This package allows you to configure and populate vocabulary components from a VDEX-specification. The package supports flat vocabularies only, and support for multiple languages takes a different approach (vocabularies are returned in an already translated form). Note that vocabularies are loaded in a read-only mode, although it’s been proposed that vocabularies might be edited through-the-web.

In 2005, Jens Klein <jens.klein@bluedynamics.com> released ATVocabularyManager. This package makes it possible to create taxonomies using Plone’s content management interface with terms existing as regular site content. It’s integrated with the Archetypes content type framework (now deprecated).

Changes

1.0 (2013-05-07)

  • Initial release [bosim]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

collective.taxonomy-1.0.tar.gz (61.5 kB view details)

Uploaded Source

File details

Details for the file collective.taxonomy-1.0.tar.gz.

File metadata

File hashes

Hashes for collective.taxonomy-1.0.tar.gz
Algorithm Hash digest
SHA256 41f1fb3fb4bb1bdb7705908600be33a6eb927deef54b311b645fb66547af8afe
MD5 a17c74c7ec5e9f9137ca17fd8ddbd4f5
BLAKE2b-256 faad2ea28c52bc6fd2bede4a396fb7d442077f8554333caae79a9ab3909519ba

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page