Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Separate the LegalPerson credential class from the LegalPerson class #7

Open
bartbink opened this issue Aug 23, 2024 · 1 comment
Open

Comments

@bartbink
Copy link

bartbink commented Aug 23, 2024

https://github.com/spherity/oid-public/blob/main/docs/contexts/eucc/vocabulary.md#4-information-model

I have added Verifiable Credentials Vocabulary v2.0 to the ontology so there will be some changes in the VerifiableCredential part.

Modeling a Legal Person or Power of Attorney or Ultimate Beneficial Owner is different from modeling a Credential.

A Legal Person (LP) represents everything about the LP and it's roles within the scope of the EWC project. A Credential is a subset of everything about the LP. This is shown already in the class name in a Credential schema, the name/type is credentialSubject and not LegalPerson.

Also the Legal Person as a credentialSubject is not a subclass of Agent class.

So the methodology we should use is to define the information model like here and let the credentials be a subset of the model representing the scope of the credential.

I have modelled it in TopBraid Composer (I still need to learn to use the tool of the Nordics). For context I will show the hierarchy as modelled:

image

Here you can see the EUCC being a descendant from a whole tree: Attestation, Electronic Attestation of Attributes, Qualified Electronic Attestations of Attributes.

image

Here you can see the Legal Person being a descendant from the tree Agent, Organization, Formal Organization.

Both hierarchies follow the EU Core Vocabularies.

@rkxx
Copy link
Contributor

rkxx commented Aug 27, 2024

The EU company vocabulary defined in this repo is meant to be used to describe the following credential subjects:

  • LegalPerson (company)
  • NaturalPerson (Human being acting in a legal context of the company)

The modelling of verifiable credentials is done in separate specifications. The definition of the EU company vocabulary is credential agnostic, so it can be used in different types of credentials:

W3C credentials are shown to demonstrate the use of the vocabulary in credentials only. We strongly recommend to use the vocabulary defined in Verifiable Credentials Data Model v2.0 and the corresponding context https://www.w3.org/ns/credentials/v2 to be able to define and handle complex enterprise credentials. Nevertheless, the vocabulary can also be used to define the claims of a company in an SD-JWT-VC.

How to use the vocabulary in a W3C verifiable credential is pretty straight forward and is described here: VCDM2.0 - Getting started.

{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",   // this context defines the vocabulary of the W3C credential
    "https://oid.spherity.com/contexts/eucc/v1" // this context defines the vocabulary of the specific credential subject
  ],
  "@type": ["VerifiableCredential", "LegalPersonCredential"],
  "credentialSubject": {
    "@type": "LegalPerson"
    ... // claims based on the eucc/v1 vocabulary go here
  }
  ... // claims based on the credentials/v2 vocabulary go here (issuer, credentialStatus, proof, validFrom, ...) 
}

Please note that the type of the credential subject is defined in the property @type of the credentialSubject attribute.

This approach is best practise and already used by a broad range of vocabularies, e.g.:

Using the vocabulary in an unsecured payload of an SD-JWT VC is also pretty simple:

{
   "vct" : "https://oid.spherity.com/eucc#LegalPerson",
   ... // claims based on the eucc/v1 vocabulary and the SD-JWT-VC spec (iss, cnf, ...) go here
}

Conclusion: The EU company vocabulary is meant to describe the credential subject of a verifiable credential only. The verifiable credentials are modelled separately and out of scope of the EU company vocabulary. From a modelling perspective the attribute of the verifiable credential attribute credentialSubject is of type CredentialSubject and specific subjects are derived from this type:

classDiagram
    class CredentialSubject
    class LegalPerson
    class NaturalPerson
    class VaccinationEvent
    class PermanentResident
    CredentialSubject <|-- LegalPerson
    CredentialSubject <|-- NaturalPerson
    CredentialSubject <|-- VaccinationEvent
    CredentialSubject <|-- PermanentResident
Loading

The EU company vocabulary describes the subjects (Classes) LegalPerson and NaturalPerson.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants