<div dir="auto">I had posted this to the wrong email address on the wrong thread.</div><div dir="auto"><br></div><div dir="auto"><br><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">śr., 19 lip 2023 o 04:00 John Carlson <</span><a href="mailto:yottzumm@gmail.com" target="_blank" style="font-size:1rem;font-family:-apple-system,"Helvetica Neue";word-spacing:1px">yottzumm@gmail.com</a><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">> napisał(a):</span><br style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">></span><br style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">>” Hint: typically use containerField="value" if the parent node is MetadataSet”</span><br style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">></span><br style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">> If the parent isn’t a MetadataSet, my understanding is it seeks upward for a node with a “metadata” or “value” field, depending on what parent “fits.” For example, a field element element has a value field.</span></div><div dir="auto"><br></div><div dir="auto"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">></span><br style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">> In my Shape JSON case, the schema was complaining about the -value field under Shape, which doesn’t exist.  If you wanted the field to fit under Shape, put it under the -metadata node, else seek upwards.</span></div><div dir="auto"><br></div><div dir="auto">The containerField was not specified in this case, so it chose default containerField=“value” instead of the Shape’s -metadata field.</div><div dir="auto"><br><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">></span><br style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">> So as you seek upward, you can choose first -value field, then -metadata field</span><br style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">></span><br></div><div dir="auto"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><br></span></div><div dir="auto"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">This is for defaulted containerFields.  If you specify the wrong containerField, the XML to JSON transform should throw an error (which it might?)</span></div><div dir="auto"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><br></span></div><div dir="auto"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px">John</span></div><div dir="auto"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><br></span></div><div dir="auto"><span style="color:rgb(117,117,117);font-family:-apple-system,"Helvetica Neue";word-spacing:1px"><br></span></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jul 18, 2023 at 1:46 AM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word"><div class="m_5083608913193342532WordSection1"><p class="m_5083608913193342532MsoPlainText">Thanks for asking Michalis.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">The XML encoding is pretty precisely specified by XML Schema and XML DOCTYPE for validating .x3d scenes.  Both of those will be going into the X3D XML Encoding document as informative annexes (as with prior versions).<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><ul style="margin-top:0in" type="disc"><li class="m_5083608913193342532MsoPlainText">X3D Specifications: Schema and DOCTYPE Validation<u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/specifications" target="_blank">https://www.web3d.org/specifications</a><u></u><u></u></li></ul><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><ul style="margin-top:0in" type="disc"><li class="m_5083608913193342532MsoListParagraph" style="margin-left:0in">X3D XML Schema x3d-4.0.xsd and documentation (latest) – strongly typed<u></u><u></u></li><li class="m_5083608913193342532MsoListParagraph" style="margin-left:0in"><a href="https://www.web3d.org/specifications/x3d-4.0.xsd" target="_blank">https://www.web3d.org/specifications/x3d-4.0.xsd</a><u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/specifications/X3dSchemaDocumentation4.0.html" target="_blank">https://www.web3d.org/specifications/X3dSchemaDocumentation4.0.html</a><u></u><u></u></li></ul><p class="MsoNormal"><u></u> <u></u></p><ul style="margin-top:0in" type="disc"><li class="m_5083608913193342532MsoListParagraph" style="margin-left:0in">XML DOCTYPE x3d-4.0.dtd and documentation (latest) – string based<u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/specifications/x3d-4.0.dtd" target="_blank">https://www.web3d.org/specifications/x3d-4.0.dtd</a><u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/specifications/X3dDoctypeDocumentation4.0.html" target="_blank">https://www.web3d.org/specifications/X3dDoctypeDocumentation4.0.html</a><u></u><u></u></li></ul><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">Full details on variations with containerField can be found at<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><ul style="margin-top:0in" type="disc"><li class="m_5083608913193342532MsoPlainText">X3D Scene Authoring Hints: containerField<u></u><u></u></li><li class="m_5083608913193342532MsoPlainText">Each containerField value is the field name from the X3D Specification that indicates a contained node's relationship to its parent node.  The use of containerField only occurs in XML-encoded files (.x3d format).<u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#containerField" target="_blank">https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#containerField</a><u></u><u></u></li></ul><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">Your words about default containerField values look correct to me.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">The following X3D Tooltips are provided for all of the Metadata nodes.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><ul style="margin-top:0in" type="disc"><li class="m_5083608913193342532MsoPlainText" style="color:navy"><b><span style="color:#447777">Hint:</span> typically use containerField="value" if the parent node is MetadataSet. <u></u><u></u></b></li><li class="m_5083608913193342532MsoPlainText" style="color:navy"><b><span style="color:#ee5500">Warning:</span> default containerField="metadata" in X3D 3.3 changed to default containerField="value" in X3D 4.0, allowing construction of much terser MetadataSet vocabularies.<u></u><u></u></b></li><li class="m_5083608913193342532MsoPlainText" style="color:navy"><b><span style="color:#447777">Hint:</span> explicitly defining containerField for Metadata nodes always allowed and unambiguous across each version of X3D. <u></u><u></u></b></li><li class="m_5083608913193342532MsoPlainText" style="color:navy"><b><span style="color:#447777">Hint:</span> each of the Metadata nodes are allowed as top-level root nodes in a scene, if doing that be sure to explicitly define containerField='metadata'. <u></u><u></u></b></li></ul><p class="m_5083608913193342532MsoPlainText" style="margin-left:.5in"><b><span style="font-size:10.0pt;color:navy"><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/concepts.html#Rootnodes" target="_blank">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/concepts.html#Rootnodes</a></span><span style="color:navy"> <u></u><u></u></span></b></p><ul style="margin-top:0in" type="disc"><li class="m_5083608913193342532MsoPlainText" style="color:navy"><b><span style="color:#ee5500">Warning:</span> Metadata nodes can only contain other Metadata nodes.<u></u><u></u></b></li></ul><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><ul style="margin-top:0in" type="disc"><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataBoolean" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataBoolean</a><u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataDouble" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataDouble</a><u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataFloat" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataFloat</a><u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataInteger" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataInteger</a><u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataSet" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataSet</a><u></u><u></u></li><li class="m_5083608913193342532MsoPlainText"><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataString" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MetadataString</a><u></u><u></u></li></ul><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">We did not change any other containerField defaults on any other nodes when going from X3D 3.3 to X3D 4.0.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">There is no updated X3D XML Encoding spec yet.  We await final ISO publication approval for 19775-1 X3D Architecture, and will next update 19775 X3D Scene Access Interface (SAI).  X3D XML can ClassicVRML encodings will likely be next after that.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">Thanks for the extra effort on MetadataSet and Metadata* node containerField defaults.  Of note is that incorrect usage can usually be forgiven based on the type of parent node, and of course it has no impact on rendering.  Am expecting that having understandable MetadataSet vocabulary constucts will help us with CAD, Medical, HAnim and other specialty domains, especially when converting metatada along with models themselves, from other formats to X3D for Web publication.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">all the best, Don<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">-- <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">Don Brutzman  Naval Postgraduate School, Code USW/Br        <a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">X3D graphics, virtual worlds, navy robotics <a href="https://faculty.nps.edu/brutzman" target="_blank">https://faculty.nps.edu/brutzman</a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">-----Original Message-----<br>From: Michalis Kamburelis <<a href="mailto:michalis.kambi@gmail.com" target="_blank">michalis.kambi@gmail.com</a>> <br>Sent: Monday, July 17, 2023 2:55 PM<br>To: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br>Cc: Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>>; Roy Walmsley <<a href="mailto:roy.walmsley@ntlworld.com" target="_blank">roy.walmsley@ntlworld.com</a>>; X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>Subject: Re: [x3d-public] "deep dive" on containerField and value fields for Metadata* node examples</p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">Don,<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">Sorry for reacting to this thread with~ 2-week delay.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">From your mail, I see that the default containerField for MetadataXxx nodes (X3DMetadataNode descendants) changed in X3D.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">It was "metadata" in X3D 3.x (and this is what Castle Game Engine / view3dscene uses now), but it changed to be "value" since X3D 4.0, if I understand you right.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">I'll see how to account for it in CGE. It will be a bit tricky -- although we always know exact X3D version when reading/writing, we usually avoid making significant behavior changes just because of X3D version change (because users don't always pay attention to the exact X3D version they use). In this case, we'll have to.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">- Can you point me to the X3D 4 XML Encoding spec? On <a href="https://www.web3d.org/standards" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/standards</span></a> I see for X3D 4 only "X3D Abstract :<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">Node Definitions", and the "X3D Encoding : XML" is only available for X3D 3.3.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">- Is there a summary document / diff containing these changes? Not only to "X3D Abstract : Node Definitions" but also to "X3D Encoding :<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">XML" for X3D 4.0?<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">Thanks,<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">Michalis<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText"><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">pon., 3 lip 2023 o 09:51 John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">yottzumm@gmail.com</span></a>> napisał(a):<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">> When I say container field (in JSON),I mean something like "-value" ... (not that I'm advocating for this, but it is used for children of Metadata* nodes), not @value.  Let's be really clear on that.  Let's come up with a term for "-metadata" "-geometry", "-appearance", etc., so I can be perfectly clear. I prefer "{metadata, geometry, appearance} container field", but others may have another choice.  I think Roy had a term for it, but I forget.  I realize one cannot use -value as a field of Shape.  That's what I'm advocating against in HelloWorldProgramOutput.json. Just look at this incorrect example:<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">> <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fsour" target="_blank"><span style="color:windowtext;text-decoration:none">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fsour</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> <a href="http://ceforge.net" target="_blank">ceforge.net</a>%2Fp%2Fx3d%2Fcode%2FHEAD%2Ftree%<a href="http://2Fwww.web3d.org" target="_blank">2Fwww.web3d.org</a>%2Fx3d%2Fsty<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> lesheets%2Fjava%2Fexamples%2FHelloWorldProgramOutput.json&data=05%7C01<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> %7Cbrutzman%<a href="http://40nps.edu" target="_blank">40nps.edu</a>%7C731693108d804b43439d08db87109887%7C6d936231a51<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> 740ea9199f7578963378e%7C0%7C0%7C638252277571305254%7CUnknown%7CTWFpbGZ<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> sb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> D%7C3000%7C%7C%7C&sdata=3awGJ9ql1wOMT1IRPAJJc3B7fDp2xoLO9dEqNwHEwjA%3D<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> &reserved=0<u></u><u></u></p></div></div><div lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word"><div class="m_5083608913193342532WordSection1"><p class="m_5083608913193342532MsoPlainText">><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">> Search for a few examples for -value (use CTRL-f to search), especially under the Shape property value.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">> I realize I may have a different style of communication.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">> John<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">> On Sun, Jul 2, 2023 at 6:32 PM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank"><span style="color:windowtext;text-decoration:none">brutzman@nps.edu</span></a>> wrote:<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> John, there are several issues with your mail that can be confusing.  Am trying here to untangle them.  You likely understand all this, but email can be tricky to follow.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Summary: here is a "deep dive" on containerField and value fields for Metadata* node examples.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> First, the url that you have is not current.  The latest specification (International Standard proof version) url follows.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Please use the latest url, and stop using other urls.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3D Architecture reference:<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.p" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.p</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> roof/Part01/Architecture.html<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Next, when you look at Shape node, there is no “value” field.  There are fields defined for appearance, bboxDisplay, castShadow, geometry, metadata, visible, bboxCenter and bboxSize.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3D Architecture reference:<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.p" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.p</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> roof/Part01/components/shape.html#Shape<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Shape : X3DShapeNode {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode  [in,out] appearance  NULL     [X3DAppearanceNode]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFBool  [in,out] bboxDisplay FALSE<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFBool  [in,out] castShadow  TRUE<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode  [in,out] geometry    NULL     [X3DGeometryNode]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode  [in,out] metadata    NULL     [X3DMetadataObject]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFBool  [in,out] visible     TRUE<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFVec3f []       bboxCenter  0 0 0    (-∞,∞)<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFVec3f []       bboxSize    -1 -1 -1 [0,∞) or −1 −1 −1<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Next.  Every single node in X3D includes a field named “metadata”, where is allowed to have a single Metadata* node (MetadataBoolean, MetadataFloat, etc.).<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3D Architecture reference:<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> 7.3.5 X3DNode<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.p" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.p</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> roof/Part01/components/core.html#X3DNode<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3DNode {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode [in,out] metadata NULL [X3DMetadataObject]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> This abstract node type is the base type for all nodes and node types in the X3D system.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The metadata field provides information about the current node contents, as described in 7.2.4 Metadata.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The X3D XML encoding uses containerField as a way to explicitly set the relationship of a given node to its parent node.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3D Scene Authoring Hints: containerField <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.htm" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.htm</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> l#containerField<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Addition of containerField values only occurs in the XML encoding of .x3d scenes. For example: <Transform><Shape containerField='children'/></Transform> indicates that the Shape node is one of the children of the Transform node.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The X3D XML Schema, X3D DTD and X3D Tooltips each define all default containerField values, which are optional and typically can be omitted for scene terseness.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> o   Usually ignorable. Default containerField values for each node are correct in most cases, so the need to override default containerField values is relatively rare.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> o   Terse match to other X3D encodings. The containerField attribute is part of XML encoding for X3D scenes, and corresponds to the always-declared field labels in the ClassicVRML and VRML97 file encodings.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> o   Examples. Example values include containerField='geometry' for Box node, containerField='children' for Group node, containerField='proxy' for hidden proxy shape within a Collision node, etc.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> o   USE node flexibility. USE nodes are allowed to have a containerField value that is different than the corresponding DEF declaration of that node, since the containerField attribute describes each node's relationship with its parent.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> o   ProtoInstance node flexibility. ProtoInstance nodes are similarly allowed to have a containerField value that is different than default for their node type, again since the containerField attribute describes each node's relationship with its parent.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Disambiguation of parent-child field relationships is sometimes necessary, since a few parent nodes have more than one child field that can accept the same node type. In those ambiguous cases, the child node must have a correct containerField value in order to precisely define the correct parent-child field relationship with its parent node.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Additional guidance and detail follow there, trying to explain the specification with examples.  It is simply offered as helpful information.  The X3D Architecture remains the controlling normative reference.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Only the various Metadata* nodes have a field called “value”.  Like every other X3D node, they also have a field called “metadata” too.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3D Architecture reference:<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> 7.4 Node reference<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.p" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.p</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> roof/Part01/components/core.html#NodeReference<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> 7.4.1 MetadataBoolean<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> MetadataBoolean : X3DNode, X3DMetadataObject {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode   [in,out] metadata  NULL [X3DMetadataObject]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] name      ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] reference ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   MFBool   [in,out] value     []<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The value field provides a list of Boolean metadata whose meaning is specified by the name field.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> 7.4.2 MetadataDouble<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> MetadataDouble : X3DNode, X3DMetadataObject {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode   [in,out] metadata  NULL [X3DMetadataObject]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] name      ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] reference ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   MFDouble [in,out] value     []<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The value field provides a list of double-precision floating-point metadata whose meaning is specified by the name field.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> 7.4.3 MetadataFloat<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> MetadataFloat : X3DNode, X3DMetadataObject {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode   [in,out] metadata  NULL [X3DMetadataObject]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] name      ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] reference ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   MFFloat  [in,out] value     []<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The value field provides a list of single-precision floating-point metadata whose meaning is specified by the name field.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> 7.4.4 MetadataInteger<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> MetadataInteger : X3DNode, X3DMetadataObject {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode   [in,out] metadata  NULL [X3DMetadataObject]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] name      ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] reference ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   MFInt32  [in,out] value     []<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The value field provides a list of integer metadata whose meaning is specified by the name field.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> 7.4.5 MetadataSet<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> MetadataSet : X3DNode, X3DMetadataObject {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode   [in,out] metadata  NULL [X3DMetadataObject]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] name      ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] reference ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   MFNode   [in,out] value     [] [X3DMetadataObject]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The value field provides a list of X3DMetadataObject nodes whose meaning is specified by the name field.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> 7.4.6 MetadataString<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> MetadataString : X3DNode, X3DMetadataObject {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFNode   [in,out] metadata  NULL [X3DMetadataObject]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] name      ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   SFString [in,out] reference ""<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>   MFString [in,out] value     []<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The value field provides a list of string metadata whose meaning is specified by the name field.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> As shown above in the specification, only the MetadataSet node can contain Metadata* nodes in either a metadata field, a value field, or both.  So MetadataSet is the tricky node to watch out for.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Example:<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>     <Shape><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> <MetadataSet DEF=’TripleTroubleExample’ containerField=’metadata’><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <MetadataBoolean DEF=’SomeBooleanArray’ value=”true <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> false true” containerField=’metadata’/><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <MetadataInteger   DEF=’SomeIntegerArray’ value=’-1 -2 0 1 2 3 4’     containerField=’value’/><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <MetadataDouble   DEF=’SomeDoubleArray’ value=’5.0 6.28 777.7’    containerField=’value’/><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> </MetadataSet><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>    </Shape<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Because MetadataSet can only contain one node in its metadata field, only one of these contained nodes can be containerField=’metadata’ and still be correct.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Remember, all of this containerField business is only for terseness of the XML encoding.  It has nothing to do with equivalent X3D representations in ClassicVRML, JSON, Python, Java, Turtle, etc.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Easy to forget… Uh, did you remember that?<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Evolutionary trickiness is next (as if all this weren’t tricky enough already).<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Experience in X3D3 showed that multiple metadata nodes were used, complex metadata sets became extremely verbose because containerField values were listed everywhere.  In fact, they were so verbose that it became hard to read and process the sets of metadata being collected together!  Ouch.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> After much debate and experimentation, we decided to lean towards the future where there might be inclusion of quite a lot of metadata sets when converting from CAD, converting from other model formats, expressing new X3D node values, etc. etc.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> As a result we changed the default containerField values (for Metadata* nodes only) in the X3D version 4 XML encoding.  This had no impact on the vast majority of X3D scenes out there.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Thus, if containerField is omitted for terseness in a given scene fragment, the XML might look different for X3D3 versus X3D4.  The X3D being modeled is not different.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> The above TripleTroubleExample will always be correct in every version of X3D, because the containerField field names are explicitly defined.   Including containerField is never wrong.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Here are two variations on the above example that omit default containerField entries, for X3D 3.3 and X3D 4.0 respectively.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>     <Shape><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> <MetadataSet DEF=’TripleTroubleExampleX3D3’ ><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <MetadataBoolean DEF=’SomeBooleanArray’ value=”true <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> false true” /><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <MetadataInteger   DEF=’SomeIntegerArray’ value=’-1 -2 0 1 2 3 4’     containerField=’value’/><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <MetadataDouble   DEF=’SomeDoubleArray’ value=’5.0 6.28 777.7’    containerField=’value’/><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <!- - containerField always necessary in subsequent <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> MetadataSet subtree values - -><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> </MetadataSet><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>    </Shape<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> or<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>     <Shape><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> <MetadataSet DEF=’TripleTroubleExampleX3D4’ <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> containerField=’metadata’><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <MetadataBoolean DEF=’SomeBooleanArray’ value=”true <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> false true” containerField=’metadata’/><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <MetadataInteger   DEF=’SomeIntegerArray’ value=’-1 -2 0 1 2 3 4’  /><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <MetadataDouble   DEF=’SomeDoubleArray’ value=’5.0 6.28 777.7’ /><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                <!- - containerField not necessary in subsequent <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> MetadataSet subtree values - -><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> </MetadataSet><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>    </Shape<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> As before, the XML terseness has nothing to do with equivalent X3D representations in ClassicVRML, JSON, Python, Java, Turtle, etc.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Yes, it is good to remember that.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> So, any X3D JSON representations will always have the field name defined.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Hopefully this explanation helps determine whether the X3dToJSON.xslt stylesheet is correct already.  If not, we will fix it, just as your latest testing has identified some necessary fixes in the X3dToJava.xslt stylesheet.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Having good repeatable examples in the X3D Example Archives to test things is always helpful.  Perhaps the above example snippets can help.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Your mileage may vary (YMMV).<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Nevertheless the X3D scene graph defined by the X3D Architecture international specification is unambiguous.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> As ever, improving our XML/JSON schema validation, and diagnostic/conversion tools, and unit-test examples all helps.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Have fun with X3D – or else!   8)<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> all the best, Don<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> --<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Don Brutzman  Naval Postgraduate School, Code USW/Br        <a href="mailto:brutzman@nps.edu" target="_blank"><span style="color:windowtext;text-decoration:none">brutzman@nps.edu</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3D graphics, virtual worlds, navy robotics <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://faculty.nps.edu/brutzman" target="_blank"><span style="color:windowtext;text-decoration:none">https://faculty.nps.edu/brutzman</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">yottzumm@gmail.com</span></a>><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> Sent: Friday, June 30, 2023 11:22 PM<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> To: Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank"><span style="color:windowtext;text-decoration:none">brutzman@nps.edu</span></a>><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> Cc: X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank"><span style="color:windowtext;text-decoration:none">x3d-public@web3d.org</span></a>><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> Subject: Re: Is <a href="https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.json" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.json</span></a> valid?<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> I'm not too worried about JSON schema, I just want to make sure that the X3D JSON is right, per the X3D4 standard architecture, with my own eyeballs. I may just have a misunderstanding of the following Shape standard.  I don't see a value field, just a metadata field.  I realize value may be otherwise specified, but it's not in X3D tooltips either, under Shape.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/co" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/co</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> mponents/shape.html#Shape<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> I'm not seeing that Shape has a value field, but I'm not too clear on whether containerField equal to "metadata" or "value" should be used on MetadataXxx statements in Shape and Text nodes in JSON.  It's highly possible that I'm totally misunderstanding.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> I understand that both -value and @value are likely possible at some point!<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Here are my diffs to the HelloWorldProgramOutput.json to make it pass:<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> --- a/src/main/data/HelloWorldProgramOutput.json<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> +++ b/src/main/data/HelloWorldProgramOutput.json<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> @@ -156,7 +156,7 @@<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>            },<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>            {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>              "@name":"translated",<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> -            "@content":"29 June 2023"<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> +            "@content":"30 June 2023"<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>            },<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>            {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>              "@name":"generator",<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> @@ -950,15 +950,14 @@<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                "-children":[<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                  { "Shape":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                    {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> -                    "-value":[<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> +                    "-metadata":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                        { "MetadataString":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                          {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                            "@name":"findThisNameValue",<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                            "@DEF":"FindableMetadataStringTest",<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                            "@value":["test case"]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                          }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> -                      }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> -                    ],<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> +                      },<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                      "-appearance":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                        { "Appearance":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                          {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> @@ -2206,15 +2205,14 @@<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                "-children":[<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                  { "Shape":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                    {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> -                    "-value":[<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> +                    "-metadata":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                        { "MetadataString":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                          {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                            "@name":"findThisNameValue",<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                            "@DEF":"FindableMetadataStringTest",<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                            "@value":["test case"]<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                          }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> -                      }<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> -                    ],<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> +                      },<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                      "-appearance":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                        { "Appearance":<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>                          {<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Here's the diff to XML I have locally to make the JSON pass. See the blue containerField.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> diff --git a/src/main/data/HelloWorldProgramOutput.x3d <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> b/src/main/data/HelloWorldProgramOutput.x3d<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> index 99b309451..0d47bfed3 100644<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> --- a/src/main/data/HelloWorldProgramOutput.x3d<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> +++ b/src/main/data/HelloWorldProgramOutput.x3d<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> @@ -246,7 +246,7 @@ function clockTrigger (timeValue)<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>      <!-- Test success: declarative statement <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> createDeclarativeShapeTests() --><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>      <Group DEF='DeclarativeGroupExample'><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>        <Shape><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> -        <MetadataString DEF='FindableMetadataStringTest' name='findThisNameValue' value='"test case"'/><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> +        <MetadataString DEF='FindableMetadataStringTest' <u></u><u></u></p></div></div><div lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word"><div class="m_5083608913193342532WordSection1"><p class="m_5083608913193342532MsoPlainText">>> + containerField='metadata' name='findThisNameValue' value='"test <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> + case"'/><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>          <Appearance DEF='DeclarativeAppearanceExample'><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>            <!-- DeclarativeMaterialExample gets overridden by <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> subsequently added MaterialModulator ProtoInstance --><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>            <ProtoInstance DEF='MyMaterialModulator' <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> name='MaterialModulator' containerField='material'/><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Thanks for a second set of eyeballs on this.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> My guess is that X3DJSAIL is not reporting a containerField when it should,  to produce a processable HelloWorldProgramOutput.x3d  that will produce good JSON.  I do not have intermediate code right now.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> So actually, it has nothing to do with JSON and everything to do with X3DJSAIL XML output.  But yeah, if you want to fix it in X3DJSAIL instead of X3dToJson.xslt, that would probably be easier, and very cool.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> John<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> On Sat, Jul 1, 2023 at 12:28 AM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank"><span style="color:windowtext;text-decoration:none">brutzman@nps.edu</span></a>> wrote:<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Hi John.  All of the JSON that you find is produced by our <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3dToJson.xslt stylesheet, which hopefully meets all patterns we <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> derived and documented at<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3D to JSON Stylesheet Converter<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://www.web3d.org/x3d/stylesheets/X3dToJson.html" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/x3d/stylesheets/X3dToJson.html</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Well-formed JSON can be checked.  All of our online examples have a link to check via JSONLint, though tonight it is saying “unable to connect” (while providing plenty of advertising).<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3D Example Archives: X3D4WA, X3D for Web Authors, Chapter 01 <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> Technical Overview, Hello World<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3d" target="_blank"><span style="color:windowtext;text-decoration:none">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3d</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="http://graphics.com" target="_blank">graphics.com</a>%2Fexamples%2FX3dForWebAuthors%2FChapter01TechnicalOvervi<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> ew%2FHelloWorldIndex.html&data=05%7C01%7Cbrutzman%<a href="http://40nps.edu" target="_blank">40nps.edu</a>%7C7316931<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> 08d804b43439d08db87109887%7C6d936231a51740ea9199f7578963378e%7C0%7C0%<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> 7C638252277571305254%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQ<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> IjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=FXD0<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> OLCetJnoRpBtkb43%2B34e05Co4zxGqd2w0A9gRfw%3D&reserved=0<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> upper-right inset box of links: .json (check)<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fjso" target="_blank"><span style="color:windowtext;text-decoration:none">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fjso</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="http://nlint.com" target="_blank">nlint.com</a>%2F%3Fjson%3Dhttps%3A%2F%2FX3dGraphics.com%2Fexamples%2FX3dF<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> orWebAuthors%2FChapter01TechnicalOverview%2FHelloWorld.json&data=05%7<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> C01%7Cbrutzman%<a href="http://40nps.edu" target="_blank">40nps.edu</a>%7C731693108d804b43439d08db87109887%7C6d93623<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> 1a51740ea9199f7578963378e%7C0%7C0%7C638252277571305254%7CUnknown%7CTW<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> FpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> 6Mn0%3D%7C3000%7C%7C%7C&sdata=Z5Fjc%2Bj6qjqgElokqm8JX5L4%2BuXlzU7Q15O<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> y4fu09U4%3D&reserved=0<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> If there are mistakes in our X3D .xml -> .json pattern or the conversion stylesheet, they can be fixed.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Strict JSON validation isn’t possible until a JSON Schema is approved.  If you think that there is a Java-based implementation of the draft JSON Schema that is mature and stable enough to deserve our time, we can try adding that to our various build tools for X3D Example Archives and X3DJSAIL.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fjson" target="_blank"><span style="color:windowtext;text-decoration:none">https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fjson</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> -<a href="http://schema.org" target="_blank">schema.org</a>%2F&data=05%7C01%7Cbrutzman%<a href="http://40nps.edu" target="_blank">40nps.edu</a>%7C731693108d804b4343<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> 9d08db87109887%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638252277<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> 571461064%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzI<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> iLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=AJHxa%2FtEt%2FJ<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> NiVTXRVAfN4RWaxNvg5mbz9WVaehxmMo%3D&reserved=0<u></u><u></u></p></div></div><div lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word"><div class="m_5083608913193342532WordSection1"><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> all the best, Don<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> --<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Don Brutzman  Naval Postgraduate School, Code USW/Br        <a href="mailto:brutzman@nps.edu" target="_blank"><span style="color:windowtext;text-decoration:none">brutzman@nps.edu</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> X3D graphics, virtual worlds, navy robotics <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://faculty.nps.edu/brutzman" target="_blank"><span style="color:windowtext;text-decoration:none">https://faculty.nps.edu/brutzman</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">yottzumm@gmail.com</span></a>><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> Sent: Friday, June 30, 2023 8:24 PM<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> To: Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank"><span style="color:windowtext;text-decoration:none">brutzman@nps.edu</span></a>><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> Cc: X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank"><span style="color:windowtext;text-decoration:none">x3d-public@web3d.org</span></a>><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> Subject: Is <a href="https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.json" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.json</span></a> valid?<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> Don, if<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> <a href="https://www.web3d.org/specifications/java/examples/HelloWorldProgramO" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.web3d.org/specifications/java/examples/HelloWorldProgramO</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> utput.json<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> is supposed to be valid X3D JSON, please inform me.  Thanks!<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> To ensure that -value is not a field of Shape in JSON, I have added the following exception in x3djsonld.py.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>         if parent in ("Text", "Shape") and key in ("value"):  # don't <u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>> have value yet, sorry<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>             # do value later<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>             raise "-value not a supported field of Text or Shape, try -metadata?"<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>>             continue<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> I can revert the code if necessary.  I'm trying to follow the standard as I see it.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> If -value under Shape is correct, then X3DJSAIL needs to support addValue (as I have it in Java) or setValue.  That's my opinion.<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">>> John<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">><u></u> <u></u></p><p class="m_5083608913193342532MsoPlainText">> _______________________________________________<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> x3d-public mailing list<u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> <a href="mailto:x3d-public@web3d.org" target="_blank"><span style="color:windowtext;text-decoration:none">x3d-public@web3d.org</span></a><u></u><u></u></p><p class="m_5083608913193342532MsoPlainText">> <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" target="_blank"><span style="color:windowtext;text-decoration:none">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</span></a><u></u><u></u></p></div></div></blockquote></div></div>