There are three schemas in scope within the EUDI Wallet - OOTS PoC, namely:

  • the PID schema (synergy 5 & 7),
  • the birth certificate schema (synergy 7) and
  • the diploma schema (synergy 4 & &).

The EUDI Wallet Architecture and Reference Framework lays out in Annex 3.1, a working document, the specifications related to the PID schema attributes within the EUDI Wallet; however, no respective specifications in relation to the birth certificate or diploma schema attributes are currently provided.

In the absence of established reference standards and/or specifications within the EUDI Wallet in relation to the three schemas considered, and given the currest status of implementation of the EUDI Wallet (i.e., use of attestations compliant to W3C Verifiable Credential data model (VCDM) version 1.1), the following approach was followed:

  • a custom PID schema was defined based on Annex 3.1's specifications on the attributes that a PID attestation shall contain;
  • a custom birth certificate schema was defined by reusing a subset of relevant attributes from the original Annex 3.1 PID attributes; 
  • for the diploma use case, given the availability of a, VCDM version 1.1 compliant, JSON representation of the EDC application profile, its direct reuse was preferred.      

Contents

1. PID schema

According to Annex 3.1, in addition to the specified four mandantory PID attributes (namely family_name, given_name, birth_date and age_over_18), PID providers shall include at least four of the optional six attributes specified in section 2.3.7 for purposes of facilitating identity matching. Given that in the PoC context, selective disclosure is not available, four optional attributes were customly selected, in accordance to the provisioned specifications, and included in the defined PoC schema as mandatory. The resulting schema is a minimal example implementation of the PID rulebook specifications and only meant for usage within the PoC context.

1.1 PID attributes

Table 1 below lists the PID schema attributes in relation to the credential subject and illustrates their correspondendences to the respective ARF's Annex 3.1 PID rulebook attributes.

Table 1: PID attributes
AttributeDefinitionRangeRequiredPID rulebook attribute
familyNameThe current last name(s) or surname(s) of the PID user.Stringcheck mark buttonfamily_name
givenNameThe current first name(s), including middle name(s), of the PID user.Stringcheck mark buttongiven_name
dateOfBirthDay, month, and year on which the PID user was born.Datecheck mark buttonbirth_date
ageOver18Attesting whether the PID user is currently an adult (true) or a minor (false).Booleancheck mark buttonage_over_18
countryOfBirthThe country where the PID user was born.ISO 3166-1 alpha-2 country codecheck mark buttonbirth_place
nationalityThe nationality of the PID user.ISO 3166-1 alpha-2 country codecheck mark buttonbirth_country
residentCountryThe country where the PID user currently resides.ISO 3166-1 alpha-2 country codecheck mark buttonresident_country
genderThe PID user's gender.ISO/IEC 5218check mark buttongender

The full schema can be consulted below; given that define schema implements an minimal example of the PID rule book specifications, the type "ewPID" was used instead of the prescribed "eu.europa.ec.eudi.pid.1" one.

