001package gov.nist.secauto.oscal.lib.model;
002
003import gov.nist.secauto.metaschema.binding.IBindingContext;
004import gov.nist.secauto.metaschema.binding.model.AbstractBoundMetaschema;
005import gov.nist.secauto.metaschema.binding.model.annotations.Metaschema;
006import gov.nist.secauto.metaschema.model.common.IMetaschema;
007import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupLine;
008import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultiline;
009import java.lang.Override;
010import java.lang.String;
011import java.net.URI;
012import java.util.List;
013
014@Metaschema(
015    assemblies = {
016        Profile.class,
017        ProfileImport.class,
018        Merge.class,
019        ProfileGroup.class,
020        Modify.class,
021        InsertControls.class,
022        ProfileSelectControlById.class,
023        Matching.class
024    },
025    imports = {
026        OscalMetadataMetaschema.class,
027        OscalControlCommonMetaschema.class
028    },
029    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"
030            + "\n"
031            + "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"
032            + "\n"
033            + "OSCAL profiles have uses beyond establishing control baselines, such as documentation generation or as reference tables for validations."
034)
035public final class OscalProfileMetaschema extends AbstractBoundMetaschema {
036  private static final MarkupLine NAME = MarkupLine.fromMarkdown("OSCAL Profile Model");
037
038  private static final String SHORT_NAME = "oscal-profile";
039
040  private static final String VERSION = "1.1.2";
041
042  private static final URI XML_NAMESPACE = URI.create("http://csrc.nist.gov/ns/oscal/1.0");
043
044  private static final URI JSON_BASE_URI = URI.create("http://csrc.nist.gov/ns/oscal");
045
046  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"
047      + "\n"
048      + "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"
049      + "\n"
050      + "OSCAL profiles have uses beyond establishing control baselines, such as documentation generation or as reference tables for validations.");
051
052  public OscalProfileMetaschema(List<? extends IMetaschema> importedMetaschema,
053      IBindingContext bindingContext) {
054    super(importedMetaschema, bindingContext);
055  }
056
057  @Override
058  public MarkupLine getName() {
059    return NAME;
060  }
061
062  @Override
063  public String getShortName() {
064    return SHORT_NAME;
065  }
066
067  @Override
068  public String getVersion() {
069    return VERSION;
070  }
071
072  @Override
073  public URI getXmlNamespace() {
074    return XML_NAMESPACE;
075  }
076
077  @Override
078  public URI getJsonBaseUri() {
079    return JSON_BASE_URI;
080  }
081
082  @Override
083  public MarkupMultiline getRemarks() {
084    return REMARKS;
085  }
086}