Quick Reference
This is a list of the changes for each JSON object type and its properties that need to be made when transforming from the JSON data model to the RDF data model.
Where the value of a property is a nested object in JSON, unless otherwise stated, this object is converted into an instance with a relevant rdf:type
value, and the value of the property is the URI of this instance (or blank node identifier).
For more detail about the differences, see the Data Model documentation.
Core
Statement
statementId
: renamed tostatementIdString
; and the value is used for the URI for theStatement
instance.statementDate
: unchanged.annotations
: becomesannotation
.publicationDetails
: removed; nested properties are flattened sobodsVersion
,license
,publicationDate
andpublisher
are on the Statement. Value ofpublisher
is anAgent
.source
: unchanged.declaration
: value is aDeclaration
instance.declarationSubject
: moved toDeclaration
instance.recordId
: moved to aRecordDetails
instance and renamed torecordIdString
; and the value is used for the URI of theRecordDetails
instance.recordType
: removed; use to generate therdf:type
value for theRecordDetails
instance.recordStatus
: removed; use to generate therdf:type
value for theStatement
instance.recordDetails
: the value is the URI of aRecordDetails
instance.
Record details (entity)
These go from a nested object under recordDetails
on Statement
to an instance with an rdf:type
of Entity
.
isComponent
: removed.entityType
: value is an instance of anEntityType
(generated from the entityType codelist).entityType/subtype
: flattened toentitySubtype
; value is an instance of anEntitySubtype
(generated from the entitySubtype codelist).entityType/details
: flattened toentityTypeDetails
.unspecifiedEntityDetails
: removed; use an instance ofUnspecifiedRecord
instead.name
: unchanged.alternateNames
: becomesalternateName
.jurisdiction
: unchanged.identifiers
: becomesidentifier
.foundingDate
: unchanged.dissolutionDate
: unchanged.addresses
: becomesaddress
.uri
: unchanged.publicListing
: removed; nested properties are flattened tohasPublicListing
,companyFilingsURL
andsecuritiesListing
.formedByStatute
: removed; nested properties are flattened toformedByStatuteName
andformedByStatuteDate
.
Record details (person)
These go from a nested object under recordDetails
on Statement
to an instance with an rdf:type
of Person
.
isComponent
: removed.personType
: value is an instance of aPersonType
(generated from the personType codelist).unspecifiedPersonDetails
: removed; use an instance ofUnspecifiedRecord
instead.names
: becomesname
.identifiers
: becomesidentifier
.nationalities
: becomesnationality
.placeOfBirth
: unchanged.birthDate
: unchanged.deathDate
: unchanged.taxResidencies
: becomestaxResidency
.addresses
: becomesaddress
.politicalExposure
: value is the identifier for aPoliticalExposure
instance.politicalExposure/status
: replaced withpepStatus
, the value for which is an instance ofPEPStatus
.
Record details (relationship)
These go from a nested object under recordDetails
on Statement
to an instance with an rdf:type
of Relationship
.
isComponent
: removed.componentRecords
: removed.subject
: the value goes from a recordId string to the URI of an instance.interestedParty
: the value goes from a recordId string to the URI of an instance.interests
: becomesinterest
; the value goes from a nested object to the URI of an instance.
UnspecifiedRecord
In JSON we use a nested object to describe an unspecified person or entity. This is replaced with the UnspecifiedRecord
class which is a subclass of RecordDetails
(like Person
and Entity
).
reason
: unchanged; value is an instance from the codelist.description
: unchanged.
Interest
type
: removed; use ardf:type
with a class.directOrIndirect
: unchanged; value is an instance from the codelist.beneficialOwnershipOrControl
: unchanged.details
: unchanged.share
: removed; nested properties are flattened toshareExact
,shareMaximum
,shareExclusiveMinimum
,shareExclusiveMaximum
.startDate
: unchanged.endDate
: unchanged.
Components
Address
type
: removed; use ardf:type
with a class.address
: renamed tostreetAddress
.postCode
: unchanged.country
: unchanged, but the value is aJurisdiction
.
Annotation
statementPointerTarget
: unchanged.creationDate
: unchanged.createdBy
: value is anAgent
instance.motivation
: unchanged; value is an instance from the codelist.description
: unchanged.transformedContent
: unchanged.url
: unchanged.
Country
Removed and replaced with Jurisdiction
throughout.
Identifier
id
: renamed toidString
.scheme
: unchanged.schemeName
: unchanged.uri
: unchanged.
Jurisdiction
name
: unchanged.code
: unchanged.
Name
type
: removed; use ardf:type
with a class.fullName
: unchanged.familyName
: unchanged.givenName
: unchanged.patronymicName
: unchanged.
PEPstatusDetails
Renamed to PoliticalExposure
.
reason
: renamed topepStatusReason
.missingInfoReason
: unchanged.jurisdiction
: renamed topepJurisdiction
.startDate
: unchanged.endDate
: unchanged.source
: unchanged.
PublicListing
Removed and flattened onto Entity
(nested property names unchanged, except for companyFilingsURLs
which becomes companyFilingsURL
).
PublicationDetails
Removed and flattened onto Statement
.
Publisher
Renamed to Agent
for use in other places.
name
: renamed toagentName
.url
: renamed toagentUri
.
SecuritiesListing
marketIdentifierCode
: unchanged.operatingMarketIdentifierCode
: unchanged.stockExchangeJurisdiction
: unchanged.stockExchangeName
: unchanged.security
: renamed tosecurityId
; convert the nested object into an instance ofSecuritiesIdentifier
(which is a subclass ofIdentifier
with the additional property ofticker
).
Share
Removed and flattened onto Interest
. Note property names are prefixed with share*
for clarity.
Source
type
: removed; use ardf:type
with a class.description
: unchanged.url
: unchanged.retrievedAt
: unchanged.assertedBy
: nested object is replaced withAgent
instance.
Codelists
Where codelists are converted into instances, capitalise the code and prefix it with the namespace https://vocab.openownership.org/codelists#
(prefixed codes:
) to create a URI. Use this URI as the value where a string of the code would be used in the JSON format. The following codelists are part of the vocabulary as instances:
annotationMotivation
: values become instances of theAnnotationMotivation
classdirectOrIndirect
: values become instances of theDirectOrIndirect
classentityType
: values become instances of theEntityType
classentitySubtype
: values become instances of theEntitySubtype
classpersonType
: values become instances of thePersonType
classsecuritiesIdentifierSchemes
: values become instances ofSecuritiesIdentifierScheme
classunspecifiedReason
: values become instances of theUnspecifiedReason
class
Where codelists are converted into classes, capitalise the code and prefix it with the namespace https://vocab.openownership.org/terms#
(prefixed bods:
) to create a URI. Use this as the rdf:type
value for an instance which, as a JSON object, would have had a property pointing to the string of the code. The following codelists are part of the vocabulary as classes:
addressType
: the values become subclasses ofAddress
interestType
: the values become subclasses ofInterest
nameType
: the values become subclasses ofName
recordStatus
: the valuesnew
,updated
andclosed
are converted toNewRecordStatement
,UpdatedRecordStatement
andClosedRecordStatement
respectively, as subclasses ofStatement
.recordType
: the values become as subclasses ofRecordDetails
.sourceType
: the values become subclasses ofSource