[Development] RFC: unified data model API in QtCore
thiago.macieira at intel.com
Thu Jun 14 02:08:00 CEST 2018
Out of the serialisation discussion at QtCS 2018, we have a call for action to
discuss the possibility of *not* adding QCborValue in Qt 5.12 and instead add
a generic, data model API that could be used for JSON, CBOR and future uses.
The reason was that we do not need the duplication of very similar-looking
APIs, with the duplication of documentation that goes along with it. Other
languages parse serialised data into their own data structures which provide a
generic access and modification API.
This email is to start that discussion and answer these questions:
a) should we have this API?
b) if so, what would this API look like?
c) if not, should we unify at least JSON and CBOR?
c) either way, should remove QCborValue until we have it?
The current "Qt native" data structure is the trio QVariant, QVariantList and
QVariantMap. It is what some early (pre-Qt5) JSON parsers used, as JSON data
can be losslessly converted to a handful of metatypes. And as long as only
those types were used, the conversion to JSON is also lossless.
This API would also be the replacement of the JSON and CBOR parsers, for which
we'd have a unified API, something like:
QFoo json = QJson::fromJson(jcontent);
QFoo cbor = QCbor::fromCbor(ccontent);
qDebug() << QCbor::toDiagnosticFormat(json); // yes, json
And here's why I am having problems with this proposal: what else? We know we
can have a common API for JSON and CBOR because I've done it (it's QCborValue)
and because CBOR is designed to be compatible with JSON. But what about other
protocols? Are we trying to shoehorn a square peg in a round hole? Recreate
multidimensional hierarchical tables (a.k.a., QAbstractItemModel))?
For example, the next data model over would be XML. And we are indeed missing
a DOM structure for it since we deprecated QDomDocument. Can anyone see a data
structure that works for both JSON/CBOR and generic XML? More importantly, one
that is worthy of being Qt, with nice, intuitive API?
I'm skeptical. What do you think?f
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
More information about the Development