14:04:00 RRSAgent has joined #json-ld 14:04:00 logging to https://www.w3.org/2019/02/07-json-ld-irc 14:04:01 rrsagent, set log public 14:04:01 Meeting: JSON-LD Working Group F2F meeting — First day 14:04:01 Chair: azeroth 14:04:01 Date: 2019-02-07 14:04:01 Agenda: https://tinyurl.com/ycc3cyts 14:04:01 ivan has changed the topic to: Meeting Agenda 2019-02-07: https://tinyurl.com/ycc3cyts 14:04:09 Chair: azaroth 14:04:24 gkellogg has joined #json-ld 14:06:02 present+ 14:06:09 hsolbrig has joined #json-ld 14:06:10 present+ 14:06:25 present+ hsolbrig 14:08:13 pretty handy 14:08:17 s/pretty handy// 14:08:22 present+ Gregg_Kellogg 14:08:25 azaroth has joined #json-ld 14:08:33 present+ Benjamin_Young 14:08:37 present+ Rob_Sanderson 14:08:45 zakim, who is here? 14:08:45 Present: ivan, simonstey, hsolbrig, Gregg_Kellogg, Benjamin_Young, Rob_Sanderson 14:08:48 On IRC I see azaroth, hsolbrig, gkellogg, RRSAgent, Zakim, ivan, pchampin, simonstey, ChristopherA, bigbluehat, fr33domlover, dlehn, dlongley 14:09:32 workergnome has joined #json-ld 14:09:32 preset+ David_Lehn 14:09:40 present+ workdergnome 14:09:45 jeff_mixter has joined #json-ld 14:09:54 present+ 14:09:57 present+ 14:10:00 present- workdergnome 14:10:24 present+ 14:10:33 zakim, who's here? 14:10:33 Present: ivan, simonstey, hsolbrig, Gregg_Kellogg, Benjamin_Young, Rob_Sanderson, jeff_mixter, workergnome, dlehn 14:10:35 On IRC I see jeff_mixter, workergnome, azaroth, hsolbrig, gkellogg, RRSAgent, Zakim, ivan, pchampin, simonstey, ChristopherA, bigbluehat, fr33domlover, dlehn, dlongley 14:11:00 scribenick: hsolbrig 14:15:19 hsolbrig2 has joined #json-ld 14:16:33 https://docs.google.com/document/d/1FcbySJzY5QyBW6HcCtO0LCUmppgIJqQzv565BqC5bOU/edit?pli=1 14:20:09 ajs6f has joined #json-ld 14:20:13 present+ 14:20:16 (example of sealed document posted on google docs - Test se03) 14:24:37 azaroth: first CR end of August, then time for implementations to be written/updated 14:24:52 ... targeting full PR by next June 14:25:48 azaroth: still have primer to do, to discuss later... 14:25:55 .. possible other documents as well 14:26:47 ... still need to deal with security and privacy. Comments from Microsoft, Google and ? 14:27:22 ... concerns about lightbulbs looking up people's habits via context. Any network access gives information 14:27:32 ... i18n -- may or may not be an issue 14:28:09 ... hopefully we will push to a future RDF working group 14:28:44 ... TR - at least 1 candidate recommendation that can be implemented. By end of CR, 2 independent implementations of every feature 14:29:08 ... correction: two implementations for every feature. 14:29:12 +q 14:30:02 ... then to PR w/ AC approval. PR has to be at least 6 weeks 14:30:43 ivan: when PR is published, documents are frozen beyond spelling and grammatical errors 14:31:01 ... if some feature doesn't get enough implementation, must be removed from PR 14:31:21 ... we have to close technical issues by time of PR 14:32:33 ... a new process may come out in 2020 that makes it easier to update recommendations. 14:33:07 q? 14:33:10 ack simonstey 14:33:11 ... may consider keeping group alive to take advantage of this. Defer may not mean freeze for 5 years 14:33:35 simonstey: do we also have to check 1.0 features as well or just new features? 14:34:32 ivan: we could concentrate on new, but have to prove that no impact on old, so checking all might be easier 14:34:59 ... we should have enough implementations, emerging from 1.0 continuance 14:35:45 ... would propose testing the whole thing as is 14:36:25 q? 14:36:41 q+ 14:37:02 ack jeff_mixter 14:37:22 jeff_mixter: how permanent does implementation have to be? Research projects? 14:37:50 ivan: W3C requirement is that we know it can be implemented. Research is fine... 14:39:17 azaroth: need to focus on the technical issues and either solve or toss... 14:39:48 ... can't add or remove remove features in CR, so be "judicious but brutal"... 14:40:04 ... if too complicated, defer. 14:40:18 q? 14:40:51 ivan: If we can't get to a clear model and agreement on sealing today, I propose we defer it. 14:41:19 ajs6f: If we happen to do that, what do we say to verifiable claims, etc? 14:42:11 azaroth: (reads guiding principles) 14:42:24 https://www.w3.org/2018/json-ld-wg/WorkMode/guiding_principles 14:45:15 q? 14:46:14 azaroth: sealed contexts - goal is to solve by end of day 14:46:21 Topic: Sealed Context 14:47:55 ivan: one thing from last week's discussions - sealing seems to be a very dangerous thing to do... 14:48:20 ... if Google decides to put a seal on schema.org, community will be unhappy ... 14:48:59 gkellogg: we need to understand who we're serving. Not there for schema.org, rather verifiable claims 14:49:29 q+ 14:50:04 ... specs sucin spech as verifiable claims have a shared vocabulary, with some domains wide open, but people can't change semantics 14:50:18 ... in spec, intentionally or otherwise 14:50:26 ack bigbluehat 14:51:05 bigbbluehat: chief aim of proposal is that json and json-ld world co-exist. Term sealing is to guarantee that ... 14:51:23 ... json and json-ld authors work on exact same shape 14:51:25 q+ 14:51:44 q+ re shape 14:51:47 q+ 14:51:48 ... maybe take a step back from sealing and see what other options there may be 14:52:03 ack pchampin 14:52:15 ... notion of foundational shape surviving framing 14:52:30 We don't hear you PA 14:52:48 q+ pchampin 14:52:56 ack ivan 14:53:44 ivan: what I understand from ver. claim. is that they have a wrapper w/ properties whose value is an object... 14:54:23 ... want to give total freedom for another vocabulary to leave locally. How about a syntax that says this is an extension point... 14:54:39 q+ 14:55:16 q+ 14:55:20 ... @context null + specific situation that is sealing + @context null 14:55:49 ... concentrate on this use case and try not to generalize 14:56:05 ack azaroth 14:56:05 azaroth, you wanted to discuss shape 14:56:16 q+ 14:57:01 azaroth: sealing doesn't solve actual shapes - just relationship between key and class. Not producing necessary structure 14:57:33 q+ to ask re schema languages 14:57:35 ack pchampin 14:57:38 ... it is intersection of RDF semantic layer and JSON keys. Not shape thing as an API. Mapping not API 14:58:24 pchampin: goal of sealing is not to guarantee LD has same shape as plain JSON, but JSON LD that has the same shape... 14:58:31 ... has the same semantics. 14:59:15 ... agree with ivan -- sealed is sealed from point to rest of subtree and not try to address unsealed point. 14:59:17 ack workergnome 14:59:54 wokergnome: Use case for unsealing is to insert user specified documents into structure. Unstructured JSON into LD... 15:00:15 ivan: may try to pick up json literal again 15:01:00 ivan: some examples don't want literal, but piece of RDF graph but based on another vocabulary on its own 15:01:23 workergnome: do we need ability to interpret unsealed part in context of whole document? 15:01:32 gkellogg: yes 15:02:45 q? 15:03:06 workergnome: do we have use cases where sealed and unsealed need to be interpreted? 15:03:15 azaroth: I think so 15:03:15 ack gkellogg 15:03:50 Note - if we can't solve by the end of the day, revisit the fallback position of JSON literals 15:04:11 gkellogg: We're making this too hard. A sealed context is a collection of sealed terms -- maintains original interpretation 15:04:26 q+ 15:04:48 ... an extension point is where you use a term that is not sealed... 15:05:36 ... say there is a named term in VC that has a given meaning, but want to be able to add other properties that aren't sealed... 15:06:15 ... also need a "this is a place for you to put stuff" -- creating a scoped context where properties can be re-intepreted. 15:06:38 ack dlehn 15:06:43 ... sealed terms have fixed meaning when you use them. 15:06:43 a term may be sealed (i.e. its meaning, esp. its IRI, can not be overridden) and an extension point (allow sealed terms to be overridden in its subtree) 15:07:55 ack ajs6f 15:07:55 ajs6f, you wanted to ask re schema languages 15:07:56 q? 15:08:03 dlehn: common use will be use an example, preserving semantics and adding on... 15:09:18 ajs6f: we have ways to control shapes of json and RDF, but now we're talking about a third way... controlling semantics 15:09:45 ack pchampin 15:10:41 pchampin: gregg says extension points are properties that aren't sealed -- sealed means one cannot override 15:11:29 gkellogg: one approach is sealed context that allows context underneath to be unsealed... 15:11:31 q+ 15:12:19 ack azaroth 15:12:37 scribenick: ajs6f 15:12:40 scribenick: ajs6f 15:13:05 thanks @gkellogg, that's clearer :) 15:13:27 ivan: i would like to hear a description of the exact sealing proposal 15:13:38 gkellogg: that would be pchampin's PR 15:14:07 ivan: if we cannot explain where we are, we have a problem 15:14:32 pchampin: I agree with first 2 parts of the PR, the 3rd one is related to extension points 15:14:56 ... we don't have the same model for unsealing 15:15:24 ... especially when it happens automatically 15:15:57 ... I think the sealed definitions in a context cannot be overwritten by anything in that context 15:16:22 ivan: if you seal a context, then the only way the terms can be overriden is in a scoped context within the sealed context? 15:16:31 pchampiin: I _thikn_ so 15:17:55 gkellogg: explicates example on whiteboard Test so03 15:18:21 reference: https://docs.google.com/document/d/1FcbySJzY5QyBW6HcCtO0LCUmppgIJqQzv565BqC5bOU/edit?pli=1#heading=h.sup6uw56yj6j 15:19:17 dlehn: there are problems with this example because the inner context has no effect 15:19:23 q+ 15:19:32 ivan: we often use such examples, which I find a little unnatural 15:19:39 hsolvig: That confuses me 15:19:48 q+ 15:19:59 ivan: [disusses example] 15:20:47 gkellogg: ivan: azaroth: [edit and discuss example] 15:22:05 ivan: sealing seems to mean that the terms are cast in concrete 15:22:17 ivan: it is very difficult to explain exception 15:22:41 dlehn: Not sure why it's unnatural? 15:22:52 q? 15:22:56 ivan: if the context says "Sealed" that would seem to me to mean that everything is cast in concrete 15:23:06 ... but that doesn't seem to be the case 15:23:21 ... we can change things with scoped contexts etc 15:23:35 gkellogg: this comes out of discussion of multiple sealed contexts 15:24:14 hsolvig: by changing this one term to add a type, I can open up everything I thought I was sealing 15:24:21 s/type/typo 15:25:22 workergnome: I would have assumed that by sealing a term, it would remain sealed 15:25:47 gkellogg: so once sealed, always sealed 15:26:25 gkellogg: that didn't work for Verifiable Claims because they don't want to intro a constraint on the JSON-LD within the wrapper 15:26:58 ack jeff_mixter 15:27:50 jeff_mixer: can I constrain the type of value used with a term this way? 15:28:58 all: no, JSON-LD has no way to constrain the types of values 15:29:35 scribenick: azaroth 15:29:47 q? 15:29:47 ajs6f: Agree comppletely. The wrapper compresses the protocol into the document 15:29:49 q+ 15:30:17 ... It pulls us toward sealing other things beyond just the mapping, but into complex chains 15:30:23 ack pchampin 15:30:32 hsolvig: preventing people from accidentally overwriting contexts seems within our scope, but not all the futher ramifications 15:30:33 scribenick: ajs6f 15:30:55 pchampin: re: when terms become unsealed 15:31:05 ... it is genuinely hard to explain 15:31:31 ... I would say that a sealed term is sealed anywhere, except when the sealed context opens it 15:32:00 ... there are two situations in which one can redefine a sealed term 15:32:20 ... plain JSON users don't expect the semantics to be sealed any more 15:32:38 ack ivan 15:32:55 ... we should leave the decision of when to unseal terms to the authors of the sealed context 15:34:08 ivan: an extension point means a combination of "context now" and "I cannot touch what is on the upper level" 15:34:31 gkellogg: {discusses Ivan's example] 15:35:06 ivan: how about a keyword "extension" that means you cannot redefine anything you inherit? 15:35:25 gkellogg: not quite @context: null. 15:35:46 q? 15:35:59 q+ 15:37:13 ack workergnome 15:37:47 workergnome: if we have a context that defines 'name' within a sealed context, [points to examples] 15:38:21 gkellogg: [discusses examples] 15:40:28 gkellogg: it may be simpler in the end to say that sealed terms are always sealed except for @context:null 15:41:08 gkellogg: but subtleties arise when two sealed contexts interact 15:41:15 azaroth: can we do that example? 15:41:24 q+ 15:42:20 ivan: the only place where @context:null would have a nuclear option would be in the context that is sealed 15:42:28 q? 15:43:09 [discussion of various examples] 15:43:24 gkellogg: [refers to examples] 15:43:43 workergnome: ditto 15:43:59 q? 15:44:18 pchampin: [example of two contexts conflicting] 15:44:50 q? 15:44:54 q+ 15:46:04 ack hsolbrig 15:46:32 workergnome: the confusion caused by accounting for the complex interactions outweighs the utility 15:46:57 hsolvig: what if we turned the pattern inside out and let contexts signify that they don't intend to override? 15:47:45 ... if you want to enforce that, you do it on a vocabulry-specific basis 15:47:53 ... with rules for that particular context 15:48:35 gkellogg: so if a context lacked that flag, it would be harder to reuse it 15:48:57 hsolvig: depends on how much you care about this relationship between the contexts 15:49:12 q? 15:49:14 ack ajs6f 15:52:09 q+ 15:54:00 q+ 15:54:15 [discussion of what is or is not in scope for the use case and interoperability concern] 15:55:34 ack ivan 15:55:40 gkellogg: not clear how to specify that 15:55:48 ivan: going back to workergnome's example 15:56:18 ivan: [discusses example] 15:56:57 azaroth: [discsses example] 15:57:29 gkellogg: @context: null has a specific mean 15:57:36 ...ing and we are altering t 15:57:57 q+ 15:58:06 q+ 15:58:08 ivan: if we go down the road of "sealing", then @context:null is going to conflict in some way and we will have to resolve it 15:58:47 hsolvig: that's why I went for an extension-based approach 15:59:08 ack gkellogg 15:59:55 gkellogg: we have until noon! 16:00:07 ack workergnome 16:00:09 hsolvig: can we get the use case in a more concrete form? 16:00:12 gkellogg_ has joined #json-ld 16:00:36 workergnome: I'm incerasingly fond of hsolvig's idea to put in an "extension" property that errors if something with it overrides a term 16:00:50 q+ to have scoped extension 16:00:55 ack pchampin 16:00:57 q+ 16:01:10 ... this allows me to write extensions that will work, but it may not be what VC need 16:02:03 pchampin: I have to think about that idea (hsolvig's idea). gkellogg convinced me to try to explain again how a context becomes ineffective. 16:02:37 ... I'm in favor of saying that whenver I traverse a term that is not part of a sealed context, it's not sealed anymore 16:02:59 ... after which a term could have been redefnined: no guarantees about the semantics! 16:03:39 ... as for @context:null-- maybe the "extension" idea is a better way to make extension points; it makes the unsealing specific 16:04:14 ... to make @context:null work one goes through both extension properties 16:04:43 gkellogg: let's for the moment let's put off the table any terms from a non-sealed context 16:04:55 ... the behavior I heard dlongley describe 16:05:06 ... is that history is wiped out and we start from scratch 16:05:29 ivan: I'm good so far 16:06:19 gkellogg: but if you do want to allow a mixture of sealed and unsealed terms, we get into the case that pchampin discussed 16:07:15 ... two ways to have an extension point: 1) an unsealed term, under which anythign goes, 2) a sealed term that is defined as an extension point 16:07:48 ... and 2) doesn't satisfy the use case 16:08:12 q+ 16:08:56 ivan: let's say I have a claim, and I put into the context a @context:null to make an extension point. 16:09:26 ... the danger is that I will redefine a term from VC, accidentally or maliciously 16:09:48 ... IIUC VC, it's a bit like Annotation 16:10:19 ... outsiders are expected to use their own vocabularies with these guys, without having to understand VC or Annotation 16:10:45 gkellogg: one case is that everything is wiped out, but the other is that you intermingle the use of properties 16:10:53 ivan: so I can add my own context 16:11:02 gkellogg: but not redefine terms 16:11:30 ... we would end up with semantics that differ between JSON and JSON-LD 16:11:39 https://www.w3.org/TR/activitystreams-core/#jsonld 16:12:30 dlehn: the way that Activity Streams does this is to say "You must not override or change contexts" as a normative piece 16:12:40 q+ 16:12:42 azaroth: people do this now by ordering the contexts 16:12:47 q- 16:13:07 ack azaroth 16:13:07 azaroth, you wanted to have scoped extension 16:13:24 azaroth: [returns to examples} 16:16:02 q? 16:16:07 scribenick: jeff_mixter 16:17:24 azaroth: you can say that a sealed context can have an extension 16:18:26 ... having sealed on the context is confusing and makes more sense at the term level 16:19:10 ivan: what is the difference between sealed and extension 16:19:51 q+ 16:20:17 ... if extension was not true then there would be a warning 16:20:33 scribenick:ajs6f 16:20:48 ivan: why not just say extension:true-- it's not setting a context? 16:20:51 q- 16:21:04 azaroth: to distinguish from the case of this term being an extension 16:21:39 gkellogg: two different keywords that act on the context are unclear 16:22:01 q+ 16:22:17 azaroth: the change is that the default condition is "sealed" 16:22:41 q? 16:22:46 i'm on another call and can't join, so i apologize... but was reading what's here and thought i'd throw this in here... if there is a fear that schema.org (or contexts like it) might get sealed ... we could allow `{"@context": [{"@contextref": "http://schema.org", "@sealed": false}, ...]}` and the reason that would be ok for the sealed case we care about in VC community and so on, is because JSON processors would reject that ... the context MUST be 16:22:46 specified as a simple string, that's what JSON-only processors would be looking for: `{"@context": ["https://w3id.org/credentials/v1", ...]}` 16:22:57 q+ 16:22:58 ack workergnome 16:23:35 workergnome: I thought we were talking about three use cases, one of which is ability to delete context, which is @context:null 16:24:08 ... are we trying to prevent people from overriding accidetnally or maliciously? 16:24:22 gkellogg: we can't prevent malice 16:24:37 ivan: it's a clean slate... but not 16:24:45 q? 16:24:53 hsolvig: @context:null is often too much 16:25:05 gkellogg and ivan: [thrash more examples] 16:26:30 azaroth: we fundamentally don't want the semantics to slip between JSON and JSON-lD 16:26:39 q+ 16:26:40 azaroth: [more examples] 16:28:36 q? 16:29:01 azaroth:gkellogg: "extension" unseals everything, which is not @context:null 16:29:43 q? 16:31:01 [discusion of @context:null and whether it is a problem for the original use case] 16:32:10 gkellogg: if there's anothe context with sealed terms and extension points 16:33:06 azaroth: regardless of which context has the sealing, extension overrides it. 16:33:12 q- 16:33:13 gkellogg: that's the simplest way 16:33:16 ack bigbluehat 16:33:21 q- 16:33:32 https://github.com/w3c/json-ld-syntax/issues/20#issuecomment-442896360 16:33:47 bigbluehat: dlongley and I discuss term ordering and inheritence 16:34:06 ... there is a problematic example there 16:34:37 ... [discusses vocabulary] 16:34:41 https://github.com/w3c/json-ld-syntax/issues/20#issuecomment-454485321 16:34:59 ... this example shows how to avoid that by being verbose 16:36:04 ... [discusses problems that concern @type usage and inheritance] 16:36:19 q? 16:36:21 ack workergnome 16:36:48 workergnome: if I have two sealed contexts that define the same term, who wins? 16:36:53 gkellogg: last one in 16:38:30 else, they wouldn't really have one 16:38:37 s/else, they wouldn't really have one// 16:58:55 rrsagent, draft minutes 16:58:55 I have made the request to generate https://www.w3.org/2019/02/07-json-ld-minutes.html ivan 16:59:06 About to restart 17:01:58 scribenick: workergnome 17:02:35 azaroth: Reviewing the rules that we think we're talking about. 17:03:13 jeff_mixter has joined #json-ld 17:03:19 present+ 17:03:41 ajs6f: the use case is to avoid semantic slippage around terms when interpreted as JSON. 17:04:38 azaroth: If @extension:true is encountered in scoped context definition, then attempts to redefine terms from the active context will succeed. 17:04:51 hsolbrig has joined #json-ld 17:05:12 ivan: If this is the rule, in the embedded context, I can also change the ID of that term? 17:05:18 azaroth: yes. You can redefine anything. 17:05:50 ivan: so if i extension : {}, the extension of the original key remains. 17:06:09 gkellogg: the effect of extensions: true is to update the active context and remove the sealed status of all terms within that context 17:06:24 ... allowing those terms to be renamed within the value of the extension property 17:06:36 ivan: so inside, something may be different than outside? 17:06:41 q+ 17:06:55 gkellogg: yes. It only makes sense within a scoped context, and only makes sense on a sealed term. 17:07:14 q+ to ask if we can apply this to dlongley's example here http://tinyurl.com/ycrgkeyy 17:07:24 ... if you extend an unsealed property... 17:07:56 gkellogg: within an extension property, we can only define additional properties within that context. 17:08:59 azaroth: this is an error: 17:09:00 [ {"extension": { @id: extension_property, @sealed:true, @context: {@extension:true}} } }, { "extension": {@id: extension_propery} ] 17:09:28 q? 17:09:29 azeroth: extending unsealed terms is dumb, but not an error. 17:09:30 ack pchampin 17:10:17 pchampin: I'm fine with this...in practice, this would mean that the plain JSON interpretation can only trust terms from the sealed context in the subtrees I defined. 17:10:39 ... because when there is a term from another context, theydon't know anything about that term. 17:11:31 ... if we're happy with this, we're happy, but it seems like a lot of work to get to the same point. 17:11:36 gkellogg: I don't think we're at the same point. 17:11:50 ... it's only when we transition to a property when it's exentsion: true that we transition 17:12:17 pchampin: the assumption that JSON-only is the same--it's only trustworthy when looking at sealed terms. 17:12:23 gkellogg: that's consistent with the spec. 17:12:31 pchampin: right. that's why I'm OK with this. 17:12:52 azaroth: the thing we're not able to deal with is nulling out terms and then redermining them. So it works. 17:13:09 ... so for VC, the context for the claim can start with null, which wipes out their context. 17:13:26 ... so I don't think that VC will use extension: true. 17:13:34 gkellogg: do we have a use case for this? 17:14:58 ivan: I thought that they want to avoid that anyone includes in the claim things that redefine things within verifiable claims 17:15:09 gkellogg: I think that applies to the envelope 17:15:37 ... within the envelope, naive applications may not need to understand them. 17:15:44 ... for example, annotation properties 17:15:50 ... they come from another context 17:16:20 ... so if you introduce another term in the envelope, those envelope extenions won't override the VC 17:16:29 azaroth: don't mess with our stuff 17:17:29 ... vs:issuer should not be overrided, but if an extension defines ex:date, that's fine. but the extension should not be able to override vs:issuer. 17:18:28 gkellogg: ...explaining his example... 17:19:00 ... since we have both a sealed context and schema, name remains it's context. within the extension, something could set the scoped context to null. 17:19:07 ... it could add a new context, and it could be anything. 17:19:17 ... thus, VC does not need extension 17:19:23 ivan: why are we doing this? 17:19:52 ... if this can be met with sealed and nullification, what is the use case for extension? 17:20:27 ... this is the simplest thing that can work. That's what we should do. 17:20:41 ... do we need extension at any point? 17:20:50 gkellogg: I agree. 17:21:06 q? 17:21:08 ajs6f: so there's no need for nullification 17:21:19 ...(i mean extension) 17:21:48 gkellogg: what we determined is that we're not going to restrict context: null. In that case, we don't need the exceptions. 17:21:54 ... you can always do context: null 17:21:59 ... thus, you can do it in a scoped context 17:22:02 ack bigbluehat 17:22:02 bigbluehat, you wanted to ask if we can apply this to dlongley's example here http://tinyurl.com/ycrgkeyy 17:22:05 ... meeting VC's use case 17:22:55 bigbluehat: this VC is something that we haven't discussed 17:23:04 ... We don't have anything that addresses it . 17:23:15 ... since it's type term usage, not property-term usage 17:23:22 ... can we describe it as a use-case? 17:23:35 ... term inheritance works...they don't need sealing... 17:23:47 ... but the scoped context around @type breaks things 17:24:04 ... see the comment further down about getting around this by being verbose, but...this is how those things are extended. 17:24:18 ... using a base type, and adding additional types...so type ordering matters. 17:24:30 ... endorsed by handwaving, but would like a better mechanism 17:24:35 ... but this is where things are breaking 17:25:05 example description is here https://github.com/w3c/json-ld-syntax/issues/20#issuecomment-442896360 17:25:19 gkellogg: this example: we would process the scoped context for specificCredential...issue is defined in an example. 17:25:24 verbosity "solution" is here https://github.com/w3c/json-ld-syntax/issues/20#issuecomment-454485321 17:25:30 ... this is dlongley's example, not mone 17:26:04 ... he was saying that the context ordering gets nullified by scope contexts and type...core vocabulary at the end doesn't work, since types can override that. 17:26:14 csarven has joined #json-ld 17:26:25 gkellogg: scoped context would not override this if issuer is a sealed term 17:26:50 bigbluehat: we have two inheritance orders: CSS and FIFO 17:27:12 ... so we would flip them, so if sealing isn't done properly, then we have problems 17:27:39 ... don't know if there's a solution here...other than a core vocabulary that comes first 17:27:57 azaroth: this seems to me to be application-logic-layer 17:28:11 ... so VC would have a sealed context... 17:28:32 {"@context": {"@sealed": "http://vc-data.example/", "@extensions": ["http://extension-1.exampe/", "http://other.example/extension"]}} 17:29:05 azaroth: ...typing on the whiteboard... 17:30:27 gkellogg: so there's a new extension keyword that imports without redefining? 17:31:00 bigbluehat: this is something totally different 17:31:10 azaroth: this just inverts where the properties live 17:31:22 bigbluehat: this means that the core is at the top, and the extensions below 17:31:38 azaroth: with would work with term definitions 17:31:49 bigbluehat: currently, you put the core last. 17:32:01 ... now you need to move it to the top, or potentially to both places 17:32:18 gkellogg: this means that the thing at the front and seal it, then it can't be changed 17:33:08 azaroth: to me, sealing is the inversion of the property rules. 17:33:53 csarven has left #json-ld 17:33:54 bigbluehat: this means that the scope documents now need to be explicitly 1.1 17:34:44 azaroth: if you're using 1.1, but interpreting as 1.0, it will be strange. 17:34:51 gkellogg: I think we can only talk about what 1.1 will do 17:35:05 ... the reason that 1.1 is needed, so that if a 1.0 processor sees it, it will die 17:35:36 bigbluehat: so in 1.1 we're inverting the order? 17:35:44 gkellogg: I don't see it as inverting, I see it as a new effect. 17:35:57 bigbluehat: this sounds like !important in CSS 17:36:25 gkellogg: it continues to work 17:36:36 bigbluehat: even if someone else seals it first? 17:36:46 gkellogg: I think we need to table multiple contexts that seal 17:36:54 ... I don't think it's what we're promoting 17:37:02 ... as a best practice, there should be only one 17:37:18 ... as a corner case, we should... 17:37:31 ivan: the usage of sealed in the grand context will be minimal 17:37:54 ... if it's awkward, then that's OK, because this is rarely used. 17:38:07 ajs6f: we don't know this will be rare 17:38:22 ivan: our schema discussion showed us that we should not use sealed regularly. 17:38:42 q? 17:38:44 q+ 17:38:57 ... common, vague vocabularies should not used sealed. 17:39:07 ... there are good use cases, but let's be careful. 17:39:08 ack gkellogg 17:40:41 IMO, sealed should only be used by contexts defined in specifications where there is a dual JSON/JSON-LD processong mode, and then only rairly 17:41:00 azaroth: the other thing that's important to put down is sealed is not a guarantee that it can't be changed, but to prevent unintentional. 17:41:19 ... you can always put in a version 1.0... 17:41:24 gkellogg: you can't go back 17:41:44 ivan: the context: null option is there, so we can not defend against all malicious use 17:42:17 azaroth: so we don't need extension: true, because there's no use case and we can cover it by nulling and re-i porting? 17:42:29 ... so are we back to the simple rule? 17:42:38 ... If @sealed: true is encountered on a term definition, then attempts to redefine the term will fail and result in a warning. 17:42:59 gkellogg: with a note about using context:null 17:43:15 ajs6f: so there's no way that a term picks up an unintentional null 17:43:27 s/unintentional/meaning 17:43:38 s/meaning/unintentional 17:43:42 s/null/meaning 17:43:55 q? 17:43:57 q+ 17:44:44 hsolbrig: can I put a @sealed on the external context? 17:44:48 gkellogg: you can't do that 17:44:59 ivan: you can't seal someone else's context 17:46:26 hsolbrig: I would still like to be able to make sure that I don't unintentionally reuse terms 17:46:47 gkellogg: can this be solved with SHEX? 17:46:54 ack pchampin 17:46:55 hsolbrig: maybe... 17:47:19 pchampin: what happened to redefining a term within a sealed context? 17:47:26 gkellogg: we said that's not possible. 17:48:02 ... the only way to do this is to null the context 17:48:49 pchampin: so context:null could happen anywhere? 17:48:52 azaroth: correct 17:49:15 pchampin: so sealing prevents explicit redefining the sealed terms, but not guaranteeing their stability. 17:49:19 gkellogg: correct 17:49:53 azaroth: context: null is the way out of things, and you'd only do that in the VC case if you were trying to be malicious, and we've decided we can't guard against that. 17:50:04 ... the intent is to avoid unintentional redefining. 17:50:12 ... to fix that, you need a preprocessor. 17:50:25 ajs6f: is sealing now to strong a name? 17:51:08 gkellogg: it is sealed in the active context. 17:52:46 ivan: let's make a resolution, and go to lunch 17:53:49 I disagree; freezing (and sealing, for that matter) in JS is a quite different thing 17:54:00 PROPOSAL: Adopt the following rules for sealing - 1: If @sealed: true is encountered on a term definition in the active context, then attempts to redefine the term will fail and result in a warning. 2 - If @sealed: true is encountered on a context, then all terms defined within the context should be treated as having @sealed:true in their definition. 3- If @sealed: false is encountered on a term definition in the active context, where the con 17:54:00 text has been sealed with @sealed:true, then the sealing for that term is removed. 17:54:05 hsolbrig: if there's a sealed: false for an unsealed term, what happens? 17:54:09 +1 17:54:10 +1 17:54:13 gkellogg: nothing--that doesn't mean anything 17:54:21 ajs6f: should we warn? 17:54:23 +1 17:54:24 +1 17:54:25 +1 17:54:28 +1 17:54:29 +1 17:54:31 +0.5 17:54:33 gkellogg: we SHOULD 17:54:48 +1 17:54:50 +0 (would like to see use case mappings for all these things) 17:55:23 +1 17:55:34 RESOLUTION: Adopt the following rules for sealing - 1: If @sealed: true is encountered on a term definition in the active context, then attempts to redefine the term will fail and result in a warning. 2 - If @sealed: true is encountered on a context, then all terms defined within the context should be treated as having @sealed:true in their definition. 3- If @sealed: false is encountered on a term definition in the active context, where the c 17:55:34 ontext has been sealed with @sealed:true, then the sealing for that term is removed. 17:55:59 Resolved: Adopt the following rules for sealing - 1: If @sealed: true is encountered on a term definition in the active context, then attempts to redefine the term will fail and result in a warning. 2 - If @sealed: true is encountered on a context, then all terms defined within the context should be treated as having @sealed:true in their definition. 3- If @sealed: false is encountered on a term definition in the active context, where the context has been sealed 17:55:59 with @sealed:true, then the sealing for that term is removed. 17:56:26 RRSAgent, draft minutes 17:56:26 I have made the request to generate https://www.w3.org/2019/02/07-json-ld-minutes.html ivan 18:09:00 `If @sealed: false is encountered on a term definition in the active context, where the context has been sealed with @sealed: true, then the sealing for that term is removed.` <-- this sounds like a big problem as written ... 18:09:22 is this saying that with `{"@context": [1, 2]}` that `2` can unseal anything it wants? 18:09:37 if so, that defeats the purpose of sealing ... so i can only imagine that something else was meant by that text. 18:10:30 it sounds like an attacker that defines `2` can get a VC to be successfully processed by a JSON-only processor in a different way from a JSON-LD processor under that condition 18:10:46 i'll check back here later to see if there's a clarification 18:12:38 if the ability to unseal a sealed context is a requirement (as opposed to just extending in an acceptable way) ... it seems like we could do it without messing up JSON-only processors by using some other syntax that they would otherwise reject. 18:13:49 JSON-only processors will be looking for `{"@context": [, , ...ignored]}` 18:15:23 or could perhaps be further limited to: `{"@context": [, , ...]}` 18:16:58 in other words, any deviation from some very rigid rules would cause a JSON-only processor to reject the input ... which could be potentially used to our advantage if we need to cover other use cases where we are fearful of people sealing things that JSON-LD aware entities would like to unseal in a way that would not impact JSON-only processors. 18:17:36 but what is key is that that *any mechanism that is used to unseal would not impact JSON-only processors*. 18:17:52 if we can abide by that rule, i don't see why i wouldn't be supportive. 18:55:49 @dlongley: The @sealed: false would only work for the original definition, no subsequent attempt to redefine it 18:56:02 It overrides the @sealed:true on the context 18:56:47 ajs6f has joined #json-ld 18:56:47 But not @sealed:true on a term 18:56:49 hsolbrig has joined #json-ld 18:59:07 azaroth: ok, if i understand you i think that's fine 19:00:18 scribenick: dlehn 19:00:36 gkellogg has joined #json-ld 19:00:38 workergnome has joined #json-ld 19:00:40 ivan has joined #json-ld 19:00:43 present+ 19:00:48 jeff_mixter has joined #json-ld 19:00:52 present+ 19:01:24 zakim, who's here? 19:01:24 Present: ivan, simonstey, hsolbrig, Gregg_Kellogg, Benjamin_Young, Rob_Sanderson, jeff_mixter, workergnome, dlehn, ajs6f, ! 19:01:27 On IRC I see jeff_mixter, ivan, workergnome, gkellogg, hsolbrig, ajs6f, azaroth, RRSAgent, Zakim, simonstey, ChristopherA, bigbluehat, fr33domlover, dlehn, dlongley 19:03:01 ajs6f has joined #json-ld 19:03:08 rrsagent, draft minutes 19:03:08 I have made the request to generate https://www.w3.org/2019/02/07-json-ld-minutes.html ivan 19:03:11 https://github.com/w3c/json-ld-syntax/issues/87 19:03:47 Subtopic: closing issues 19:04:13 azaroth_ has joined #json-ld 19:04:26 PROPOSAL: Close #87, as unnecessary given above rules. 19:04:28 +1 19:04:32 +1 19:04:34 +1 19:04:35 +1 19:04:35 +1 19:04:40 +1 19:04:48 +1 19:04:55 Resolved: Close #87, as unnecessary given above rules. 19:05:11 https://github.com/w3c/json-ld-syntax/issues/98 19:05:44 Proposal: close #98, as unnecessary given the rules above 19:05:48 +1 19:05:54 +1 19:06:00 PROPOSAL: Close #98, as @context: null clears context definitions 19:06:05 +1 19:06:08 +1 19:06:12 +1 19:06:19 +1 19:06:30 RESOLVED: Close #98, as @context: null clears context definitions 19:06:39 Resolved: Close #98, as @context: null clears context definitions 19:11:07 https://github.com/w3c/json-ld-syntax/issues/116 19:18:11 present+ dlongley 19:21:38 [discussion of https://github.com/w3c/json-ld-syntax/issues/116#issuecomment-460681505] 19:39:15 [missed scribing much back and forth, trying to catch up on the gist] 19:39:59 q? 19:40:30 gkellogg: [pointing out current algorithm could be modified based on some rules to handle the partial redefinition] 19:40:53 ivan: [concerns about backwards compatibility] 19:42:26 gkellogg: based on algorithm, 1.0 would fall through to new 1.1 behavior 19:43:47 present+ Dave_Longley 19:44:07 ivan: sounds like adding more hacks 19:44:24 dlongley: also want it to be easier for json authors 19:44:47 gkellogg: we go towards side of being easier for authors 19:45:21 workergnome: hard to follow what is going on without knowing all the procesing steps 19:46:32 gkellogg: not overriding term itself [...?] 19:47:40 azaroth_: more authors to explain to than people needing to understand this feature. on side of authors. 19:48:16 workergnome: issue with how things are overridden. seeing next term definition would think it fully overrode first one. 19:50:37 ivan: [worries about more complications] 19:50:58 workergnome: example seems like json in json-ld 19:51:25 it's a mix in this case, using json tools to process json-ld. would want to know the context of the data. 19:53:47 azaroth_: [discussing how some examples would be processed] 19:55:10 ivan: adding new features to already complex system. really worried about it. 19:55:59 dlongley: understand ivan. a goal is to make ergonomics of 1.1 easier for users and better than 1.0 20:00:48 PROPOSAL: if @id is not present in a term definition, and there is no default vocabulary, but has an expansion to an absolute IRI in the active context, then the @id of the new definition is taken from the active context (otherwise this is still an error) 20:01:05 +1 20:01:11 +1 20:01:13 +1 20:01:17 +1 20:01:19 +1 20:01:23 +1 20:01:40 +1 20:01:47 +0.5 20:01:59 +1 20:02:01 RESOLVED: if @id is not present in a term definition, and there is no default vocabulary, but has an expansion to an absolute IRI in the active context, then the @id of the new definition is taken from the active context (otherwise this is still an error) 20:02:04 +1 20:02:11 PROPOSAL: Once previous is done, we can close #98 20:02:16 +1 20:02:17 +1 20:02:18 +1 20:02:35 PROPOSAL: Once previous is done, we can close #116 20:02:37 +1 20:02:39 +1 20:02:40 +1 20:02:40 +1 20:02:42 +1 20:02:43 +1 20:02:56 +1 20:02:58 Really 116 :) 20:03:02 +1 20:03:07 RESOLVED: Once previous is done, we can close #116 20:05:58 PROPOSAL: We agree with the processing order per #61: scoped definition from property, then from type, then embedded. PR to update docs to come. 20:06:02 +1 20:06:02 +1 20:06:05 +1 20:06:11 +1 20:06:18 +1 20:06:30 +1 20:06:37 +1 20:06:46 +1 20:06:49 +1 20:06:50 RESOLVED: We agree with the processing order per #61: scoped definition from property, then from type, then embedded. PR to update docs to come. 20:24:59 q? 20:26:36 scribnic hsolbrig 20:26:56 scribenick: hsolbrig 20:27:02 https://github.com/w3c/json-ld-api/issues/14 20:27:03 Topic: circular context references 20:28:38 gkellogg: what if you said context null? 20:28:52 azaroth: it would wipe out all definitions 20:29:21 gkellogg: you could also seal activities 20:29:44 azaroth: but object could be also be the top level node 20:30:18 gkellogg: the reason we keep a list of imported context is to prevent ourselves from running away but someone figured out an attack... 20:30:42 ... that created contexts that imported themselves, so we established a max depth. 20:31:13 dlehn: error in the spec or error in an implementation? 20:32:07 azaroth: the verifiable claim that talks about a verifiable claim has the circular issue as well. 20:33:34 gkellogg: issue is a document that includes a document that is an array that includes itself. 20:35:15 ivan: if you put an array of context that is activity context, activity. What is left in the end is only things that overlap, so in this case the 20:35:21 ... activity context rules. 20:35:57 gkellogg: propose that instead of seeing that something is included in the array, check a max size. Essentially elimate 3.2.2 20:36:42 gkellogg: limit mandated or set by application. 20:37:57 ivan: example in issue isn't recursion ... 20:38:58 gkellogg: If we keep the inclusion array, but once we've stopped we get rid of it .. but it doesn't solve the attack problem. If we add in ... 20:39:39 ... a limit on the stack size 20:42:11 gkellogg: Move away from how the issue is handled and specify behavior instead. 20:43:25 gkellogg: we should have tests for both situations 20:43:33 PROPOSAL: Update the algorithm to describe desired behavior of disallowing unbounded loading of contexts, still allow ping-ponging between two contexts in the document (or scoped contexts). 20:44:08 +1 20:44:12 +1 20:44:13 +1 20:44:21 +1 20:45:11 +1 20:45:23 +1 20:45:29 +1 20:45:49 RESOLVED: Update the algorithm to describe desired behavior of disallowing unbounded loading of contexts, still allow ping-ponging between two contexts in the document (or scoped contexts). 20:45:59 +1 20:48:19 Topic: JSON Literal 20:49:10 https://github.com/w3c/json-ld-syntax/issues/4 20:49:51 ivan: to do this, we will have to define an RDF data type for JSON 20:50:19 ivan: look at RDF concepts document - 3 or 4 lines 20:50:40 gkellogg: what we need to do that those didn't is to deal with white space... 20:50:43 https://www.w3.org/TR/rdf11-concepts/#section-html 20:51:04 ivan: the only thing we have to do is to say there is a string, declared to be JSON 20:51:36 ivan: it makes cannonicalization difficult so we'd have to find or referenc it 20:52:24 ... the fact that there are html data types that makes cannonicalization difficult or impossible 20:52:44 q+ 20:53:00 ... so if you want to do cannonicalization, html is the big kahuna, and json is secondary 20:53:11 ack gkellogg 20:53:19 ... you may want to answer question about json equality, but is that our responsibility. 20:53:22 q+ to explain GeoJSON use case 20:54:01 gkellogg: when you parse html or xml, value elements preserve white space. As a result, indentation variations give different literals. 20:54:44 ... in json, parsing is done after parser is completed and parsers don't preserve white space. Serializers can be told no unnecessary white space 20:55:18 ... which avoids html and xml problem and allows us to be relatively immune. Ordering may be different but ... 20:56:15 ... parsers aren't required to be order preserving, so literals from 2 parsers might not compare. We could state that they appear 20:56:28 ... equivalent as objects in testing infrastructure. 20:56:52 ... so we just need to state that values aren't stored without extra white space. 20:57:13 ivan: not sure that specification should require that when not a question of testing. 20:57:33 ivan: question is whether it is up to us to define when two pieces of JSON are equal 20:58:25 ivan: we can be very pragmatic and say that someone else has to take care of this. 21:00:09 gkellogg: I think we need to say something about this. We need to say something about how that serialization is performed. 21:00:45 ... we need to say how you create that string from the objects. 21:01:12 q? 21:01:14 ack azaroth 21:01:14 azaroth, you wanted to explain GeoJSON use case 21:02:02 ajs6f: consider the case of GeoJSON ... 21:02:36 dlehn: is there another solution than complete serialization? 21:04:58 azaroth: Use case p168 property has range rdf literal with all sorts of possible values, but you can't add a json literal because there is no id. 21:05:55 ... if we want to make it easy for authors to do the right thing, then json as (readable) json is what is needed. 21:11:38 http://build.fhir.org/medicationexample0301.json.html 21:12:10 http://build.fhir.org/medicationexample0301.ttl.html 21:13:59 azaroth: spec above is completely silent about html cannonicalization 21:14:22 ... we aren't adding a new problem, but just another type that doesn't define cannonicalization 21:15:26 azaroth: can we punt on it and say will be cannonicalized when there is a cannonicalizatin spec for json? 21:15:56 q? 21:16:34 q+ to echo all his IRC angst ;) 21:17:19 ivan: in publishing we put out jsonld not for any reason except it has been accepted by schema.org 21:17:42 ... any author who cares about being found by schema.org will put it in jsonld vs. json literal 21:18:14 workergnome: this will allow people to progressively add semantics vs. having to do everything up front 21:18:19 ack bigbluehat 21:18:19 bigbluehat, you wanted to echo all his IRC angst ;) 21:18:48 workergnome has joined #json-ld 21:19:21 bigbluehat: echo echo... doing this without cannonicalization is painfully naive and dangerous. If isn't consistent between python and js... 21:19:31 ... we're just asking for a world of pain. 21:20:52 azaroth: question is the extent to which ... (if we don't do complete cannonicalization...) ... are we doing a better or worse job than nothing? 21:21:32 gkellogg: coming around to saying it is undefined until spec exists. 21:22:45 gkellogg: signature specs will need to call out some cannonicalization spec or define one that should be used by jsonld processors ... 21:23:06 ... suggest that cannonicalization of jsonld literals is not supported, so can't sign graphs that contain it... 21:23:34 dlehn: is there a way to know which ones aren't supported? 21:24:03 ivan: no because anyone can define a datatype in an RDF graph. 21:25:36 workergnome: unless codepaths do unicode cannonicalization, we've still got issues... 21:27:13 ivan: are there good reasons to do this in jsonld? 21:27:34 azaroth: would we rather have json literals without cannonicalization or not have json literals at all? 21:28:00 ivan: do we want to have json literals or not? 21:28:24 dlehn: I'm worried about people misusing it but... 21:28:52 gkellogg: if there WAS a standard for it, we'd say it must be in that form ... 21:30:43 azaroth: there are many terrible things people can do today. I'm highly reluctant to use "it could be misused" as a good reason to not do something. 21:31:41 workergnome: when we talk about misuse, do we mean security or misuse of RDF in the world (decreasing the amount of semantics in the universe) 21:31:54 workergnome_ has joined #json-ld 21:34:19 ivan: From a W3C perspective... what we could do is put this into the document w/ a note that says it could be done but we want to have... 21:34:51 ... feedback from the community that we are not sure that it is a good idea and seek input. 21:36:30 gkellogg: we did something like this in spec w/ bnode identifiers and document base url ... 21:38:06 jeff_mixter: reason that WikiData chose JSON rather than JSONLD ... they may have opinions about injecting into ... document. 21:39:18 workergnome has joined #json-ld 21:42:26 PROPOSAL: Add JSON data type to RDF, with support in JSON-LD processors for managing parsed JSON in the internal form. We will seek feedback via blogpost, and in Berlin. 21:42:35 +1 21:42:37 +1 21:42:37 +1 21:42:40 +1 21:42:42 +1 21:42:59 +0.9 21:43:11 +1 21:43:17 RESOLVED: Add JSON data type to RDF, with support in JSON-LD processors for managing parsed JSON in the internal form. We will seek feedback via blogpost, and in Berlin. 21:43:37 rrsagent, draft minutes 21:43:37 I have made the request to generate https://www.w3.org/2019/02/07-json-ld-minutes.html ivan 21:44:18 Topic: Agenda review for tomorrow 21:59:01 scribenick: jeff_mixter 21:59:16 Topic: Issue #33 21:59:41 azaroth: how to shorten the compaction path 22:00:06 (API Issue) 22:00:24 ... this has gone away from our use cases because we said that everything needs a type 22:01:01 gkellogg: this might be useful for compaction and to help keep a consistance to the data - the @none 22:01:26 azaroth: would be useful for indexing in ES or Solr 22:01:41 azaroth: so let us undefer it and talk about it tomorrow 22:01:59 rrsagent, draft minutes 22:01:59 I have made the request to generate https://www.w3.org/2019/02/07-json-ld-minutes.html ivan 22:02:00 zakim, bye 22:02:00 rrsagent, bye 22:02:00 I see no action items 22:02:00 leaving. As of this point the attendees have been ivan, simonstey, hsolbrig, Gregg_Kellogg, Benjamin_Young, Rob_Sanderson, workdergnome, jeff_mixter, workergnome, dlehn, ajs6f, !, 22:02:00 Zakim has left #json-ld 22:02:03 ... dlongley, Dave_Longley