EMA SPOR: SMS, OMS, RMS

General Alignment Structure

Create different modules for:

  1. SMS
  2. OMS
  3. RMS: one graph per list

URI Pattern for SPOR Data

We use recently published URLs. Motivation: EMA authority, RDF Compliant

Examples:

There is a version v2 for substance, but this works with UUIDs as identifier. We will not use this for the moment.

Substances (SMS)

URI Patterns:

Substance Entity URI: https://spor.ema.europa.eu/v1/lists/SubstanceDefinition/terms/100000085259 

SPOR SMS ColumnExample RowAlignment to IDMP-O
#SMS_ID100000085259
Substance_NameAmlodipine

skos:prefLabelnMap to skos:prefLabel or skos:altLabel (subproperties of rdfs:label) depending on next column value

Is_Preferred_NameTRUETRUE=prefLabel, FALSE=altLabel
LanguageEnglishAdd language tag, e.g., "@en" for English
Name_SourceINN

If not empty, add (contextualized) substance name with corresponding name sources

<S> cmns-dsg:hasName [

              hasTextValue "Amlodipine" ;

              rdf:type idmp-sub:SubstanceName ;

              dct:source <Authority/RegistryURI> . # use of String reference for authorities that need to be added

Substance_DomainHuman use
StatusCurrent(ignore for now)
Substance_TypeChemical

rdf:type idmp-sub:ChemicalSubstance (see mapping table below on "Substance Type") 

Created_Date25.07.2019 11:55dct:created
Last_Updated_Date21.06.2021 07:58dct:modified
External_Code_XEVMPDSUB05467MIG

<S> cmns-id:isIdentifiedBy <https://data.pistoiaalliance.org/id/EVMPD/SUB14568MIG> (preliminary URI) 

which is an instance of idmp:EudraVigilanceCode & cmns-ra:RegisteredIdentifier

External_Code_SVG

(ignore for now)

External_Code_UNII1J444QC288

<S> skos:exactMatch <https://gsrs.ncats.nih.gov/api/v1/substances/82Y7NT6DFT> (match to GSRS substance)

<S> cmns-id:isIdentifiedBy <https://data.pistoiaalliance.org/id/FDA_UNII/1J444QC288> (preliminary URI)

Coverage to IDMP

Substance Type Alignment: SPOR → IDMP-O

prefix spor-st: <https://spor.ema.europa.eu/v1/lists/100000075826/terms/>

SPOR SMS used Substance TypeTarget IDMP Ontology Class

SPOR RMS Substance Type (list 100000075826)

Chemical(tick) idmp-sub:ChemicalSubstance(tick) spor-st:100000075670
Mixture(tick) idmp-sub:Mixture(tick) spor-st:200000005023
Nucleic acid(tick) idmp-sub:NucleicAcidSubstance(tick) spor-st:200000005035
Polymer(tick) idmp-sub:PolymerSubstance(tick) spor-st:200000005022
Protein(tick) idmp-sub:ProteinSubstance(tick) spor-st:200000005020
Specified Substance Group 1(tick) idmp-sub:SpecifiedSubstanceGroup1(tick) spor-st:200000005031
Specified Substance Group 2(warning) not found in data. Mapped to idmp-sub:SpecifiedSubstanceGroup2(tick) spor-st:200000005032
Specified Substance Group 3(tick) idmp-sub:SpecifiedSubstanceGroup3(tick) spor-st:200000005033
Specified Substance Group 4(warning) not found in data. Mapped to idmp-sub:SpecifiedSubstanceGroup4(tick) spor-st:200000005034
Structurally Diverse - Allergen(warning) not covered so far. Fallback to idmp-sub:StructurallyDiverseSubstance(tick) spor-st:200000005026
Structurally Diverse - Cell therapy(warning) not covered so far. Fallback to idmp-sub:StructurallyDiverseSubstance(tick) spor-st:200000005029
Structurally Diverse - Herbal(warning) not covered so far. Fallback to idmp-sub:StructurallyDiverseSubstance(tick) spor-st:200000005025
Structurally Diverse - Other(warning) not covered so far. Fallback to idmp-sub:StructurallyDiverseSubstance(tick) spor-st:200000005030
Structurally Diverse - Plasma derived(warning) not covered so far. Fallback to idmp-sub:StructurallyDiverseSubstance(tick) spor-st:200000005024
Structurally Diverse - Vaccine(warning) not covered so far. Fallback to idmp-sub:StructurallyDiverseSubstance(tick) spor-st:200000005027

Name Source

There 50 sources/authorities/companies name. And below is the list the name that IDMP already covered.

Full list used in SPOR SMS:

JAN

ADISINSIGHT
BAN
BRITISH HERBAL PHARMACOPOEIA
BRITISH PHARMACOPOEIA
CHEBI
CHEMICAL ABSTRACT SERVICE
CHEMICALBOOK
CHEMIDPLUS
CHINESE PHARMACOPOEIA
COLORCON
COMMUNITY HERBAL MONOGRAPHS
COMMUNITY REGISTER OF THE EUROPEAN COMMISSION
COMPANY SPECIFICATION
COSING
CZECH PHARMACOPOEIA
DEUTSCHES ARZNEIBUCH
ENCYCLOPEDIA OF LIFE (EOL)
EUROPEAN CHEMICALS AGENCY (ECHA)
EUROPEAN FOOD SAFETY AUTHORITY (EFSA)
EUROPEAN PHARMACOPOEIA
FDA INACTIVE INGREDIENTS DATABASE
FDA SUBSTANCE REGISTRATION SYSTEM
FRENCH PHARMACOPOEIA
GLOBAL DIVERSITY INFORMATION FACILITY
GREEK PHARMACOPOEIA
HAB
HANDBOOK OF PHARMACEUTICAL EXCIPIENT (2ND EDITION)
HOMEOPATHIC PHARMACOPOEIA OF THE UNITED STATES
INDEX FUNGORUM
INFLUENZA RECOMMENDATIONS
INN
INTERNATIONAL CODE OF NOMENCLATURE OF BACTERIA (ICNB)
INTERNATIONAL NUMBERING SYSTEM (INS) FOR FOOD ADDITIVES
INVESTIGATOR'S BROCHURE
ITALIAN PHARMACOPOEIA
ITIS (INTEGRATED TAXONOMIC INFORMATION SYSTEM)
JAPANESE PHARMACOPOEIA
KEW GARDEN- IPLANTS DATABASE
MARTINDALE
POLISH PHARMACOPOEIA
PROTEIN DATA BANK (PDB)
PUBCHEM
SPC
Substance Validation Group
THE MERCK INDEX 20TH EDITION
THE PLANT LIST
USAN
USP
WHO



SPOR Name Source / AuthorityIDMP Mapping
CHEBIidmp-eura:ChemicalEntitiesOfBiologicalInterest
CHEMICAL ABSTRACT SERVICEidmp-nara:ChemicalAbstractsService
EUROPEAN CHEMICALS AGENCY (ECHA)idmp-eurga:EuropeanChemicalsAgency
FDA SUBSTANCE REGISTRATION SYSTEMidmp-nara:FoodAndDrugAdministrationRegistrationAuthority
INNidmp-ra:InternationalNonproprietaryName
ITIS (INTEGRATED TAXONOMIC INFORMATION SYSTEM)idmp-nara:IntegratedTaxonomicInformationSystem
PUBCHEMidmp-nara:PubChem
THE MERCK INDEX 20TH EDITIONidmp-ra:MerckIndexOnline
USPidmp-nara:USPharmacopeiaMedicinesCompendium
WHOidmp-ra:WorldHealthOrganization

Organizations (OMS)

https://spor.ema.europa.eu/v1/searchOrganisations

Note: For now the target model uses IDMP-O and https://schema.org/


SPOR OMS ColumnExample RowIDMP-O Mapping
Organisation IDORG-100003912(tick) <https://spor.ema.europa.eu/v1/organisations/{ ?Organisation_ID }>
        a cmns-org:LegalEntity.
Identifier CodeORG-100011062¦ORG-100012803¦ORG-100003912

https://www.omg.org/spec/Commons/Identifiers/isIdentifiedBy <https://data.pistoiaalliance.org/id/OMS/{ ?Organisation_ID }>

Mapping Code System100000167429¦100000167429¦200000005700

skipped for now

Mapping Code System NameEuropean Inspections Database¦European Inspections Database¦EudraVigilance Veterinary Dynamicsskipped for now
Mapping Code19301¦22802¦skipped for now
Mapping Valid From¦¦skipped
Mapping Valid To¦¦skipped
Category Classification Category Code System NameType¦Typeskipped
Category Classification Category  Code200000000084¦200000000088

(warning) Map to RMS-OMS-Party-Category

skos:broader <https://spor.ema.europa.eu/v1/lists/200000000015/terms/200000000084>

skos:broader <https://spor.ema.europa.eu/v1/lists/200000000015/terms/200000000088>

Split in case of multiple values.

NB: Need to confirm the skos:broader usage

Category Classification Category  Display NameRegulatory Authority¦EEA National Competent authorityskipped as it comes with reference to the RMS-OMS-Party-Category list (row above)
StatusACTIVE

(tick) Map to RMS-Organisation-Role-Status

skos:note <?URI>

?URI as:

PROVISIONAL → https://spor.ema.europa.eu/v1/lists/220000000026/terms/220000000027

ACTIVE → https://spor.ema.europa.eu/v1/lists/220000000026/terms/220000000028

INACTIVE → https://spor.ema.europa.eu/v1/lists/220000000026/terms/220000000029

DELETED → https://spor.ema.europa.eu/v1/lists/220000000026/terms/220000000030

NameAustrian Agency For Health And Food Safety(tick) skos:prefLabel "Austrian Agency For Health And Food Safety"
AcronymAGES

(tick) skos:altLabel "AGES"

Alternative Name Österreichische Agentur Für Gesundheit Und Ernährungssicherheit GmbH

(tick) skos:altLabel "Österreichische Agentur Für Gesundheit Und Ernährungssicherheit GmbH"@DE

Use together with Alternative Name Language

Split in case of multiple values

Alternative Name LanguageDE(tick) used for skos:altLabel see above
Version Timestamp2022-07-15T16:38:31.896+02:00skipped / another version timestamp below
Location IDLOC-100000000

(tick) Use to create a URI and Label

<https://spor.ema.europa.eu/v1/locations/{ ?Location_ID }>

    a schema:PostalAddress ;

    skos:prefLabel ?Location_ID ;

Location Link Hrefhttps://spor.ema.europa.eu/v1/locations/LOC-100000000
Current VersionYskipped
Mapping Code System100000172923skipped
Mapping Code System NameEuropean Inspections Database organisation system keyskipped
Mapping Code22802skipped
StatusACTIVEskos:note "ACTIVE"
Address PO Box

(tick) schema:postOfficeBoxNumber ?Address_PO_Box

Address Postal Code1220

(tick) schema:postalCode "1220"

Only use the first one in case of multiple values

Address Country CodeATskipped for now (will be used when we have decided on the Country reference list)
Address Country Display NameAustria

(tick) schema:addressCountry "Austria"

Only use the first one in case of multiple values (see the comment from the above row)

Address GPS Location
skipped for now
Address LanguageEN¦DEskipped for now
Address Line 1Spargelfeldstrasse 191¦Spargelfeldstraße 191

(tick) schema:streetAddress "Spargelfeldstrasse 191\n<Address Line 2 (if exists)>\n<Address Line 3 (if exists)>\n<Address Line 4 (if exists)>"

Only use the first one in case of multiple values

Address Line 2Donaustadt¦Donaustadt

(tick) If it exists, concatenate (with line break separator \n) with the other Address Line.

Only use the first one in case of multiple values

Address Line 3¦

(tick) If it exists, concatenate (with line break separator \n) with the other Address Line.

Only use the first one in case of multiple values

Address Line 4¦

(tick) If it exists, concatenate (with line break separator \n) with the other Address Line.

Only use the first one in case of multiple values

Address CityVienna¦Wien

(tick) schema:addressLocality "Vienna"

Only use the first one in case of multiple values

Address State¦

(tick) schema:addressRegion ""

Only use the first one in case of multiple values

Address Region¦skipped
Address County¦skipped
Communication Details Email Address
skipped
Communication Details Phone Number Country Prefix
skipped
Communication Details Phone Number
skipped
Communication Details Phone Number Extension
skipped
Communication Details Address PO Box
skipped
Communication Details Address Postal Code
skipped
Communication Details Address Country Code
skipped
Communication Details Address Country Display Name
skipped
Communication Details Address GPS Location
skipped
Communication Details Address Language
skipped
Communication Details Address Line 1
skipped
Communication Details Address Line 2
skipped
Communication Details Address Line 3
skipped
Communication Details Address Line 4
skipped
Communication Details Address City
skipped
Communication Details Address State
skipped
Communication Details Address Region
skipped
Communication Details Address County
skipped
Version Timestamp2021-09-24T17:48:42.721+02:00skipped


Referentials (RMS)

https://spor.ema.europa.eu/v1/lists

(warning) Please note, there is an ongoing discussion on updating the pattern of RMS lists! Pattern: Representing Controlled Vocabularies for EMA SPOR Referentials - REVIEW

URI Patterns (DRAFT tbd with EMA): 

Should be like: https://spor.ema.europa.eu/rms/...

For now: https://spor.ema.europa.eu/v1/lists/...

RMS List

<https://spor.ema.europa.eu/v1/lists/100000000004/terms> a owl:Ontology ; 
rdfs:label "SPOR RMS - Domain" ; # where "Domain" is the list name from EMA SPOR RMS
skos:scopeNote <https://spor.ema.europa.eu/v1/lists/100000000004/terms/100000000014> # Where ...14 stands for 'Human and Veterinary use'
skos:note <https://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005004> # where ...200000005004 stands for "CURRENT" (see status field mapping below)
dct:modified "2022-12-12T14:55:17" ;
dct:created "2007-09-12T00:00:00" ;
owl:versionInfo "25" ;
rdfs:comment "Created as part of the IDMP Ontology project using Accurids" ;
.

Equivalence relationship if possible. E.g., for country:

<https://spor.ema.europa.eu/v1/lists/100000000002> owl:equivalent <>

<Germany> owl:sameAs <lcc:Germany>

RMS Class: 

<https://spor.ema.europa.eu/v1/lists/100000000004> a owl:Class ;
   rdfs:seeAlso <https://spor.ema.europa.eu/rmswi/#/lists/100000000004/terms> ;
rdfs:label "Domain" ;
<https://www.omg.org/spec/Commons/Designators/isDefinedIn> <https://spec.pistoiaalliance.org/idmp/ontology/ISO/EuropeanJurisdiction/SubstancesProductsOrganisationsReferentials/ReferentialsManagementServicesClassificationScheme>
.

RMS Reference Entity

<https://spor.ema.europa.eu/v1/lists/100000000004/terms/100000000012> abbreviated as <RE> below to make spec more compact.

Status Mapping:

Using SKOS-XL for the labels: https://www.w3.org/TR/skos-reference/skos-xl.html


SPOR RMS List ColumnExample RowIDMP-O Alignment
List ID100000000004

(tick) Create URIs for

Term ID100000000012

(tick) Create Term URI (preliminary): https://spor.ema.europa.eu/v1/lists/100000000004/terms/100000000012

<https://spor.ema.europa.eu/v1/lists/100000000004/terms/100000000012>  a <https://spor.ema.europa.eu/v1/lists/100000000004> .

Term Rowid20251not used for now
Languageit

(tick) language tag as "..."@it 

Term Nameuso umano

(tick) rdfs:Label "...."@en (only if it is English language)

additionally:

<RE> skos-xl:prefLabel <https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/label/{ ?Term_Name_Rowid }>

<https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/label/{ ?Term_Name_Rowid }>

   a skos-xl:Label ;

   skos-xl:literalForm "uso umano"@it ;

   dct:modified "2021-03-03T14:07:00" ;

   dct:contributor ...

   cmns-cls:isClassifiedBy << status mapping>> ;

   rdfs:comment ... ;

 

Term Name Modified On03.03.2021 14:07

(tick) <Label> dct:modified "2021-03-03T14:07:00" 

Use ISO 8601

Term Name Modified By
(tick) <Label> dct:contributor ...
Term Name Translation StatusCURRENT

(tick) <Label> cmns-cls:isClassifiedBy << status mapping>>

Term Name Comments
(tick) <Label> rdfs:comment ...
Term Name Rowid10390002

(tick) Use for building the label URI

<https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/label/{ ?Term_Name_Rowid }>

Short NameH

(tick) <RE> skos-xl:altLabel <https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/label/{ ?Short_Name_Rowid }>

<https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/label/{ ?Short_Name_Rowid }>

   a skos-xl:Label ;

   skos-xl:literalForm "H"@it ;

   dct:modified "2021-03-03T14:07:00" ;

   dct:contributor ...

   cmns-cls:isClassifiedBy << status mapping>> ;

   rdfs:comment ... ;

 

<https://www.omg.org/spec/Commons/AnnotationVocabulary/abbreviation> "H" (without language tag)

Short Name Modified On03.03.2021 14:07

(tick) <Label> dct:modified "2021-03-03T14:07:00" 

Use ISO 8601

Short Name Modified By
(tick) <Label> dct:contributor ...
Short Name Translation StatusCURRENT(tick) <Label> cmns-cls:isClassifiedBy << status mapping>>
Short Name Comments
(tick) <Label> rdfs:comment ...
Short Name Rowid10390003

(tick) Use for building the label URI

<https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/label/{ ?Short_Name_Rowid }>

Other Name

(tick) AltLabel with same language tag (if applicable)

Splitted in case of multiple value

<RE> skos-xl:altLabel <https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/label/{ ?Other_Name_Rowid }>

<https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/label/{ ?Other_Name_Rowid }>

   a skos-xl:Label ;

   skos-xl:literalForm ....@it ;

   dct:modified "2021-03-03T14:07:00" ;

   dct:contributor ...

   cmns-cls:isClassifiedBy << status mapping>> ;

   rdfs:comment ... ;

Other Name Modified On

(tick) <Label> dct:modified "2021-03-03T14:07:00" 

Use ISO 8601

Other Name Modified By
(tick) <Label> dct:contributor ...
Other Name Translation Status
(tick) <Label> cmns-cls:isClassifiedBy << status mapping>>
Other Name Comments
(tick) <Label> rdfs:comment ...
Other Name Rowid

(tick) Use for building the label URI

<https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/label/{ ?Other_Name_Rowid }>

Term Description

(tick) with same language tag (if applicable)

<RE> skos:definition "..."@it

Term Description Modified On
skip for now
Term Description Modified By
skip for now
Term Description Translation Status
skip for now
Term Description Rowid
skip for now
Term Symbol
(tick) <RE> skos:notation ....
Term Symbol Modified On
skip
Term Symbol Modified By
skip
Term Symbol Comments
skip
Term Symbol Rowid
skip
Domain ID100000000014

(tick) The domain uses the Domain RMS list

<RE> cmns-cls:isClassifiedBy <https://spor.ema.europa.eu/v1/lists/100000000004/terms/100000000014

Term Domain Rowid20308skip
List Hierarchical Level Short Name
skip
List Hierarchical Level Name
skip
Parent ID

(tick) Hierarchy within the same list:

<RE> skos:broader <https://spor.ema.europa.eu/v1/lists/[listID]/terms/[Parent ID]>

Parent Term Rowid
skip for now, can be used for label node later
Term StatusCURRENT

(tick) Use the RMS status list

Elisa Kendall  to add the class for "term status",

<RE> cmns-cls:isClassifiedBy <https://spor.ema.europa.eu/v1/lists/200000005003/terms/200000005004

with << status mapping>>

Term Status Modified On2007-08-16T10:22:30Z

(tick) use reification statement rdf:Statement

<https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/termStatus/{ ?Term_Status_Rowid }>

a rdf:Statement ;

rdf:subject <RE>

rdf:predicate cmns-cls:isClassifiedBy

rdf:object  <<the term status>>

dct:modified "2007-08-16T10:22:30Z" (with proper ISO conversion)

dct:contributor "ema"

Term Status Modified Byema(tick) <reif> dct:contributor "ema" for now (better property needed and reference list for values
Term Status Rowid20501

(tick) Use as ID to avoid duplicate in reification statement

<https://spor.ema.europa.eu/v1/lists/{ ?List_ID }/terms/{ ?Term_ID }/termStatus/{ ?Term_Status_Rowid }>

Current Term ID
skip
Current Term Rowid
skip
Mapping Source ID
skip
Mapping Source Term ID
skip
Source Provided Name
skip
Is Main Term Source
skip
Mapping Source Version
skip
Mapping Source Term Status
skip
Term Source Mapping Rowid
skip
Term Comments
skip
Applicable to Country ID
skip
Country Applicability Rowid
skip
Applicable to IT application ID
skip
IT Application Applicability Rowid
skip
Term Created On27.07.2007 09:04

(tick) <RE> dct:created "2007-07-27T09:04:00"

Use ISO 8601

Term Created By
skip
Term Modified On12.12.2022 14:55

(tick) <RE> dct:modified "2022-12-12T14:55:00"

Use ISO 8601

Term Modified By
skip
Version Number11skip for now
Version Date
skip
Is Major VersionNskip for now
Term VisibilityPUBLICskip for now
UoM Conversion Target Term ID
UoM Conversion Function ID
(warning) Example value: MU/ml
UoM Conversion Function Formula
(warning) no value found
UoM Conversion Function Value
(warning) no value found
Term UoM Conversion Rowid
skip
User Defined Tags
skip
User Preferred Name
skip
Attribute 1
skip
Attribute Value 1
skip
Term Attribute 1 Rowid
skip
Attribute 2
skip
Attribute Value 2
skip
Term Attribute 2 Rowid
skip
Attribute 3
skip
Attribute Value 3
skip
Term Attribute 3 Rowid
skip
Attribute 4
skip
Attribute Value 4
skip
Term Attribute 4 Rowid
skip
Attribute 5
skip
Attribute Value 5
skip
Term Attribute 5 Rowid
skip
Attribute 6
skip
Attribute Value 6
skip
Term Attribute 6 Rowid
skip
Attribute 7
skip
Attribute Value 7
skip
Term Attribute 7 Rowid
skip
Attribute 8
skip
Attribute Value 8
skip
Term Attribute 8 Rowid
skip
Attribute 9
skip
Attribute Value 9
skip
Term Attribute 9 Rowid
skip
Attribute 10
skip
Attribute Value 10
skip
Term Attribute 10 Rowid
skip