/
Pattern: Representing Controlled Vocabularies for EMA SPOR Referentials - REVIEW

Pattern: Representing Controlled Vocabularies for EMA SPOR Referentials - REVIEW

Introduction

Many of the regulatory data sets for substances and medicinal products include controlled vocabularies. The vocabularies published by the European Medicines Agency (EMA), via the Substances, Products, Organisations, and Referentials (SPOR) Registry are extensive and required for many regulatory submissions. The SPOR controlled vocabularies have a specific structure and follow a pattern that extends the basic controlled vocabulary pattern defined for the IDMP-O ontologies.

The extended SPOR pattern and a mapping from the SPOR schemas to IDMP-O is provided below. Note that while these details do not pertain to any specific use case / set of competency questions for IDMP-O to date, they are required for reporting purposes in the EU and are integrated with a number of our examples to show how to use the IDMP-O ontologies to represent and make use of these controlled vocabularies.

Related EMA SPOR Referentials Documentation

For reference the SPOR API Specification EMA/241514/2016: pages 68-  (SPOR-API-Specification.pdf) specifies what lists, terms and translations are composed of.


Lists are specified in Section 7.1:

7.1. List

List is a collection of related terms, e.g. countries list, units of measure list. List has additional properties like description, list owner and other. RMS manages multiple lists.

List schema definitions are in the attached XML Schema.

List properties can be represented as:

Collection of summary list informationGlobal element: <list-of-list>
Detailed information on a single listGlobal element: <list-details>

Summary list information has the following properties (non-exhaustive, see schema for details):

PropertyCard.TypeDescription
<list-id>[1]ComplexList identifier and link to list detailed information
Format:   nnnnnnnnnnnn
Example: 100000155052
<list-name>[1]StringName of the list
<list-short-name>[0..1]StringShort name of the list
<list-status>[1]EnumerationStatus of the list
<terms-link>[1]ComplexList to a complete collection of terms for a given list
<terms-summaries-link>[1]ComplexList to a collection of terms summaries for a given list
<visibility>[1]EnumerationData visibility classification of the list
<domains>[0..1]CollectionDomains for which the list is defined
<list-operational-attributes>[1]ComplexOperational and lifecycle attributes of the list
<list-documents>[0..1]ComplexCollection of documents associated with the list
<list-description>[0..1]StringDescription of the list
<owner>[0..1]StringThe entity owning the vocabulary and its values
<version-provided-by-owner>[0..1]String The version under the owner published a given list

Detailed list information extends the above by (non-exhaustive, see schema for details):

PropertyCard.TypeDescription
<oid>[0..1]anyURIGlobally unique object identifier defined for the list
<list-level-definition>[0..1]ComplexDefinitions of named list levels for a given list.
Note: individual terms will be assigned to lists levels
using list-level assignment element in controlled-term
<extended-relationship-definitions>[0..1]ComplexCollection of definitions of relationships to other lists
<extended-attributes-definitions>[0..1]ComplexCollection of extended attribute definitions
defined for a given list


Terms are specified in section 7.2

7.2. Term

Term is a word or phrase used to describe a thing or to express a concept. All RMS terms have a name
in English and possible translations of this name to other languages. Related terms are grouped into
lists.
Term schema definitions are in the attached XML Schema.
This schema is authoritative source of information on resource properties for this API. 

Termproperties can be represented as:

Collection of summary terms information from a
single list. Contains additional information on
Global element: <controlled-terms-list-summary>
Collection of controlled terms details from a
single list
Global element:  <controlled-terms-list>
Collection of controlled term details or summaries
from multiple lists
Global element: <controlled-terms-collection>
Details of an individual controlled termGlobal element: <term-details>


Summary term information has the following properties (non-exhaustive, see schema for details): 

PropertyCard.TypeDescription
<term-id>[1]ComplexAgreed European Identifier, this will be a unique sequential number for each term.
Format: nnnnnnnnnnnn
Example: 100000155052
<term-names>[1]CollectionTerm names in different languages. Max. one name per language.
<short-names>[0..1]CollectionShort term names in different languages. Max. one name per language.
<status>[1]EnumerationThe status of the term
<children-link>[0..1]ComplexLink to a collection of direct children of this term.

Detailed term information extends the above by (non-exhaustive, see schema for details):

