-
Notifications
You must be signed in to change notification settings - Fork 39
Add per entry and per property meta data field. #463
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 40 commits
4170937
92c4d92
6fae33d
d343a86
54b632c
5d186d9
cb63bf2
d0a4e65
9e64a3a
498f1f5
6cfe92f
1414c55
81f2f96
b69b0e8
478a572
d3b7050
8ed79b5
f1e179c
a60eb5c
df40172
d16e97c
1e81988
6f56a17
97a0435
00a7a08
7099a69
09fffea
cceabb5
45b98b8
b95c465
134a906
078f174
e15aaff
9c4417f
b36c372
cc42d8f
52ad0c0
62f987d
aaddc82
656e1fb
4feb8e1
6992038
6ffe550
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -492,6 +492,80 @@ Below follows an example of the :field:`data` and :field:`meta` parts of a respo | |||||
| // ... | ||||||
| } | ||||||
|
|
||||||
| Metadata properties | ||||||
| ------------------- | ||||||
|
|
||||||
| A metadata property represents entry and property-specific metadata for a given entry. | ||||||
| How these are communicated in the response depends on the response format. | ||||||
| For the JSON response format, the metadata properties are stored in the resource object metadata field, :field:`meta` in a dictionary field :field:`property_metadata` with the keys equal to the names of the respective properties for which metadata is available; see `JSON Response Schema: Common Fields`_. | ||||||
|
rartino marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| The format of the metadata property is specified by the field :field:`x-optimade-metadata-definition` in the Property Definition of the field, see `Property #Definitions`_. | ||||||
|
merkys marked this conversation as resolved.
Outdated
|
||||||
| Database providers are allowed to define their own metadata properties in :field:`x-optimade-metadata-definition`, but they MUST use the database-provider-specific prefix even for metadata for database-specific fields. | ||||||
|
rartino marked this conversation as resolved.
Outdated
|
||||||
| For example, the metadata property definition of the field :field:`_exmpl_example_field` MUST NOT define a metadata field named, e.g., :field:`accuracy`; the field rather needs to be named, e.g., :field:`_exmpl_accuracy`. | ||||||
| The reason for this limitation is to avoid name collisions with metadata fields defined by the OPTIMADE standard in the future that apply also to database-specific data fields. | ||||||
|
|
||||||
| Implementation of the :field:`meta` field is OPTIONAL. | ||||||
| However, when an implementation supports the :field:`property_metadata` field, it SHOULD include metadata fields for all fields present in the data part of the response which has metadata. | ||||||
|
|
||||||
| Example of a response in the JSON response format with two structure entries that each include a metadata property for the attribute field :field:`element_ratios` and the database-specific per entry metadata field :field:`_exmpl_uploader` : | ||||||
|
rartino marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| .. code:: jsonc | ||||||
| { | ||||||
| "data": [ | ||||||
| { | ||||||
| "type": "structures", | ||||||
| "id": "example.db:structs:0001", | ||||||
| "attributes": { | ||||||
| "element_ratios":[0.33336, 0.22229, 0.44425] | ||||||
| }, | ||||||
| "meta": { | ||||||
| "property_metadata": { | ||||||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @sauliusg @giovannipizzi Right, what did we end up saying about this name? I was somewhat in favor of "property_metadata" since this is the metadata channel for metadata of OPTIMADE properties when implemented in the JSON response format. I suppose one can argue that OPTIMADE properties are implemented in the JSON response format as attributes (except for id, type...) and as such, naming the channel "attributes_metadata" also makes some sense. Any thought on this? Do we care at all? I'm assuming @JPBergsma prefers "attributes_metadata" since he proposes the change.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I prefer "property" as this is the term used in OPTIMADE specification. Term "attributes" is specific to JSON:API, thus I would suggest us not to tie with it. If in future alongside JSON:API we introduce XML representation with OPTIMADE terms, having both "properties" and "attributes" may add unnecessary confusion.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sorry, I did not realize this suggestion was already posted. |
||||||
| "element_ratios": { | ||||||
| "_exmpl_originates_from_project": "piezoelectic_perovskites" | ||||||
| } | ||||||
| } | ||||||
| } | ||||||
|
rartino marked this conversation as resolved.
|
||||||
| }, | ||||||
| { | ||||||
| "type": "structures", | ||||||
| "id": "example.db:structs:1234", | ||||||
| "attributes": { | ||||||
| "element_ratios":[0.5, 0.5] | ||||||
| }, | ||||||
| "meta": { | ||||||
| "property_metadata":{ | ||||||
| "element_ratios": { | ||||||
| "_exmpl_originates_from_project": "ferroelectric_binaries" | ||||||
| } | ||||||
| } | ||||||
| } | ||||||
|
JPBergsma marked this conversation as resolved.
rartino marked this conversation as resolved.
|
||||||
| } | ||||||
| //... | ||||||
| ] | ||||||
| // ... | ||||||
| } | ||||||
|
|
||||||
| Example of the corresponding metadata property definition contained in the field :field:`x-optimade-metadata-definition` which is placed in the property definition of :field:`element_ratios`: | ||||||
|
|
||||||
| .. code:: jsonc | ||||||
| // ... | ||||||
| "x-optimade-metadata-definition": { | ||||||
| "title": "Metadata for the element_ratios field", | ||||||
| "description": "This field contains the per-entry metadata for the element_ratios field.", | ||||||
| "x-optimade-type": "dictionary", | ||||||
| "x-optimade-unit": "inapplicable", | ||||||
| "type": ["object", "null"], | ||||||
| "properties" : { | ||||||
| "_exmpl_originates_from_project": { | ||||||
| "$id": "https://properties.example.com/v1.2.0/element_ratios_meta/_exmpl_originates_from_project", | ||||||
| "description" : "A string naming the internal example.com project id where this property was added to the database.", | ||||||
| "x-optimade-type": "string", | ||||||
| "x-optimade-unit" : "inapplicable" | ||||||
| } | ||||||
| } | ||||||
| } | ||||||
| // ... | ||||||
|
rartino marked this conversation as resolved.
|
||||||
|
|
||||||
| Responses | ||||||
| ========= | ||||||
|
|
||||||
|
|
@@ -643,7 +717,12 @@ Every response SHOULD contain the following fields, and MUST contain at least :f | |||||
| - **data**: The schema of this value varies by endpoint, it can be either a *single* `JSON API resource object <http://jsonapi.org/format/1.0/#document-resource-objects>`__ or a *list* of JSON API resource objects. | ||||||
| Every resource object needs the :field:`type` and :field:`id` fields, and its attributes (described in section `API Endpoints`_) need to be in a dictionary corresponding to the :field:`attributes` field. | ||||||
|
|
||||||
| Every resource object MAY also contain a :field:`meta` field with the following keys: | ||||||
| Every resource object MAY also contain a :field:`meta` field which MAY contain the following keys: | ||||||
|
|
||||||
| - **property_metadata**: an object containing per-entry and per-property metadata. | ||||||
| The keys are the names of the fields in :field:`attributes` for which metadata is available. | ||||||
| The values belonging to these keys are dictionaries containing the relevant metadata fields. | ||||||
| See also `Metadata properties`_ | ||||||
|
|
||||||
| - **partial_data_links**: an object used to list links which can be used to fetch data that has been omitted from the :field:`data` part of the response. | ||||||
| The keys are the names of the fields in :field:`attributes` for which partial data links are available. | ||||||
|
|
||||||
Uh oh!
There was an error while loading. Please reload this page.