[x3d-public] Request for X3D encoding comment output from X3DPSAIL
John Carlson
yottzumm at gmail.com
Mon Jan 5 22:28:25 PST 2026
Here's the motivating ticket with Java program and .x3d for
converting multi-line comments to single-line comments (with many single
line comments possible per multi-line comment.
x3d / Tickets / #83 Replacing Multiline comments with single line comments
in Java. Open Source donation <https://sourceforge.net/p/x3d/tickets/83/>
Feel free to convert to a stylesheet for use in X3dToPython.xslt!
John
On Mon, Jan 5, 2026 at 10:42 AM Don Brutzman <don.brutzman at gmail.com> wrote:
> Here are some details and a separate XML example that is relevant.
>
> XSLT makes it easy to normalize all whitespace characters in a comment, or
> attribute. For example, the XSLT function normalize-space(.) replaces a
> whitespace character, tab, newline, or linebreak character with a single
> space between other non-whitespace characters.
>
> Authors can maintain positive control of their model comments in X3D
> source files (XML, ClassicVRML, JSON, binary, turtle) by splitting or
> combining each comment themselves. JSON does not have any comment
> capability, by the originator's design, so we have represented them by
> creating an explicit class.
>
> Often a comment with longer edited multiline prose might be better served
> by producing other documentation, or by splitting and separating into
> smaller chunks. Shifting to plain-old XML, for example, the X3D tooltips
> inserts hints and warnings in attribute text.
>
> - Extensible 3D (X3D) 4.0 Tooltips
> - X3D Tooltips provide authoring hints for each node and field found
> in X3D Architecture version 4 International Specification (IS).
> Developmental work on X3D draft 4.1 is also supported.
>
> Corresponding source, XSLT stylesheet and output:
>
> - https://www.web3d.org/x3d/tooltips/x3d-4.0.profile.xml
> - https://www.web3d.org/x3d/tooltips/X3dTooltipConversions.xslt
> - https://www.web3d.org/x3d/tooltips/X3dTooltips.html
>
> As before: persistent multiline comments are not a consistent feature in
> many file encodings or programming-language bindings. Nor are they a
> requirement in X3D Architecture. The option to maintain persistence of
> single-line comments is a goal requirement in order to maintain
> round-tripping interoperability. Round-trip conversion of comments in X3D
> Example Archive models is an excellent way to test this, typically starting
> with the .x3d XML encoding.
>
> Popping up a level: if an author wants to ensure that any downstream
> application can never legally strip extra information, then they should use
> X3D MetadataString/MetadataSet structures for always-persistent retention
> and machine-readable structured data.
>
> Popping up another level of abstraction, with apologies to René Magritte: <!--
> this is not a comment -->
>
> - Wikipedia: The Treachery of Images
> - https://en.wikipedia.org/wiki/The_Treachery_of_Images
>
> all the best, Don
> --
> X3D Graphics, Maritime Robotics, Distributed Simulation
> Relative Motion Consulting https://RelativeMotion.info
>
>
> On Sun, Jan 4, 2026 at 2:01 PM John Carlson <yottzumm at gmail.com> wrote:
>
>> My current plan for replacing multiple line comments with single lines
>> comments where the comment content are preserved on separate lines is as
>> follows:
>>
>> 1. Write a Java SAX parser to replace newlines with —>\n<!— inside XML
>> comments.
>>
>> 2. Compile with GraalVM native-image into rnl.exe, if not taken.
>>
>> Write a script to apply to all original .x3d files in my examples. This
>> will call vim or ex (vim command-line), with the command, %!rnl.exe, then
>> save and exit.
>>
>> If needed, I will include carriage return.
>>
>> Others would try to make this a stylesheet, but I don’t know if comment()
>> can be split on newlines in XSLT. So I’ll ask claude.ai again!
>>
>> <xsl:stylesheet version="2.0" xmlns:xsl="
>> http://www.w3.org/1999/XSL/Transform">
>>
>> <xsl:template match="@*|node()">
>> <xsl:copy>
>> <xsl:apply-templates select="@*|node()"/>
>> </xsl:copy>
>> </xsl:template>
>>
>> <xsl:template match="comment()">
>> <xsl:for-each select="tokenize(., '
')">
>> <xsl:if test="normalize-space(.) != ''">
>> <xsl:comment><xsl:value-of select="normalize-space(.)"/></xsl:comment>
>> </xsl:if>
>> </xsl:for-each>
>> </xsl:template>
>>
>> </xsl:stylesheet>
>>
>> Gobbledegook to me, but maybe someone can use it.
>>
>> John
>>
>> On Sun, Jan 4, 2026 at 3:32 PM John Carlson <yottzumm at gmail.com> wrote:
>>
>>> For example, it nearly requires program to do this in Python or Perl.
>>>
>>> Claude.ai reports:
>>>
>>> perl -i -0pe 's/<!--(.*?)-->/join("\n", map {"<!-- $_ -->"} grep
>>> {s|^\s*||; s|\s*$||; $_} split("\n", $1))/gse' file.xml
>>>
>>> Obviously I can put this in a shell script, but I like stuff I can
>>> understand!
>>>
>>> Something in Java would be great! Maybe I’ll write and contribute if it
>>> doesn’t already exist?
>>>
>>> Seems like a simple SAX parser, frankly!
>>>
>>> John
>>>
>>> On Sun, Jan 4, 2026 at 3:10 PM John Carlson <yottzumm at gmail.com> wrote:
>>>
>>>> Thanks, it wasn’t clear to me that multi-line comments were not
>>>> supported in X3D XML encoding. That clears up most of my questions!
>>>>
>>>> I will replace multi-line comments with single-line comments in my
>>>> examples. Does X3D-Edit support this feature? This would be great, and
>>>> encourage me to use it!
>>>>
>>>> John
>>>>
>>>> On Sun, Jan 4, 2026 at 2:46 PM Don Brutzman <don.brutzman at gmail.com>
>>>> wrote:
>>>>
>>>>> For clarity, here is a recap of key points that can be found in prior
>>>>> responses and ticket issues:
>>>>>
>>>>> - Persistent single-line comments are an important feature for X3D
>>>>> model conversions and interoperability.
>>>>> - You are welcome to use all Python features, including multi-line
>>>>> comments, whenever programming with Python and x3d.py.
>>>>> - Individual multi-line comments are not supported in a number of
>>>>> file encodings and programming languages. Nor are they defined by X3D
>>>>> Architecture, nor are they supported by several X3D encodings (such as XML
>>>>> and ClassicVRML). Thus multi-line comments are not a required feature.
>>>>> - Persistent comments in x3d.py Python are already supported via a
>>>>> Comment class.
>>>>> - Persistent single-line comments are now partially supported by
>>>>> X3dToPython.xslt converter, if present as children of Scene head and
>>>>> grouping nodes. Further future work on content-model representations in
>>>>> the Python class hierarchy may be able to add them elsewhere (e.g. inside
>>>>> Shape Appearance Material geometry etc.
>>>>> - Tickets are closed after careful review if they are unrepeatable
>>>>> or unactionable. Suggestions and questions about a clearer ticket are
>>>>> usually included.
>>>>>
>>>>> Hope this helps.
>>>>>
>>>>> all the best, Don
>>>>> --
>>>>> X3D Graphics, Maritime Robotics, Distributed Simulation
>>>>> Relative Motion Consulting https://RelativeMotion.info
>>>>>
>>>>>
>>>>> On Sun, Jan 4, 2026 at 5:57 AM John Carlson <yottzumm at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Blowing off some steam. Apologies, I probably should work out
>>>>>> instead.
>>>>>>
>>>>>> I am unsure if it’s easier to output straight line code instead of
>>>>>> hierarchical code in Python; multi-line non-persistent comments might
>>>>>> become easier in straight line code. I don’t know about comments() in
>>>>>> XSLT. In straight line code, wrapping a multi or single line comment in
>>>>>> “””…””” is a cinch. Even if newlines need to be added for the Python
>>>>>> interpreter.
>>>>>> AFAIK, I’ve already mentioned that straight line code is easier to
>>>>>> debug, in my mind. I think the Java large file discussion is still
>>>>>> open; I know hierarchical code is more succinct, and less likely to stack
>>>>>> overflow. I think the choices between code structure in Python and Java
>>>>>> might be different.
>>>>>>
>>>>>> Persistent multi-line comments are desirable, even if they aren’t
>>>>>> present in the archive. We will probably make different choices between
>>>>>> hierarchical and straight line code when this feature is available.
>>>>>>
>>>>>> Short term hacks like single line comments work until features are
>>>>>> introduced. That doesn’t mean tickets should be closed prematurely, or
>>>>>> examples outside the archives are invalid.
>>>>>>
>>>>>> John
>>>>>>
>>>>>> On Tue, Dec 30, 2025 at 3:42 AM John Carlson <yottzumm at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Don, thanks for your comment on this ticket that naively adding
>>>>>>> Comment to a children field might not work. That was one of my intentions
>>>>>>> on expressing myself so vocally. I apologize for using your time to do
>>>>>>> this, but I think it revealed a possible design consideration. I think if
>>>>>>> I had discovered it, it would have gone over like a wet balloon.
>>>>>>>
>>>>>>> Thank you again, I will not put comments arbitrarily in the
>>>>>>> scenegraph for now with my PythonSerializer.js, until you indicate it’s
>>>>>>> ready! I will leave them out of the scenegraph, as they are now. Since
>>>>>>> I handle comments generically, I will have to research the nodes you’ve
>>>>>>> accomplished.
>>>>>>>
>>>>>>> Now, can we have other multi-line comments, not in the persistent
>>>>>>> scenegraph, in Python translated from .x3d, in the short term, like:
>>>>>>>
>>>>>>> #
>>>>>>> # This is comment line 2
>>>>>>> # This is comment line 3
>>>>>>> #
>>>>>>>
>>>>>>> ?
>>>>>>>
>>>>>>> John
>>>>>>>
>>>>>>> From the ticket:
>>>>>>>
>>>>>>> “
>>>>>>>
>>>>>>> This is not an easy fix for converting files because Comment is not
>>>>>>> part of the content model for all nodes. Solving this will probably require
>>>>>>> extending class _ X3DNode in x3d.py and sorting out possible subclass
>>>>>>> collisions. It will also be difficult to retain the original order of child
>>>>>>> nodes and child comments within a parent node.
>>>>>>>
>>>>>>> This might be fixable someday - after some effort I got it working
>>>>>>> for head, Scene, field, fieldValue.. Deferred as future work.
>>>>>>> ”
>>>>>>>
>>>>>>> On Mon, Dec 29, 2025 at 12:52 PM Don Brutzman <
>>>>>>> don.brutzman at gmail.com> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> I have posted a new ticket to capture this point. Perhaps a useful
>>>>>>>> exemplar, as well.
>>>>>>>>
>>>>>>>> - X3D SourceForge ticket #82 creating persistent comments in
>>>>>>>> python when converting from XML
>>>>>>>> - https://sourceforge.net/p/x3d/tickets/82/
>>>>>>>>
>>>>>>>> Hope this helps. Again thanks for your many efforts. Have fun
>>>>>>>> improving X3D! 🤔 👍
>>>>>>>>
>>>>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20260106/49d783d2/attachment-0001.html>
More information about the x3d-public
mailing list