# Metadata
Metadata is data that provides information about other data.
— Wikipedia (Metadata)
All document formats require some form of metadata, and KDF is no different. KDF powered applications can use metadata for statistical purposes, for orienting new document authors, and for much more.
# Metadata Store
In KDF, metadata is stored within the metadata.json file as key-value pairs.
Each key is a string in lower camelCase (e.g. "editDuration"), and each value
can be any valid JSON type.
NOTE
There are some required key-value pairs that will be discussed in the next section. Other than these, application developers are free to use the metadata store as they see fit.
{
"title": "15 Reasons Comic Sans is the World's Greatest Font",
"authors": [
"Sean Bailey",
"Adam Crocker",
"Prajna Sariputra",
"Luke Ingram",
"David Abraham"
],
"createdAt": "2019-02-01T12:59:15+11:00",
"updatedAt": "2019-11-17T11:38:23+11:00",
"editDuration": "P0Y11M4DT12H30M5S",
"supportedMediums": ["print", "web"],
"kdfVersion": "0.1.0-alpha"
}
# Required Metadata
The following items must be defined in the metadata store, in order maximise compatibility between applications. Items have been listed in alphabetical order, but may be defined in any order.
# Authors
| Type | Maximum String Length |
|---|---|
| Array<String> | 128 chars |
The authors key provides a human readable list of names, where each name
belongs to an author that contributed to the document. An author's name will
only be added once a modification is made, and never from simply opening the
document.
{
"title": "On Colour and Brand Identity",
"authors": ["Sean Bailey"],
...
}
# Created At
| Type | Format | Standard |
|---|---|---|
| String | Datetime | ISO 8601 |
The createdAt key contains the date and time that the document was originally
created. Applications should automatically determine this value when a new
document is created, not when it is saved for the first time.
{
...,
"createdAt": "2019-08-03T02:37:12+11",
...
}
# Edit Duration
| Type | Format | Standard |
|---|---|---|
| String | Duration | ISO 8601 |
Edit duration is used purely for statistical purposes, and should be tracked by all applications. Note that this value does not track total edit time across all contributors, but rather the total amount of time the document has been open. In other words, if 5 authors are editing a document simultaneously for 1 hour, the total duration will be 1 hour, not 5.
{
...,
"editDuration": "PT12H30M5S",
...
}
# KDF Version
| Type | Standard |
|---|---|
| String | Semver 2.0.0 |
The KDF version key defines the version of KDF that was used to build the document. Applications can use this value to automatically upgrade KDF documents with migrations. When creating new documents, be sure to always use the latest version of KDF.
{
...,
"kdfVersion": "1.0.5",
...
}
# Supported Mediums
| Type | Possible Values |
|---|---|
| String[] | web or print |
The supportedMediums key defines whether this document has been designed for
use in print (e.g. as a PDF) and/or for the web. Application developers can use
this value to provide different tools depending on the mediums that the document
supports.
{
...,
"supportedMediums": ["print", "web"],
...
}
# Title
| Type | Maximum Length |
|---|---|
String or null | 256 chars |
Every document must have a human readable title. Application developers may wish to prompt the author for a title when the document is created, but this is not a requirement.
{
"title": "The Lincolnshire Poacher",
...
}
# Updated At
| Type | Format | Standard |
|---|---|---|
| String | Datetime | ISO 8601 |
The updatedAt key contains the date and time that the document was last edited.
Initially, this value will be set to the same timestamp as the createdAt
key, but will diverge once the first modification to the document is made.
NOTE
Much like the createdAt key, this value should be updated whenever an
edit to the document is made, not when the document is saved.
{
...,
"updatedAt": "2019-08-03T02:37:12+11",
...
}