Tagxfs is a semantic file system. It extends the user space file system to a tag based hierarchy.
Imagine that you want to add a new folder to your existing folder structure. But semantically it belongs into more locations, e.g. you have the trailer for the movie 'Indiana Jones 4' and existing a folder structure (ref.1.1). It belongs in the folder Adventure and also in 2000s (production year 2008).
;) ... That's not exactly a soup question, is it? Try wiki categories.
Extension consists of links, tags and node hierarchy.
Tags represent unique categories and can be of the following types:
Location /Movies/Genre/Scifi filters content by two categories: Movies and Scifi. Genre is used as a helper tag, which groups genre tags into one folder.
Link is a symbolic representation of the folder which we want to categorize. It's represented by a unique short name and full path on base file system. We can mark links with a set of tags, later used as filters at node hierarchy. For our concept we stick only with folders. Files are too small an entity and mostly in big quantities, to manage them by tags. They can be organized by the default file system.
Node hierarchy is our tag representation in a tree folder structure. It consists of nodes (Hierarchy nodes), and leaves (Links). For each node we can setup one tag, set of sub-nodes, mode, and unique position in the existing node hierarchy. The mode of hierarchy node defines which links will be listed.
Hierarchy node modes:
The first mode, All lists all links available in our hierarchy under the targeted node. There are no filter criteria applied. The second mode, Links lists links filtered by tags from path corresponding to the targeted node. In other words - only those links are listed which contain all tags assigned to tag nodes on the path from root node to targeted node. And the last, third mode None doesn't list any links at targeted node.
Tagxfs supports help for all commands and subcommands through the help command.
Node hierarchy is stored in sql3lite repository. We have two ways how to define it's location.
After we setup a repository path, we need to create an instance. We can do that using the database create command.
Before we can create a node hierarchy, it's necessary to define tags. For operations with tags we have these commands available: tag add|list|remove
We need to separate void tags from filter tags. Newly added tags are filter tags by default. We can change that using the tag set filter command.
After we have added the tags we can create a node hierarchy. We will create hierarchy nodes by assigning tags to specific locations. For operations with hierarchy nodes we have following commands available: hierarchy add|remove|copy|move|list|tree
To list links we need to define a collection mode for each hierarchy node it applies to. By default the hierarchy node doesn't list any. We setup a collection mode using the hierarchy mode command.
Now we can put links into our repository. By entering short name, we will override a default link name extraction from the original path. We can add links using the link add command.
Finally we'll categorize newly added links. We'll use the link tag add command.
We created repository and filled with the data. Let's mount it.