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        ComponentDefinition.class,
017        ImportComponentDefinition.class,
018        DefinedComponent.class,
019        Capability.class,
020        IncorporatesComponent.class,
021        ComponentControlImplementation.class,
022        ComponentImplementedRequirement.class,
023        ComponentStatement.class
024    },
025    imports = OscalImplementationCommonMetaschema.class,
026    remarks = "The OSCAL Component Definition Model can be used to describe the implementation of controls in a `component` or a set of components grouped as a `capability`. A component can be either a *technical component* , or a *documentary component*.\n"
027            + "\n"
028            + "A technical component is a component that is implemented in hardware (physical or virtual) or software. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their hardware and software.\n"
029            + "\n"
030            + "A documentary component is a component implemented for a documented process, procedure, or policy. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their process, procedure, or policy.\n"
031            + "\n"
032            + "The information provided by a technical or documentary component can be used by component consumers to provide starting narratives for documenting control implementations in an OSCAL SSP.\n"
033            + "\n"
034            + "The root of the OSCAL Implementation Layer Component Definition model is `component-definition`."
035)
036public final class OscalComponentDefinitionMetaschema extends AbstractBoundMetaschema {
037  private static final MarkupLine NAME = MarkupLine.fromMarkdown("OSCAL Component Definition Model");
038
039  private static final String SHORT_NAME = "oscal-component-definition";
040
041  private static final String VERSION = "1.1.2";
042
043  private static final URI XML_NAMESPACE = URI.create("http://csrc.nist.gov/ns/oscal/1.0");
044
045  private static final URI JSON_BASE_URI = URI.create("http://csrc.nist.gov/ns/oscal");
046
047  private static final MarkupMultiline REMARKS = MarkupMultiline.fromMarkdown("The OSCAL Component Definition Model can be used to describe the implementation of controls in a `component` or a set of components grouped as a `capability`. A component can be either a *technical component* , or a *documentary component*.\n"
048      + "\n"
049      + "A technical component is a component that is implemented in hardware (physical or virtual) or software. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their hardware and software.\n"
050      + "\n"
051      + "A documentary component is a component implemented for a documented process, procedure, or policy. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their process, procedure, or policy.\n"
052      + "\n"
053      + "The information provided by a technical or documentary component can be used by component consumers to provide starting narratives for documenting control implementations in an OSCAL SSP.\n"
054      + "\n"
055      + "The root of the OSCAL Implementation Layer Component Definition model is `component-definition`.");
056
057  public OscalComponentDefinitionMetaschema(List<? extends IMetaschema> importedMetaschema,
058      IBindingContext bindingContext) {
059    super(importedMetaschema, bindingContext);
060  }
061
062  @Override
063  public MarkupLine getName() {
064    return NAME;
065  }
066
067  @Override
068  public String getShortName() {
069    return SHORT_NAME;
070  }
071
072  @Override
073  public String getVersion() {
074    return VERSION;
075  }
076
077  @Override
078  public URI getXmlNamespace() {
079    return XML_NAMESPACE;
080  }
081
082  @Override
083  public URI getJsonBaseUri() {
084    return JSON_BASE_URI;
085  }
086
087  @Override
088  public MarkupMultiline getRemarks() {
089    return REMARKS;
090  }
091}