<div dir="ltr">Here is the complete validation code and sample command line usages:<div><br># Note: Git Bash command line inside Windows Terminal:</div><div><br></div><div>$ javac -cp .:/home/coderextreme/pythonSAI/X3DJSAIL.4.0.full.jar Validate.java</div><div><br></div><div>$ find ../../../data -name '*.json' | xargs java -cp .:/home/coderextreme/pythonSAI/X3DJSAIL.4.0.full.jar Validate |egrep Exception</div><div><br></div><div>$ find /c/x3d-code/<a href="http://www.web3d.org/x3d/content/examples/">www.web3d.org/x3d/content/examples/</a> -name '*.json' | xargs java -cp .:/home/coderextreme/pythonSAI/X3DJSAIL.4.0.full.jar Validate |egrep -v '^Info|^Validating'</div><div><br></div><div># or just run validate.sh to run both Ajv and Validate.java</div><div><br></div><div>$ bash validate.sh</div><div><br></div><div>Code follows.  Please integrate into an ant build.xml and I will copy to x3dschema (or you may accept my invite to <a href="https://github.com/coderextreme/x3dschema">https://github.com/coderextreme/x3dschema</a>, or just look at build.xml there) with the changes to the build.xml. I don't know how to properly pass multiple files to a program. I am stuck right now.  If you need to review X3DJSONLD.java, I understand. I see the below needs try/catch to continue after an exception.  I will add that to x3dschema.<br><div><br></div><div>import org.w3c.dom.Document;<br>import javax.json.JsonObject;<br>import java.io.File;<br>import org.web3d.x3d.jsail.X3DLoaderDOM;<br>import org.web3d.x3d.jsail.Core.X3D;<br><br>public class Validate {<br>        public static void main(String [] args) throws Exception {<br>                for (int i = 0; i < args.length; i++) {<br>                        X3DJSONLD loader = new X3DJSONLD();<br>                        X3DLoaderDOM xmlLoader = new X3DLoaderDOM();<br><br>                        JsonObject jsobj = loader.readJsonFile(new File(args[i]));<br>                        Document document = loader.loadJsonIntoDocument(jsobj);<br><br>                        X3D X3D0 = (X3D)xmlLoader.toX3dModelInstance(document);<br>                        System.out.println("Validating "+args[i]);<br>                        String validationResults = X3D0.validationReport();<br>                        if (validationResults.startsWith("\n")) {<br>                                System.out.println();<br>                                System.out.println(validationResults.trim());<br>                        }<br>                }<br>        }<br>}<br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 17, 2022 at 3:57 AM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">We don't need a JSON Schema validator to validate JSON documents when we have X3DJSONLD.java and X3DJSAIL:<div><br></div><div>See:</div><div><br></div><div><a href="https://sourceforge.net/p/x3d/tickets/18/" target="_blank">https://sourceforge.net/p/x3d/tickets/18/</a><br></div><div><br></div><div>You may use the code with the Apache 2.0 license. I have already given you the rights to use X3DJSONLD.java, and you suggested that you would rename the file, which is OK!</div><div><br></div><div>I'm not seeing other dependencies beyond JDK (JSON library?)</div><div><br></div><div>So can we drop X3D JSON schema, except for X3DJSONLD website?</div><div><br></div><div>Anyone skilled at creating Java validators (which all the Java examples that I know of in the X3D examples archives are) should be able to craft this code into a JSON validator.   I don't know how to do ant/build.xml that well.  I can help with the Java, but I would direct you do any Java example in the archive as an example of a validator, a snippet included below from Hello, World:</div><div><br></div><div><pre style="box-sizing:inherit;margin-top:0px;margin-bottom:0px;padding:15px;border:0px;outline:0px;font-size:14px;vertical-align:baseline;background:0px 0px;font-family:monospace,sans-serif;overflow:auto;color:rgb(85,85,85)"><div id="gmail-m_183582046525411476gmail-l19" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:980.438px">                <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">X3DJSONLD</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">loader</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">=</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:green;font-weight:700">new</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">X3DJSONLD</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">();</span></div><div id="gmail-m_183582046525411476gmail-l21" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:980.438px">                <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">JsonObject</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">jsobj</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">=</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">loader</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">.</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(125,144,41)">readJsonFile</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">(</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:green;font-weight:700">new</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">File</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">(</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(186,33,33)">"examples/HelloWorldProgramOutput.json"</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">));</span>
</div><div id="gmail-m_183582046525411476gmail-l22" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:980.438px">                <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">Document</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">document</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">=</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">loader</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">.</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(125,144,41)">loadJsonIntoDocument</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">(</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">jsobj</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">);</span>
</div><div id="gmail-m_183582046525411476gmail-l23" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:980.438px"><span style="background-color:initial">         </span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">X3DLoaderDOM</span><span style="background-color:initial">  </span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">xmlLoader</span><span style="background-color:initial"> </span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;color:rgb(102,102,102)">=</span><span style="background-color:initial"> </span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;color:green;font-weight:700">new</span><span style="background-color:initial"> </span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">X3DLoaderDOM</span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">();</span><br></div><div id="gmail-m_183582046525411476gmail-l24" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:980.438px"><span style="background-color:initial">                </span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">X3D</span><span style="background-color:initial"> </span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">X3D0</span><span style="background-color:initial"> </span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;color:rgb(102,102,102)">=</span><span style="background-color:initial"> </span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">(</span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">X3D</span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">)</span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">xmlLoader</span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">.</span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;color:rgb(125,144,41)">toX3dModelInstance</span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">(</span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">document</span><span style="background:0px 0px;box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline">);</span></div><div id="gmail-m_183582046525411476gmail-l26" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:980.438px"><pre style="color:rgb(0,0,0);white-space:pre-wrap">            String validationResults = X3D0.validationReport();
                if (validationResults.startsWith("\n")) {
                        System.out.println();
                        System.out.println(validationResults.trim());
                }</pre><pre style="color:rgb(0,0,0);white-space:pre-wrap"><br></pre><pre style="color:rgb(0,0,0);white-space:pre-wrap">I'm hopefully going to leave the rest of the details to you (passing command line args), but I will help as needed!</pre><pre style="color:rgb(0,0,0);white-space:pre-wrap"><br></pre><pre style="color:rgb(0,0,0);white-space:pre-wrap">No more bitching about "No JSON schema draft," please!</pre></div></pre></div><div><br></div><div>John</div></div>
</blockquote></div>