One of the best pieces of advice I’ve ever gotten was “follow whatever you are interested in”.
About a year ago I started using Obsidian but I was bothered by the limited tagging systems in it and how there were no nested tags - there were add-ons for it but it wasn’t native and I came to find I preferred more minimalistic CLI/UNIX inspired solutions anyways. Implications for researchers who have to comb through a lot of local files trying to find connections between disparate fields. Common file systems including (EXT-4, NTFS, exFAT, APFS) treat tags as flat labels, but this limits hierarchical tag organization and nuanced queries. So, I made the Extendable Nested Tagging Schema, or ENTS.
ENTS is an implementable YAML and command schema. When implemented, the “S” in “ENTS” stands for “System”. Currently it comes in two implementations, MENTS (Metal ENTS) and LENTS (Local ENTS).
Example:
Organic Chemistry:
- Medicinal Chemistry
- Polymer Chemistry:
- Plastic Materials
- Carbon Nanomaterials:
- Carbon Nanotubes
- Graphene
- Petrochemistry
Inorganic Chemistry:
- Coordination Chemistry
- Organometallic Chemistry
A generic xents command will be used here as an example
implementation.
Usage:
xents <command> <operator> <arguments>
ENTS commands use inverse function mapping - one to many, not many to one. This is chosen so the first argument of one type can have many arguments (that are of a different type than the first and are all of a similar type) after it
processTakes a YAML file and processes it to a datafile. Output varies on imlementation.
xents process file.yamlparsetagtofilesUsage:
xents tagtofiles <add|remove|show> <arguments>*
Description: Manages relationships between one tag and many files
Alias: ttf
add
xents tagtofiles add <tag> <files>*assignremove
xents tagtofiles remove <tag> <files>*rmshow
xents tagtofiles show <tags>*filetotagsUsage:
xents filetotags <add|remove> <arguments>*
Description: Manages relationships between one file and many tags
Alias: ftt
add
xents filetotags add <file> <tags>*assignremove
xents filetotags remove <file> <tags>*rmshow
xents filetotags show <files>*filterUsage: xents filter [-flags] <tags>*
Description: Returns files associated with tags. The main command of
MENTS, where the nesting comes into play. Differentiated from the
tagtofiles command, where the nesting does not come into
play.
xents filter <tags>xents filter "organic chemistry" will return
everything that is tagged with something within organic chemistry. If a
file is tagged only with “carbon nanotubes”, it will be returned because
“carbon nanotubes” is a sub-tag in organic chemistry-e
xents filter -e <tags>xents filter -e "organic chemistry" will
return a file marked with “organic chemistry,carbon nanotubes” but not
one with just “carbon nanotubes”.xents tagtofiles show <files>* and is included here
with -e tags for mnemonic purposes-td
xents filter -td <count> <tags>xents filter -td 2 "organic chemistry" will
return everything explicitly tagged with any tag between 0 and 2 layers
down from “organic chemistry”. In this example, files tagged with
“carbon nanomaterials” will be returned but files tagged with only
“carbon nanotubes” will not.-tu <count> -td <count>. For example
xents -tu 1 -td 2 will traverse one node up the tree then
return everything recursively down two layers from that.-tu
xents filter -tu <count>xents -tu 1 "organic chemistry" will traverse
one node up the tag tree then return everything recursively down from
that-td <count> -tu <count>MENTS is a close-to-the-metal implementation of ENTS written in C with a custom binary file format. It is the most hackerish version of ENTS, has the smallest database size, and was made as a low-level learning project. It is not very extendable and the amount of tags possible is limited, so LENTS is also an option.
processThe output for ments process tags.yaml will always be to
a .ments hidden dot-file. This output cannot be changed,
for the sake of parsing.
Each tag ipsodata can vary significantly in length, so an offset table is used to save lots of file space at minimal expense of lookup time. All the attributes in the ipsodata can also vary in length from eachother, so a “tag individual ipsodata part length” field is needed in the metadata. Tag ipsodata offset is the distance measured from (3.3.a). The tag UUID is not neccassary for the tag ipsodata, but is included for debug purposes.
The same heuristics about length variation and UUID-inclusion from (4) apply here. File-to-tags metadata starts at (3.3.b) and file ipsodata offset is the distance measured from (3.3.c).
LENTS (Local ENTS) is an implementation of ENTS written with individual researchers and small research teams in mind. It will likely be a wrapper around Refsplitr and PartiQL/DynamoDB Local, which allows for more customizable queries.