Mark is a unified notation for both object and markup data, combining the best of JSON, HTML, and XML with a clean syntax and succinct data model.
<form // element with name 'form'
<div class:'form-group' // nested child element
<label for:email // 'for' and its value, both unquoted
"Email address:" // text needs to be double quoted
>
<input type:email, id:email> // element without child
>
<div class:'form-group' // 'form-group' is a quoted symbol
<label for:pwd; "Password"> // pwd is an unquoted symbol
<input type:password, id:pwd> // attrs separated by comma, like JSON
>
<button class:[btn,'btn-info'] // attribute with complex values
"Submit" // comment like in JS!
>
>
Mark combines the best features from popular data formats while eliminating their limitations.
Enjoy a fully-typed data model with clean, readable syntax that's more human-friendly than JSON or XML.
Built-in support for mixed content, making it perfect for document-oriented data that's awkward in JSON.
Unlike HTML's specialized format, Mark is generic and extensible for any data representation needs.
Every Mark element has a name, which can bind to a type. It also has more built-in types than JSON.
Text objects are explicitly quoted, so Mark can be minified or prettified without changing content.
Maps directly to plain JavaScript objects, making it ideal for web and Node.js environments.
Mark extends JSON with additional data types and introduces the Mark element concept.
Mark adds a few new data types to JSON: symbol, datetime, binary, list and element, well covering all the commonly used built-in datatypes in JS.
Mark element = name + map + array.
It maps to just one plain JavaScript object, containing both named and indexed properties. Much more compact and efficient than other
JSON-based DOM models.
Compare the same data structure in different formats.
<form
<'!--'comment>
<div class:'form-group'
<label for:email "Email address:">
<input type:email, id:email>
>
<div class:'form-group'
<label for:pwd; "Password">
<input type:password, id:pwd>
>
<button class:[btn, 'btn-info'] "Submit">
>
{
"type": "form",
"children": [
{
"type": "div",
"class": "form-group",
"children": [
{
"type": "label",
"for": "email",
"children": ["Email address:"]
},
{
"type": "input",
"type": "email",
"id": "email"
}
]
}
]
}
<form>
<!--comment-->
<div class="form-group">
<label for="email">Email address:</label>
<input type="email" id="email">
</div>
<div class="form-group">
<label for="pwd">Password</label>
<input type="password" id="pwd">
</div>
<button class="btn btn-info">Submit</button>
</form>
<form>
<!--comment-->
<div class="form-group">
<label for="email">Email address:</label>
<input type="email" id="email"/>
</div>
<div class="form-group">
<label for="pwd">Password</label>
<input type="password" id="pwd"/>
</div>
<button class="btn btn-info">Submit</button>
</form>
The most salient syntax feature of Mark is the introduction of Mark element.
It is a JSON object extended with a type name and a list of content items, similar to element in HTML and XML. It also allows complex, typed data for its attributes and content.
Mark advantages over JSON:
Mark advantages over HTML:
Mark advantages over XML:
Start using Mark Notation in your projects today.
npm install mark-js --save
const Mark = require('mark-js');
var obj = Mark.parse(`<div <span "Hello World!">>`);
console.log("Greeting from Mark: " + Mark.stringify(obj));
<script src='dist/mark.js'></script>
<script>
var obj = Mark(`<div <span "Hello World!">>`); // using a shorthand
console.log("Greeting from Mark: " + Mark.stringify(obj));
</script>
<script src='https://cdn.jsdelivr.net/npm/mark-js@1.0.0/dist/mark.js'></script>
<script>
var obj = Mark(`<div <span "Hello World!">>`); // using a shorthand
console.log("Greeting from Mark: " + Mark.stringify(obj));
</script>
Everything you need to master Mark Notation.
Mark 1.0 release just marks the start of a long journey to make web a better platform to store and exchange data.
1.0 release just means whatever is released in this version will receive backward compatible support in the foreseeable future like the ever-green HTML.
And some of the planned further enhancements include:
For a new notation to be widely adopted, just defining the syntax and data model is not enough. It needs languages, tools and eco-system to work with it.
Thus a new project, Lambda Script, has been started to develop a general-purpose, pure functional language to validate, query, transform, and present data stored in Mark format.