PropertyCard.TypeDescription
<operational-attributes>[1]ComplexOperational and life cycle attributes
<visibility>[1]EnumerationData visibility classification of the list
<domains>[0..1]CollectionDomains for which the term is defined (e.g. human, veterinary)
<other-names>[0..1]CollectionOther term names in different languages. Multiple names allowed per language
<term-descriptions>[0..1]CollectionTerm description in different languages. Max. one description per language
<term-comments>[0..1]StringComments to the term
<current-term-ids>[0..1]CollectionReferences to current terms replacing a term with the status NULLIFIED or NON_CURRENT.
The implementing system is responsible to update its local records in order to start
using the current terms instead of the deactivated one.
<parents>[0..1]Collection References to the parents of this controlled term in the hierarchical structure
<children>[0..1]Collection References to the children of this controlled term in the hierarchical structure
<term-paths>[0..1]CollectionPaths from this term to a root of its hierarchical structure. For some lists multiple paths are possible.
<related-terms>[0..*]CollectionOther terms related to this term as defined in the extended relationships of the list definition.
<extended-attributes>[0..1]CollectionExtended attributes of this term as defined in the list definition.
<mappings>[0..1]CollectionMappings of this controlled term to codes and identifiers in systems other than RMS.
<term-applicability>[0..*]ComplexApplicability of this term to some specific context,
e.g. applicable to a particular country or applicable to a particular IT system.
<list-level-assignment>[0..1]ComplexInformation to which named list level a given term is assigned.
Note: definition of named list levels defined for a list are in list-level-definition
element of the list-information.
<symbols>[0..1]CollectionTerm symbols
<unit-of-measure-conversions>[0..1]CollectionConversion formulas between different units of measure.
Applicable only for units of measure (UoM)
<user-preferences>[0..1]ComplexUser specific preferences for this term (e.g. tag assignments or user preferred name).
<terms-link>[0..1]ComplexReference to the collection of term details in a given list
<terms-summaries-link>[0..1]ComplexReference to the collection of term summaries in a given list
<list-reference>[0..1]ComplexReference to the list details
<versions>[0..*]ComplexContains a collection of historical representations of the term.
A historical representation is created whenever a term is modified,
where the historical representation represents the state of the organisation
prior to the modification.
Note, the collection includes all historical representations (previous versions)
and the current representation (current version).

Mapping of properties in the IDMP-O SubstancesProductsOrganisationsReferentionals ontology to the SPOR XML schema (SPOR-all-V2.0.xsd) for terms

Languages for names are modeled in the XML schema using lang attributes of datatype xsd:language. The ontology uses the mvf:hasLanguage predicate to assign the language. So the xsd:language code must be mapped to the language instance.

Prefixes/Namespace declarations

SPOR shape for idmp-spor:SPORTermSPOR schema for <controlled-term>
property pathrangeXML element xpathXML element
ROOT NODEidmp-spor:SPORTerm/controlled-termspor:termType
^cmns-id:identifiesidmp-spor:SPORTermIdentifier/controlled-term/term-idspor:identifierType
^cmns-id:identifies/cmns-txt:hasTextValuexsd:string/controlled-term/term-id@idxsd:string


/controlled-term/term-namesspor:termNamesType
idmp-spor:hasSPORTermNameidmp-spor:SPORTermName/controlled-term/term-names/
term-name
spor:termNameType
idmp-spor:hasSPORTermName/
cmns-txt:hasTextValue
xsd:string/controlled-term/term-names/
term-name/name
spor:translatedString
idmp-spor:hasSPORTermName/
mvf:hasLanguage
lcc-lr:Language~ /controlled-term/term-names/
term-name/name@lang
xsd:language
idmp-spor:hasSPORTermName/
idmp-spor:hasSPORStatus
idmp-spor:SPOR-RecordStatus/controlled-term/term-names/
term-name/name
@translation-status-code
spor:rmsStatusValues
idmp-spor:hasSPORTermName/
rdfs:comment
xsd:string/controlled-term/term-names/
term-name/comments
xsd:string


/controlled-term/short-namesspor:shortNamesType
idmp-spor:hasSPORShortNameidmp-spor:SPORShortName/controlled-term/short-names/short-namespor:termNameType
idmp-spor:hasSPORShortName/
cmns-txt:hasTextValue
xsd:string/controlled-term/short-names/short-name/namespor:translatedString
idmp-spor:hasSPORShortName/
mvf:hasLanguage
lcc-lr:Language/controlled-term/short-names/short-name/name
@lang
xsd:language
idmp-spor:hasSPORShortName/
idmp-spor:hasSPORStatus
idmp-spor:SPOR-RecordStatus/controlled-term/short-names/short-name/name
@translation-status-code
spor:rmsStatusValues
idmp-spor:hasSPORShortName/
rdfs:comment
xsd:string/controlled-term/short-names/short-name/comments


