Meeting minutes
Welcome And Introductions
Patrick_St-Louis: Hey, Dimmitri made sure to clear my calendar to attend today.
Dmitri_Zagidulin: Hey, Patrick. All right.
Patrick_St-Louis: I've been following a bit the GitHub issues and what's happening as know, I'm very interested in this, but it's been a difficult time for me.
Dmitri_Zagidulin: I bet it. Yeah. we're slowly converging on something useful. So hopefully we'll have something that addresses all our use cases.
Patrick_St-Louis: That's good. Yeah. If you notice, I closed the OCA render screen.
Dmitri_Zagidulin: Yeah I was wondering. Yeah thank you. I appreciate that.
Patrick_St-Louis: And yeah, so I'll probably be interested in a while to …
Patrick_St-Louis: because what I'm doing right now is just comparing the OCA to the summary render suite to see…
Dmitri_Zagidulin: Uh-huh. …
Patrick_St-Louis: if it kind of fits the feature that we're needed from OCA and we're kind of considering moving over to the summary right instead of OCA.
Dmitri_Zagidulin: okay. Okay. Yeah. In that case,…
Patrick_St-Louis: So yeah so I'll do a in-depth comparison maybe present this next week or…
Dmitri_Zagidulin: in that case, definitely let's merge the features from OCA, right? if anything's missing.
Patrick_St-Louis: the week after and then …
Dmitri_Zagidulin: Wonderful.
Patrick_St-Louis: if there's feature missing we can just discuss right are these needed Yep.
Dmitri_Zagidulin: That's even cooler than I hoped for.
Dmitri_Zagidulin: I was going to say that. So, for example, remember how we had mustache or handlebars based template suite, right? And after long discussion the consensus in the group was okay the HTML app rendered in an iframe.
Patrick_St-Louis: Yeah, like the sandbox frame.
Dmitri_Zagidulin: supers yeah supersedes that but as I pointed out to people there's still some use cases not covered by the HTML and JavaScript app you still need a template based or a mustachebased template method for things like rendering PDFs and…
Dmitri_Zagidulin: for that the group consensus was we can add it as a non-normative appendix right given that this thing is an extension point etc.
Patrick_St-Louis: Yeah. Yeah,…
Dmitri_Zagidulin: So what I was going to say is that if the OCA overlay folks decide that the summary is not sufficient to them, you could add it as a informative appendix, but it sounds like there's a way forward to sort of converge. So that's great. huh
Patrick_St-Louis: interested in discussing this once I'll have the comparison done. I think more discussion could be done. And I had a bit of a chat with Nate about this summary and…
Dmitri_Zagidulin: Yes. Yes. Yeah.
Patrick_St-Louis: I think I don't want to speak on his behalf but the kind of conclusion is that he felt like people are trying to start to want to do too much with the summary which was meant as a very basic the main reason why it works well is because it defines a sort of a rendering metadata file object that's outside of the credential, right? that's the number one thing. yeah. I can speak more a bit maybe during the meeting when we get there. I'll let you get started.
Patrick_St-Louis: But yeah a couple thought I could change and…
Patrick_St-Louis: the biggest thing for us is the whole multil language section. it's been discussed many time.
Dmitri_Zagidulin: Yeah.
Dmitri_Zagidulin: Excellent.
Patrick_St-Louis: Unless I'm wrong I don't feel like there's a really official agreed on way of doing it. awesome.
Dmitri_Zagidulin: There is not. But I'm glad you bring it up because this is going to be one of the draft PRs that we're going to discuss today. All 4 minutes passed.
Patrick_St-Louis: Pop. Let you
Dmitri_Zagidulin: Yeah. let's get started.
Dmitri_Zagidulin: We may have a smaller than usual turnout today. but let's see what we can get through. hopefully others will join as the call goes on. If not, we can end early. All right. So welcome everyone to the weekly VC render method task force call of the verifiable credential working group. we are under W3C code of conduct and IP restrictions. but I see all familiar faces. these meetings are recorded and transcribed and the notes are stored somewhere. All right. So this call we're going to do the usual. We'll go through PRs and some interesting issues that need discussing. So let's go to PRs first.
PR 88 Rename Template Field
Dmitri_Zagidulin: There's a pending BC data model threat note public working draft dote that Ivonne asked to open. So Ivon and Manu left some comments on the PR which I address. So hopefully that meets Ivon's needs. If not, we'll continue. But nothing really controversial there. It's just a snapshot of the current render method run model document. A number 88 rename template field to payload. it's pretty simple.
Dmitri_Zagidulin: It's just literally renaming the template property to payload on all of the suites. And it's something the group came to consensus on last call. the idea being that it's more accurate to term for the thing that's currently termed template because in each case for the static suite, it It's rendered in the summary suite. It's also not a template. It's just a set of fields and their metadata. And even in the HTML suite, now that it doesn't use mustache or handlebars style actual template, it's a full-on HTML and JavaScript application. So, long story short, we're naming it to payload.
PR 89 Internationalization And Localization
Dmitri_Zagidulin: So please add your plus ones or objections on this more interesting for discussion is this draft poll request that I want early feedback on continuing the discussion on internationalization and localization specifically. So although the PR is short right now again it starts the discussion and bring and specifies the use case and introduces an optional field. What's the idea here? we know that the VC data model gives us a little bit of localization and internationalization tools.
Dmitri_Zagidulin: specifically it gives us the ability to do value level translation right so if I have a field called description and it's got some text in it the core VC data model allows us to provide different values for the description field based on the language so I can provide a value in English and I can provide a value in Spanish and standard JSOND mechanisms can sort of dispatch on that. In addition, core data model provides us with a language direction property.
Dmitri_Zagidulin: What this section says is we have use cases that go beyond that. In addition to value level localization we also want to translate the field labels themselves. So, not the contents of the description, but if the render suite if whatever you're displaying on screen involves field labels, you want to be able to translate those.
Dmitri_Zagidulin: And that's a capability that some of the I believe the OCA mechanism and the U VC jot and some of the other cardlike mechanisms have this ability to translate not just the value but the labels themselves. But we need to go beyond that. the goal that we have, the use case that this spec needs to address is we need to be able to select arbitrary layouts and styles or even fully rendered payloads based on language and local preference.
Dmitri_Zagidulin: So for example in the education space a very real use case we had was tech de Montterrey university said we need to display our diploma but the diploma has a different layout and color and logo depending on whether it's in English or in Spanish and they prefer that a single verifiable credential has obviously the values but then a render method suite. Here's the PDF.
Dmitri_Zagidulin: in Spanish and here's PDF in English or here in addition to the layout one of our open issues is things like date and datetime formatting and so on. let's go to the queue Patrick and…
Patrick_St-Louis: So I mean I'm hearing three different things in here.
Dmitri_Zagidulin: then Dave.
Patrick_St-Louis: So I'm reading one translating the values of the credential itself.
Dmitri_Zagidulin: Yes. Jack.
Patrick_St-Louis: Two translating the values of the label of the keys, Which is kind of render method. And then the third one is associating a whole different rendered template based on the language.
Dmitri_Zagidulin: Yes. Correct.
Patrick_St-Louis: Correct. …
Dmitri_Zagidulin: Correct. That's the idea.
Patrick_St-Louis: and would we want to approach each of these separately as their own individual things or do we want to kind of bundle them together as one feature? I know for myself at least in my use cases I only address number two…
Patrick_St-Louis: which is translating and OCA only address number two which is translating labels descriptions these kind of things. the values of the credential is different. we do not support that currently.
Dmitri_Zagidulin: Okay. Absolutely.
Dmitri_Zagidulin: So yeah, great question. the good news is that the core VC data model gives us the tool to do the first two, right? we essentially get those quote unquote for free. And I'll open up that section of the VC data model so that we can refresh our memory on what that looks like. I know we've got Dave on the queue. I don't want to so let's go to Dave and then Patrick, I'll come back to you. Go ahead Dave.
Dave Longley: So, I'm not sure exactly when to jump in …
Dmitri_Zagidulin: Yeah.
Privacy Considerations For Language Data
Dave Longley: because we haven't talked about the proposed way to do this with target language below, but I'll just throw in my comments here. I think it would be preferable for there to be for privacy purposes and potentially for scalability purposes for the language information to be part of the payload. So that you specify this once it's fetched once everyone is grouped together who asks for that same thing and then the language decisions are made on the client independently of having to announce that stuff when you're making a request and so on. I think that's preferable. it doesn't mean that we necessarily have to do it that way, but we're inventing this thing and it seems to me like it would be better to take that approach rather than asking issuers
Dave Longley: is to list in the common case, maybe there's 10 popular languages, but they're now going to be listing 10 different templates or 10 different render methods just to cover languages. that's going to preclude people who speak other languages. and if they want to cover those, maybe they'll be listing a thousand of these. the EU apparently has 27 popular languages. where again popular is are we talking about the world and how relative is this? And the people who are in smaller groups who speak or read languages that aren't as popular are going to leak more information about who they are if they're going to be requesting that type of information.
Dave Longley: rather than just getting the whole payload and then they make the choice on the client. So those are things I would want us to keep in mind in our
Dmitri_Zagidulin: Absolutely. And so for those just joining us,…
Dmitri_Zagidulin: we're discussing draft PR89 that was just opened. that sort of kicks off the discussion on what are we going to do? And in the introduction it essentially talks about three different levels of local localization. we've got value level and field label level. So one and two and for both of those we have a mechanism provided by the core VC data model. And I'll get to what you were just saying Dave.
Dmitri_Zagidulin: And then in addition it proposes that it would be useful to be able to select not just on the field level, not just on the label level, but also on payload and value level. before I hop on the queue to respond to Dave, back to Patrick.
Patrick_St-Louis: I'll let you respond to Dave, but I just
Dmitri_Zagidulin: So, Yeah, all really good points and the overall thing we need to remember is language super difficult to get right. Always has been. so The good news is that the web has a lot of really interesting mechanisms to this. So for example, in the internationalization what's it called?
Dmitri_Zagidulin: The best practice document for internationalization specifically has this mechanism called matching on language tags which allows we're not going to get into the difference between local and language. but just to partly address what Dave said, we have flexible group mechanisms by saying, okay, this random method payload applies to all the languages or to the German family of languages. here's the overall deal, right?
Dmitri_Zagidulin: So Dave, you're absolutely right that we should and that it's useful to be able to select on the value and label level. And just to refresh our memory, what's the base VC data model mechanism? it sort of reuses the JSON LD mechanism of value and language and direction tags. So what this looks like is you have a property, let's say a description or a title, and then instead of having it be a string, it can be an array of differently translated values and you select and which language direction, right to left or left to right. this particular applies.
Dmitri_Zagidulin: And so what Dave said, this gives us the ability to essentially use cases one and two value just directly Imagine this thing is a labels array which I believe is something that either the summary field supports right now or will support in the future. And so you could easily do the same thing. the property is labels and these are the individual labels and their translations into the languages that the displaying client can use. In addition though we want to be able to select different layouts and different logos and different colors and different rendered dates and things like that based on the local. But let's go to the queue.
Dmitri_Zagidulin: You have to move on. Go ahead on.
Understanding Language Maps
Ivan_Herman: Yeah, I just had to find a right button. What do you mean by property level or…
Dmitri_Zagidulin: Yeah. No.
Ivan_Herman: I don't know
Dmitri_Zagidulin: So, yeah,…
Ivan_Herman: what you mean.
Dmitri_Zagidulin: great question. So, I believe let's see the summary has this notion of fields and labels. Yeah. So this is a way of saying for example the intent here is that we can list the highlight or the summary fields that we want to show on the screen and they're labeled fields. So it goes name colon
Dmitri_Zagidulin: Ditri or description colon whatever and so the labels themselves just being regular fields can be translated and…
Dmitri_Zagidulin: internationalized using this JSON mechanism. Does that make sense?
Ivan_Herman: It makes sense and…
Ivan_Herman: on the other hand for me it's confusing because the mechanism you refer to in JSON LD is just a mechanism for any property which has a textual value and a possible value. Ivan Herman:
Dmitri_Zagidulin: So you're wondering.
Ivan_Herman: So this differentiation for me is artificial
Dmitri_Zagidulin: Yeah, you're You're right. You're wondering why am I highlighting labels specifically and not description or theme or anything like that. And it's because other VC template mechanisms have a separate mechanism specifically for labels, right?
Dmitri_Zagidulin: the VC jot and I believe mobile driver's license has a separate mechanism specifically for just translating the labels of the fields. That's why I'm highlighting to say yes, it's a recognized use case and mechanism, but we can handle using just the value regular thing.
Ivan_Herman: Okay.
Dmitri_Zagidulin: There isn't a description. Go ahead, Pa Excellent.
Patrick_St-Louis: Yeah, so I like this thing on this summary and again that's how OCA does it. So when you have an overlay for labels, you can specify is this overlay in French or in English. I wanted to bring a caveat. I don't think it's an issue. But when you said the VCDM model does support language, I think this would apply to C quote unquote native credential. one of the feature of VCDM2 is you could map from other format to VCDM 2.0.
Dmitri_Zagidulin: Yeah.
Patrick_St-Louis: So in those case you might not always be able to benefit from that feature. if you're mapping from a format that doesn't support that you're not going to be able to display those values while preserving the security mechanism. however I do not think that's an issue because if it wasn't supported in the original format that's where the problem is right and it's kind of outside of the W3CVC spec.
Patrick_St-Louis: But it's still just something to keep in mind.
Dmitri_Zagidulin: Yeah, you're absolutely right.
Dmitri_Zagidulin: And this is where the general metadata nature of the summary object could come in useful. here's where you could do the internationalization of those things.
Patrick_St-Louis: Yes. And I think it's…
Dmitri_Zagidulin: Yeah. okay.
Patrick_St-Louis: why it's important to keep those separate, the kind of metadata label description versus the values of the credential itself.
Dmitri_Zagidulin: Yeah. Yeah.
Patrick_St-Louis: because there's a difference that one is directly protected by the issuer signature being the values of the credential itself as these external field they're still kind of protected by a digest of the reference field…
Patrick_St-Louis: but it's not like a direct relation. Yep.
Dmitri_Zagidulin: Yeah, agreed.
Dmitri_Zagidulin: I think we had Benjamin and then Ivon. Benjamin, do you still have comment?
Benjamin_Young: No, Patrick said what I wanted,…
Dmitri_Zagidulin: Yeah.
Benjamin_Young: which was that other formats bring other problems. That even if we've solved they make your life worse…
Benjamin_Young: if you bring them along
Dmitri_Zagidulin: Yeah, good,…
Dmitri_Zagidulin: good point, Ivan. Go ahead.
Ivan_Herman: So I have to make things more precise.
Ivan_Herman: The VCDM doesn't invent anything whatsoever in terms of languages. This is not a This is a JSON LD feature that VCDM inherits.
Dmitri_Zagidulin: I want to push back on that a little bit.
Ivan_Herman: Which means that again that's a different thing.
Dmitri_Zagidulin: I want to push back on that a little bit.
Dmitri_Zagidulin: You're right, but the VCDM documents it and composes it a little better than the JSON LD.
Ivan_Herman: But what it means that if you have another vocabulary which is bound to BCDM application dependent and if that is in JSONLD which is usually the case then the language features are automatically usable in that vocabulary as well.
Ivan_Herman: So that has to be made very precise.
Dmitri_Zagidulin: Yeah.
Ivan_Herman: Maybe Dimmitri you are right that this is something that should make it clearer in the VCDM spec itself. we have to look at that but that's an editorial question specifically specification wise I'm sorry nothing is added to the VCDM in terms of language handling it's just inheriting Thanks.
Dmitri_Zagidulin: Absolutely agreed. and yeah, I think the base VCDM specifies that fairly explicitly that it inherits it from JSON LD, but yeah, we'll be sure to be precise about it, Patrick. Yeah.
Patrick_St-Louis: on this note so these are JSON LD primitive right the value language the same for context so I know in VCDM the ID and…
Dmitri_Zagidulin: Yeah. Yes.
Patrick_St-Louis: the type they've been kind of aliased through probably alias is not the right term but they've been essentially alias as right in the context.
Dmitri_Zagidulin: Straight up alias. Yeah. Yeah.
Patrick_St-Louis: Do we foresee something similar being possible here that you would use the language value as the key for the string? So, I would have title object and…
Dmitri_Zagidulin: Yeah, great question. Please.
Patrick_St-Louis: then the keys of that object would be like the language value we see followed by the text string.
Patrick_St-Louis: Would some kind of val like this be a possibility? Okay. Okay.
Ivan_Herman: Alias's I'm sorry.
Ivan_Herman: Can I By the way, Patrick, alias is the term. So, you are right. aliases can be used by any context…
Patrick_St-Louis: Thank you.
Ivan_Herman: but that doesn't make the original keyword syntax disappear. So it's in this respect a pretty open bar how you want to use it. There are people who love aliases because they hate the ad sign. I personally prefer using the sign because it makes it clear that this is a feature of the system as well. But that's a matter of taste. But the other application that comes in can define value to be whatever and…
Dmitri_Zagidulin: Yeah, go ahead, Benjamin.
Ivan_Herman: that's perfectly valid though probably a bit ugly. So there is no limitation here.
Benjamin_Young: Yeah, aliases are a foot gun.
Benjamin_Young: You can use them and you'll shoot yourself every time. we just had to unpick a whole lot of problems that the Web of Things group caused for themselves by aliasing and they spent years getting it wrong. and they were just aliasing type. So, that's now being cleaned up. but one of the biggest things you lose looking at what you've got highlighted there is if you alias these things, you hide the magic, which is what Ivon was kind of saying.
Benjamin_Young: At symbols make it clear that this object is not like other objects and…
Benjamin_Young: you should treat it differently. So if you go back to the fields object Dimmitri that's currently proposed in the summary thing or whatever it is called now that's would not be just no up a bit where the field diffs are.
Ivan_Herman: That's
Benjamin_Young: No where it says fields sorry the actual word fields.
Dmitri_Zagidulin: Yeah. Yeah.
Dmitri_Zagidulin: Yeah. Yeah.
Benjamin_Young: So there's four properties under here and…
Dmitri_Zagidulin: Yeah. Right,…
Benjamin_Young: it's tangled and confused already,…
Dmitri_Zagidulin: right, right, right.
Benjamin_Young: it's using value in a new way. Language doesn't apply to anything. You have label and description as peers. If that were JSON LD and you had at signs, you would know at language and at value would be very specific things. at direction would have very specific meaning and the at label was in the wrong place and it would throw errors accordingly and you'd not cut yourself on sharp edges. So at signs, stick with LDOS's and are linked what Dave just said. It's reading his comment language value objects and
Benjamin_Young: most of the problems that we've just spent a while discussing go away and it's just like Jason LD solves this and the I8N group is increasingly promoting JasonLD's way of doing this as a repeatable pattern because it does make a special object that has special powers and if you alias that then suddenly people are like I'm going to stick a URL next to this string value or I'm going to label next to value, next to langu,…
Benjamin_Young: it just looks like a normal JSON object. not to mention the keyword conflicts that I mentioned about value and schema.org language already existing. So, it just hides things that don't need hiding for people's personal preferences. So, don't hide it.
Dmitri_Zagidulin: Yeah, I wholeheartedly agree.
Dmitri_Zagidulin: And just to add a historical note, so as you can probably imagine VC data model I think in the VCDM 1.0 group had a long discussion/argument exactly about this whether to alias language and value. so this came up and the conclusion was exactly for the reasons that Benjamin just brought up and specifically the overloading of schema.org's
Dmitri_Zagidulin: or 's value and language. it was specifically chosen not to alias but go ahead,…
Dmitri_Zagidulin: Patrick. Where?
Patrick_St-Louis: In the example right below it's alias.
Patrick_St-Louis: Not sure if that stands.
Dmitri_Zagidulin: This. Great question. you're talking about this mechanism, right? Yeah.
Patrick_St-Louis: This is exactly what I was trying to say earlier. Yeah. So, I see there's this multilingual context, which is kind of interesting. I like that. you make it very explicit that you're aliasing language in this context I was not part of those discussion but this is kind of what I was envisioning as a way to do because these credentials are very small some of the credentials that work for they're extremely large and they have many description fields and if you need to insert JSON LD
Patrick_St-Louis: the language objects and multiple per keys. you can triple, quadruple the size of a credential, which is already significantly large. So, that's one thing outside of cosmetic that I could say could have an impact.
Patrick_St-Louis: Yeah.
Dmitri_Zagidulin: And I have some thoughts on that,…
Dmitri_Zagidulin: but we have Ivon or no Benjamin in the queue. Go ahead.
Benjamin_Young: Yeah. …
Benjamin_Young: just for those who aren't familiar with what we're looking at here, those aren't aliases. This is hold the language map and it's a special kind of container provided by JSONLDD. So in that example multilingual v2 context someone has defined that achievement name or name broadly I guess in this case is a language map which right now in JSONLD 1.1 gives you the ability to use key names for BCP 47 values. So en is the current highlight on the screen and that is the BCP 47 value. So if these were LVOS's that would be the value at language and then successful installation of the example application text would be the at value if these were loos.
Benjamin_Young: And what JSONLDB 1.1 says is that when you use a language map, the lefthand side is as I said a BCP 47 and the right hand side must be a string. but we're working on addressing that in version 1.2 and I just pasted that issue so that you can also provide at direction. So you basically get a smaller LBO that just does the value and direction because you already have the language on hand just because you have a BCP 47 value doesn't mean you actually know the direction of the language because some can be birectional omniirectional or whatever.
Benjamin_Young: So there are cases where you might also want to mention add direction and JSON LB11 does not currently allow that. So we're trying to look into that next but hopefully that language container thing explains what you're seeing there. It's a different mechanism
Dmitri_Zagidulin: That's incredibly cool.
Dmitri_Zagidulin: That's so cool. Go ahead. I thought you're good.
Patrick_St-Louis: It does.
Patrick_St-Louis: And is this something that you think is a good thing? based on the discussion that sorry I thought this was essentially an alias the same way that type and ID but what I understand is it's slightly different. and is this something you think is a good place forward in relation to your comment about foot guns and whatnot?
Benjamin_Young: Yeah, I think it's fine to do it. I think you have to call it out when you create a context file. And I don't know that the VCDM itself calls out extensibility a whole lot. I think it does point to JSONLDLD and assume what's downstream follows JSON LD's extensibility patterns, in which case whoever publishes that multilingual context URL that we're looking at, achievement. example, whatever that thing The thing that is creating
Benjamin_Young: it's literally at container the value of which is at language and that's what's then allowing name to get these special features or narrative in another case. So I think it's great but I also think you have to specify it and…
Patrick_St-Louis: Shoot.
Benjamin_Young: point to it and make sure people know that it's there. So it's not an ali it's like a super alias. but it's literally called a language container. And I think in terms of JSON modeling to kind of answer your question, yeah, I think it's totally fine. And I'm trying to get it to be a little more fun by giving it a few more features. But go ahead.
Patrick_St-Louis: Two more question which are essentially the same question. the one is so here clearly they're an example thing. Should there be the official VCDM2 multilanguage thing that you actually would need to check and if you see this context then be aware this is multi- language and…
Dmitri_Zagidulin: Go ahead.
Patrick_St-Louis: part two of that question could it be folded into the base VCDM context Thanks.
Benjamin_Young: Yeah, it could only show up in the BCDM context in places where the VCDM defines terms that can have strings right now.
Dmitri_Zagidulin: Yeah.
Benjamin_Young: So that's name and description I think are the only two. there might be others but it's per term. So you can't just say…
Patrick_St-Louis: And you can't exclude things in context with Jason and…
Benjamin_Young: because otherwise you're valid from it's is like a language string which is false right it's a type date or whatever or ID can now be a language map which you would never do because it's not a thing so it has to be term specific that's dangerous on so many levels no itld leans pythonically like it wants you to be very specific and…
Patrick_St-Louis: LB. can say everything except in front. Okay.
Benjamin_Young: verbose and say what you mean and not let people guess. also when you switch to a language container you're picking a lane like I don't believe you can just mix stuff nilly and turn name into an array now because you've said it's a container so now the value of name must be an object. So you don't necessarily want to turn that on because at the VCDM level you don't want to turn that on. It's still capable to turn it on later as we're showing here. But if the VCDM says that then now if you have an Englishon credential name must be an object and must have the value of the language that you're using. So, you really only want to turn on the use of a language container when you expect a document to be multilingual and you want this object shape present.
Benjamin_Young: things that used to be just string values.
Patrick_St-Louis: But wouldn't this example here technically redefine name…
Patrick_St-Louis: which is like a nogo for because VCDM 2.0 defines name already. wouldn't in this scenario because I don't know what's in the second context URL, but isn't that redefining a protected value?
Dave Longley: I can answer that quickly.
Benjamin_Young: Yeah. Yeah. Go for it, dude.
Dave Longley: Redefinition is allowed as long as that you're doing so underneath another term like deeper in the tree and your context announces that. So for achievement, you can change the context provided that your context announces that you're doing it…
Dave Longley: which guarantees that anyone who understands all the terms that they're following down the tree will know that that redefinition has happened. And that's…
Patrick_St-Louis: So another way to look at this would be VCAM 2.0 defines a default protected name and…
Dave Longley: what protected is all about. Making sure that you only read things for context that you understand. So you are guaranteed to get the values that you're looking
Patrick_St-Louis: description, but you can override this per type if you type it properly in a subsequent context.
Benjamin_Young: per key would be a better thing to say.
Dave Longley: And so the VCDM v2 context defines the name term as protected in a certain way.
Benjamin_Young: Not per type. Sorry. Go ahead.
Dave Longley: But if you carve out another area in the tree of the JSON, you can then change the definition because one reading no one…
Dave Longley: who only understands the default context for BCDM would travel down that tree unless they also understood the context that defined that subtree.
Documentation For Render Method Internationalization
Dmitri_Zagidulin: So one of the things that I think is becoming clear here is that we need to document this discussion probably in the VCDM spec…
Dmitri_Zagidulin: but more likely
Dmitri_Zagidulin: in the render method specization section because you're absolutely right I don't think many people are aware that these two mechanisms one exist two are sort of exclusive you have to pick a lane you have to either use at value and…
Dmitri_Zagidulin: at language which can be done generically for any field except people don't know that or you declare each field like name or description, a language map in which case you can use this cool shortcut. but we need to highlight it. explain what the best practices are. plus I have a question Ivonne and then Dave
Ivan_Herman: Yeah, I fundamentally agree with…
Ivan_Herman: what you said Mitri except that I am not sure the place to put that is this pack. I think we were discussing to have some sort of a note of an implementation guide or…
Dmitri_Zagidulin: I think.
Ivan_Herman: usage guide or…
Dmitri_Zagidulin: I think Dave
Ivan_Herman: something like that. Then that's where it had to go because this is not dependent on render methods. This is for the usage of ECDM in a larger context.
Dave Longley: And I was also just going to say we're getting a little ahead of ourselves because we have to make some decisions about what the payload is for the summary render method which is really what we're talking about with these labels and fields. So we have to decide what we're actually doing there. is that entire thing that's being returned a JSONLDD payload or is it a JSON payload that inherits LVOS's? So, we have things to decide. so that just Dave Longley:
Dmitri_Zagidulin: That's right.
Dmitri_Zagidulin: That's So, we'll bring this back to the render method. But I do think that refreshing our memories on what the base VCDM mechanism is, what the primitives are that we're playing with is helpful. So keep in mind, one quick tooling question to Dave or Benjamin or whoever knows is there affordances in the JSON libraries to for example given how in JSONLDLD every value can be an array or a single string or an object and that's something developers when they're parsing it as JSON often get tripped and so the code is full of if type object then do
Dmitri_Zagidulin: this and if string do this. There's lots of guards and the JSON libraries often have syntactic sugar that says for example get value and the get value part selects between array string and object and does the right thing.
Dmitri_Zagidulin: Is there a similar method to navigate these language maps? Can I say get value given English language? Go ahead.
Benjamin_Young: Yeah,…
Benjamin_Young: so most of the libraries don't just straight up support it out of the box. What you tend to end up doing is converting it to one of the graph shapes, whether that's full-on RDF quads or…
Dmitri_Zagidulin: I was just curious…
Benjamin_Young: the expanded form, and then traverse that and change it. But there's no reason why you like it doesn't take a lot of JavaScript to do that with the expanded form because let me see if I can just show you.
Dmitri_Zagidulin: if it was already there.
Benjamin_Young: It should be. I don't know why It's just nobody's written it. But it's 10 minutes with quad to get it written. Do we have time for one quick demo that will show both things.
Dmitri_Zagidulin: Right. Understood. Yeah, we like demos. Let's go.
Benjamin_Young: Yeah, this should maybe answer a couple questions. So, Yeah,…
Dmitri_Zagidulin: Wait one sec. While you're pulling that up, Dave, I agree that we do need to get to some decisions, though it's just as well if we end up postponing the decisions to the next call because we do have a reduced attendance today.
Dave Longley: Yeah. I didn't mean today necessarily.
Dmitri_Zagidulin: Go ahead.
Dmitri_Zagidulin: In general, yeah, we do have some decisions. Go ahead.
Benjamin_Young: I mean what this thing is at all is kind of the core decision. but in the meantime, here's some more JSON. so this is the example from example 40 and the VCDM but replacing that URL that was a fake non-existing context which doesn't help anybody learn. with something that actually explains what's happening here. so this is what Dave was talking about in terms of how you would extend it. So you would say within achievement there's a special context. You could also do a type based extension.
Benjamin_Young: But at any rate, this is the thing that's line 8 that turns schema name into using language pattern. So down here in the quads, org name is still the predicate that's being used for these. but now they have, languages attached to them. So it's functionally equivalent to if I were to add the name here and use an LVO. then that's in here somewhere.
Dmitri_Zagidulin: Nice. All right.
Benjamin_Young: right here. So, it's the same thing. you didn't break your output quads, but you did change what's in it. what you're not able to do is because the BCDM doesn't define this as possible. you will not be able to do this and you will also relatedly and annoyingly and confusingly to folks I leave it off. I guess you're not going to be able to do that either. I can get my JSON typed right. because it is a protected term and it's protected is as just a string.
Benjamin_Young: So the danger is that when you extend the VCDM with a thing that says you can use language maps, that spec that downstream spec for VC whatever special type thing I just made up has to say you can and should use language maps like we're seeing down here in achievement, but only inside of achievement or only for credential subjects. with this type or whatever. they're scoped and anything that the VCDM defined as name and description, you can't do this.
Benjamin_Young: you have to use LVOS, which is maybe the vote for even though it's fiddly and looks weird for sticking with LVOS's throughout the document, which is probably where I would still personally go if I were crafting a credential type. because as handy as language maps look and as sort of quick off-the-shelf, yay, I did multiple languages. it actually closes the door on other stuff you're probably going to need and want later. whereas the language value objects, as ugly as they are to some folks, does give you all the powers. It's like, Superman has superpowers because his underwear is on the wrong side of his pants.
Dmitri_Zagidulin: Mhm. Right.
Benjamin_Young: So, at symbol, the shape of this object tells you it has superpowers. to your question though, Dimmitri, about how would I get out the multi- language strings once I've done them. If you were to write some JavaScript that handled expanded terms, basically once you're expanded, you have LVOS's throughout as you can see down here. no, where did achievement go? There it is. So, yeah.
Benjamin_Young: So now they all map to this same shape. So you would write some JavaScript that would descend through this fairly shallow tree. It's only three levels and a bunch of arrays and just keep anything that was in the language that you wanted and throw out everything else and then you can recompact that if you want into a shape that only has English values. there's ways to do it in lots of contexts depending on what you're wanting. If you're wanting the whole credential reconstituted but just in English, that's possible with JSONLDD plumbing. or you can just say, I'm really just looking for the achievement name in English. Then really, you're just parsing an array of however many of these and you're looking for that object. So again, it's trivial
Benjamin_Young: starter grade JavaScript to get this back out with or…
Dmitri_Zagidulin: Yeah. No problem.
Benjamin_Young: without knowing how the credential author decided to make their surface shape look. Once it's expanded, you have a consistent shape and then you can say I just want English. So I don't know why libraries haven't done it. They certainly could.
Dmitri_Zagidulin: I think the whole community just hasn't done enough internationalization. Go ahead, Dave.
Dave Longley: Yeah, and…
Dave Longley: I was just going to comment you can also have a simpler helper. If you make an assumption about the properties and inputs in your system, if you've already JSON schema things and what the shapes can be, you can make a helper that doesn't need to do expansion. It just knows there are multiple different ways the value could appear and it could normalize for you and return it. So it really depends on your application, how much your application knows, what you've assumed and…
Dave Longley: there are simpler and…
Dave Longley: easier and more slash more comprehensive ways to write your helpers and so
Dmitri_Zagidulin: Yeah, makes sense.
Dmitri_Zagidulin: Go ahead, Benjamin.
Benjamin_Young: Yeah, what Dave's just describing moves the constraint up a surface to up here.
Benjamin_Young: So you would restrict like you probably meant your own media type or say that if you use a certain context URL you must also use a certain JSON schema and then that schema would enforce what's happening here and then because you've forced that consistency at the surface level then you don't have to expand it but then that also shuts the door on other types of extensibility which is why even though the VCDM M does have a JSON schema. It's not forced on anyone because if we did then this couldn't happen later. So it really just depends on…
Benjamin_Young: what you want and it's very tempting to overoptimize for the wrong constituent. So the VCDM made a good choice on extensibility I think generally.
Dmitri_Zagidulin: By the way,…
Benjamin_Young: Go ahead Demetri.
Dmitri_Zagidulin: that's a good point about the JSON schema. I think we should open an issue to extend the JSON schema to support these language objects.
Dmitri_Zagidulin: Go ahead. I don't think so,…
Benjamin_Young: Yeah, I'd be curious to know…
Benjamin_Young: if it already does or doesn't. I mean, it's the void.
Dmitri_Zagidulin: but yeah. Benjamin Young:
Benjamin_Young: I don't know. I hope any of us can run it and find out. But name would have to be I think it probably does…
Dmitri_Zagidulin: We'll figure it out. Yeah. Right.
Benjamin_Young: because we have that multi- language section. But who knows
Dmitri_Zagidulin: So coming back to render method and thank you so much for this.
Dmitri_Zagidulin: This is very educational.
Ivan_Herman: Good night.
Dmitri_Zagidulin: But back to render method. So we see the tools that we're working with. we see the primitives that JSON LD gives us that the BCDM inherits and so we inherit in random method in addition so in addition to these field level because we have this notion of labels we also get label level translation which again I'm only highlighting because other render method like specs have an explicit and separate mechanism for translating just the labels. We get that for free here.
Dmitri_Zagidulin: But in addition as this PR argues and proposes we need a third mechanism which is optionally the ability to select the entire load the entire render methods suite based on your local. For example, this comes in useful for the static, right? If one image is rendered in English and the other is in French, we need to be able to select on it. A per internationalization is not going to help there. hence why the proposed target language or target local field and then we'll need to figure out how to put this all together into recommendations for developers.
Dmitri_Zagidulin: So Dave, does this make sense? why a target language field in addition to the value level JSON mechanism?
Dave Longley: I heard the use case just now, which is for the static case where you might have different images in different languages.
Dmitri_Zagidulin: Yes. Yes.
Dave Longley: I still think that presents the same privacy considerations.
Ivan_Herman: All right.
Dave Longley: So I don't know what we want to do about that case. and…
Dmitri_Zagidulin: Hold on a sec.
Dave Longley: and it's not the exact equivalent…
Dmitri_Zagidulin: Can you say more about that? Because it's the exact equivalent as the value level internationalization.
Dave Longley: because at the value level the language choice is made in private on the client…
Dmitri_Zagidulin: Same with this the
Dave Longley: if it is so to be clear if we did not use target language at all if it were not present then I'm talking about using lvos inside of field labels and so there's exactly one summary render method that you obtain and…
Dave Longley: everyone obtains the same one regardless of whether you speak Navajo or French. And then you resolve that on your side. so we're going to go somewhere and…
Dmitri_Zagidulin: and I'm talking about the exact same thing.
Dmitri_Zagidulin: The issuer just presents the menu of options just like with the value level.
Dave Longley: fetch the payload and that will leave a trace that you asked for the Navajo one versus the French one and that is fundamentally different from I fetch the payload for all languages and…
Dave Longley: then yeah so we have to sort all that out And yeah,…
Dmitri_Zagidulin: No,…
Dmitri_Zagidulin: no, no. so this is not I get what you're saying, but this is intended for embedded, not external.
Dmitri_Zagidulin: Absolutely. But that's part of our thread model discussion. We need to sort out fetching externally for all of these things that there's nothing special about the language. Go ahead Benjamin or… Dave Longley:
Dave Longley: go ahead.
Dmitri_Zagidulin: sorry go ahead Dave finish your thought and…
Dmitri_Zagidulin: then Benjamin.
Benjamin_Young: Yeah. Yeah,…
Dave Longley: Yeah, I'm saying my potential problem with this is in me conceptualizing it as something that you use to make a decision for…
Dave Longley: what you fetch externally as opposed to it being in the external data itself.
Dmitri_Zagidulin: I see.
Dave Longley: So you make that decision after you've made the fetch and you're not cutting up populationations and creating a privacy
Dmitri_Zagidulin: I see. Go ahead, Benjamin.
Benjamin_Young: that's the kind of architectural choices we need to fully express in the doc of this is why we're doing it this way. and probably not just the threat model but this is the expectation is that if all the data is in the credential then yes you can give it language values and say these are in English and navo and whatever else but if it's external thou shalt not and…
Benjamin_Young: explain Bye.
Dmitri_Zagidulin: Yeah.
Dmitri_Zagidulin: So, we'll have to be very careful about explaining all of that. And I agree with your comment in chat that we should reuse schema.org in language instead of target language. I will change it to that. That's a very good point. fantastic discussion. we've got only a couple minutes till the next call,…
Dmitri_Zagidulin: so this is a good place to stop. Before we adjourn, Ivonne, I just want to make sure, do you have everything you need from me on as far as the threat model dote? I addressed the changes that you requested, I fix the broken etc.
Ivan_Herman: Yeah, I am done.
Ivan_Herman: I sent out a small mail.
Dmitri_Zagidulin: Okay, great.
Ivan_Herman: My morning so to say.
Dmitri_Zagidulin: Okay, got it.
Ivan_Herman: And you are done.
Dmitri_Zagidulin: What do we want to do with this thing?
Dmitri_Zagidulin: Should we merge it or close it with the PR? okay.
Ivan_Herman: That doesn't even depend on me anymore.
Ivan_Herman: Yes, we can merge it without too much problems.
Dmitri_Zagidulin: Let's do that.
Ivan_Herman: I have made a copy of the content and…
Dmitri_Zagidulin: Yeah, got it.
Ivan_Herman: I process the copy. So that's really for archival in a way.
Dmitri_Zagidulin: Yeah. this is Parado plus plus SPR also.
Dmitri_Zagidulin: fixes the short Yeah.
Ivan_Herman: Yeah, that's true.
Ivan_Herman: Think that Yeah.
Dmitri_Zagidulin: Please folks, add your plus ones to this so we can merge it. All right. Thank you everyone. Talk to you next week for great discussion. Phil to your question in chat. wouldn't that be simpler in a separate PR?
Dmitri_Zagidulin: This is that separate PR essentially. This is a PR to select a template.
Phillip Long: I thought that PR was selecting the template and the label and the Okay.
Dmitri_Zagidulin: No, no, no. Just that PR is just for the template.
Phillip Long: I missed some when you were showing it before. It seemed like you were walking through the two levels with the language and the template language and the labels and at this and…
Dmitri_Zagidulin: I see.
Phillip Long: then also showing the choice of…
Dmitri_Zagidulin: I see.
Phillip Long: what template or…
Phillip Long: static framing this whole thing needs to I got it.
Dmitri_Zagidulin: I see that the confusion makes perfect sense.
Dmitri_Zagidulin: What that was is you're referring to the introduction was just explaining why we want a separate template selection. Right. So yeah.
Phillip Long: I missed that.
Dmitri_Zagidulin: Yeah. Yeah. So So it's the introduction paragraph that says we have these things already, but we also need a template selection.
Phillip Long: Okay.
Dmitri_Zagidulin: That's the overall deal.
Phillip Long: Got it. Thank you. Yeah.
Dmitri_Zagidulin: But your comment makes perfect sense. Thank you so much. Cheers. Meeting ended after 01:01:49 👋 This editable transcript was computer generated and might contain errors. People can also change the text after it was created.