<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.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]--></head><body lang=EN-GB link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span style='mso-fareast-language:EN-US'>John,<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>It’s a simple question. However, the answer is not so simple!<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Yes, we could easily add maximum and minimum values to the JSON schema for all xFInt32 fields. They would all have to be done individually, notwithstanding any more limited requirements.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>However, what is the maximum and minimum? I know, you’ll say that the maximum is 2^31-1, i.e. 2147483647, and the minimum is -2147483468. And 99.9% of the time, in practice, that is what it will be. But what does the specification say.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Let’s look at ISO/IEC 19775-1:2013, clause 5.3.7 SFInt32 and MFInt32.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Reference: <a href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/fieldsDef.html#SFInt32AndMFInt32">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/fieldsDef.html#SFInt32AndMFInt32</a><o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>The text in the first paragraph reads:<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal>“The SFInt32 field specifies one 32-bit integer. The MFInt32 field specifies zero or more 32-bit integers. SFInt32 and MFInt32 fields are signed integers.”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We can also look at the corresponding text in ISO/IEC 19776-1:2015, clause 5.8 SFInt32 and MFInt32<o:p></o:p></p><p class=MsoNormal>Reference: <a href="http://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/EncodingOfFields.html#SFInt32">http://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/EncodingOfFields.html#SFInt32</a><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The text is similar.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>And that is all the standards say on the subject. What they don’t tell us is what arithmetic system is in use. The vast majority use two’s-complement arithmetic. Hence, the maximum and minimum values are as above. But, that is not the only possibility. There could be one’s-complement or offset binary, for example.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Reference: <a href="https://en.wikipedia.org/wiki/Signed_number_representations">https://en.wikipedia.org/wiki/Signed_number_representations</a><o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Finally, let’s look at one example of the use of an MFInt32 field. Find the node signature for the IndexedFaceSet node, at clause 13.3.6 IndexedFaceSet in ISO/IEC 19775-1:2013.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Reference: <a href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/geometry3D.html#IndexedFaceSet">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/geometry3D.html#IndexedFaceSet</a><o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>In particular, look at any of the four MFInt32 fields, e.g. colorIndex, coordIndex, normalIndex, texCoordIndex. Notice the limits given by the standard. They are [0,inf) or -1. Technically, therefore, if X3D file in, say, XML, ClassicVRML, or JSON has one value of, for example, 9876543210, then this is technically a legal value, and should pass validation. It would be up to the browser implementation to report that it can’t handle such a large number.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>All that said, we might also consider the requirements for the profiles. Let’s look at the full profile, which can be found at Annex F in ISO/IEC 19775-1:2013. Table F.3 lists the minimum support requirements for nodes in the full profile (which is all nodes). <o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Reference: <a href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/fullProfile.html#t-NodesForConforming">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/fullProfile.html#t-NodesForConforming</a><o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Scanning down to the IndexedFaceSet node, looking at the second column, which has the heading “X3D File Limit”, we see that the file should be limited to a maximum of 15000 indices. Now we have a different limit, which is way  below the two’s-complement maximum.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>In conclusion, your simple question is not so easily answered. I’ve tried to present some of the relevant material. All comments weolcome.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>All  the best,<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Roy<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><b><span lang=EN-US>From:</span></b><span lang=EN-US> John Carlson [mailto:yottzumm@gmail.com] <br><b>Sent:</b> 11 August 2017 21:06<br><b>To:</b> Roy Walmsley <roy.walmsley@ntlworld.com>; Don Brutzman <brutzman@nps.edu>; X3D Graphics public mailing list <x3d-public@web3d.org><br><b>Subject:</b> JSON schema enhancement?<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>Roy, can we get an enhancement to the JSON schema limiting all SFInt32 and MFInt32 fields to the appropriate numeric range?  Thanks!<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Thanks!<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>John<o:p></o:p></p></div></div></div></body></html>