Description
The spec says for the proofPurpose
property:
proofPurpose
The reason the proof was created MUST be specified as a string that maps to a URL [URL]. […]
The vocabulary specification claims that the range is an xsd:string
, i.e., it is a Literal; but the text above says, in a somewhat convoluted way, that the value, in RDF terminology, is not a literal but a "real" resource.
Looking at the usage of the terms, Example 2 says:
{
"proof": {
…
"proofPurpose": "assertionMethod",
…
}
}
The base context does some tricks using "@type":"@vocab"
, and the result of these lines result, in Turtle, in the following quads:
_:b0 <https://w3id.org/security#proof> _:b1 .
_:b2 <https://w3id.org/security#proofPurpose> <https://w3id.org/security#assertionMethod> _:b1 .
which shows that the range of proofPurpose
is an RDF Resource with, in this case, the URL https://w3id.org/security#assertionMethod
.
But then it goes further. The vocabulary specification for assertionMethod
(and for authentication
, etc...) defines this term as a property with a range VerificationMethod
. That does not coincide with the usage in the example. Instead, assertionMethod
is used as an individual and not as a property. Also, these individuals have nothing to do, relationship-wise, with the Verification Method. Instead, they could be characterized as individuals, all of the type ProofPurpose
(this class is not part of the security vocabulary).
Based on all these, I think the following changes must be done on the di vocabulary:
- Introduce a new class, called
ProofPurpose
(formally defined in §2.2) - the range of
proofPurpose
is the (new)ProofPurpose
class (and not a string literal, as it says now) - the following terms:
authentication
,assertionMethod
,capabilityDelegation
,capabilityInvocation
, andkeyAgreement
are all to be defined as individuals, all of the typeProofPurpose
(and not as properties as they are now).
(Obviously, if we have an agreement, the creation of the corresponding PR will be on me.)