Dommitt v2.0 Unordered Diff Tool released!!
On June 19th, 2002 Dommitt debuted the latest version of its XML Differencing Tool (v2.0). A significant new feature added to v2.0 is the ability to perform an unordered difference of XML documents. The significance of this new feature is that the gap between SQL and XML vanishes. SQL deals with result sets that have no order. An ordered XML document attaches significance to child order. So, an ordered diff algorithm would indicate some spurious differences in XML documents generated by SQL queries. This new unordered diff algorithm ignores the order in which elements are laid out in the document. No user input is required to determine unordered differences. Dommitt is the only commercial tool offering this capability.
Ordered versus Unordered Differences
Consider the following sample XML document:
<a>
<b>
<c>
<d/>
</c>
</b>
<e/>
<c>
<d/>
</c>
</a>
There is perhaps only one notable aspect to this document-the tree <c><d/></c> is a subtree of the tree rooted at b (<b><c><d/></c></b>).
Consider a modified version of this document:
<a>
<e/>
<b>
<c>
<d/>
</c>
</b>
<c>
<d/>
</c>
</a>
We have moved the tree rooted at <b>. Let us see the output generated by the earlier version of Dommitt that performed ORDERED differences:
<a>
<xmdiffInserte>
<e/>
</xmdiffInserte>
<b>
<c>
<d/>
</c>
</b>
<xmdiffUpdatee>
<e/>
<xmdiffUpdateVale>
<c/>
</xmdiffUpdateVale>
</xmdiffUpdatee>
<xmdiffDeletec>
<c>
<d/>
</c>
</xmdiffDeletec>
</a>
The output is confusing and does not indicate the true nature of the changes made by the user. The only reason for the spurious differences generated by Dommitt is that it pays special attention to the order in which elements are laid out in the two documents. v1.0 of Dommitt performed an ORDERED difference of the two documents.
Now consider the UNORDERED difference of the two documents:
<a>
<xmdiffMoveSourceb key="2">
<b/>
</xmdiffMoveSourceb>
<e/>
<xmdiffMoveTargetb key="2">
<b>
<c>
<d/>
</c>
</b>
</xmdiffMoveTargetb>
<c>
<d/>
</c>
</a>
Move operations indicate the source and destination of subtrees that have been moved or copied. The above XML diff tree indicates that the subtree rooted at <b> has been moved from the location indicated by <xmdiffMoveSourceb key="2"> to the location indicated by <xmdiffMoveTargetb key="2">. The "key" attribute ties the source and destination of MOVEs. Different subtree moves have different key attributes. Also, note from our running example that the largest subtree move has been shown-the subtree rooted at <c> which is a subtree of the tree rooted at <b> does not figure in any move operation.
v2.0 of Dommitt has the ability to hide all local interchanges. When the order of nodes is deemed insignificant by the user, an UNORDERED difference hiding all local exchanges can be done. Such a difference would look like this:
<a>
<e/>
<b>
<c>
<d/>
</c>
</b>
<c>
<d/>
</c>
</a>
Notice that no MOVE operations appear in the output.
Summary of new features in Dommitt v2.0
- Dommitt v2.0 performs UNORDERED differences of XML documents. It merges the v1.0 implementation of generating edit sequences with a step that detects block move operations.
- If the user would prefer flagging local changes in child order, Dommitt v2.0 provides this feature. If no local exchanges need be shown, only global movement of subtrees is flagged with special MOVE operations.
- Dommitt remains the leader in providing this new functionality in a high performance framework. The blocked and multi-threaded nature of the v1.0 product is retained in the enhanced v2.0 product.
Word converter, Convert to PDF, Autocad to PDF converter, Image Converter Plus
DTD used by DOMMITT
Dommitt does not use a DTD during the first two steps of generating a diff file. The third step involves generating a new DTD from the original DTD. This step does require a DTD accessible by Dommitt. A common mistake is to embed SYSTEM references in the XML file, particularly a SYSTEM DTD. For example,
<!DOCTYPE root SYSTEM "foo.dtd">
Change this to a PUBLIC dtd. If you do not care about a new DTD, use the following declaration:
<!DOCTYPE root PUBLIC "dsml.dtd" "http://www.dsml.org/1.0/dsml.dtd" >
Do not forget to change the root element in the above declaration.
Laptop batteries
keylogger
Uploading more than one XML file
Dommitt has been designed to handle the common case easily. This generally involves uploading only two XML documents. If you have any SYSTEM references in your document, Dommitt cannot find these SYSTEM files. You need to upload these files prior to using the diff utility.
Consider the following simple case where the file below (say, a.xml) has a SYSTEM reference to another file (say, incl.xml):
<!DOCTYPE a [
<!ENTITY main SYSTEM "incl.xml">
]>
<a>
<d>
&main;
</d>
</a>
incl.xml looks like this:
<b>
<c/>
</b>
Use the "Upload" link to upload incl.xml followed by a.xml. After all the SYSTEM files have been uploaded, if you now wish to diff a.xml with say, b.xml, you can use the "Upload" link to input a.xml followed by b.xml and view the differences.
The upload logic in Dommitt is a simple finite state machine. It diffs every even numbered file (file#2, file#4,...) with the file preceding it (file#2 with file#1, file#4 with file#3...). Use this knowledge to input your files.
Mail Recovery | Computer monitoring | StandyWorld