Version 11 (modified by jri, 13 years ago) (diff) |
---|
Data Format
This page describes the data format of DeepaMehta's core objects (and some non-core objects) as retrieved via the REST API.
Note: The format used in create and update operations differs slightly. See the respective notes on the REST API page.
Topic
A topic object has always 5 properties:
Property | Description | Format |
---|---|---|
id | A system-generated ID. | A number (long), e.g. 2735 |
uri | A globally unique identifier. Typically assigned by human. If no URI is assigned: an empty string. | A string of format <domain>.<project>.<name> |
type_uri | The URI of the topic's type. | A string of format <domain>.<project>.<name>, e.g. ffnet.geomap.access_point |
value | For a simple topic1): the topic's payload. Note: For a complex topic the value is derived from the composite property. | A simple value: string, int, long, or boolean. |
composite | For a complex topic2): a nested object representation. (For a simple topic: an empty object.) | See examples 2 and 3 below. |
1) The term simple topic refers to an instance of a simple topic type. A simple topic type is one of data type "Text", "Number", "Boolean", or "HTML". See Topic Type.
2) The term complex topic refers to an instance of a complex topic type. A complex topic type is one of data type "Composite". It is composed of child topic types (arbitrary depth).
Example 1: a simple topic
{ "id": 2816, "uri": "", "type_uri": "dm4.contacts.city", "value": "Berlin", "composite": { } }
Example 2: a complex topic
{ "id": 2900, "uri": "", "type_uri": "dm4.files.file", "value": "freifunk-geomap.png", "composite": { "dm4.files.file_name": "freifunk-geomap.png", "dm4.files.path": "/home/jri/freifunk-geomap.png", "dm4.files.size": 767016, "dm4.files.media_type": "image/png", "dm4.files.content": "<img src=\"/proxy/file:%2Fhome%2Fjri%2Ffreifunk-geomap.png\"></img>" } }
Example 3: an even more complex topic
{ "id": 2735, "uri": "", "type_uri": "dm4.contacts.person", "value": "Jörg", "composite": { "dm4.contacts.person_name": { "dm4.contacts.first_name": "Jörg", "dm4.contacts.last_name": "Richter" }, "dm4.contacts.phone_entry": { "dm4.contacts.phone_label": "home", "dm4.contacts.phone_number": "123 456 78" }, "dm4.contacts.email_address": "jri@deepamehta.de", "dm4.webbrowser.url": "www.deepamehta.de", "dm4.contacts.address_entry": { "dm4.contacts.address_label": "home", "dm4.contacts.address": { "dm4.contacts.street": "My Street 23", "dm4.contacts.postal_code": "12345", "dm4.contacts.city": "Berlin", "dm4.contacts.country": "Germany" } }, "dm4.notes.text": "<p>Software Developer</p>" } }
Association
An association has 2 ends. At each end there is a topic or an association. So, an association connects either 2 topics, or 1 topic and 1 association, or 2 associations. Both ends are qualified by a Role Type.
An association has the same 5 properties as a Topic plus 2 role properties:
Property | Description | Format |
---|---|---|
id | See Topic | |
uri | ||
type_uri | The URI of the association's type. | A string of format <domain>.<project>.<name>, e.g. dm4.core.aggregation |
value | See Topic | |
composite | ||
role_1 |
One association's end: a pair of a topic/association reference and a role type. | Either { "topic_id": <Topic ID>, "role_type_uri": <Role Type URI> } or { "topic_uri": <Topic URI>, "role_type_uri": <Role Type URI> } or { "assoc_id": <Association ID>, "role_type_uri": <Role Type URI> } |
role_2 | The other association's end. |
Example 1: an association that connects 2 topics
{ "id": 2797, "uri": "", "type_uri": "dm4.core.composition", "value": "", "composite": { }, "role_1": { "topic_id": 2735, "role_type_uri": "dm4.core.whole" }, "role_2": { "topic_id": 2794, "role_type_uri": "dm4.core.part" } }
Example 2: an association that connects a topic with an association
{ "id": 2798, "uri": "", "type_uri": "dm4.core.instantiation", "value": "", "composite": { }, "role_1": { "topic_id": 60, "role_type_uri": "dm4.core.type" }, "role_2": { "assoc_id": 2797, "role_type_uri": "dm4.core.instance" } }
Topic Type
A topic type has the same 5 properties as a Topic plus 4 type-specific ones:
Property | Description | Format |
---|---|---|
id | See Topic | |
uri | A globally unique identifier. Every topic type has an URI. | A string of format <domain>.<project>.<name> |
type_uri | Fixed. | "dm4.core.topic_type" |
value | The topic type's name. Readable by human. | An arbitrary string. Can contain spaces and special characters. |
composite | Fixed. | {} |
data_type_uri | The topic type's data type. That is the data type of one instance's payload. dm4.core.composite denotes a complex topic type which is composed of child types. The other 4 data types denote a simple topic type. | One of these 5 strings: "dm4.core.text" "dm4.core.number" "dm4.core.boolean" "dm4.core.html" "dm4.core.composite" |
index_mode_uris | For simple topic types: Controls how the topic instance's payload is indexed. Default is no indexing. For complex topic types: not used. | An array with zero or more of these strings: "dm4.core.off" "dm4.core.key" "dm4.core.fulltext" "dm4.core.fulltext_key" See Index Modes |
assoc_defs | For complex topic types: a list of child type definitions. Each definition references a child type and provides further declarations, e.g. cardinalities. For simple topic types: not used. | An array of child type definitions. See Association Definition1) |
view_config_topics | View models for various clients. | An array of view configuration topics. See View Configuration |
1) Association Definition is a legacy term but still reflected by the property name. It should be renamed to Child Type Definition. The respective property should be renamed to child_type_defs.
Example 1: a simple topic type
{ "id": 943, "uri": "dm4.webbrowser.url", "type_uri": "dm4.core.topic_type", "value": "URL", "composite": { }, "data_type_uri": "dm4.core.text", "index_mode_uris": [ "dm4.core.key", "dm4.core.fulltext" ], "assoc_defs": [ ], "view_config_topics": [ ] }
Example 2: a complex topic type
{ "id": 959, "uri": "dm4.webbrowser.web_resource", "type_uri": "dm4.core.topic_type", "value": "Web Resource", "composite": { }, "data_type_uri": "dm4.core.composite", "index_mode_uris": [ ], "assoc_defs": [ { "id": 964, "uri": "dm4.webbrowser.url", "assoc_type_uri": "dm4.core.composition_def", "whole_topic_type_uri": "dm4.webbrowser.web_resource", "whole_role_type_uri": "dm4.core.whole", "whole_cardinality_uri": "dm4.core.one", "part_topic_type_uri": "dm4.webbrowser.url", "part_role_type_uri": "dm4.core.part", "part_cardinality_uri": "dm4.core.one", "view_config_topics": [ ] }, { "id": 974, "uri": "dm4.webbrowser.web_resource_description", "assoc_type_uri": "dm4.core.composition_def", "whole_topic_type_uri": "dm4.webbrowser.web_resource", "whole_role_type_uri": "dm4.core.whole", "whole_cardinality_uri": "dm4.core.one", "part_topic_type_uri": "dm4.webbrowser.web_resource_description", "part_role_type_uri": "dm4.core.part", "part_cardinality_uri": "dm4.core.one", "view_config_topics": [ ] } ], "view_config_topics": [ { "id": 988, "uri": "", "type_uri": "dm4.webclient.view_config", "value": "/de.deepamehta.webbrowser/images/earth.png", "composite": { "dm4.webclient.icon": "/de.deepamehta.webbrowser/images/earth.png", "dm4.webclient.add_to_create_menu": true, "dm4.webclient.is_searchable_unit": true } } ] }
Association Type
The association type format is analog to the Topic Type format.
Example: an association type
{ "id": 10, "uri": "dm4.core.instantiation", "type_uri": "dm4.core.assoc_type", "value": "Instantiation", "composite": { }, "data_type_uri": "dm4.core.text", "index_mode_uris": [ ], "assoc_defs": [ ], "label_config": [ ], "view_config_topics": [ { "id": 792, "uri": "", "type_uri": "dm4.webclient.view_config", "value": "rgb(41, 194, 225)", "composite": { "dm4.webclient.color": "rgb(41, 194, 225)" } } ] }
Association Definition
An Association Definition represents a parent-child relationship (=association) between 2 types. The parent type is a topic type or an association type; the child type is a topic type.
Property | Description | Format |
---|---|---|
id | The association ID. | |
uri | Same as part_topic_type_uri. | |
assoc_type_uri | The type of the association. Either "composition" or "aggregation". | One of "dm4.core.composition_def" "dm4.core.aggregation_def" |
whole_topic_type_uri | URI of the parent type. | |
whole_role_type_uri | Fixed. | "dm4.core.whole" |
whole_cardinality_uri | Cardinality at the "parent" end. For a composition: always "one". For an aggregation: "one" or "many". | One of "dm4.core.one" "dm4.core.many" |
part_topic_type_uri | URI of the child type. | |
part_role_type_uri | Fixed. | "dm4.core.part" |
part_cardinality_uri | Cardinality at the "child" end: "one" or "many". | One of "dm4.core.one" "dm4.core.many" |
view_config_topics | View models for various clients. Allows overriding the child type's view models. | An array of view configuration topics. See View Configuration |
View Configuration
TODO: better explain the view configuration concept.
Each DeepaMehta client application might involve different presentation paradigms.
Topic types, association types, and association definitions can be attached with View Configuration Topics.
The standard DeepaMehta webclient defines its presentation model by the means of the complex topic type dm4.webclient.view_config. There are a number of simple child topic types:
Child Type | Target | Description | Data Type |
---|---|---|---|
dm4.webclient.icon | Topic Type | The icon to render the topic instances. | Text (a path) |
dm4.webclient.color | Association Type | The color to render the association instances. | Text (a CSS color) |
dm4.webclient.add_to_create_menu | Topic Type | Display topic type in "Create" menu? | Boolean |
dm4.webclient.is_searchable_unit | Topic Type | Stop at this topic type when parentize a search result item. | Boolean |
dm4.webclient.editable | Simple Topic Type | Display field on form page? | Boolean |
dm4.webclient.viewable | Simple Topic Type | Display field on info page? | Boolean |
dm4.webclient.js_page_renderer_class | Topic Type Association Type | The class that renders the info/form page | Text (a class name) |
dm4.webclient.js_field_renderer_class | Simple Topic Type | The class that renders the field on the info/form page | Text (a class name) |
dm4.webclient.rows | Simple Topic Type of data type "Text" or "HTML" | The number of rows of the field on the form page | Number |