HOME

TheInfoList



OR:

Tagsistant is a
semantic file system Semantic file systems are file systems used for information persistence which structure the data according to their semantics and intent, rather than the location as with current file systems. It allows the data to be addressed by their content ( ...
for the
Linux kernel The Linux kernel is a Free and open-source software, free and open source Unix-like kernel (operating system), kernel that is used in many computer systems worldwide. The kernel was created by Linus Torvalds in 1991 and was soon adopted as the k ...
, written in C and based on
FUSE Fuse or FUSE may refer to: Devices * Fuse (electrical), a device used in electrical systems to protect against excessive current ** Fuse (automotive), a class of fuses for vehicles * Fuse (hydraulic), a device used in hydraulic systems to protec ...
. Unlike traditional file systems that use hierarchies of directories to locate objects, Tagsistant introduces the concept of tags.


Design and differences with hierarchical file systems

In computing, a file system is a type of data store which could be used to store, retrieve and update
files File or filing may refer to: Mechanical tools and processes * File (tool), a tool used to remove fine amounts of material from a workpiece. **Filing (metalworking), a material removal process in manufacturing ** Nail file, a tool used to gentl ...
. Each file can be uniquely located by its
path A path is a route for physical travel – see Trail. Path or PATH may also refer to: Physical paths of different types * Bicycle path * Bridle path, used by people on horseback * Course (navigation), the intended path of a vehicle * Desir ...
. The user must know the path in advance to access a file and the path does not necessarily include any information about the content of the file. Tagsistant uses a complementary approach based on tags. The user can create a set of tags and apply those tags to files, directories and other objects (
devices A device is usually a constructed tool. Device may also refer to: Technology Computing, electronics, mechanisms and telecommunication * Appliance, a device for a particular task * Computer, a computing device * Device file, an interface of a pe ...
,
pipes Pipe(s), PIPE(S) or piping may refer to: Objects * Pipe (fluid conveyance), a hollow cylinder following certain dimension rules ** Piping, the use of pipes in industry * Smoking pipe ** Tobacco pipe * Half-pipe and quarter pipe, semi-circu ...
, ...). The user can then search all the objects that match a subset of tags, called a query. This kind of approach is well suited for managing user contents like pictures, audio recordings, movies and text documents but is incompatible with system files (like libraries, commands and configurations) where the univocity of the path is a
security Security is protection from, or resilience against, potential harm (or other unwanted coercion). Beneficiaries (technically referents) of security may be persons and social groups, objects and institutions, ecosystems, or any other entity or ...
requirement to prevent the access to a wrong content.


The tags/ directory

A Tagsistant file system features four main directories: * archive/ * relations/ * stats/ * tags/ Tags are created as sub directories of the tags/ directory and can be used in queries complying to this syntax: :tags/subquery/ /subquery/[+/subquery//@/ where a subquery is an unlimited list of tags, concatenated as directories: :tag1/tag2/tag3/.../tagN/ The portion of a path delimited by tags/ and @/ is the actual query. The +/ operator joins the results of different sub-queries in one single list. The @/ operator ends the query. To be returned as a result of the following query: :tags/t1/t2/+/t1/t4/@/ an object must be tagged as both t1/ and t2/ or as both t1/ and t4/. Any object tagged as t2/ or t4/, but not as t1/ will not be retrieved. The query syntax deliberately violates the POSIX file system semantics by allowing a path token to be a descendant of itself, like in tags/t1/t2/+/t1/t4/@ where t1/ appears twice. As a consequence a recursive scan of a Tagsistant file system will exit with an error or endlessly loop, as done by
Unix Unix (, ; trademarked as UNIX) is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
find: ~/tagsistant_mountpoint$ find tags/ tags/ tags/document tags/document/+ tags/document/+/document tags/document/+/document/+ tags/document/+/document/+/document tags/document/+/document/+/document/+ .. This drawback is balanced by the possibility to list the tags inside a query in any order. The query tags/t1/t2/@/ is completely equivalent to tags/t2/t1/@/ and tags/t1/+/t2/t3/@/ is equivalent to tags/t2/t3/+/t1/@/. The @/ element has the precise purpose of restoring the POSIX semantics: the path tags/t1/@/directory/ refers to a traditional directory and a recursive scan of this path will properly perform.


The reasoner and the relations/ directory

Tagsistant features a simple
reasoner A semantic reasoner, reasoning engine, rules engine, or simply a reasoner, is a piece of software able to infer logical consequences from a set of asserted facts or axioms. The notion of a semantic reasoner generalizes that of an inference engine ...
which expands the results of a query by including objects tagged with related tags. A relation between two tags can be established inside the relations/ directory following a three level pattern: :relations/tag1/rel/tag2/ The rel element can be ''includes'' or ''is_equivalent''. To include the ''rock'' tag in the ''music'' tag, the Unix command mkdir can be used: :mkdir -p relations/music/includes/rock The reasoner can recursively resolve relations, allowing the creation of complex structures: :mkdir -p relations/music/includes/rock :mkdir -p relations/rock/includes/hard_rock :mkdir -p relations/rock/includes/grunge :mkdir -p relations/rock/includes/heavy_metal :mkdir -p relations/heavy_metal/includes/speed_metal The web of relations created inside the relations/ directory constitutes a basic form of
ontology Ontology is the philosophical study of existence, being. It is traditionally understood as the subdiscipline of metaphysics focused on the most general features of reality. As one of the most fundamental concepts, being encompasses all of realit ...
.


Autotagging plugins

Tagsistant features an ''autotagging'' plugin stack which gets called when a file or a symlink is written. Each plugin is called if its declared
MIME type In information and communications technology, a media type, content type or MIME type is a two-part identifier for file formats and content formats. Their purpose is comparable to filename extensions and uniform type identifiers, in that they ide ...
matches The list of working plugins released with Tagsistant 0.6 is limited to: * text/html: tags the file with each word in </code> and <code><keywords></code> elements and with ''document'', ''webpage'' and ''html'' too * image/jpeg: tags the file with each <div class="linkinfo_desc"><a class = "desc_only" href="/html/ALL/l/E/Exchangeable_image_file_format.html" "title="Exchangeable image file format">Exif</a><span class="linkinfotext"> Exchangeable image file format (officially Exif, according to JEIDA/JEITA/CIPA specifications) is a standard that specifies formats for images, sound, and ancillary tags used by digital cameras (including smartphones), scanners and other system ...<br></span></div> tag <h1><br><p> The repository</h1></p> Each Tagsistant file system has a corresponding repository containing an <code>archive/</code> directory where the objects are actually saved and a <code>tags.sql</code> file holding tagging information as an <div class="linkinfo_desc"><a class = "desc_only" href="/html/ALL/l/S/SQLite.html" "title="SQLite">SQLite</a><span class="linkinfotext"> SQLite ( "S-Q-L-ite", "sequel-ite") is a free and open-source relational database engine written in the C programming language. It is not a standalone app; rather, it is a library that software developers embed in their apps. As such, it ...<br></span></div> database. If the <div class="linkinfo_desc"><a class = "desc_only" href="/html/ALL/l/M/MySQL.html" "title="MySQL">MySQL</a><span class="linkinfotext"> MySQL () is an Open-source software, open-source relational database management system (RDBMS). Its name is a combination of "My", the name of co-founder Michael Widenius's daughter My, and "SQL", the acronym for Structured Query Language. A rel ...<br></span></div> database engine was specified with the <code>--db</code> argument, the <code>tags.sql</code> file will be empty. Another file named <code>repository.ini</code> is a <div class="linkinfo_desc"><a class = "desc_only" href="/html/ALL/l/G/GLib.html" "title="GLib">GLib</a><span class="linkinfotext"> GLib is a bundle of three (formerly five) low-level system libraries written in C and developed mainly by GNOME. GLib's code was separated from GTK, so it can be used by software other than GNOME and has been developed in parallel ever since ...<br></span></div> ini store with the repository configuration. Tagsistant 0.6 is compatible with the MySQL and Sqlite dialects of SQL for tag reasoning and tagging resolution. While porting its logic to other SQL dialects is possible, differences in basic constructs (especially the INTERSECT SQL keyword) must be considered. <h1><br><p> The archive/ and stats/ directories</h1></p> The <code>archive/</code> directory has been introduced to provide a quick way to access objects without using tags. Objects are listed with their inode number prefixed. The <code>stats/</code> directory features some read-only files containing usage statistics. A file <code>configuration</code> holds both compile time information and current repository configuration. <h1><br><p> Main criticisms</h1></p> It has been highlighted that relying on an external database to store tags and tagging information could cause the complete loss of metadata if the database gets corrupted. It has been highlighted that using a flat namespace tends to overcrowd the <code>tags/</code> directory.<ref></ref> This could be mitigated introducing <a class="link_plain"; href="/html/ALL/l/T/Tag_(metadata)#Triple_tags.html" ;"title="Tag (metadata)#Triple tags">triple tags</a>. <h1><br><p> See also</h1></p> *<div class="linkinfo_desc"><a class = "desc_only" href="/html/ALL/l/S/Semantic_file_system.html" "title="Semantic file system">Semantic file system</a><span class="linkinfotext"> Semantic file systems are file systems used for information persistence which structure the data according to their semantics and intent, rather than the location as with current file systems. It allows the data to be addressed by their content ( ...<br></span></div> <h1><br><p> References</h1></p> <h1><br><p> External links</h1></p> * <br><a href="https://aur.archlinux.org/packages/tagsistant/" target="_blank" class="mw-redirect" title="Arch Linux package">Arch Linux package</a><br>{{Webarchive, url=https://web.archive.org/web/20190828100413/https://aur.archlinux.org/packages/tagsistant/ , date=2019-08-28 <br><a href="https://news.ycombinator.com/item?id=2573318" target="_blank" class="mw-redirect" title="Discussion on Hacker News">Discussion on Hacker News</a><br><br><a href="ttp://www.lesbonscomptes.com/pages/tagfs" target="_blank" class="mw-redirect" title=""></a><br><br><a href="http://lakm.us/logit/2010/03/tagsistant-on-production-2/" target="_blank" class="mw-redirect" title="Tagsistant On Production">Tagsistant On Production</a><br> <a class="link_plain"; href="/html/ALL/l//.html" ;"title="Computer file systems">Computer file systems</a> <a class="link_plain"; href="/html/ALL/l//.html" ;"title="Data management">Data management</a> <a class="link_plain"; href="/html/ALL/l//.html" ;"title="Semantic file systems">Semantic file systems</a> </div> <div id="AdvertBottom1"> </div> <center> <script src="/js/AdvertBottom1.js"> </script> </center> <footer> <div> <br><br> <br><br> <center> <br><a target="_top" href="../index.html"> HOME </a><br> <br>Content is Copyleft<br>Website design, code, and AI is Copyrighted (c) 2014-2017 by Stephen Payne<br><br> <a target="_top" href="https://donate.wikimedia.org/w/index.php?title=Special:LandingPage&country=US&uselang=en&utm_medium=sidebar&utm_source=donate&utm_campaign=C13_en.wikipedia.org"> Consider donating to Wikimedia </a><br> <br> As an Amazon Associate I earn from qualifying purchases <br> </center> </div> </footer> <div id="AddedByJS"> </div> <script src="/js/site.js"> </script> <!--#include file="inc/summary_footer.html" --> </body></html><script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"rayId":"96d56dfadfbaab34","version":"2025.7.0","r":1,"serverTiming":{"name":{"cfExtPri":true,"cfEdge":true,"cfOrigin":true,"cfL4":true,"cfSpeedBrain":true,"cfCacheStatus":true}},"token":"fc5b6e05c2b44469a46b142680c2eb98","b":1}' crossorigin="anonymous"></script>