This document outlines the functionality and requirements of the BODS Visualiser.
Refer to the full BODS documentation for more information (and the associated github repository).
The visualiser requires JSON data with a minimum set of data fields to produce a directed graph. It is not necessary for the supplied JSON data to be valid BODS data, but it must meet these minimum requirements.
This is not a full schema. The following tables represent the opinionated requirements of the visualiser. Any schema fields that are not present in the tables below are not currently used in the generation of graphs by the visualiser tool and will be ignored.
Edges are drawn using BODS (or BODS-like) ownership or control statements
Field | Required | Notes |
statementID | Yes | A unique ID for this statement |
statementType | Yes | Must be "ownershipOrControlStatement" to generate edge |
subject | Yes | This is the connecting node and is required |
subject.describedByPersonStatement | (Yes) | Must contain a `statementID` from a person node or an entity node in the dataset |
subject.describedByEntityStatement | (Yes) | Must contain a `statementID` from a person node or an entity node in the dataset |
interestedParty | No | Creates an unknown node if object is empty (can contain either describedByPersonStatement or describedByEntityStatement) |
interestedParty.describedByPersonStatement | No | Either person or entity should be supplied otherwise unknown is assumed |
interestedParty.describedByEntityStatement | No | Either person or entity should be supplied otherwise unknown is assumed |
interests | No | "Interest details unknown" label applied if empty array |
interests.type | No | No edge drawn if missing. Only shareholding or votingRights shown |
interests.interestLevel (BODS v0.2)/interests.directOrIndirect (BODS v0.3) | No | Direct interests are shown as solid lines, indirect or unknown are shown as dotted lines |
interests.share | No | No labels applied if this field is missing |
interests.share.min | No | Used to calculate a min - max range |
interests.share.max | No | Used to calculate a min - max range |
interests.share.exact | No | Takes precedence over min and max values |
Person nodes are drawn using BODS (or BODS-like) person statements
Field | Required | Notes |
statementID | Yes | A unique ID for this node |
StatementType | Yes | Must be "personStatement" to generate person node |
names | No | Unknown person will be used if this data is missing. The name types will be used in the following order: 'individual', 'transliteration', 'alternative', 'birth', 'translation', 'former'. Unnamed person will be used if any specific name data is missing. |
names.fullName | No | This field takes precedence |
names.givenName | No | The name is a join of [givenName, patronymicName, familyName] if fullName is omitted |
names.patronymicName | No | The name is a join of [givenName, patronymicName, familyName] if fullName is omitted |
names.familyName | No | The name is a join of [givenName, patronymicName, familyName] if fullName is omitted |
personType | No | Unknown person will be assumed if the personType is missing. |
nationalities | No | No flags will be drawn if these data are missing. The visualiser only uses the first nationality in the nationalities array. |
nationalities.code | No | No flag will be drawn if the country code is missing. The visualiser only uses the first nationality in the nationalities array. |
Entity nodes are drawn using BODS (or BODS-like) entity statements.
Field | Required | Notes |
statementID | Yes | Unique ID for this node |
statementType | Yes | Must be 'entityStatement' for entity node |
name | No | No label shown if missing |
entityType | No | Assumes unknown node type when entityType is missing |
publicListing | No | Assumes entity is not listed if this field is missing |
incorporatedInJurisdiction (BODS v0.2)/jurisdiction (BODS v0.3) | No | No flags are drawn if this field is missing. |
jurisdiction.code | No | No flags are drawn if this field is missing. |