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 object has a type name, eliminating the anonymous object problem that exists in 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.
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>
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.