diff --git a/xml/constraints.rng b/xml/constraints.rng
new file mode 100644
index 0000000000..ffc064cf4d
--- /dev/null
+++ b/xml/constraints.rng
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ start
+ promote
+ demote
+ stop
+
+
+
+
+
+ Stopped
+ Started
+ Master
+ Slave
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xml/crm-1.0.dtd b/xml/crm-1.0.dtd
new file mode 100644
index 0000000000..09b97d89ec
--- /dev/null
+++ b/xml/crm-1.0.dtd
@@ -0,0 +1,864 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xml/crm.dtd b/xml/crm.dtd
new file mode 100644
index 0000000000..09b97d89ec
--- /dev/null
+++ b/xml/crm.dtd
@@ -0,0 +1,864 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xml/crm.xsl b/xml/crm.xsl
new file mode 100644
index 0000000000..5bb1b4a842
--- /dev/null
+++ b/xml/crm.xsl
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+ Cluster Configuration: ..
+
+
+
+
+
+ Property Set:
+
+
+
+
+
+
+ Node ()
+
+
+
+
+
+
+ Resource
+ :::
+
+
+
+ Preferred Locations:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Resource Group
+
+
+
+
+
+
+ Cloned Resource
+
+
+
+
+
+
+ :
+ interval=
+ timeout=
+
+
+
+
+ Options:
+
+
+
+
+ Location:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (score=)
+
+
+
+
+
+
+ =""
+
+
+
+
+ Cluster Options
+
+
+
+
+ Available Nodes
+
+
+
+
+ Configured Resources
+
+
+
+
+ Inter-Resource Relationships
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Operations:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unknown Object:
+
+
+
+
+
+
+
+
+
+ =
+
+
+
+
+
diff --git a/xml/nvset.rng b/xml/nvset.rng
new file mode 100644
index 0000000000..26c246d363
--- /dev/null
+++ b/xml/nvset.rng
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xml/pacemaker-1.0.rng b/xml/pacemaker-1.0.rng
new file mode 100644
index 0000000000..ca27a63493
--- /dev/null
+++ b/xml/pacemaker-1.0.rng
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ none
+ dtd
+ relax-ng
+ relax-ng-1.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ normal
+ member
+ ping
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xml/regression.core.sh b/xml/regression.core.sh
new file mode 100755
index 0000000000..26bfefe7c6
--- /dev/null
+++ b/xml/regression.core.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+
+ # Copyright (C) 2004 Andrew Beekhof
+ #
+ # This program is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public
+ # License as published by the Free Software Foundation; either
+ # version 2.1 of the License, or (at your option) any later version.
+ #
+ # This software is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ # General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public
+ # License along with this library; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ #
+
+verbose=$1
+io_dir=../pengine/testcases
+diff_opts="--ignore-all-space -u -N"
+failed=.regression.failed.diff
+# zero out the error log
+> $failed
+
+num_failed=0
+function do_test {
+
+ base=$1; shift
+ name=$1; shift
+ input=$io_dir/${base}.xml
+ output=$io_dir/${base}.upgrade.xml
+ expected=$io_dir/${base}.expected.xml
+
+ if [ ! -f $input ]; then
+ echo "Test $name ($base)... Error (PE : input)";
+ num_failed=`expr $num_failed + 1`
+ return;
+ fi
+
+ echo "Test $base : $name";
+ if [ "$create_mode" != "true" -a ! -f $expected ]; then
+ :
+# echo " Error (PE : expected)";
+# return;
+ fi
+
+ xsltproc --novalid upgrade.xsl $input > $output
+ if [ $? != 0 ]; then
+ echo " * Failed (xml : xsltproc)";
+ num_failed=`expr $num_failed + 1`
+ fi
+
+ if [ ! -s $output ]; then
+ echo " Error (xml : no conversion)";
+ num_failed=`expr $num_failed + 1`
+ rm $output
+ return;
+ fi
+
+ xmllint --relaxng pacemaker-1.0.rng $output > /dev/null
+
+ if [ $? != 0 ]; then
+ echo " * Failed (xml : xmllint)";
+ num_failed=`expr $num_failed + 1`
+ cat -n $output
+ exit
+ fi
+
+ rm -f $output
+}
+
+function test_results {
+ if [ $num_failed != 0 ]; then
+ if [ -s $failed ]; then
+ if [ "$verbose" = "-v" ]; then
+ echo "Results of $num_failed failed tests...."
+ less $failed
+ else
+ echo "Results of $num_failed failed tests are in $failed...."
+ echo "Use $0 -v to display them automatically."
+ fi
+ else
+ echo "$num_failed tests failed (no diff results)"
+ rm $failed
+ fi
+ fi
+}
+
diff --git a/xml/regression.sh b/xml/regression.sh
new file mode 100755
index 0000000000..146bd6b7ea
--- /dev/null
+++ b/xml/regression.sh
@@ -0,0 +1,267 @@
+#!/bin/bash
+
+ # Copyright (C) 2004 Andrew Beekhof
+ #
+ # This program is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public
+ # License as published by the Free Software Foundation; either
+ # version 2.1 of the License, or (at your option) any later version.
+ #
+ # This software is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ # General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public
+ # License along with this library; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ #
+. regression.core.sh
+create_mode="true"
+echo Generating test outputs for these tests...
+# do_test
+
+echo Done.
+echo ""
+
+echo Performing the following tests...
+create_mode="false"
+
+echo ""
+do_test simple1 "Offline "
+do_test simple2 "Start "
+do_test simple3 "Start 2 "
+do_test simple4 "Start Failed"
+do_test simple6 "Stop Start "
+do_test simple7 "Shutdown "
+#do_test simple8 "Stonith "
+#do_test simple9 "Lower version"
+#do_test simple10 "Higher version"
+do_test simple11 "Priority (ne)"
+do_test simple12 "Priority (eq)"
+do_test simple8 "Stickiness"
+
+echo ""
+do_test params-0 "Params: No change"
+do_test params-1 "Params: Changed"
+do_test params-2 "Params: Resource definition"
+do_test params-4 "Params: Reload"
+do_test novell-251689 "Resource definition change + target_role=stopped"
+
+echo ""
+do_test orphan-0 "Orphan ignore"
+do_test orphan-1 "Orphan stop"
+
+echo ""
+do_test target-0 "Target Role : baseline"
+do_test target-1 "Target Role : test"
+
+echo ""
+do_test date-1 "Dates" -d "2005-020"
+do_test date-2 "Date Spec - Pass" -d "2005-020T12:30"
+do_test date-3 "Date Spec - Fail" -d "2005-020T11:30"
+do_test probe-0 "Probe (anon clone)"
+do_test probe-1 "Pending Probe"
+do_test standby "Standby"
+do_test comments "Comments"
+
+echo ""
+do_test rsc_dep1 "Must not "
+do_test rsc_dep3 "Must "
+do_test rsc_dep5 "Must not 3 "
+do_test rsc_dep7 "Must 3 "
+do_test rsc_dep10 "Must (but cant)"
+do_test rsc_dep2 "Must (running) "
+do_test rsc_dep8 "Must (running : alt) "
+do_test rsc_dep4 "Must (running + move)"
+
+echo ""
+do_test order1 "Order start 1 "
+do_test order2 "Order start 2 "
+do_test order3 "Order stop "
+do_test order4 "Order (multiple) "
+do_test order5 "Order (move) "
+do_test order6 "Order (move w/ restart) "
+do_test order7 "Order (manditory) "
+do_test order-optional "Order (score=0) "
+do_test order-required "Order (score=INFINITY) "
+
+echo ""
+do_test coloc-loop "Colocation - loop"
+do_test coloc-many-one "Colocation - many-to-one"
+do_test coloc-list "Colocation - many-to-one with list"
+do_test coloc-group "Colocation - groups"
+
+#echo ""
+#do_test agent1 "version: lt (empty)"
+#do_test agent2 "version: eq "
+#do_test agent3 "version: gt "
+
+echo ""
+do_test attrs1 "string: eq (and) "
+do_test attrs2 "string: lt / gt (and)"
+do_test attrs3 "string: ne (or) "
+do_test attrs4 "string: exists "
+do_test attrs5 "string: not_exists "
+do_test attrs6 "is_dc: true "
+do_test attrs7 "is_dc: false "
+do_test attrs8 "score_attribute "
+
+echo ""
+do_test mon-rsc-1 "Schedule Monitor - start"
+do_test mon-rsc-2 "Schedule Monitor - move "
+do_test mon-rsc-3 "Schedule Monitor - pending start "
+do_test mon-rsc-4 "Schedule Monitor - move/pending start"
+
+echo ""
+do_test rec-rsc-0 "Resource Recover - no start "
+do_test rec-rsc-1 "Resource Recover - start "
+do_test rec-rsc-2 "Resource Recover - monitor "
+do_test rec-rsc-3 "Resource Recover - stop - ignore"
+do_test rec-rsc-4 "Resource Recover - stop - block "
+do_test rec-rsc-5 "Resource Recover - stop - fence "
+do_test rec-rsc-6 "Resource Recover - multiple - restart"
+do_test rec-rsc-7 "Resource Recover - multiple - stop "
+do_test rec-rsc-8 "Resource Recover - multiple - block "
+do_test rec-rsc-9 "Resource Recover - group/group"
+
+echo ""
+do_test quorum-1 "No quorum - ignore"
+do_test quorum-2 "No quorum - freeze"
+do_test quorum-3 "No quorum - stop "
+do_test quorum-4 "No quorum - start anyway"
+do_test quorum-5 "No quorum - start anyway (group)"
+do_test quorum-6 "No quorum - start anyway (clone)"
+
+echo ""
+do_test rec-node-1 "Node Recover - Startup - no fence"
+do_test rec-node-2 "Node Recover - Startup - fence "
+do_test rec-node-3 "Node Recover - HA down - no fence"
+do_test rec-node-4 "Node Recover - HA down - fence "
+do_test rec-node-5 "Node Recover - CRM down - no fence"
+do_test rec-node-6 "Node Recover - CRM down - fence "
+do_test rec-node-7 "Node Recover - no quorum - ignore "
+do_test rec-node-8 "Node Recover - no quorum - freeze "
+do_test rec-node-9 "Node Recover - no quorum - stop "
+do_test rec-node-10 "Node Recover - no quorum - stop w/fence"
+do_test rec-node-11 "Node Recover - CRM down w/ group - fence "
+do_test rec-node-12 "Node Recover - nothing active - fence "
+do_test rec-node-13 "Node Recover - failed resource + shutdown - fence "
+do_test rec-node-15 "Node Recover - unknown lrm section"
+do_test rec-node-14 "Serialize all stonith's"
+
+echo ""
+do_test multi1 "Multiple Active (stop/start)"
+
+echo ""
+do_test migrate-1 "Migrate (migrate)"
+do_test migrate-2 "Migrate (stable)"
+do_test migrate-3 "Migrate (failed migrate_to)"
+do_test migrate-4 "Migrate (failed migrate_from)"
+do_test novell-252693 "Migration in a stopping stack"
+do_test novell-252693-2 "Migration in a starting stack"
+do_test novell-252693-3 "Non-Migration in a starting and stopping stack"
+
+#echo ""
+#do_test complex1 "Complex "
+
+echo ""
+do_test group1 "Group "
+do_test group2 "Group + Native "
+do_test group3 "Group + Group "
+do_test group4 "Group + Native (nothing)"
+do_test group5 "Group + Native (move) "
+do_test group6 "Group + Group (move) "
+do_test group7 "Group colocation"
+do_test group13 "Group colocation (cant run)"
+do_test group8 "Group anti-colocation"
+do_test group9 "Group recovery"
+do_test group10 "Group partial recovery"
+do_test group11 "Group target_role"
+do_test group14 "Group stop (graph terminated)"
+do_test group15 "-ve group colocation"
+do_test bug-1573 "Partial stop of a group with two children"
+do_test bug-1718 "Mandatory group ordering - Stop group_FUN"
+
+echo ""
+do_test inc0 "Incarnation start"
+do_test inc1 "Incarnation start order"
+do_test inc2 "Incarnation silent restart, stop, move"
+do_test inc3 "Inter-incarnation ordering, silent restart, stop, move"
+do_test inc4 "Inter-incarnation ordering, silent restart, stop, move (ordered)"
+do_test inc5 "Inter-incarnation ordering, silent restart, stop, move (restart 1)"
+do_test inc6 "Inter-incarnation ordering, silent restart, stop, move (restart 2)"
+do_test inc7 "Clone colocation"
+do_test inc8 "Clone anti-colocation"
+do_test inc9 "Non-unique clone"
+do_test inc10 "Non-unique clone (stop)"
+do_test inc11 "Primitive colocation with clones"
+do_test inc12 "Clone shutdown"
+do_test cloned-group "Make sure only the correct number of cloned groups are started"
+
+echo ""
+do_test master-0 "Stopped -> Slave"
+do_test master-1 "Stopped -> Promote"
+do_test master-2 "Stopped -> Promote : notify"
+do_test master-3 "Stopped -> Promote : master location"
+do_test master-4 "Started -> Promote : master location"
+do_test master-5 "Promoted -> Promoted"
+do_test master-6 "Promoted -> Promoted (2)"
+do_test master-7 "Promoted -> Fenced"
+do_test master-8 "Promoted -> Fenced -> Moved"
+do_test master-9 "Stopped + Promotable + No quorum"
+do_test master-10 "Stopped -> Promotable : notify with monitor"
+do_test master-11 "Stopped -> Promote : colocation"
+do_test novell-239082 "Demote/Promote ordering"
+do_test novell-239087 "Stable master placement"
+do_test master-12 "Promotion based solely on rsc_location constraints"
+do_test master-13 "Include preferences of colocated resources when placing master"
+do_test master-demote "Ordering when actions depends on demoting a slave resource"
+do_test master-ordering "Prevent resources from starting that need a master"
+do_test bug-1765 "Master-Master Colocation (dont stop the slaves)"
+do_test master-group "Promotion of cloned groups"
+
+echo ""
+do_test managed-0 "Managed (reference)"
+do_test managed-1 "Not managed - down "
+do_test managed-2 "Not managed - up "
+
+echo ""
+do_test interleave-0 "Interleave (reference)"
+do_test interleave-1 "coloc - not interleaved"
+do_test interleave-2 "coloc - interleaved "
+do_test interleave-3 "coloc - interleaved (2)"
+
+echo ""
+do_test notify-0 "Notify reference"
+do_test notify-1 "Notify simple"
+do_test notify-2 "Notify simple, confirm"
+do_test notify-3 "Notify move, confirm"
+do_test novell-239079 "Notification priority"
+#do_test notify-2 "Notify - 764"
+
+echo ""
+do_test 594 "OSDL #594"
+do_test 662 "OSDL #662"
+do_test 696 "OSDL #696"
+do_test 726 "OSDL #726"
+do_test 735 "OSDL #735"
+do_test 764 "OSDL #764"
+do_test 797 "OSDL #797"
+do_test 829 "OSDL #829"
+do_test 994 "OSDL #994"
+do_test 1360 "OSDL #1360 - Clone stickiness"
+do_test 1484 "OSDL #1484 - on_fail=stop"
+do_test 1494 "OSDL #1494 - Clone stability"
+do_test unrunnable-1 "Unrunnable"
+do_test stonith-0 "Stonith loop - 1"
+do_test stonith-1 "Stonith loop - 2"
+do_test stonith-2 "Stonith loop - 3"
+do_test bug-1572-1 "Recovery of groups depending on master/slave"
+do_test bug-1572-2 "Recovery of groups depending on master/slave when the master is never re-promoted"
+do_test bug-1685 "Depends-on-master ordering"
+do_test bug-1822 "Dont promote partially active groups"
+
+echo ""
+
+test_results
diff --git a/xml/resources.rng b/xml/resources.rng
new file mode 100644
index 0000000000..97e6c48074
--- /dev/null
+++ b/xml/resources.rng
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ocf
+
+
+
+
+ lsb
+ heartbeat
+ stonith
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Started
+ Slave
+ Master
+
+
+
+
+ nothing
+ quorum
+ fencing
+
+
+
+
+ ignore
+ block
+ stop
+ restart
+ fence
+
+
+
+
+
+
+
+
+
+
diff --git a/xml/rule.rng b/xml/rule.rng
new file mode 100644
index 0000000000..2ed9a94543
--- /dev/null
+++ b/xml/rule.rng
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ or
+ and
+
+
+
+
+
+
+
+
+
+
+
+
+ lt
+ gt
+ lte
+ gte
+ eq
+ ne
+ defined
+ not_defined
+
+
+
+
+
+
+
+
+ string
+ number
+ version
+
+
+
+
+
+
+
+
+
+
+ in_range
+ gt
+ lt
+
+
+
+
+
+
+
+
+
+
+
+
+
+ date_spec
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xml/score.rng b/xml/score.rng
new file mode 100644
index 0000000000..ea55c78f4c
--- /dev/null
+++ b/xml/score.rng
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+ INFINITY
+ +INFINITY
+ -INFINITY
+
+
+
+
diff --git a/xml/upgrade.xsl b/xml/upgrade.xsl
new file mode 100644
index 0000000000..5060be4e32
--- /dev/null
+++ b/xml/upgrade.xsl
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+ relax-ng
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+