Tag Vector Series: Table of Contents
- Tag Vector: Part 0: Introduction
- Tag Vector: Part 1: Tag Vector Convention
- Tag Vector: Part 2: History of the Tag Vector Convention
- Tag Vector: Part 3: Future of Tag Vector System
Tag Vector is a system to connect "tags" with vector arrows. The vector demonstrates the contextual relationship between tags. The tags are in relation to each other. The relationships between tags are relative to each other on inference levels. A tag in a vector has a higher ↑
, lower ↓
$, or the same inference level compared to other tags. [1].
The tag person
has a higher inference level than name
as name
is an attribute of person
.
const person_name = 'Elon Musk'
// person & name are connected as a 1 dimensional right-arrow vector: person->name
// person & name are tags
Inferred vectors can also run left
<-
Is inference, vectors can also be in the left direction:
const name_person = 'Elon Musk' // name is inferred to be downstream of person // The vector is name<-person
Default Direction when tags are on the same inferential level
If two tags are on the same inferential level, such as
person
&company
, the vector arrow will be->
by default.const person_company = { name: 'SpaceX' } // person->company
The default direction can also be
<-
(left). A<-
default direction should be documented. Future tooling will include the default direction for code & text analysis.// <- default const company_company = { name: 'SpaceX' } // company<-person
Overriding the Default Direction
The default direction can be overridden in code with a comment above or before the statement.
// <- const company_company = { name: 'SpaceX' } // company<-person
Tag Vectors with 3 or more tags
A tag vector composes of any number of tags. Apply the inference level rules to the first & last tag. In the following case:
const company_person_name = 'Elon Musk' // inferred as company->person->name
Infer the
company
&name
tags against each other.company
has a higher inference level thanname
so the inferred direction is->
. Conversely:const name_person_company = 'Elon Musk' // inferred as name<-person<-company
is in the
<-
direction from inferringname
having a lower inference level thancompany
.An ambiguous inference level follows the same rules above:
const person_registry_company = { name: 'SpaceX' } // person->registry->company
or
// <- default const company_registry_person = { name: 'SpaceX' } // company<-registry<-person
multi-dimension tag vectors
Compose tag vectors into a multi-dimension tag vector.
const highest_net_worth__company_person_name = 'Elon Musk' // highest->net->worth-->company->person->name
The multi-vector is composed to two vectors
highest->net->worth
&company->person->name
with a-->
. Note there are two underscores__
used to join the single underscore_
tag vectors.Additional dimensions can be chained together:
const as_of_2023__highest_net_worth__company_person_name = 'Elon Musk' // as->of->2023-->highest->net->worth-->company->person->name
The inference levels of the name vectors are compared, with the more abstract has a higher inference level than the concrete. In grammar, the predicate
as->of->2023
has a higher inference level than the subjectcompany->person->name
.Continuing with inference levels in grammar; an adjective, adverb, preposition, or conjunction
as
would be more abstract than a noun2023
.
Data Structure Shape
The Tag Vector Convention can encode the shape of the data structure.
Array
const company_person_name_a = [ 'Elon Musk', 'Mark Zuckerberg', ] // company->person->name->a(array)
Multi-dimensional Array
const company_a_person_name_aa = [ ['Elon Musk', 'Zachary Kirkhorn'], ['Mark Zuckerberg', 'Susan Li'], ] // company->a->person_name->aa // A 2-dimensional array, company x person_name
Higher dimensions can also use a number to express the dimensionality.
const d1_a_d2_a2_d3_a3_d4_a4:number[][][][] = [ // d1 [ // d2 [ // d3 [ // d4 1 ] ] ] ]
Record
const company_id_R_ceo_name:Record<string, string> = { 'tesla': 'Elon Musk', 'facebook': 'Mark Zuckerberg', }
Map
const company_id_M_ceo_name:Map<string, string> = new Map([ ['tesla', 'Elon Musk'], ['facebook', 'Mark Zuckerberg'], ])