15:34:25 RRSAgent has joined #json-ld 15:34:25 logging to https://www.w3.org/2019/05/17-json-ld-irc 15:34:32 Zakim has joined #json-ld 15:34:39 zakim, this is json-ld 15:34:39 got it, azaroth 15:34:53 rrsagent, set log public 15:34:58 Chair: azaroth 15:35:06 Date: 2019-05-17 15:35:10 Agenda: https://lists.w3.org/Archives/Public/public-json-ld-wg/2019May/0024.html 15:35:46 Regrets+ ivan, ruben_taelman, pchampin, tim_cole, adam_soroka 15:36:01 present+ 15:56:08 simonstey has joined #json-ld 15:59:59 workergnome has joined #json-ld 16:01:02 present+ 16:01:13 present+ 16:01:46 present+ 16:01:49 present+ 16:02:57 regrets+ gkellogg 16:04:54 scribenick: bigbluehat 16:05:05 TOPIC: Approve minutes of previous call 16:05:29 PROPOSAL: Approve minutes of previous call https://www.w3.org/2018/json-ld-wg/Meetings/Minutes/2019/2019-05-10-json-ld 16:05:34 +1 16:05:34 +1 16:05:38 +1 16:05:39 +1 16:05:45 +2 16:05:51 RESOLVED: Approve minutes of previous call https://www.w3.org/2018/json-ld-wg/Meetings/Minutes/2019/2019-05-10-json-ld 16:05:58 TOPIC: Announcements 16:06:09 azaroth: I sent the notification about TPAC registration being open 16:06:25 ...currently we're scheduled to meet 16:06:31 ...if everything goes very smoothly 16:06:35 ...we might not meet 16:06:39 ...but we'll know closer to the time 16:06:46 ...any other announcements or reminders? 16:06:51 TOPIC: Issues 16:07:06 SUBTOPIC: Type-scoped contexts: https://github.com/w3c/json-ld-syntax/issues/174 16:07:09 azaroth: dlongley the first one of timeliness for you is type scoped contexts 16:07:13 ...would you like to summarize? 16:07:28 dlongley: I went to use type scoped contexts to create the Verifiable Credentials context 16:07:32 ...but immediately hit issues 16:07:45 ...these actually bleed beyond being scoped to a particular type 16:07:56 ...I fixed our implementation...and gkellogg fixed his implementation 16:08:04 ...this issue is about fixing the text to match the implementations 16:08:39 azaroth: so what you've described definitely sounds like a bug 16:08:43 q+ 16:08:45 ...it shouldn't bleed outside of that type 16:09:15 jeff_mixter has joined #json-ld 16:09:21 ...so, because `name` is defined in Person, it's scoped to Person 16:09:30 present+ 16:09:31 ...but you can also have `name` in Library and have that be scoped to Library 16:09:39 dlongley: right, but if you combine them, then you get a clash of terms 16:09:49 present+ 16:10:31 dlongley: if you put protected on these things in the next example 16:10:41 ...you would be told that there were issues...when in fact there aren't 16:10:55 ...this is more like a bug that is revealed by `protected` 16:11:19 ...so if you had also used some other terms that you intended to be dropped, those would get picked up by `Library` terms 16:11:29 azaroth: right. without Person being in the heirarchy 16:11:34 dlongley: even if it were there 16:11:57 ...if you had them nested, and had terms you wanted dropped, if that same term is defined earlier, it remains defined 16:12:10 ...so the `Library` terms don't stay within `Library`, they bleed out 16:12:18 azaroth: well...that sounds like what I'd expect, actually 16:12:32 dlongley: so, for property scoped contexts 16:12:43 ...but for the type scoped contexts, it's more like object oriented expectations 16:13:04 ...so you don't want unrelated contexts showing up in unexpected places 16:13:10 ...property scoped terms are different 16:13:16 ...those stick around 16:13:25 ...the property scoping works as expected 16:13:42 ...but the type scoping shouldn't behave like a property scoped context 16:14:01 azaroth: so the situation we have in IIIF.io is... 16:14:06 ...we use ActivityStreams properties 16:14:12 ...which are very very broad...like `items` 16:14:18 ...it's the same JSON key and RDF property 16:14:25 ...it's just, "here's the things in this list" 16:14:40 ...but at various places in the tree, the `items` are of various types 16:14:56 ...so when you get to an Annotation, you then need to use type scoping to deal with that change 16:15:24 ...so we'd need it to re-re-redefine its terms to deal with this change 16:15:36 dlongley: you can put a property scoped context inside a typed scoped space 16:15:59 azaroth: what happens when those continue into an `@container: @list` scenario 16:16:11 ...so, for example, you can have collections, which either contains collections or things 16:16:17 ...so a tree, or leaf nodes 16:16:25 ...so trees get one context, and leafs get another 16:16:28 ...how would that not collide 16:16:36 ...I assume you'd use type scoped? 16:16:42 dlongley: it's OK to use type scopes 16:16:52 ...your concern is that using type scopes don't travel down the branch 16:17:00 azaroth: yes. specifically when there are 1.0 contexts 16:17:09 dlongley: when you use type scopes, you can choose which path is traveled down 16:17:28 ...you can say in TypeA use this context, and then within these properties use that other context 16:17:53 1.1 context for IIIF - https://preview.iiif.io/api/image-prezi-rc2/api/presentation/3/context.json 16:18:21 ...one of the goals is to deal with ActivityStreams scenarios specifically using `protected` for use with non-JSON-LD processors using ActivityPub 16:19:04 azaroth: in that example, there are typed contexts which should be overridden further down 16:19:14 ...like below Annotation, there are further nodes 16:19:20 ...what is the context there? 16:19:33 dlongley: if the only thing that's bringing in the context is this type scoped context 16:19:46 ...that context will get removed if you move on to something that is not scoped to the same thing 16:19:53 ...like an ordered collection or something 16:19:59 ...they'll need to define their own 16:20:02 ...or use the earlier one 16:20:09 azaroth: that's not what 1.0 would say 16:20:21 dlongley: well, 1.0 didn't have typed scoped contexts at all 16:20:30 azaroth: there doesn't seem to be a solution for this particular case 16:20:41 dlongley: well, there is a solution, which is to say for those properties, you can 16:21:17 ...if you want every single property in an AnnotationCollection, then you'd need to use that via typed scoped contexts throughout the collection 16:21:26 azaroth: but given that most of these contexts are just the properties 16:21:38 ...you're doing an awful lot of rewriting with that approach 16:21:47 dlongley: there is a solution 16:21:50 ...which is unpleasant 16:21:58 ...but without this bug fix, there's no way to do the other approaches 16:22:18 ...you literally cannot use type scoped contexts and protected terms together in the way you'd expect 16:22:26 azaroth: is there a way to flag which of the two? 16:22:32 ...that seems like a lot of processing 16:22:41 ...it would require context import metadata... 16:22:57 ...like only this class + all that descend from it 16:23:05 dlongley: yeah, we do that with property scoped contexts 16:23:11 ...but you want to do that without redefinition 16:23:31 azaroth: right. if the Annotation context got updated, we'd then have to synchronize this context with that one. 16:23:41 ...so...maybe...if there were an Annotation 1.1 context 16:23:47 ...could it then redefine things within itself? 16:23:51 dlongley: yes. that would work 16:24:02 azaroth: so for this particular case, that would be the right solution 16:24:05 dlongley: correct 16:24:18 azaroth: so, given that context files are not versioned in the same way that specifications are 16:24:24 ...we could propose a 1.1 context 16:24:37 q? 16:24:45 dlongley: this would also afford the ability to use the `@protected` feature 16:24:51 ...which would help JSON processors 16:24:52 ack workergnome 16:25:05 ...who don't want to do JSON-LD processing 16:25:16 ...and want terms to remain identical in both ecosystems 16:25:28 workergnome: does this only protect at a certain level in the heirarchy? 16:25:37 ...or does to descend into the tree? 16:25:53 dlongley: any term definition does not continue down the tree--if you change type scope 16:26:03 workergnome: given your definition, that makes sense 16:26:09 ...but that's not what I expected 16:26:29 ...I'd thought that this covered the terms in the hierarchy under that type 16:26:43 dlongley: my opinion of that is when you're thinking of it from either OOP or graph perspectives 16:26:56 ...you move into a node, and that node has a class with certain properties 16:27:04 Another type scoped context: https://linked.art/ns/v1/linked-art.json 16:27:14 ...so to go into a node is to move into a new space 16:27:25 ...and if it cascaded as you describe it would be incompatible with `@protected` 16:27:37 workergnome: I think its two different contextual models of how this work 16:27:46 azaroth: yep. we just need to verify the models against the use cases 16:27:55 ...so here's another type scoped context 16:28:01 ...right at the top, there's some vanilla ones 16:28:10 ...but the 4th class is `Period` 16:28:20 ...we want to rename some of these to simpler names 16:28:24 ...there's no importing of anything 16:28:32 ...so these would not descend down 16:28:39 dlongley: yep. that should work just fine 16:29:03 azaroth: anyone have other 1.1 contexts? 16:29:06 q? 16:29:17 simonstey: I was also kind of confused 16:29:38 ...given that we have multiple people confused by this--or having differing expectations...maybe we should put this in the primer or something? 16:29:59 ...if we decided on the specific way to deal with this, then we should write-up the foundation of how this works 16:30:06 ...because it's not like a class hierarchy 16:30:18 ...and we want to avoid those expectations causing confusion 16:30:28 q+ 16:30:36 azaroth: one of the reasons why I had the opposite expectations from dlongley 16:30:45 ...is that the way gkellogg has expressed in the past 16:30:50 ...was to avoid contexts inline in the JSON 16:31:13 ...if you had a top-level node with a context, then that context would extend down 16:31:21 q+ 16:31:26 q? 16:31:27 ack workergnome 16:31:34 ...whereas if you had `@type` with a scoped context, it would be equivalent to putting that context in at that part of the tree 16:31:50 ...which would come with the expectation of cascading--as in the case of an inline context at that point in the tree 16:31:58 workergnome: so, say someone else is using our vocabulary 16:32:09 ...what would it require us to do to rewrite the linked-art context 16:32:16 ...to be sure that our terms stay scoped into our context 16:32:24 ...is it the same as what's being considered for activity streams? 16:32:32 s/activity streams/ActivityStreams 16:32:36 q? 16:32:37 ack dlongley 16:32:40 azaroth: only if they're type scoped 16:32:54 dlongley: you either define properties that can appear anywhere 16:33:05 ...or those that can be used within certain types 16:33:25 ...or those that can be used within any type 16:33:48 ...so, yes the way gkellogg had stated this as pulling context into a type 16:34:01 ...and thinking about it as pulling a context in "in place" as a context object would 16:34:12 ...that, however, doesn't work well with protected, etc. 16:34:34 ...so, the change would be that type scoped would now map singularly to that scope 16:35:00 workergnome: so, assuming that someone uses a type scoped definition 16:35:10 ...when I put this type in, it's a vocabulary concept 16:35:18 ...so where we put our contexts have names and dates 16:35:26 ...we wouldn't want to implement them at every level 16:35:43 ...we'd have to protect the linked-art context against being used as type scope context 16:36:02 azaroth: so, like IIIF includes Annotations 16:36:31 ...so when you descend from `Concept` to `name` via `identifiedBy` property 16:36:38 ...you'd no longer have an active context 16:37:00 ...the context doesn't have a notion of inheritance 16:37:08 ...so it's not really Object Oriented 16:37:11 ...if it did, then you'd be fine 16:37:26 q? 16:37:29 ...so we instead would have to enumerate every possible property of every possible class 16:37:46 dlongley: given that I have no knowledge of what you're talking about... 16:37:54 ...from the high level it sounds correct 16:38:02 ...if you want to scope against types, use types on everything 16:38:27 ...if you want your types to survive under all the properties, then yes...this will be verbose 16:38:35 ...there could be another simpler syntax 16:38:44 ...but I don't think the solution is to not handle this sort of inheritance 16:39:04 ...if that is indeed a need to solve that verbose syntax, then we should solve that on its own and not give up this sort of inheritance 16:39:12 workergnome: this sounds like shallow scoping vs. deep scoping 16:39:38 dlongley: to me its a difference between property scoping vs. type scoping 16:39:48 ...when you use property scoping, you're cascading into the tree 16:40:03 ...but with type scoping, you have no idea where it's going next 16:40:14 ...this gets worse with protected 16:40:36 ...because if you don't know where a type usage is going next, there's no way to correctly protect its terms 16:40:53 ...so maybe we need like an `@any` property to handle this scoping with protecting 16:41:19 workergnome: so, if you do want shallow scoped types, could you reimport the base context back via nullifying? 16:41:25 dlongley: nullifying can't do that 16:41:31 q+ 16:41:34 workergnome: but if you knew what it was, could you bring it back in? 16:41:42 dlongley: that would be dependent on how you got that base context 16:41:45 ...which sounds very difficult 16:41:48 q+ to ask if putting it back after nullifying is a circular import error? 16:42:00 workergnome: so, if we have deep scoping, then shallow scoping seems hard, and vice verse 16:42:21 dlongley: there might be a cleaner way to say, in this scoped context, you can use these type scopes 16:42:22 ack azaroth 16:42:22 azaroth, you wanted to ask if putting it back after nullifying is a circular import error? 16:42:28 ...to me one seems easier to solve than the other 16:42:34 ...but it certainly seems like they do differ 16:43:02 workergnome: I think there is to do them both...and maybe syntax sugar would make things simpler 16:43:13 dlongley: think where we're at now, shallow is broken 16:43:32 ...so if we fix for shallow, we make deep harder 16:43:40 ...and that's where this syntactic sugar might help 16:43:51 azaroth: what about nullification and circular reimporting? 16:44:31 ...I fear you'd end up recursively recursing and cursing about recursion 16:44:59 q? 16:45:01 ...so the `@properties: use-this-context` is way less verbose than defining every single property 16:45:13 dlongley: yeah, it's effectively a way of defining a base context 16:45:18 q? 16:45:23 azaroth: right. `@base-context` (vs. `@base`) 16:45:28 ...it was very good to discuss this 16:45:35 ...anything else? or are we at proposal time 16:46:03 dlongley: so, we'd need to change this to default to shallow, so VCWG can use `protected` 16:46:09 ...so the VCWG testing can move forward 16:47:12 PROPOSAL: Type scoped contexts will be shallow and not be inherited via properties of instances of the type, and we will add a syntactic sugar for a wildcard match on properties on the type to define their context 16:47:28 +1 16:47:38 +1 16:47:42 +1 16:47:43 +1 16:47:47 +1 16:47:49 azaroth: so this solution seems better than the other options...which all seem worse 16:48:01 +1 16:48:03 +1 16:48:14 ..and for the linked-art case, we simply have in the context generating script, "for each class, put in magic-ness to use self for all the properties of this thing" 16:48:19 RESOLVED: Type scoped contexts will be shallow and not be inherited via properties of instances of the type, and we will add a syntactic sugar for a wildcard match on properties on the type to define their context 16:48:51 https://github.com/w3c/json-ld-api/issues/90 16:49:14 dlongley: so this one is about reusing existing contexts 16:49:32 ...the syntax spec says that a protected term definition with `@protected: true` 16:49:37 ...it prevents it being overrident 16:49:45 ...possibly by setting context to null 16:49:57 ...what is prohibited is introducing other definitions 16:50:06 ...but what happens when new terms come in 16:50:19 ...what this change could provide is allowing using 1.0 contexts alongside protected 16:50:28 ...so, things that define aliases for id/type 16:50:37 +1 to this issue 16:50:46 ...you can't currently bring those in with protected, because that throws an error 16:51:02 ...because you're trying to redefine terms--even though the result would be the same 16:51:19 ...so the only caveat is reusing old contexts won't come with `@protected` set 16:51:30 ...so in that case, you just keep `@protected` flag to on 16:51:53 q? 16:51:57 ...so update the API to switch where we check that protected is set, not update existing terms that are identical--modulo the protected flag 16:52:19 workergnome: it does seem to make complete sense 16:52:28 ...I'd want gkellogg to weigh in 16:52:42 ...to get another implementer's input on this 16:53:03 dlongley: so, the only sticky issue is two scoped contexts, then you have to do a full comparison 16:53:12 azaroth: if they're by value rather than by reference...yeah...that would be rough 16:53:20 ...so with the caveat that the editors are OK 16:53:29 ...here's a proposal 16:54:43 PROPOSAL: Assuming the update to the algorithm is not controversial, protected definitions of terms do not raise an error when the term is redefined in exactly the same way, with the potential exception of not being protected 16:54:47 +1 16:54:48 +1 16:54:48 +1 16:54:50 +1 16:54:51 +1 16:54:59 +1 16:55:00 +1 16:55:09 SUBTOPIC: @protected algorithm change 16:55:15 link: https://github.com/w3c/json-ld-api/issues/90 16:56:04 SUBTOPIC: Compact IRIs #177 16:56:10 link: https://github.com/w3c/json-ld-syntax/issues/177 16:56:42 azaroth: if you define a term that's the same as a URI schem 16:56:48 ...e then you'll have problems 16:57:09 ...so there are schemes that are very likely to be used in values 16:57:25 ...like `mailto:` which could be high jacked in this scenario 16:57:38 ...we could fix this by being able to protect URI schemes that are in use 16:57:51 ...by making it possible to set certainly ones to null 16:58:08 ...so, for instance, you could also set them within certain properties--like foaf:mailbox 16:58:24 ...and then protect them to keep upstream ones from overriding `mailto:` 16:59:37 ...so this means we don't need to put all possible URI schemes in the spec 16:59:38 q? 16:59:54 not enough time to consider it :/ 16:59:56 ...and context authors can limit the damage to specific spaces where it could be damaging 17:00:23 ...so, something to think about over the week 17:01:48 TOPIC: Adjourn 17:02:12 rrsagent, draft minutes 17:02:12 I have made the request to generate https://www.w3.org/2019/05/17-json-ld-minutes.html azaroth 17:03:09 Meeting: JSON-LD Working Group 17:03:11 rrsagent, draft minutes 17:03:11 I have made the request to generate https://www.w3.org/2019/05/17-json-ld-minutes.html azaroth