<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">This issue is being looked at in more detail because of the proposal in Mantis issue 1320 <a href="https://www.web3d.org/member-only/mantis/view.php?id=1320" class="">https://www.web3d.org/member-only/mantis/view.php?id=1320</a> which would allow an optional variant in the encoding of of an MFString with one element.<div class=""><br class=""></div><div class="">As you point out, current browsers agrees that the following are encodings of the same value when an SFString type</div><div class=""><br class=""></div><div class="">field = 'field"value'</div><div class=""><br class=""></div><div class="">and when it is the only element of an MFString</div><div class=""><br class=""></div><div class="">field = '"field\"value"'</div><div class=""><br class=""></div><div class="">The question is; if the option proposed in Mantis 1320 is adopted, would the allowed variant for a one-element MFString be</div><div class=""><br class=""></div><div class="">field = 'field"value'</div><div class=""><br class=""></div><div class="">or</div><div class=""><br class=""></div><div class="">field = 'field\"value'</div><div class=""><br class=""></div><div class="">Vince Marchetti</div><div class=""><br class=""></div><div class=""><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On May 17, 2021, at 4:15 PM, Michalis Kamburelis <<a href="mailto:michalis.kambi@gmail.com" class="">michalis.kambi@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Questions after (only briefly) reading this thread (I'm very sorry if<br class="">I misunderstood something):<br class=""><br class="">- Why are we wondering about SFString reading in X3D XML encoding?<br class="">- And why do we want to change and complicate it? :)<br class=""><br class="">In my view, the way how to handle SFString in X3D XML right now is<br class="">simple and that is good: The XML attribute content is the value of the<br class="">string. The end. There's no interpretation of double-quotes,<br class="">backslashes etc. or anything when dealing with SFString. This is also<br class="">what X3D browsers already do. Just take the XML attribute value from<br class="">your DOM, and there you go, you have your SFString value.<br class=""><br class="">To be clear, we have problems with MFString in X3D XML specification<br class="">(which is the point of my<br class=""><a href="https://github.com/michaliskambi/x3d-tests/wiki/Clarify-the-usage-of-quotes-and-backslashes-for-MFString-and-SFString-in-XML-encoding" class="">https://github.com/michaliskambi/x3d-tests/wiki/Clarify-the-usage-of-quotes-and-backslashes-for-MFString-and-SFString-in-XML-encoding</a><br class="">), which I believe should be addressed by update to the specification.<br class="">Because my tests showed that all X3D browsers are consistent<br class="">in how they read SFString and MFString from X3D XML files. That is,<br class="">all browsers already agreed that SFString requires a bit different<br class="">code than MFString (for SFString, you just take attribute value; for<br class="">MFString, you deal with additional quotes and backslahes) and all<br class="">browsers behave the same. So we need<br class="">to fix the spec, which is a quite confusing, but the existing<br class="">implementations have actually already reached a consensus. We just<br class="">need to clarify it in the spec.<br class=""><br class="">So I would be a bit opposed to changing SFString logic in X3D XML.<br class="">Right now, backslash and double-quote inside SFString in X3D XML are<br class="">nothing special, and this is simple enough and already implemented<br class="">everywhere. What is the benefit of changing it?<br class=""><br class="">Regards,<br class="">Michalis<br class=""><br class="">pon., 17 maj 2021 o 21:17 vmarchetti@kshell.com<br class=""><vmarchetti@kshell.com> napisaĆ(a):<br class=""><br class=""><blockquote type="cite" class=""><br class="">This is a set of examples and proposed specification for XML encoding of SFString values in a pattern that is an extension of the VRML encoding of SFString values<br class=""><br class="">[To review: Curly brackets are being used to isolate text; and are not part of the text content. All other characters inside curly brackets are part of the text content,<br class="">and no escaping or unescaping is done inside curly brackets ]<br class=""><br class=""><br class="">XML Encoding to X3D values examples<br class=""><br class=""> XML Encoding SFString value<br class="">1. {<MetadataSet name='items'/>} invalid encoding<br class="">2. {<MetadataSet name='"items"'/>} {items}<br class="">3. {<MetadataSet name='ite"ms'/>} invalid encoding<br class="">4. {<MetadataSet name='\items'/>} invalid encoding<br class="">5. {<MetadataSet name='"\"items"'/>} {"items}<br class=""><br class=""><br class="">SFString values to XML encodings examples:<br class=""><br class=""> SFString XML encoding<br class="">1. {items} {<MetadataSet name='"items"'/>}<br class="">2. {"items"} {<MetadataSet name='"\"items\""'/>}<br class="">3. {ite"ms} {<MetadataSet name='"ite\"ms"'/>}<br class="">4. {\items} {<MetadataSet name='"\\items"'/>}<br class="">5. {\"items} {<MetadataSet name='"\\\"items"'/>}<br class=""><br class="">Proposed specification prose:<br class=""><br class="">The determination of an SFString value from the XML encoding in an XML attribute is conducted in two steps:<br class=""><br class="">step 1. From the XML attribute text, determine the string referred to as normalized attribute value by the algorithm in Section 3.3.3 of the XML Recommentations document Edition 1. https://www.w3.org/TR/2008/REC-xml-20081126/#AVNormalize<br class=""><br class="">step 2. The resulting string from step 1 must be a valid VRML lexical element as defined in Annex A (normative) grammar for the Classic VRML Encoding : ISO/IEC 19776-2:2015 . From that document the following appears as the lexical element for an SFString value:<br class="">----------------------------------------------------------------------<br class="">sfstringValue ::= string ;<br class="">string ::= ".*" ... double-quotes must be \", backslashes must be \\...<br class="">----------------------------------------------------------------------<br class=""><br class="">If the normalized attribute value determined in step 1 does not match the sfstringValue lexical element then the source XML encoding is invalid. If the normalized attribute value does match the VRML sfstringValue lexical element, then the SFString value is determined by the following procedure<br class="">step 2.1 strip off the leading and trailing quote characters.<br class="">step 2.2 With the remaining text, working from left to right, replace the combination {\\} with single slash {\} and the combination {\"} with quote {"}<br class=""><br class="">The resulting text is the value of the SFString field.<br class=""><br class=""><br class="">The reverse process, constructing a valid XML encoding for a determined SFString value, may be normatively specified as any XML text which gives the correct value on applying steps 1 and 2 above. Informative prose may give algorithms which achieve this end.<br class=""><br class="">Vince Marchetti<br class=""><br class=""><br class=""><blockquote type="cite" class="">On May 16, 2021, at 7:40 PM, vmarchetti@kshell.com wrote:<br class=""><br class="">This refers to item 3 of the minutes of the May 14 X3D WG meeting minutes.<br class=""><br class=""><br class="">At the May 14 X3D WG meeting we again addressed the long-standing problem of defining the XML encoding of the SFString data type in node fields, particulalarly when the SFString containg quote characters. It was proposed to do two related tasks:<br class="">1. Generate examples of XML encoding which clearly illustrate the correct encoding of these edge cases<br class="">2. Write specification prose text which can be unambiguously interpreted by developers in their implementations, to ensure interoperability.<br class=""><br class="">A perennial issue in these discussions is that we're reasoning about text, in text. We usually use the quote characters to isolate the text we are writing about -- that doesn't work here, because the quotes are critical part of our discussion. For that reason, in the scope of this document, I use curly brackets to set off text examples. In the X3D specification the curly bracket characters cause no controversy, and I will not use any examples where curly brackets are part of the text values. So, if I were to say the the value of an X3D field of type SFString is {"Hello"}, I mean at least two things:<br class="">1. If this value gets put in an MFString value and passed to the X3D Text node, it will be rendered as 7 character glyphs.<br class="">2. In any language binding, the value is a 7 character string in the native string representation of that language.<br class=""><br class="">I propose that our examples should illustrate both issues the X3D implementors face: reading an XML encoding of an SFString value and determing the correct data for their implementation environment, and generating a correct XML encoding of an arbitrary SFString value. As Michalis K has pointed, there are relatively few usages of SFString has a field type, but one important one is as the name field in the Metadata nodes. So I will propose a set of decoding examples for determining the correct value of the name field in the XML encodings of an empty MetadataSet node. The result SFString for these examples should either be the value of the name field or the assertion that the XML encoding itself is not a syntactically valid encoding.<br class=""><br class=""><br class=""> XML Encoding SFString value<br class="">1. {<MetadataSet name='items'/>} ---<br class="">2. {<MetadataSet name='"items"'/>} ---<br class="">3. {<MetadataSet name='ite"ms'/>} ---<br class="">4. {<MetadataSet name='\items'/>} ---<br class="">5. {<MetadataSet name='"\"items"'/>} ---<br class=""><br class=""><br class="">The second set of examples should illustrate the encoding problem: To specify a correct XML encoding of the empty MetadataSet whose name field has the specified value. The XML encoding has multiple correct solutions because the XML format itself provides multiple representations of the same XML attribute.<br class=""><br class=""><br class=""> SFString XML encoding<br class="">1. {items} ---<br class="">2. {"items"} ---<br class="">3. {ite"ms} ---<br class="">4. {\items} ---<br class="">5. {\"items} ---<br class=""><br class="">A final part of this project is to prepare normative prose that determines these example patterns and can be applied to the general case.<br class=""><br class=""><br class=""><br class="">Vince Marchetti<br class=""><br class=""><br class="">_______________________________________________<br class="">x3d mailing list<br class="">x3d@web3d.org<br class="">http://web3d.org/mailman/listinfo/x3d_web3d.org<br class=""></blockquote><br class=""><br class="">_______________________________________________<br class="">x3d mailing list<br class="">x3d@web3d.org<br class="">http://web3d.org/mailman/listinfo/x3d_web3d.org<br class=""></blockquote></div></div></blockquote></div><br class=""></div></div></body></html>