Skip to content

Commit a6ee158

Browse files
Remove with-parent-controls developmental feature (#1819)
* Revert changes from usnistgov/OSCAL#1717 that address a documented feature in the profile resolution spec that didn't exist in the model. Instead of updating the model, this PR removes the "with-parent-controls" feature from the profile resolution spec. This developmental feature should be removed for the following reasons. - This feature is not implemented in any of the current XSLT or Java implementations. - This feature is not being requested from a significant segment of the user community. The related issue usnistgov/OSCAL#1662 has support from 1 community member outside the NIST team. - This feature is extremely difficult to implement along with with-child-controls, which works on the opposite axis. - IMHO, profile resolution doesn't need to be made more complicated than it already is. * PR review, delete dangling with-parent-controls flag. --------- Co-authored-by: A.J. Stein <[email protected]>
1 parent 46016d5 commit a6ee158

File tree

2 files changed

+6
-44
lines changed

2 files changed

+6
-44
lines changed

src/metaschema/oscal_profile_metaschema.xml

+5-26
Original file line numberDiff line numberDiff line change
@@ -81,24 +81,13 @@
8181
<p>Identifies that all controls are to be included from the imported catalog or profile.</p>
8282
</remarks>
8383
</assembly>
84-
<define-assembly name="include-controls" min-occurs="1" max-occurs="unbounded">
85-
<formal-name>Select Control</formal-name>
86-
<description>Select a control or controls from an imported control set.</description>
87-
<flag ref="with-child-controls"/>
88-
<flag ref="with-parent-controls"/>
89-
<model>
90-
<field ref="with-id" max-occurs="unbounded">
91-
<group-as name="with-ids" in-json="ARRAY"/>
92-
</field>
93-
<assembly ref="matching" max-occurs="unbounded">
94-
<group-as name="matching" in-json="ARRAY"/>
95-
</assembly>
96-
</model>
84+
<assembly ref="select-control-by-id" min-occurs="1" max-occurs="unbounded">
85+
<use-name>include-controls</use-name>
86+
<group-as name="include-controls" in-json="ARRAY"/>
9787
<remarks>
9888
<p>If <code>with-child-controls</code> is <q>yes</q> on the call to a control, any controls appearing within it (child controls) will be selected, with no additional <code>call</code> directives required. This flag provides a way to include controls with all their dependent controls (enhancements) without having to call them individually.</p>
99-
<p>If with-parent-controls is "yes" on the call to a control, it will not be selected and removed from (shown without) a parent control, but instead will be copied with its parent in the source. This flag provides a way to include controls with all their ancestor controls (enhancements) without having to call them individually.</p>
10089
</remarks>
101-
</define-assembly>
90+
</assembly>
10291
</choice>
10392
<assembly ref="select-control-by-id" max-occurs="unbounded">
10493
<use-name>exclude-controls</use-name>
@@ -416,7 +405,7 @@
416405

417406
</define-assembly>
418407
<define-assembly name="insert-controls">
419-
<formal-name>Select Controls</formal-name>
408+
<formal-name>Insert Controls</formal-name>
420409
<description>Specifies which controls to use in the containing context.</description>
421410
<define-flag as-type="token" name="order">
422411
<formal-name>Order</formal-name>
@@ -476,16 +465,6 @@
476465
</allowed-values>
477466
</constraint>
478467
</define-flag>
479-
<define-flag as-type="token" name="with-parent-controls">
480-
<formal-name>Include Parent Controls with Control</formal-name>
481-
<description>When a control is included, whether its parent (ancestor) controls are also included.</description>
482-
<constraint>
483-
<allowed-values>
484-
<enum value="yes">Include parent controls with an included control.</enum>
485-
<enum value="no">When importing a control, only include parent controls that are also explicitly called.</enum>
486-
</allowed-values>
487-
</constraint>
488-
</define-flag>
489468
<define-flag as-type="string" name="pattern">
490469
<formal-name>Pattern</formal-name>
491470
<description>A <a href="https://en.wikipedia.org/wiki/Glob_(programming)">glob expression</a> matching the IDs of one or more controls to be selected.</description>

src/specifications/profile-resolution/profile-resolution-specml.xml

+1-18
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ include-controls:
562562
<section id="import-nested">
563563
<head>Dealing with Nested Controls and Groups</head>
564564
<p>In OSCAL, controls may contain child controls. For instance, in SP 800-53 many controls are supplemented with control enhancements; in OSCAL these are represented as child controls within parent controls. So parent AC-2 (in a given catalog) has children AC-2(1) through AC-2(13), for example.</p>
565-
<p>By default, inclusion of a control also causes any of that control&apos;s ancestors (or parents) to also be included. By default, inclusion of a control DOES NOT cause the inclusion of any descendants (or children) of that control to be included. This applies to both controls and groups.</p>
565+
<p>By default, inclusion of a control also causes any of that control&apos;s ancestors to also be included. By default, inclusion of a control DOES NOT cause the inclusion of any descendants of that control to be included. This applies to both controls and groups.</p>
566566
<p>This default behavior can be modified by the following two optional children of the
567567
<src>include-controls</src> object.
568568
</p>
@@ -580,23 +580,6 @@ include-controls:
580580
directive as being equivalent to one having <src>with-child-controls:no</src>.
581581
</req></p>
582582
</section>
583-
<section id="include-parent-controls">
584-
<head>with-parent-controls</head>
585-
<p>Although similar to the above
586-
<src>with-child-controls</src>, the optional
587-
<src>with-parent-controls</src> applies to parents of the included control, and has the opposite default behavior. In order to maintain the structure of the source catalog, profile resolution includes all parents of an included control by default. If a profile author wants to change this structure, they should use an exclude directive that lists all of the undesired parents. As a shortcut for this,
588-
<src>with-parent-controls</src> provides the following functionality:
589-
</p>
590-
<p><req level="must" id="req-with-parent-controls-yes">A <src>with-parent-controls:
591-
yes</src> directive on an <src>include-controls</src> indicates that <em>all parent
592-
controls</em> of the included control MUST also be included.</req></p>
593-
<p><req level="must" id="req-with-parent-controls-no">A <src>with-parent-controls:
594-
no</src> directive on an <src>include-controls</src> indicates that ONLY the
595-
matching control is included, any parent MUST NOT be included. </req></p>
596-
<p><req level="must" id="req-with-parent-controls-none">If no <src>with-parent-controls</src> is provided, the processor MUST
597-
consider the directive as being equivalent to one having
598-
<src>with-parent-controls:yes</src>. </req></p>
599-
</section>
600583
</section>
601584
<section id="exclude-directive">
602585
<head>exclude-controls</head>

0 commit comments

Comments
 (0)