Skip to content

Instantly share code, notes, and snippets.

@aj-stein-nist
Last active February 23, 2024 22:59
Show Gist options
  • Save aj-stein-nist/3c89090184bc446b4759a41b52cf3ae3 to your computer and use it in GitHub Desktop.
Save aj-stein-nist/3c89090184bc446b4759a41b52cf3ae3 to your computer and use it in GitHub Desktop.
Example model modules and document instances for PR usnistgov/metaschema#552 and issue #548
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://raw.githubusercontent.com/usnistgov/metaschema/develop/schema/xml/metaschema.xsd" type="application/xml" schematypens="http://www.w3.org/2001/XMLSchema"?>
<METASCHEMA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://csrc.nist.gov/ns/oscal/metaschema/1.0">
<schema-name>Let Experiment Model</schema-name>
<schema-version>0.1.0</schema-version>
<short-name>experiment</short-name>
<namespace>https://github.com/usnistgov/metaschema/issues/548</namespace>
<json-base-uri>https://github.com/usnistgov/metaschema/issues/548</json-base-uri>
<define-assembly name="package">
<root-name>outer-package</root-name>
<define-flag name="id" as-type="positiveInteger"/>
<model>
<define-field name="color" as-type="string" min-occurs="1" max-occurs="1"/>
<define-field name="height" as-type="positive-integer"/>
<define-field name="width" as-type="positive-integer"/>
<define-field name="depth" as-type="positive-integer" />
<assembly ref="package" max-occurs="unbounded">
<use-name>inner-package</use-name>
<group-as name="inner-packages" in-json="ARRAY"/>
</assembly>
</model>
<constraint>
<let var="all-approved-colors" expression="('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet')"/>
<let var="inner-approved-colors" expression="('blue', 'indigo', 'violet')"/>
<expect target="color" test=".=('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet')"/>
<expect target="inner-package/color" test=".=('blue', 'indigo', 'violet')"/>
</constraint>
</define-assembly>
</METASCHEMA>
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://raw.githubusercontent.com/usnistgov/metaschema/develop/schema/xml/metaschema.xsd" type="application/xml" schematypens="http://www.w3.org/2001/XMLSchema"?>
<METASCHEMA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://csrc.nist.gov/ns/oscal/metaschema/1.0">
<schema-name>Let Experiment Model</schema-name>
<schema-version>0.2.0</schema-version>
<short-name>experiment</short-name>
<namespace>https://github.com/usnistgov/metaschema/issues/548</namespace>
<json-base-uri>https://github.com/usnistgov/metaschema/issues/548</json-base-uri>
<define-assembly name="package">
<root-name>outer-package</root-name>
<define-flag name="id" as-type="positiveInteger"/>
<model>
<define-field name="color" as-type="string" min-occurs="1" max-occurs="1"/>
<define-field name="height" as-type="positive-integer"/>
<define-field name="width" as-type="positive-integer"/>
<define-field name="depth" as-type="positive-integer" />
<assembly ref="package" max-occurs="unbounded">
<use-name>inner-package</use-name>
<group-as name="inner-packages" in-json="ARRAY"/>
</assembly>
</model>
<!--
Moved to external constraints in let_example-1_external-constraints.xml
-->
</define-assembly>
</METASCHEMA>
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://raw.githubusercontent.com/usnistgov/metaschema/develop/schema/xml/metaschema-meta-constraints.xsd" type="application/xml" schematypens="http://www.w3.org/2001/XMLSchema"?>
<metaschema-meta-constraints xmlns="http://csrc.nist.gov/ns/oscal/metaschema/1.0">
<import href="let_example-1.xml" />
<context>
<metapath target="/outer-package,//inner-package" />
<constraints>
<let var="inner-volume" expression="sum(for $package in inner-package return $package/height * $package/width * $package/depth)"/>
<let var="volume" expression="depth * width * height"/>
<expect target="." test="$volume &gt; $inner-volume"/>
<expect target="." test="false()">
<message>volume: {$volume} inner-volume: {$inner-volume}</message>
</expect>
</constraints>
</context>
<context>
<metapath target="/outer-package" />
<constraints>
<let var="all-approved-colors" expression="('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet')"/>
<expect target="color" test=".=$all-approved-colors"/>
</constraints>
<context>
<metapath target="inner-package" />
<constraints>
<let var="inner-approved-colors" expression="('blue', 'indigo', 'violet')"/>
<expect target="color" test=".=$inner-approved-colors"/>
</constraints>
</context>
</context>
</metaschema-meta-constraints>
{
"outer-package":
{
"color": "red",
"height": 10,
"width": 10,
"depth": 10,
"inner-packages": [
{
"color": "violet",
"height": 100,
"width": 100,
"depth": 100
},
{
"color": "periwinkle",
"height": 200,
"width": 200,
"depth": 200
},
{
"color": "mauve",
"height": 500,
"width": 500,
"depth": 500
}
]
}
}
{
"outer-package":
{
"color": "red",
"height": 10,
"width": 10,
"depth": 10,
"inner-packages": [
{
"color": "violet",
"height": 5,
"width": 5,
"depth": 5
}
]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment