You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
xmlns-prefixed attribute on root element is lost #569
It looks like the parsing code stores the namespace data for the node in the treebuilder's namespace stack, but the data about which tag declares a namespace is thrown away. Instead we store the namespace uri for child tags; this is why the xmlns-prefixed attribute jumps to the first child that uses the namespace.
Current status: I have changes that allow these testcases to pass. However, they cause a lot of xml5lib namespace tests to fail, and Ygg01/xml5lib-tests@3fb8d2b suggests that the current behaviour is intentional. I'm hoping to get in touch with @Ygg01 to better understand what the right behaviour here is.
Current status: I have changes that allow these testcases to pass. However, they cause a lot of xml5lib namespace tests to fail, and Ygg01/xml5lib-tests@3fb8d2b suggests that the current behaviour is intentional. I'm hoping to get in touch with @Ygg01 to better understand what the right behaviour here is.
Hi Josh. To be honest I don't quite remember the motivation. It's been like 8 years.
The important question is does it goes against XML namespace spec? If not, just change the tests. I'm open to PRs on xml5lib-tests
Hey if it helps I've found a few documents which will become invalid/broken after parsing and serializing and then viewing in Firefox. Perhaps these can help?
@jdm I've updated the xml5lib tests. New commit. Might require submodule update.
Looking back I think I'm starting to remember why I did it like that. And why I was wrong.
When converting XML ⇾ tree, the prefixes aren't kept. In fact, they are completely arbitrary. They are like temporary variables that are discarded after parsing, e.g. svg:width = "10" becomes {http://www.w3.org/2000/svg}width = "10" in tree.
When converting namespaces, the namespace definitions could be used by simplistic libs, to match on prefix, by scanning for namespace definitions, which is something that should never be done. You search by namespaces, not prefix. I omitted them to prevent such use cases. Trying to be correct by design.
I didn't consider someone would serialize and deserialize and expect similar/same results.
@Ygg01 In the new xml5lib test commit. I notice that the tags been renamed from <a> to <aN> where N is some number. For some of the tests the corresponding </a> has also been renamed to </aN> but for some of them the </a> is still just </a>. Was that intentional / does it matter? I just thought I'd raise the inconsistency as it looks like it could be a potential bug.
I notice that the tags been renamed from <a> to <aN>
@nicoburns Yes. It made it easier to find which of the tests failed. I had to debug most of them and getting error to show which test failed helped, what could happen is that I missed some end tag.
Activity
[-]Root xmlns attribute is lost[/-][+]xmlns-prefixed attribute on root element is lost[/+]jdm commentedon Jan 12, 2025
It looks like the parsing code stores the namespace data for the node in the treebuilder's namespace stack, but the data about which tag declares a namespace is thrown away. Instead we store the namespace uri for child tags; this is why the xmlns-prefixed attribute jumps to the first child that uses the namespace.
jdm commentedon Jan 12, 2025
Parsing code that strips out the xmlns attribute:
html5ever/xml5ever/src/tree_builder/mod.rs
Line 347 in feced06
Parsing code that stores the namespace URI on child tags:
html5ever/xml5ever/src/tree_builder/mod.rs
Line 297 in feced06
Serialization code that uses the namespace URI:
html5ever/xml5ever/src/serialize/mod.rs
Line 111 in feced06
jdm commentedon Jan 12, 2025
Testcase in rcdom/tests/xml-driver.rs:
jdm commentedon Jan 12, 2025
Current status: I have changes that allow these testcases to pass. However, they cause a lot of xml5lib namespace tests to fail, and Ygg01/xml5lib-tests@3fb8d2b suggests that the current behaviour is intentional. I'm hoping to get in touch with @Ygg01 to better understand what the right behaviour here is.
jdm commentedon Jan 12, 2025
Branch: https://github.com/servo/html5ever/compare/xmlns-attrs?expand=1
Ygg01 commentedon Jan 12, 2025
Hi Josh. To be honest I don't quite remember the motivation. It's been like 8 years.
The important question is does it goes against XML namespace spec? If not, just change the tests. I'm open to PRs on xml5lib-tests
Ygg01 commentedon Jan 22, 2025
@jdm what are the next steps to close this?
noahbald commentedon Feb 15, 2025
Hey if it helps I've found a few documents which will become invalid/broken after parsing and serializing and then viewing in Firefox. Perhaps these can help?
Arch Linux Logo
Blobs
Isometric Madness
tldr-pages Banner
Wikipedia Logo
Ygg01 commentedon Feb 16, 2025
@jdm I've updated the xml5lib tests. New commit. Might require submodule update.
Looking back I think I'm starting to remember why I did it like that. And why I was wrong.
svg:width = "10"becomes{http://www.w3.org/2000/svg}width = "10"in tree.devongovett commentedon Mar 23, 2025
I opened #586, which is @jdm's branch plus a submodule update for xml5lib-tests. Looks like everything is passing.
nicoburns commentedon Mar 26, 2025
@Ygg01 In the new xml5lib test commit. I notice that the tags been renamed from
<a>to<aN>where N is some number. For some of the tests the corresponding</a>has also been renamed to</aN>but for some of them the</a>is still just</a>. Was that intentional / does it matter? I just thought I'd raise the inconsistency as it looks like it could be a potential bug.Ygg01 commentedon Mar 26, 2025
@nicoburns Yes. It made it easier to find which of the tests failed. I had to debug most of them and getting error to show which test failed helped, what could happen is that I missed some end tag.
EDIT: Updated tags to and created a new commit Ygg01/xml5lib-tests@a6d626e
jdm commentedon Apr 8, 2025
Reverted. We'll need to investigate test failures in Servo with #586 applied before it can merge again (servo/servo#36284 (comment)).
Ygg01 commentedon Apr 8, 2025
To copy my reply from there, it seems now nodes were serializing the namespaces when they didn't need to😕 Maybe a default setting mismatch.
Also builds passed on Servo. I assume that's done by removing it from the merge queue.
jdm commentedon Apr 8, 2025
Yeah, I published a new version of xml5ever that reverted the problem change.
Ygg01 commentedon Apr 9, 2025
I'm not too familiar with the servo setup, why would we see namespaces serialized in these tests?
Ygg01 commentedon Jul 19, 2025
Is this issue still open? Didn't changes to markup5ever fix it?
Preserve xmlns attributes and rewrite the XML serialization algorithm
Preserve xmlns attributes and rewrite the XML serialization algorithm
Preserve xmlns attributes and rewrite the XML serialization algorithm