In a first revision, data are stored in the following XML formats. All objects implement the XMLObject interface.
Jobs.xml: Storing the partitioned root job into smaller child jobs (cause of limited script execution)
<?xml version="1.0" encoding="UTF-8"?>
<root>
<job id="" snapshot="[path]" snapshotOffset="0" snapshotLength="0"
report="[path]" author="[wp_user_id]:[wp_user_name]:[wp_user_role]"
backup="[path]" taskmodule="[unique_name]">
<job id="" snapshot="[path]" snapshotOffset="0" snapshotLength="0"></job>
<job id="" snapshot="[path]" snapshotOffset="0" snapshotLength="0">
<job id="" snapshot="[path]" snapshotOffset="0" snapshotLength="0"></job>
<job id="" snapshot="[path]" snapshotOffset="0" snapshotLength="0"></job>
</job>
<job id="" snapshot="[path]" snapshotOffset="0" snapshotLength="0"></job>
</job>
</root>
Report.xml: How to store repots on disk
<?xml version="1.0" encoding="UTF-8"?>
<root>
<report id="" job="[path]">
<name>[string]</name>
<title>[nice string]</title>
<description>1</description>
<date>[rfc xxx]</date>
<author>[name]</author>
<statistics>
<cputime>[time_in_sec]</cputime>
<malloc>[min]:[average]:[peak]</malloc>
<affectedcells>[number]</affectedcells>
<affectedtables>[number]</affectedtables>
<notifications count="[number]">
<email recipient="[name] <[mail_address]>" subject="[string]" contents="[summary|changes|statistics]" size="[size in bytes]" role="[superadmin|admin|editor|author]" />
<email recipient="[name] <[mail_address]>" subject="[string]" contents="[summary|changes|statistics]" size="[size in bytes]" role="[superadmin|admin|editor|author]" />
<email recipient="[name] <[mail_address]>" subject="[string]" contents="[summary|changes|statistics]" size="[size in bytes]" role="[superadmin|admin|editor|author]" />
</notifications>
</statistics>
<protocol>1</protocol>
<meta>
<taskmodule name="[unique_name]" />
<dbtables>[name1],[name2],[name3]</dbtables>
</meta>
</report>
</root>
Backups.xml: An index like structure to point to backup data
<?xml version="1.0" encoding="UTF-8"?>
<root>
<backup database="[name]" table="[name]" path="[path_to_mysql_dump_data]" date="[rfc xxx]" job="[path]"
arguments="[arg1],[arg2],[arg3],..." cputime="" malloc="[min]:[average]:[peak]" />
<backup database="[name]" table="[name]" path="[path_to_mysql_dump_data]" date="[rfc xxx]" job="[path]"
arguments="[arg1],[arg2],[arg3],..." cputime="" malloc="[min]:[average]:[peak]" />
<backup database="[name]" table="[name]" path="[path_to_mysql_dump_data]" date="[rfc xxx]" job="[path]"
arguments="[arg1],[arg2],[arg3],..." cputime="" malloc="[min]:[average]:[peak]" />
<backup database="[name]" table="[name]" path="[path_to_mysql_dump_data]" date="[rfc xxx]" job="[path]"
arguments="[arg1],[arg2],[arg3],..." cputime="" malloc="[min]:[average]:[peak]" />
</root>
Snapshot.xml: where all differential data for one table is stored
<?xml version="1.0" encoding="UTF-8"?>
<root>
<meta database="[name]" table="[name]" primary_column="[name]" version="[internal_structure_version]">
<column name="[name]" cid="[column_id]" />
<column name="[name]" cid="[column_id]" />
<column name="[name]" cid="[column_id]" />
</meta>
<body>
<cell pid="[primary_row_id]" cid="[column_id]">
<pre>1</pre>
<post>1</post>
</cell>
<cell pid="[primary_row_id]" cid="[column_id]">
<pre>1</pre>
<post>1</post>
</cell>
<cell pid="[primary_row_id]" cid="[column_id]">
<pre>1</pre>
<post>1</post>
</cell>
<cell pid="[primary_row_id]" cid="[column_id]">
<pre>1</pre>
<post>1</post>
</cell>
</body>
</root>
History.xml: An index of previous tasks that point to root jobs
<?xml version="1.0" encoding="UTF-8"?>
<root>
<job date="[rfc xxx]" title="[string]" path="[path]" />
<job date="[rfc xxx]" title="[string]" path="[path]" />
<job date="[rfc xxx]" title="[string]" path="[path]" />
<job date="[rfc xxx]" title="[string]" path="[path]" />
</root>
Locks.xml: A list of all locks to ensure database coherence (for one part)
<?xml version="1.0" encoding="UTF-8"?>
<root>
<lock database="[name]" table="[name]" date="[rfc xxx]" taskmodule="[name]" job="[path]" />
<lock database="[name]" table="[name]" date="[rfc xxx]" taskmodule="[name]" job="[path]" />
<lock database="[name]" table="[name]" date="[rfc xxx]" taskmodule="[name]" job="[path]" />
<lock database="[name]" table="[name]" date="[rfc xxx]" taskmodule="[name]" job="[path]" />
</root>
Taskpresets.xml: Easily exchange task settings (e.g. where to search for what). Can be used by other plugin authors in case of their plugin changes. The user can easily insert or upload such a file.
<?xml version="1.0" encoding="UTF-8"?>
<root>
<preset title="[string]" date="[rfc xxx]" author="name" authormail="mailaddress" authorurl="url">
<taskmodule name="[name]">
<param name="[name]" value="[string]" />
<param name="[name]" value="[string]" />
<param name="[name]" value="[string]" />
<param name="[name]" value="[string]" />
<meta>
<selector search="[string]" order="[number]" />
<selector search="[string]" order="[number]" />
<selector search="[string]" order="[number]" />
<selector search="[string]" order="[number]" />
<filter search="[string]" replace="[string]" order="[number]" />
<filter search="[string]" replace="[string]" order="[number]" />
<filter search="[string]" replace="[string]" order="[number]" />
<filter search="[string]" replace="[string]" order="[number]" />
</meta>
</taskmodule>
</preset>
</root>
Likewise to database designs, logical grouping of data and no to repeat similar data was a strong requirements for designing these xml structures. Sometimes, data is repeated only to prevent reading of multiple xml files for simple things (so to speed up processes a bit). A compromise!
Of cause, the database could have been used as well, but these XML files simplifies things a lot, and using multiple database tables would only be a burden on the WordPress database used (esp. in case of plugin updates and possibly database table updates!).