Verifiable Credential Schema

The schema for a DSNP Verifiable Credential MAY be defined using the format described in the Verifiable Credentials JSON Schema W3C Candidate Recommendation Draft. This format provides a credential wrapper around a JSON schema document.

Empty schemas (Verifiable Credential Schema Documents with "jsonSchema": {}) are allowed; however, schemaless credentials may be preferred in this situation. Empty schemas are useful in situations where no attribute data fields are relevant but the schema author wishes to assert authorship.

Verifiable Credential Schema Document

A Verifiable Credential Schema document is a JSON-LD document that is itself a Verifiable Credential with a claim that includes the schema and (optionally) the DSNP extension described below. A schema credential specializes the meaning of the following fields:

PropertyRequiredJSON TypeDescriptionRestrictions
typeYESArray of stringsType of credentialMUST contain the strings "VerifiableCredential" and "JsonSchemaCredential"
credentialSubjectYESObjectObject containing JSON schema and DSNP extensionsSee Credential Subject
credentialSchemaYESObjectMetaschema defining JSON Schema typesSee Credential Schema

Credential Schema

The required credentialSchema object MUST follow the specification and contain:

{
  "id": "https://www.w3.org/2022/credentials/v2/json-schema-credential-schema.json",
  "type": "JsonSchema",
  "digestSRI": "sha384-S57yQDg1MTzF56Oi9DbSQ14u7jBy0RDdx0YbeV7shwhCS88G8SCXeFq82PafhCrW"
}

Credential Subject

A DSNP Verifiable Credential Schema document's credentialSubject object uses the following keys:

PropertyRequiredJSON TypeDescriptionRestrictions
typeYESStringType of subject matterMUST be JsonSchema
jsonSchemaYESObjectEmbedded JSON Schema objectSee JSON Schema
dsnpnoObjectDSNP extension objectSee DSNP Extensions

JSON Schema

The JSON Schema object is formed as follows:

PropertyRequiredJSON TypeDescriptionRestrictions
$schemaYESStringJSON Schema version identifierMUST be a valid DSNP JSON Schema version
titleYESStringTitle of the schemaMUST match a string within the referencing credential's type array

The remainder of the schema object should be interpreted as per the relevant JSON schema specification.

Valid DSNP JSON Schema Versions

DSNP applications MUST support the following JSON Schema versions:

$schema valueSpecification
https://json-schema.org/draft/2020-12/schemaJSON Schema 2020-12 Update

Other JSON Schema versions MAY be supported, but creators should be aware that not all DSNP applications will be able to correctly validate credentials against schema definitions that are not universally supported.

DSNP Extensions

An optional dsnp object within the credentialSubject provides additional semantics for DSNP applications and users interacting with the schema.

Display Extension

The optional display key within the dsnp extension object MUST contain a label key that has an object value where the object is a map of one or more language tags to human-readable string values. Language tags should follow BCP-47/RFC-5646 (as used in the HTTP Content-Language header). A content language key of "*" indicates a wildcard or default value, as in HTTP.

Example:

"display": {
  "label": {
    "en-US": "Verified User",
    "de-DE": "Verifizierter Benutzer"
  }
}

A DSNP application MAY use the indicated values as a hint when displaying information about the subject of a Verifiable Credential utilizing this schema.

Trust Extension

The optional trust key within the dsnp extension object enables the author of a schema to describe the types of Verifiable Credentials that an issuer of credentials with this schema must have to be considered an accredited source and therefore trusted by an application. These accreditations MUST be included by the issuer using the authority key under issuer in each relevant Verifiable Credential document they create.

The trust object contains one or both of the oneOf or allOf keys, each containing an array of strings. Each string MUST be a valid DSNP Attribute Set Type.

See Attribute Sets for a detailed discussion of Attribute Set Types and their derivation.

A trust object containing both oneOf and allOf sections should be construed as requiring any of the oneOf constraints as well as all of the allOf constraints.

Example:

"trust": {
  "oneOf": [
    "did:dsnp:123456$AppleProducer",
    "did:dsnp:123456$OrangeProducer"
  ],
  "allOf": [
    "did:dsnp:999999$FairTradeProducer"
  ]
}

The above example might be translated as "A credential conforming to this schema should only be trusted if its issuer is accredited as a FairTradeProducer and is also either an AppleProducer or an OrangeProducer."

Example

{
  "@context": [
    "https://www.w3.org/ns/credentials/v2"
  ],
  "id": "https://dsnp.org/schema/examples/vehicle_owner.json",
  "type": [
    "VerifiableCredential",
    "JsonSchemaCredential"
  ],
  "issuer": "did:dsnp:123456",
  "issuanceDate": "2024-02-12T03:09:40.497Z",
  "expirationDate": "2099-01-01T00:00:00.000Z",
  "credentialSchema": {
    "id": "https://www.w3.org/2022/credentials/v2/json-schema-credential-schema.json",
    "type": "JsonSchema",
    "digestSRI": "sha384-S57yQDg1MTzF56Oi9DbSQ14u7jBy0RDdx0YbeV7shwhCS88G8SCXeFq82PafhCrW"
  },
  "credentialSubject": {
    "type": "JsonSchema",
    "jsonSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "title": "VehicleOwner",
      "type": "object",
      "properties": {
        "credentialSubject": {
          "type": "object",
          "properties": {
            "make": {
              "type": "string"
            },
            "model": {
              "type": "string"
            },
            "year": {
              "type": "number"
            }
          },
          "required": [
            "make",
            "model",
            "year"
          ]
        }
      }
    },
    "dsnp": {
      "display": {
        "label": {
          "en-US": "Vehicle Owner"
        }
      },
      "trust": {
        "oneOf": [
          "did:dsnp:123456$AuthorizedCarDealership",
          "did:dsnp:123456$OfficialTaxOffice"
        ]
      }
    }
  },
  "proof": {
    "type": "DataIntegrityProof",
    "created": "2024-02-12T03:09:44Z",
    "verificationMethod": "did:dsnp:123456#z6MkhFqFV1UD6GYbQ1V4HSF3pnGprovQceXbgwbLKrhxnbny",
    "cryptosuite": "eddsa-rdfc-2022",
    "proofPurpose": "assertionMethod",
    "proofValue": "z3ENMBo7UyKvZkJSBMqvGFDB1uvGChP1QTEgiCsNzt23ciq4RTffk2xxz2noXxxHL6wPmN1Bp2fSvTuMnvHQFP9tp"
  }
}