*Names on Nodes*I did a lot of work with MathML (specifically MathML-Content), an application of XML for representing mathematical concepts. But now, as XML wanes and JSON waxes, I've started to look at ideas for porting

*Names on Nodes*concepts over to JSON.

I've been drawing up a very basic and extensible way to interpret JSON mathematically. Each of the core JSON values translates like so:

**Null**,**Boolean**, and**Number**values are interpreted as*themselves*.**Strings**are interpreted as*qualified identifiers*(if they include`":"`

) or*local identifiers*(otherwise).**Arrays**are interpreted as the*application of an operation*, where the first element is a string identifying the operation and the remaining elements are arguments.**Objects**are interpreted either as:- a set of
*declarations*, where each key is a [local] identifier and each value is an evaluable JSON expression (see above), or - a
*namespace*, where each key is a URI and each value is a series of declarations (see previous).

### Examples

Here's a simple object declaring some mathematical constants (approximately):

{ "e": 2.718281828459045, "pi": 3.141592653589793 }

Supposing we had declared some operations (only possible in JavaScript, since JSON doesn't have functions) equivalent to those of MathML (whose namespace URI is

`"http://www.w3.org/1998/Math/MathML"`

), we could do this:{ "x":

["http://www.w3.org/1998/Math/MathML:plus",

1,

2

], "y":

["http://www.w3.org/1998/Math/MathML:sin",

["http://www.w3.org/1998/Math/MathML:divide",

"http://www.w3.org/1998/Math/MathML:pi",

2

]

] }

Once evaluated,

`x`

would be `3`

and `y`

would be `1`

(or close to it, given that this is floating-point math).
Now for the interesting stuff. Suppose we had declared

*Names on Nodes*operations and some taxa using LSIDs:{ "Homo sapiens": "urn:lsid:ubio.org:namebank:109086", "Ornithorhynchus anatinus": "urn:lsid:ubio.org:namebank:7094675", "Mammalia":

["http://namesonnodes.org/ns/math/2013:clade",

["http://www.w3.org/1998/Math/MathML:union",

"Homo sapiens",

"Ornithorhynchus anatinus"

]

]

}

Voilá, a phylogenetic definition of

*Mammalia*in JSON!

I think this could be pretty useful. My one issue is the repetition of long URIs. It would be nice to have a mechanism to import them using shorter handles. Maybe something like this?

{ "mathml": "http://www.w3.org/1998/Math/MathML:*", "namebank": "urn:lsid:ubio.org:namebank:*", "NoN": "http://namesonnodes.org/ns/math/2013:*", "Mammalia":

["NoN:clade",

["mathml:union",

"namebank:109086",

"namebank:7094675"

]

] }

Something to ponder. Another thing to ponder: what should I call this? MathON? MaSON?

## No comments:

## Post a Comment