[x3d-public] MFString quoting [was: interesting sample]

Michalis Kamburelis michalis.kambi at gmail.com
Tue Apr 25 21:25:36 PDT 2017


2017-04-26 5:41 GMT+02:00 Leonard Daly <Leonard.Daly at realism.com>:
> If there is a reason that all attribute
> values must be contained in quotes (perhaps it is a style requirement), then
> an MFString would be encoded as
>
> ""this" "is" "a" "multiple"
> "string" "field""
>
> Yes it's messy. We thought it was well documented, but the repeated
> discussion has shown that not to be the case.

As Andreas pointed out, your example

  ""this" "is" "a" "multiple"
"string" "field""

seems to be disallowed by the specification (
http://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/EncodingOfFields.html#SFString
):

  The MFString specifies zero or more SFStrings enclosed in single
quotes (e.g., '"string1" "string2"').

We completely agree with your notion that

  '"this" "is" "a" "multiple" "string" "element"'

should be equivalent to

  ""this" "is" "a" "multiple"
"string" "field""

The proposed change to the specification (all to the section
http://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/EncodingOfFields.html#SFString
) would be to change this part:

"""""""
  The MFString specifies zero or more SFStrings enclosed in single
quotes (e.g., '"string1" "string2"').

  NOTE  The construct

"string3"

is not a valid instance of an MFString. Such an MFString would be
properly specified as

'"string3"'
"""""""

into this:

"""""""
  The MFString specifies zero or more SFStrings, with each single
string enclosed in double quotes (e.g., "string1" "string2"). Note
that inside an XML attribute, you have to express a double quote using
the " character entity, unless you enclose a whole XML attribute
in single quotes.

  NOTE  The construct

"string3"

is not a valid instance of an MFString. Such an MFString would be
properly specified as

'"string3"'

or

'"string3"'

or

""string3""
"""""""

For additional clarity, I would also add more prose and examples to
explain when backslashes are needed. So I would change

"""""""
EXAMPLE 2  Two instances of the double quote are contained in the
following SFString field string:

<Text string='"He said, \"Immel did it!\""' />
"""""""

with this:

"""""""
If a string is part of an MFString, and you want this string to
contain a double-quote (for example, to actually show a double-quote
using the Text node field "string") then you have to place a backslash
before this double-quote. This rule applies regardless if you express
double-quote as " or as " . This is necessary, to avoid treating
the double-quote as a delimiter of strings on a MFString list.

Consequently, if you want a string inside MFString to contain a
backslash (for example, to actually show a backslash using the Text
node field "string") then you have to write two backslashes. This is
necessary, to avoid accidentally changing the meaning of a following
double-quote character.

EXAMPLE 2  All the following forms are correct and equivalent:

<Text string='"He said, \"Immel did it!\""' />

<Text string='"He said, \"Immel did it!\""' />

<Text string='"He said, \"Immel did it!\""' />

<Text string=""He said, \"Immel did it!\""" />
"""""""

I think that this prose and examples clarifies the specification (or
fixes it, depending on how do you interpret the current
specification).

P.S. I like your idea of

<text>
    <string>This</string>
    <string>is</string>
    <string>a</string>
    <string>multiple</string>
    <string>string</string>
    <string>element</string>
</text>

But that is a larger change, requiring changes in the X3D browsers
implementation. My proposed change requires no action from the
implementations -- they already work like that.

Regards,
Michalis



More information about the x3d-public mailing list