{
  "$schema" : "https://json-schema.org/draft/2019-09/schema#",
  "$id" : "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_profile_schema.json",
  "title" : "JSON-LD Schema adaptation for the Profile class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_profile_schema.json for the formal JSON Schema definition.",
  "description" : "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.",
  "type" : "object",
  "properties" : {
    "id" : {
      "description" : "Unique URI for the Issuer/Profile file.",
      "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "type" : {
      "oneOf" : [ {
        "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.",
        "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
        "oneOf" : [ {
          "type" : "string"
        }, {
          "type" : "object",
          "additionalProperties" : {
            "type" : "string"
          },
          "propertyNames" : {
            "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
          }
        } ]
      }, {
        "type" : "array",
        "minItems" : 1,
        "contains" : {
          "enum" : [ "Profile" ]
        },
        "items" : {
          "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.",
          "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      } ]
    },
    "name" : {
      "description" : "The name of the entity or organization.",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "url" : {
      "description" : "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.",
      "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "phone" : {
      "description" : "A phone number.",
      "$comment" : "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "description" : {
      "description" : "A short description of the issuer entity or organization.",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "endorsement" : {
      "oneOf" : [ {
        "$ref" : "#/$defs/EndorsementCredential"
      }, {
        "type" : "array",
        "items" : {
          "$ref" : "#/$defs/EndorsementCredential"
        }
      } ]
    },
    "endorsementJwt" : {
      "oneOf" : [ {
        "description" : "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.",
        "$comment" : "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].",
        "oneOf" : [ {
          "type" : "string",
          "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
        }, {
          "type" : "object",
          "additionalProperties" : {
            "type" : "string",
            "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
          },
          "propertyNames" : {
            "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
          }
        } ]
      }, {
        "type" : "array",
        "items" : {
          "description" : "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.",
          "$comment" : "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].",
          "oneOf" : [ {
            "type" : "string",
            "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string",
              "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      } ]
    },
    "image" : {
      "$ref" : "#/$defs/Image"
    },
    "email" : {
      "description" : "An email address.",
      "$comment" : "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "address" : {
      "$ref" : "#/$defs/Address"
    },
    "otherIdentifier" : {
      "oneOf" : [ {
        "$ref" : "#/$defs/IdentifierEntry"
      }, {
        "type" : "array",
        "items" : {
          "$ref" : "#/$defs/IdentifierEntry"
        }
      } ]
    },
    "official" : {
      "description" : "If the entity is an organization, `official` is the name of an authorized official of the organization.",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "parentOrg" : {
      "$ref" : "#/$defs/Profile"
    },
    "familyName" : {
      "description" : "Family name. In the western world, often referred to as the 'last name' of a person.",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "givenName" : {
      "description" : "Given name. In the western world, often referred to as the 'first name' of a person.",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "additionalName" : {
      "description" : "Additional name. Includes what is often referred to as 'middle name' in the western world.",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "patronymicName" : {
      "description" : "Patronymic name.",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "honorificPrefix" : {
      "description" : "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "honorificSuffix" : {
      "description" : "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "familyNamePrefix" : {
      "description" : "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').",
      "$comment" : "Origin: String (PrimitiveType); Character strings.",
      "oneOf" : [ {
        "type" : "string"
      }, {
        "type" : "object",
        "additionalProperties" : {
          "type" : "string"
        },
        "propertyNames" : {
          "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
        }
      } ]
    },
    "dateOfBirth" : {
      "description" : "Birthdate of the person.",
      "$comment" : "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.",
      "type" : "string",
      "format" : "date"
    }
  },
  "required" : [ "id", "type" ],
  "additionalProperties" : true,
  "$defs" : {
    "EndorsementCredential" : {
      "description" : "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
      "type" : "object",
      "properties" : {
        "@context" : {
          "oneOf" : [ {
            "$ref" : "#/$defs/Context"
          }, {
            "type" : "array",
            "minItems" : 2,
            "items" : [ {
              "enum" : [ "https://www.w3.org/ns/credentials/v2" ]
            }, {
              "type" : "string",
              "pattern" : "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$"
            } ],
            "additionalItems" : {
              "$ref" : "#/$defs/Context"
            }
          } ]
        },
        "type" : {
          "oneOf" : [ {
            "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.",
            "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
            "oneOf" : [ {
              "type" : "string"
            }, {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string"
              },
              "propertyNames" : {
                "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
              }
            } ]
          }, {
            "allOf" : [ {
              "type" : "array",
              "minItems" : 1,
              "contains" : {
                "enum" : [ "VerifiableCredential" ]
              },
              "items" : {
                "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.",
                "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
                "oneOf" : [ {
                  "type" : "string"
                }, {
                  "type" : "object",
                  "additionalProperties" : {
                    "type" : "string"
                  },
                  "propertyNames" : {
                    "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
                  }
                } ]
              }
            }, {
              "type" : "array",
              "minItems" : 1,
              "contains" : {
                "enum" : [ "EndorsementCredential" ]
              },
              "items" : {
                "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.",
                "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
                "oneOf" : [ {
                  "type" : "string"
                }, {
                  "type" : "object",
                  "additionalProperties" : {
                    "type" : "string"
                  },
                  "propertyNames" : {
                    "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
                  }
                } ]
              }
            } ]
          } ]
        },
        "id" : {
          "description" : "Unambiguous reference to the credential.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "name" : {
          "description" : "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "description" : {
          "description" : "The short description of the credential for display purposes in wallets.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "credentialSubject" : {
          "$ref" : "#/$defs/EndorsementSubject"
        },
        "awardedDate" : {
          "description" : "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.",
          "$comment" : "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type" : "string",
          "format" : "date-time"
        },
        "issuer" : {
          "$ref" : "#/$defs/ProfileRef"
        },
        "validFrom" : {
          "description" : "Timestamp of when the credential becomes valid.",
          "$comment" : "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type" : "string",
          "format" : "date-time"
        },
        "validUntil" : {
          "description" : "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.",
          "$comment" : "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type" : "string",
          "format" : "date-time"
        },
        "proof" : {
          "oneOf" : [ {
            "$ref" : "#/$defs/Proof"
          }, {
            "type" : "array",
            "items" : {
              "$ref" : "#/$defs/Proof"
            }
          } ]
        },
        "credentialSchema" : {
          "oneOf" : [ {
            "$ref" : "#/$defs/CredentialSchema"
          }, {
            "type" : "array",
            "items" : {
              "$ref" : "#/$defs/CredentialSchema"
            }
          } ]
        },
        "credentialStatus" : {
          "$ref" : "#/$defs/CredentialStatus"
        },
        "refreshService" : {
          "$ref" : "#/$defs/RefreshService"
        },
        "termsOfUse" : {
          "oneOf" : [ {
            "$ref" : "#/$defs/TermsOfUse"
          }, {
            "type" : "array",
            "items" : {
              "$ref" : "#/$defs/TermsOfUse"
            }
          } ]
        },
        "evidence" : {
          "oneOf" : [ {
            "$ref" : "#/$defs/Evidence"
          }, {
            "type" : "array",
            "items" : {
              "$ref" : "#/$defs/Evidence"
            }
          } ]
        }
      },
      "required" : [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ],
      "additionalProperties" : true
    },
    "CredentialStatus" : {
      "description" : "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.",
      "type" : "object",
      "properties" : {
        "id" : {
          "description" : "The value MUST be the URL of the issuer's credential status method.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "type" : {
          "description" : "The name of the credential status method.",
          "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      },
      "required" : [ "type" ],
      "additionalProperties" : true
    },
    "IdentifierEntry" : {
      "description" : "No description supplied.",
      "type" : "object",
      "properties" : {
        "type" : {
          "description" : "MUST be the IRI 'IdentifierEntry'.",
          "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string",
            "enum" : [ "IdentifierEntry" ]
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string",
              "enum" : [ "IdentifierEntry" ]
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "identifier" : {
          "description" : "An identifier.",
          "$comment" : "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "identifierType" : {
          "description" : "The identifier type.",
          "$comment" : "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf" : [ {
            "type" : "string",
            "enum" : [ "name", "sourcedId", "systemId", "productId", "userName", "accountId", "emailAddress", "nationalIdentityNumber", "isbn", "issn", "lisSourcedId", "oneRosterSourcedId", "sisSourcedId", "ltiContextId", "ltiDeploymentId", "ltiToolId", "ltiPlatformId", "ltiUserId", "identifier" ]
          }, {
            "type" : "string",
            "pattern" : "(ext:)[a-z|A-Z|0-9|.|-|_]+"
          } ]
        }
      },
      "required" : [ "type", "identifier", "identifierType" ],
      "additionalProperties" : false
    },
    "Proof" : {
      "description" : "A JSON-LD Linked Data proof.",
      "type" : "object",
      "properties" : {
        "type" : {
          "description" : "Signature suite used to produce proof.",
          "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "created" : {
          "description" : "Date the proof was created.",
          "$comment" : "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.",
          "type" : "string",
          "format" : "date-time"
        },
        "cryptosuite" : {
          "description" : "The suite used to create the proof.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "challenge" : {
          "description" : "A value chosen by the verifier to mitigate authentication proof replay attacks.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "domain" : {
          "description" : "The domain of the proof to restrict its use to a particular target.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "nonce" : {
          "description" : "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "proofPurpose" : {
          "description" : "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "proofValue" : {
          "description" : "Value of the proof.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "verificationMethod" : {
          "description" : "The URL of the public key that can verify the signature.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      },
      "required" : [ "type" ],
      "additionalProperties" : true
    },
    "RefreshService" : {
      "description" : "The information in RefreshService is used to refresh the verifiable credential.",
      "type" : "object",
      "properties" : {
        "id" : {
          "description" : "The value MUST be the URL of the issuer's refresh service.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "type" : {
          "description" : "The name of the refresh service method.",
          "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      },
      "required" : [ "id", "type" ],
      "additionalProperties" : true
    },
    "Image" : {
      "description" : "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.",
      "type" : "object",
      "properties" : {
        "id" : {
          "description" : "The URI or Data URI of the image.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "type" : {
          "description" : "MUST be the IRI 'Image'.",
          "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string",
            "enum" : [ "Image" ]
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string",
              "enum" : [ "Image" ]
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "caption" : {
          "description" : "The caption for the image.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      },
      "required" : [ "id", "type" ],
      "additionalProperties" : false
    },
    "EndorsementSubject" : {
      "description" : "A collection of information about the subject of the endorsement.",
      "type" : "object",
      "properties" : {
        "id" : {
          "description" : "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "type" : {
          "oneOf" : [ {
            "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'EndorsementSubject'.",
            "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
            "oneOf" : [ {
              "type" : "string"
            }, {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string"
              },
              "propertyNames" : {
                "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
              }
            } ]
          }, {
            "type" : "array",
            "minItems" : 1,
            "contains" : {
              "enum" : [ "EndorsementSubject" ]
            },
            "items" : {
              "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'EndorsementSubject'.",
              "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
              "oneOf" : [ {
                "type" : "string"
              }, {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "string"
                },
                "propertyNames" : {
                  "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
                }
              } ]
            }
          } ]
        },
        "endorsementComment" : {
          "description" : "Allows endorsers to make a simple claim in writing about the entity.",
          "$comment" : "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      },
      "required" : [ "id", "type" ],
      "additionalProperties" : true
    },
    "Context" : {
      "description" : "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.",
      "anyOf" : [ {
        "description" : "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
        "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
        "oneOf" : [ {
          "type" : "string"
        }, {
          "type" : "object",
          "additionalProperties" : {
            "type" : "string"
          },
          "propertyNames" : {
            "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
          }
        } ]
      }, {
        "description" : "A map representing an object with unknown, arbitrary properties",
        "$comment" : "Origin: Map (PrimitiveType); A map representing an object with unknown, arbitrary properties",
        "type" : "object"
      } ]
    },
    "TermsOfUse" : {
      "description" : "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued",
      "type" : "object",
      "properties" : {
        "id" : {
          "description" : "The value MUST be a URI identifying the term of use.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "type" : {
          "description" : "The value MUST identify the type of the terms of use.",
          "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      },
      "required" : [ "type" ],
      "additionalProperties" : true
    },
    "Evidence" : {
      "description" : "Descriptive metadata about evidence related to the achievement assertion. Each instance of the evidence class present in an assertion corresponds to one entity, though a single entry can describe a set of items collectively. There may be multiple evidence entries referenced from an assertion. The narrative property is also in scope of the assertion class to provide an overall description of the achievement related to the assertion in rich text. It is used here to provide a narrative of achievement of the specific entity described. If both the description and narrative properties are present, displayers can assume the narrative value goes into more detail and is not simply a recapitulation of description.",
      "type" : "object",
      "properties" : {
        "id" : {
          "description" : "The URL of a webpage presenting evidence of achievement or the evidence encoded as a Data URI. The schema of the webpage is undefined.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "type" : {
          "oneOf" : [ {
            "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'.",
            "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
            "oneOf" : [ {
              "type" : "string"
            }, {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string"
              },
              "propertyNames" : {
                "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
              }
            } ]
          }, {
            "type" : "array",
            "minItems" : 1,
            "contains" : {
              "enum" : [ "Evidence" ]
            },
            "items" : {
              "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'.",
              "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
              "oneOf" : [ {
                "type" : "string"
              }, {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "string"
                },
                "propertyNames" : {
                  "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
                }
              } ]
            }
          } ]
        },
        "narrative" : {
          "description" : "A narrative that describes the evidence and process of achievement that led to an assertion.",
          "$comment" : "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "name" : {
          "description" : "A descriptive title of the evidence.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "description" : {
          "description" : "A longer description of the evidence.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "genre" : {
          "description" : "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "audience" : {
          "description" : "A description of the intended audience for a piece of evidence.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      },
      "required" : [ "type" ],
      "additionalProperties" : true
    },
    "ProfileRef" : {
      "description" : "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.",
      "anyOf" : [ {
        "$ref" : "#/$defs/Profile"
      }, {
        "description" : "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
        "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
        "oneOf" : [ {
          "type" : "string"
        }, {
          "type" : "object",
          "additionalProperties" : {
            "type" : "string"
          },
          "propertyNames" : {
            "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
          }
        } ]
      } ]
    },
    "Address" : {
      "description" : "An address for the described entity.",
      "type" : "object",
      "properties" : {
        "type" : {
          "oneOf" : [ {
            "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.",
            "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
            "oneOf" : [ {
              "type" : "string"
            }, {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string"
              },
              "propertyNames" : {
                "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
              }
            } ]
          }, {
            "type" : "array",
            "minItems" : 1,
            "contains" : {
              "enum" : [ "Address" ]
            },
            "items" : {
              "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.",
              "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
              "oneOf" : [ {
                "type" : "string"
              }, {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "string"
                },
                "propertyNames" : {
                  "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
                }
              } ]
            }
          } ]
        },
        "addressCountry" : {
          "description" : "A country.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "addressCountryCode" : {
          "description" : "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "$comment" : "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "addressRegion" : {
          "description" : "A region within the country.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "addressLocality" : {
          "description" : "A locality within the region.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "streetAddress" : {
          "description" : "A street address within the locality.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "postOfficeBoxNumber" : {
          "description" : "A post office box number for PO box addresses.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "postalCode" : {
          "description" : "A postal code.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "geo" : {
          "$ref" : "#/$defs/GeoCoordinates"
        }
      },
      "required" : [ "type" ],
      "additionalProperties" : true
    },
    "GeoCoordinates" : {
      "description" : "The geographic coordinates of a location.",
      "type" : "object",
      "properties" : {
        "type" : {
          "description" : "MUST be the IRI 'GeoCoordinates'.",
          "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string",
            "enum" : [ "GeoCoordinates" ]
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string",
              "enum" : [ "GeoCoordinates" ]
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "latitude" : {
          "description" : "The latitude of the location [[WGS84]].",
          "$comment" : "Origin: Float (PrimitiveType)",
          "type" : "number"
        },
        "longitude" : {
          "description" : "The longitude of the location [[WGS84]].",
          "$comment" : "Origin: Float (PrimitiveType)",
          "type" : "number"
        }
      },
      "required" : [ "type", "latitude", "longitude" ],
      "additionalProperties" : true
    },
    "Profile" : {
      "description" : "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.",
      "type" : "object",
      "properties" : {
        "id" : {
          "description" : "Unique URI for the Issuer/Profile file.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "type" : {
          "oneOf" : [ {
            "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.",
            "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
            "oneOf" : [ {
              "type" : "string"
            }, {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string"
              },
              "propertyNames" : {
                "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
              }
            } ]
          }, {
            "type" : "array",
            "minItems" : 1,
            "contains" : {
              "enum" : [ "Profile" ]
            },
            "items" : {
              "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.",
              "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
              "oneOf" : [ {
                "type" : "string"
              }, {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "string"
                },
                "propertyNames" : {
                  "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
                }
              } ]
            }
          } ]
        },
        "name" : {
          "description" : "The name of the entity or organization.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "url" : {
          "description" : "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "phone" : {
          "description" : "A phone number.",
          "$comment" : "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "description" : {
          "description" : "A short description of the issuer entity or organization.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "endorsement" : {
          "oneOf" : [ {
            "$ref" : "#/$defs/EndorsementCredential"
          }, {
            "type" : "array",
            "items" : {
              "$ref" : "#/$defs/EndorsementCredential"
            }
          } ]
        },
        "endorsementJwt" : {
          "oneOf" : [ {
            "description" : "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.",
            "$comment" : "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].",
            "oneOf" : [ {
              "type" : "string",
              "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
            }, {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string",
                "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
              },
              "propertyNames" : {
                "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
              }
            } ]
          }, {
            "type" : "array",
            "items" : {
              "description" : "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.",
              "$comment" : "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].",
              "oneOf" : [ {
                "type" : "string",
                "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
              }, {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "string",
                  "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
                },
                "propertyNames" : {
                  "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
                }
              } ]
            }
          } ]
        },
        "image" : {
          "$ref" : "#/$defs/Image"
        },
        "email" : {
          "description" : "An email address.",
          "$comment" : "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "address" : {
          "$ref" : "#/$defs/Address"
        },
        "otherIdentifier" : {
          "oneOf" : [ {
            "$ref" : "#/$defs/IdentifierEntry"
          }, {
            "type" : "array",
            "items" : {
              "$ref" : "#/$defs/IdentifierEntry"
            }
          } ]
        },
        "official" : {
          "description" : "If the entity is an organization, `official` is the name of an authorized official of the organization.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "parentOrg" : {
          "$ref" : "#/$defs/Profile"
        },
        "familyName" : {
          "description" : "Family name. In the western world, often referred to as the 'last name' of a person.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "givenName" : {
          "description" : "Given name. In the western world, often referred to as the 'first name' of a person.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "additionalName" : {
          "description" : "Additional name. Includes what is often referred to as 'middle name' in the western world.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "patronymicName" : {
          "description" : "Patronymic name.",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "honorificPrefix" : {
          "description" : "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "honorificSuffix" : {
          "description" : "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "familyNamePrefix" : {
          "description" : "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').",
          "$comment" : "Origin: String (PrimitiveType); Character strings.",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "dateOfBirth" : {
          "description" : "Birthdate of the person.",
          "$comment" : "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.",
          "type" : "string",
          "format" : "date"
        }
      },
      "required" : [ "id", "type" ],
      "additionalProperties" : true
    },
    "CredentialSchema" : {
      "description" : "Identify the type and location of a data schema.",
      "type" : "object",
      "properties" : {
        "id" : {
          "description" : "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.",
          "$comment" : "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        },
        "type" : {
          "description" : "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.",
          "$comment" : "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "oneOf" : [ {
            "type" : "string"
          }, {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "propertyNames" : {
              "pattern" : "^[a-z]{2}(-[A-Z]{2})?$"
            }
          } ]
        }
      },
      "required" : [ "id", "type" ],
      "additionalProperties" : true
    }
  }
}