1. In a computing environment, a method of determining and resolving conflicting changes to versions of structured data files, the method comprising: for a structured data file which has both a generic structure and dialects built on top of the generic structure, for which conflicting changes have been made, and where an original version of the structured data, a first version of the structured data, and a second version of the structured data exist; determining a dialect which is used for the structured data; and based on the determined dialect, wherein the determined dialect imposes semantic rules for determining differences and applying changes: performing a two-way diff comprising: determining differences, Diff 1 , between the original version and the first version, and determining differences, Diff 2 , between the original version and the second version; performing a three-way diff comprising: traversing Diff 1 and recording changes in Diff 1 which do not conflict with changes in Diff 2 in a change file and recording changes in Diff 1 which conflict with changes in Diff 2 in a conflict file, and traversing Diff 2 and recording changes in Diff 2 which do not conflict with changes in Diff 1 in the change file and recording changes in Diff 2 which conflict with changes in Diff 1 in the conflict file; and performing a merge by: applying each change recorded in the change file to the original version, and resolving conflicts recorded in the conflict file.