<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>There's also a good opportunity to add patterns to my generated
      schema, as well as reduce bloat:</p>
    <p>~/X3DJSONLD/src/main/schema$ grep pattern x3d-4.0-JSONSchema.json
      |wc<br>
         3108    6216  239229<br>
      ~/X3DJSONLD/src/main/schema$ grep pattern x3d-4.0-JSONSchema.json
      |sort -u|wc<br>
           27      54    3529</p>
    <p>X3DUOM may point the way:</p>
    <p>X3DJSONLD/src/specifications$ grep regex
      X3dUnifiedObjectModel-4.0.xml |wc<br>
           41      41    5874</p>
    <p>X3DJSONLD/src/specifications$ grep regex
      X3dUnifiedObjectModel-4.0.xml |sort -u|wc<br>
           24      24    3401</p>
    <p>Can we reduce the number of regex's in X3DUOM,
      X3dXml4.0SchemaConvertedToJson2020-12Schema.json and
      x3d-4.0-JSONSchema.json? Do we want to? Should we add xs: to X3D
      JSON schema?</p>
    <p>Normally ny X3D JSON schema does not have patterns, I just added
      them temporarily to get a feel for it.</p>
    <p>My first suggestion is to get patterns working with
      x3d-4.0-JSONSchema.json and
      X3dXml4.0SchemaConvertedToJson2020-12Schema.json in at least one
      programming language.</p>
    <p>This program may help as it deals with both schemas in python:</p>
    <p>rom jsonschema import validate<br>
      import json<br>
      import sys<br>
    </p>
    <p><br>
      # validate stdin against the X3D4 JSON schemas<br>
      <br>
      try:<br>
          instance = json.loads(sys.stdin.read())<br>
          sys.stdout.write("jsonValid ")<br>
      except:<br>
          sys.stdout.write("jsonInvalid ")<br>
      <br>
      try:<br>
          with open('../schema/x3d-4.0-JSONSchema.json', 'r') as
      schemafile:<br>
              schema = json.load(schemafile)<br>
              validate(instance=instance, schema=schema)<br>
              sys.stdout.write("jwcValid ")<br>
      except:<br>
              sys.stdout.write("jwcInvalid ")<br>
      sys.stdout.flush()<br>
      <br>
      try:<br>
          with
      open('../schema/X3dXml4.0SchemaConvertedToJson2020-12Schema.json',
      'r') as schemafile:<br>
              schema = json.load(schemafile)<br>
              validate(instance=instance, schema=schema)<br>
              sys.stdout.write("dbValid ")<br>
      except:<br>
              sys.stdout.write("dbInvalid ")<br>
      sys.stdout.flush()<br>
    </p>
    <p>Thanks,</p>
    <p>John<br>
    </p>
    <div class="moz-cite-prefix">On 10/14/21 1:06 AM, John Carlson
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:c59c1c7d-04cd-a6fc-3807-8382aaa031cd@gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <p>X3dXml4.0SchemaConvertedToJson2020-12Schema.json has many
        XML'isms:<br>
      </p>
      <p><br>
      </p>
      <p>X3DJSONLD/src/main/schema$ grep xs:
        X3dXml4.0SchemaConvertedToJson2020-12Schema.json |sort -u<br>
                                                "$ref": "#/$defs/xs:ID"<br>
                                                "$ref":
        "#/$defs/xs:IDREF"<br>
                                                "$ref":
        "#/$defs/xs:NMTOKEN"<br>
                                                "$ref":
        "#/$defs/xs:NMTOKENS"<br>
                        "xs:ID": {<br>
                        "xs:IDREF": {<br>
                        "xs:NMTOKEN": {<br>
                        "xs:NMTOKENS": {</p>
      <p><br>
      </p>
      <p>What should I do?<br>
      </p>
      <p>My schema does not contain any xs: tags.</p>
      <p>Here are how these types are defined in
        X3dXml4.0SchemaConvertedToJson2020-12Schema.json</p>
      <p>                "xs:ID": {^M<br>
                                "pattern":
"^([A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿<200c>-<200d>⁰-↏Ⰰ-⿯、-퟿>豈-﷏ﷰ-�𐀀-󯿿][\\d\\--\\.A-Z_a-z·À-ÖØ-öø-ͽͿ-ٟ٪-ۯۺ-޿ߊ-॥॰-৥ৰ-੥ੰ-૥૰-୥୰-௥௰-౥౰-೥೰-൥൰-෥෰-๏๚-໏໚-༟༪-ဿ၊-ႏႚ-៟៪-᠏᠚-᥅ᥐ-᧏᧚-᩿᪊-᪏᪚-᭏᭚-ᮯᮺ-᰿᱊-ᱏᱚ-῿<200c>-<200d>‿-⁀⁰-↏Ⰰ-⿯、-ꘟꘪ-꣏꣚-ꤊ-ꧏ꧚-ꧯꧺ-꩏꩚-꯯꯺-퟿﷏ﷰ-/:-�𐀀-𐒟𐒪-𑁥𑁰-𑃯𑃺-𑄵𑅀-𑇏𑇚-𑋯𑋺-𑑏𑑚-𑓏𑓚-𑙏𑙚-𑚿𑛊-𑜯𑜺-𑣟𑣪-𑱏𑱚-𖩟𖩪-𖭏𖭚-𝟍𝠀-𞥏𞥚-󯿿]*)$",^M<br>
                                "type": "string"^M<br>
                        },^M<br>
                        "xs:IDREF": {^M<br>
                                "pattern":
"^([A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿<200c>-<200d>⁰-↏Ⰰ-⿯、-퟿>豈-﷏ﷰ-�𐀀-󯿿][\\d\\--\\.A-Z_a-z·À-ÖØ-öø-ͽͿ-ٟ٪-ۯۺ-޿ߊ-॥॰-৥ৰ-੥ੰ-૥૰-୥୰-௥௰-౥౰-೥೰-൥൰-෥෰-๏๚-໏໚-༟༪-ဿ၊-ႏႚ-៟៪-᠏᠚-᥅ᥐ-᧏᧚-᩿᪊-᪏᪚-᭏᭚-ᮯᮺ-᰿᱊-ᱏᱚ-῿<200c>-<200d>‿-⁀⁰-↏Ⰰ-⿯、-ꘟꘪ-꣏꣚-ꤊ-ꧏ꧚-ꧯꧺ-꩏꩚-꯯꯺-퟿﷏ﷰ-/:-�𐀀-𐒟𐒪-𑁥𑁰-𑃯𑃺-𑄵𑅀-𑇏𑇚-𑋯𑋺-𑑏𑑚-𑓏𑓚-𑙏𑙚-𑚿𑛊-𑜯𑜺-𑣟𑣪-𑱏𑱚-𖩟𖩪-𖭏𖭚-𝟍𝠀-𞥏𞥚-󯿿]*)$",^M<br>
                                "type": "string"^M<br>
                        },^M<br>
                        "xs:NMTOKEN": {^M<br>
                                "pattern":
"^([\\d\\--\\.\\:A-Z_a-z·À-ÖØ-öø-ͽͿ-ٟ٪-ۯۺ-޿ߊ-॥॰-৥ৰ-੥ੰ-૥૰-୥୰-௥௰-౥౰-೥೰-൥൰-෥෰-๏๚-໏໚-༟༪-ဿ၊-ႏႚ-៟៪-᠏᠚-᥅ᥐ-᧏᧚-᩿᪊-᪏᪚-᭏᭚-ᮯᮺ-᰿᱊-ᱏᱚ-῿<200c>-<200d>‿-⁀⁰Ⰰ-⿯、-ꘟꘪ-꣏꣚-ꤊ-ꧏ꧚-ꧯꧺ-꩏꩚-꯯꯺-퟿豈-﷏ﷰ-/:-�𐀀-𐒟𐒪-𑁥𑁰-𑃯𑃺-𑄵𑅀-𑇏𑇚-𑋯𑋺-𑑏𑑚-𑓏𑓚-𑙏𑙚-𑚿𑛊-𑜯𑜺-𑣟𑣪-𑱏𑱚-𖩟𖩪-𖭏𖭚-𝟍𝠀-𞥏𞥚-󯿿]+)$",^M<br>
                                "type": "string"^M<br>
                        },^M<br>
                        "xs:NMTOKENS": {^M<br>
                                "items": {^M<br>
                                        "pattern":
"^([\\d\\--\\.\\:A-Z_a-z·À-ÖØ-öø-ͽͿ-ٟ٪-ۯۺ-޿ߊ-॥॰-৥ৰ-੥ੰ-૥૰-୥୰-௥௰-౥౰-೥೰-൥൰-෥෰-๏๚-໏໚-༟༪-ဿ၊-ႏႚ-៟៪-᠏᠚-᥅ᥐ-᧏᧚-᩿᪊-᪏᪚-᭏᭚-ᮯᮺ-᰿᱊-ᱏᱚ-῿<200c>-<2d>‿-⁀⁰-↏Ⰰ-⿯、-ꘟꘪ-꣏꣚-ꤊ-ꧏ꧚-ꧯꧺ-꩏꩚-꯯꯺-퟿豈-﷏ﷰ-/:-�𐀀-𐒟𐒪-𑁥𑁰-𑃯𑃺-𑄵𑅀-𑇏𑇚-𑋯𑋺-𑑏𑑚-𑓏𑓚-𑙏𑙚-𑚿𑛊-𑜯𑜺-𑣟𑣪-𑱏𑱚-𖩟𖩪-𖭏𖭚-𝟍𝠀-𞥏𞥚-󯿿]+)$",^M<br>
                                        "type": "string"^M<br>
                                },^M<br>
                                "type": "array"^M<br>
                        }^M</p>
      <p>Here's a summary of X3DUOM:</p>
      <p>$ grep xs: X3dUnifiedObjectModel-4.0.xml|sort -u<br>
                           baseType="xs:ID"<br>
                           baseType="xs:IDREF"<br>
                           baseType="xs:NMTOKEN"<br>
                           baseType="xs:NMTOKEN"/><br>
                           baseType="xs:NMTOKEN"><br>
                          baseType="xs:NMTOKEN"<br>
                           baseType="xs:NMTOKENS"<br>
                    <containerField default="acousticProperties"
        type="xs:NMTOKEN"/><br>
                    <containerField default="appearance"
        type="xs:NMTOKEN"/><br>
                    <containerField default="attrib"
        type="xs:NMTOKEN"/><br>
                    <containerField default="bodies"
        type="xs:NMTOKEN"><br>
                    <containerField default="children"
        type="xs:NMTOKEN"/><br>
                    <containerField default="collider"
        type="xs:NMTOKEN"/><br>
                    <containerField default="contacts"
        type="xs:NMTOKEN"/><br>
                    <containerField default="coord"
        type="xs:NMTOKEN"/><br>
                    <containerField default="displacers"
        type="xs:NMTOKEN"/><br>
                    <containerField default="emitter"
        type="xs:NMTOKEN"/><br>
                    <containerField default="fillProperties"
        type="xs:NMTOKEN"/><br>
                    <containerField default="fogCoord"
        type="xs:NMTOKEN"/><br>
                    <containerField default="fontStyle"
        type="xs:NMTOKEN"/><br>
                    <containerField default="geometry"
        type="xs:NMTOKEN"/><br>
                    <containerField default="geoOrigin"
        type="xs:NMTOKEN"/><br>
                    <containerField default="joints"
        type="xs:NMTOKEN"/><br>
                    <containerField default="layers"
        type="xs:NMTOKEN"/><br>
                    <containerField default="layout"
        type="xs:NMTOKEN"/><br>
                    <containerField default="lineProperties"
        type="xs:NMTOKEN"/><br>
                    <containerField default="material"
        type="xs:NMTOKEN"/><br>
                    <containerField default="motions"
        type="xs:NMTOKEN"/><br>
                    <containerField default="periodicWave"
        type="xs:NMTOKEN"/><br>
                    <containerField default="physics"
        type="xs:NMTOKEN"/><br>
                    <containerField default="pointProperties"
        type="xs:NMTOKEN"/><br>
                    <containerField default="programs"
        type="xs:NMTOKEN"/><br>
                    <containerField default="renderStyle"
        type="xs:NMTOKEN"/><br>
                    <containerField default="shaders"
        type="xs:NMTOKEN"/><br>
                    <containerField default="texCoord"
        type="xs:NMTOKEN"/><br>
                    <containerField default="textureProperties"
        type="xs:NMTOKEN"/><br>
                    <containerField default="textureTransform"
        type="xs:NMTOKEN"/><br>
                    <containerField default="texture"
        type="xs:NMTOKEN"/><br>
                    <containerField default="trimmingContour"
        type="xs:NMTOKEN"/><br>
                    <containerField default="viewport"
        type="xs:NMTOKEN"/><br>
              <!-- For schema xs:simpleType with contained
        xs:enumeration definitions, follow naming convention of name
        ending in 'Type', 'Choices' (for strict enumeration set) or
        'Values' (for suggested tokens). --><br>
                    <Inheritance baseType="xs:boolean"/><br>
                    <Inheritance baseType="xs:double"/><br>
                    <Inheritance baseType="xs:float"/><br>
                    <Inheritance baseType="xs:integer"/><br>
                    <Inheritance baseType="xs:string"/></p>
      <p>containerField is not mentioned at all in my schema. xs: is not
        mentioned in my schema generator.</p>
      <p>I cannot extract patterns from X3DUOM if they don't exist.  I
        can add patterns to my schema generator, if someone puts them
        into JSON encoding.  I can add these patterns as text.</p>
      <p>There's even a good opportunity to reduce the number of
        patterns in X3dXml4.0SchemaConvertedToJson2020-12Schema.json:</p>
      <p>(venv)
        coderextreme@coderextreme-Kubuntu20:~/X3DJSONLD/src/main/schema$
        jsonlint X3dXml4.0SchemaConvertedToJson2020-12Schema.json|grep
        pattern|wc<br>
             96     192   39020<br>
        (venv)
        coderextreme@coderextreme-Kubuntu20:~/X3DJSONLD/src/main/schema$
        jsonlint X3dXml4.0SchemaConvertedToJson2020-12Schema.json|grep
        pattern|sort -u|wc<br>
             25      50    6183<br>
      </p>
      <p>John<br>
      </p>
      <div class="moz-cite-prefix">On 10/13/21 7:36 PM, Brutzman, Donald
        (Don) (CIV) wrote:<br>
      </div>
      <blockquote type="cite"
cite="mid:BY3PR13MB4884F5929DD074A4671A0141C4B89@BY3PR13MB4884.namprd13.prod.outlook.com">
        <meta http-equiv="Content-Type" content="text/html;
          charset=UTF-8">
        <meta name="Generator" content="Microsoft Word 15 (filtered
          medium)">
        <style>@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}div.WordSection1
        {page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
        <div class="WordSection1">
          <p class="MsoNormal">The Altova XML Spy generated schema is
            not a solution, it is an example showing design patterns
            that may be useful.<o:p></o:p></p>
          <p class="MsoNormal"><o:p> </o:p> converted X3D JSON schema,
            would be my guess.</p>
          <div>
            <div>
              <div>
                <blockquote style="border:none;border-left:solid #CCCCCC
                  1.0pt;padding:0in 0in 0in
                  6.0pt;margin-left:4.8pt;margin-right:0in">
                  <p class="MsoNormal" style="margin-bottom:12.0pt"><o:p></o:p></p>
                </blockquote>
              </div>
            </div>
          </div>
        </div>
      </blockquote>
    </blockquote>
  </body>
</html>