ArchX

[What's ArchX?| An Example| Demo]

This document is under construction.

What's ArchX?

ArchX is a lauguage for synchronizing XML documents stored in different formats.

An Example

We consider synchronizing address book A
<lists>
  <note>address book A</note>
  <item><n>Ginger</n><stud>mgm.com</stud><stud>mac.com</stud></item>
  <item><n>John</n></item>
</lists>
with the address book B
<book>
  <note>address book B</note>
  <entry>Ginger
  <adds><add>mgm.com</add><add>mac.com</add></adds></entry>
  <entry>John<adds></adds></entry>
</book>
where we have correspondences between lists and book, and between item and entry. The relation between the two bookmarks specified in ArchX is the following.
relation top =
  lists[note[String], (var litem)*]
<->
  book[note[String], (var ritem)*]
where item(litem, ritem)
relation item =
  item[n[var nm as String], (stud[var mail as String])*]
<->
  entry[var nm as String, adds[(add[var mail as String])*]]
Suppose the e-mail address mac.com in the address book B is deleted. To reflect this edition, we just enclose the e-mail address with tag del as follows.
<del><add>mac.com</add></del>
ArchX will automatically remove the e-mail address mac.com in the address book A. in the Next, consider adding the entry for John with a e-mail address "tom.com" to the address book A. Then, we append
<ins><item>Tom</item><stud>tom.com</stud></ins>
to the address book A. Then, a new entry
<entry>Tom<adds><add>tom.com</add></adds></entry>
will be put next to the entry for John in the address book B. We may want to change the title of address book A to address book C, we edit as follows.
...<note><mod><prev>address book A</prev><cur>address book C</cur></mod></note>
This edition has no effect on the address book B, since there is no element in the bookmark B that are related to the element note in the address book B.

Demo

A demo of ArchX can be found here.