ENTS Specification
Normal Tag -
The Normal Tag is denoted by simple dash. Nesting for a normal tag and all other tag types is four spaces.
Dud Tag +
The Organizational Container vs. Labeler Problem: Let’s say you want to have some tags be used to label objects, and some tags just to organize and contain those tags. For example, you want to label files based on their reading completion and their source format. If you just had plain nested tags, you could accidentally label an object with the literal tag “reading completion” or “format”, which would show up in queries and cause all sorts of issues downstream. So how do you make it so you can’t label objects with organiztiional containers in a human-readable, keyboard-typable format?
If we were to use JSON, there would be no clean and easy way to type it out. Here are the cleanest possible ways to do it:
{ "reading levels": ["not read", "skimmed", "partially read", "read", "re-read"], "format": ["journal", "book", "webpage"] }
[ { "tag": "reading levels", "labeler": false, "children": { {"tag": "not read", "labeler": true, "children": null}, {"tag": "skimmed", "labeler": true, "children": null}, {"tag": "partially read", "labeler": true, "children": null}, {"tag": "read", "labeler": true, "children": null}, {"tag": "re-read", "labeler": true, "children": null} }, { "tag": "format", "labeler": false, "children": { {"tag": "journal", "labeler": true, "children": null}, {"tag": "book", "labeler": true, "children": null}, {"tag": "webpage", "labeler": true, "children": null} } ]
Verbose and unsightly!
To solve this, ENTS introduces the “Dud Tag”, which is an
organizational container for other labelers, but is not a labeler
itself. It is demarked with the +
icon. It is used as
such:
+ Reading Level
- Not Read
- Skimmed
- Partially Read
- Read
- Re-read
+ Format
- Journal
- Book
- Webpage
Much cleaner!
Now you can query files tagged with any reading level, or any material format, or any union of the two, without being able to explicily tag a file with “reading level” or “format” literally.
Exclusive Tag *
For an exclusive tag, an object can be tagged with this tag, but if
it is, than it can’t be tagged by any of it’s children. It is denoted by
an asterix *
. It gets its name “exclusive” from it can
either label a file itself, or its children can label
a file, but not both. This is advantageous where, if you have a category
where you have some tags in it that label many files, and then you have
some other files that could be labeled by the parent tag but there are
not enough of them to warrant making another child tag, and then it
becomes enough of them where it does warrant making a new child
tag, than trying to tag with the new child tag will raise the exclusive
error. This keeps the labeling space clean.
Example:
* instruction sets
- arm
- x86
- risc-v
If I had 10 documents each for ARM, x86, and Risc-V and one document for AVR, it might not warrant creating a new child tag for AVR. So I can tag the AVR documents with the “instruction sets” exclusive tag. The documents tagged with the other instruction sets cannot be tagged with the “instruction sets” exclusive tag, for the sake of keeping a clean tagspace. But if I got more documents for AVR where it does warrant making a new tag “AVR”. Now, if I go to tag my documents with the AVR tag, it will not let it unless the exclusive tag “instruction sets” has been removed, for the sake of a clean tagspace.
Aliases ()
When tagging a file or running a query, it might be faster to have an
alias for frequently used tags or tags with longer names.
Aliases are denoted inside parenthases ()
after a tag’s
regular name. Aliases can be used on regular tags or dud tags.
Example:
+ Reading Level (rl)
- Not Read
- Skimmed
- Partially Read
- Read
- Re-read
Now running lents filter rl
will return any file tagged
with any reading level.
Potential Future Implementations
Scalars[1-N]
- assigns a numeric value for the tag to the object
> Enums[1-N] - Option 1 - Option N
- a scalar with lablers
** Matrix
- makes a matrix between two or more scalars
/ pick-few tag
- you can tag an object with only
one of this tag’s children’s tags. used in conjunction with regular tag
-
, dud tag+
, exclusive tag+-
, or scalars>
& Backreferences
- Makes a link between two tags. If you reference one tag with the other on the same line than whenever you tag an object with that tag the engine automatically tags it with the other tag.
~ Not
- Will probably be used with Matrixes