WEBVTT Kind: captions Language: en 00:00:00.599 --> 00:00:02.429 align:start position:0% so 00:00:02.429 --> 00:00:02.439 align:start position:0% so 00:00:02.439 --> 00:00:08.190 align:start position:0% so um<00:00:03.839> oscal<00:00:05.000> the<00:00:06.240> um<00:00:07.240> authoritative 00:00:08.190 --> 00:00:08.200 align:start position:0% um oscal the um authoritative 00:00:08.200 --> 00:00:10.749 align:start position:0% um oscal the um authoritative representation<00:00:09.200> of<00:00:09.360> the<00:00:09.559> oscal<00:00:10.120> standard<00:00:10.639> is 00:00:10.749 --> 00:00:10.759 align:start position:0% representation of the oscal standard is 00:00:10.759 --> 00:00:13.030 align:start position:0% representation of the oscal standard is in<00:00:10.920> a<00:00:11.080> language<00:00:11.480> called<00:00:11.920> metaschema<00:00:12.480> which 00:00:13.030 --> 00:00:13.040 align:start position:0% in a language called metaschema which 00:00:13.040 --> 00:00:15.030 align:start position:0% in a language called metaschema which you<00:00:13.599> probably<00:00:13.920> all<00:00:14.080> heard<00:00:14.280> of<00:00:14.400> it's<00:00:14.519> an<00:00:14.639> XML 00:00:15.030 --> 00:00:15.040 align:start position:0% you probably all heard of it's an XML 00:00:15.040 --> 00:00:18.109 align:start position:0% you probably all heard of it's an XML based<00:00:15.440> language<00:00:16.440> um<00:00:16.920> the<00:00:17.320> data<00:00:17.720> types<00:00:17.960> in 00:00:18.109 --> 00:00:18.119 align:start position:0% based language um the data types in 00:00:18.119 --> 00:00:20.230 align:start position:0% based language um the data types in oscal<00:00:18.640> are<00:00:18.840> actually<00:00:19.160> defined<00:00:19.560> in 00:00:20.230 --> 00:00:20.240 align:start position:0% oscal are actually defined in 00:00:20.240 --> 00:00:22.750 align:start position:0% oscal are actually defined in metema<00:00:21.240> as<00:00:21.359> you<00:00:21.480> can<00:00:21.640> see<00:00:22.119> there's<00:00:22.320> a<00:00:22.480> long 00:00:22.750 --> 00:00:22.760 align:start position:0% metema as you can see there's a long 00:00:22.760 --> 00:00:25.910 align:start position:0% metema as you can see there's a long list<00:00:22.960> of<00:00:23.119> them<00:00:23.800> uh<00:00:24.000> they<00:00:24.160> are<00:00:24.560> essentially 00:00:25.910 --> 00:00:25.920 align:start position:0% list of them uh they are essentially 00:00:25.920 --> 00:00:30.630 align:start position:0% list of them uh they are essentially strings<00:00:26.920> um<00:00:27.800> with<00:00:28.480> um<00:00:29.359> uh 00:00:30.630 --> 00:00:30.640 align:start position:0% strings um with um uh 00:00:30.640 --> 00:00:34.150 align:start position:0% strings um with um uh regular<00:00:31.119> expression<00:00:32.000> code<00:00:33.000> um<00:00:33.320> to<00:00:33.640> to<00:00:33.879> ensure 00:00:34.150 --> 00:00:34.160 align:start position:0% regular expression code um to to ensure 00:00:34.160 --> 00:00:35.790 align:start position:0% regular expression code um to to ensure that<00:00:34.320> they<00:00:34.480> fit<00:00:34.680> in<00:00:34.800> a<00:00:34.960> format<00:00:35.399> because<00:00:35.600> it's 00:00:35.790 --> 00:00:35.800 align:start position:0% that they fit in a format because it's 00:00:35.800 --> 00:00:39.430 align:start position:0% that they fit in a format because it's you<00:00:35.920> know<00:00:36.160> in<00:00:36.320> Json<00:00:36.800> XML<00:00:37.800> and<00:00:38.440> um<00:00:38.600> yaml<00:00:39.280> you're 00:00:39.430 --> 00:00:39.440 align:start position:0% you know in Json XML and um yaml you're 00:00:39.440 --> 00:00:43.229 align:start position:0% you know in Json XML and um yaml you're dealing<00:00:39.800> a<00:00:39.879> lot<00:00:40.079> with<00:00:40.239> strings<00:00:41.120> so<00:00:41.719> um<00:00:42.600> uh 00:00:43.229 --> 00:00:43.239 align:start position:0% dealing a lot with strings so um uh 00:00:43.239 --> 00:00:45.310 align:start position:0% dealing a lot with strings so um uh that's<00:00:43.480> why<00:00:43.680> they're<00:00:43.879> they're<00:00:44.039> all<00:00:44.320> strings 00:00:45.310 --> 00:00:45.320 align:start position:0% that's why they're they're all strings 00:00:45.320 --> 00:00:47.350 align:start position:0% that's why they're they're all strings um<00:00:45.640> the<00:00:45.960> function<00:00:46.360> of<00:00:46.480> the<00:00:46.640> data<00:00:47.000> types 00:00:47.350 --> 00:00:47.360 align:start position:0% um the function of the data types 00:00:47.360 --> 00:00:49.310 align:start position:0% um the function of the data types library<00:00:47.879> is<00:00:48.000> to<00:00:48.199> take<00:00:48.440> those 00:00:49.310 --> 00:00:49.320 align:start position:0% library is to take those 00:00:49.320 --> 00:00:52.590 align:start position:0% library is to take those strings<00:00:50.320> ensure<00:00:50.960> that<00:00:51.199> they<00:00:51.600> conform<00:00:52.039> to<00:00:52.199> the 00:00:52.590 --> 00:00:52.600 align:start position:0% strings ensure that they conform to the 00:00:52.600 --> 00:00:55.270 align:start position:0% strings ensure that they conform to the specification<00:00:53.600> and<00:00:53.879> if<00:00:54.160> necessary<00:00:54.719> translate 00:00:55.270 --> 00:00:55.280 align:start position:0% specification and if necessary translate 00:00:55.280 --> 00:00:58.069 align:start position:0% specification and if necessary translate them<00:00:55.600> into<00:00:56.079> whatever<00:00:56.800> python<00:00:57.199> would<00:00:57.440> use<00:00:57.879> so 00:00:58.069 --> 00:00:58.079 align:start position:0% them into whatever python would use so 00:00:58.079 --> 00:01:01.069 align:start position:0% them into whatever python would use so for<00:00:58.239> example<00:00:58.559> an<00:00:58.760> oscal<00:00:59.280> buou 00:01:01.069 --> 00:01:01.079 align:start position:0% for example an oscal buou 00:01:01.079 --> 00:01:02.750 align:start position:0% for example an oscal buou can<00:01:01.280> be<00:01:01.519> the<00:01:01.680> word 00:01:02.750 --> 00:01:02.760 align:start position:0% can be the word 00:01:02.760 --> 00:01:08.149 align:start position:0% can be the word true<00:01:03.760> but<00:01:04.680> um<00:01:05.199> not<00:01:05.439> in<00:01:05.640> oscal<00:01:06.200> it'll<00:01:06.680> be<00:01:07.680> true 00:01:08.149 --> 00:01:08.159 align:start position:0% true but um not in oscal it'll be true 00:01:08.159 --> 00:01:10.910 align:start position:0% true but um not in oscal it'll be true like<00:01:08.280> Boolean<00:01:08.680> true<00:01:08.920> but<00:01:09.000> not<00:01:09.119> a<00:01:09.240> string<00:01:09.920> right 00:01:10.910 --> 00:01:10.920 align:start position:0% like Boolean true but not a string right 00:01:10.920 --> 00:01:14.510 align:start position:0% like Boolean true but not a string right um<00:01:11.280> and<00:01:11.520> and<00:01:11.640> so<00:01:11.880> forth<00:01:12.600> uh<00:01:13.280> so<00:01:14.200> that's 00:01:14.510 --> 00:01:14.520 align:start position:0% um and and so forth uh so that's 00:01:14.520 --> 00:01:16.350 align:start position:0% um and and so forth uh so that's something<00:01:15.040> that 00:01:16.350 --> 00:01:16.360 align:start position:0% something that 00:01:16.360 --> 00:01:18.990 align:start position:0% something that um<00:01:17.360> will<00:01:17.600> be<00:01:17.880> very<00:01:18.119> distinct<00:01:18.600> in<00:01:18.759> each 00:01:18.990 --> 00:01:19.000 align:start position:0% um will be very distinct in each 00:01:19.000 --> 00:01:21.630 align:start position:0% um will be very distinct in each programming<00:01:19.520> language<00:01:20.159> and<00:01:20.640> um<00:01:20.920> fortunately 00:01:21.630 --> 00:01:21.640 align:start position:0% programming language and um fortunately 00:01:21.640 --> 00:01:24.190 align:start position:0% programming language and um fortunately is<00:01:21.759> a<00:01:21.960> pretty<00:01:22.200> straightforward<00:01:22.960> task<00:01:23.640> but 00:01:24.190 --> 00:01:24.200 align:start position:0% is a pretty straightforward task but 00:01:24.200 --> 00:01:25.670 align:start position:0% is a pretty straightforward task but obviously<00:01:24.520> there's<00:01:24.680> a<00:01:24.759> lot<00:01:24.880> of<00:01:25.000> fiddly<00:01:25.400> data 00:01:25.670 --> 00:01:25.680 align:start position:0% obviously there's a lot of fiddly data 00:01:25.680 --> 00:01:27.030 align:start position:0% obviously there's a lot of fiddly data types<00:01:26.000> so<00:01:26.240> you'll<00:01:26.439> need<00:01:26.560> to<00:01:26.680> you'll<00:01:26.799> need<00:01:26.920> to 00:01:27.030 --> 00:01:27.040 align:start position:0% types so you'll need to you'll need to 00:01:27.040 --> 00:01:30.230 align:start position:0% types so you'll need to you'll need to get<00:01:27.159> through<00:01:27.680> those<00:01:28.680> um 00:01:30.230 --> 00:01:30.240 align:start position:0% get through those um 00:01:30.240 --> 00:01:34.190 align:start position:0% get through those um so<00:01:30.680> the<00:01:30.920> next<00:01:31.680> layer<00:01:32.360> is<00:01:32.960> the<00:01:33.240> the<00:01:33.360> base<00:01:33.640> model 00:01:34.190 --> 00:01:34.200 align:start position:0% so the next layer is the the base model 00:01:34.200 --> 00:01:38.149 align:start position:0% so the next layer is the the base model right<00:01:34.640> the<00:01:35.320> oscal<00:01:35.920> model<00:01:36.840> that<00:01:37.159> encapsulates 00:01:38.149 --> 00:01:38.159 align:start position:0% right the oscal model that encapsulates 00:01:38.159 --> 00:01:40.670 align:start position:0% right the oscal model that encapsulates a<00:01:38.280> bunch<00:01:38.439> of<00:01:38.560> shared<00:01:38.960> Behavior<00:01:39.520> so<00:01:40.280> um<00:01:40.479> one 00:01:40.670 --> 00:01:40.680 align:start position:0% a bunch of shared Behavior so um one 00:01:40.680 --> 00:01:43.590 align:start position:0% a bunch of shared Behavior so um one thing<00:01:40.799> it<00:01:41.040> encapsulates<00:01:42.040> is<00:01:42.439> core<00:01:42.960> validation 00:01:43.590 --> 00:01:43.600 align:start position:0% thing it encapsulates is core validation 00:01:43.600 --> 00:01:45.550 align:start position:0% thing it encapsulates is core validation logic<00:01:44.240> we'll<00:01:44.479> get<00:01:44.640> into<00:01:44.920> validation<00:01:45.360> in<00:01:45.479> a 00:01:45.550 --> 00:01:45.560 align:start position:0% logic we'll get into validation in a 00:01:45.560 --> 00:01:47.870 align:start position:0% logic we'll get into validation in a couple<00:01:45.759> of<00:01:45.880> slides<00:01:46.520> but<00:01:46.640> just<00:01:46.799> be<00:01:47.000> aware<00:01:47.399> that 00:01:47.870 --> 00:01:47.880 align:start position:0% couple of slides but just be aware that 00:01:47.880 --> 00:01:49.910 align:start position:0% couple of slides but just be aware that the<00:01:48.079> actual<00:01:48.560> logic<00:01:48.960> that<00:01:49.200> processes<00:01:49.680> the 00:01:49.910 --> 00:01:49.920 align:start position:0% the actual logic that processes the 00:01:49.920 --> 00:01:51.789 align:start position:0% the actual logic that processes the validation<00:01:50.439> is<00:01:50.560> all<00:01:50.759> defined<00:01:51.119> in<00:01:51.320> that<00:01:51.640> in 00:01:51.789 --> 00:01:51.799 align:start position:0% validation is all defined in that in 00:01:51.799 --> 00:01:54.630 align:start position:0% validation is all defined in that in that<00:01:52.320> base<00:01:52.719> class<00:01:53.680> and<00:01:53.880> then<00:01:54.200> each<00:01:54.320> of<00:01:54.479> the 00:01:54.630 --> 00:01:54.640 align:start position:0% that base class and then each of the 00:01:54.640 --> 00:01:57.510 align:start position:0% that base class and then each of the subclasses<00:01:55.479> just<00:01:56.240> provides<00:01:56.759> the<00:01:56.960> information 00:01:57.510 --> 00:01:57.520 align:start position:0% subclasses just provides the information 00:01:57.520 --> 00:02:00.630 align:start position:0% subclasses just provides the information about<00:01:57.759> the<00:01:58.320> the<00:01:58.680> um<00:01:59.640> um 00:02:00.630 --> 00:02:00.640 align:start position:0% about the the um um 00:02:00.640 --> 00:02:03.069 align:start position:0% about the the um um uh<00:02:01.320> permitted<00:02:01.880> values<00:02:02.439> or<00:02:02.640> or<00:02:02.799> other 00:02:03.069 --> 00:02:03.079 align:start position:0% uh permitted values or or other 00:02:03.079 --> 00:02:05.630 align:start position:0% uh permitted values or or other restrictions<00:02:03.600> that<00:02:03.719> are<00:02:04.079> relevant<00:02:05.079> it<00:02:05.280> also 00:02:05.630 --> 00:02:05.640 align:start position:0% restrictions that are relevant it also 00:02:05.640 --> 00:02:07.910 align:start position:0% restrictions that are relevant it also defines<00:02:06.119> some<00:02:06.680> basic<00:02:07.039> Behavior<00:02:07.600> that's 00:02:07.910 --> 00:02:07.920 align:start position:0% defines some basic Behavior that's 00:02:07.920 --> 00:02:09.910 align:start position:0% defines some basic Behavior that's common<00:02:08.200> to<00:02:08.360> all<00:02:08.520> of<00:02:08.640> the<00:02:08.759> models<00:02:09.160> so<00:02:09.599> we<00:02:09.720> have 00:02:09.910 --> 00:02:09.920 align:start position:0% common to all of the models so we have 00:02:09.920 --> 00:02:12.470 align:start position:0% common to all of the models so we have some<00:02:10.920> preferences<00:02:11.560> I<00:02:11.680> have<00:02:11.800> some<00:02:12.000> preferences 00:02:12.470 --> 00:02:12.480 align:start position:0% some preferences I have some preferences 00:02:12.480 --> 00:02:13.949 align:start position:0% some preferences I have some preferences about<00:02:12.680> Json 00:02:13.949 --> 00:02:13.959 align:start position:0% about Json 00:02:13.959 --> 00:02:16.110 align:start position:0% about Json serialization<00:02:14.959> um<00:02:15.400> there<00:02:15.560> are<00:02:15.760> some 00:02:16.110 --> 00:02:16.120 align:start position:0% serialization um there are some 00:02:16.120 --> 00:02:18.070 align:start position:0% serialization um there are some attribute<00:02:16.800> values<00:02:17.239> in<00:02:17.360> the<00:02:17.519> oscal 00:02:18.070 --> 00:02:18.080 align:start position:0% attribute values in the oscal 00:02:18.080 --> 00:02:19.990 align:start position:0% attribute values in the oscal specification<00:02:18.720> that<00:02:18.800> are<00:02:18.959> reserved<00:02:19.440> keywords 00:02:19.990 --> 00:02:20.000 align:start position:0% specification that are reserved keywords 00:02:20.000 --> 00:02:22.030 align:start position:0% specification that are reserved keywords in<00:02:20.120> a<00:02:20.239> lot<00:02:20.400> of<00:02:20.879> object-oriented<00:02:21.560> languages 00:02:22.030 --> 00:02:22.040 align:start position:0% in a lot of object-oriented languages 00:02:22.040 --> 00:02:24.790 align:start position:0% in a lot of object-oriented languages like<00:02:22.400> class<00:02:23.400> so<00:02:23.760> obviously<00:02:24.160> we<00:02:24.280> had<00:02:24.400> to<00:02:24.560> do 00:02:24.790 --> 00:02:24.800 align:start position:0% like class so obviously we had to do 00:02:24.800 --> 00:02:27.229 align:start position:0% like class so obviously we had to do something<00:02:25.200> to<00:02:25.440> make<00:02:25.920> uh<00:02:26.120> make<00:02:26.360> that<00:02:26.519> word 00:02:27.229 --> 00:02:27.239 align:start position:0% something to make uh make that word 00:02:27.239 --> 00:02:29.990 align:start position:0% something to make uh make that word available<00:02:28.239> um 00:02:29.990 --> 00:02:30.000 align:start position:0% available um 00:02:30.000 --> 00:02:33.750 align:start position:0% available um so<00:02:30.640> um<00:02:31.800> uh<00:02:32.800> we'll<00:02:33.040> talk<00:02:33.200> about<00:02:33.440> that<00:02:33.560> in<00:02:33.680> a 00:02:33.750 --> 00:02:33.760 align:start position:0% so um uh we'll talk about that in a 00:02:33.760 --> 00:02:34.990 align:start position:0% so um uh we'll talk about that in a little<00:02:33.959> bit<00:02:34.160> but<00:02:34.319> you'll<00:02:34.519> you'll<00:02:34.640> see<00:02:34.840> an 00:02:34.990 --> 00:02:35.000 align:start position:0% little bit but you'll you'll see an 00:02:35.000 --> 00:02:36.589 align:start position:0% little bit but you'll you'll see an example<00:02:35.720> but<00:02:35.879> that's<00:02:36.080> one<00:02:36.160> of<00:02:36.280> the<00:02:36.400> things 00:02:36.589 --> 00:02:36.599 align:start position:0% example but that's one of the things 00:02:36.599 --> 00:02:39.470 align:start position:0% example but that's one of the things that<00:02:36.720> we<00:02:36.840> did<00:02:37.000> in<00:02:37.160> this<00:02:37.280> Base<00:02:37.599> Class<00:02:38.560> um<00:02:38.959> and<00:02:39.319> of 00:02:39.470 --> 00:02:39.480 align:start position:0% that we did in this Base Class um and of 00:02:39.480 --> 00:02:41.589 align:start position:0% that we did in this Base Class um and of course<00:02:39.879> the<00:02:40.080> intent<00:02:40.519> is<00:02:40.680> that<00:02:40.879> almost<00:02:41.239> every 00:02:41.589 --> 00:02:41.599 align:start position:0% course the intent is that almost every 00:02:41.599 --> 00:02:44.710 align:start position:0% course the intent is that almost every object<00:02:42.200> in<00:02:42.400> the<00:02:42.680> library<00:02:43.319> extends<00:02:43.920> the<00:02:44.120> oscal 00:02:44.710 --> 00:02:44.720 align:start position:0% object in the library extends the oscal 00:02:44.720 --> 00:02:47.190 align:start position:0% object in the library extends the oscal model<00:02:45.120> directly<00:02:45.640> and<00:02:46.080> from<00:02:46.239> a<00:02:46.519> programmer's 00:02:47.190 --> 00:02:47.200 align:start position:0% model directly and from a programmer's 00:02:47.200 --> 00:02:49.509 align:start position:0% model directly and from a programmer's perspective<00:02:48.120> you<00:02:48.400> you<00:02:48.800> probably<00:02:49.200> don't<00:02:49.400> need 00:02:49.509 --> 00:02:49.519 align:start position:0% perspective you you probably don't need 00:02:49.519 --> 00:02:51.149 align:start position:0% perspective you you probably don't need to<00:02:49.680> worry<00:02:49.959> about<00:02:50.120> the<00:02:50.239> existence<00:02:50.599> of<00:02:50.720> oscal 00:02:51.149 --> 00:02:51.159 align:start position:0% to worry about the existence of oscal 00:02:51.159 --> 00:02:52.070 align:start position:0% to worry about the existence of oscal model<00:02:51.400> at 00:02:52.070 --> 00:02:52.080 align:start position:0% model at 00:02:52.080 --> 00:02:55.190 align:start position:0% model at all<00:02:53.080> nice<00:02:53.280> that<00:02:53.440> it's 00:02:55.190 --> 00:02:55.200 align:start position:0% all nice that it's 00:02:55.200 --> 00:02:58.070 align:start position:0% all nice that it's there<00:02:56.200> the<00:02:56.319> next<00:02:56.560> layer<00:02:56.920> down<00:02:57.239> are<00:02:57.599> structural 00:02:58.070 --> 00:02:58.080 align:start position:0% there the next layer down are structural 00:02:58.080 --> 00:03:00.149 align:start position:0% there the next layer down are structural models<00:02:59.000> uh<00:02:59.120> so<00:02:59.280> now<00:02:59.480> fortunately<00:02:59.959> we'll<00:03:00.080> get 00:03:00.149 --> 00:03:00.159 align:start position:0% models uh so now fortunately we'll get 00:03:00.159 --> 00:03:03.910 align:start position:0% models uh so now fortunately we'll get into<00:03:00.400> actual<00:03:00.840> kind<00:03:01.000> of<00:03:01.440> code<00:03:02.280> here<00:03:02.920> hopefully 00:03:03.910 --> 00:03:03.920 align:start position:0% into actual kind of code here hopefully 00:03:03.920 --> 00:03:05.430 align:start position:0% into actual kind of code here hopefully um 00:03:05.430 --> 00:03:05.440 align:start position:0% um 00:03:05.440 --> 00:03:07.030 align:start position:0% um so 00:03:07.030 --> 00:03:07.040 align:start position:0% so 00:03:07.040 --> 00:03:10.630 align:start position:0% so uh<00:03:08.040> in<00:03:08.239> alcal<00:03:08.840> they're<00:03:09.040> called<00:03:09.360> assemblies<00:03:10.360> um 00:03:10.630 --> 00:03:10.640 align:start position:0% uh in alcal they're called assemblies um 00:03:10.640 --> 00:03:12.830 align:start position:0% uh in alcal they're called assemblies um they<00:03:10.799> are<00:03:11.319> you<00:03:11.440> know<00:03:11.640> bags<00:03:11.920> of<00:03:12.120> attributes 00:03:12.830 --> 00:03:12.840 align:start position:0% they are you know bags of attributes 00:03:12.840 --> 00:03:15.270 align:start position:0% they are you know bags of attributes attributes<00:03:13.640> that<00:03:13.799> each<00:03:14.040> have<00:03:14.200> their<00:03:14.400> own<00:03:14.959> um 00:03:15.270 --> 00:03:15.280 align:start position:0% attributes that each have their own um 00:03:15.280 --> 00:03:17.430 align:start position:0% attributes that each have their own um types<00:03:15.799> which<00:03:15.959> impose<00:03:16.360> restrictions<00:03:16.920> and<00:03:17.040> then 00:03:17.430 --> 00:03:17.440 align:start position:0% types which impose restrictions and then 00:03:17.440 --> 00:03:20.869 align:start position:0% types which impose restrictions and then sometimes<00:03:17.720> additional<00:03:18.360> restrictions<00:03:19.360> so<00:03:20.040> um 00:03:20.869 --> 00:03:20.879 align:start position:0% sometimes additional restrictions so um 00:03:20.879 --> 00:03:24.110 align:start position:0% sometimes additional restrictions so um a<00:03:21.040> structural<00:03:21.640> model<00:03:22.360> really<00:03:22.680> just<00:03:23.120> defines 00:03:24.110 --> 00:03:24.120 align:start position:0% a structural model really just defines 00:03:24.120 --> 00:03:27.750 align:start position:0% a structural model really just defines the<00:03:24.480> the<00:03:24.680> very<00:03:25.080> basic<00:03:25.760> level<00:03:26.239> of<00:03:26.760> restrictions 00:03:27.750 --> 00:03:27.760 align:start position:0% the the very basic level of restrictions 00:03:27.760 --> 00:03:30.229 align:start position:0% the the very basic level of restrictions um<00:03:28.000> and<00:03:28.200> identifies<00:03:28.840> basic<00:03:29.239> type<00:03:29.480> information 00:03:30.229 --> 00:03:30.239 align:start position:0% um and identifies basic type information 00:03:30.239 --> 00:03:33.470 align:start position:0% um and identifies basic type information so<00:03:30.519> type<00:03:31.159> referring<00:03:31.519> to<00:03:31.720> the<00:03:31.879> data<00:03:32.360> types<00:03:33.360> that 00:03:33.470 --> 00:03:33.480 align:start position:0% so type referring to the data types that 00:03:33.480 --> 00:03:36.550 align:start position:0% so type referring to the data types that are<00:03:34.080> um<00:03:34.319> part<00:03:34.480> of<00:03:34.599> the<00:03:34.720> oscal<00:03:35.640> um<00:03:35.920> standard<00:03:36.400> or 00:03:36.550 --> 00:03:36.560 align:start position:0% are um part of the oscal um standard or 00:03:36.560 --> 00:03:38.070 align:start position:0% are um part of the oscal um standard or the<00:03:36.680> metaschema 00:03:38.070 --> 00:03:38.080 align:start position:0% the metaschema 00:03:38.080 --> 00:03:41.110 align:start position:0% the metaschema standard<00:03:39.080> here's<00:03:39.280> an<00:03:39.560> example<00:03:40.560> um<00:03:40.799> hopefully 00:03:41.110 --> 00:03:41.120 align:start position:0% standard here's an example um hopefully 00:03:41.120 --> 00:03:44.630 align:start position:0% standard here's an example um hopefully the<00:03:41.239> font<00:03:41.519> is<00:03:41.640> not<00:03:41.840> too<00:03:42.200> small<00:03:43.200> um<00:03:43.480> but<00:03:44.159> uh<00:03:44.400> as<00:03:44.519> I 00:03:44.630 --> 00:03:44.640 align:start position:0% the font is not too small um but uh as I 00:03:44.640 --> 00:03:49.190 align:start position:0% the font is not too small um but uh as I said<00:03:45.360> property<00:03:46.360> is<00:03:46.879> one<00:03:47.040> of<00:03:47.239> the<00:03:47.840> oscal 00:03:49.190 --> 00:03:49.200 align:start position:0% said property is one of the oscal 00:03:49.200 --> 00:03:54.350 align:start position:0% said property is one of the oscal entities<00:03:50.200> that<00:03:50.480> is<00:03:51.200> really<00:03:51.920> key<00:03:52.599> to<00:03:53.599> um 00:03:54.350 --> 00:03:54.360 align:start position:0% entities that is really key to um 00:03:54.360 --> 00:03:56.550 align:start position:0% entities that is really key to um extending<00:03:55.280> oscal<00:03:55.840> to<00:03:55.959> meet<00:03:56.280> other 00:03:56.550 --> 00:03:56.560 align:start position:0% extending oscal to meet other 00:03:56.560 --> 00:03:58.309 align:start position:0% extending oscal to meet other requirements<00:03:57.480> there<00:03:57.599> are<00:03:57.720> a<00:03:57.920> lot<00:03:58.040> of 00:03:58.309 --> 00:03:58.319 align:start position:0% requirements there are a lot of 00:03:58.319 --> 00:04:01.429 align:start position:0% requirements there are a lot of different<00:03:58.799> flavors<00:03:59.360> of<00:03:59.840> properties<00:04:00.799> and<00:04:00.959> so<00:04:01.319> I 00:04:01.429 --> 00:04:01.439 align:start position:0% different flavors of properties and so I 00:04:01.439 --> 00:04:05.550 align:start position:0% different flavors of properties and so I spend<00:04:01.720> a<00:04:01.840> lot<00:04:01.959> of<00:04:02.200> time<00:04:02.879> in<00:04:04.200> property<00:04:05.200> um 00:04:05.550 --> 00:04:05.560 align:start position:0% spend a lot of time in property um 00:04:05.560 --> 00:04:07.270 align:start position:0% spend a lot of time in property um figuring<00:04:05.959> out<00:04:06.120> how<00:04:06.200> to<00:04:06.360> make<00:04:06.519> it<00:04:06.799> work 00:04:07.270 --> 00:04:07.280 align:start position:0% figuring out how to make it work 00:04:07.280 --> 00:04:10.309 align:start position:0% figuring out how to make it work effectively<00:04:08.079> and<00:04:08.360> a<00:04:08.480> in<00:04:08.599> a<00:04:08.799> in<00:04:08.920> a<00:04:09.040> good<00:04:09.239> way<00:04:10.040> um 00:04:10.309 --> 00:04:10.319 align:start position:0% effectively and a in a in a good way um 00:04:10.319 --> 00:04:11.750 align:start position:0% effectively and a in a in a good way um what<00:04:10.400> you'll<00:04:10.599> see<00:04:10.879> here<00:04:11.120> is<00:04:11.280> the<00:04:11.400> base 00:04:11.750 --> 00:04:11.760 align:start position:0% what you'll see here is the base 00:04:11.760 --> 00:04:14.309 align:start position:0% what you'll see here is the base property<00:04:12.239> so<00:04:12.480> again<00:04:13.239> um<00:04:13.560> not<00:04:13.760> something<00:04:14.120> you 00:04:14.309 --> 00:04:14.319 align:start position:0% property so again um not something you 00:04:14.319 --> 00:04:15.830 align:start position:0% property so again um not something you you<00:04:14.560> generally<00:04:14.920> need<00:04:15.079> to<00:04:15.239> worry<00:04:15.439> about<00:04:15.599> as<00:04:15.760> a 00:04:15.830 --> 00:04:15.840 align:start position:0% you generally need to worry about as a 00:04:15.840 --> 00:04:19.430 align:start position:0% you generally need to worry about as a developer<00:04:16.600> but<00:04:17.359> um<00:04:18.160> a<00:04:18.680> property<00:04:19.000> will<00:04:19.199> have<00:04:19.280> a 00:04:19.430 --> 00:04:19.440 align:start position:0% developer but um a property will have a 00:04:19.440 --> 00:04:21.550 align:start position:0% developer but um a property will have a name<00:04:19.919> it'll<00:04:20.120> have<00:04:20.199> a<00:04:20.320> uu<00:04:20.600> ID<00:04:21.160> it'll<00:04:21.359> have<00:04:21.440> a 00:04:21.550 --> 00:04:21.560 align:start position:0% name it'll have a uu ID it'll have a 00:04:21.560 --> 00:04:24.230 align:start position:0% name it'll have a uu ID it'll have a name<00:04:21.840> space<00:04:22.440> a<00:04:22.639> value<00:04:23.360> it'll<00:04:23.600> have<00:04:23.880> something 00:04:24.230 --> 00:04:24.240 align:start position:0% name space a value it'll have something 00:04:24.240 --> 00:04:26.030 align:start position:0% name space a value it'll have something that<00:04:24.720> is<00:04:24.880> called<00:04:25.280> class<00:04:25.720> in<00:04:25.840> the 00:04:26.030 --> 00:04:26.040 align:start position:0% that is called class in the 00:04:26.040 --> 00:04:28.070 align:start position:0% that is called class in the specification<00:04:26.680> but<00:04:26.840> I<00:04:26.960> call<00:04:27.120> it<00:04:27.280> promp<00:04:27.680> class 00:04:28.070 --> 00:04:28.080 align:start position:0% specification but I call it promp class 00:04:28.080 --> 00:04:30.189 align:start position:0% specification but I call it promp class because<00:04:28.360> class<00:04:28.600> is<00:04:28.720> a<00:04:28.880> reserved<00:04:29.320> word<00:04:29.720> in<00:04:29.919> most 00:04:30.189 --> 00:04:30.199 align:start position:0% because class is a reserved word in most 00:04:30.199 --> 00:04:32.310 align:start position:0% because class is a reserved word in most languages<00:04:31.199> um<00:04:31.360> most<00:04:31.600> objectoriented 00:04:32.310 --> 00:04:32.320 align:start position:0% languages um most objectoriented 00:04:32.320 --> 00:04:35.749 align:start position:0% languages um most objectoriented languages<00:04:33.320> and<00:04:33.880> uh<00:04:34.000> there's<00:04:34.160> a<00:04:34.560> remarks<00:04:35.560> um 00:04:35.749 --> 00:04:35.759 align:start position:0% languages and uh there's a remarks um 00:04:35.759 --> 00:04:37.790 align:start position:0% languages and uh there's a remarks um field<00:04:36.280> and<00:04:36.400> you<00:04:36.520> can<00:04:36.680> see<00:04:37.160> we'll<00:04:37.360> talk<00:04:37.520> about 00:04:37.790 --> 00:04:37.800 align:start position:0% field and you can see we'll talk about 00:04:37.800 --> 00:04:39.550 align:start position:0% field and you can see we'll talk about this<00:04:37.919> a<00:04:38.000> little<00:04:38.160> bit<00:04:38.320> later<00:04:38.880> but<00:04:39.000> there's<00:04:39.240> some 00:04:39.550 --> 00:04:39.560 align:start position:0% this a little bit later but there's some 00:04:39.560 --> 00:04:41.270 align:start position:0% this a little bit later but there's some decoration<00:04:40.080> in<00:04:40.240> there<00:04:40.400> some<00:04:40.600> type<00:04:40.840> hinting<00:04:41.120> to 00:04:41.270 --> 00:04:41.280 align:start position:0% decoration in there some type hinting to 00:04:41.280 --> 00:04:44.029 align:start position:0% decoration in there some type hinting to indicate<00:04:41.680> which<00:04:41.800> of<00:04:41.960> the<00:04:42.120> values<00:04:42.639> are<00:04:43.360> um 00:04:44.029 --> 00:04:44.039 align:start position:0% indicate which of the values are um 00:04:44.039 --> 00:04:48.110 align:start position:0% indicate which of the values are um optional<00:04:44.720> which<00:04:44.840> are<00:04:45.360> mandatory<00:04:46.360> um<00:04:46.759> and<00:04:47.520> um 00:04:48.110 --> 00:04:48.120 align:start position:0% optional which are mandatory um and um 00:04:48.120 --> 00:04:51.230 align:start position:0% optional which are mandatory um and um to<00:04:48.400> try<00:04:48.560> to<00:04:48.720> make<00:04:49.000> the<00:04:49.360> the<00:04:50.240> developers 00:04:51.230 --> 00:04:51.240 align:start position:0% to try to make the the developers 00:04:51.240 --> 00:04:55.070 align:start position:0% to try to make the the developers experience<00:04:52.000> life<00:04:52.919> easier<00:04:53.919> um<00:04:54.360> if<00:04:54.479> a<00:04:54.600> field<00:04:54.880> is 00:04:55.070 --> 00:04:55.080 align:start position:0% experience life easier um if a field is 00:04:55.080 --> 00:04:56.909 align:start position:0% experience life easier um if a field is optional<00:04:55.440> it<00:04:55.520> usually<00:04:55.800> has<00:04:55.919> a<00:04:56.080> default<00:04:56.600> value 00:04:56.909 --> 00:04:56.919 align:start position:0% optional it usually has a default value 00:04:56.919 --> 00:05:01.430 align:start position:0% optional it usually has a default value of<00:04:57.240> none<00:04:57.759> or<00:04:58.360> you<00:04:58.479> know<00:04:58.680> no<00:04:58.919> value<00:04:59.280> so 00:05:01.430 --> 00:05:01.440 align:start position:0% of none or you know no value so 00:05:01.440 --> 00:05:05.590 align:start position:0% of none or you know no value so um<00:05:01.880> that<00:05:02.120> is<00:05:02.360> how<00:05:02.600> we<00:05:02.840> defined<00:05:03.479> a<00:05:03.800> structural 00:05:05.590 --> 00:05:05.600 align:start position:0% um that is how we defined a structural 00:05:05.600 --> 00:05:09.550 align:start position:0% um that is how we defined a structural model<00:05:06.600> um<00:05:07.080> the<00:05:07.479> submodels<00:05:08.479> will<00:05:08.919> impose 00:05:09.550 --> 00:05:09.560 align:start position:0% model um the submodels will impose 00:05:09.560 --> 00:05:12.310 align:start position:0% model um the submodels will impose constraints<00:05:10.560> so<00:05:10.800> there<00:05:10.960> are<00:05:11.240> a<00:05:11.440> variety<00:05:11.960> of 00:05:12.310 --> 00:05:12.320 align:start position:0% constraints so there are a variety of 00:05:12.320 --> 00:05:14.230 align:start position:0% constraints so there are a variety of constraints<00:05:13.320> I<00:05:13.400> think<00:05:13.520> I<00:05:13.639> figured<00:05:13.880> out<00:05:14.000> how<00:05:14.120> to 00:05:14.230 --> 00:05:14.240 align:start position:0% constraints I think I figured out how to 00:05:14.240 --> 00:05:18.950 align:start position:0% constraints I think I figured out how to update<00:05:14.560> the<00:05:14.720> screen<00:05:16.039> um<00:05:17.319> uh<00:05:18.319> I<00:05:18.440> won't<00:05:18.720> I<00:05:18.759> won't 00:05:18.950 --> 00:05:18.960 align:start position:0% update the screen um uh I won't I won't 00:05:18.960 --> 00:05:20.270 align:start position:0% update the screen um uh I won't I won't read<00:05:19.199> the<00:05:19.360> list<00:05:19.600> because<00:05:19.800> we're<00:05:19.919> going<00:05:20.000> to 00:05:20.270 --> 00:05:20.280 align:start position:0% read the list because we're going to 00:05:20.280 --> 00:05:22.909 align:start position:0% read the list because we're going to look<00:05:20.400> at<00:05:20.560> them<00:05:20.919> each<00:05:21.840> but<00:05:22.199> um<00:05:22.440> there<00:05:22.560> are<00:05:22.759> a 00:05:22.909 --> 00:05:22.919 align:start position:0% look at them each but um there are a 00:05:22.919 --> 00:05:25.110 align:start position:0% look at them each but um there are a variety<00:05:23.319> of<00:05:23.440> constraints<00:05:24.319> it's<00:05:24.560> important<00:05:24.960> to 00:05:25.110 --> 00:05:25.120 align:start position:0% variety of constraints it's important to 00:05:25.120 --> 00:05:29.990 align:start position:0% variety of constraints it's important to note<00:05:25.520> that<00:05:25.880> those<00:05:26.680> are<00:05:28.120> typically<00:05:29.120> um 00:05:29.990 --> 00:05:30.000 align:start position:0% note that those are typically um 00:05:30.000 --> 00:05:32.749 align:start position:0% note that those are typically um presented<00:05:30.800> most<00:05:31.800> accurately<00:05:32.520> in<00:05:32.639> the 00:05:32.749 --> 00:05:32.759 align:start position:0% presented most accurately in the 00:05:32.759 --> 00:05:35.350 align:start position:0% presented most accurately in the metaschema<00:05:33.319> language<00:05:34.319> so<00:05:34.720> if<00:05:34.840> you<00:05:35.120> really 00:05:35.350 --> 00:05:35.360 align:start position:0% metaschema language so if you really 00:05:35.360 --> 00:05:37.550 align:start position:0% metaschema language so if you really want<00:05:35.520> to<00:05:35.680> see<00:05:36.000> what<00:05:36.160> these<00:05:36.360> things<00:05:36.600> look<00:05:36.840> like 00:05:37.550 --> 00:05:37.560 align:start position:0% want to see what these things look like 00:05:37.560 --> 00:05:39.029 align:start position:0% want to see what these things look like um<00:05:37.800> go<00:05:37.919> to<00:05:38.039> metema<00:05:38.639> and<00:05:38.759> I<00:05:38.840> think 00:05:39.029 --> 00:05:39.039 align:start position:0% um go to metema and I think 00:05:39.039 --> 00:05:40.870 align:start position:0% um go to metema and I think Unfortunately<00:05:39.639> they<00:05:39.800> might<00:05:39.919> be<00:05:40.160> called 00:05:40.870 --> 00:05:40.880 align:start position:0% Unfortunately they might be called 00:05:40.880 --> 00:05:42.710 align:start position:0% Unfortunately they might be called something<00:05:41.160> different<00:05:41.400> in<00:05:41.560> metaschema<00:05:42.000> so 00:05:42.710 --> 00:05:42.720 align:start position:0% something different in metaschema so 00:05:42.720 --> 00:05:45.990 align:start position:0% something different in metaschema so this<00:05:42.840> is<00:05:43.080> what<00:05:43.240> I<00:05:43.400> call<00:05:43.639> them<00:05:44.479> but<00:05:44.919> um<00:05:45.880> they 00:05:45.990 --> 00:05:46.000 align:start position:0% this is what I call them but um they 00:05:46.000 --> 00:05:51.029 align:start position:0% this is what I call them but um they might<00:05:46.160> have<00:05:46.319> different<00:05:46.520> terms<00:05:46.720> in 00:05:51.029 --> 00:05:51.039 align:start position:0% 00:05:51.039 --> 00:05:53.070 align:start position:0% metema<00:05:52.039> uh<00:05:52.160> so<00:05:52.400> let's<00:05:52.600> talk<00:05:52.759> about 00:05:53.070 --> 00:05:53.080 align:start position:0% metema uh so let's talk about 00:05:53.080 --> 00:05:54.710 align:start position:0% metema uh so let's talk about cardinality 00:05:54.710 --> 00:05:54.720 align:start position:0% cardinality 00:05:54.720 --> 00:05:57.070 align:start position:0% cardinality constraints<00:05:55.720> cardinality<00:05:56.199> constraint<00:05:56.720> is 00:05:57.070 --> 00:05:57.080 align:start position:0% constraints cardinality constraint is 00:05:57.080 --> 00:05:59.749 align:start position:0% constraints cardinality constraint is how<00:05:57.319> many<00:05:57.680> times<00:05:58.600> uh<00:05:58.800> an<00:05:59.000> attribute<00:05:59.360> should 00:05:59.749 --> 00:05:59.759 align:start position:0% how many times uh an attribute should 00:05:59.759 --> 00:06:02.270 align:start position:0% how many times uh an attribute should appear<00:06:00.639> uh<00:06:00.840> usually<00:06:01.319> I<00:06:01.400> think<00:06:01.639> always<00:06:02.080> but<00:06:02.199> I 00:06:02.270 --> 00:06:02.280 align:start position:0% appear uh usually I think always but I 00:06:02.280 --> 00:06:04.110 align:start position:0% appear uh usually I think always but I wanted<00:06:02.479> to<00:06:02.639> hedge<00:06:02.840> my<00:06:03.000> bets<00:06:03.319> so<00:06:03.479> I<00:06:03.560> said 00:06:04.110 --> 00:06:04.120 align:start position:0% wanted to hedge my bets so I said 00:06:04.120 --> 00:06:07.670 align:start position:0% wanted to hedge my bets so I said usually<00:06:05.120> U<00:06:05.319> it's<00:06:05.560> either<00:06:05.960> zero<00:06:06.280> or<00:06:06.440> one<00:06:06.880> so<00:06:07.400> an 00:06:07.670 --> 00:06:07.680 align:start position:0% usually U it's either zero or one so an 00:06:07.680 --> 00:06:10.430 align:start position:0% usually U it's either zero or one so an attribute<00:06:08.120> is<00:06:08.599> optional<00:06:09.599> uh<00:06:09.800> one<00:06:10.240> an 00:06:10.430 --> 00:06:10.440 align:start position:0% attribute is optional uh one an 00:06:10.440 --> 00:06:14.270 align:start position:0% attribute is optional uh one an attribute<00:06:10.800> is<00:06:11.240> mandatory<00:06:12.240> um<00:06:12.520> or<00:06:13.160> um<00:06:13.800> zero 00:06:14.270 --> 00:06:14.280 align:start position:0% attribute is mandatory um or um zero 00:06:14.280 --> 00:06:17.270 align:start position:0% attribute is mandatory um or um zero through<00:06:14.639> Infinity<00:06:15.560> which<00:06:15.880> is<00:06:16.560> a<00:06:16.720> way<00:06:16.919> of 00:06:17.270 --> 00:06:17.280 align:start position:0% through Infinity which is a way of 00:06:17.280 --> 00:06:20.270 align:start position:0% through Infinity which is a way of collecting<00:06:17.720> a<00:06:18.000> list<00:06:19.000> of<00:06:19.360> attributes<00:06:20.000> so<00:06:20.160> if 00:06:20.270 --> 00:06:20.280 align:start position:0% collecting a list of attributes so if 00:06:20.280 --> 00:06:25.189 align:start position:0% collecting a list of attributes so if you<00:06:20.520> have<00:06:21.280> um<00:06:21.919> a<00:06:22.039> list<00:06:22.240> of<00:06:22.560> attributes<00:06:24.039> um<00:06:25.039> it 00:06:25.189 --> 00:06:25.199 align:start position:0% you have um a list of attributes um it 00:06:25.199 --> 00:06:26.670 align:start position:0% you have um a list of attributes um it it<00:06:25.280> could<00:06:25.440> be<00:06:25.520> an<00:06:25.639> empty<00:06:25.919> list<00:06:26.120> or<00:06:26.240> it<00:06:26.360> could<00:06:26.520> be 00:06:26.670 --> 00:06:26.680 align:start position:0% it could be an empty list or it could be 00:06:26.680 --> 00:06:30.510 align:start position:0% it could be an empty list or it could be a<00:06:27.080> quite<00:06:27.319> a<00:06:27.440> large<00:06:27.720> list<00:06:28.039> so<00:06:28.680> um<00:06:29.039> that<00:06:29.280> is<00:06:29.880> how 00:06:30.510 --> 00:06:30.520 align:start position:0% a quite a large list so um that is how 00:06:30.520 --> 00:06:34.029 align:start position:0% a quite a large list so um that is how cardinality<00:06:31.080> is<00:06:31.360> expressed<00:06:32.360> and<00:06:32.639> in<00:06:32.840> my<00:06:33.120> code 00:06:34.029 --> 00:06:34.039 align:start position:0% cardinality is expressed and in my code 00:06:34.039 --> 00:06:36.029 align:start position:0% cardinality is expressed and in my code um<00:06:34.479> again<00:06:34.720> it<00:06:34.840> all<00:06:35.039> looks<00:06:35.240> like<00:06:35.440> python<00:06:35.960> you 00:06:36.029 --> 00:06:36.039 align:start position:0% um again it all looks like python you 00:06:36.039 --> 00:06:38.830 align:start position:0% um again it all looks like python you will<00:06:36.240> see<00:06:36.680> for<00:06:36.880> a<00:06:37.080> cardinality<00:06:37.680> of<00:06:37.880> one<00:06:38.599> we 00:06:38.830 --> 00:06:38.840 align:start position:0% will see for a cardinality of one we 00:06:38.840 --> 00:06:41.629 align:start position:0% will see for a cardinality of one we Define<00:06:39.400> a 00:06:41.629 --> 00:06:41.639 align:start position:0% 00:06:41.639 --> 00:06:45.550 align:start position:0% property<00:06:42.639> um<00:06:43.000> and<00:06:43.520> simply<00:06:43.919> identify<00:06:44.400> the<00:06:44.560> type 00:06:45.550 --> 00:06:45.560 align:start position:0% property um and simply identify the type 00:06:45.560 --> 00:06:48.950 align:start position:0% property um and simply identify the type that's<00:06:45.880> code<00:06:46.680> for<00:06:47.120> the<00:06:47.800> um<00:06:48.319> you<00:06:48.400> know<00:06:48.560> for<00:06:48.720> the 00:06:48.950 --> 00:06:48.960 align:start position:0% that's code for the um you know for the 00:06:48.960 --> 00:06:51.510 align:start position:0% that's code for the um you know for the for<00:06:49.120> the<00:06:49.720> pantic<00:06:50.400> library<00:06:50.919> essentially<00:06:51.319> to 00:06:51.510 --> 00:06:51.520 align:start position:0% for the pantic library essentially to 00:06:51.520 --> 00:06:53.550 align:start position:0% for the pantic library essentially to say<00:06:52.080> this<00:06:52.199> is<00:06:52.319> a<00:06:52.479> mandatory 00:06:53.550 --> 00:06:53.560 align:start position:0% say this is a mandatory 00:06:53.560 --> 00:06:55.790 align:start position:0% say this is a mandatory attribute<00:06:54.560> it<00:06:54.720> works<00:06:54.960> the<00:06:55.080> same<00:06:55.280> way<00:06:55.400> in<00:06:55.520> data 00:06:55.790 --> 00:06:55.800 align:start position:0% attribute it works the same way in data 00:06:55.800 --> 00:06:57.029 align:start position:0% attribute it works the same way in data classes<00:06:56.120> so<00:06:56.240> you<00:06:56.319> don't<00:06:56.440> need<00:06:56.560> to<00:06:56.639> worry<00:06:56.879> about 00:06:57.029 --> 00:06:57.039 align:start position:0% classes so you don't need to worry about 00:06:57.039 --> 00:07:02.350 align:start position:0% classes so you don't need to worry about pantic<00:06:58.080> but<00:06:59.080> if<00:06:59.199> it's<00:06:59.599> zero<00:06:59.879> or<00:07:00.160> one<00:07:01.160> um<00:07:02.120> again 00:07:02.350 --> 00:07:02.360 align:start position:0% pantic but if it's zero or one um again 00:07:02.360 --> 00:07:03.830 align:start position:0% pantic but if it's zero or one um again that's<00:07:02.520> a<00:07:02.639> different<00:07:02.879> type<00:07:03.120> hint<00:07:03.360> it's<00:07:03.520> either 00:07:03.830 --> 00:07:03.840 align:start position:0% that's a different type hint it's either 00:07:03.840 --> 00:07:06.270 align:start position:0% that's a different type hint it's either the<00:07:04.039> object<00:07:04.360> or<00:07:04.520> a<00:07:04.680> none<00:07:05.080> none<00:07:05.400> is<00:07:05.599> like<00:07:05.759> null 00:07:06.270 --> 00:07:06.280 align:start position:0% the object or a none none is like null 00:07:06.280 --> 00:07:09.790 align:start position:0% the object or a none none is like null right<00:07:07.120> um<00:07:07.919> uh<00:07:08.120> and<00:07:08.280> then<00:07:08.680> if<00:07:08.800> the<00:07:09.039> cardinality 00:07:09.790 --> 00:07:09.800 align:start position:0% right um uh and then if the cardinality 00:07:09.800 --> 00:07:13.270 align:start position:0% right um uh and then if the cardinality is<00:07:10.199> zero<00:07:10.560> or<00:07:10.800> infinite<00:07:11.759> it's<00:07:12.160> an<00:07:12.520> optional 00:07:13.270 --> 00:07:13.280 align:start position:0% is zero or infinite it's an optional 00:07:13.280 --> 00:07:17.189 align:start position:0% is zero or infinite it's an optional list<00:07:14.120> so<00:07:14.400> it'll<00:07:14.599> be<00:07:14.759> a<00:07:14.879> list<00:07:15.080> of<00:07:15.240> data<00:07:15.560> types<00:07:16.039> or 00:07:17.189 --> 00:07:17.199 align:start position:0% list so it'll be a list of data types or 00:07:17.199 --> 00:07:21.350 align:start position:0% list so it'll be a list of data types or nothing<00:07:18.199> uh<00:07:18.360> and<00:07:18.520> so<00:07:18.840> that<00:07:19.039> is<00:07:19.319> how<00:07:20.120> um<00:07:21.120> we 00:07:21.350 --> 00:07:21.360 align:start position:0% nothing uh and so that is how um we 00:07:21.360 --> 00:07:23.029 align:start position:0% nothing uh and so that is how um we address<00:07:21.840> the<00:07:22.160> the<00:07:22.360> the<00:07:22.479> cardinality 00:07:23.029 --> 00:07:23.039 align:start position:0% address the the the cardinality 00:07:23.039 --> 00:07:24.869 align:start position:0% address the the the cardinality requirements<00:07:23.639> I<00:07:23.759> think<00:07:24.360> while<00:07:24.560> it's 00:07:24.869 --> 00:07:24.879 align:start position:0% requirements I think while it's 00:07:24.879 --> 00:07:27.749 align:start position:0% requirements I think while it's obviously<00:07:25.680> obviously<00:07:26.160> Python<00:07:26.960> and<00:07:27.199> obviously 00:07:27.749 --> 00:07:27.759 align:start position:0% obviously obviously Python and obviously 00:07:27.759 --> 00:07:30.189 align:start position:0% obviously obviously Python and obviously like<00:07:27.919> 37<00:07:28.560> or<00:07:28.919> like<00:07:29.080> 311 00:07:30.189 --> 00:07:30.199 align:start position:0% like 37 or like 311 00:07:30.199 --> 00:07:33.869 align:start position:0% like 37 or like 311 or<00:07:30.360> later<00:07:30.879> python<00:07:31.919> um<00:07:32.919> there<00:07:33.039> are<00:07:33.240> similar 00:07:33.869 --> 00:07:33.879 align:start position:0% or later python um there are similar 00:07:33.879 --> 00:07:37.230 align:start position:0% or later python um there are similar patterns<00:07:34.360> in<00:07:34.680> in<00:07:35.039> a<00:07:35.160> lot<00:07:35.280> of<00:07:35.599> other 00:07:37.230 --> 00:07:37.240 align:start position:0% patterns in in a lot of other 00:07:37.240 --> 00:07:41.510 align:start position:0% patterns in in a lot of other languages<00:07:38.240> um<00:07:38.479> the<00:07:38.680> next<00:07:39.919> common<00:07:40.919> um 00:07:41.510 --> 00:07:41.520 align:start position:0% languages um the next common um 00:07:41.520 --> 00:07:44.110 align:start position:0% languages um the next common um constraint<00:07:41.960> will<00:07:42.080> be<00:07:42.199> a<00:07:42.360> value<00:07:42.960> constraint<00:07:43.960> uh 00:07:44.110 --> 00:07:44.120 align:start position:0% constraint will be a value constraint uh 00:07:44.120 --> 00:07:51.070 align:start position:0% constraint will be a value constraint uh so<00:07:45.240> um<00:07:46.240> you've<00:07:46.840> got<00:07:48.120> attributes 00:07:51.070 --> 00:07:51.080 align:start position:0% so um you've got attributes 00:07:51.080 --> 00:07:53.189 align:start position:0% so um you've got attributes um<00:07:52.080> each<00:07:52.240> of<00:07:52.400> those<00:07:52.520> attributes<00:07:52.960> can<00:07:53.080> have 00:07:53.189 --> 00:07:53.199 align:start position:0% um each of those attributes can have 00:07:53.199 --> 00:07:56.510 align:start position:0% um each of those attributes can have sets<00:07:53.440> of<00:07:53.680> values<00:07:54.680> um<00:07:55.360> sometimes<00:07:55.879> you<00:07:56.199> have<00:07:56.319> to 00:07:56.510 --> 00:07:56.520 align:start position:0% sets of values um sometimes you have to 00:07:56.520 --> 00:07:57.990 align:start position:0% sets of values um sometimes you have to restrict<00:07:56.879> the<00:07:57.000> set<00:07:57.159> of<00:07:57.319> values<00:07:57.720> that<00:07:57.840> are 00:07:57.990 --> 00:07:58.000 align:start position:0% restrict the set of values that are 00:07:58.000 --> 00:08:00.469 align:start position:0% restrict the set of values that are allowed<00:07:58.440> in<00:07:58.560> a<00:07:58.720> certain<00:07:59.639> uh<00:07:59.800> in<00:07:59.879> a<00:08:00.039> certain 00:08:00.469 --> 00:08:00.479 align:start position:0% allowed in a certain uh in a certain 00:08:00.479 --> 00:08:02.749 align:start position:0% allowed in a certain uh in a certain object<00:08:00.800> in<00:08:00.919> a<00:08:01.039> certain<00:08:01.360> place<00:08:01.759> in<00:08:01.919> a<00:08:02.120> an<00:08:02.280> oscal 00:08:02.749 --> 00:08:02.759 align:start position:0% object in a certain place in a an oscal 00:08:02.759 --> 00:08:05.230 align:start position:0% object in a certain place in a an oscal schema<00:08:03.199> so<00:08:04.000> um<00:08:04.159> you<00:08:04.280> can<00:08:04.520> express<00:08:04.879> them<00:08:05.039> as 00:08:05.230 --> 00:08:05.240 align:start position:0% schema so um you can express them as 00:08:05.240 --> 00:08:09.430 align:start position:0% schema so um you can express them as either<00:08:06.159> a<00:08:06.400> value<00:08:07.280> or<00:08:07.680> a<00:08:07.919> set<00:08:08.159> of<00:08:08.400> values<00:08:09.120> so<00:08:09.360> it 00:08:09.430 --> 00:08:09.440 align:start position:0% either a value or a set of values so it 00:08:09.440 --> 00:08:12.390 align:start position:0% either a value or a set of values so it could<00:08:09.599> be<00:08:09.720> a<00:08:09.919> set<00:08:10.479> uh<00:08:10.759> set<00:08:10.919> of<00:08:11.360> properties<00:08:12.159> that 00:08:12.390 --> 00:08:12.400 align:start position:0% could be a set uh set of properties that 00:08:12.400 --> 00:08:14.510 align:start position:0% could be a set uh set of properties that if<00:08:12.639> if<00:08:12.759> one<00:08:12.879> of<00:08:13.039> them<00:08:13.240> is<00:08:13.520> is<00:08:13.680> one<00:08:13.960> the<00:08:14.080> other 00:08:14.510 --> 00:08:14.520 align:start position:0% if if one of them is is one the other 00:08:14.520 --> 00:08:17.189 align:start position:0% if if one of them is is one the other has<00:08:14.680> to<00:08:14.800> be<00:08:14.960> some<00:08:15.120> other<00:08:15.319> thing<00:08:15.759> right<00:08:16.599> um<00:08:17.039> and 00:08:17.189 --> 00:08:17.199 align:start position:0% has to be some other thing right um and 00:08:17.199 --> 00:08:19.430 align:start position:0% has to be some other thing right um and you<00:08:17.319> can<00:08:17.520> express<00:08:17.919> multiple<00:08:18.360> constraints<00:08:19.319> uh 00:08:19.430 --> 00:08:19.440 align:start position:0% you can express multiple constraints uh 00:08:19.440 --> 00:08:21.270 align:start position:0% you can express multiple constraints uh because<00:08:19.919> sometimes<00:08:20.159> there<00:08:20.520> there<00:08:20.960> there<00:08:21.080> are 00:08:21.270 --> 00:08:21.280 align:start position:0% because sometimes there there there are 00:08:21.280 --> 00:08:22.909 align:start position:0% because sometimes there there there are different<00:08:21.800> sets<00:08:22.080> of<00:08:22.319> properties<00:08:22.680> that<00:08:22.759> are 00:08:22.909 --> 00:08:22.919 align:start position:0% different sets of properties that are 00:08:22.919 --> 00:08:24.510 align:start position:0% different sets of properties that are available<00:08:23.199> to<00:08:23.319> an<00:08:23.479> object<00:08:24.039> and<00:08:24.159> I<00:08:24.240> know<00:08:24.400> this 00:08:24.510 --> 00:08:24.520 align:start position:0% available to an object and I know this 00:08:24.520 --> 00:08:25.629 align:start position:0% available to an object and I know this is<00:08:24.639> all<00:08:24.800> very<00:08:25.000> abstract<00:08:25.360> but<00:08:25.440> I'm<00:08:25.479> going<00:08:25.599> to 00:08:25.629 --> 00:08:25.639 align:start position:0% is all very abstract but I'm going to 00:08:25.639 --> 00:08:28.350 align:start position:0% is all very abstract but I'm going to give<00:08:25.759> you<00:08:25.840> an<00:08:25.960> example<00:08:26.240> so<00:08:26.400> don't<00:08:26.840> worry<00:08:27.840> um 00:08:28.350 --> 00:08:28.360 align:start position:0% give you an example so don't worry um 00:08:28.360 --> 00:08:30.710 align:start position:0% give you an example so don't worry um within<00:08:28.879> a<00:08:29.039> constraint 00:08:30.710 --> 00:08:30.720 align:start position:0% within a constraint 00:08:30.720 --> 00:08:34.269 align:start position:0% within a constraint um<00:08:31.240> you<00:08:31.440> basically<00:08:31.960> have<00:08:32.080> to<00:08:32.560> and<00:08:33.560> and<00:08:33.800> then 00:08:34.269 --> 00:08:34.279 align:start position:0% um you basically have to and and then 00:08:34.279 --> 00:08:38.070 align:start position:0% um you basically have to and and then between<00:08:35.360> constraints<00:08:36.360> um<00:08:36.719> you<00:08:36.880> can<00:08:37.159> or<00:08:37.760> and<00:08:38.000> I 00:08:38.070 --> 00:08:38.080 align:start position:0% between constraints um you can or and I 00:08:38.080 --> 00:08:41.709 align:start position:0% between constraints um you can or and I know<00:08:38.320> that<00:08:38.440> didn't<00:08:38.680> make<00:08:38.880> any<00:08:39.120> sense<00:08:40.440> um<00:08:41.440> again 00:08:41.709 --> 00:08:41.719 align:start position:0% know that didn't make any sense um again 00:08:41.719 --> 00:08:43.829 align:start position:0% know that didn't make any sense um again I'll<00:08:41.839> show<00:08:42.000> you<00:08:42.080> an 00:08:43.829 --> 00:08:43.839 align:start position:0% I'll show you an 00:08:43.839 --> 00:08:46.150 align:start position:0% I'll show you an example<00:08:44.839> in<00:08:45.000> the<00:08:45.120> metas<00:08:45.519> schema 00:08:46.150 --> 00:08:46.160 align:start position:0% example in the metas schema 00:08:46.160 --> 00:08:48.230 align:start position:0% example in the metas schema specification<00:08:46.920> look<00:08:47.080> out<00:08:47.279> for<00:08:47.519> something 00:08:48.230 --> 00:08:48.240 align:start position:0% specification look out for something 00:08:48.240 --> 00:08:51.070 align:start position:0% specification look out for something that<00:08:48.440> says<00:08:48.920> in<00:08:49.120> the<00:08:49.839> in<00:08:50.000> on<00:08:50.120> the<00:08:50.279> website<00:08:50.720> it<00:08:50.920> it 00:08:51.070 --> 00:08:51.080 align:start position:0% that says in the in on the website it it 00:08:51.080 --> 00:08:53.990 align:start position:0% that says in the in on the website it it says<00:08:51.680> maybe<00:08:52.120> locally<00:08:52.640> defined<00:08:53.640> but<00:08:53.800> in<00:08:53.880> the 00:08:53.990 --> 00:08:54.000 align:start position:0% says maybe locally defined but in the 00:08:54.000 --> 00:08:55.870 align:start position:0% says maybe locally defined but in the meta<00:08:54.320> schema<00:08:54.680> specification<00:08:55.360> itself<00:08:55.680> you'll 00:08:55.870 --> 00:08:55.880 align:start position:0% meta schema specification itself you'll 00:08:55.880 --> 00:08:59.710 align:start position:0% meta schema specification itself you'll see<00:08:56.200> allow<00:08:56.760> other<00:08:57.399> equals<00:08:57.920> yes<00:08:58.839> but<00:08:59.079> that 00:08:59.710 --> 00:08:59.720 align:start position:0% see allow other equals yes but that 00:08:59.720 --> 00:09:01.590 align:start position:0% see allow other equals yes but that basically<00:09:00.160> means<00:09:00.680> is<00:09:00.880> that<00:09:01.040> there's<00:09:01.240> a 00:09:01.590 --> 00:09:01.600 align:start position:0% basically means is that there's a 00:09:01.600 --> 00:09:04.910 align:start position:0% basically means is that there's a recommended<00:09:02.360> set<00:09:02.880> of<00:09:03.519> restrictions<00:09:04.519> but<00:09:04.680> that 00:09:04.910 --> 00:09:04.920 align:start position:0% recommended set of restrictions but that 00:09:04.920 --> 00:09:07.590 align:start position:0% recommended set of restrictions but that other<00:09:05.160> values<00:09:05.519> are<00:09:05.760> allowed<00:09:06.760> so<00:09:07.160> this<00:09:07.399> was<00:09:07.519> a 00:09:07.590 --> 00:09:07.600 align:start position:0% other values are allowed so this was a 00:09:07.600 --> 00:09:10.350 align:start position:0% other values are allowed so this was a little<00:09:07.880> tough<00:09:08.120> for<00:09:08.320> me<00:09:09.240> um<00:09:09.680> and<00:09:09.959> I<00:09:10.120> just 00:09:10.350 --> 00:09:10.360 align:start position:0% little tough for me um and I just 00:09:10.360 --> 00:09:13.269 align:start position:0% little tough for me um and I just ignored<00:09:10.800> it<00:09:11.240> because<00:09:11.880> it's<00:09:12.200> not<00:09:12.839> compliant 00:09:13.269 --> 00:09:13.279 align:start position:0% ignored it because it's not compliant 00:09:13.279 --> 00:09:15.790 align:start position:0% ignored it because it's not compliant with<00:09:13.399> the<00:09:13.920> specification<00:09:14.920> but<00:09:15.160> I<00:09:15.279> just<00:09:15.519> didn't 00:09:15.790 --> 00:09:15.800 align:start position:0% with the specification but I just didn't 00:09:15.800 --> 00:09:18.150 align:start position:0% with the specification but I just didn't like<00:09:16.000> the<00:09:16.160> idea<00:09:16.480> of<00:09:16.600> an<00:09:16.839> optional<00:09:17.360> restriction 00:09:18.150 --> 00:09:18.160 align:start position:0% like the idea of an optional restriction 00:09:18.160 --> 00:09:20.630 align:start position:0% like the idea of an optional restriction right<00:09:18.320> it's<00:09:18.480> either<00:09:18.720> a<00:09:19.320> restriction<00:09:20.320> or<00:09:20.480> it's 00:09:20.630 --> 00:09:20.640 align:start position:0% right it's either a restriction or it's 00:09:20.640 --> 00:09:23.630 align:start position:0% right it's either a restriction or it's not<00:09:20.760> a<00:09:20.920> restriction<00:09:21.800> so<00:09:22.800> I<00:09:22.959> ignored<00:09:23.519> the 00:09:23.630 --> 00:09:23.640 align:start position:0% not a restriction so I ignored the 00:09:23.640 --> 00:09:26.110 align:start position:0% not a restriction so I ignored the allowed<00:09:24.200> all<00:09:24.480> allow<00:09:24.839> other<00:09:25.160> yes<00:09:25.600> with<00:09:25.880> with 00:09:26.110 --> 00:09:26.120 align:start position:0% allowed all allow other yes with with 00:09:26.120 --> 00:09:30.110 align:start position:0% allowed all allow other yes with with one<00:09:26.839> exception<00:09:27.839> um<00:09:28.720> uh<00:09:28.839> and<00:09:28.959> generally<00:09:29.480> I<00:09:29.560> said 00:09:30.110 --> 00:09:30.120 align:start position:0% one exception um uh and generally I said 00:09:30.120 --> 00:09:31.870 align:start position:0% one exception um uh and generally I said you<00:09:30.240> know<00:09:30.440> if<00:09:30.560> it's<00:09:30.800> if<00:09:30.880> it's<00:09:31.120> restricted<00:09:31.560> data 00:09:31.870 --> 00:09:31.880 align:start position:0% you know if it's if it's restricted data 00:09:31.880 --> 00:09:34.110 align:start position:0% you know if it's if it's restricted data object<00:09:32.160> it's<00:09:32.519> restricted<00:09:33.519> um<00:09:33.720> and<00:09:33.839> then<00:09:33.959> I 00:09:34.110 --> 00:09:34.120 align:start position:0% object it's restricted um and then I 00:09:34.120 --> 00:09:37.150 align:start position:0% object it's restricted um and then I made<00:09:34.279> sure<00:09:34.480> that<00:09:34.600> it<00:09:34.720> was<00:09:35.160> trivial<00:09:35.680> to<00:09:36.160> extend 00:09:37.150 --> 00:09:37.160 align:start position:0% made sure that it was trivial to extend 00:09:37.160 --> 00:09:39.470 align:start position:0% made sure that it was trivial to extend oscal<00:09:37.880> so<00:09:38.079> if<00:09:38.200> you<00:09:38.360> need<00:09:38.600> to<00:09:38.800> have<00:09:38.959> your<00:09:39.120> own 00:09:39.470 --> 00:09:39.480 align:start position:0% oscal so if you need to have your own 00:09:39.480 --> 00:09:42.269 align:start position:0% oscal so if you need to have your own property<00:09:40.480> you<00:09:40.640> can<00:09:40.839> always<00:09:41.120> create<00:09:41.360> a<00:09:41.519> new 00:09:42.269 --> 00:09:42.279 align:start position:0% property you can always create a new 00:09:42.279 --> 00:09:46.150 align:start position:0% property you can always create a new subass<00:09:43.279> extend<00:09:43.760> oscal<00:09:44.760> properties<00:09:45.640> to<00:09:45.880> have 00:09:46.150 --> 00:09:46.160 align:start position:0% subass extend oscal properties to have 00:09:46.160 --> 00:09:48.110 align:start position:0% subass extend oscal properties to have whatever<00:09:46.480> you<00:09:46.640> want<00:09:47.320> but<00:09:47.480> you<00:09:47.600> have<00:09:47.720> to<00:09:47.839> do 00:09:48.110 --> 00:09:48.120 align:start position:0% whatever you want but you have to do 00:09:48.120 --> 00:09:49.750 align:start position:0% whatever you want but you have to do that<00:09:48.720> it's<00:09:48.880> not<00:09:49.040> like<00:09:49.200> we're<00:09:49.320> going<00:09:49.440> to<00:09:49.519> have<00:09:49.640> a 00:09:49.750 --> 00:09:49.760 align:start position:0% that it's not like we're going to have a 00:09:49.760 --> 00:09:51.310 align:start position:0% that it's not like we're going to have a restricted<00:09:50.200> thing<00:09:50.360> but<00:09:50.680> oh<00:09:50.839> by<00:09:50.920> the<00:09:51.040> way<00:09:51.160> put 00:09:51.310 --> 00:09:51.320 align:start position:0% restricted thing but oh by the way put 00:09:51.320 --> 00:09:52.990 align:start position:0% restricted thing but oh by the way put whatever<00:09:51.519> you<00:09:51.600> want<00:09:51.760> in<00:09:51.880> there 00:09:52.990 --> 00:09:53.000 align:start position:0% whatever you want in there 00:09:53.000 --> 00:09:56.670 align:start position:0% whatever you want in there so<00:09:54.000> um<00:09:54.959> I<00:09:55.440> I<00:09:55.800> understand<00:09:56.000> why<00:09:56.160> they<00:09:56.279> did<00:09:56.399> it<00:09:56.560> and 00:09:56.670 --> 00:09:56.680 align:start position:0% so um I I understand why they did it and 00:09:56.680 --> 00:09:59.069 align:start position:0% so um I I understand why they did it and as<00:09:56.800> I<00:09:56.959> said<00:09:57.160> one<00:09:57.279> of<00:09:57.480> my<00:09:57.800> one<00:09:57.959> of<00:09:58.200> my<00:09:58.680> models 00:09:59.069 --> 00:09:59.079 align:start position:0% as I said one of my one of my models 00:09:59.079 --> 00:10:01.949 align:start position:0% as I said one of my one of my models actually<00:09:59.800> has<00:10:00.320> allows<00:10:00.640> the<00:10:00.800> allow<00:10:01.040> all<00:10:01.399> but 00:10:01.949 --> 00:10:01.959 align:start position:0% actually has allows the allow all but 00:10:01.959 --> 00:10:03.310 align:start position:0% actually has allows the allow all but generally<00:10:02.320> I<00:10:02.399> didn't<00:10:02.640> like 00:10:03.310 --> 00:10:03.320 align:start position:0% generally I didn't like 00:10:03.320 --> 00:10:08.310 align:start position:0% generally I didn't like it<00:10:04.320> snob<00:10:04.880> that<00:10:05.440> way<00:10:06.440> um<00:10:06.920> here<00:10:07.079> is<00:10:07.200> an<00:10:07.480> example 00:10:08.310 --> 00:10:08.320 align:start position:0% it snob that way um here is an example 00:10:08.320 --> 00:10:12.710 align:start position:0% it snob that way um here is an example of<00:10:09.320> a<00:10:09.760> property<00:10:10.760> and<00:10:10.920> a<00:10:11.040> set<00:10:11.160> of<00:10:11.720> restrictions 00:10:12.710 --> 00:10:12.720 align:start position:0% of a property and a set of restrictions 00:10:12.720 --> 00:10:15.910 align:start position:0% of a property and a set of restrictions um<00:10:12.920> so<00:10:13.120> you'll<00:10:13.360> see<00:10:14.120> this<00:10:14.399> again<00:10:14.800> is<00:10:15.079> not<00:10:15.560> meta 00:10:15.910 --> 00:10:15.920 align:start position:0% um so you'll see this again is not meta 00:10:15.920 --> 00:10:17.829 align:start position:0% um so you'll see this again is not meta schema<00:10:16.320> this<00:10:16.399> is<00:10:16.519> not<00:10:16.720> Json<00:10:17.120> schema<00:10:17.480> this<00:10:17.560> is 00:10:17.829 --> 00:10:17.839 align:start position:0% schema this is not Json schema this is 00:10:17.839 --> 00:10:21.829 align:start position:0% schema this is not Json schema this is python<00:10:18.760> but<00:10:19.160> uh<00:10:19.279> you<00:10:19.360> will<00:10:19.600> see<00:10:20.480> that<00:10:21.000> um<00:10:21.640> there 00:10:21.829 --> 00:10:21.839 align:start position:0% python but uh you will see that um there 00:10:21.839 --> 00:10:27.470 align:start position:0% python but uh you will see that um there are<00:10:22.720> some<00:10:22.959> options<00:10:24.200> so<00:10:25.200> you<00:10:25.360> can<00:10:25.519> see<00:10:26.240> that<00:10:27.240> if 00:10:27.470 --> 00:10:27.480 align:start position:0% are some options so you can see that if 00:10:27.480 --> 00:10:30.550 align:start position:0% are some options so you can see that if the<00:10:27.640> name<00:10:28.200> of<00:10:28.399> the<00:10:28.600> property<00:10:29.120> is<00:10:29.360> is<00:10:29.920> type<00:10:30.440> if 00:10:30.550 --> 00:10:30.560 align:start position:0% the name of the property is is type if 00:10:30.560 --> 00:10:32.750 align:start position:0% the name of the property is is type if the<00:10:30.760> name<00:10:31.079> field<00:10:31.519> in<00:10:31.640> the<00:10:31.839> property<00:10:32.440> has<00:10:32.560> a 00:10:32.750 --> 00:10:32.760 align:start position:0% the name field in the property has a 00:10:32.760 --> 00:10:36.470 align:start position:0% the name field in the property has a value<00:10:33.079> of<00:10:33.560> type<00:10:34.560> then<00:10:35.560> the<00:10:35.800> value<00:10:36.160> of<00:10:36.279> the 00:10:36.470 --> 00:10:36.480 align:start position:0% value of type then the value of the 00:10:36.480 --> 00:10:38.910 align:start position:0% value of type then the value of the property<00:10:36.880> can<00:10:37.040> be<00:10:37.320> one<00:10:37.519> of<00:10:38.120> a<00:10:38.279> long<00:10:38.560> list<00:10:38.720> of 00:10:38.910 --> 00:10:38.920 align:start position:0% property can be one of a long list of 00:10:38.920 --> 00:10:40.629 align:start position:0% property can be one of a long list of things<00:10:39.320> I<00:10:39.440> had<00:10:39.560> to<00:10:39.880> cut<00:10:40.079> the<00:10:40.200> list<00:10:40.360> short 00:10:40.629 --> 00:10:40.639 align:start position:0% things I had to cut the list short 00:10:40.639 --> 00:10:41.870 align:start position:0% things I had to cut the list short because<00:10:40.800> it<00:10:40.920> was<00:10:41.079> really 00:10:41.870 --> 00:10:41.880 align:start position:0% because it was really 00:10:41.880 --> 00:10:44.870 align:start position:0% because it was really long<00:10:42.880> so<00:10:43.399> that's<00:10:43.560> an<00:10:43.720> or<00:10:44.160> any<00:10:44.320> of<00:10:44.440> those<00:10:44.600> values 00:10:44.870 --> 00:10:44.880 align:start position:0% long so that's an or any of those values 00:10:44.880 --> 00:10:45.590 align:start position:0% long so that's an or any of those values are 00:10:45.590 --> 00:10:45.600 align:start position:0% are 00:10:45.600 --> 00:10:49.230 align:start position:0% are appropriate<00:10:46.600> however<00:10:47.800> um<00:10:48.800> any<00:10:48.959> of<00:10:49.120> those 00:10:49.230 --> 00:10:49.240 align:start position:0% appropriate however um any of those 00:10:49.240 --> 00:10:52.030 align:start position:0% appropriate however um any of those values<00:10:49.519> are<00:10:49.720> appropriate<00:10:50.279> only 00:10:52.030 --> 00:10:52.040 align:start position:0% values are appropriate only 00:10:52.040 --> 00:10:55.269 align:start position:0% values are appropriate only if<00:10:53.040> the<00:10:53.360> prop<00:10:53.680> the<00:10:53.920> uh<00:10:54.079> name<00:10:54.519> property<00:10:54.920> has<00:10:55.040> a 00:10:55.269 --> 00:10:55.279 align:start position:0% if the prop the uh name property has a 00:10:55.279 --> 00:10:58.230 align:start position:0% if the prop the uh name property has a value<00:10:55.720> of<00:10:56.000> type<00:10:56.839> so<00:10:57.160> in<00:10:57.320> that<00:10:57.560> case<00:10:57.920> it's<00:10:58.079> an 00:10:58.230 --> 00:10:58.240 align:start position:0% value of type so in that case it's an 00:10:58.240 --> 00:11:00.870 align:start position:0% value of type so in that case it's an end<00:10:58.800> right<00:10:58.959> and<00:10:59.040> so<00:10:59.519> my<00:10:59.680> logic<00:11:00.120> in<00:11:00.320> my<00:11:00.519> core 00:11:00.870 --> 00:11:00.880 align:start position:0% end right and so my logic in my core 00:11:00.880 --> 00:11:03.350 align:start position:0% end right and so my logic in my core processor<00:11:01.399> reflects<00:11:01.880> that<00:11:02.839> um<00:11:03.000> but<00:11:03.160> wait 00:11:03.350 --> 00:11:03.360 align:start position:0% processor reflects that um but wait 00:11:03.360 --> 00:11:06.350 align:start position:0% processor reflects that um but wait there's<00:11:03.600> more<00:11:04.480> because<00:11:05.480> um<00:11:05.639> you<00:11:05.720> will<00:11:05.920> see 00:11:06.350 --> 00:11:06.360 align:start position:0% there's more because um you will see 00:11:06.360 --> 00:11:10.069 align:start position:0% there's more because um you will see that<00:11:06.920> um<00:11:07.720> version<00:11:08.440> is<00:11:08.760> also<00:11:09.079> a<00:11:09.480> perfectly 00:11:10.069 --> 00:11:10.079 align:start position:0% that um version is also a perfectly 00:11:10.079 --> 00:11:13.110 align:start position:0% that um version is also a perfectly valid<00:11:10.639> value<00:11:11.079> for<00:11:11.320> the<00:11:11.480> name<00:11:12.000> property<00:11:12.800> of<00:11:12.920> a 00:11:13.110 --> 00:11:13.120 align:start position:0% valid value for the name property of a 00:11:13.120 --> 00:11:15.509 align:start position:0% valid value for the name property of a resource<00:11:13.680> in<00:11:13.880> this<00:11:14.200> particular<00:11:14.920> location<00:11:15.440> in 00:11:15.509 --> 00:11:15.519 align:start position:0% resource in this particular location in 00:11:15.519 --> 00:11:19.230 align:start position:0% resource in this particular location in an<00:11:15.680> oscal<00:11:16.120> document<00:11:16.920> so<00:11:17.880> um<00:11:18.200> if<00:11:18.440> the<00:11:18.839> if<00:11:18.959> the 00:11:19.230 --> 00:11:19.240 align:start position:0% an oscal document so um if the if the 00:11:19.240 --> 00:11:23.350 align:start position:0% an oscal document so um if the if the value<00:11:19.839> is<00:11:20.200> name<00:11:21.200> or<00:11:21.959> type<00:11:22.760> I'm<00:11:22.880> sorry<00:11:23.079> if<00:11:23.200> the 00:11:23.350 --> 00:11:23.360 align:start position:0% value is name or type I'm sorry if the 00:11:23.360 --> 00:11:25.910 align:start position:0% value is name or type I'm sorry if the value<00:11:23.639> of<00:11:23.839> name<00:11:24.160> of<00:11:24.279> the<00:11:24.360> name<00:11:24.639> property<00:11:25.120> is 00:11:25.910 --> 00:11:25.920 align:start position:0% value of name of the name property is 00:11:25.920 --> 00:11:29.030 align:start position:0% value of name of the name property is version<00:11:26.399> or<00:11:26.639> type<00:11:27.000> or<00:11:27.240> published<00:11:27.920> that's<00:11:28.160> fine 00:11:29.030 --> 00:11:29.040 align:start position:0% version or type or published that's fine 00:11:29.040 --> 00:11:31.069 align:start position:0% version or type or published that's fine but<00:11:29.519> if<00:11:29.639> it's<00:11:29.839> type<00:11:30.480> there<00:11:30.560> are<00:11:30.720> a<00:11:30.800> lot<00:11:30.920> of 00:11:31.069 --> 00:11:31.079 align:start position:0% but if it's type there are a lot of 00:11:31.079 --> 00:11:34.389 align:start position:0% but if it's type there are a lot of other<00:11:31.279> restrictions<00:11:32.279> so<00:11:32.959> um<00:11:33.680> you'll<00:11:33.880> see<00:11:34.160> this 00:11:34.389 --> 00:11:34.399 align:start position:0% other restrictions so um you'll see this 00:11:34.399 --> 00:11:37.870 align:start position:0% other restrictions so um you'll see this encoded<00:11:35.240> in<00:11:35.920> um<00:11:36.519> in<00:11:36.639> the<00:11:36.760> oscal<00:11:37.279> specification 00:11:37.870 --> 00:11:37.880 align:start position:0% encoded in um in the oscal specification 00:11:37.880 --> 00:11:39.829 align:start position:0% encoded in um in the oscal specification in<00:11:38.040> metaschema<00:11:38.560> it<00:11:39.040> can<00:11:39.160> be<00:11:39.320> a<00:11:39.399> little<00:11:39.600> bit 00:11:39.829 --> 00:11:39.839 align:start position:0% in metaschema it can be a little bit 00:11:39.839 --> 00:11:43.310 align:start position:0% in metaschema it can be a little bit tricky<00:11:40.120> to<00:11:40.240> figure<00:11:40.519> out<00:11:41.240> so<00:11:41.800> um<00:11:42.440> uh<00:11:42.600> you<00:11:42.720> know 00:11:43.310 --> 00:11:43.320 align:start position:0% tricky to figure out so um uh you know 00:11:43.320 --> 00:11:45.590 align:start position:0% tricky to figure out so um uh you know feel<00:11:43.720> feel<00:11:43.920> free<00:11:44.079> to<00:11:44.200> look<00:11:44.320> at<00:11:44.440> my<00:11:44.600> represent 00:11:45.590 --> 00:11:45.600 align:start position:0% feel feel free to look at my represent 00:11:45.600 --> 00:11:49.750 align:start position:0% feel feel free to look at my represent my<00:11:46.839> um<00:11:47.839> code<00:11:48.720> I<00:11:48.760> think<00:11:48.920> I<00:11:49.040> got<00:11:49.160> all<00:11:49.320> these<00:11:49.560> right 00:11:49.750 --> 00:11:49.760 align:start position:0% my um code I think I got all these right 00:11:49.760 --> 00:11:53.790 align:start position:0% my um code I think I got all these right I'm<00:11:49.839> not<00:11:49.959> even<00:11:50.120> sure<00:11:50.399> myself<00:11:50.800> if<00:11:51.800> works<00:11:52.800> so 00:11:53.790 --> 00:11:53.800 align:start position:0% I'm not even sure myself if works so 00:11:53.800 --> 00:11:57.310 align:start position:0% I'm not even sure myself if works so um<00:11:54.800> that<00:11:54.920> is<00:11:55.120> value<00:11:55.560> constraints<00:11:56.560> um<00:11:56.920> another 00:11:57.310 --> 00:11:57.320 align:start position:0% um that is value constraints um another 00:11:57.320 --> 00:12:00.509 align:start position:0% um that is value constraints um another thing<00:11:57.839> that<00:11:58.160> I<00:11:58.720> actually<00:11:59.000> just<00:11:59.279> just<00:11:59.519> invented 00:12:00.509 --> 00:12:00.519 align:start position:0% thing that I actually just just invented 00:12:00.519 --> 00:12:03.629 align:start position:0% thing that I actually just just invented um<00:12:01.240> I<00:12:01.399> have<00:12:01.600> the<00:12:01.760> benefit<00:12:02.240> of<00:12:02.440> working<00:12:03.399> uh<00:12:03.560> in 00:12:03.629 --> 00:12:03.639 align:start position:0% um I have the benefit of working uh in 00:12:03.639 --> 00:12:06.269 align:start position:0% um I have the benefit of working uh in an<00:12:03.800> objectoriented<00:12:04.440> language<00:12:05.399> so<00:12:05.800> I<00:12:05.959> can 00:12:06.269 --> 00:12:06.279 align:start position:0% an objectoriented language so I can 00:12:06.279 --> 00:12:09.110 align:start position:0% an objectoriented language so I can create<00:12:06.880> sub<00:12:07.320> classes<00:12:07.920> and<00:12:08.160> I<00:12:08.600> invented<00:12:09.000> a 00:12:09.110 --> 00:12:09.120 align:start position:0% create sub classes and I invented a 00:12:09.120 --> 00:12:11.150 align:start position:0% create sub classes and I invented a thing<00:12:09.279> called<00:12:09.519> type<00:12:10.200> it's<00:12:10.399> important<00:12:11.040> I'm 00:12:11.150 --> 00:12:11.160 align:start position:0% thing called type it's important I'm 00:12:11.160 --> 00:12:13.710 align:start position:0% thing called type it's important I'm sorry<00:12:11.920> I<00:12:12.000> should<00:12:12.200> be<00:12:12.440> very<00:12:12.680> clear<00:12:13.240> I<00:12:13.360> did<00:12:13.519> not 00:12:13.710 --> 00:12:13.720 align:start position:0% sorry I should be very clear I did not 00:12:13.720 --> 00:12:16.910 align:start position:0% sorry I should be very clear I did not invent<00:12:14.120> type<00:12:15.120> I<00:12:15.320> invented<00:12:15.760> type<00:12:16.360> applied<00:12:16.800> in 00:12:16.910 --> 00:12:16.920 align:start position:0% invent type I invented type applied in 00:12:16.920 --> 00:12:19.910 align:start position:0% invent type I invented type applied in the<00:12:17.040> oscal<00:12:17.519> context<00:12:18.240> to<00:12:18.399> a<00:12:18.519> metaschema 00:12:19.910 --> 00:12:19.920 align:start position:0% the oscal context to a metaschema 00:12:19.920 --> 00:12:22.750 align:start position:0% the oscal context to a metaschema specification<00:12:20.920> um<00:12:21.800> uh<00:12:22.000> they<00:12:22.120> don't<00:12:22.360> exist<00:12:22.639> in 00:12:22.750 --> 00:12:22.760 align:start position:0% specification um uh they don't exist in 00:12:22.760 --> 00:12:24.670 align:start position:0% specification um uh they don't exist in metaschema<00:12:23.240> metaschema<00:12:23.760> has<00:12:24.079> assemblies<00:12:24.560> but 00:12:24.670 --> 00:12:24.680 align:start position:0% metaschema metaschema has assemblies but 00:12:24.680 --> 00:12:26.710 align:start position:0% metaschema metaschema has assemblies but they<00:12:24.760> don't<00:12:25.000> really<00:12:25.240> have<00:12:25.959> uh<00:12:26.160> types<00:12:26.480> in<00:12:26.560> the 00:12:26.710 --> 00:12:26.720 align:start position:0% they don't really have uh types in the 00:12:26.720 --> 00:12:29.829 align:start position:0% they don't really have uh types in the way<00:12:26.880> that<00:12:27.079> I<00:12:27.240> use<00:12:27.519> them<00:12:28.040> which<00:12:28.199> is<00:12:28.399> for<00:12:28.720> FL 00:12:29.829 --> 00:12:29.839 align:start position:0% way that I use them which is for FL 00:12:29.839 --> 00:12:32.350 align:start position:0% way that I use them which is for FL of<00:12:30.199> a<00:12:30.639> property<00:12:31.240> properties<00:12:31.839> property<00:12:32.120> is<00:12:32.199> the 00:12:32.350 --> 00:12:32.360 align:start position:0% of a property properties property is the 00:12:32.360 --> 00:12:34.189 align:start position:0% of a property properties property is the big<00:12:32.480> one<00:12:32.720> because<00:12:32.920> there<00:12:33.399> there's<00:12:33.639> a<00:12:34.040> there's 00:12:34.189 --> 00:12:34.199 align:start position:0% big one because there there's a there's 00:12:34.199 --> 00:12:35.710 align:start position:0% big one because there there's a there's a<00:12:34.440> property<00:12:34.800> that<00:12:34.959> has<00:12:35.079> a<00:12:35.279> it<00:12:35.399> has<00:12:35.519> a 00:12:35.710 --> 00:12:35.720 align:start position:0% a property that has a it has a 00:12:35.720 --> 00:12:40.430 align:start position:0% a property that has a it has a specification<00:12:36.480> of<00:12:36.880> of<00:12:37.519> um<00:12:38.760> uh<00:12:39.760> values<00:12:40.240> and 00:12:40.430 --> 00:12:40.440 align:start position:0% specification of of um uh values and 00:12:40.440 --> 00:12:43.670 align:start position:0% specification of of um uh values and Fields<00:12:40.839> and<00:12:41.040> Fields<00:12:41.360> and<00:12:41.560> values<00:12:42.399> but<00:12:42.839> um<00:12:43.519> uh 00:12:43.670 --> 00:12:43.680 align:start position:0% Fields and Fields and values but um uh 00:12:43.680 --> 00:12:46.269 align:start position:0% Fields and Fields and values but um uh there<00:12:43.800> are<00:12:44.000> a<00:12:44.199> lot<00:12:44.360> of<00:12:44.839> variation<00:12:45.839> and<00:12:46.120> the 00:12:46.269 --> 00:12:46.279 align:start position:0% there are a lot of variation and the 00:12:46.279 --> 00:12:48.590 align:start position:0% there are a lot of variation and the variation<00:12:46.800> depends<00:12:47.160> on<00:12:47.519> where<00:12:47.839> in<00:12:48.000> a<00:12:48.240> document 00:12:48.590 --> 00:12:48.600 align:start position:0% variation depends on where in a document 00:12:48.600 --> 00:12:50.750 align:start position:0% variation depends on where in a document it<00:12:48.760> appears<00:12:49.240> so<00:12:49.519> it<00:12:49.680> was<00:12:50.040> really<00:12:50.279> just 00:12:50.750 --> 00:12:50.760 align:start position:0% it appears so it was really just 00:12:50.760 --> 00:12:55.150 align:start position:0% it appears so it was really just screaming<00:12:51.839> out<00:12:52.880> for<00:12:53.880> um<00:12:54.480> lots<00:12:54.720> and<00:12:54.839> lots<00:12:55.040> of 00:12:55.150 --> 00:12:55.160 align:start position:0% screaming out for um lots and lots of 00:12:55.160 --> 00:12:59.470 align:start position:0% screaming out for um lots and lots of subclassing<00:12:55.959> so<00:12:56.240> that's<00:12:56.399> what<00:12:56.519> I<00:12:56.680> did<00:12:57.760> um<00:12:58.760> so 00:12:59.470 --> 00:12:59.480 align:start position:0% subclassing so that's what I did um so 00:12:59.480 --> 00:13:01.910 align:start position:0% subclassing so that's what I did um so uh<00:12:59.680> every<00:12:59.920> time<00:13:00.279> there's<00:13:00.639> a<00:13:00.959> value<00:13:01.320> constraint 00:13:01.910 --> 00:13:01.920 align:start position:0% uh every time there's a value constraint 00:13:01.920 --> 00:13:07.550 align:start position:0% uh every time there's a value constraint that's<00:13:02.160> a<00:13:02.320> new<00:13:02.760> subass<00:13:03.760> um<00:13:04.240> and<00:13:04.920> inside<00:13:05.920> the<00:13:06.560> um 00:13:07.550 --> 00:13:07.560 align:start position:0% that's a new subass um and inside the um 00:13:07.560 --> 00:13:11.590 align:start position:0% that's a new subass um and inside the um uh<00:13:08.399> inside<00:13:08.920> the<00:13:09.279> the<00:13:10.120> larger<00:13:10.839> objects<00:13:11.399> that 00:13:11.590 --> 00:13:11.600 align:start position:0% uh inside the the larger objects that 00:13:11.600 --> 00:13:15.269 align:start position:0% uh inside the the larger objects that incorporate<00:13:12.480> Properties<00:13:13.120> or<00:13:13.480> other<00:13:14.320> types<00:13:14.800> of 00:13:15.269 --> 00:13:15.279 align:start position:0% incorporate Properties or other types of 00:13:15.279 --> 00:13:20.030 align:start position:0% incorporate Properties or other types of of<00:13:15.560> oscal<00:13:16.360> objects<00:13:17.360> um<00:13:18.199> you<00:13:18.399> can<00:13:18.680> Define<00:13:19.519> which 00:13:20.030 --> 00:13:20.040 align:start position:0% of oscal objects um you can Define which 00:13:20.040 --> 00:13:23.230 align:start position:0% of oscal objects um you can Define which of<00:13:20.199> the<00:13:20.399> types<00:13:20.959> which<00:13:21.079> of<00:13:21.240> the<00:13:21.760> flavors<00:13:22.760> are 00:13:23.230 --> 00:13:23.240 align:start position:0% of the types which of the flavors are 00:13:23.240 --> 00:13:28.750 align:start position:0% of the types which of the flavors are allow<00:13:24.240> so<00:13:24.959> um<00:13:25.240> here<00:13:25.440> you'll<00:13:25.760> see<00:13:26.760> um<00:13:27.519> I<00:13:27.720> have<00:13:28.279> a 00:13:28.750 --> 00:13:28.760 align:start position:0% allow so um here you'll see um I have a 00:13:28.760 --> 00:13:30.069 align:start position:0% allow so um here you'll see um I have a a 00:13:30.069 --> 00:13:30.079 align:start position:0% a 00:13:30.079 --> 00:13:31.590 align:start position:0% a data<00:13:30.399> structure<00:13:30.760> it's<00:13:30.880> a<00:13:31.000> dictionary<00:13:31.440> it's 00:13:31.590 --> 00:13:31.600 align:start position:0% data structure it's a dictionary it's 00:13:31.600 --> 00:13:34.110 align:start position:0% data structure it's a dictionary it's actually<00:13:31.760> a<00:13:31.880> list<00:13:32.079> of<00:13:32.600> dictionaries<00:13:33.600> um 00:13:34.110 --> 00:13:34.120 align:start position:0% actually a list of dictionaries um 00:13:34.120 --> 00:13:36.269 align:start position:0% actually a list of dictionaries um called<00:13:34.399> allowed<00:13:34.720> field<00:13:35.120> types<00:13:35.920> and<00:13:36.040> it 00:13:36.269 --> 00:13:36.279 align:start position:0% called allowed field types and it 00:13:36.279 --> 00:13:42.110 align:start position:0% called allowed field types and it specifies<00:13:36.920> that<00:13:37.199> in<00:13:37.360> the<00:13:38.120> props<00:13:39.440> field<00:13:40.440> um<00:13:41.160> the 00:13:42.110 --> 00:13:42.120 align:start position:0% specifies that in the props field um the 00:13:42.120 --> 00:13:45.150 align:start position:0% specifies that in the props field um the um<00:13:43.120> the<00:13:43.399> props<00:13:43.880> field<00:13:44.279> will<00:13:44.480> contain<00:13:44.800> an 00:13:45.150 --> 00:13:45.160 align:start position:0% um the props field will contain an 00:13:45.160 --> 00:13:48.509 align:start position:0% um the props field will contain an object<00:13:46.160> it'll<00:13:46.600> it'll<00:13:46.920> conform<00:13:47.440> to<00:13:47.639> the<00:13:47.839> base 00:13:48.509 --> 00:13:48.519 align:start position:0% object it'll it'll conform to the base 00:13:48.519 --> 00:13:50.230 align:start position:0% object it'll it'll conform to the base property<00:13:49.040> specification<00:13:49.800> right<00:13:49.920> it'll<00:13:50.160> have 00:13:50.230 --> 00:13:50.240 align:start position:0% property specification right it'll have 00:13:50.240 --> 00:13:52.350 align:start position:0% property specification right it'll have a<00:13:50.399> name<00:13:50.639> a<00:13:50.759> uu<00:13:51.040> ID<00:13:51.279> a<00:13:51.360> name<00:13:51.560> space<00:13:51.800> a<00:13:51.959> value<00:13:52.240> all 00:13:52.350 --> 00:13:52.360 align:start position:0% a name a uu ID a name space a value all 00:13:52.360 --> 00:13:55.749 align:start position:0% a name a uu ID a name space a value all those<00:13:52.519> other<00:13:52.759> things<00:13:53.720> but<00:13:54.480> the<00:13:55.199> permitted 00:13:55.749 --> 00:13:55.759 align:start position:0% those other things but the permitted 00:13:55.759 --> 00:13:58.670 align:start position:0% those other things but the permitted values<00:13:56.759> will<00:13:56.959> be<00:13:57.240> further<00:13:57.680> constrained<00:13:58.560> and 00:13:58.670 --> 00:13:58.680 align:start position:0% values will be further constrained and 00:13:58.680 --> 00:14:01.829 align:start position:0% values will be further constrained and must<00:13:59.160> comply<00:13:59.600> with<00:13:59.759> one<00:13:59.920> of<00:14:00.120> these<00:14:00.440> three 00:14:01.829 --> 00:14:01.839 align:start position:0% must comply with one of these three 00:14:01.839 --> 00:14:04.710 align:start position:0% must comply with one of these three flavors<00:14:02.839> so<00:14:03.160> that<00:14:03.480> logic<00:14:04.320> again<00:14:04.560> is 00:14:04.710 --> 00:14:04.720 align:start position:0% flavors so that logic again is 00:14:04.720 --> 00:14:07.629 align:start position:0% flavors so that logic again is implemented<00:14:05.199> in<00:14:05.320> the<00:14:05.440> base<00:14:05.920> class<00:14:06.920> uh<00:14:07.320> and<00:14:07.399> so 00:14:07.629 --> 00:14:07.639 align:start position:0% implemented in the base class uh and so 00:14:07.639 --> 00:14:09.629 align:start position:0% implemented in the base class uh and so that<00:14:08.120> kind<00:14:08.240> of<00:14:08.399> takes<00:14:08.639> the<00:14:08.759> metaschema 00:14:09.629 --> 00:14:09.639 align:start position:0% that kind of takes the metaschema 00:14:09.639 --> 00:14:12.990 align:start position:0% that kind of takes the metaschema concept<00:14:10.639> and<00:14:10.920> and<00:14:11.079> makes<00:14:11.279> it<00:14:11.600> feel<00:14:12.120> very<00:14:12.399> much 00:14:12.990 --> 00:14:13.000 align:start position:0% concept and and makes it feel very much 00:14:13.000 --> 00:14:17.749 align:start position:0% concept and and makes it feel very much like<00:14:14.000> you<00:14:14.120> know<00:14:14.279> an<00:14:14.600> object-oriented 00:14:17.749 --> 00:14:17.759 align:start position:0% 00:14:17.759 --> 00:14:19.910 align:start position:0% specification<00:14:18.759> um<00:14:19.360> I'm<00:14:19.519> going<00:14:19.600> to<00:14:19.759> I'm<00:14:19.839> going 00:14:19.910 --> 00:14:19.920 align:start position:0% specification um I'm going to I'm going 00:14:19.920 --> 00:14:21.189 align:start position:0% specification um I'm going to I'm going to<00:14:20.040> move<00:14:20.199> on<00:14:20.399> hope<00:14:20.680> hopefully<00:14:21.000> that's 00:14:21.189 --> 00:14:21.199 align:start position:0% to move on hope hopefully that's 00:14:21.199 --> 00:14:23.230 align:start position:0% to move on hope hopefully that's reasonably 00:14:23.230 --> 00:14:23.240 align:start position:0% reasonably 00:14:23.240 --> 00:14:26.749 align:start position:0% reasonably clear<00:14:24.240> um<00:14:24.839> there<00:14:25.199> is<00:14:25.720> a<00:14:26.079> deprecation 00:14:26.749 --> 00:14:26.759 align:start position:0% clear um there is a deprecation 00:14:26.759 --> 00:14:28.749 align:start position:0% clear um there is a deprecation constraint<00:14:27.480> in<00:14:27.639> some<00:14:27.880> cases<00:14:28.240> in<00:14:28.360> the<00:14:28.480> meta 00:14:28.749 --> 00:14:28.759 align:start position:0% constraint in some cases in the meta 00:14:28.759 --> 00:14:30.590 align:start position:0% constraint in some cases in the meta schema<00:14:29.199> specification<00:14:29.800> or<00:14:30.000> in<00:14:30.079> the<00:14:30.160> oscal 00:14:30.590 --> 00:14:30.600 align:start position:0% schema specification or in the oscal 00:14:30.600 --> 00:14:32.910 align:start position:0% schema specification or in the oscal specification<00:14:31.600> you'll<00:14:31.800> see<00:14:32.000> a<00:14:32.199> value<00:14:32.600> that's 00:14:32.910 --> 00:14:32.920 align:start position:0% specification you'll see a value that's 00:14:32.920 --> 00:14:37.150 align:start position:0% specification you'll see a value that's technically<00:14:33.519> legal<00:14:34.040> but<00:14:34.399> deprecated<00:14:35.399> so<00:14:36.320> um 00:14:37.150 --> 00:14:37.160 align:start position:0% technically legal but deprecated so um 00:14:37.160 --> 00:14:40.910 align:start position:0% technically legal but deprecated so um great<00:14:37.399> example<00:14:38.160> in<00:14:38.959> uh<00:14:39.399> the<00:14:39.880> property<00:14:40.759> that 00:14:40.910 --> 00:14:40.920 align:start position:0% great example in uh the property that 00:14:40.920 --> 00:14:43.590 align:start position:0% great example in uh the property that you<00:14:41.040> can<00:14:41.320> associate<00:14:41.880> with<00:14:42.000> an<00:14:42.160> oscal<00:14:42.680> control 00:14:43.590 --> 00:14:43.600 align:start position:0% you can associate with an oscal control 00:14:43.600 --> 00:14:45.509 align:start position:0% you can associate with an oscal control again<00:14:43.839> it's<00:14:43.959> a<00:14:44.199> it's<00:14:44.320> a<00:14:44.440> different<00:14:44.680> flavor<00:14:45.160> of 00:14:45.509 --> 00:14:45.519 align:start position:0% again it's a it's a different flavor of 00:14:45.519 --> 00:14:50.710 align:start position:0% again it's a it's a different flavor of property<00:14:46.519> um<00:14:47.000> you<00:14:47.320> may<00:14:47.759> have<00:14:48.560> a<00:14:49.079> value<00:14:50.079> of 00:14:50.710 --> 00:14:50.720 align:start position:0% property um you may have a value of 00:14:50.720 --> 00:14:53.230 align:start position:0% property um you may have a value of warning<00:14:51.639> I'm<00:14:51.759> sorry<00:14:52.000> a<00:14:52.120> value<00:14:52.360> of 00:14:53.230 --> 00:14:53.240 align:start position:0% warning I'm sorry a value of 00:14:53.240 --> 00:14:56.230 align:start position:0% warning I'm sorry a value of withdrawn<00:14:54.240> but<00:14:54.440> withdrawn<00:14:55.000> can<00:14:55.240> be 00:14:56.230 --> 00:14:56.240 align:start position:0% withdrawn but withdrawn can be 00:14:56.240 --> 00:14:59.710 align:start position:0% withdrawn but withdrawn can be capitalized<00:14:56.920> or<00:14:57.120> not<00:14:57.720> capitalized<00:14:58.720> so 00:14:59.710 --> 00:14:59.720 align:start position:0% capitalized or not capitalized so 00:14:59.720 --> 00:15:01.870 align:start position:0% capitalized or not capitalized so um<00:15:00.000> the<00:15:00.240> capitalized<00:15:00.920> version<00:15:01.199> of<00:15:01.320> the<00:15:01.440> string 00:15:01.870 --> 00:15:01.880 align:start position:0% um the capitalized version of the string 00:15:01.880 --> 00:15:05.509 align:start position:0% um the capitalized version of the string is<00:15:02.399> deprecated<00:15:03.399> so<00:15:04.000> we<00:15:04.160> allow<00:15:04.519> it<00:15:05.199> but<00:15:05.360> we 00:15:05.509 --> 00:15:05.519 align:start position:0% is deprecated so we allow it but we 00:15:05.519 --> 00:15:08.910 align:start position:0% is deprecated so we allow it but we raise<00:15:05.720> a<00:15:05.839> warning<00:15:06.720> we<00:15:06.839> say<00:15:07.320> if<00:15:07.399> you're<00:15:07.920> using 00:15:08.910 --> 00:15:08.920 align:start position:0% raise a warning we say if you're using 00:15:08.920 --> 00:15:11.389 align:start position:0% raise a warning we say if you're using if<00:15:09.040> you're<00:15:09.360> if<00:15:09.480> you're<00:15:09.959> um<00:15:10.519> if<00:15:10.680> the<00:15:10.920> value<00:15:11.279> of 00:15:11.389 --> 00:15:11.399 align:start position:0% if you're if you're um if the value of 00:15:11.399 --> 00:15:14.990 align:start position:0% if you're if you're um if the value of the<00:15:11.639> property<00:15:12.360> in<00:15:12.519> the<00:15:12.959> control<00:15:13.959> in<00:15:14.360> the<00:15:14.519> group 00:15:14.990 --> 00:15:15.000 align:start position:0% the property in the control in the group 00:15:15.000 --> 00:15:16.990 align:start position:0% the property in the control in the group in<00:15:15.120> the<00:15:15.279> catalog<00:15:16.079> in<00:15:16.199> the 00:15:16.990 --> 00:15:17.000 align:start position:0% in the catalog in the 00:15:17.000 --> 00:15:20.110 align:start position:0% in the catalog in the document<00:15:18.000> um<00:15:18.240> contains<00:15:19.000> a<00:15:19.199> value<00:15:19.480> of<00:15:19.639> warning 00:15:20.110 --> 00:15:20.120 align:start position:0% document um contains a value of warning 00:15:20.120 --> 00:15:22.629 align:start position:0% document um contains a value of warning but<00:15:20.240> the<00:15:20.399> warning<00:15:20.720> is<00:15:21.440> capitalized<00:15:22.440> it's 00:15:22.629 --> 00:15:22.639 align:start position:0% but the warning is capitalized it's 00:15:22.639 --> 00:15:23.749 align:start position:0% but the warning is capitalized it's permitted<00:15:23.120> but<00:15:23.240> we're<00:15:23.360> going<00:15:23.440> to<00:15:23.600> we're<00:15:23.680> going 00:15:23.749 --> 00:15:23.759 align:start position:0% permitted but we're going to we're going 00:15:23.759 --> 00:15:25.110 align:start position:0% permitted but we're going to we're going to<00:15:23.839> throw<00:15:24.000> a<00:15:24.079> warning<00:15:24.320> to<00:15:24.480> console<00:15:24.920> so<00:15:25.040> if 00:15:25.110 --> 00:15:25.120 align:start position:0% to throw a warning to console so if 00:15:25.120 --> 00:15:26.430 align:start position:0% to throw a warning to console so if you're<00:15:25.279> watching<00:15:25.519> the<00:15:25.680> console<00:15:26.040> you'll<00:15:26.160> see<00:15:26.320> a 00:15:26.430 --> 00:15:26.440 align:start position:0% you're watching the console you'll see a 00:15:26.440 --> 00:15:28.110 align:start position:0% you're watching the console you'll see a warning<00:15:26.759> and<00:15:26.920> you'll<00:15:27.320> hopefully<00:15:27.720> realize 00:15:28.110 --> 00:15:28.120 align:start position:0% warning and you'll hopefully realize 00:15:28.120 --> 00:15:30.269 align:start position:0% warning and you'll hopefully realize that<00:15:28.240> you<00:15:28.319> need<00:15:28.480> to<00:15:29.240> make<00:15:29.440> that<00:15:29.600> the<00:15:29.720> lowercase 00:15:30.269 --> 00:15:30.279 align:start position:0% that you need to make that the lowercase 00:15:30.279 --> 00:15:31.949 align:start position:0% that you need to make that the lowercase version 00:15:31.949 --> 00:15:31.959 align:start position:0% version 00:15:31.959 --> 00:15:34.269 align:start position:0% version so<00:15:32.959> that's<00:15:33.160> the<00:15:33.319> deprecation<00:15:33.839> constraint 00:15:34.269 --> 00:15:34.279 align:start position:0% so that's the deprecation constraint 00:15:34.279 --> 00:15:35.389 align:start position:0% so that's the deprecation constraint fortunately<00:15:34.680> there<00:15:34.759> aren't<00:15:34.959> too<00:15:35.079> many<00:15:35.240> of 00:15:35.389 --> 00:15:35.399 align:start position:0% fortunately there aren't too many of 00:15:35.399 --> 00:15:37.230 align:start position:0% fortunately there aren't too many of those<00:15:35.920> um<00:15:36.040> and<00:15:36.160> hopefully<00:15:36.440> fewer<00:15:36.759> and<00:15:36.959> few<00:15:37.079> are 00:15:37.230 --> 00:15:37.240 align:start position:0% those um and hopefully fewer and few are 00:15:37.240 --> 00:15:38.990 align:start position:0% those um and hopefully fewer and few are going<00:15:37.560> going 00:15:38.990 --> 00:15:39.000 align:start position:0% going going 00:15:39.000 --> 00:15:41.269 align:start position:0% going going forward<00:15:40.000> in<00:15:40.199> some<00:15:40.440> cases<00:15:40.839> there<00:15:40.959> are 00:15:41.269 --> 00:15:41.279 align:start position:0% forward in some cases there are 00:15:41.279 --> 00:15:42.670 align:start position:0% forward in some cases there are uniqueness 00:15:42.670 --> 00:15:42.680 align:start position:0% uniqueness 00:15:42.680 --> 00:15:46.350 align:start position:0% uniqueness constraints<00:15:43.680> um<00:15:44.040> so<00:15:44.920> uh<00:15:45.279> you<00:15:45.440> might<00:15:45.639> need<00:15:45.800> to 00:15:46.350 --> 00:15:46.360 align:start position:0% constraints um so uh you might need to 00:15:46.360 --> 00:15:48.389 align:start position:0% constraints um so uh you might need to prevent 00:15:48.389 --> 00:15:48.399 align:start position:0% prevent 00:15:48.399 --> 00:15:52.309 align:start position:0% prevent uh<00:15:49.399> values<00:15:50.000> property<00:15:50.480> values<00:15:50.880> from<00:15:51.160> being 00:15:52.309 --> 00:15:52.319 align:start position:0% uh values property values from being 00:15:52.319 --> 00:15:55.749 align:start position:0% uh values property values from being duplicates<00:15:53.319> um<00:15:53.720> the<00:15:53.959> place<00:15:54.360> where<00:15:55.040> um<00:15:55.519> you'll 00:15:55.749 --> 00:15:55.759 align:start position:0% duplicates um the place where um you'll 00:15:55.759 --> 00:15:58.430 align:start position:0% duplicates um the place where um you'll see<00:15:56.199> this<00:15:56.800> most<00:15:57.000> readily<00:15:57.519> most<00:15:57.720> importantly 00:15:58.430 --> 00:15:58.440 align:start position:0% see this most readily most importantly 00:15:58.440 --> 00:15:59.470 align:start position:0% see this most readily most importantly is 00:15:59.470 --> 00:15:59.480 align:start position:0% is 00:15:59.480 --> 00:16:04.550 align:start position:0% is um<00:15:59.959> in<00:16:01.120> resource<00:16:02.279> so<00:16:03.279> if<00:16:03.399> you<00:16:03.519> know<00:16:03.720> the<00:16:03.920> oscal 00:16:04.550 --> 00:16:04.560 align:start position:0% um in resource so if you know the oscal 00:16:04.560 --> 00:16:06.430 align:start position:0% um in resource so if you know the oscal specification<00:16:05.560> you'll<00:16:05.759> know<00:16:06.000> that<00:16:06.199> at<00:16:06.319> the 00:16:06.430 --> 00:16:06.440 align:start position:0% specification you'll know that at the 00:16:06.440 --> 00:16:09.030 align:start position:0% specification you'll know that at the end<00:16:06.720> there's<00:16:07.199> a<00:16:07.399> section<00:16:07.759> called<00:16:08.040> back<00:16:08.319> matter 00:16:09.030 --> 00:16:09.040 align:start position:0% end there's a section called back matter 00:16:09.040 --> 00:16:12.110 align:start position:0% end there's a section called back matter back<00:16:09.279> matter<00:16:09.720> contains<00:16:10.519> a<00:16:11.079> bunch<00:16:11.440> of 00:16:12.110 --> 00:16:12.120 align:start position:0% back matter contains a bunch of 00:16:12.120 --> 00:16:15.110 align:start position:0% back matter contains a bunch of resources<00:16:13.120> which<00:16:13.639> um<00:16:14.160> again<00:16:14.440> have<00:16:14.560> their<00:16:14.720> own 00:16:15.110 --> 00:16:15.120 align:start position:0% resources which um again have their own 00:16:15.120 --> 00:16:17.870 align:start position:0% resources which um again have their own structure<00:16:16.120> um<00:16:16.839> uh<00:16:17.000> one<00:16:17.160> of<00:16:17.279> the<00:16:17.440> things<00:16:17.720> that 00:16:17.870 --> 00:16:17.880 align:start position:0% structure um uh one of the things that 00:16:17.880 --> 00:16:20.670 align:start position:0% structure um uh one of the things that they<00:16:18.000> can<00:16:18.279> have<00:16:18.560> in<00:16:18.680> it<00:16:18.880> is<00:16:19.000> a<00:16:19.160> link<00:16:20.160> which<00:16:20.440> is 00:16:20.670 --> 00:16:20.680 align:start position:0% they can have in it is a link which is 00:16:20.680 --> 00:16:23.350 align:start position:0% they can have in it is a link which is intended<00:16:21.160> to<00:16:21.360> point<00:16:21.639> to<00:16:22.120> either<00:16:22.519> a<00:16:22.680> location 00:16:23.350 --> 00:16:23.360 align:start position:0% intended to point to either a location 00:16:23.360 --> 00:16:27.509 align:start position:0% intended to point to either a location inside<00:16:24.120> the<00:16:24.560> document<00:16:25.440> or<00:16:26.160> uh<00:16:26.279> an<00:16:26.519> external 00:16:27.509 --> 00:16:27.519 align:start position:0% inside the document or uh an external 00:16:27.519 --> 00:16:30.990 align:start position:0% inside the document or uh an external URL<00:16:28.519> so<00:16:28.639> the<00:16:28.759> only<00:16:28.920> Only<00:16:29.120> Rule<00:16:29.440> is<00:16:30.399> um<00:16:30.800> you 00:16:30.990 --> 00:16:31.000 align:start position:0% URL so the only Only Rule is um you 00:16:31.000 --> 00:16:33.389 align:start position:0% URL so the only Only Rule is um you can't<00:16:31.319> have<00:16:31.560> two<00:16:31.959> resources<00:16:32.720> that<00:16:32.920> point<00:16:33.160> to 00:16:33.389 --> 00:16:33.399 align:start position:0% can't have two resources that point to 00:16:33.399 --> 00:16:37.430 align:start position:0% can't have two resources that point to the<00:16:33.600> same<00:16:34.399> place<00:16:35.639> because<00:16:36.639> um<00:16:36.880> the<00:16:37.000> intention 00:16:37.430 --> 00:16:37.440 align:start position:0% the same place because um the intention 00:16:37.440 --> 00:16:38.629 align:start position:0% the same place because um the intention is<00:16:37.639> that<00:16:37.759> you're<00:16:37.920> going<00:16:38.040> to<00:16:38.399> that<00:16:38.519> you're 00:16:38.629 --> 00:16:38.639 align:start position:0% is that you're going to that you're 00:16:38.639 --> 00:16:40.910 align:start position:0% is that you're going to that you're going<00:16:38.759> to<00:16:39.279> have<00:16:39.839> um<00:16:40.240> you're<00:16:40.360> going<00:16:40.480> to<00:16:40.600> have<00:16:40.720> a 00:16:40.910 --> 00:16:40.920 align:start position:0% going to have um you're going to have a 00:16:40.920 --> 00:16:43.990 align:start position:0% going to have um you're going to have a a<00:16:41.079> format<00:16:41.519> for<00:16:41.759> them<00:16:42.680> um<00:16:42.839> you<00:16:42.959> can<00:16:43.240> optionally 00:16:43.990 --> 00:16:44.000 align:start position:0% a format for them um you can optionally 00:16:44.000 --> 00:16:47.269 align:start position:0% a format for them um you can optionally have<00:16:44.600> a<00:16:44.959> you<00:16:45.040> know<00:16:45.199> some<00:16:45.519> a<00:16:45.680> hash<00:16:45.920> a<00:16:46.079> check<00:16:46.360> sum 00:16:47.269 --> 00:16:47.279 align:start position:0% have a you know some a hash a check sum 00:16:47.279 --> 00:16:49.590 align:start position:0% have a you know some a hash a check sum to<00:16:47.440> make<00:16:47.560> sure<00:16:47.759> that<00:16:47.920> it's<00:16:48.040> an<00:16:48.199> authentic<00:16:48.920> copy 00:16:49.590 --> 00:16:49.600 align:start position:0% to make sure that it's an authentic copy 00:16:49.600 --> 00:16:52.670 align:start position:0% to make sure that it's an authentic copy so<00:16:49.920> as<00:16:50.040> a<00:16:50.240> result<00:16:51.000> um<00:16:51.199> each<00:16:51.759> resource<00:16:52.279> can<00:16:52.480> have 00:16:52.670 --> 00:16:52.680 align:start position:0% so as a result um each resource can have 00:16:52.680 --> 00:16:56.189 align:start position:0% so as a result um each resource can have as<00:16:52.880> many<00:16:53.160> URLs<00:16:53.920> that<00:16:54.040> you<00:16:54.199> want<00:16:54.959> but<00:16:55.839> um<00:16:56.000> each 00:16:56.189 --> 00:16:56.199 align:start position:0% as many URLs that you want but um each 00:16:56.199 --> 00:16:59.509 align:start position:0% as many URLs that you want but um each URL<00:16:56.680> can<00:16:56.959> has<00:16:57.079> to<00:16:57.199> be<00:16:57.519> unique<00:16:58.519> so<00:16:59.120> a<00:16:59.240> single 00:16:59.509 --> 00:16:59.519 align:start position:0% URL can has to be unique so a single 00:16:59.519 --> 00:17:01.910 align:start position:0% URL can has to be unique so a single resource<00:17:00.000> can't<00:17:00.319> have<00:17:01.000> you<00:17:01.120> know<00:17:01.600> more<00:17:01.759> than 00:17:01.910 --> 00:17:01.920 align:start position:0% resource can't have you know more than 00:17:01.920 --> 00:17:04.029 align:start position:0% resource can't have you know more than one<00:17:02.040> resource<00:17:02.399> can't<00:17:02.519> have<00:17:02.639> the<00:17:02.759> same<00:17:03.039> URL 00:17:04.029 --> 00:17:04.039 align:start position:0% one resource can't have the same URL 00:17:04.039 --> 00:17:07.189 align:start position:0% one resource can't have the same URL right<00:17:04.520> or<00:17:05.000> uh<00:17:05.120> in<00:17:05.280> this<00:17:05.480> case<00:17:06.160> a<00:17:06.280> URL<00:17:06.679> can't 00:17:07.189 --> 00:17:07.199 align:start position:0% right or uh in this case a URL can't 00:17:07.199 --> 00:17:10.309 align:start position:0% right or uh in this case a URL can't cannot<00:17:07.559> appear<00:17:07.799> more<00:17:07.959> than<00:17:08.439> once<00:17:09.439> in<00:17:09.880> in<00:17:10.120> a 00:17:10.309 --> 00:17:10.319 align:start position:0% cannot appear more than once in in a 00:17:10.319 --> 00:17:14.870 align:start position:0% cannot appear more than once in in a resource<00:17:11.319> so<00:17:12.400> um<00:17:13.400> this<00:17:13.520> is<00:17:13.679> all<00:17:14.000> python<00:17:14.640> right 00:17:14.870 --> 00:17:14.880 align:start position:0% resource so um this is all python right 00:17:14.880 --> 00:17:17.110 align:start position:0% resource so um this is all python right but<00:17:15.000> basically<00:17:15.400> we're<00:17:15.760> we're<00:17:16.160> counting<00:17:16.959> the 00:17:17.110 --> 00:17:17.120 align:start position:0% but basically we're we're counting the 00:17:17.120 --> 00:17:19.750 align:start position:0% but basically we're we're counting the links<00:17:17.679> and<00:17:17.839> if<00:17:18.480> um<00:17:18.799> and<00:17:18.919> then<00:17:19.160> passing<00:17:19.480> that<00:17:19.600> to 00:17:19.750 --> 00:17:19.760 align:start position:0% links and if um and then passing that to 00:17:19.760 --> 00:17:21.909 align:start position:0% links and if um and then passing that to a<00:17:19.880> function<00:17:20.240> that'll<00:17:20.520> say<00:17:21.120> I<00:17:21.199> saw<00:17:21.520> this<00:17:21.679> one 00:17:21.909 --> 00:17:21.919 align:start position:0% a function that'll say I saw this one 00:17:21.919 --> 00:17:23.590 align:start position:0% a function that'll say I saw this one time<00:17:22.120> I<00:17:22.240> saw<00:17:22.480> this<00:17:22.640> five<00:17:22.919> times<00:17:23.160> I<00:17:23.240> saw<00:17:23.439> this 00:17:23.590 --> 00:17:23.600 align:start position:0% time I saw this five times I saw this 00:17:23.600 --> 00:17:25.390 align:start position:0% time I saw this five times I saw this however<00:17:23.839> many<00:17:24.039> times<00:17:24.720> and<00:17:24.839> if<00:17:25.000> any<00:17:25.160> of<00:17:25.280> those 00:17:25.390 --> 00:17:25.400 align:start position:0% however many times and if any of those 00:17:25.400 --> 00:17:26.710 align:start position:0% however many times and if any of those numbers<00:17:25.640> are<00:17:25.799> bigger<00:17:26.039> than<00:17:26.160> one<00:17:26.400> then<00:17:26.520> we 00:17:26.710 --> 00:17:26.720 align:start position:0% numbers are bigger than one then we 00:17:26.720 --> 00:17:30.310 align:start position:0% numbers are bigger than one then we throw<00:17:26.919> an<00:17:27.039> error<00:17:27.520> so 00:17:30.310 --> 00:17:30.320 align:start position:0% throw an error so 00:17:30.320 --> 00:17:33.270 align:start position:0% throw an error so um<00:17:31.320> remember<00:17:31.679> the<00:17:31.760> uniqueness 00:17:33.270 --> 00:17:33.280 align:start position:0% um remember the uniqueness 00:17:33.280 --> 00:17:35.789 align:start position:0% um remember the uniqueness constraint<00:17:34.280> there<00:17:34.400> are<00:17:34.640> in<00:17:34.799> some<00:17:35.039> cases<00:17:35.520> very 00:17:35.789 --> 00:17:35.799 align:start position:0% constraint there are in some cases very 00:17:35.799 --> 00:17:38.230 align:start position:0% constraint there are in some cases very special<00:17:36.200> constraints<00:17:36.720> so<00:17:36.960> some<00:17:37.200> objects<00:17:38.120> um 00:17:38.230 --> 00:17:38.240 align:start position:0% special constraints so some objects um 00:17:38.240 --> 00:17:42.549 align:start position:0% special constraints so some objects um my<00:17:38.400> favorite<00:17:38.720> is<00:17:39.200> Hash<00:17:40.200> um<00:17:40.720> have<00:17:40.960> their<00:17:41.559> own 00:17:42.549 --> 00:17:42.559 align:start position:0% my favorite is Hash um have their own 00:17:42.559 --> 00:17:44.710 align:start position:0% my favorite is Hash um have their own constraints<00:17:43.240> that<00:17:43.400> don't<00:17:43.640> really<00:17:44.000> apply<00:17:44.559> to 00:17:44.710 --> 00:17:44.720 align:start position:0% constraints that don't really apply to 00:17:44.720 --> 00:17:47.669 align:start position:0% constraints that don't really apply to other<00:17:45.080> objects<00:17:45.520> and<00:17:45.679> this<00:17:45.799> is<00:17:46.280> the<00:17:46.960> only<00:17:47.360> case 00:17:47.669 --> 00:17:47.679 align:start position:0% other objects and this is the only case 00:17:47.679 --> 00:17:50.230 align:start position:0% other objects and this is the only case I<00:17:47.799> think<00:17:48.039> in<00:17:48.200> my<00:17:48.320> code<00:17:48.600> base<00:17:48.840> where<00:17:49.000> I<00:17:49.240> allowed 00:17:50.230 --> 00:17:50.240 align:start position:0% I think in my code base where I allowed 00:17:50.240 --> 00:17:54.750 align:start position:0% I think in my code base where I allowed allow<00:17:50.799> others<00:17:51.799> and<00:17:52.520> um<00:17:52.720> you'll<00:17:52.960> see<00:17:53.559> why<00:17:54.559> so 00:17:54.750 --> 00:17:54.760 align:start position:0% allow others and um you'll see why so 00:17:54.760 --> 00:17:56.510 align:start position:0% allow others and um you'll see why so the<00:17:54.880> constraint<00:17:55.480> constraint<00:17:55.919> is<00:17:56.080> expressed 00:17:56.510 --> 00:17:56.520 align:start position:0% the constraint constraint is expressed 00:17:56.520 --> 00:17:59.750 align:start position:0% the constraint constraint is expressed like<00:17:56.760> this<00:17:57.760> um<00:17:58.559> uh 00:17:59.750 --> 00:17:59.760 align:start position:0% like this um uh 00:17:59.760 --> 00:18:03.070 align:start position:0% like this um uh you<00:18:00.000> have<00:18:00.360> in<00:18:00.480> a<00:18:00.679> hash<00:18:01.240> an<00:18:01.760> algorithm<00:18:02.760> and<00:18:02.919> a 00:18:03.070 --> 00:18:03.080 align:start position:0% you have in a hash an algorithm and a 00:18:03.080 --> 00:18:04.870 align:start position:0% you have in a hash an algorithm and a value<00:18:03.880> the 00:18:04.870 --> 00:18:04.880 align:start position:0% value the 00:18:04.880 --> 00:18:07.230 align:start position:0% value the algorithm<00:18:05.880> obviously<00:18:06.440> tells<00:18:06.679> you<00:18:07.000> what 00:18:07.230 --> 00:18:07.240 align:start position:0% algorithm obviously tells you what 00:18:07.240 --> 00:18:08.950 align:start position:0% algorithm obviously tells you what algorithm<00:18:07.760> was<00:18:07.880> used<00:18:08.120> to<00:18:08.320> calculate<00:18:08.760> the 00:18:08.950 --> 00:18:08.960 align:start position:0% algorithm was used to calculate the 00:18:08.960 --> 00:18:12.950 align:start position:0% algorithm was used to calculate the value<00:18:09.880> um<00:18:10.080> and<00:18:10.240> as<00:18:10.320> a<00:18:10.520> result<00:18:11.360> the<00:18:11.960> value 00:18:12.950 --> 00:18:12.960 align:start position:0% value um and as a result the value 00:18:12.960 --> 00:18:15.190 align:start position:0% value um and as a result the value should<00:18:13.360> be<00:18:13.720> something<00:18:14.240> that<00:18:14.799> would<00:18:14.960> be 00:18:15.190 --> 00:18:15.200 align:start position:0% should be something that would be 00:18:15.200 --> 00:18:18.350 align:start position:0% should be something that would be produced<00:18:16.039> by<00:18:16.240> that<00:18:16.840> algorithm<00:18:17.840> um<00:18:18.080> and<00:18:18.240> that 00:18:18.350 --> 00:18:18.360 align:start position:0% produced by that algorithm um and that 00:18:18.360 --> 00:18:21.590 align:start position:0% produced by that algorithm um and that means<00:18:18.840> a<00:18:18.960> few<00:18:19.200> things<00:18:20.000> so<00:18:20.760> um<00:18:21.039> obviously<00:18:21.480> there 00:18:21.590 --> 00:18:21.600 align:start position:0% means a few things so um obviously there 00:18:21.600 --> 00:18:27.149 align:start position:0% means a few things so um obviously there are<00:18:21.919> a<00:18:22.039> number<00:18:22.320> of<00:18:22.880> algorithms<00:18:23.880> um<00:18:24.960> and<00:18:25.960> in<00:18:26.120> the 00:18:27.149 --> 00:18:27.159 align:start position:0% are a number of algorithms um and in the 00:18:27.159 --> 00:18:29.470 align:start position:0% are a number of algorithms um and in the constraint<00:18:28.159> in<00:18:28.480> the<00:18:28.840> meta<00:18:29.120> schema 00:18:29.470 --> 00:18:29.480 align:start position:0% constraint in the meta schema 00:18:29.480 --> 00:18:31.909 align:start position:0% constraint in the meta schema specification<00:18:30.480> this<00:18:30.720> by<00:18:30.880> the<00:18:31.000> way<00:18:31.440> does<00:18:31.640> not 00:18:31.909 --> 00:18:31.919 align:start position:0% specification this by the way does not 00:18:31.919 --> 00:18:34.750 align:start position:0% specification this by the way does not appear<00:18:32.520> in<00:18:32.960> the<00:18:33.080> Json<00:18:33.559> schema<00:18:34.120> so<00:18:34.400> this<00:18:34.480> is<00:18:34.640> one 00:18:34.750 --> 00:18:34.760 align:start position:0% appear in the Json schema so this is one 00:18:34.760 --> 00:18:35.990 align:start position:0% appear in the Json schema so this is one of<00:18:34.840> the<00:18:34.960> things<00:18:35.120> you're<00:18:35.240> missing<00:18:35.520> out<00:18:35.679> on<00:18:35.880> if 00:18:35.990 --> 00:18:36.000 align:start position:0% of the things you're missing out on if 00:18:36.000 --> 00:18:37.029 align:start position:0% of the things you're missing out on if you're<00:18:36.200> if<00:18:36.280> you're<00:18:36.440> just<00:18:36.559> leveraging<00:18:36.960> the 00:18:37.029 --> 00:18:37.039 align:start position:0% you're if you're just leveraging the 00:18:37.039 --> 00:18:41.950 align:start position:0% you're if you're just leveraging the Json<00:18:37.679> schema<00:18:38.679> um<00:18:39.559> if<00:18:39.760> the<00:18:39.919> algorithm<00:18:40.720> is<00:18:41.720> this 00:18:41.950 --> 00:18:41.960 align:start position:0% Json schema um if the algorithm is this 00:18:41.960 --> 00:18:43.909 align:start position:0% Json schema um if the algorithm is this thing<00:18:42.400> then<00:18:42.720> it's<00:18:42.880> going<00:18:42.960> to<00:18:43.120> be<00:18:43.320> 28 00:18:43.909 --> 00:18:43.919 align:start position:0% thing then it's going to be 28 00:18:43.919 --> 00:18:48.390 align:start position:0% thing then it's going to be 28 characters<00:18:44.919> of<00:18:45.400> hex<00:18:46.360> essentially<00:18:47.360> um<00:18:48.159> others 00:18:48.390 --> 00:18:48.400 align:start position:0% characters of hex essentially um others 00:18:48.400 --> 00:18:52.789 align:start position:0% characters of hex essentially um others it'll<00:18:48.600> be<00:18:48.760> 32<00:18:49.240> or<00:18:49.360> 48<00:18:49.760> or<00:18:49.880> 64<00:18:50.960> right<00:18:51.960> so<00:18:52.559> um 00:18:52.789 --> 00:18:52.799 align:start position:0% it'll be 32 or 48 or 64 right so um 00:18:52.799 --> 00:18:54.149 align:start position:0% it'll be 32 or 48 or 64 right so um that's<00:18:53.039> important<00:18:53.559> that's<00:18:53.679> a<00:18:53.880> that's<00:18:54.000> an 00:18:54.149 --> 00:18:54.159 align:start position:0% that's important that's a that's an 00:18:54.159 --> 00:18:57.510 align:start position:0% that's important that's a that's an important<00:18:55.000> um<00:18:55.880> constraint<00:18:56.880> and<00:18:57.039> so<00:18:57.360> I 00:18:57.510 --> 00:18:57.520 align:start position:0% important um constraint and so I 00:18:57.520 --> 00:18:59.510 align:start position:0% important um constraint and so I implemented<00:18:58.039> it<00:18:58.240> I'm<00:18:58.360> only<00:18:58.799> showing<00:18:59.039> you<00:18:59.400> you 00:18:59.510 --> 00:18:59.520 align:start position:0% implemented it I'm only showing you you 00:18:59.520 --> 00:19:01.830 align:start position:0% implemented it I'm only showing you you know<00:19:00.080> part<00:19:00.240> of<00:19:00.360> the<00:19:00.480> implementation<00:19:01.200> but<00:19:01.679> you 00:19:01.830 --> 00:19:01.840 align:start position:0% know part of the implementation but you 00:19:01.840 --> 00:19:05.510 align:start position:0% know part of the implementation but you know<00:19:02.159> if<00:19:02.520> if<00:19:02.799> the<00:19:03.679> algorithm<00:19:04.360> string<00:19:04.960> is<00:19:05.159> sha 00:19:05.510 --> 00:19:05.520 align:start position:0% know if if the algorithm string is sha 00:19:05.520 --> 00:19:08.430 align:start position:0% know if if the algorithm string is sha 224<00:19:06.360> or<00:19:06.880> or<00:19:07.080> sha<00:19:07.440> 3 00:19:08.430 --> 00:19:08.440 align:start position:0% 224 or or sha 3 00:19:08.440 --> 00:19:12.029 align:start position:0% 224 or or sha 3 224<00:19:09.440> um<00:19:10.080> if<00:19:10.600> the 00:19:12.029 --> 00:19:12.039 align:start position:0% 224 um if the 00:19:12.039 --> 00:19:15.630 align:start position:0% 224 um if the value<00:19:13.039> if<00:19:13.200> the<00:19:13.360> length<00:19:13.799> of<00:19:13.960> the<00:19:14.159> value<00:19:14.960> is<00:19:15.159> 28 00:19:15.630 --> 00:19:15.640 align:start position:0% value if the length of the value is 28 00:19:15.640 --> 00:19:18.789 align:start position:0% value if the length of the value is 28 characters<00:19:16.400> and<00:19:16.799> it's<00:19:17.240> hex<00:19:17.960> expressible<00:19:18.600> as 00:19:18.789 --> 00:19:18.799 align:start position:0% characters and it's hex expressible as 00:19:18.799 --> 00:19:21.950 align:start position:0% characters and it's hex expressible as as<00:19:19.000> hex<00:19:19.799> then<00:19:19.960> it's<00:19:20.320> okay<00:19:20.679> otherwise<00:19:21.559> throw<00:19:21.840> an 00:19:21.950 --> 00:19:21.960 align:start position:0% as hex then it's okay otherwise throw an 00:19:21.960 --> 00:19:26.750 align:start position:0% as hex then it's okay otherwise throw an error<00:19:23.039> so<00:19:24.039> that's<00:19:24.480> that's<00:19:24.600> a<00:19:24.919> constraint 00:19:26.750 --> 00:19:26.760 align:start position:0% error so that's that's a constraint 00:19:26.760 --> 00:19:29.270 align:start position:0% error so that's that's a constraint um<00:19:27.760> it's<00:19:27.919> not<00:19:28.080> a<00:19:28.280> general<00:19:28.840> constraint<00:19:29.200> there 00:19:29.270 --> 00:19:29.280 align:start position:0% um it's not a general constraint there 00:19:29.280 --> 00:19:30.310 align:start position:0% um it's not a general constraint there aren't<00:19:29.520> a<00:19:29.679> lot 00:19:30.310 --> 00:19:30.320 align:start position:0% aren't a lot 00:19:30.320 --> 00:19:32.950 align:start position:0% aren't a lot of<00:19:31.320> parts<00:19:31.559> of<00:19:31.720> oscal<00:19:32.240> where<00:19:32.360> that<00:19:32.520> that<00:19:32.640> share 00:19:32.950 --> 00:19:32.960 align:start position:0% of parts of oscal where that that share 00:19:32.960 --> 00:19:34.470 align:start position:0% of parts of oscal where that that share that<00:19:33.120> constraint<00:19:33.559> so<00:19:33.760> it's<00:19:33.960> it's<00:19:34.120> kind<00:19:34.240> of<00:19:34.320> a 00:19:34.470 --> 00:19:34.480 align:start position:0% that constraint so it's it's kind of a 00:19:34.480 --> 00:19:37.270 align:start position:0% that constraint so it's it's kind of a special<00:19:34.799> one<00:19:35.679> um<00:19:35.919> and<00:19:36.240> in<00:19:36.400> those<00:19:36.600> cases<00:19:36.960> I<00:19:37.080> made 00:19:37.270 --> 00:19:37.280 align:start position:0% special one um and in those cases I made 00:19:37.280 --> 00:19:39.990 align:start position:0% special one um and in those cases I made the<00:19:37.440> decision<00:19:37.880> to<00:19:38.600> put<00:19:38.799> it<00:19:39.080> in<00:19:39.360> the<00:19:39.600> object 00:19:39.990 --> 00:19:40.000 align:start position:0% the decision to put it in the object 00:19:40.000 --> 00:19:42.549 align:start position:0% the decision to put it in the object itself<00:19:41.000> be<00:19:41.520> um<00:19:41.760> you<00:19:41.880> know<00:19:42.080> all<00:19:42.200> the<00:19:42.280> way<00:19:42.440> down 00:19:42.549 --> 00:19:42.559 align:start position:0% itself be um you know all the way down 00:19:42.559 --> 00:19:44.430 align:start position:0% itself be um you know all the way down in<00:19:42.679> the<00:19:42.799> subass<00:19:43.520> rather<00:19:43.720> than<00:19:43.919> including<00:19:44.320> it 00:19:44.430 --> 00:19:44.440 align:start position:0% in the subass rather than including it 00:19:44.440 --> 00:19:46.950 align:start position:0% in the subass rather than including it in<00:19:44.679> one<00:19:44.760> of<00:19:44.880> the<00:19:45.000> higher<00:19:45.280> level<00:19:45.760> classes<00:19:46.760> um 00:19:46.950 --> 00:19:46.960 align:start position:0% in one of the higher level classes um 00:19:46.960 --> 00:19:49.230 align:start position:0% in one of the higher level classes um you<00:19:47.120> may<00:19:47.320> make<00:19:47.480> a<00:19:47.679> different<00:19:48.400> decision<00:19:48.840> for 00:19:49.230 --> 00:19:49.240 align:start position:0% you may make a different decision for 00:19:49.240 --> 00:19:53.350 align:start position:0% you may make a different decision for for<00:19:49.600> great<00:19:50.080> reasons<00:19:51.080> um<00:19:51.720> but<00:19:52.280> uh<00:19:52.760> be<00:19:52.919> aware 00:19:53.350 --> 00:19:53.360 align:start position:0% for great reasons um but uh be aware 00:19:53.360 --> 00:19:55.950 align:start position:0% for great reasons um but uh be aware that<00:19:54.120> sometimes<00:19:55.120> um<00:19:55.400> objects<00:19:55.799> have 00:19:55.950 --> 00:19:55.960 align:start position:0% that sometimes um objects have 00:19:55.960 --> 00:19:57.149 align:start position:0% that sometimes um objects have constraints<00:19:56.440> that<00:19:56.559> are<00:19:56.760> that<00:19:56.840> are<00:19:56.960> pretty 00:19:57.149 --> 00:19:57.159 align:start position:0% constraints that are that are pretty 00:19:57.159 --> 00:19:59.190 align:start position:0% constraints that are that are pretty much<00:19:57.320> unique<00:19:57.600> to<00:19:57.760> them<00:19:58.280> um<00:19:58.720> you<00:19:58.919> you'll<00:19:59.080> need 00:19:59.190 --> 00:19:59.200 align:start position:0% much unique to them um you you'll need 00:19:59.200 --> 00:20:01.029 align:start position:0% much unique to them um you you'll need to<00:19:59.320> implement 00:20:01.029 --> 00:20:01.039 align:start position:0% to implement 00:20:01.039 --> 00:20:04.149 align:start position:0% to implement those<00:20:02.039> so 00:20:04.149 --> 00:20:04.159 align:start position:0% those so 00:20:04.159 --> 00:20:07.830 align:start position:0% those so um<00:20:05.159> that<00:20:05.320> was<00:20:05.440> a<00:20:05.720> really<00:20:06.080> highlevel<00:20:06.840> tour<00:20:07.440> of 00:20:07.830 --> 00:20:07.840 align:start position:0% um that was a really highlevel tour of 00:20:07.840 --> 00:20:10.470 align:start position:0% um that was a really highlevel tour of my<00:20:08.280> library<00:20:09.200> and<00:20:09.600> my 00:20:10.470 --> 00:20:10.480 align:start position:0% my library and my 00:20:10.480 --> 00:20:12.630 align:start position:0% my library and my intention<00:20:11.480> was<00:20:11.679> not<00:20:11.880> really<00:20:12.080> to<00:20:12.240> present<00:20:12.480> the 00:20:12.630 --> 00:20:12.640 align:start position:0% intention was not really to present the 00:20:12.640 --> 00:20:14.110 align:start position:0% intention was not really to present the library<00:20:13.039> obviously<00:20:13.320> I<00:20:13.400> went<00:20:13.559> through<00:20:13.720> it<00:20:13.880> in 00:20:14.110 --> 00:20:14.120 align:start position:0% library obviously I went through it in 00:20:14.120 --> 00:20:17.830 align:start position:0% library obviously I went through it in in<00:20:15.080> too<00:20:15.320> quick<00:20:15.520> and<00:20:15.640> at<00:20:15.799> too<00:20:16.000> high<00:20:16.120> a<00:20:16.600> level<00:20:17.600> for 00:20:17.830 --> 00:20:17.840 align:start position:0% in too quick and at too high a level for 00:20:17.840 --> 00:20:22.270 align:start position:0% in too quick and at too high a level for anyone<00:20:18.159> to<00:20:18.360> go<00:20:18.679> use<00:20:18.880> it<00:20:19.039> for<00:20:19.280> anything<00:20:20.159> but<00:20:21.280> um 00:20:22.270 --> 00:20:22.280 align:start position:0% anyone to go use it for anything but um 00:20:22.280 --> 00:20:25.470 align:start position:0% anyone to go use it for anything but um really<00:20:22.679> to<00:20:22.919> explain<00:20:23.880> how<00:20:24.200> I<00:20:24.559> how<00:20:24.799> I<00:20:25.039> took<00:20:25.280> the 00:20:25.470 --> 00:20:25.480 align:start position:0% really to explain how I how I took the 00:20:25.480 --> 00:20:26.870 align:start position:0% really to explain how I how I took the different<00:20:25.760> elements<00:20:26.120> of<00:20:26.240> the<00:20:26.320> oscal 00:20:26.870 --> 00:20:26.880 align:start position:0% different elements of the oscal 00:20:26.880 --> 00:20:29.270 align:start position:0% different elements of the oscal specification<00:20:27.880> and<00:20:28.039> applied<00:20:28.480> them 00:20:29.270 --> 00:20:29.280 align:start position:0% specification and applied them 00:20:29.280 --> 00:20:32.190 align:start position:0% specification and applied them in<00:20:30.280> you<00:20:30.400> know<00:20:30.679> I<00:20:30.799> took<00:20:31.559> an<00:20:31.720> oscal 00:20:32.190 --> 00:20:32.200 align:start position:0% in you know I took an oscal 00:20:32.200 --> 00:20:34.789 align:start position:0% in you know I took an oscal specification<00:20:32.880> defined<00:20:33.240> in<00:20:33.400> XML<00:20:34.360> using<00:20:34.679> the 00:20:34.789 --> 00:20:34.799 align:start position:0% specification defined in XML using the 00:20:34.799 --> 00:20:38.630 align:start position:0% specification defined in XML using the meta<00:20:35.120> schema<00:20:35.480> format<00:20:36.400> and<00:20:36.840> I<00:20:37.039> applied<00:20:37.520> them<00:20:38.520> in 00:20:38.630 --> 00:20:38.640 align:start position:0% meta schema format and I applied them in 00:20:38.640 --> 00:20:42.390 align:start position:0% meta schema format and I applied them in a<00:20:39.200> python<00:20:39.679> context<00:20:40.240> to<00:20:40.520> make<00:20:41.520> python 00:20:42.390 --> 00:20:42.400 align:start position:0% a python context to make python 00:20:42.400 --> 00:20:48.149 align:start position:0% a python context to make python essentially<00:20:42.880> data<00:20:43.480> classes<00:20:44.960> um<00:20:46.120> so<00:20:47.120> um<00:20:48.039> I 00:20:48.149 --> 00:20:48.159 align:start position:0% essentially data classes um so um I 00:20:48.159 --> 00:20:51.909 align:start position:0% essentially data classes um so um I learned<00:20:48.720> many<00:20:49.080> things<00:20:49.720> from<00:20:49.960> the<00:20:50.520> exercise<00:20:51.520> um 00:20:51.909 --> 00:20:51.919 align:start position:0% learned many things from the exercise um 00:20:51.919 --> 00:20:56.789 align:start position:0% learned many things from the exercise um and<00:20:52.200> and<00:20:52.400> I<00:20:52.559> can<00:20:52.880> share<00:20:53.360> a<00:20:53.520> few<00:20:54.440> with<00:20:54.640> you<00:20:55.799> um 00:20:56.789 --> 00:20:56.799 align:start position:0% and and I can share a few with you um 00:20:56.799 --> 00:20:59.110 align:start position:0% and and I can share a few with you um first<00:20:57.000> of<00:20:57.200> all<00:20:58.039> I<00:20:58.159> already<00:20:58.360> said<00:20:58.760> this<00:20:58.919> but<00:20:59.039> I 00:20:59.110 --> 00:20:59.120 align:start position:0% first of all I already said this but I 00:20:59.120 --> 00:21:00.950 align:start position:0% first of all I already said this but I think<00:20:59.360> developer<00:20:59.880> experience<00:21:00.360> is<00:21:00.640> really 00:21:00.950 --> 00:21:00.960 align:start position:0% think developer experience is really 00:21:00.960 --> 00:21:03.310 align:start position:0% think developer experience is really important<00:21:01.880> what<00:21:02.120> a<00:21:02.320> good<00:21:02.559> developer 00:21:03.310 --> 00:21:03.320 align:start position:0% important what a good developer 00:21:03.320 --> 00:21:05.549 align:start position:0% important what a good developer experience<00:21:04.320> is<00:21:04.799> might<00:21:05.039> be<00:21:05.200> different 00:21:05.549 --> 00:21:05.559 align:start position:0% experience is might be different 00:21:05.559 --> 00:21:07.950 align:start position:0% experience is might be different depending<00:21:05.919> on<00:21:06.039> your<00:21:06.200> use<00:21:06.520> case<00:21:07.159> if<00:21:07.280> you<00:21:07.559> have 00:21:07.950 --> 00:21:07.960 align:start position:0% depending on your use case if you have 00:21:07.960 --> 00:21:10.190 align:start position:0% depending on your use case if you have tooling<00:21:08.919> and<00:21:09.080> you<00:21:09.320> just<00:21:09.480> need<00:21:09.679> to<00:21:09.880> make<00:21:10.039> it 00:21:10.190 --> 00:21:10.200 align:start position:0% tooling and you just need to make it 00:21:10.200 --> 00:21:13.470 align:start position:0% tooling and you just need to make it spit<00:21:10.480> out<00:21:10.679> oscal<00:21:11.600> you<00:21:12.240> you<00:21:12.520> you<00:21:12.640> may<00:21:12.960> really 00:21:13.470 --> 00:21:13.480 align:start position:0% spit out oscal you you you may really 00:21:13.480 --> 00:21:15.830 align:start position:0% spit out oscal you you you may really just<00:21:13.679> need<00:21:14.279> like<00:21:14.440> a<00:21:14.559> machine<00:21:14.919> generated 00:21:15.830 --> 00:21:15.840 align:start position:0% just need like a machine generated 00:21:15.840 --> 00:21:17.669 align:start position:0% just need like a machine generated python<00:21:16.279> equivalent<00:21:16.679> or<00:21:16.919> whatever<00:21:17.240> language 00:21:17.669 --> 00:21:17.679 align:start position:0% python equivalent or whatever language 00:21:17.679 --> 00:21:22.149 align:start position:0% python equivalent or whatever language equivalent<00:21:18.679> of<00:21:18.919> the<00:21:19.080> Json<00:21:19.600> schema<00:21:20.600> um<00:21:21.159> because 00:21:22.149 --> 00:21:22.159 align:start position:0% equivalent of the Json schema um because 00:21:22.159 --> 00:21:23.669 align:start position:0% equivalent of the Json schema um because that<00:21:22.240> would<00:21:22.400> be<00:21:22.559> a<00:21:22.679> really<00:21:22.880> short<00:21:23.279> path<00:21:23.520> to 00:21:23.669 --> 00:21:23.679 align:start position:0% that would be a really short path to 00:21:23.679 --> 00:21:26.230 align:start position:0% that would be a really short path to getting<00:21:24.039> python<00:21:24.480> that's<00:21:24.960> I'm<00:21:25.120> sorry<00:21:25.760> getting 00:21:26.230 --> 00:21:26.240 align:start position:0% getting python that's I'm sorry getting 00:21:26.240 --> 00:21:29.149 align:start position:0% getting python that's I'm sorry getting um<00:21:27.039> oscal<00:21:27.720> that's<00:21:27.919> pretty<00:21:28.200> good 00:21:29.149 --> 00:21:29.159 align:start position:0% um oscal that's pretty good 00:21:29.159 --> 00:21:31.390 align:start position:0% um oscal that's pretty good not<00:21:29.400> perfect<00:21:29.760> but<00:21:29.919> pretty 00:21:31.390 --> 00:21:31.400 align:start position:0% not perfect but pretty 00:21:31.400 --> 00:21:34.190 align:start position:0% not perfect but pretty good<00:21:32.400> um<00:21:32.679> if<00:21:32.799> you<00:21:32.919> need<00:21:33.159> more<00:21:33.679> if<00:21:33.760> you<00:21:33.960> really 00:21:34.190 --> 00:21:34.200 align:start position:0% good um if you need more if you really 00:21:34.200 --> 00:21:37.070 align:start position:0% good um if you need more if you really want<00:21:34.360> to<00:21:34.799> my<00:21:35.080> objective<00:21:35.640> with<00:21:35.840> the<00:21:36.640> oscal 00:21:37.070 --> 00:21:37.080 align:start position:0% want to my objective with the oscal 00:21:37.080 --> 00:21:39.350 align:start position:0% want to my objective with the oscal pantic<00:21:37.600> library<00:21:38.080> is<00:21:38.240> to<00:21:38.520> produce<00:21:38.919> the 00:21:39.350 --> 00:21:39.360 align:start position:0% pantic library is to produce the 00:21:39.360 --> 00:21:42.149 align:start position:0% pantic library is to produce the reference<00:21:40.159> implementation<00:21:41.159> of<00:21:41.480> oscal<00:21:41.960> in 00:21:42.149 --> 00:21:42.159 align:start position:0% reference implementation of oscal in 00:21:42.159 --> 00:21:44.990 align:start position:0% reference implementation of oscal in Python<00:21:42.880> so<00:21:43.640> I<00:21:43.799> I<00:21:43.960> obviously<00:21:44.279> include<00:21:44.679> a<00:21:44.760> lot<00:21:44.880> of 00:21:44.990 --> 00:21:45.000 align:start position:0% Python so I I obviously include a lot of 00:21:45.000 --> 00:21:46.870 align:start position:0% Python so I I obviously include a lot of other<00:21:45.200> stuff<00:21:45.520> that<00:21:45.760> that<00:21:46.240> would<00:21:46.440> be<00:21:46.600> needed 00:21:46.870 --> 00:21:46.880 align:start position:0% other stuff that that would be needed 00:21:46.880 --> 00:21:48.110 align:start position:0% other stuff that that would be needed for 00:21:48.110 --> 00:21:48.120 align:start position:0% for 00:21:48.120 --> 00:21:50.549 align:start position:0% for that<00:21:49.120> identify<00:21:49.640> the<00:21:49.760> key<00:21:49.919> features<00:21:50.279> of<00:21:50.400> the 00:21:50.549 --> 00:21:50.559 align:start position:0% that identify the key features of the 00:21:50.559 --> 00:21:53.710 align:start position:0% that identify the key features of the API<00:21:51.400> for<00:21:51.679> me<00:21:52.279> extensibility<00:21:53.120> was<00:21:53.279> a<00:21:53.480> key 00:21:53.710 --> 00:21:53.720 align:start position:0% API for me extensibility was a key 00:21:53.720 --> 00:21:57.750 align:start position:0% API for me extensibility was a key feature<00:21:54.360> and<00:21:54.520> I<00:21:54.919> spent<00:21:55.919> you<00:21:56.080> know<00:21:56.600> honestly<00:21:57.600> a 00:21:57.750 --> 00:21:57.760 align:start position:0% feature and I spent you know honestly a 00:21:57.760 --> 00:21:59.710 align:start position:0% feature and I spent you know honestly a couple<00:21:57.960> of<00:21:58.120> months<00:21:58.600> trying<00:21:58.880> out<00:21:59.360> different 00:21:59.710 --> 00:21:59.720 align:start position:0% couple of months trying out different 00:21:59.720 --> 00:22:02.750 align:start position:0% couple of months trying out different approaches<00:22:00.279> until<00:22:00.520> I<00:22:00.679> found<00:22:01.000> one<00:22:01.799> that<00:22:02.320> um 00:22:02.750 --> 00:22:02.760 align:start position:0% approaches until I found one that um 00:22:02.760 --> 00:22:06.190 align:start position:0% approaches until I found one that um allowed<00:22:03.320> me<00:22:03.919> to<00:22:04.200> extend<00:22:04.640> the<00:22:04.799> oscal 00:22:06.190 --> 00:22:06.200 align:start position:0% allowed me to extend the oscal 00:22:06.200 --> 00:22:09.710 align:start position:0% allowed me to extend the oscal specification<00:22:07.200> very<00:22:07.760> trivially<00:22:08.760> in<00:22:09.279> the<00:22:09.559> in 00:22:09.710 --> 00:22:09.720 align:start position:0% specification very trivially in the in 00:22:09.720 --> 00:22:12.669 align:start position:0% specification very trivially in the in the<00:22:09.880> appropriate<00:22:10.480> ways<00:22:11.120> so<00:22:11.960> um<00:22:12.159> you<00:22:12.320> you<00:22:12.440> can't 00:22:12.669 --> 00:22:12.679 align:start position:0% the appropriate ways so um you you can't 00:22:12.679 --> 00:22:14.310 align:start position:0% the appropriate ways so um you you can't extend<00:22:13.200> everything<00:22:13.600> but<00:22:13.720> you<00:22:13.799> can<00:22:13.960> extend 00:22:14.310 --> 00:22:14.320 align:start position:0% extend everything but you can extend 00:22:14.320 --> 00:22:19.630 align:start position:0% extend everything but you can extend some<00:22:14.640> things<00:22:15.640> um<00:22:16.440> and<00:22:16.880> that<00:22:17.559> uh<00:22:18.039> um<00:22:19.039> you<00:22:19.200> know 00:22:19.630 --> 00:22:19.640 align:start position:0% some things um and that uh um you know 00:22:19.640 --> 00:22:22.029 align:start position:0% some things um and that uh um you know was<00:22:20.360> very<00:22:20.720> efficient<00:22:21.120> and<00:22:21.320> effective<00:22:21.640> to<00:22:21.799> work 00:22:22.029 --> 00:22:22.039 align:start position:0% was very efficient and effective to work 00:22:22.039 --> 00:22:24.430 align:start position:0% was very efficient and effective to work with<00:22:22.919> I'm<00:22:23.080> as<00:22:23.279> I'm<00:22:23.400> as<00:22:23.559> lazy<00:22:23.840> as<00:22:23.960> anyone<00:22:24.200> else 00:22:24.430 --> 00:22:24.440 align:start position:0% with I'm as I'm as lazy as anyone else 00:22:24.440 --> 00:22:26.190 align:start position:0% with I'm as I'm as lazy as anyone else that<00:22:24.640> likes<00:22:24.840> to 00:22:26.190 --> 00:22:26.200 align:start position:0% that likes to 00:22:26.200 --> 00:22:29.590 align:start position:0% that likes to program<00:22:27.200> um<00:22:28.080> do<00:22:28.559> spend<00:22:28.760> some<00:22:29.000> time<00:22:29.240> looking<00:22:29.480> at 00:22:29.590 --> 00:22:29.600 align:start position:0% program um do spend some time looking at 00:22:29.600 --> 00:22:32.390 align:start position:0% program um do spend some time looking at the<00:22:29.720> meta<00:22:30.039> schema<00:22:30.799> specification<00:22:31.799> um<00:22:32.039> or<00:22:32.279> the 00:22:32.390 --> 00:22:32.400 align:start position:0% the meta schema specification um or the 00:22:32.400 --> 00:22:35.110 align:start position:0% the meta schema specification um or the official<00:22:32.840> documentation<00:22:33.840> don't<00:22:34.279> exclusively 00:22:35.110 --> 00:22:35.120 align:start position:0% official documentation don't exclusively 00:22:35.120 --> 00:22:37.990 align:start position:0% official documentation don't exclusively rely<00:22:35.400> on<00:22:35.600> Json<00:22:36.279> schema<00:22:37.279> I've<00:22:37.400> already<00:22:37.600> said<00:22:37.799> my 00:22:37.990 --> 00:22:38.000 align:start position:0% rely on Json schema I've already said my 00:22:38.000 --> 00:22:40.430 align:start position:0% rely on Json schema I've already said my cabat<00:22:38.520> about<00:22:38.760> that<00:22:39.000> it<00:22:39.120> is<00:22:39.960> perfectly 00:22:40.430 --> 00:22:40.440 align:start position:0% cabat about that it is perfectly 00:22:40.440 --> 00:22:42.950 align:start position:0% cabat about that it is perfectly appropriate<00:22:40.880> for<00:22:41.039> some<00:22:41.200> use<00:22:41.559> cases<00:22:41.960> but<00:22:42.679> uh<00:22:42.840> it 00:22:42.950 --> 00:22:42.960 align:start position:0% appropriate for some use cases but uh it 00:22:42.960 --> 00:22:47.510 align:start position:0% appropriate for some use cases but uh it is<00:22:43.320> incomplete<00:22:44.039> so<00:22:44.240> be<00:22:44.480> aware<00:22:45.200> that<00:22:45.320> it<00:22:45.440> is<00:22:45.679> not 00:22:47.510 --> 00:22:47.520 align:start position:0% is incomplete so be aware that it is not 00:22:47.520 --> 00:22:50.710 align:start position:0% is incomplete so be aware that it is not complete<00:22:48.520> um<00:22:49.200> don't<00:22:49.440> be<00:22:49.640> afraid<00:22:49.960> to<00:22:50.120> start<00:22:50.480> by 00:22:50.710 --> 00:22:50.720 align:start position:0% complete um don't be afraid to start by 00:22:50.720 --> 00:22:52.149 align:start position:0% complete um don't be afraid to start by hand<00:22:50.960> coding<00:22:51.320> I<00:22:51.400> don't<00:22:51.520> know<00:22:51.640> if<00:22:51.760> any<00:22:51.919> of<00:22:52.039> you 00:22:52.149 --> 00:22:52.159 align:start position:0% hand coding I don't know if any of you 00:22:52.159 --> 00:22:53.909 align:start position:0% hand coding I don't know if any of you would<00:22:52.320> be<00:22:52.520> afraid<00:22:52.799> to<00:22:52.880> start<00:22:53.120> by<00:22:53.279> hand<00:22:53.480> coding 00:22:53.909 --> 00:22:53.919 align:start position:0% would be afraid to start by hand coding 00:22:53.919 --> 00:22:56.549 align:start position:0% would be afraid to start by hand coding but<00:22:54.640> um 00:22:56.549 --> 00:22:56.559 align:start position:0% but um 00:22:56.559 --> 00:22:58.950 align:start position:0% but um uh<00:22:57.559> The<00:22:57.799> Meta<00:22:58.159> scheme 00:22:58.950 --> 00:22:58.960 align:start position:0% uh The Meta scheme 00:22:58.960 --> 00:23:01.149 align:start position:0% uh The Meta scheme specification<00:22:59.960> is<00:23:00.320> comprehensive<00:23:00.919> and 00:23:01.149 --> 00:23:01.159 align:start position:0% specification is comprehensive and 00:23:01.159 --> 00:23:04.750 align:start position:0% specification is comprehensive and complete<00:23:01.559> but<00:23:01.720> it<00:23:01.840> is<00:23:02.080> it<00:23:02.200> is<00:23:02.360> its<00:23:02.840> own<00:23:03.840> thing 00:23:04.750 --> 00:23:04.760 align:start position:0% complete but it is it is its own thing 00:23:04.760 --> 00:23:07.710 align:start position:0% complete but it is it is its own thing and<00:23:05.320> um<00:23:05.640> if<00:23:05.799> you<00:23:06.080> like<00:23:06.400> me<00:23:06.799> haven't<00:23:07.080> spent<00:23:07.559> a 00:23:07.710 --> 00:23:07.720 align:start position:0% and um if you like me haven't spent a 00:23:07.720 --> 00:23:10.070 align:start position:0% and um if you like me haven't spent a whole<00:23:07.919> lot<00:23:08.039> of<00:23:08.200> time<00:23:08.360> in<00:23:08.520> XML<00:23:09.400> it<00:23:09.559> takes<00:23:09.840> some 00:23:10.070 --> 00:23:10.080 align:start position:0% whole lot of time in XML it takes some 00:23:10.080 --> 00:23:14.110 align:start position:0% whole lot of time in XML it takes some time<00:23:10.360> to<00:23:10.559> come<00:23:10.720> up<00:23:10.880> to<00:23:11.039> speed<00:23:11.559> so<00:23:12.720> um<00:23:13.720> you<00:23:13.840> know 00:23:14.110 --> 00:23:14.120 align:start position:0% time to come up to speed so um you know 00:23:14.120 --> 00:23:17.310 align:start position:0% time to come up to speed so um you know I<00:23:14.279> I<00:23:14.400> know<00:23:14.760> that<00:23:15.679> like<00:23:16.360> a<00:23:16.520> really<00:23:16.840> great<00:23:17.120> thing 00:23:17.310 --> 00:23:17.320 align:start position:0% I I know that like a really great thing 00:23:17.320 --> 00:23:19.789 align:start position:0% I I know that like a really great thing would<00:23:17.480> be<00:23:17.600> able<00:23:17.760> to<00:23:17.919> turn<00:23:18.919> the<00:23:19.039> meta<00:23:19.400> schema 00:23:19.789 --> 00:23:19.799 align:start position:0% would be able to turn the meta schema 00:23:19.799 --> 00:23:22.630 align:start position:0% would be able to turn the meta schema specification<00:23:20.600> D<00:23:21.520> directly 00:23:22.630 --> 00:23:22.640 align:start position:0% specification D directly 00:23:22.640 --> 00:23:26.510 align:start position:0% specification D directly into<00:23:23.640> pantic<00:23:24.520> Data<00:23:24.880> classes<00:23:25.559> but<00:23:25.919> I<00:23:26.120> wasn't 00:23:26.510 --> 00:23:26.520 align:start position:0% into pantic Data classes but I wasn't 00:23:26.520 --> 00:23:28.990 align:start position:0% into pantic Data classes but I wasn't exactly<00:23:27.000> sure<00:23:27.760> how<00:23:27.919> I<00:23:28.000> would<00:23:28.159> approach<00:23:28.799> that 00:23:28.990 --> 00:23:29.000 align:start position:0% exactly sure how I would approach that 00:23:29.000 --> 00:23:31.230 align:start position:0% exactly sure how I would approach that so<00:23:29.559> I<00:23:29.720> started<00:23:30.120> by<00:23:30.320> just 00:23:31.230 --> 00:23:31.240 align:start position:0% so I started by just 00:23:31.240 --> 00:23:34.510 align:start position:0% so I started by just creating<00:23:32.240> a<00:23:32.440> library<00:23:33.080> that<00:23:33.720> behaves<00:23:34.240> the<00:23:34.360> way 00:23:34.510 --> 00:23:34.520 align:start position:0% creating a library that behaves the way 00:23:34.520 --> 00:23:36.390 align:start position:0% creating a library that behaves the way that<00:23:34.640> I<00:23:34.760> want<00:23:34.919> to<00:23:35.200> and<00:23:35.440> conforms<00:23:35.960> with<00:23:36.080> his 00:23:36.390 --> 00:23:36.400 align:start position:0% that I want to and conforms with his 00:23:36.400 --> 00:23:39.669 align:start position:0% that I want to and conforms with his specification<00:23:37.400> and<00:23:37.600> then<00:23:38.480> um<00:23:39.120> I<00:23:39.240> learned<00:23:39.520> a 00:23:39.669 --> 00:23:39.679 align:start position:0% specification and then um I learned a 00:23:39.679 --> 00:23:42.549 align:start position:0% specification and then um I learned a lot<00:23:40.200> maybe<00:23:40.640> maybe<00:23:40.919> next<00:23:41.159> time<00:23:41.559> I'll<00:23:41.960> I'll<00:23:42.360> do 00:23:42.549 --> 00:23:42.559 align:start position:0% lot maybe maybe next time I'll I'll do 00:23:42.559 --> 00:23:44.669 align:start position:0% lot maybe maybe next time I'll I'll do some<00:23:42.720> more 00:23:44.669 --> 00:23:44.679 align:start position:0% some more 00:23:44.679 --> 00:23:47.750 align:start position:0% some more automation<00:23:45.679> um<00:23:46.600> and<00:23:46.760> so<00:23:47.039> those<00:23:47.159> are<00:23:47.440> those<00:23:47.559> are 00:23:47.750 --> 00:23:47.760 align:start position:0% automation um and so those are those are 00:23:47.760 --> 00:23:49.470 align:start position:0% automation um and so those are those are my<00:23:48.080> recommendations<00:23:48.880> obviously<00:23:49.200> there<00:23:49.279> are<00:23:49.400> a 00:23:49.470 --> 00:23:49.480 align:start position:0% my recommendations obviously there are a 00:23:49.480 --> 00:23:51.390 align:start position:0% my recommendations obviously there are a lot<00:23:49.640> more<00:23:49.840> a<00:23:49.919> lot<00:23:50.039> of<00:23:50.159> them<00:23:50.240> are<00:23:50.400> encoded<00:23:50.919> in<00:23:51.159> in 00:23:51.390 --> 00:23:51.400 align:start position:0% lot more a lot of them are encoded in in 00:23:51.400 --> 00:23:55.029 align:start position:0% lot more a lot of them are encoded in in my<00:23:52.159> in<00:23:52.320> my<00:23:52.600> code<00:23:53.240> and<00:23:53.400> I'm<00:23:53.600> very<00:23:53.919> happy<00:23:54.679> um<00:23:54.880> if 00:23:55.029 --> 00:23:55.039 align:start position:0% my in my code and I'm very happy um if 00:23:55.039 --> 00:23:56.750 align:start position:0% my in my code and I'm very happy um if anyone<00:23:55.440> has<00:23:55.600> any<00:23:55.799> questions<00:23:56.159> about<00:23:56.400> my<00:23:56.559> code 00:23:56.750 --> 00:23:56.760 align:start position:0% anyone has any questions about my code 00:23:56.760 --> 00:23:58.430 align:start position:0% anyone has any questions about my code or<00:23:56.919> decisions<00:23:57.320> I<00:23:57.480> made<00:23:57.720> obviously<00:23:58.159> after 00:23:58.430 --> 00:23:58.440 align:start position:0% or decisions I made obviously after 00:23:58.440 --> 00:24:01.870 align:start position:0% or decisions I made obviously after after<00:23:58.720> this<00:23:59.360> um<00:23:59.640> after<00:23:59.960> this<00:24:00.120> bit<00:24:00.480> but<00:24:00.880> um<00:24:01.600> in<00:24:01.720> a 00:24:01.870 --> 00:24:01.880 align:start position:0% after this um after this bit but um in a 00:24:01.880 --> 00:24:05.029 align:start position:0% after this um after this bit but um in a follow-up<00:24:02.320> call<00:24:02.600> that's<00:24:02.880> fine<00:24:03.880> um<00:24:04.640> I'm<00:24:04.840> happy 00:24:05.029 --> 00:24:05.039 align:start position:0% follow-up call that's fine um I'm happy 00:24:05.039 --> 00:24:08.549 align:start position:0% follow-up call that's fine um I'm happy to<00:24:05.240> talk<00:24:05.440> about<00:24:05.720> them<00:24:06.200> and<00:24:06.640> and<00:24:07.080> um<00:24:08.080> I<00:24:08.200> might<00:24:08.360> be 00:24:08.549 --> 00:24:08.559 align:start position:0% to talk about them and and um I might be 00:24:08.559 --> 00:24:10.390 align:start position:0% to talk about them and and um I might be wrong<00:24:08.919> so<00:24:09.360> if<00:24:09.520> you<00:24:09.799> if<00:24:09.880> you've<00:24:10.080> got<00:24:10.240> some 00:24:10.390 --> 00:24:10.400 align:start position:0% wrong so if you if you've got some 00:24:10.400 --> 00:24:12.430 align:start position:0% wrong so if you if you've got some corrections<00:24:10.880> or<00:24:11.440> better<00:24:11.799> suggestions<00:24:12.279> I'm 00:24:12.430 --> 00:24:12.440 align:start position:0% corrections or better suggestions I'm 00:24:12.440 --> 00:24:14.230 align:start position:0% corrections or better suggestions I'm very<00:24:12.640> happy<00:24:12.799> to<00:24:12.960> receive 00:24:14.230 --> 00:24:14.240 align:start position:0% very happy to receive 00:24:14.240 --> 00:24:16.909 align:start position:0% very happy to receive them<00:24:15.240> finally<00:24:15.799> a<00:24:15.919> quick<00:24:16.159> call<00:24:16.320> for 00:24:16.909 --> 00:24:16.919 align:start position:0% them finally a quick call for 00:24:16.919 --> 00:24:20.029 align:start position:0% them finally a quick call for collaboration<00:24:18.159> um<00:24:19.159> a<00:24:19.279> lot<00:24:19.400> of<00:24:19.480> libraries<00:24:19.880> need 00:24:20.029 --> 00:24:20.039 align:start position:0% collaboration um a lot of libraries need 00:24:20.039 --> 00:24:24.269 align:start position:0% collaboration um a lot of libraries need your<00:24:20.200> help<00:24:20.440> mine<00:24:21.120> right<00:24:21.880> U<00:24:22.039> but<00:24:22.200> others<00:24:22.600> too<00:24:23.480> um 00:24:24.269 --> 00:24:24.279 align:start position:0% your help mine right U but others too um 00:24:24.279 --> 00:24:25.870 align:start position:0% your help mine right U but others too um these<00:24:24.400> are<00:24:24.640> great<00:24:24.880> places<00:24:25.200> to<00:24:25.360> start<00:24:25.640> with 00:24:25.870 --> 00:24:25.880 align:start position:0% these are great places to start with 00:24:25.880 --> 00:24:28.750 align:start position:0% these are great places to start with there's<00:24:26.520> oscal<00:24:27.039> Club<00:24:27.279> awesome<00:24:27.559> oscal<00:24:28.240> um<00:24:28.480> um 00:24:28.750 --> 00:24:28.760 align:start position:0% there's oscal Club awesome oscal um um 00:24:28.760 --> 00:24:31.710 align:start position:0% there's oscal Club awesome oscal um um oscal<00:24:29.320> doio<00:24:29.880> has<00:24:30.039> the<00:24:30.159> tools<00:24:30.600> page<00:24:31.279> and<00:24:31.480> those 00:24:31.710 --> 00:24:31.720 align:start position:0% oscal doio has the tools page and those 00:24:31.720 --> 00:24:34.110 align:start position:0% oscal doio has the tools page and those both<00:24:32.080> have<00:24:32.720> libraries<00:24:33.200> and<00:24:33.440> applications<00:24:33.960> and 00:24:34.110 --> 00:24:34.120 align:start position:0% both have libraries and applications and 00:24:34.120 --> 00:24:36.029 align:start position:0% both have libraries and applications and lots<00:24:34.320> and<00:24:34.440> lots<00:24:34.679> of<00:24:34.880> of<00:24:35.080> places<00:24:35.399> where<00:24:35.559> oscal 00:24:36.029 --> 00:24:36.039 align:start position:0% lots and lots of of places where oscal 00:24:36.039 --> 00:24:38.549 align:start position:0% lots and lots of of places where oscal work<00:24:36.200> is<00:24:36.360> being<00:24:36.720> done<00:24:37.720> uh<00:24:37.880> maybe<00:24:38.080> you'll<00:24:38.320> find 00:24:38.549 --> 00:24:38.559 align:start position:0% work is being done uh maybe you'll find 00:24:38.559 --> 00:24:40.310 align:start position:0% work is being done uh maybe you'll find somebody<00:24:38.880> that's<00:24:39.039> working<00:24:39.320> on<00:24:39.440> a<00:24:39.679> project 00:24:40.310 --> 00:24:40.320 align:start position:0% somebody that's working on a project 00:24:40.320 --> 00:24:41.549 align:start position:0% somebody that's working on a project that<00:24:40.440> you<00:24:40.559> can<00:24:40.720> help<00:24:41.000> instead<00:24:41.200> of<00:24:41.320> having<00:24:41.480> to 00:24:41.549 --> 00:24:41.559 align:start position:0% that you can help instead of having to 00:24:41.559 --> 00:24:43.830 align:start position:0% that you can help instead of having to write<00:24:41.760> your<00:24:41.880> own<00:24:42.159> so<00:24:42.720> um<00:24:43.159> you<00:24:43.240> should<00:24:43.399> do<00:24:43.600> that 00:24:43.830 --> 00:24:43.840 align:start position:0% write your own so um you should do that 00:24:43.840 --> 00:24:44.750 align:start position:0% write your own so um you should do that if<00:24:43.960> you 00:24:44.750 --> 00:24:44.760 align:start position:0% if you 00:24:44.760 --> 00:24:47.470 align:start position:0% if you can<00:24:45.760> um<00:24:46.000> I<00:24:46.120> think<00:24:46.480> I<00:24:46.640> I<00:24:46.840> something<00:24:47.200> I<00:24:47.360> I 00:24:47.470 --> 00:24:47.480 align:start position:0% can um I think I I something I I 00:24:47.480 --> 00:24:48.950 align:start position:0% can um I think I I something I I discussed<00:24:47.880> in<00:24:48.000> my<00:24:48.159> last<00:24:48.399> presentation<00:24:48.799> on 00:24:48.950 --> 00:24:48.960 align:start position:0% discussed in my last presentation on 00:24:48.960 --> 00:24:50.669 align:start position:0% discussed in my last presentation on oscal<00:24:49.399> pantic<00:24:49.840> but<00:24:49.960> I<00:24:50.039> think<00:24:50.159> that<00:24:50.279> there's<00:24:50.480> a 00:24:50.669 --> 00:24:50.679 align:start position:0% oscal pantic but I think that there's a 00:24:50.679 --> 00:24:55.070 align:start position:0% oscal pantic but I think that there's a lot<00:24:50.840> of<00:24:51.600> um<00:24:52.000> need<00:24:52.520> for<00:24:52.919> good<00:24:53.240> test<00:24:54.080> artifacts 00:24:55.070 --> 00:24:55.080 align:start position:0% lot of um need for good test artifacts 00:24:55.080 --> 00:24:59.230 align:start position:0% lot of um need for good test artifacts if<00:24:55.240> nothing<00:24:55.559> else<00:24:56.440> um<00:24:56.600> to<00:24:56.799> be<00:24:56.960> able<00:24:57.200> to<00:24:57.679> to<00:24:58.480> um 00:24:59.230 --> 00:24:59.240 align:start position:0% if nothing else um to be able to to um 00:24:59.240 --> 00:25:00.830 align:start position:0% if nothing else um to be able to to um ensure<00:24:59.760> that<00:24:59.960> if<00:25:00.080> you're<00:25:00.320> if<00:25:00.399> you're<00:25:00.559> using 00:25:00.830 --> 00:25:00.840 align:start position:0% ensure that if you're if you're using 00:25:00.840 --> 00:25:04.190 align:start position:0% ensure that if you're if you're using the<00:25:01.000> Json<00:25:01.480> schema<00:25:02.240> to<00:25:02.559> produce<00:25:02.960> your<00:25:03.399> your 00:25:04.190 --> 00:25:04.200 align:start position:0% the Json schema to produce your your 00:25:04.200 --> 00:25:06.830 align:start position:0% the Json schema to produce your your your<00:25:04.440> code<00:25:05.320> um<00:25:05.480> to<00:25:05.679> be<00:25:05.840> able<00:25:06.039> to<00:25:06.240> have<00:25:06.520> edge 00:25:06.830 --> 00:25:06.840 align:start position:0% your code um to be able to have edge 00:25:06.840 --> 00:25:08.389 align:start position:0% your code um to be able to have edge cases<00:25:07.279> that<00:25:07.360> will<00:25:07.559> let<00:25:07.679> you<00:25:07.880> catch<00:25:08.200> things 00:25:08.389 --> 00:25:08.399 align:start position:0% cases that will let you catch things 00:25:08.399 --> 00:25:10.149 align:start position:0% cases that will let you catch things that<00:25:08.559> aren't<00:25:08.880> aren't<00:25:09.120> part<00:25:09.240> of<00:25:09.320> the<00:25:09.399> schema<00:25:09.840> so 00:25:10.149 --> 00:25:10.159 align:start position:0% that aren't aren't part of the schema so 00:25:10.159 --> 00:25:12.510 align:start position:0% that aren't aren't part of the schema so so<00:25:10.279> that<00:25:10.399> you<00:25:10.880> understand<00:25:11.600> when<00:25:11.799> and<00:25:12.039> where 00:25:12.510 --> 00:25:12.520 align:start position:0% so that you understand when and where 00:25:12.520 --> 00:25:14.269 align:start position:0% so that you understand when and where your<00:25:12.760> library<00:25:13.159> is<00:25:13.240> going<00:25:13.360> to<00:25:13.480> produce<00:25:13.960> code 00:25:14.269 --> 00:25:14.279 align:start position:0% your library is going to produce code 00:25:14.279 --> 00:25:17.029 align:start position:0% your library is going to produce code that<00:25:14.720> that<00:25:15.120> passes<00:25:15.840> passes<00:25:16.200> your<00:25:16.440> library<00:25:16.919> but 00:25:17.029 --> 00:25:17.039 align:start position:0% that that passes passes your library but 00:25:17.039 --> 00:25:20.630 align:start position:0% that that passes passes your library but isn't<00:25:17.440> actually<00:25:17.720> valid<00:25:18.120> alcal<00:25:19.120> um<00:25:19.960> uh<00:25:20.399> uh 00:25:20.630 --> 00:25:20.640 align:start position:0% isn't actually valid alcal um uh uh 00:25:20.640 --> 00:25:22.149 align:start position:0% isn't actually valid alcal um uh uh that's<00:25:20.799> something<00:25:21.159> i'<00:25:21.360> I've<00:25:21.480> worked<00:25:21.720> on<00:25:21.960> as 00:25:22.149 --> 00:25:22.159 align:start position:0% that's something i' I've worked on as 00:25:22.159 --> 00:25:25.029 align:start position:0% that's something i' I've worked on as part<00:25:22.360> of<00:25:22.480> my<00:25:22.640> library<00:25:23.600> um<00:25:23.799> I<00:25:23.919> haven't<00:25:24.600> broken 00:25:25.029 --> 00:25:25.039 align:start position:0% part of my library um I haven't broken 00:25:25.039 --> 00:25:27.110 align:start position:0% part of my library um I haven't broken out<00:25:25.559> broken<00:25:25.880> it<00:25:26.039> out<00:25:26.240> and<00:25:26.399> made<00:25:26.559> it<00:25:26.679> its<00:25:26.799> own 00:25:27.110 --> 00:25:27.120 align:start position:0% out broken it out and made it its own 00:25:27.120 --> 00:25:29.149 align:start position:0% out broken it out and made it its own project<00:25:27.520> but<00:25:27.720> anybody's<00:25:28.360> you<00:25:28.480> know<00:25:28.840> welcome 00:25:29.149 --> 00:25:29.159 align:start position:0% project but anybody's you know welcome 00:25:29.159 --> 00:25:31.909 align:start position:0% project but anybody's you know welcome to<00:25:29.320> steal<00:25:29.720> anything<00:25:30.279> you'd<00:25:30.559> like<00:25:30.760> to<00:25:30.919> steal 00:25:31.909 --> 00:25:31.919 align:start position:0% to steal anything you'd like to steal 00:25:31.919 --> 00:25:34.909 align:start position:0% to steal anything you'd like to steal please<00:25:32.919> um<00:25:33.240> if<00:25:33.360> you<00:25:33.559> have<00:25:33.799> something<00:25:34.679> uh<00:25:34.799> that 00:25:34.909 --> 00:25:34.919 align:start position:0% please um if you have something uh that 00:25:34.919 --> 00:25:37.190 align:start position:0% please um if you have something uh that I<00:25:35.039> can<00:25:35.200> steal<00:25:35.559> please<00:25:35.760> let<00:25:35.919> me 00:25:37.190 --> 00:25:37.200 align:start position:0% I can steal please let me 00:25:37.200 --> 00:25:40.029 align:start position:0% I can steal please let me know<00:25:38.200> and<00:25:38.360> that<00:25:38.480> is<00:25:38.679> all<00:25:39.399> uh<00:25:39.480> for<00:25:39.679> my 00:25:40.029 --> 00:25:40.039 align:start position:0% know and that is all uh for my 00:25:40.039 --> 00:25:41.950 align:start position:0% know and that is all uh for my presentation<00:25:41.039> um<00:25:41.279> thank<00:25:41.440> you<00:25:41.559> so<00:25:41.679> much<00:25:41.840> for 00:25:41.950 --> 00:25:41.960 align:start position:0% presentation um thank you so much for 00:25:41.960 --> 00:25:43.830 align:start position:0% presentation um thank you so much for your<00:25:42.120> time<00:25:42.399> I<00:25:42.520> appreciate<00:25:42.919> it<00:25:43.159> and<00:25:43.480> I<00:25:43.679> guess 00:25:43.830 --> 00:25:43.840 align:start position:0% your time I appreciate it and I guess 00:25:43.840 --> 00:25:46.430 align:start position:0% your time I appreciate it and I guess I'll<00:25:44.039> stop<00:25:44.480> and<00:25:44.679> we<00:25:44.799> can<00:25:45.480> um<00:25:45.840> open<00:25:46.080> the<00:25:46.200> floor 00:25:46.430 --> 00:25:46.440 align:start position:0% I'll stop and we can um open the floor 00:25:46.440 --> 00:25:49.600 align:start position:0% I'll stop and we can um open the floor for<00:25:46.600> questions