The KARL project has a number of facilities that provide “knowledge management” across the community, intranet, and people facilities. Tagging is one of these facilities.
This specification documents the existing requirements of this facility along with a proposal for re-implementation as part of KARL3. It is not expected that tagging will be enhanced with new features on the way to KARL 3.0.
KARL1 (and KARL2) envisioned a tagging facility largely modeled after delicious (insert periods as needed). This facility provided tagging of resources, including people, as well as viewing tags globally, within a community, or for a person.
KARL1 tagging worked as an external REST service that ran outside of KARL’s Zope/Plone stack. This service used “Tasty”, a Python application written using an old version of TurboGears and SQLObject. The deployment of KARL1 was on Windows, and thus SQL Server was used as the database driver.
There was a fairly never-ending set of problems with the tagging service. Tasty itself wasn’t written particularly well and has been abandoned. Allegedly the transaction semantics used by SQLObject didn’t play nice with SQL Server, causing many deadlocks that were extremely hard to debug. The REST service had authentication drawbacks. Ultimately the REST service was avoided and KARL grew direct tentacles (via SQL queries) into the database.
Notably, OSI never asked for a sevice that could tag resources outside of KARL.
Next to cataloging, the tagging system is the biggest source of bit rot, bugs, performance problems, and architectural accretion. For KARL3, we need a service that is narrowly-focused, fit-for-purpose, reliable, and performant.
At the same time, tagging has proven to be a little-used feature of KARL. Perhaps this is due to the problems and unreliability, but more likely, this is because tagging is an alien idea to the (somewhat older) audience of KARL. Therefore, tagging can’t get a big slice of the budget.
Visit a resource and see a “tag box” listing of tags applied to that resource, e.g.:
tagA (3), tagB (7), tagC (4)
tagA is a hyperlink to view that tag page for tagA and 3 is a hyperlink to view the “tag users” for tagA.
The “tag users” is a page that shows which people taggged a resource with a certain tag
A tag can contain any letter, number, underscore, or dash. No spaces, symbols, or punctuation are allowed. Tags are converted to lower case, preferably as people type in the Ajax widget. Note that we might have to live with migrated data that breaks the rules.
The tag box also has a “+” symbol which opens the tag editor widget.
The tag editor widget allows you to add, edit, and remove tags that are on a resource. Only your tags, however.
The tag editor contains an autocomplete widget. As you type, this autocomplete widget shows you any tag used anywhere in the system which starts with the currently-typed letter.
Autocomplete works for whatever word in the tag list the cursor is currently inside.
You can use the mouse to select a tag. You can also use up-down to navigate through the tag list and escape to dismiss the autocomplete.
The tag editing widget should throttle the pings to the server by storing up keypresses for 1 second.
Editing the tag list makes the appropriate add/edit/delete operations on the tag list.