roundtrip XML-JSON and back
Having trouble installing Oxygen? Got a bug to report? Post it all here.
-
- Posts: 8
- Joined: Fri Jul 27, 2018 5:22 am
roundtrip XML-JSON and back
When I try to roundtrip XML to JSON and back using the GUI tools in Oxygen 24.1 I have problems with namespaces. Should I be able to roundtrip?
Trivial example
<?xml version="1.0" encoding="utf-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- XML Catalog file for DocBook XSL-NS v1.78.1 -->
<rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl-ns/current/" rewritePrefix="./"/>
<rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl-ns/current/" rewritePrefix="./"/>
<rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl-ns/1.78.1/" rewritePrefix="./"/>
<rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl-ns/1.78.1/" rewritePrefix="./"/>
</catalog>
becomes
{
"catalog": {
"xmlns": "urn:oasis:names:tc:entity:xmlns:xml:catalog",
"rewriteURI": [
{
"uriStartString": "http://docbook.sourceforge.net/release/xsl-ns/current/",
"rewritePrefix": "./"
},
{
"uriStartString": "http://docbook.sourceforge.net/release/xsl-ns/1.78.1/",
"rewritePrefix": "./"
}
],
"rewriteSystem": [
{
"systemIdStartString": "http://docbook.sourceforge.net/release/xsl-ns/current/",
"rewritePrefix": "./"
},
{
"systemIdStartString": "http://docbook.sourceforge.net/release/xsl-ns/1.78.1/",
"rewritePrefix": "./"
}
]
}
}
and then
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<xmlns>urn:oasis:names:tc:entity:xmlns:xml:catalog</xmlns>
<rewriteURI>
<uriStartString>http://docbook.sourceforge.net/release/ ... tartString>
<rewritePrefix>./</rewritePrefix>
</rewriteURI>
<rewriteURI>
<uriStartString>http://docbook.sourceforge.net/release/ ... tartString>
<rewritePrefix>./</rewritePrefix>
</rewriteURI>
<rewriteSystem>
<systemIdStartString>http://docbook.sourceforge.net/release/ ... tartString>
<rewritePrefix>./</rewritePrefix>
</rewriteSystem>
<rewriteSystem>
<systemIdStartString>http://docbook.sourceforge.net/release/ ... tartString>
<rewritePrefix>./</rewritePrefix>
</rewriteSystem>
</catalog>
Trivial example
<?xml version="1.0" encoding="utf-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- XML Catalog file for DocBook XSL-NS v1.78.1 -->
<rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl-ns/current/" rewritePrefix="./"/>
<rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl-ns/current/" rewritePrefix="./"/>
<rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl-ns/1.78.1/" rewritePrefix="./"/>
<rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl-ns/1.78.1/" rewritePrefix="./"/>
</catalog>
becomes
{
"catalog": {
"xmlns": "urn:oasis:names:tc:entity:xmlns:xml:catalog",
"rewriteURI": [
{
"uriStartString": "http://docbook.sourceforge.net/release/xsl-ns/current/",
"rewritePrefix": "./"
},
{
"uriStartString": "http://docbook.sourceforge.net/release/xsl-ns/1.78.1/",
"rewritePrefix": "./"
}
],
"rewriteSystem": [
{
"systemIdStartString": "http://docbook.sourceforge.net/release/xsl-ns/current/",
"rewritePrefix": "./"
},
{
"systemIdStartString": "http://docbook.sourceforge.net/release/xsl-ns/1.78.1/",
"rewritePrefix": "./"
}
]
}
}
and then
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<xmlns>urn:oasis:names:tc:entity:xmlns:xml:catalog</xmlns>
<rewriteURI>
<uriStartString>http://docbook.sourceforge.net/release/ ... tartString>
<rewritePrefix>./</rewritePrefix>
</rewriteURI>
<rewriteURI>
<uriStartString>http://docbook.sourceforge.net/release/ ... tartString>
<rewritePrefix>./</rewritePrefix>
</rewriteURI>
<rewriteSystem>
<systemIdStartString>http://docbook.sourceforge.net/release/ ... tartString>
<rewritePrefix>./</rewritePrefix>
</rewriteSystem>
<rewriteSystem>
<systemIdStartString>http://docbook.sourceforge.net/release/ ... tartString>
<rewritePrefix>./</rewritePrefix>
</rewriteSystem>
</catalog>
-
- Posts: 38
- Joined: Wed Sep 09, 2020 3:17 pm
Re: roundtrip XML-JSON and back
Post by florin_nica »
Hi Bob,
Thank you for the detailed feedback.
The XML to JSON conversion tool does not differentiate between XML attributes (including namespaces) and XML elements, so both of them are converted to JSON properties. When converting back to XML, all the JSON properties become XML elements, so the roundtrip is not a perfect match.
We already have an internal issue (EXM-48884), which requires some investigation in this regard. A possible solution could be to somehow annotate or prefix the JSON properties that are converted from XML attributes, so that the conversion tool will know how to make the exact roundtrip.
I will keep you up-to-date with the status of the issue.
Regards,
Florin
Thank you for the detailed feedback.
The XML to JSON conversion tool does not differentiate between XML attributes (including namespaces) and XML elements, so both of them are converted to JSON properties. When converting back to XML, all the JSON properties become XML elements, so the roundtrip is not a perfect match.
We already have an internal issue (EXM-48884), which requires some investigation in this regard. A possible solution could be to somehow annotate or prefix the JSON properties that are converted from XML attributes, so that the conversion tool will know how to make the exact roundtrip.
I will keep you up-to-date with the status of the issue.
Regards,
Florin
-
- Posts: 8
- Joined: Fri Jul 27, 2018 5:22 am
Re: roundtrip XML-JSON and back
Good to know it's not just me somehow. An old post her pointed me to https://github.com/bramstein/xsltjson/ maybe that's the underpinning of your XML to JSON? He has info on a few conventions that might make it round trip able. It appeared BadgerFish would do so but I didn't quickly find a BadgerFish JSON to XML lots of XML to BadgerFish JSON but not the return trip.
Just a thought; I don't know if BadgerFish is old and not in use or still going strong.
Just a thought; I don't know if BadgerFish is old and not in use or still going strong.
-
- Posts: 38
- Joined: Wed Sep 09, 2020 3:17 pm
Re: roundtrip XML-JSON and back
Post by florin_nica »
Hi again Bob,
Thank you very much for the suggestion.
The Badgerfish convention seems to be a very comprehensive way of converting XML to JSON, as it uses some mappings for XML attributes and namespaces. This adds a bit of overhead to the JSON syntax, but, of course, there has to be a trade-off.
Maybe we can use these mappings as well in our XML-JSON converter. But not by default, rather controlled by some options.
Regards,
Florin
Thank you very much for the suggestion.
The Badgerfish convention seems to be a very comprehensive way of converting XML to JSON, as it uses some mappings for XML attributes and namespaces. This adds a bit of overhead to the JSON syntax, but, of course, there has to be a trade-off.
Maybe we can use these mappings as well in our XML-JSON converter. But not by default, rather controlled by some options.
Regards,
Florin
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service