- From: Charles E. Lehner <cel@celehner.com>
- Date: Mon, 13 Nov 2023 23:21:20 -0500
- To: Ashley Harwood <ashley.harwood@gosource.com.au>
- Cc: public-credentials@w3.org
Employee could be defined in the top-level context. e.g.: { "@context": [ "https://www.w3.org/2018/credentials/v1", { "@protected": true, "EmployeeCredential": "https://example.com#EmployeeCredential", "Employee": { "@id": "https://example.com#Employee", "@context": { "@protected": true, "name": "https://schema.org/name" } } } ], "type": [ "VerifiableCredential", "EmployeeCredential" ], "credentialSubject": { "type": "Employee", "id": "did:example:foo", "name": "Foo Foo" }, ... } VerifiableCredential and credentialSubject are protected by the base context (VCDM v1-v2) so cannot be redefined to make scoped definitions. If the nested scoping is needed, a new top-level property could be used, but "credentialSubject" is still required; this might be considered non-idiomatic: { "@context": [ "https://www.w3.org/2018/credentials/v1", { "@protected": true, "cred": "https://www.w3.org/2018/credentials#", "EmployeeCredential": { "@id": "https://example.com#EmployeeCredential", "@context": { "@protected": true, "employeeCredentialSubject": { "@id": "cred:credentialSubject", "@type": "@id", "@context": { "@protected": true, "Employee": { "@id": "https://example.com#Employee", "@context": { "name": "https://schema.org/name" } } } } } } } ], "type": [ "VerifiableCredential", "EmployeeCredential" ], "credentialSubject": { "id": "did:example:foo" }, "employeeCredentialSubject": { "id": "did:example:foo", "type": "Employee", "name": "Foo Foo" }, ... } This definition of "name" aligns with the next version of the data model which defines it now for the credential and issuer: https://www.w3.org/ns/credentials/v2 https://www.w3.org/TR/vc-data-model-2.0/#names-and-descriptions https://www.w3.org/TR/2023/WD-vc-data-model-2.0-20231104/#issue-container-generatedID-51 (some schema.org terms considered stable by VCWG) -- On Tue, 14 Nov 2023 09:11:25 +1100 Ashley Harwood <ashley.harwood@gosource.com.au> wrote: > Hi Charles, > > Thank you for your response. If I have interpreted your response > correctly, the "credentialSubject" would have the type of "Employee" > like so: > > { > "VerifiableCredential": { > "@id": > "https://www.w3.org/2018/credentials#VerifiableCredential", > "@context": { "credentialSubject": { > "@id": "cred:credentialSubject", > "@type": "https://example.com#Employee" > } > //... > } > //... > } > } > > Do I have this right? > > Many Thanks, > Ashley > > > On Mon, 13 Nov 2023 at 15:58, Charles E. Lehner <cel@celehner.com> > wrote: > > > Hi Ashley, > > > > I think the type "Employee" should be of the credential subject. > > Then your scoped context definition for the "name" property should > > work. The credential could have a different 2nd type, e.g. > > "EmployeeCredential". > > > > Regards, > > Charles > > > > On Mon, 13 Nov 2023 11:24:48 +1100 > > Ashley Harwood <ashley.harwood@gosource.com.au> wrote: > > > > > Hello everyone, > > > > > > I'm seeking advice on the proper way to specify a type for the > > > subject in a verifiable credential with the use of context. > > > > > > My understanding was that typing a Verifiable Credential as > > > follows: > > > > > > "type": [ > > > "VerifiableCredential", > > > "Employee" > > > ] > > > > > > and then defining a context like this: > > > > > > { > > > "@context": { > > > "@version": 1.1, > > > "@protected": true, > > > "Employee": { > > > "@id": "https://example.com#Employee", > > > "@context": { > > > "name": "xsd:string" > > > } > > > } > > > } > > > } > > > > > > followed by constructing the credential in this manner: > > > > > > { > > > "type": [ > > > "VerifiableCredential", > > > "Employee" > > > ], > > > "@context": [ > > > "https://www.w3.org/2018/credentials/v1", > > > "https://example.com/employee.jsonld" > > > ], > > > "credentialSubject": { > > > "id": "{{EMPLOYEE_DID_WEB}}", > > > "name": "Ashley" > > > } > > > //... > > > } > > > > > > would establish the necessary context for the credential subject. > > > However, I encounter errors indicating that the "name" is not > > > defined in the context. > > > > > > I know that using: > > > > > > "@vocab": "https://www.w3.org/ns/credentials/issuer-dependent#" > > > > > > acts as a universal solution for undefined terms, yet it > > > compromises validation during credential creation. > > > > > > I'm also aware that defining terms "inline" like this: > > > > > > { > > > "@context": [ > > > { > > > "@version": 1.1 > > > }, > > > "https://www.w3.org/ns/odrl.jsonld", > > > { > > > "name": "xsd:string" > > > } > > > ] > > > } > > > > > > works but appears to go against the grain of JSON-LD's intent and > > > disrupts the link between the credentialSubject and 'Employee' > > > definition. > > > > > > Am I overlooking an aspect of this process? > > > > > > Many Thanks, > > > Ashley > > > > > > > >
Received on Tuesday, 14 November 2023 04:21:41 UTC