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 information Global element: <list-of-list> Detailed information on a single list Global element: <list-details> Summary list information has the following properties (non-exhaustive, see schema for details):
Property Card. Type Description <list-id> [1] Complex List identifier and link to list detailed information
Format: nnnnnnnnnnnn
Example: 100000155052<list-name> [1] String Name of the list <list-short-name> [0..1] String Short name of the list <list-status> [1] Enumeration Status of the list <terms-link> [1] Complex List to a complete collection of terms for a given list <terms-summaries-link> [1] Complex List to a collection of terms summaries for a given list <visibility> [1] Enumeration Data visibility classification of the list <domains> [0..1] Collection Domains for which the list is defined <list-operational-attributes> [1] Complex Operational and lifecycle attributes of the list <list-documents> [0..1] Complex Collection of documents associated with the list <list-description> [0..1] String Description of the list <owner> [0..1] String The 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):
Property Card. Type Description <oid> [0..1] anyURI Globally unique object identifier defined for the list <list-level-definition> [0..1] Complex Definitions 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] Complex Collection of definitions of relationships to other lists <extended-attributes-definitions> [0..1] Complex Collection 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 onGlobal element: <controlled-terms-list-summary> Collection of controlled terms details from a
single listGlobal element: <controlled-terms-list> Collection of controlled term details or summaries
from multiple listsGlobal element: <controlled-terms-collection> Details of an individual controlled term Global element: <term-details>
Summary term information has the following properties (non-exhaustive, see schema for details):
Property Card. Type Description <term-id> [1] Complex Agreed European Identifier, this will be a unique sequential number for each term.
Format: nnnnnnnnnnnn
Example: 100000155052<term-names> [1] Collection Term names in different languages. Max. one name per language. <short-names> [0..1] Collection Short term names in different languages. Max. one name per language. <status> [1] Enumeration The status of the term <children-link> [0..1] Complex Link to a collection of direct children of this term. Detailed term information extends the above by (non-exhaustive, see schema for details):
Property Card. Type Description <operational-attributes> [1] Complex Operational and life cycle attributes <visibility> [1] Enumeration Data visibility classification of the list <domains> [0..1] Collection Domains for which the term is defined (e.g. human, veterinary) <other-names> [0..1] Collection Other term names in different languages. Multiple names allowed per language <term-descriptions> [0..1] Collection Term description in different languages. Max. one description per language <term-comments> [0..1] String Comments to the term <current-term-ids> [0..1] Collection References 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] Collection Paths from this term to a root of its hierarchical structure. For some lists multiple paths are possible. <related-terms> [0..*] Collection Other terms related to this term as defined in the extended relationships of the list definition. <extended-attributes> [0..1] Collection Extended attributes of this term as defined in the list definition. <mappings> [0..1] Collection Mappings of this controlled term to codes and identifiers in systems other than RMS. <term-applicability> [0..*] Complex Applicability 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] Complex Information 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] Collection Term symbols <unit-of-measure-conversions> [0..1] Collection Conversion formulas between different units of measure.
Applicable only for units of measure (UoM)<user-preferences> [0..1] Complex User specific preferences for this term (e.g. tag assignments or user preferred name). <terms-link> [0..1] Complex Reference to the collection of term details in a given list <terms-summaries-link> [0..1] Complex Reference to the collection of term summaries in a given list <list-reference> [0..1] Complex Reference to the list details <versions> [0..*] Complex Contains 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:SPORTerm | SPOR schema for <controlled-term> | ||
---|---|---|---|
property path | range | XML element xpath | XML element |
ROOT NODE | idmp-spor:SPORTerm | /controlled-term | spor:termType |
^cmns-id:identifies | idmp-spor:SPORTermIdentifier | /controlled-term/term-id | spor:identifierType |
^cmns-id:identifies/cmns-txt:hasTextValue | xsd:string | /controlled-term/term-id@id | xsd:string |
/controlled-term/term-names | spor:termNamesType | ||
idmp-spor:hasSPORTermName | idmp-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-names | spor:shortNamesType | ||
idmp-spor:hasSPORShortName | idmp-spor:SPORShortName | /controlled-term/short-names/short-name | spor:termNameType |
idmp-spor:hasSPORShortName/ cmns-txt:hasTextValue | xsd:string | /controlled-term/short-names/short-name/name | spor: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-names | spor:otherNamesType | ||
idmp-spor.hasSPOROtherName | idmp-spor:SPOROtherName | /controlled-term/other-names/other-name | |
idmp-spor:hasSPOROtherName/ cmns-txt:hasTextValue | xsd:string | /controlled-term/other-names/other-name/name | spor:translatedString |
idmp-spor:hasSPOROtherName/ mvf:hasLanguage | lcc-lr:Language | /controlled-term/other-names/other-name@lang | xsd: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:hasSPORStatus | idmp-spor:SPOR-RecordStatus | /controlled-term/status | spor:statusType |
idmp-spor:hasSPORStatus/cmns-hasTextValue | xsd:string | /controlled-term/status@code | spor:rmsStatusValues |
/controlled-term/status@modified-by | xsd:string | ||
idmp-spor:hasSPORStatus/dct:modified | xsd:dateTime | /controlled-term/status@modified-on | xsd:dateTime |
/controlled-term/term-descriptions | spor:termDescriptionsType | ||
spor:hasSPORTermDescription | spor:SPORTermDescription | /controlled-term/term-descriptions/term-description | spor:translatedString |
idmp-spor:hasSPORTermDescription/cmns-txt:hasTextValue | xsd:string | /controlled-term/term-descriptions/term-description/description | xsd:string |
idmp-spor:hasSPORTermDescription/ mvf:hasLanguage | lcc-lr:Language | /controlled-term/term-descriptions/term-description@lang | xsd:language |
rdfs:comment | xsd:string | /controlled-term/term-comments | xsd:string |
idmp-spor:hasSPORVisibility | idmp-spor:SPOR-DataClassification | /controlled-term/visibility | spor:visibilityType |
idmp-spor:hasSPORVisibility/cmns-txt:hasTextValue | xsd:string | /controlled-term/visibility@code | spor:rmsVisibilityValues |
idmp-spor:hasSPORDomain | idmp-spor:SPOR-Domain | /controlled-term/domains/domain | spor:extensibleReferenceType |
idmp-spor:hasSPORDomain/cmns-txt:hasTextValue | xsd:string | /controlled-term/domains/domain@name | |
idmp-spor:hasSPORDomain/owl:sameAs | IRI | /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 IRI | SPOR RMS term IRI | SPOR XML schema spor:rmsStatusValue |
---|---|---|
idmp-spor:SPOR-RecordStatus-Current | https://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005004 | CURRENT |
- | - | DRAFT |
idmp-spor:SPOR-RecordStatus-NonCurrent | https://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005006 | NON_CURRENT |
idmp-spor:SPOR-RecordStatus-Nullified | https://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005007 | NULLIFIED |
idmp-spor:SPOR-RecordStatus-Provisional | https://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005005 | PROVISIONAL |
- | - | 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 IRI | SPOR RMS term IRI | SPOR XML schema spor:rmsStatusValue |
---|---|---|
idmp-spor:SPOR-DataClassification-Confidential | https://spor.ema.europa.eu/v1/lists/200000004983/terms/200000004984 | CONFIDENTIAL |
idmp-spor:SPOR-DataClassification-Public | https://spor.ema.europa.eu/v1/lists/200000004983/terms/200000004985 | PUBLIC |
idmp-spor:SPOR-DataClassification-Restricted | https://spor.ema.europa.eu/v1/lists/200000004983/terms/200000004986 | RESTRICTED |