<div dir="auto">Thanks, Vince,</div><div dir="auto"><br></div><div dir="auto">Yes, x3d.py reorders fields on output, even if they are specified in order in the python constructor call the authors/programmers create.   The author/programmer cannot force an order of fields in the output from x3d.py without changing x3d.py, perhaps through subclassing.  That might be the best solution at this point.</div><div dir="auto"><br></div><div dir="auto">John</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 31, 2023 at 2:45 PM Vincent Marchetti <<a href="mailto:vmarchetti@kshell.com">vmarchetti@kshell.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have another set of example files reproducing the issue that Andreas and John have identified with creating X3D xml encoding files using the x3d.py package.These examples are a little bit simpler in that the python code which uses the x3d.py is more explicitly available as an illustrative example. I believe it's been clarified in Andreas' and John's messages that the problem is not that x3d.py produces invalid X3D, it is that the X3D output from x3d.py produces valid X3D that does not represent the meaning that the author desired.<br>
<br>
As has been noted, the problem arises in representing a MetadataSet node that itself has a non-null metadata field value. <br>
The file CalendarMetadara.x3d is an X3D file that correctly represents my intent<br>
<br>
The relevant X3D fragment from this file is:<br>
<MetadataSet containerField='metadata' name="birthday" reference="<a href="https://www.archives.gov/legislative/features/washington" rel="noreferrer" target="_blank">https://www.archives.gov/legislative/features/washington</a>"><br>
<MetadataString containerField='metadata' name="calendar" value='"Julian"'/><br>
<MetadataInteger containerField="value" name="day" value="11"/><br>
<MetadataInteger containerField="value" name="month" value="2"/><br>
<MetadataInteger containerField="value" name="year" value="1731"/><br>
<br>
To make the purpose of each Metadata node I have by hand added a containerField xml attribute to each element.<br>
This file is not part of my example set; I am not concerned . at least here, with how this can be converted to python encoding. This file just shows what I am trying to generate using x3d.py<br>
<br>
<br>
The python code, which I judge should reproduce this example, or at least equivalent X3D depending on choice of defaults, is in file GenerateCalendarMetadata.py, with the relevant section <br>
<br>
    WorldInfo(      metadata = MetadataSet(<br>
                    name="birthday",<br>
                    reference="<a href="https://www.archives.gov/legislative/features/washington" rel="noreferrer" target="_blank">https://www.archives.gov/legislative/features/washington</a>",<br>
                    metadata=MetadataString(name="calendar", value=["Julian"]),<br>
                    value=[ MetadataInteger(name="day" ,  value=[11]),<br>
                            MetadataInteger(name="month", value=[2]),<br>
                            MetadataInteger(name="year", value=[1731])<br>
                          ]<br>
                    )<br>
            )<br>
<br>
The output of the completed script is in file GeneratedCalendarMetadata.x3d, relevant section is:<br>
<br>
  <MetadataSet name='birthday' reference='<a href="http://www.americaslibrary.gov/jb/colonial/jb_colonial_washingtn_2.html" rel="noreferrer" target="_blank">http://www.americaslibrary.gov/jb/colonial/jb_colonial_washingtn_2.html</a>'><br>
        <MetadataString name='calendar' value='"Julian"'/><br>
        <MetadataInteger name='day' value='11'/><br>
        <MetadataInteger name='month' value='2'/><br>
        <MetadataInteger name='year' value='1731'/><br>
      </MetadataSet><br>
<br>
The point of the example is that there is no general choice of default values of containerField attribute in which this X3D fragment has the same meaning as in CalendarMetadata.x3d or with the intent as represented in the python code.<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
Vince Marchetti<br>
<br>
<br>
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div></div>