/controlled-term/other-namesspor:otherNamesType
idmp-spor.hasSPOROtherNameidmp-spor:SPOROtherName/controlled-term/other-names/other-name
idmp-spor:hasSPOROtherName/
cmns-txt:hasTextValue
xsd:string/controlled-term/other-names/other-name/namespor:translatedString
idmp-spor:hasSPOROtherName/
mvf:hasLanguage
lcc-lr:Language/controlled-term/other-names/other-name@langxsd:language
idmp-spor:hasSPOROtherName/
idmp-spor:hasSPORStatus
idmp-spor:SPOR-RecordStatus/controlled-term/other-names/other-name/name
@translation-status-code
spor:rmsStatusValues
idmp-spor:hasSPORStatusidmp-spor:SPOR-RecordStatus/controlled-term/statusspor:statusType
idmp-spor:hasSPORStatus/cmns-hasTextValuexsd:string/controlled-term/status@codespor:rmsStatusValues


/controlled-term/status@modified-byxsd:string
idmp-spor:hasSPORStatus/dct:modifiedxsd:dateTime/controlled-term/status@modified-onxsd:dateTime


/controlled-term/term-descriptionsspor:termDescriptionsType
spor:hasSPORTermDescriptionspor:SPORTermDescription/controlled-term/term-descriptions/term-descriptionspor:translatedString
idmp-spor:hasSPORTermDescription/cmns-txt:hasTextValuexsd:string/controlled-term/term-descriptions/term-description/descriptionxsd:string
idmp-spor:hasSPORTermDescription/
mvf:hasLanguage
lcc-lr:Language/controlled-term/term-descriptions/term-description@langxsd:language
rdfs:commentxsd:string/controlled-term/term-commentsxsd:string
idmp-spor:hasSPORVisibilityidmp-spor:SPOR-DataClassification/controlled-term/visibilityspor:visibilityType
idmp-spor:hasSPORVisibility/cmns-txt:hasTextValuexsd:string/controlled-term/visibility@codespor:rmsVisibilityValues
idmp-spor:hasSPORDomainidmp-spor:SPOR-Domain/controlled-term/domains/domainspor:extensibleReferenceType
idmp-spor:hasSPORDomain/cmns-txt:hasTextValuexsd:string/controlled-term/domains/domain@name
idmp-spor:hasSPORDomain/owl:sameAsIRI/controlled-term/domains/domain/link@href

SPOR domains must be mapped via the href attribute of the embedded link element. This contains the SPOR IRI of the domain term.

Mapping of  idmp-spor:SPORRecordStatus  with  spor:rmsStatusValues.

Only the status values that are listed in the SPOR RMS list https://spor.ema.europa.eu/v1/lists/200000005003 are available in the IDMP SPOR ontology

SPOR ontology SPORRecordStatus IRISPOR RMS term IRISPOR XML schema spor:rmsStatusValue
idmp-spor:SPOR-RecordStatus-Currenthttps://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005004CURRENT
--DRAFT
idmp-spor:SPOR-RecordStatus-NonCurrenthttps://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005006NON_CURRENT
idmp-spor:SPOR-RecordStatus-Nullifiedhttps://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005007NULLIFIED
idmp-spor:SPOR-RecordStatus-Provisionalhttps://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005005PROVISIONAL
--UNDER_CONSULTATION

Mapping of  idmp-spor:SPOR-DataClassification  with  spor:rmsVisibilityValues.

All the status values that are listed in the SPOR RMS list  https://spor.ema.europa.eu/v1/lists/200000004983 are available in the IDMP SPOR ontology

SPOR ontology SPORDataClassification IRISPOR RMS term IRISPOR XML schema spor:rmsStatusValue
idmp-spor:SPOR-DataClassification-Confidentialhttps://spor.ema.europa.eu/v1/lists/200000004983/terms/200000004984CONFIDENTIAL
idmp-spor:SPOR-DataClassification-Publichttps://spor.ema.europa.eu/v1/lists/200000004983/terms/200000004985PUBLIC
idmp-spor:SPOR-DataClassification-Restrictedhttps://spor.ema.europa.eu/v1/lists/200000004983/terms/200000004986RESTRICTED

Related content