New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

Content, MetaData and Taxonomy – 1 – Taxonomy Manager

This article is cross-posted from my personal blog.

In DotNetNuke version 5.3, we introduced the concept of a centralized Content store, together with the ability to apply Taxonomies (categories) to the content.  We have extended this in DNN 5.4 by completing the MetaData API as well as adding Folksonomy (user tags).

In this series of blogs I will explain how developers can take advantage of these new features in their own extensions.

But first lets take a look at how the pieces work together.

Defining Taxonomies

Taxonomy is defined as “the practice and science of classification” – Wikipedia, while Folksonomy is defined as “collaborative tagging” – Wikipedia

Usually, taxonomy refers to the practice of using hierarchical categories applied to the content by a “content editor”, while folksonomy refers to the practice of free-form tagging of content by users. 

In DotNetNuke, while we expose both of these at the presentation layer, in the API and Data Layer they are implemented using a common data structure.

Lets take a look at the new Taxonomy Manager, which can be found on the Admin menu.

Figure 1: The Taxonomy Manager in DNN 5.4


The initial view displays a list of the defined Vocabularies – In DNN 5.3 the list is empty, while in DNN 5.4 there is a single System Vocabulary defined called Tags.

To create a new Vocabulary click on the Create New Vocabulary button.

Figure 2: Creating a New Vocabulary


You can then enter a name and description for the Vocabulary and define whether it is a Simple or Hierarchical Vocabulary and whether it is an Application scope Vocabulary (host users only) or Portal scope Vocabulary.

Once you have added the Vocabulary you will return to the main Vocabulary list.  To add “terms” to the Vocabulary select the Edit link.

Figure 3: Editing a Vocabulary


You can add “terms” to the Vocabulary by selecting the “Add Term” button.

Figure 4: Adding a Term to the Vocabulary


You can then enter a name and a description for the term and click Save.

To edit an existing term you can select the term from the Terms list.

Figure 5: Editing a Term in a Hierarchical Vocabulary


Note figure 5 shows a hierarchical Vocabulary, where the terms are displayed in a treeview, and you can define a Parent Term for the term,  while Figure 6 shows a simple (flat) Vocabulary of colors where the terms are displayed in a list, and there is no Parent Term option.

Figure 6: Editing a Term in a Simple Vocabulary



Using Taxonomies

Now we have defined a couple of Vocabularies, how do we use them.  Currently only two types of Content exists which can be “tagged” – Modules and Pages/Tabs.  By providing support for tagging at the Page and Module level through Page Settings and Module Settings, modules do not need to be updated to support taxonomies.  Modules, like Blog, Forum and Announcements which have multiple Content Items will need to be updated to support tagging at the item level though.

In figure 7 we can see how the terms “MP3 Players” from the Electronics Vocabulary and “Red” from the Colors Vocabulary can be applied to the Page.

Figure 7: Applying Taxonomy Terms (Categories) to a Page


Once the page has been categorized with some terms, if the page skin has the new Tags Skin object in it (like the base Index skin in Minimal Extropy), the skin object will display the list of categories that have been applied to the page.  (Note the skin object can be styled in many different ways though css.  In this case we are using a folder icon to indicate “categories” and a luggage label to indicate tags.

Figure 8: The new Tags Skin object



Adding Tags (Folksonomy)

Folksonomy is the practice of allowing users to enter their own tags in order to categorise or “tag” the content.  The Tags skin object has a property/attribute – AllowTagging – which defaults to true that allows users to enter their own tags.  The user, would click the Add Tags button.

Figure 9: Entering new Tags


The user could then enter a comma-delimited list of tags – click Save and the “Tags” would be saved (Figure 10)

Figure 10: The Tags Skin Object with Two New User-entered Tags



Tags System Vocabulary

It was briefly mentioned at the beginning of this article that there is a single System Vocabulary created when DNN 5.4 is installed.  This Vocabulary is where the User entered Tags are stored.

Figure 11: The Tags System Vocabulary


There are a number of advantages of using a special System Vocabulary for storing user entered tags.  One is that both taxonomy terms and folksonomy tags are treated in the API and Data Layer in the same way.  This means that we only have to manage one relationship between content and terms rather than two separate relationships.  The second benefit of treating tags in this way is that an admin can “manage” the tags – ie remove any offensive or inappropriate tags, or correct spellings of tags, by using the Taxonomy Manager UI.

I hope this has given you an idea of what the new Taxonomy/Folksonomy features can do.  In future blogs I will take a deep-dive into the API and Data Layer of this new sub-system and show you how you can build rich content driven modules.


tale huy
Hi, Charles

Thank you for your article.
I'm working on dnn7.3.3 and i can't add 2 terms "Electronics" and "Televisions" into the "Electronics" Vocabulary.
So, can you help me?

Many thanks and best regards.
Huy Ta
tale huy Wednesday, February 4, 2015 10:53 PM (link)

Comment Form

Only registered users may post comments.


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Davies (3)
Alex Shirley (10)
Andrew Hoefling (3)
Andrew Nurse (30)
Andy Tryba (1)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (37)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Bogdan Litescu (1)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (213)
Chris Paterra (55)
Clint Patterson (108)
Cuong Dang (21)
Daniel Bartholomew (2)
Daniel Mettler (181)
Daniel Valadas (48)
Dave Buckner (2)
David Poindexter (12)
David Rodriguez (3)
Dennis Shiao (1)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (80)
Francisco Perez Andres (17)
Geoff Barlow (12)
George Alatrash (12)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (274)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Kelly Ford (4)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matt Rutledge (2)
Matthias Schlomann (16)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Miguel Gatmaytan (3)
Mike Horton (19)
Mitchel Sellers (40)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Oliver Hine (1)
Patricio F. Salinas (1)
Patrick Ryan (1)
Peter Donker (54)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Sacha Trauwaen (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott Schlesier (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Steven Fisher (1)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (3)
Tycho de Waard (4)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (40)
Will Strohl (180)
William Severance (5)
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out