- 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