Skip to content

Instantly share code, notes, and snippets.

@aj-stein-nist
Created February 23, 2024 21:07
Show Gist options
  • Save aj-stein-nist/b676708701902c54770c2bacad8c2ce9 to your computer and use it in GitHub Desktop.
Save aj-stein-nist/b676708701902c54770c2bacad8c2ce9 to your computer and use it in GitHub Desktop.
Example model module and document instances for usnistgov/metaschema#328
<?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
}
]
}
}
$ metaschema-cli --version
metaschema-java 1.0.0-M2-SNAPSHOT built at 2024-02-23T15:07:06+0000 from branch 325-convert-command (6c65ce7) at git@github.com:usnistgov/metaschema-java.git
metaschema v0.10.0 built at 2024-02-23T15:07:06+0000 from branch 16919d512f96110c49fa2edcd3e6ee9a377c0b69 (16919d5) at https://github.com/usnistgov/metaschema.git
$ metaschema-cli validate-content -m '/home/me/code/let_example-1.xml' -c '/home/me/code/let_example-1_external-constraints.xml' '/home/me/code/let_example-1_invalid_instance.json' --show-stack-trace
Loading module 'file:/home/me/code/let_example-1_external-constraints.xml'
Unable to load constraint set '/home/me/code/let_example-1_external-constraints.xml'.
java.io.IOException: java.io.IOException: An unexpected error occured during parsing: Expected XML END_ELEMENT for QName '{http://csrc.nist.gov/ns/oscal/metaschema/1.0}metaschema-meta-constraints', instead found START_ELEMENT: {http://csrc.nist.gov/ns/oscal/metaschema/1.0}context at 16:5 at 16:5
at gov.nist.secauto.metaschema.databind.io.AbstractDeserializer.deserializeToNodeItem(AbstractDeserializer.java:100) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.IDeserializer.deserializeToNodeItem(IDeserializer.java:195) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.DefaultBoundLoader.loadAsNodeItem(DefaultBoundLoader.java:246) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.DefaultBoundLoader.loadAsNodeItem(DefaultBoundLoader.java:223) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.DefaultBoundLoader.load(DefaultBoundLoader.java:170) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.DefaultBoundLoader.load(DefaultBoundLoader.java:162) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.model.metaschema.BindingConstraintLoader.parseResource(BindingConstraintLoader.java:110) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.model.metaschema.BindingConstraintLoader.parseResource(BindingConstraintLoader.java:90) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.core.model.AbstractLoader.loadInternal(AbstractLoader.java:160) ~[gov.nist.secauto.metaschema.metaschema-core-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.core.model.AbstractLoader.load(AbstractLoader.java:78) ~[gov.nist.secauto.metaschema.metaschema-core-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.cli.commands.AbstractValidateContentCommand$AbstractValidationCommandExecutor.execute(AbstractValidateContentCommand.java:172) ~[gov.nist.secauto.metaschema.metaschema-cli-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.cli.processor.CLIProcessor$CallingContext.invokeCommand(CLIProcessor.java:406) ~[gov.nist.secauto.metaschema.cli-processor-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.cli.processor.CLIProcessor$CallingContext.processCommand(CLIProcessor.java:377) [gov.nist.secauto.metaschema.cli-processor-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.cli.processor.CLIProcessor.parseCommand(CLIProcessor.java:193) [gov.nist.secauto.metaschema.cli-processor-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.cli.processor.CLIProcessor.process(CLIProcessor.java:176) [gov.nist.secauto.metaschema.cli-processor-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.cli.CLI.runCli(CLI.java:67) [gov.nist.secauto.metaschema.metaschema-cli-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.cli.CLI.main(CLI.java:47) [gov.nist.secauto.metaschema.metaschema-cli-1.0.0-M2-SNAPSHOT.jar:?]
Caused by: java.io.IOException: An unexpected error occured during parsing: Expected XML END_ELEMENT for QName '{http://csrc.nist.gov/ns/oscal/metaschema/1.0}metaschema-meta-constraints', instead found START_ELEMENT: {http://csrc.nist.gov/ns/oscal/metaschema/1.0}context at 16:5 at 16:5
at gov.nist.secauto.metaschema.databind.io.xml.DefaultXmlDeserializer.parseXmlInternal(DefaultXmlDeserializer.java:171) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.DefaultXmlDeserializer.deserializeToValue(DefaultXmlDeserializer.java:155) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.DefaultXmlDeserializer.deserializeToNodeItemInternal(DefaultXmlDeserializer.java:146) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.DefaultXmlDeserializer.deserializeToNodeItemInternal(DefaultXmlDeserializer.java:53) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.AbstractDeserializer.deserializeToNodeItem(AbstractDeserializer.java:98) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
... 16 more
Caused by: java.io.IOException: Expected XML END_ELEMENT for QName '{http://csrc.nist.gov/ns/oscal/metaschema/1.0}metaschema-meta-constraints', instead found START_ELEMENT: {http://csrc.nist.gov/ns/oscal/metaschema/1.0}context at 16:5 at 16:5
at gov.nist.secauto.metaschema.core.model.util.XmlEventUtil.requireEndElement(XmlEventUtil.java:484) ~[gov.nist.secauto.metaschema.metaschema-core-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.MetaschemaXmlReader$ItemReadHandler.readDefinitionElement(MetaschemaXmlReader.java:460) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.MetaschemaXmlReader$ItemReadHandler.readItemAssembly(MetaschemaXmlReader.java:586) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.model.IBoundDefinitionModelAssembly.readItem(IBoundDefinitionModelAssembly.java:95) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.MetaschemaXmlReader.read(MetaschemaXmlReader.java:163) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.DefaultXmlDeserializer.parseXmlInternal(DefaultXmlDeserializer.java:168) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.DefaultXmlDeserializer.deserializeToValue(DefaultXmlDeserializer.java:155) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.DefaultXmlDeserializer.deserializeToNodeItemInternal(DefaultXmlDeserializer.java:146) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.xml.DefaultXmlDeserializer.deserializeToNodeItemInternal(DefaultXmlDeserializer.java:53) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
at gov.nist.secauto.metaschema.databind.io.AbstractDeserializer.deserializeToNodeItem(AbstractDeserializer.java:98) ~[gov.nist.secauto.metaschema.metaschema-databind-1.0.0-M2-SNAPSHOT.jar:?]
... 16 more
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment