w3c-ccg / vc-status-rl-2020

VC Revocation List 2020
https://w3c-ccg.github.io/vc-status-rl-2020/
Other
9 stars 3 forks source link

Why must the ID not be the status list? #4

Closed kdenhartog closed 2 years ago

kdenhartog commented 4 years ago

In the id property definition it states:

It MUST NOT be the URL for the revocation list.

What's the reasoning for this? The only thing I could come up with is that the id of the property would be shared across multiple credentials, but I didn't see how that may cause a problem.

Rather, I was thinking that we could make the id the URL to retrieve the statusListCredential and remove the revocationListCredential property. This way nearly the same URL isn't included twice.

Is there something I'm missing here deep in the weeds of JSON-LD that may cause a problem?

OR13 commented 3 years ago

ping @dlongley @dmitrizagidulin @msporny

kdenhartog commented 2 years ago

bump

msporny commented 2 years ago

Sorry that I missed this, thanks for the bump. The number of Github notifications I have coming /directly/ to me has reached a point where I'll inevitably miss something if I blink.

As an aside, we should move all relevant issues in this repo over to here:

https://w3c-ccg.github.io/vc-status-list-2021/

We should archive this repo so we don't have active issues on this repo anymore.

Answers below...

It MUST NOT be the URL for the revocation list. Is there something I'm missing here deep in the weeds of JSON-LD that may cause a problem?

Yeah, and it's a nuance everyone needs to be careful of when properly modelling graph-based information. Remember that id identifies a thing that exists. Other people may use that same identifier, so when you use an id value, you should imagine other people using the same value and attaching their own properties to that id.

You should always ask yourself this question: "If I were to merge all the data in the world that uses this id into the same graph, what would it look like?" The answer if you use the URL for the revocation list is: "That id will associate every single statusListIndex in the world with the id as well as every statusListCredential. Your merged object would end up looking like this (JSON-LD format):

{
  "id": "https://dmv.example.gov/credentials/status/3",
  "type": "RevocationList2021",
  "statusListIndex": ["1", ..., "94567"] // note the array of 94,567 entries
}

... which is not what we want. credentialStatus is meant to point to ONE credential status object, not EVERY credential status object.

Note that this isn't a "JSON-LD thing", it's an "information theory" thing. Most JSON developers don't consider this sort of stuff because they expect their data to always be localized to their application/domain (closed world data model). We can't make the same assumptions for an open world data model.

kdenhartog commented 2 years ago

👍 This is a great explanation and is obvious in hindsight now that you point it out since the nodes in the graph would be considered "identical". I don't believe this requires any further action at this point so fine with closing it.