-
Notifications
You must be signed in to change notification settings - Fork 99
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
Should the DID parameters be normative in the spec? #137
Comments
@iherman is correct, we need to get this sorted before CR. |
Agreed, these were both citations that we were comfortable making at the CCG spec stage because we knew we'd get them figured out at the full WG stage. |
In my view, the working group should make every attempt to not introduce the matrix parameters syntax at all. There are already two mechanisms for passing parameters in URLs - query parameters and fragments. One or the other should suffice in all cases. Even if it's necessary to do something like dedicate particular query and/or fragment names for DID purposes, that would arguably be preferable to introducing yet a third parameter passing mechanism that requires non-standard URL parsing to use. |
@selfissued, even though it's not as clean an approach, I'm somewhat persuaded by your argument, particularly that there would be no need to update existing URL parsers. It's also the case that servers that would be referenced via the service redirection feature would need to have some awareness that they are being used that way in order to have a stable path/query structure with similar servers. |
I'll note that on the 17-Dec-19 working group call, it was clear that there wasn't agreement on whether matrix parameters COULD/SHOULD/MAY/MUST/MUST NOT change the DID Subject. Unless the overall semantics are crystal clear, we should steer clear of using matrix parameters. This comment is pertinent to #144 as well. |
I think you may have misunderstood something. Nobody is saying that matrix parameters or anything else in a DID URL changes the DID Subject. All we said was that different URLs may dereference to different resources, which is simply how all URIs work. |
Could you elaborate a bit? I don't follow.. The whole point of the service redirection use case is to be able to have persistent URLs that can point to changing (unaware) servers with changing path/query structures. E.g.
I suppose dedicated query parameters could be used instead of matrix parameters, e.g. |
could you elaborate on this? |
Well, normally in URL dereferencing, each part of a URL is applied at a certain stage of the dereferencing process. E.g. in an HTTP URL, the "host" is used to look up the IP address of the server, the "port" is used to connect to that server, the "path" and "query" are used to identify a certain resource under the HTTP server's authority, and the "fragment" is used by the HTTP client used to identify a secondary resource that is part of or related to the primary one. If we decide to use reserved query parameters instead of matrix parameters in DID URLs, then e.g. we might have DID URLs like this:
Then the Suggesting this would be a bit (but admittedly not quite) like suggesting to add DNS query parameters to HTTP URLs; this makes no sense, because DNS and HTTP are different layers. Therefore I believe it is much cleaner and more secure to use matrix parameter which are applied on a different layer and don't interfere with query parameters; the equivalent to the above example would be as follows:
|
@peacekeeper - I'm just wondering if this might not serve as well as your matrix parameter --
(The |
@peacekeeper thanks, I understand what you mean when you refer to HTTP land. However, at least for me, it still remains a bit vague. What I do not really understand (and I do not think it is part of the current core document) is a clear model of what happens where, who does what, what is the responsibility of the various actors. In HTTP land we have a pretty good idea about client, server, DNS, HTTP messages, etc. Is there a clear model of the similar actors in DID land? Would it help to have a clear written model (a diagram?) that we all agree on for what steps should happen by which actor? Once we all agree in this, we may have a clearer description of which part of the URI is addressed by which actor and how we must separate the parameters syntactically. Until then I am afraid that we are all influenced by what is happening in HTTP land, which may be the source of confusion. WDYT? |
This doesn't make much sense to me, since you would be inventing a new query parameter for a path, when path is already a standard construct in a URI? |
This is where DID resolution and DID URL dereferencing come in, which are the topic of the work we have been doing for many months in the DID Resolution specification. The most important point to realize is that DID resolution is not a client-server protocol (like HTTP). It is defined as an abstract function that can be invoked over different bindings. Different parts of the DID URL dereferencing process can then happen in different actors/components, e.g. resolving a DID to a DID document could happen in a hosted resolver service, and applying the fragment could happen in a client. But there are also other possible arrangements. This DID resoution work is (currently) in the CCG, not in the WG, but 1. there is a discussion whether it should be moved into the WG since the topics are so closely related, and 2. even if it remains outside the WG, I believe it would still be valuable for WG members to follow that work in order to better understand DID resolution, matrix parameters, and other topics. |
@peacekeeper right. I still have to read the DID resolution document, but it strikes me that until we have a common understanding (everyone, including the many new kids on the block:) the discussion on matrix parameters does not really make sense: it remains at a purely syntactic level with arguments coming from the HTTP world (does the term 'query parameter' make sense in the etymological sense in the DID world, for example)? |
thanks again for pointing me to the DID Resolution specification. I also understand now your earlier comment in #137 (comment):
Two comments on this.
|
Actually there are cases when this is not just un-intuitive, but actually won't work at all. The idea of "reserved query parameters" assumes that a query string in a DID URL must always be in the form of key-value pairs, which in generic URI syntax is often the case but not required. E.g. if I wanted to construct a DID URL like
I disagree with the entire class of arguments that matrix parameters introduce a new requirement to use non-standard parsing, since depending on the perspective, you could either argue that
Therefore while yes admittedly matrix parameters introduce additional syntax (which I agree should be carefully considered against the use cases enabled by that syntax), I don't think they change whether or not DID URLs are "standard".
The idea of DID URLs is to open up an information space rooted in a DID, just like HTTP URLs enable information spaces rooted in a domain name. A DID URL that is just a DID itself is dereferenced to the DID document (the most common case), but a DID URL with other syntax components like matrix parameters, path, or query, can potentially be dereferenced to any other resource. If we think we don't want to enable this, and all we want is an identifier that is dereferenced to a DID document and nothing else, then we don't need DID URLs at all. We only need DIDs. Do you think we should go in that direction?
Yes it would break (or restrict) the service endpoint indirection use case (see above), and it would break (or restrict) the basic assumption that path, query, and fragment should be left completely available for application or method developers and not be constrained by the DID spec, just like the HTTP spec doesn't constrain a web developer how they want to use path, query, and fragment. |
Yes... So? We're already mixing "URI uses/structures that exist" with "URI uses/structures that don't exist". Your complaint was that the sequence of action was not strictly left-to-right on the components of your URI --
-- which you suggested would be best resolved with a complex matrix parameter --
My URI makes the action sequence strictly left-to-right and removes the semicolon -- i.e., there's no matrix parameter involved or required, which has been the main question of this issue. I've changed
|
@TallTed I'm sorry but I didn't "complain" about anything, and I am not suggesting that anything needs to be "resolved". And I understand matrix parameters may seem "complex" when first learning about them, but I think the alternatives are either to drop certain use cases or to implement them in even more complex ways than with matrix parameters.
I believe this is more "complex" than the matrix parameter approach, since the reserved query parameter But I do think it would be worthwhile to compare this example to the matrix parameter example and see how they would each work in detail. How would your example URI be dereferenced, and what would be the result of that dereferencing process? |
My example URI --
-- would appear to break down into --
The DID method tells the dereferencer where/how to get the query processed. The query processor takes the query parameters, and delivers a representation of the identified resource -- presumably being a 200x80 scaling of the photo found in the profile of the DID subject... but I'm guessing at much of this, because there's no requirement that query parameters be any less opaque than URIs in general. Now... If I'm looking at this all wrong, it seems to me that this split of DID Resolution (which decides how to resolve / dereference a DID URI) from DID Core (which decides how to structure a DID URI) may have been premature -- or at the least, that there should be much more frequent coordination between these two. |
@TallTed thanks for the additional thoughts on query processing. Also, big +1 to your last paragraph. The gap between DID Core and DID Resolution is probably the reason why it's really hard to discuss matrix parameters (or alternatives to them) as well as other topics, such as the one on metadata (#65). |
Dear all, here are some materials about why matrix parameters may be useful in DID URLs:
Sorry for cross-posting to this issue and the DID WG mailing list. |
I suggest this issue be closed as the discussion is playing out in issue #159 (with some repetition) |
matrix params should be removed from the spec entirely, and then query params that are actually used should be added.... the spec should not define a bunch of hypothetical ways of doing things that nobody is using. agree with @philarcher ... this should be closed, in favor of #159 |
@philarcher @OR13: #159 is about the syntax of DID parameters, whereas this is about whether the four concrete DID parameters in the spec are normative or not, so I believe this issue here is independent. I'm going to rename it to make that clearer. |
The following PR will add references for the DID Core parameters into the DID Spec Registries: w3c/did-extensions#61 |
In that case, I think once they've been registered (and considering they're already in the spec) we've reached the conclusion that this issue can be closed. Is that correct @peacekeeper? |
The current spec has been updated to carefully state normative assertions around DID Parameters such that the language should survive through to REC. We need folks in the group to review the new language and nitpick things they feel are not appropriate normative requirements (or cite new normative requirements that need to be made). |
There have been a few comments in this issue suggesting to close it. Looking back at the original two comments raised by @iherman:
The reference to [DID-RESOLUTION] is informative, not normative, and the language around it has been weakened since this issue was created. Instead of
it currently says
Overall, I think our approach is that we normatively define the DID parameter names, their meanings, and their data types, but we don't define their exact allowed values and processing rules, this happens elsewhere. Just like with DID Resolution, in DID Core we only specify the interfaces, but not the algorithms to implement them. I think this is fine now the way it is? Or do we still have a problem? @iherman ? |
I really do not want to sound difficult, but... while I agree with @peacekeeper that the reference to the DID-RESOLUTION is fine, and the table gives an adequate definition for service, version id and time, I still have a problem with hl. The reference is to an internet draft, dated 208 and actually expired a little more than a year ago. Our document does not specify the behaviour of hl at all, meaning that the implementer must rely on the IETF document. Can we be sure that the document is stable? (Look at a normative references guidelines.) Can we be sure that implementers implementing hl will not have to change their implementation in a few years? We simply cannot be sure of that. |
@iherman I understand your concerns with |
@peacekeeper, correct. We can actually even leave in the core spec but very clearly mark it as non-normative. |
On today's DID WG call, there was a proposal to address this issue by marking |
Closing since the problems mentioned in this issue have been fixed. |
Per current editorial status the are, because it is part of the normative section 4.
However, if so, that means that the four explicit values in the table are also normative, meaning that, probably, the are REQUIRED by conform DID implementations and the way they are used is normatively specified. But that can only be done if all dependencies are also normative. I see two problems:
hl
depends on Hashlink, which is an Internet Draft, itself depending on other drafts.Of course, If
hl
can be driven through IETF as an internet standard by the end of the WG then we are fine. Alternatively, we change the editorial spec by making the necessary part of thehl
specification part of this document.the text says:
which is a problem because DID-RESOLUTION is not planned to become a Recommendation (at least in this round).
I do not know whether it makes sense to declare these as informative, though.
(This is related to #53)
The text was updated successfully, but these errors were encountered: