We support the semantic web. We are experimenting with approaches to communicate information as RDF (Resource Description Framework) conforming with SHACL (SHApes Constraint Language) generated from ISO20022 models. Your feedback is welcome.

We are actively developing Technical Reports on Semantic Technology in Financial Services with ISO/TC68/SC9/WG1.

  • ISO – International Organization for Standardization
  • TC 68 – Technical Committee 68 Financial Services
  • SC 9 – Sub Committee 9 Information Exchange
  • WG 1 – Working Group 1 Semantic Technology.

Resource Description Framework (RDF)

The Resource Description Framework is used to model the information in a message instance. The root of the fully connected graph is a blank node whose name matches its Message Definition’s root element. This root node is connected to blank nodes for each Message Building Block, which in turn is connected to blank nodes for each Message Attribute. Message Association Ends may reference or compose other blank nodes.

ISO 20022 ensures the names of types are unique within the Data Dictionary (DD) and that names of types are unique within the Business Process Catalogue (BPC). This may be simplified to the namespace of the repository, provided that names of top level concepts are unique.


For brevity, we represent the RDF graph in the Terse Triple Language (TTL).

# Set the default prefix to our experimental namespace
@prefix : <urn:iso:std:iso:20022:experimental> .

# Document is the name of the root element blank node
 # The name of its ISO 20022 Message Definition
 :name  "FinancialInstrumentReportingTransactionReportV01" ;
 # Its Transaction Message Building Block
 :Transaction [
  # New is a Message Element (Attribute)
  :New [
   :TransactionIdentification "T123456" ;
... # abbreviated
   :AdditionalAttributes [
    :SecuritiesFinancingTransactionIndicator "true" ] ] ] .


@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh:    <http://www.w3.org/ns/shacl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix : <urn:iso:std:iso:20022:experimental> .

# Message Definition
 a sh:NodeShape , rdfs:Class ;
 # Target Node applies this schema to blank nodes named :Document.
 sh:targetNode :Document ;
 # name of the Message Definition 
 sh:property [
  sh:path :name ;
  sh:defaultValue "FinancialInstrumentReportingTransactionReportV01" ;
  sh:datatype xsd:string ; sh:minCount 0 ; sh:maxCount 1 ; ] ;
 # Message Building Blocks
 sh:property [ sh:path :Transaction ;
  sh:minCount 1 ;  
  sh:node :ReportingTransactionType1Choice ] ;
 sh:property [ sh:path :SupplementaryData ;
  sh:minCount 0 ;  
  sh:node :SupplementaryData1 ] ;
# Message Component Types and Data Types
 a sh:NodeShape , rdfs:Class ; sh:closed true ;
 sh:ignoredProperties ( :New :Cancellation :SupplementaryData ) ;
 sh:xone ( [
  # Choice has optional elements.
  sh:node :EMPTY ][ sh:datatype xsd:string ; sh:maxLength 0] [
 sh:property [ sh:path :New ;
  sh:minCount 1 ; sh:maxCount 1 ;  
  sh:node :SecuritiesTransactionReport4 ] ; ] [
 sh:property [ sh:path :Cancellation ;
  sh:minCount 1 ; sh:maxCount 1 ;  
  sh:node :SecuritiesTransactionReport2 ] ; ] [
 sh:property [ sh:path :SupplementaryData ;
  sh:minCount 1 ;  
  sh:node :SupplementaryData1 ] ; ]  ) .
... # abbreviated
# Example CodeSet
 rdf:first "CANI" ; rdf:rest ("CSUB") .
# EMPTY NodeShape for validating ChoiceComponents which have at least one optional element.
:EMPTY a sh:NodeShape , rdfs:Class ; sh:closed true ; sh:nodeKind sh:BlankNode .

After the prefixes are defined for each namespace, the Message Definition specifies a target node for its root element, and has properties for its Identifier and Building Blocks. Message Component and Data Types are defined with properties for each Message Element. CodeSets are represented as rdf collections.

Choice Components allow selects one of its Message Elements. This is represented using sh:xone (exclusively one). A special case is when the occurence of a Message Element may be zero. In this case, the predicate for the Choice component may exist withouit content. We interpret that the predicate may have an empty string as a literal value or an :EMPTY blank node. The structure above appears to work in some SHACL validators.

Your feedback is welcome.