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