Unlike rich text editors like
TinyMCE 
or
CKEditor 
, XMLmind XML Editor Web Edition
(
XXEW for short) is
not a standalone program entirely
written in JavaScript.
XXEW consists in two programs:
<xxe-client>, a 100% JavaScript frontend running in
the web browser and
xxeserver, a
Java™ application backend running on a server
computer.
Figure 2-1. XXEW architecture
<xxe-client> cannot function without being
connected to an
xxeserver through the
WebSocket 
("
ws://" URL) protocol
or preferably, the WebSocket Secure ("
wss://" URL)
protocol.
<xxe-client> is lightweight and thus loads
quickly in the web browser. It does just two things: display as HTML+CSS a
view of the XML document being edited and interact with the user.
xxeserver does
everything else: load,
validate, modify, save, close the XML document, execute commands received
from
<xxe-client> in order to modify the XML
document, compute which HTML+CSS representing the view of the XML nodes is
to be sent to
<xxe-client>, etc.
xxeserver is in fact a server variant of the proven
XMLmind XML Editor Desktop Application 
. Of course,
as a full-fledged server program,
xxeserver can run on
headless server computers and can handle multiple, concurrent
<xxe-client>s.
Benefits of this architecture
<xxe-client> is
lightweight(1) and thus
loads quickly in the web browser.
- Being just a server variant of the XMLmind XML Editor desktop
application,
xxeserver shares with the desktop
application almost all its code, commands, configurations(2), add-ons and user preferences. This
also means that fixing a bug or enhancing the desktop application will
almost certainly fix the same bug or improve
xxeserver in the same way.
- Because the state of
<xxe-client>
—including the XML document being edited— is maintained by
xxeserver (see "<xxe-client>
peer" in the figure above),
this state can be fully automatically recovered when needed
too(3). For example, if the user of
<xxe-client>clicks the "Go back" button
of the browser and then clicks "Go forward", then she/he will
automatically find <xxe-client> as she/he left
it. Same reassuring behavior if the user clicks the "Reload current
page" button of the browser or if she/he closes and then reopens
the browser tab/window containing
<xxe-client>.