1 package gov.nist.secauto.oscal.lib.model;
2
3 import gov.nist.secauto.metaschema.binding.IBindingContext;
4 import gov.nist.secauto.metaschema.binding.model.AbstractBoundMetaschema;
5 import gov.nist.secauto.metaschema.binding.model.annotations.Metaschema;
6 import gov.nist.secauto.metaschema.model.common.IMetaschema;
7 import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupLine;
8 import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultiline;
9 import java.lang.Override;
10 import java.lang.String;
11 import java.net.URI;
12 import java.util.List;
13
14 @Metaschema(
15 assemblies = {
16 Profile.class,
17 ProfileImport.class,
18 Merge.class,
19 ProfileGroup.class,
20 Modify.class,
21 InsertControls.class,
22 ProfileSelectControlById.class,
23 Matching.class
24 },
25 imports = {
26 OscalMetadataMetaschema.class,
27 OscalControlCommonMetaschema.class
28 },
29 remarks = "In OSCAL a profile represents a set of selected [controls](https://pages.nist.gov/OSCAL/concepts/terminology/#control) from one or more control catalogs. Such a set of controls can be referenced by an OSCAL [system security plan](https://pages.nist.gov/OSCAL/concepts/layer/implementation/ssp/) (SSP) to establish a control [baseline](https://pages.nist.gov/OSCAL/concepts/terminology/#baseline). This effective set of controls is produced from an OSCAL profile using a deterministic, predictable process called [profile resolution](https://pages.nist.gov/OSCAL/concepts/processing/profile-resolution/).\n"
30 + "\n"
31 + "A profile references one or more OSCAL catalogs or profiles to import controls for control selection and tailoring. A profile can also describe how a resulting catalog is structured. When the profile is resolved, these selections and modifications are processed to produce a resulting OSCAL catalog.\n"
32 + "\n"
33 + "OSCAL profiles have uses beyond establishing control baselines, such as documentation generation or as reference tables for validations."
34 )
35 public final class OscalProfileMetaschema extends AbstractBoundMetaschema {
36 private static final MarkupLine NAME = MarkupLine.fromMarkdown("OSCAL Profile Model");
37
38 private static final String SHORT_NAME = "oscal-profile";
39
40 private static final String VERSION = "1.1.2";
41
42 private static final URI XML_NAMESPACE = URI.create("http://csrc.nist.gov/ns/oscal/1.0");
43
44 private static final URI JSON_BASE_URI = URI.create("http://csrc.nist.gov/ns/oscal");
45
46 private static final MarkupMultiline REMARKS = MarkupMultiline.fromMarkdown("In OSCAL a profile represents a set of selected [controls](https://pages.nist.gov/OSCAL/concepts/terminology/#control) from one or more control catalogs. Such a set of controls can be referenced by an OSCAL [system security plan](https://pages.nist.gov/OSCAL/concepts/layer/implementation/ssp/) (SSP) to establish a control [baseline](https://pages.nist.gov/OSCAL/concepts/terminology/#baseline). This effective set of controls is produced from an OSCAL profile using a deterministic, predictable process called [profile resolution](https://pages.nist.gov/OSCAL/concepts/processing/profile-resolution/).\n"
47 + "\n"
48 + "A profile references one or more OSCAL catalogs or profiles to import controls for control selection and tailoring. A profile can also describe how a resulting catalog is structured. When the profile is resolved, these selections and modifications are processed to produce a resulting OSCAL catalog.\n"
49 + "\n"
50 + "OSCAL profiles have uses beyond establishing control baselines, such as documentation generation or as reference tables for validations.");
51
52 public OscalProfileMetaschema(List<? extends IMetaschema> importedMetaschema,
53 IBindingContext bindingContext) {
54 super(importedMetaschema, bindingContext);
55 }
56
57 @Override
58 public MarkupLine getName() {
59 return NAME;
60 }
61
62 @Override
63 public String getShortName() {
64 return SHORT_NAME;
65 }
66
67 @Override
68 public String getVersion() {
69 return VERSION;
70 }
71
72 @Override
73 public URI getXmlNamespace() {
74 return XML_NAMESPACE;
75 }
76
77 @Override
78 public URI getJsonBaseUri() {
79 return JSON_BASE_URI;
80 }
81
82 @Override
83 public MarkupMultiline getRemarks() {
84 return REMARKS;
85 }
86 }