Thanks Michael for suggesting FtanML. It's my first time to get
to know FtanML.
After a quick look at it, I agree that FtanML and Mark indeed
share many similarities.
One slight difference is that FtanM allows any value as content,
but Mark currently only allows text, comment and element.
That is also a concern that I have when designing Mark. Should it
be generalized to allow any value in content? Do we have any solid
usecase for storing number and boolean in content? They are
probably not needed for normal mixed content usage.
I know XML Schema allows primitive values as element content. But
personally, I don't like that, and prefer to use attribute for
those usecases.
Like to hear from the community. Should an element/object content
be allowed to contain all kinds of primitive values?
Regards
Henry
On Fri 26/1/18 1:24 AM, Michael Kay
wrote:
It's not clear what mixed content ends up looking
like: getting that right is one of the key design challenges.
Getting critical mass in terms of take-up of an idea
like this is not easy. Preconditions include:
* a clean design
* open source implementations for a sufficient
number of important platforms
* a strong recognition in the user community that
existing solutions aren't good enough
* early influential adopters
* a competitive technology stack including tools for
authoring, editing, validating, transforming
* a large amount of luck
Michael Kay
Saxonica
Dear all,
I am happy to announce the first public beta release of
Mark - a simple notation that unifies JSON and XML.
You can find out more about it at https://mark.js.org/
Objective Markup Notation,
abbreviated as Mark or {mark}, is a new unified notation
for both object and markup data. The notation is a
superset of what can be represented by JSON, HTML and
XML, but overcomes many limitations these popular data
formats, yet still having a very clean syntax and simple
data model.
Mark Sample
Below is a sample Mark object, representing a
simple registration form:
{form // object type-name 'form'
{!-- comment --} // Mark pragma, similar to HTML comment
{div class:"form-group" // nested Mark object
{label for:"email" // object with property 'for'
"Email address:" // text needs to be quoted
}
{input type:"email", id:"email"} // object without any contents
}
{div class:"form-group"
{label for:"pwd" "Password"}
{input type:"password", id:"pwd"}
}
{button class:['btn','btn-info'] // property with complex values
'Submit' // text quoted with single quote
}
}
Mark Data Model
Mark object has a very clean and simple
data model. Each Mark object has 3 facets of data:
- Type name,
which is mapped to
object.constructor.name
under _javascript_.
- Properties,
which is a collection of key-value pairs, stored
as normal _javascript_ named
properties.
- Contents,
which is a list of content objects, stored as indexed properties inside the same
_javascript_ object.
Mark utilizes a novel feature in
_javascript_ that a plain JS object is actually array-like. It can contain both
named properties and indexed properties.
Mark vs. JSON
Mark is a superset of JSON. It extends
JSON notation with a type-name, and a list of
content objects. Comparing to JSON, Mark has the
following advantages:
- It has a type-name, which is important
in identifying what the data represents; whereas
JSON is actually an anonymous object, missing the
type name.
- It can have nested content, which is
common in all markup formats, and thus allows Mark
to convenient represent document-oriented data,
which is awkward for JSON.
- It incorporates most of the
enhancements of JSON5 to
JSON (e.g. allowing comments, property name
without quotes, etc.), and makes the format more
friendly for human.
Some disadvantages of Mark, comparing to
JSON would be:
- It is no longer a strict subset of
_javascript_ in syntax, although a Mark object is
still a simple POJO.
- It does not yet have wide support, like
JSON, at the moment.
Mark vs. XML
Comparing to XML, Mark has the following
advantages:
- Mark properties can have complex object as
value; whereas XML attribute values always need to be
quoted and cannot have complex object as value, which
is not flexible in syntax and data model.
- Mark syntax is much cleaner than XML. It
does not have all the legacy things like DTD, and it
does not have whitespace ambiguity.
- The data model produced by Mark is fully
typed, like JSON; whereas XML is only semi-typed
without schema.
What do you think?
With an unified notation and data model, one
set of tools (parser, selector, query, validator,
transformer, ...) can be used to process data previously
stored in JSON, HTML or XML.
Do you thing Mark is a better generic data
format than JSON or XML? Do you think it is worth all
the effort to migrate to this new notation? ...
Looking forward to hear your feedback!
Regards
Henry
|