<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"Plain Text Char";
margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ligatures:standardcontextual;}
span.PlainTextChar
{mso-style-name:"Plain Text Char";
mso-style-priority:99;
mso-style-link:"Plain Text";
font-family:"Calibri",sans-serif;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:317196622;
mso-list-type:hybrid;
mso-list-template-ids:2071470204 -335223060 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-start-at:0;
mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;
mso-fareast-font-family:"Times New Roman";
mso-bidi-font-family:"Times New Roman";}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l1
{mso-list-id:779448956;
mso-list-template-ids:-1926616988;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2
{mso-list-id:1833138225;
mso-list-template-ids:-1633375534;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level2
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level3
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level5
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level6
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level8
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level9
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3
{mso-list-id:1979458866;
mso-list-template-ids:1783156432;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level2
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level3
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level5
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level6
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level8
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level9
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoPlainText>Rather than constructing a new example, we have some existing models for X3D3/X3D4 Metadata nodes already in the X3D Example Archives.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I looked at the HTML5 pretty-print documentation for our two sets of X3D3/X3D4 metadata examples. Found a problem in X3dToXhtml.xslt conversion stylesheet, was able to fix it.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>The following examples should now all show the correct defaults:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l0 level1 lfo3'>X3D Example Archives: X3D4WA, X3D for Web Authors, Chapter 15 Metadata<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo3'>https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter15Metadata/index.html<o:p></o:p></li></ul><p class=MsoPlainText><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l0 level1 lfo3'>Metadata Node Examples X3D 3<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo3'>Metadata Node Examples X3D 4<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo3'>World Info Example Metadata Set X3D 3<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo3'>World Info Example Metadata Set X3D 3<o:p></o:p></li></ul><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Inspection should show that containerField strings are displayed or hidden as determined by X3D3/X3D4 defaults.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>As these things go, X3D4 metadata collections are more readable too when containerField clutter is removed. For example:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l0 level1 lfo3'>X3D Example Archives: X3D4WA, X3D for Web Authors, Chapter 15 Metadata, Xmp Metadata Embedded<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo3'>https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter15Metadata/XmpMetadataEmbeddedIndex.html<o:p></o:p></li><li class=MsoPlainText style='mso-list:l0 level1 lfo3'>https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter15Metadata/XmpMetadataEmbedded.html<o:p></o:p></li></ul><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>all the best, Don<o:p></o:p></p><p class=MsoPlainText><span style='font-size:9.0pt;font-family:"Courier New"'>-- <o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt;font-family:"Courier New"'>Don Brutzman Naval Postgraduate School, Code USW/Br brutzman@nps.edu<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt;font-family:"Courier New"'>Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt;font-family:"Courier New"'>X3D graphics, virtual worlds, navy robotics https://faculty.nps.edu/brutzman<o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-----Original Message-----<br>From: x3d-public <x3d-public-bounces@web3d.org> On Behalf Of Andreas Plesch<br>Sent: Tuesday, October 31, 2023 10:20 AM<br>To: X3D Graphics public mailing list <x3d-public@web3d.org><br>Subject: [x3d-public] x3d.py roundtrip for Metadata nodes in v.3.3 and v.4.0<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>x3d.py may not quite manage a roundtrip back to XML for MetadataSet.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><a href="https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter01TechnicalOverview/EmptySceneCoreProfileIndex.html"><span style='color:windowtext;text-decoration:none'>https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter01TechnicalOverview/EmptySceneCoreProfileIndex.html</span></a><o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>has the model in XML encoding:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>..<o:p></o:p></p><p class=MsoPlainText><Scene><o:p></o:p></p><p class=MsoPlainText> <!-- Core profile can only contain WorldInfo and Metadata nodes. here!!! --><o:p></o:p></p><p class=MsoPlainText> <WorldInfo title='EmptySceneCoreProfile.x3d'/><o:p></o:p></p><p class=MsoPlainText> <WorldInfo title='EmptySceneCoreProfile.x3d'><o:p></o:p></p><p class=MsoPlainText> <MetadataSet name='NodeSet' containerField='metadata'><o:p></o:p></p><p class=MsoPlainText> <MetadataBoolean containerField='value' name='BooleanData'<o:p></o:p></p><p class=MsoPlainText>value='true false'/><o:p></o:p></p><p class=MsoPlainText> <MetadataDouble containerField='value' name='DoubleData' value='1 2 3'/><o:p></o:p></p><p class=MsoPlainText> <MetadataFloat containerField='value' name='FloatData' value='4 5 6'/><o:p></o:p></p><p class=MsoPlainText> <MetadataInteger containerField='value' name='IntegerData' value='7 8 9'/><o:p></o:p></p><p class=MsoPlainText> <MetadataString containerField='value' name='StringData'<o:p></o:p></p><p class=MsoPlainText>value='"Empty Scene" "Core Profile"'/><o:p></o:p></p><p class=MsoPlainText> </MetadataSet><o:p></o:p></p><p class=MsoPlainText> </WorldInfo><o:p></o:p></p><p class=MsoPlainText></Scene><o:p></o:p></p><p class=MsoPlainText>...<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Running <a href="https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter01TechnicalOverview/EmptySceneCoreProfile.py"><span style='color:windowtext;text-decoration:none'>https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter01TechnicalOverview/EmptySceneCoreProfile.py</span></a><o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>with the latest x3d.py confirms well formedness of the .XML() output.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Uncommenting the diagnostic line to print the XML output gives this XML:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><?xml version="1.0" encoding="UTF-8"?><o:p></o:p></p><p class=MsoPlainText><!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN"<o:p></o:p></p><p class=MsoPlainText>"<a href="https://www.web3d.org/specifications/x3d-3.3.dtd"><span style='color:windowtext;text-decoration:none'>https://www.web3d.org/specifications/x3d-3.3.dtd</span></a>"><o:p></o:p></p><p class=MsoPlainText><X3D profile='Core' version='3.3'<o:p></o:p></p><p class=MsoPlainText>xmlns:xsd='https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance&data=05%7C01%7Cbrutzman%40nps.edu%7C8d4dea2a666142e7e57c08dbda35cdad%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638343696855767086%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=Gy9if2fCFr6lduPoGln0pUEBvJCv5XZvCU%2FvM2QFRro%3D&reserved=0'<o:p></o:p></p><p class=MsoPlainText>xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.3.xsd'><o:p></o:p></p><p class=MsoPlainText> <head><o:p></o:p></p><p class=MsoPlainText>...<o:p></o:p></p><p class=MsoPlainText></head><o:p></o:p></p><p class=MsoPlainText> <Scene><o:p></o:p></p><p class=MsoPlainText> <WorldInfo title='EmptySceneCoreProfile.x3d'/><o:p></o:p></p><p class=MsoPlainText> <WorldInfo title='EmptySceneCoreProfile.x3d'><o:p></o:p></p><p class=MsoPlainText> <MetadataSet name='NodeSet'><o:p></o:p></p><p class=MsoPlainText> <MetadataBoolean name='BooleanData' value='true false'/><o:p></o:p></p><p class=MsoPlainText> <MetadataDouble name='DoubleData' value='1 2 3'/><o:p></o:p></p><p class=MsoPlainText> <MetadataFloat name='FloatData' value='4 5 6'/><o:p></o:p></p><p class=MsoPlainText> <MetadataInteger name='IntegerData' value='7 8 9'/><o:p></o:p></p><p class=MsoPlainText> <MetadataString name='StringData' value='"Empty Scene" "Core Profile"'/><o:p></o:p></p><p class=MsoPlainText> </MetadataSet><o:p></o:p></p><p class=MsoPlainText> </WorldInfo><o:p></o:p></p><p class=MsoPlainText> </Scene><o:p></o:p></p><p class=MsoPlainText></X3D><o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>The Metadata containerField attributes of the original XML encoding were omitted. This is ok for most Metadata nodes since the default containerField value is 'value'.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><a href="https://www.web3d.org/specifications/X3dSchemaDocumentation4.0/x3d-4.0_MetadataSet.html#Link561"><span style='color:windowtext;text-decoration:none'>https://www.web3d.org/specifications/X3dSchemaDocumentation4.0/x3d-4.0_MetadataSet.html#Link561</span></a><o:p></o:p></p><p class=MsoPlainText>defines the default value for the MetadataSet containerField attribute also as 'value'. However, in the example the containerField attribute value for the MetadataSet node needs to be 'metadata' and not 'value', in the x3d.py generated XML.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I believe this may be an example of what John encountered.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>One option for x3d.py may be to generate containerField attributes for all nodes since x3d.py will know the field name for which a node is the value. Perhaps it suffices to do this for all nodes where the containerField attribute value would not be 'children'. It may not be practical to embed the containerField default values for all nodes in the x3d.py source.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I just noticed that x3d.py explicitly generates X3D 3.3 xml output.<o:p></o:p></p><p class=MsoPlainText>The above only applies to X3D 4.0. However, the same issue persists in a flipped way with X3D 3.3 which has 'metadata' as default containerField value for Metadata nodes. This means in the x3d.py generated output all Metadata nodes except for MetadataSet would need an explicit containerField value of 'value'.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-Andreas<o:p></o:p></p><p class=MsoPlainText>--<o:p></o:p></p><p class=MsoPlainText>Andreas Plesch<o:p></o:p></p><p class=MsoPlainText>Waltham, MA 02453<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>_______________________________________________<o:p></o:p></p><p class=MsoPlainText>x3d-public mailing list<o:p></o:p></p><p class=MsoPlainText><a href="mailto:x3d-public@web3d.org"><span style='color:windowtext;text-decoration:none'>x3d-public@web3d.org</span></a><o:p></o:p></p><p class=MsoPlainText><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org"><span style='color:windowtext;text-decoration:none'>http://web3d.org/mailman/listinfo/x3d-public_web3d.org</span></a><o:p></o:p></p></div></body></html>