PID credential schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://sr.oots.tech.ec.europa.eu/schemas/pid",
  "title": "PID",
  "description": "The schema defines a VCDM v1.1 compliant, minimal implementation of the EUDI Wallet PID rulebook for usage in the context of the EUDI Wallet - OOTS synergies PoC",
  "type": "object",
  "properties": {
    "@context": {
      "description": "Semantic context for the issued credential. First element MUST be https://www.w3.org/2018/credentials/v1",
      "type": "array",
      "items": {
        "type": "string",
        "format": "uri"
      },
      "contains": {
        "const": "https://www.w3.org/2018/credentials/v1"
      },
      "minItems": 1,
      "uniqueItems": true
    },
    "type": {
      "description": "Full type chain, used to identify the credential base types",
      "type": "array",
      "items": {
        "type": "string"
      },
      "contains": {
        "type": "string",
        "const": "ewPID"
      },
      "uniqueItems": true
    },
    "issuer": {
      "description": "Defines a property for expressing the issuer of a Verifiable Credential",
      "type": "object",
      "required": ["id", "name", "address"],
      "properties": {
        "id": {
          "description": "URI of the credential issuer",
          "type": "string",
          "format": "uri"
        },
		"name": {
		  "description": "Defines the name of the administrative authority that has issued this credential. issuing_authority as per ARF",
		  "type": "string"
		},
		"address": {
		  "description": "Defines a property for expressing the associated address of the issuing authority. Enables to express the issuing_country as per ARF",
		  "type": "object",
		  "$ref": "#/$defs/address" 
		}
	  }
    },
    "issued": {
	  "description": "Defines the date and time, when the credential was issued. issuance_date as per ARF",
      "type": "string",
      "format": "date-time"
	},
	"issuanceDate": {
      "description": "Defines the date and time, when the issued credential becomes valid",
      "type": "string",
      "format": "date-time"
    },
    "expirationDate": {
      "description": "Defines the date and time, when the issued credential expires. expiry_date as per ARF",
      "type": "string",
      "format": "date-time"
    },
    "credentialSubject": {
      "description": "Defines information about the subject that is defined by the type chain",
      "anyOf": [
        {
          "$ref": "#/$defs/PID"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PID"
          }
        }
      ]
    },
    "credentialStatus": {
      "description": "Defines suspension and/or revocation details for the issued credential. Further redefined by the type extension",
      "anyOf": [
        {
          "$ref": "#/$defs/credentialStatus"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/credentialStatus"
          }
        }
      ]
    },
    "credentialSchema": {
      "description": "One or more schemas that validate the Verifiable Credential.",
      "anyOf": [
        {
          "$ref": "#/$defs/credentialSchema"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/credentialSchema"
          }
        }
      ]
    },
    "termsOfUse": {
      "description": "Contains the terms under which the issued credential was issued",
      "anyOf": [
        {
          "$ref": "#/$defs/termsOfUse"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/termsOfUse"
          }
        }
      ]
    },
    "evidence": {
      "description": "Contains the optional evidence used to issue this credential",
      "anyOf": [
        {
          "$ref": "#/$defs/evidence"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/evidence"
          }
        }
      ]
    }
  },
  "required": [
    "@context",
    "type",
    "issuer",
	"issued", 
    "issuanceDate",
    "expirationDate",
    "credentialSubject",
    "credentialSchema"
  ],
  "$defs": {
    "PID": {
      "description": "Defines information about the subject that is defined by the type chain",
      "type": "object",
      "properties": {
        "givenName": {
         "description": "The current first name(s), including middle name(s), of the PID user. given_name as per ARF",
         "type": "string"
        },
        "familyName": {
         "description": "The current last name(s) or surname(s) of the PID user. family_name as per ARF",
         "type": "string"
        },
        "dateOfBirth": {
         "description": "Day, month, and year on which the PID user was born. birth_date as per ARF",
         "type": "string",
		 "format": "date"
        },
		"ageOver18": {
         "description": "Attesting whether the PID user is currently an adult (true) or a minor (false). age_over_18 as per ARF",
         "type": "boolean"
        }, 
        "countryOfBirth": {
         "description": "The country where the PID user was born, as an Alpha-2 country code as specified in ISO 3166-1. birth_country as per ARF",
         "type": "string",
		 "$ref": "#/$defs/countryCode"
        },
		"residentCountry": {
         "description": "The country where the PID User currently resides, as an Alpha-2 country code as specified in ISO 3166-1. resident_country as per ARF",
         "type": "string",
		 "$ref": "#/$defs/countryCode"
        },
		"gender": {
         "description": "PID User's gender, using a value as defined in ISO/IEC 5218. gender as per ARF",
         "type": "integer",
		 "enum": [0, 1, 2, 9]
        },
        "nationality": {
         "description": "Alpha-2 country code as specified in ISO 3166-1, representing the nationality of the PID User. nationality as per ARF",
         "type": "string",
		 "$ref": "#/$defs/countryCode"
        }		
      },
      "required": ["givenName", "familyName", "dateOfBirth", "ageOver18", "countryOfBirth", "residentCountry", "gender", "nationality"]  
    },
	"address": {
	  "description": "Defines an address",
	  "type": "object",
	  "properties": {
		"addressCountry": {
			"description": "The country of the address as an Alpha-2 country code as specified in ISO 3166-1",
			"type": "string",
			"$ref": "#/$defs/countryCode"
		}			
	  }
	},
    "credentialStatus": {
      "description": "Defines suspension and/or revocation details for the issued credential. Further redefined by the type extension",
      "type": "object",
      "properties": {
        "id": {
          "description": "Exact identity for the credential status",
          "type": "string",
          "format": "uri"
        },
        "type": {
          "description": "Defines the revocation type extension",
          "type": "string"
        }
      },
      "required": ["id", "type"]
    },
    "credentialSchema": {
      "description": "Contains information about the credential schema on which the issued credential is based",
      "type": "object",
      "properties": {
        "id": {
          "description": "References the credential schema stored on the Trusted Schemas Registry (TSR) on which the Verifiable Authorisation is based on",
          "type": "string",
          "format": "uri"
        },
        "type": {
          "description": "Defines credential schema type",
          "type": "string"
        }
      },
      "required": ["id", "type"]
    },
    "termsOfUse": {
      "description": "Contains the terms under which the issued credential was issued",
      "type": "object",
      "properties": {
        "id": {
          "description": "Contains a URL that points to where more information about this instance of terms of use can be found.",
          "type": "string"
        },
        "type": {
          "description": "Defines the type extension",
          "type": "string"
        }
      },
      "required": ["type"]
    },
    "evidence": {
      "type": "object",
      "properties": {
        "id": {
          "description": "If present, it SHOULD contain a URL that points to where more information about this instance of evidence can be found.",
          "type": "string"
        },
        "type": {
          "anyOf": [
            {
              "description": "Defines the evidence type extension",
              "type": "string"
            },
            {
              "description": "Defines the evidence type extension",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        }
      },
      "required": ["type"]
    },
	"countryCode": {
      "type": "string",
      "enum": [
        "AD",
        "AE",
        "AF",
        "AG",
        "AI",
        "AL",
        "AM",
        "AO",
        "AQ",
        "AR",
        "AT",
        "AU",
        "AW",
        "AX",
        "AZ",
        "BA",
        "BB",
        "BD",
        "BE",
        "BF",
        "BG",
        "BH",
        "BI",
        "BJ",
        "BL",
        "BM",
        "BN",
        "BO",
        "BQ",
        "BR",
        "BS",
        "BT",
        "BV",
        "BW",
        "BY",
        "BZ",
        "CA",
        "CC",
        "CD",
        "CF",
        "CG",
        "CH",
        "CI",
        "CK",
        "CL",
        "CM",
        "CN",
        "CO",
        "CR",
        "CU",
        "CV",
        "CW",
        "CX",
        "CY",
        "CZ",
        "DE",
        "DJ",
        "DK",
        "DM",
        "DO",
        "DZ",
        "EC",
        "EE",
        "EG",
        "EH",
        "ER",
        "ES",
        "ET",
        "FI",
        "FJ",
        "FK",
        "FM",
        "FO",
        "FR",
        "GA",
        "GB",
        "GD",
        "GE",
        "GF",
        "GG",
        "GH",
        "GI",
        "GL",
        "GM",
        "GN",
        "GP",
        "GQ",
        "GR",
        "GS",
        "GT",
        "GU",
        "GW",
        "GY",
        "HK",
        "HM",
        "HN",
        "HR",
        "HT",
        "HU",
        "ID",
        "IE",
        "IL",
        "IM",
        "IN",
        "IO",
        "IQ",
        "IR",
        "IS",
        "IT",
        "JE",
        "JM",
        "JO",
        "JP",
        "KE",
        "KG",
        "KH",
        "KI",
        "KM",
        "KN",
        "KP",
        "KR",
        "KW",
        "KY",
        "KZ",
        "LA",
        "LB",
        "LC",
        "LI",
        "LK",
        "LR",
        "LS",
        "LT",
        "LU",
        "LV",
        "LY",
        "MA",
        "MC",
        "MD",
        "ME",
        "MF",
        "MG",
        "MH",
        "MK",
        "ML",
        "MM",
        "MN",
        "MO",
        "MP",
        "MQ",
        "MR",
        "MS",
        "MT",
        "MU",
        "MV",
        "MW",
        "MX",
        "MY",
        "MZ",
        "NA",
        "NC",
        "NE",
        "NF",
        "NG",
        "NI",
        "NL",
        "NO",
        "NP",
        "NR",
        "NU",
        "NZ",
        "OM",
        "PA",
        "PE",
        "PF",
        "PG",
        "PH",
        "PK",
        "PL",
        "PM",
        "PN",
        "PR",
        "PS",
        "PT",
        "PW",
        "PY",
        "QA",
        "RE",
        "RO",
        "RS",
        "RU",
        "RW",
        "SA",
        "SB",
        "SC",
        "SD",
        "SE",
        "SG",
        "SH",
        "SI",
        "SJ",
        "SK",
        "SL",
        "SM",
        "SN",
        "SO",
        "SR",
        "SS",
        "ST",
        "SV",
        "SX",
        "SY",
        "SZ",
        "TC",
        "TD",
        "TF",
        "TG",
        "TH",
        "TJ",
        "TK",
        "TL",
        "TM",
        "TN",
        "TO",
        "TR",
        "TT",
        "TV",
        "TW",
        "TZ",
        "UA",
        "UG",
        "UM",
        "US",
        "UY",
        "UZ",
        "VA",
        "VC",
        "VE",
        "VG",
        "VI",
        "VN",
        "VU",
        "WF",
        "WS",
        "YE",
        "YT",
        "ZA",
        "ZM",
        "ZW"
      ]
    },
  }
}

1.2 PID attributes example

An example of a conformant PID attestation is shown below.

PID credential example
{
  "@context": ["https://www.w3.org/2018/credentials/v1"],
  "type": ["VerifiableCredential", "ewPID"],
  "credentialSchema": [
    {
      "id": "https://PoC-PID_schema_identifier",
      "type": "JsonSchema"
    }
  ],
  "credentialSubject": {
    "givenName": "Jane",
    "familyName": "Doe",
    "ageOver18": true,
    "dateOfBirth": "1995-03-26",
    "countryOfBirth": "ES",
    "nationality": "ES",
    "residentCountry": "ES",
    "gender": 2
  },
  "issued": "2024-03-26T16:03:32+01:00",
  "issuanceDate": "2024-03-26T16:03:32+01:00",
  "expirationDate": "2025-07-20T00:00:00+02:00",
  "issuer": {
    "id": "did:issuingAuthority:ebfeb1f712ebc6f1c276e12ec21",
    "name": "issuing authority name",
    "address": {
      "addressCountry": "ES"
    }
  }
}

2. Birth certificate schema

As afore-commented, in the absence of respective specifications in the ARF, a custom birth certificate schema was defined drawing upon the PID rulebook attributes.

2.1 Birth certificate attributes

Table 3 below lists the birth certificate schema attributes in relation to the credential subject.

Table 2: Birth certificate attributes
AttributeDefinitionRangeRequiredPID rulebook attribute
familyNameThe current last name(s) or surname(s) of the PID user.Stringcheck mark buttonfamily_name
givenNameThe current first name(s), including middle name(s), of the PID user.Stringcheck mark buttongiven_name
familyNameAtBirthThe last name(s) or surname(s) of the PID user at the time of birth.Stringcheck mark buttonfamily_name_birth
givenNameAtBirthThe first name(s), including middle name(s), of the PID user at the time of birth.Stringcheck mark buttongiven_name_birth
dateOfBirthDay, month, and year on which the PID user was born.Datecheck mark buttonbirth_date
countryOfBirthThe country where the PID user was born.ISO 3166-1 alpha-2 country codecheck mark buttonbirth_place
stateOfBirthThe state, province, district or local area where the PID user was born.Stringcheck mark buttonbirth_state
cityOfBirthThe municipality, city, town or village where the PID user was born.Stringcheck mark buttonbirth_city
genderThe PID user's gender.ISO/IEC 5218check mark buttongender

The full schema can be consulted below.

Birth certificate credential schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://sr.oots.tech.ec.europa.eu/schemas/birth-certificate",
  "title": "BirthCertificate",
  "description": "The schema defines a W3C VCDM v1.1 compliant Birth Certificate credential for usage in the context of the EUDI Wallet - OOTS synergies Poc",
  "type": "object",
  "properties": {
    "@context": {
      "description": "Semantic context for the issued credential. First element MUST be https://www.w3.org/2018/credentials/v1",
      "type": "array",
      "items": {
        "type": "string",
        "format": "uri"
      },
      "contains": {
        "const": "https://www.w3.org/2018/credentials/v1"
      },
      "minItems": 1,
      "uniqueItems": true
    },
    "type": {
      "description": "Full type chain, used to identify the credential base types",
      "type": "array",
      "items": {
        "type": "string"
      },
      "contains": {
        "type": "string",
        "const": "ewBirthCertificate"
      },
      "uniqueItems": true
    },
    "issuer": {
      "description": "Defines a property for expressing the issuer of a Verifiable Credential",
      "type": "object",
      "required": ["id", "name", "address"],
      "properties": {
        "id": {
          "description": "URL of the credential issuer",
          "type": "string",
          "format": "uri"
        },
		"name": {
		  "description": "Defines the name of the administrative authority that issues the credential. issuing_authority as per ARF",
		  "type": "string"
		},
		"address": {
		  "description": "Defines a property for expressing the associated address of the issuing authority. Enables to express the issuing_country as per ARF",
		  "type": "object",
		  "$ref": "#/$defs/address" 
		}
	  }
    },
    "issued": {
	  "description": "Defines the date and time, when the credential was issued. issuance_date as per ARF",
      "type": "string",
      "format": "date-time"
	},
	"issuanceDate": {
      "description": "Defines the date and time, when the issued credential becomes valid",
      "type": "string",
      "format": "date-time"
    },
    "expirationDate": {
      "description": "Defines the date and time, when the issued credential expires",
      "type": "string",
      "format": "date-time"
    },
    "credentialSubject": {
      "description": "Defines information about the subject that is defined by the type chain",
      "anyOf": [
        {
          "$ref": "#/$defs/BirthCertificate"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/BirthCertificate"
          }
        }
      ]
    },
    "credentialStatus": {
      "description": "Defines suspension and/or revocation details for the issued credential. Further redefined by the type extension",
      "anyOf": [
        {
          "$ref": "#/$defs/credentialStatus"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/credentialStatus"
          }
        }
      ]
    },
    "credentialSchema": {
      "description": "One or more schemas that validate the Verifiable Credential.",
      "anyOf": [
        {
          "$ref": "#/$defs/credentialSchema"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/credentialSchema"
          }
        }
      ]
    },
    "termsOfUse": {
      "description": "Contains the terms under which the issued credential was issued",
      "anyOf": [
        {
          "$ref": "#/$defs/termsOfUse"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/termsOfUse"
          }
        }
      ]
    },
    "evidence": {
      "description": "Contains the optional evidence used to issue this credential",
      "anyOf": [
        {
          "$ref": "#/$defs/evidence"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/evidence"
          }
        }
      ]
    }
  },
  "required": [
    "@context",
    "type",
    "issuer",
	"issued",
    "issuanceDate",
    "expirationDate",
    "credentialSubject",
    "credentialSchema"
  ],
  "$defs": {
    "BirthCertificate": {
      "description": "Defines information about the credential subject that is defined by the type chain",
      "type": "object",
      "properties": {
        "givenName": {
         "description": "The current first name(s), including middle name(s), of the user. given_name as per ARF",
         "type": "string"
        },
        "familyName": {
         "description": "The current last name(s) or surname(s) of the user. family_name as per ARF",
         "type": "string"
        },
		"givenNameAtBirth": {
         "description": "The first name(s), including middle name(s), of the user at the time of birth. given_name_birth as per ARF",
         "type": "string"
        },
        "familyNameAtBirth": {
         "description": "The last name(s) or surname(s) of the PID user at the time of birth. family_name_birth as per ARF",
         "type": "string"
        },
        "dateOfBirth": {
         "description": "Day, month, and year on which the PID user was born. birth_date as per ARF",
         "type": "string",
		 "format": "date"
        }, 
        "countryOfBirth": {
         "description": "The country where the PID user was born, as an Alpha-2 country code as specified in ISO 3166-1. birth_country as per ARF",
         "type": "string",
		 "$ref": "#/$defs/countryCode"
        },
		"stateOfBirth": {
         "description": "The state, province, district, or local area where the subject was born. birth_state as per ARF",
         "type": "string",
        },
		"cityOfBirth": {
         "description": "The municipality, city, town, or village where the subject was born. birth_city as per ARF",
         "type": "string",
        },
		"gender": {
         "description": "PID User's gender, using a value as defined in ISO/IEC 5218. gender as per ARF",
         "type": "integer",
		 "enum": [0, 1, 2, 9]
        }		
      },
      "required": ["givenName", "familyName", "givenNameAtBirth", "familyNameAtBirth", "dateOfBirth", "countryOfBirth", "stateOfBirth", "cityOfBirth", "gender"]  
    },
	"address": {
	  "description": "Defines an address",
	  "type": "object",
	  "properties": {
		"addressCountry": {
			"description": "The country of the address as an Alpha-2 country code as specified in ISO 3166-1",
			"type": "string",
			"$ref": "#/$defs/countryCode"
		}			
	  }
	},
    "credentialStatus": {
      "description": "Defines suspension and/or revocation details for the issued credential. Further redefined by the type extension",
      "type": "object",
      "properties": {
        "id": {
          "description": "Exact identity for the credential status",
          "type": "string",
          "format": "uri"
        },
        "type": {
          "description": "Defines the revocation type extension",
          "type": "string"
        }
      },
      "required": ["id", "type"]
    },
    "credentialSchema": {
      "description": "Contains information about the credential schema on which the issued credential is based",
      "type": "object",
      "properties": {
        "id": {
          "description": "References the credential schema stored on the Trusted Schemas Registry (TSR) on which the Verifiable Authorisation is based on",
          "type": "string",
          "format": "uri"
        },
        "type": {
          "description": "Defines credential schema type",
          "type": "string"
        }
      },
      "required": ["id", "type"]
    },
    "termsOfUse": {
      "description": "Contains the terms under which the issued credential was issued",
      "type": "object",
      "properties": {
        "id": {
          "description": "Contains a URL that points to where more information about this instance of terms of use can be found.",
          "type": "string"
        },
        "type": {
          "description": "Defines the type extension",
          "type": "string"
        }
      },
      "required": ["type"]
    },
    "evidence": {
      "type": "object",
      "properties": {
        "id": {
          "description": "If present, it SHOULD contain a URL that points to where more information about this instance of evidence can be found.",
          "type": "string"
        },
        "type": {
          "anyOf": [
            {
              "description": "Defines the evidence type extension",
              "type": "string"
            },
            {
              "description": "Defines the evidence type extension",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        }
      },
      "required": ["type"]
    },
	"countryCode": {
      "type": "string",
      "enum": [
        "AD",
        "AE",
        "AF",
        "AG",
        "AI",
        "AL",
        "AM",
        "AO",
        "AQ",
        "AR",
        "AT",
        "AU",
        "AW",
        "AX",
        "AZ",
        "BA",
        "BB",
        "BD",
        "BE",
        "BF",
        "BG",
        "BH",
        "BI",
        "BJ",
        "BL",
        "BM",
        "BN",
        "BO",
        "BQ",
        "BR",
        "BS",
        "BT",
        "BV",
        "BW",
        "BY",
        "BZ",
        "CA",
        "CC",
        "CD",
        "CF",
        "CG",
        "CH",
        "CI",
        "CK",
        "CL",
        "CM",
        "CN",
        "CO",
        "CR",
        "CU",
        "CV",
        "CW",
        "CX",
        "CY",
        "CZ",
        "DE",
        "DJ",
        "DK",
        "DM",
        "DO",
        "DZ",
        "EC",
        "EE",
        "EG",
        "EH",
        "ER",
        "ES",
        "ET",
        "FI",
        "FJ",
        "FK",
        "FM",
        "FO",
        "FR",
        "GA",
        "GB",
        "GD",
        "GE",
        "GF",
        "GG",
        "GH",
        "GI",
        "GL",
        "GM",
        "GN",
        "GP",
        "GQ",
        "GR",
        "GS",
        "GT",
        "GU",
        "GW",
        "GY",
        "HK",
        "HM",
        "HN",
        "HR",
        "HT",
        "HU",
        "ID",
        "IE",
        "IL",
        "IM",
        "IN",
        "IO",
        "IQ",
        "IR",
        "IS",
        "IT",
        "JE",
        "JM",
        "JO",
        "JP",
        "KE",
        "KG",
        "KH",
        "KI",
        "KM",
        "KN",
        "KP",
        "KR",
        "KW",
        "KY",
        "KZ",
        "LA",
        "LB",
        "LC",
        "LI",
        "LK",
        "LR",
        "LS",
        "LT",
        "LU",
        "LV",
        "LY",
        "MA",
        "MC",
        "MD",
        "ME",
        "MF",
        "MG",
        "MH",
        "MK",
        "ML",
        "MM",
        "MN",
        "MO",
        "MP",
        "MQ",
        "MR",
        "MS",
        "MT",
        "MU",
        "MV",
        "MW",
        "MX",
        "MY",
        "MZ",
        "NA",
        "NC",
        "NE",
        "NF",
        "NG",
        "NI",
        "NL",
        "NO",
        "NP",
        "NR",
        "NU",
        "NZ",
        "OM",
        "PA",
        "PE",
        "PF",
        "PG",
        "PH",
        "PK",
        "PL",
        "PM",
        "PN",
        "PR",
        "PS",
        "PT",
        "PW",
        "PY",
        "QA",
        "RE",
        "RO",
        "RS",
        "RU",
        "RW",
        "SA",
        "SB",
        "SC",
        "SD",
        "SE",
        "SG",
        "SH",
        "SI",
        "SJ",
        "SK",
        "SL",
        "SM",
        "SN",
        "SO",
        "SR",
        "SS",
        "ST",
        "SV",
        "SX",
        "SY",
        "SZ",
        "TC",
        "TD",
        "TF",
        "TG",
        "TH",
        "TJ",
        "TK",
        "TL",
        "TM",
        "TN",
        "TO",
        "TR",
        "TT",
        "TV",
        "TW",
        "TZ",
        "UA",
        "UG",
        "UM",
        "US",
        "UY",
        "UZ",
        "VA",
        "VC",
        "VE",
        "VG",
        "VI",
        "VN",
        "VU",
        "WF",
        "WS",
        "YE",
        "YT",
        "ZA",
        "ZM",
        "ZW"
      ]
    },
  }
}

2.2 Birth certificate attributes example

An example of a conformant birth attestation is shown below.

Birth certificate credential example
{
  "@context": ["https://www.w3.org/2018/credentials/v1"],
  "type": ["VerifiableCredential", "ewBirthCertificate"],
  "credentialSchema": [
    {
      "id": "https://PoC-BirthCertificate_schema_identifier",
      "type": "JsonSchema"
    }
  ],
  "credentialSubject": {
    "givenName": "Jane", 
    "familyName": "Doe",
    "givenNameAtBirth": "Jane Jane",
    "familyNameAtBirth": "", 
	"dateOfBirth": "1995-03-26",  
	"countryOfBirth": "ES",
    "stateOfBirth": "Madrid",
    "cityOfBirth": "Madrid", 
	"gender": 2 
  },
  "issued": "2024-03-26T16:03:32+01:00",
  "issuanceDate": "2024-03-26T16:03:32+01:00",
  "expirationDate": "2025-07-20T00:00:00+02:00",
  "issuer": {
    "id": "did:issuingAuthority:ebfeb1f712ebc6f1c276e12ec21",
	"name": "issuing authority name",
    "address": {
       "addressCountry": "ES"
    }
  }
}

3. Diploma schema 

The JSON schema for qualifications is a translation of the ELM (version 3.2) EDC profile and can be found in the following locations:

The original ELM EDC profile is defined in RDF & SHACL and can be found among others in the PO's ELM dedicated webpage: European Learning Model - EU Vocabularies - Publications Office of the EU (europa.eu)

3.1 Diploma attributes

For brevity, the tables below list only a subset of the JSON EDC attributes, namely those in accordance with the specifics of synergy 4. 

Table 3.1 lists the pertinent credential subject attributes:

AttributeDefinitionRangeRequiredCardinality
familyNameThe family name of the person.LangString-0..*
givenNameThe given name of the person.LangString-0..*
hasClaimA claim of the person.Claim-0..*


Table 3.2 lists the Claim attributes:

AttributeDefinitionRangeRequiredCardinality
titleThe title of the claim. One value per language is permitted.LangString check mark button 1..*
awardedByThe awarding details of the claim.AwardingProcesscheck mark button 1..1


Table 3.3 lists the AwardingProcess attributes:

AttributeDefinitionRangeRequiredCardinality
awardingBodyThe awarding body related to this awarding activity (i.e., the organisation that issues the qualification). Only in cases of co-awarding/co-graduation, where a qualification is issued to an individual by two or more organisations, the cardinality is greater than 1.Organisationcheck mark button 1..*
awardingDateThe date when the learning specification was awarded. If not specified it is undefined ('not known').Date-0..1


Table 3.4 lists the pertinent Organisation attributes:

AttributeDefinitionRangeRequiredCardinality
legalNameThe legal name of the organisation.LangStringcheck mark button 1..*
locationThe location of the organisation.LangStringcheck mark button 1..*


Table 3.5 lists the pertinent Location attributes:

AttributeDefinitionRangeRequiredCardinality
addressAn address associated with the location.Addresscheck mark button 1..*


Table 3.6 lists the pertinent Address attributes:

AttributeDefinitionRangeRequiredCardinality
countryCodeThe address' country code. It should be provided using the Country Named Authority List.Controlled vocabularycheck mark button 1..1

3.2 Diploma attributes example

 An example of a conformant diploma attestation is shown below.

Diploma credential example
{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "http://data.europa.eu/snb/model/context/edc-ap"
  ],
  "id": "urn:credential:87ddce4d-de74-4838-b7a4-1f14d9c614ec",
  "type": [
    "VerifiableCredential",
    "VerifiableAttestation",
    "EuropeanDigitalCredential"
  ],
  "credentialSchema": [
    {
      "id": "http://data.europa.eu/snb/model/ap/edc-generic-full",
      "type": "ShaclValidator2017"
    },
    {
      "id": "https://api-pilot.ebsi.eu/trusted-schemas-registry/v3/schemas/0x7ff3bc76bd5e37b3d29721b8698646a722a24a4f4ab0a0ba63d4bbbe0ef9758d",
      "type": "JsonSchema"
    }
  ],
  "credentialSubject": {
    "id": "did:key:abcdefg12345",
    "type": "Person",
    "identifier": [
      {
        "id": "urn:epass:identifier:2",
        "type": "Identifier",
        "notation": "5547554",
        "schemeName": "Student ID"
      }
    ],
    "givenName": {
      "en": ["David"]
    },
    "familyName": {
      "en": ["Smith"]
    },
    "fullName": {
      "en": ["David Smith"]
    },
    "hasClaim": [
      {
        "id": "urn:epass:learningAchievement:6",
        "type": "LearningAchievement",
		"title": {
          "en": [
            "Master of Electromechanical Engineering"
          ]
        },
        "awardedBy": {
          "id": "urn:epass:awardingProcess:1",
          "type": "AwardingProcess",
          "awardingBody": [
            {
              "id": "urn:epass:org:1",
              "type": "Organisation",
              "location": [
                {
                  "id": "urn:epass:location:1",
                  "type": "Location",
                  "address": [
                    {
                      "id": "urn:epass:address:1",
                      "type": "Address",
                      "countryCode": {
                        "id": "http://publications.europa.eu/resource/authority/country/BEL",
                        "type": "Concept",
                        "inScheme": {
                          "id": "http://publications.europa.eu/resource/authority/country",
                          "type": "ConceptScheme"
                        },
                        "prefLabel": {
                          "en": ["Belgium"]
                        },
                        "notation": "country"
                      }
                    }
                  ]
                }
              ],
              "legalName": {
                "en": ["University Legal Name"]
              }
            }
          ]
        }
      }
    ]
  },
  "issuanceDate": "2024-03-26T16:03:32+01:00",
  "issuer": {
    "id": "did:example:org:12345689",
    "type": "Organisation",
    "location": [
      {
        "id": "urn:epass:certificateLocation:1",
        "type": "Location",
        "address": {
          "id": "urn:epass:certificateAddress:1",
          "type": "Address",
          "countryCode": {
            "id": "http://publications.europa.eu/resource/authority/country/ESP",
            "type": "Concept",
            "inScheme": {
              "id": "http://publications.europa.eu/resource/authority/country",
              "type": "ConceptScheme"
            },
            "notation": "country",
            "prefLabel": { "en": "Spain" }
          }
        }
      }
    ],
    "identifier": {
      "id": "urn:epass:identifier:2",
      "type": "Identifier",
      "schemeName": "Scheme name",
      "notation": "73737373"
    },
    "legalName": { "en": "University Legal Name" }
  },
  "issued": "2024-03-26T16:03:32+01:00",
  "validFrom": "2020-07-20T00:00:00+02:00",
}




  • No labels