Jane's Table Description

The ease of communication for the actions that are to be applied to information structures is critical to any software development project. Having used many Assemblers, Compilers, and scripting languages I can find no approach that works. I am therefore going to describe my approach. First I will redefine the terms for our programming structures, and second I will define the language to communicate actions on these structures.

Jane's primary objective is to eliminate the need for documentation.  I find that documentation has no real meaning to the actions that are being performed.  The nouns (variable names) used in current technologies do not imply context, nor do the verbs (function names) imply explicit action, which are the main reasons for documentation.  By using common knowledge we can create a technology that needs no documentation.

I looked at Python and R as two of the languages that implement the table structure. They have over 10,000 PDF pages of documentation needed to program their different structures. JavaScript does not have a table structure and requires new programming for each implementation.

If I dissect the table structure I find familiar terms and structures, therefore I will not create new terminology.

The Cell is the only element type that the Jane system has, It has the same characteristics as an n-dimensional table

Cell: a single named value, referenced by name or number ( a single row, single column Table) Name = 'clif'


Row: A set of cells referenced by Name (a single row Table)  A.name = 'clif'

  Name Age Address

Column: A set of cells referenced by Number (a single column Table)  A.1 = 'clif'



Table:  a set of rows and columns  A.1.name = 'clif'

  Name Age Address


Block: A Row or Column of tables.  A.1.1.name = 'clif'

These five terms will be the ones used by Jane to build every other structure.  The terms Cell, Row, Column, Table, and Block are identical, the only difference is when they are labeled: Every structure has the same capabilities and programming syntax.
Table Matrix Grid Graph
  Name Address
  1 2
  1 2
  January February


The terms Row and Column are used in a context: When in context of their internal addressing of a Cell the term is explicit, A Row is addressed and labeled by Name, and a Column is addressed and labeled by Number. When reference to the vertical cells they are columns, and the horizontal cells are termed rows.  The actual implementation of a Row and a Column is the same, both can be referenced by name or by number.

I shall use upper case Row and Column as their internal use, and as lower case for the horizontal row, and vertical column

Cell Structure

A Cell has a Name, Index, Offset and Data Type which can be implicit from the container structure or explicit. 


Grouping of rows is done as horizontal named partitions, and columns as vertical named partitions. The Row structures are partitioned by cell name, by cell index or by cell content, and the Column structures are partitioned by cell Index or by cell content. A partition is a physical characteristic of a structure.


Cells can be selected by partition name(s), by a list of row and/or column indexes, offsets, or names, by a row, column, or matrix bitmap, or by a function to select cells by content.

Table / Matrix / Graph Qualifiers

  • column definition
    • names
    • indexes -- selection and order of a columns
    • data types-- format of the columns
  • row definition
    • names
    • indexes -- selection and order of the rows
  • row groups
    • label
    • indexes


Accessing the cells in the structure. Each variable is a cell of n-dimensions and can be accessed with or without dimensional references.

Any simple variable can be referenced as a 1 unit n-dimensional table.  A = 1,  A[1] = 1,  A[1,1] = 1, A[1,1,1] = 1;

  • vertical partition name
  • horizontal partition name
  • row name, index, or offset
  • column name, index, or offset
  • block name, index, or offset

A..verticalParitions.B = ['A','B','C']
A..horizontialPartition.get = function () {  }
A..views.top10 = [1-10];
A..columnNames = [price,description];
A..rowNames = [Apple, Pear]
A..rowIndexes = [2,1];