Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using current, not legacy date types name causes JSON Schema generation errors #106

Open
aj-stein-nist opened this issue Feb 28, 2024 · 0 comments
Labels
bug Something isn't working scope: schema generation

Comments

@aj-stein-nist
Copy link
Contributor

Describe the bug

When using the current version of metaschema-xslt as of commit 0010340, when I use the current kabob-case data types in documentation and not [the legacy data types (no longer documented), the JSON Schemas, some $refs double the name after the path, rendering the JSON Schemas invalid.

Who is the bug affecting?

Developer using metaschema-xslt for JSON Schema generation of models in a Metaschema module.

What is affected by this bug?

JSON Schema generation

When does this occur?

Consistently

How do we replicate the issue?

{What are the steps to reproduce the behavior?

  1. Use ./bin/metaschema-xslt schema-gen 'choice-example_metaschema.xml' '.' 'choice-example' to generate schema
  2. Open JSON Schema and observe refs like { "$ref" : "#/definitions/PositiveIntegerDatatype PositiveIntegerDatatype" }, int the outputted schema

Metaschema module:

<?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="http://csrc.nist.gov/ns/oscal/metaschema/1.0">
    <schema-name>Model for Testing usnistgov/metaschema-xslt#105</schema-name>
    <schema-version>0.1.0</schema-version>
    <short-name>choice-bug-issue-105</short-name>
    <namespace>https://github.com/usnistgov/metaschema-xslt/issues/105</namespace>
    <json-base-uri>https://github.com/usnistgov/metaschema-xslt/issues/105</json-base-uri>
    <define-assembly name="root">
        <formal-name>Root Assembly for Choice</formal-name>
        <description>This root assembly should only an instance to have a field of a or b, but not both.</description>
        <root-name>root</root-name>
        <model>
            <choice>
                <define-field name="a" as-type="positive-integer" min-occurs="1" max-occurs="1"/>
                <define-field name="b" as-type="positive-integer" min-occurs="1" max-occurs="1"/>
            </choice>
        </model>
    </define-assembly>
</METASCHEMA>

Outputted JSON Schema:

 { "$schema" : "http://json-schema.org/draft-07/schema#",
  "$id" : "https://github.com/usnistgov/metaschema-xslt/issues/105/0.1.0/choice-bug-issue-105-schema.json",
  "$comment" : "Model for Testing usnistgov/metaschema-xslt#105: JSON Schema",
  "type" : "object",
  "definitions" : 
  { "json-schema-directive" : 
   { "title" : "Schema Directive",
    "description" : "A JSON Schema directive to bind a specific schema to its document instance.",
    "$id" : "#/definitions/json-schema-directive",
    "$ref" : "#/definitions/URIReferenceDatatype" },
   "choice-bug-issue-105-choice-bug-issue-105:root" : 
   { "title" : "Root Assembly for Choice",
    "description" : "This root assembly should only an instance to have a field of a or b, but not both.",
    "$id" : "#/definitions/choice-bug-issue-105-choice-bug-issue-105:root",
    "type" : "object",
    "properties" : 
    { "a" : 
     { "$ref" : "#/definitions/PositiveIntegerDatatype PositiveIntegerDatatype" },
     "b" : 
     { "$ref" : "#/definitions/PositiveIntegerDatatype PositiveIntegerDatatype" } },
    "additionalProperties" : false },
   "IntegerDatatype" : 
   { "description" : "A whole number value.",
    "type" : "integer" },
   "PositiveIntegerDatatype" : 
   { "description" : "An integer value that is greater than 0.",
    "allOf" : 
    [ 
     { "$ref" : "#/definitions/IntegerDatatype" },
     
     { "type" : "number",
      "minimum" : 1 } ] },
   "URIReferenceDatatype" : 
   { "description" : "A URI Reference, either a URI or a relative-reference, formatted according to section 4.1 of RFC3986.",
    "type" : "string",
    "format" : "uri-reference" } },
  "properties" : 
  { "$schema" : 
   { "$ref" : "#/definitions/json-schema-directive" },
   "root" : 
   { "$ref" : "#/definitions/choice-bug-issue-105-choice-bug-issue-105:root" } },
  "required" : 
  [ "root" ],
  "additionalProperties" : false }

If applicable, add screenshots to help explain your problem.}

Expected behavior (i.e. solution)

Whether using datatype=positive-integer, I would want the correct schema rendered like so below.

 { "$schema" : "http://json-schema.org/draft-07/schema#",
  "$id" : "https://github.com/usnistgov/metaschema-xslt/issues/105/0.1.0/choice-bug-issue-105-schema.json",
  "$comment" : "Model for Testing usnistgov/metaschema-xslt#105: JSON Schema",
  "type" : "object",
  "definitions" : 
  { "json-schema-directive" : 
   { "title" : "Schema Directive",
    "description" : "A JSON Schema directive to bind a specific schema to its document instance.",
    "$id" : "#/definitions/json-schema-directive",
    "$ref" : "#/definitions/URIReferenceDatatype" },
   "choice-bug-issue-105-choice-bug-issue-105:root" : 
   { "title" : "Root Assembly for Choice",
    "description" : "This root assembly should only an instance to have a field of a or b, but not both.",
    "$id" : "#/definitions/choice-bug-issue-105-choice-bug-issue-105:root",
    "type" : "object",
    "properties" : 
    { "a" : 
     { "$ref" : "#/definitions/PositiveIntegerDatatype" },
     "b" : 
     { "$ref" : "#/definitions/PositiveIntegerDatatype" } },
    "additionalProperties" : false },
   "IntegerDatatype" : 
   { "description" : "A whole number value.",
    "type" : "integer" },
   "PositiveIntegerDatatype" : 
   { "description" : "An integer value that is greater than 0.",
    "allOf" : 
    [ 
     { "$ref" : "#/definitions/IntegerDatatype" },
     
     { "type" : "number",
      "minimum" : 1 } ] },
   "URIReferenceDatatype" : 
   { "description" : "A URI Reference, either a URI or a relative-reference, formatted according to section 4.1 of RFC3986.",
    "type" : "string",
    "format" : "uri-reference" } },
  "properties" : 
  { "$schema" : 
   { "$ref" : "#/definitions/json-schema-directive" },
   "root" : 
   { "$ref" : "#/definitions/choice-bug-issue-105-choice-bug-issue-105:root" } },
  "required" : 
  [ "root" ],
  "additionalProperties" : false }

Other Comments

N/A

@aj-stein-nist aj-stein-nist added bug Something isn't working scope: schema generation labels Feb 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working scope: schema generation
Projects
None yet
Development

No branches or pull requests

1 participant