View Source

h1. Introduction
{excerpt}Tags (labels, topics) are a popular way to organize knowledge using social classification (tagging) processes and producing so-called folksonomies{excerpt}
This spec is simple enough, so we put all parts (data model, spec and API) in this page.

The initial version of Tags has modest effort allocation (from [RS Plan 3.6]):
- Tags spec: 1.5 p/d
- Tags backend: 3
- Tags frontend: 4

Jira tasks:
- {jira:RS-541} Discussion
"Each project should be able to define a set of tags that are relevant to the research they are doing (primary tags). Vladimir showed the Yammer system in which additional tags can be added (the yammer method seemed sound), and we would need an approval system. It also seems correct to allow project tags to be taken from existing thesauri because then you get synergy with existing termininology. Therefore, when adding a tag the system would auto complete from the ResearchSpace vocabularies. If the term does not exist then it is added to a special Tags vocabulary.
- {jira:RS-1175} Overall
- {jira:RS-1176} Spec

h1. Tags Data Model

h2. Source of Tags
Tags in RS come from two places:
- General thesauri.
Any thesaurus with rso:isTag=1 (marked as "t" in [Meta-Thesaurus and FR Names#Meta-thesaurus table]) can be used as a source of tags
- Dedicated thesaurus.
A special RS Tags thesaurus ( New tags are added here

h2. Applying Tags to Entities
Tags can be applied to the following RS entities (compare with [Data Basket Model#Item Types]):
- Bookmark
- Data Annotation
- Image Annotation

In the future tags can be applied also to:
- Object: need mockup where to put the tags, spec how to integrate with FR search, mockup where to put in search sentence and search results
- Forum/Topic/Post: 3rd party system, new in RS3.6
- Image: no UI to show a single image yet

h2. Tags Ontology
We use the [Tags Ontology|] ([tags.n3|], which defines:
- class Tag as a subclass of skos:Concept. (This is perfect: when a skos:Concept is applied as a tag, it becomes tags:Tag.)
- two inverse properties (taggedWithTag and isTagOf) to relate any resource to a tag

The Tags ontology is depicted here:
- We don't use tags:Tagging, i.e. don't record who/when added a tag
- There is no ordering of the tags applied to an object

Here is an example that relates ?obj to Rembrandt, and to a user-created tag named "Watercolor".
@prefix tags: <> .
@prefix rs-tag: <> .

rs-tag:1234 skos:inScheme rs-tag:; skos:prefLabel "Watercolor".
?obj tags:taggedWithTag rkd-artist:Rembrandt, rs-tag:1234.

h1. Tags UI and Use Cases
Modeled after Yammer (with some simplifications):
Because of the limited effort in RS3.6, some viable cases are listed under [#Future Use Cases].

h2. RS3.6 Use Cases

h3. Tags in entity detailed view
- Every entity type should use the same Tags section
- Tags are represented as "buttons" for easier recognition
- There's a red "x" after each tag to delete it
- There's an empty box at the end of the tag list.
When the user starts typing, RS does autocompletion against all tag thesauri.
If the user doesn't select from the autocomplete box and presses Add, a new tag is added to the Tags thesaurus (so it's easy for any user to add new tags)

h3. Tags in entity list view
(eg Object search results list, Bookmarks list ...)
TODO: make mockups!
- It's best to use the same Tags section as above
- Or do we want some "lighter-weight" version of it?
- In particular, do we want the user to be able to add/delete tags from here?

h3. Search by tag
- Clicking on a tag runs a search by that Tag, for that entity kind only
- In the Search dialog for every entity kind, there's a Tags section to add tags to the search

h2. Future Use Cases
- Universal search (of any kind of object) by tag
- Apply/create tag using twitter notation in rich-text: #tag
- Tags maintenance of the dedicated thesaurus: an admin function
-- Approval of new tags proposed by users.
If a tag is rejected, all its instances are deleted
-- Rename tag
-- Merge two tags
- Per-project Tag sets
- Tag cloud, in one of the following forms:

h1. Tags API
TODO Jana & Svetoslav