# Round-trip format conversion

The term round-trip is used in document conversion particularly involving markup languages such as XML and SGML. Round-tripping consists of converting a document in format A (docA) to one in format B (docB) and then back again to format A (docA′). If docA and docA′ are identical then there has been no information loss and the round-trip has been successful. More generally it means converting from any data representation and back again, including from one data structure to another.

## Common use cases

* Databases: When migrating data between different database systems or formats, round-tripping validates that data remains consistent after conversion.
* File Formats: Converting documents between formats, such as from Microsoft Word to OpenDocument Format and back, to ensure document fidelity. Converting a document from HTML to Markdown and back, checking for consistency.
* Serialization and Deserialization: Converting objects to a storable or transmittable format (like JSON or XML) and back into objects without losing data.
In the context of graph databases, round-tripping can validate conversions between different graph models, such as from the Resource Description Framework (RDF) to Property Graphs and back, ensuring the original semantics and structure are preserved.

## Information loss

When a document in one format is converted to another there is likely to be information loss. For example, suppose an HTML document is saved as plain text (*.txt). Then all the markup (structure, formatting, superscripts, …) will be lost. Compound documents will frequently lose information on images and other embedded objects. If the text file is converted back to the original format, information will necessarily be missing.
A similar effect happens with image formats. Some formats such as JPEG achieve compression through small amount of information loss. If a lossless file, such as a BMP or PNG file, is converted to JPEG and back again then the result will be different from the original (although it may be visually very similar).
Just because the initial and final documents are not bitwise identical does not mean there is information loss. Some formats have undefined fields, or fields where the contents have no impact on the result.

## Markup languages

Markup languages such as XML can, in principle, hold any information and so the process docA → docX → docA' could be designed to avoid information loss. It is now common to convert legacy formats to XML formats because they have greater interoperability and a wider set of available tools. Thus it is possible to convert Word documents to an XML format and reimport them.
The XML document should contain identical information to the legacy format. An important condition is that the roundtrip (legacy → XML → legacy') should result in effectively identical documents. Because some document structures allow some flexibility in content order, whitespace, case-sensitivity, etc. it is useful to have a means of canonicalizing the legacy format. The full roundtrip may then be:
    legacy → canonicalLegacy → XML → legacy′ → canonicalLegacy′
If canonicalLegacy = canonicalLegacy′ then the roundtrip has been successful.

## Character encodings

Unicode has a principle to have round-trip compatibility with older standardized legacy encodings, so conversion of documents to Unicode do not lose information; they can be converted back. To achieve this, Unicode compatibility characters have been introduced.

## Limitation

An application can claim to round-trip and be dishonest. For example, it may save the original data from docA as a field in docX, so the reverse transformation to docA′ simply extracts that field. While this may be needed for some cases, the idea of a round-trip conversion is to go through another format representation or data structure and back again. Such a strategy means that small changes in a document means that it can not be converted back to the original format.

## Usage

The term appears to be common, but not reported in dictionaries. A typical usage occurs on a 1999 xml-dev thread but the term is likely to have been used before this.