From e52d73fb6e3339384c6121d0d1efd2fd90bfcd62 Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com>
Date: Sun, 4 Sep 2011 09:12:25 -0400
Subject: [PATCH] Uncommented XML serialization code and adapted it to the new
 class strucutre.

---
 .../AbstractGraphicalModelAdjacencyGraph.java |  30 +-
 .../dann/graphicalmodel/EvidenceMap.java      |  22 +-
 .../graphicalmodel/GraphicalModelNode.java    |   6 +-
 .../SimpleGraphicalModelNode.java             |  35 +-
 .../dann/graphicalmodel/StateEvidence.java    |  11 +-
 .../ImmutableBayesianAdjacencyNetwork.java    |   1 -
 .../MutableBayesianAdjacencyNetwork.java      |   1 -
 ....syncleus.dann.graphicalmodel.bayesian.xsd | 208 +-----------
 .../com.syncleus.dann.graphicalmodel.xsd      | 302 ++++++++++++++++++
 .../TestSicknessRandomMarkovField.java        |   6 +-
 10 files changed, 358 insertions(+), 264 deletions(-)
 create mode 100644 src/main/resources/com.syncleus.dann.graphicalmodel.xsd

diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/AbstractGraphicalModelAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graphicalmodel/AbstractGraphicalModelAdjacencyGraph.java
index 2a1c5d19..fa5fa50b 100644
--- a/src/main/java/com/syncleus/dann/graphicalmodel/AbstractGraphicalModelAdjacencyGraph.java
+++ b/src/main/java/com/syncleus/dann/graphicalmodel/AbstractGraphicalModelAdjacencyGraph.java
@@ -19,14 +19,12 @@
 package com.syncleus.dann.graphicalmodel;
 
 import java.util.*;
-import com.sun.org.apache.xpath.internal.operations.Neg;
 import com.syncleus.dann.graph.*;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
-//import com.syncleus.dann.graphicalmodel.bayesian.xml.BayesianNetworkElementXml;
-//import com.syncleus.dann.graphicalmodel.bayesian.xml.BayesianNetworkXml;
-//import com.syncleus.dann.xml.NamedValueXml;
-//import com.syncleus.dann.xml.Namer;
-//import com.syncleus.dann.xml.XmlSerializable;
+import com.syncleus.dann.graphicalmodel.xml.GraphicalModelElementXml;
+import com.syncleus.dann.graphicalmodel.xml.GraphicalModelXml;
+import com.syncleus.dann.xml.NamedValueXml;
+import com.syncleus.dann.xml.Namer;
+import com.syncleus.dann.xml.XmlSerializable;
 
 public abstract class AbstractGraphicalModelAdjacencyGraph<N extends GraphicalModelNode, E extends BidirectedEdge<N>> extends AbstractBidirectedAdjacencyGraph<N, E> implements GraphicalModel<N, E>
 {
@@ -56,7 +54,7 @@ public abstract class AbstractGraphicalModelAdjacencyGraph<N extends GraphicalMo
 	public double jointProbability()
 	{
 		// TODO implement this!
-		throw new NotImplementedException();
+		throw new UnsupportedOperationException();
 	}
 
 	@Override
@@ -183,15 +181,14 @@ public abstract class AbstractGraphicalModelAdjacencyGraph<N extends GraphicalMo
 		return (AbstractGraphicalModelAdjacencyGraph<N, E>) super.clone();
 	}
 
-/*
 	@Override
-	public BayesianNetworkXml toXml()
+	public GraphicalModelXml toXml()
 	{
-		final BayesianNetworkElementXml networkXml = new BayesianNetworkElementXml();
+		final GraphicalModelElementXml networkXml = new GraphicalModelElementXml();
 		final Namer<Object> namer = new Namer<Object>();
 
-		networkXml.setNodeInstances(new BayesianNetworkElementXml.NodeInstances());
-		networkXml.setStateInstances(new BayesianNetworkElementXml.StateInstances());
+		networkXml.setNodeInstances(new GraphicalModelElementXml.NodeInstances());
+		networkXml.setStateInstances(new GraphicalModelElementXml.StateInstances());
 		final Set<Object> writtenStates = new HashSet<Object>();
 		for (N node : this.getNodes())
 		{
@@ -244,19 +241,19 @@ public abstract class AbstractGraphicalModelAdjacencyGraph<N extends GraphicalMo
 	}
 
 	@Override
-	public BayesianNetworkXml toXml(final Namer<Object> namer)
+	public GraphicalModelXml toXml(final Namer<Object> namer)
 	{
 		if (namer == null)
 		{
 			throw new IllegalArgumentException("namer can not be null");
 		}
 
-		final BayesianNetworkXml xml = new BayesianNetworkXml();
+		final GraphicalModelXml xml = new GraphicalModelXml();
 		this.toXml(xml, namer);
 		return xml;
 	}
 
-	protected static class NodeConnectivity<N extends BayesianNode, E extends BayesianEdge<N>> extends HashMap<N, Set<E>>
+	protected static class NodeConnectivity<N extends GraphicalModelNode, E extends BidirectedEdge<N>> extends HashMap<N, Set<E>>
 	{
 		private static final long serialVersionUID = -3068604309573134643L;
 
@@ -272,5 +269,4 @@ public abstract class AbstractGraphicalModelAdjacencyGraph<N extends GraphicalMo
 			return edges;
 		}
 	}
-*/
 }
\ No newline at end of file
diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/EvidenceMap.java b/src/main/java/com/syncleus/dann/graphicalmodel/EvidenceMap.java
index 1233555f..19d36e44 100644
--- a/src/main/java/com/syncleus/dann/graphicalmodel/EvidenceMap.java
+++ b/src/main/java/com/syncleus/dann/graphicalmodel/EvidenceMap.java
@@ -19,9 +19,11 @@
 package com.syncleus.dann.graphicalmodel;
 
 import java.util.*;
+import com.syncleus.dann.graphicalmodel.xml.EvidenceMapElementXml;
+import com.syncleus.dann.graphicalmodel.xml.EvidenceMapXml;
 import com.syncleus.dann.xml.*;
 
-public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, StateEvidence<S>>// implements XmlSerializable<EvidenceMapXml, Object>
+public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, StateEvidence<S>> implements XmlSerializable<EvidenceMapXml, Object>
 {
 	private static final long serialVersionUID = 5956089319330421885L;
 	private final Set<GraphicalModelNode> influencingNodes;
@@ -138,27 +140,26 @@ public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, Sta
 		super.putAll(map);
 	}
 
-/*
 	@Override
 	public EvidenceMapXml toXml()
 	{
 		final EvidenceMapElementXml xml = new EvidenceMapElementXml();
 		final Namer<Object> namer = new Namer<Object>();
 
-		final Set<BayesianNode> seenNodes = new HashSet<BayesianNode>();
+		final Set<GraphicalModelNode> seenNodes = new HashSet<GraphicalModelNode>();
 		final Set<Object> seenStates = new HashSet<Object>();
 
 		xml.setNodeInstances(new EvidenceMapElementXml.NodeInstances());
 		xml.setStateInstances(new EvidenceMapElementXml.StateInstances());
-		for (Map.Entry<Map<BayesianNode, Object>, com.syncleus.dann.graphicalmodel.bayesian.StateEvidence<S>> entry : this.entrySet())
+		for (Map.Entry<Map<GraphicalModelNode, Object>, StateEvidence<S>> entry : this.entrySet())
 		{
-			final Map<BayesianNode, Object> influences = entry.getKey();
-			final com.syncleus.dann.graphicalmodel.bayesian.StateEvidence<S> evidence = entry.getValue();
+			final Map<GraphicalModelNode, Object> influences = entry.getKey();
+			final StateEvidence<S> evidence = entry.getValue();
 
 			//add instances for all the nodes and states from the influences
-			for (Map.Entry<BayesianNode, Object> influenceEntry : influences.entrySet())
+			for (Map.Entry<GraphicalModelNode, Object> influenceEntry : influences.entrySet())
 			{
-				final BayesianNode node = influenceEntry.getKey();
+				final GraphicalModelNode node = influenceEntry.getKey();
 				final Object state = influenceEntry.getValue();
 
 				if (seenStates.add(state))
@@ -246,13 +247,13 @@ public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, Sta
 		{
 			jaxbObject.setInfluencedEvidences(new EvidenceMapXml.InfluencedEvidences());
 		}
-		for (Map.Entry<Map<BayesianNode, Object>, StateEvidence<S>> entry : this.entrySet())
+		for (Map.Entry<Map<GraphicalModelNode, Object>, StateEvidence<S>> entry : this.entrySet())
 		{
 			final EvidenceMapXml.InfluencedEvidences.InfluencedEvidence influencedEvidence = new EvidenceMapXml.InfluencedEvidences.InfluencedEvidence();
 
 			//add the influences to the xml
 			influencedEvidence.setInfluences(new EvidenceMapXml.InfluencedEvidences.InfluencedEvidence.Influences());
-			for (Map.Entry<BayesianNode, Object> influenceEntry : entry.getKey().entrySet())
+			for (Map.Entry<GraphicalModelNode, Object> influenceEntry : entry.getKey().entrySet())
 			{
 				final EvidenceMapXml.InfluencedEvidences.InfluencedEvidence.Influences.Influence influenceXml = new EvidenceMapXml.InfluencedEvidences.InfluencedEvidence.Influences.Influence();
 				influenceXml.setNode(namer.getNameOrCreate(influenceEntry.getKey()));
@@ -266,5 +267,4 @@ public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, Sta
 			jaxbObject.getInfluencedEvidences().getInfluencedEvidences().add(influencedEvidence);
 		}
 	}
-*/
 }
diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/GraphicalModelNode.java b/src/main/java/com/syncleus/dann/graphicalmodel/GraphicalModelNode.java
index 7ff8540c..b006bccd 100644
--- a/src/main/java/com/syncleus/dann/graphicalmodel/GraphicalModelNode.java
+++ b/src/main/java/com/syncleus/dann/graphicalmodel/GraphicalModelNode.java
@@ -18,11 +18,11 @@
  ******************************************************************************/
 package com.syncleus.dann.graphicalmodel;
 
-//import com.syncleus.dann.graphicalmodel.xml.GraphicalModelNodeXml;
-//import com.syncleus.dann.xml.XmlSerializable;
+import com.syncleus.dann.graphicalmodel.xml.GraphicalModelNodeXml;
+import com.syncleus.dann.xml.XmlSerializable;
 import java.util.Set;
 
-public interface GraphicalModelNode<S>// extends XmlSerializable<GraphicalModelNodeXml, Object>
+public interface GraphicalModelNode<S> extends XmlSerializable<GraphicalModelNodeXml, Object>
 {
 	Set<S> getLearnedStates();
 	void setState(S currentState);
diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/SimpleGraphicalModelNode.java b/src/main/java/com/syncleus/dann/graphicalmodel/SimpleGraphicalModelNode.java
index fcf57b04..5548769c 100644
--- a/src/main/java/com/syncleus/dann/graphicalmodel/SimpleGraphicalModelNode.java
+++ b/src/main/java/com/syncleus/dann/graphicalmodel/SimpleGraphicalModelNode.java
@@ -21,14 +21,13 @@ package com.syncleus.dann.graphicalmodel;
 import java.util.*;
 import com.syncleus.dann.graph.BidirectedEdge;
 import com.syncleus.dann.graph.context.AbstractContextNode;
-import com.syncleus.dann.math.counting.CombinationCounter;
-//import com.syncleus.dann.graphicalmodel.bayesian.xml.BayesianNodeXml;
-//import com.syncleus.dann.graphicalmodel.bayesian.xml.SimpleBayesianNodeElementXml;
-//import com.syncleus.dann.graphicalmodel.bayesian.xml.SimpleBayesianNodeXml;
-//import com.syncleus.dann.xml.NameXml;
-//import com.syncleus.dann.xml.NamedValueXml;
-//import com.syncleus.dann.xml.Namer;
-//import com.syncleus.dann.xml.XmlSerializable;
+import com.syncleus.dann.graphicalmodel.xml.GraphicalModelNodeXml;
+import com.syncleus.dann.graphicalmodel.xml.SimpleGraphicalModelNodeElementXml;
+import com.syncleus.dann.graphicalmodel.xml.SimpleGraphicalModelNodeXml;
+import com.syncleus.dann.xml.NameXml;
+import com.syncleus.dann.xml.NamedValueXml;
+import com.syncleus.dann.xml.Namer;
+import com.syncleus.dann.xml.XmlSerializable;
 
 public class SimpleGraphicalModelNode<S> extends AbstractContextNode<GraphicalModelNode<S>, BidirectedEdge<GraphicalModelNode<S>>, GraphicalModel<GraphicalModelNode<S>, BidirectedEdge<GraphicalModelNode<S>>>> implements GraphicalModelNode<S>
 {
@@ -169,14 +168,13 @@ public class SimpleGraphicalModelNode<S> extends AbstractContextNode<GraphicalMo
 		return false;
 	}
 
-/*
 	@Override
-	public SimpleBayesianNodeXml toXml()
+	public SimpleGraphicalModelNodeXml toXml()
 	{
 		final Namer<Object> namer = new Namer<Object>();
-		final SimpleBayesianNodeElementXml xml = new SimpleBayesianNodeElementXml();
+		final SimpleGraphicalModelNodeElementXml xml = new SimpleGraphicalModelNodeElementXml();
 
-		xml.setStateInstances(new SimpleBayesianNodeElementXml.StateInstances());
+		xml.setStateInstances(new SimpleGraphicalModelNodeElementXml.StateInstances());
 		final Set<S> writtenStates = new HashSet<S>();
 		for (S learnedState : this.learnedStates)
 		{
@@ -217,25 +215,25 @@ public class SimpleGraphicalModelNode<S> extends AbstractContextNode<GraphicalMo
 	}
 
 	@Override
-	public SimpleBayesianNodeXml toXml(final Namer<Object> namer)
+	public SimpleGraphicalModelNodeXml toXml(final Namer<Object> namer)
 	{
 		if (namer == null)
 		{
 			throw new IllegalArgumentException("namer can not be null");
 		}
 
-		final SimpleBayesianNodeXml xml = new SimpleBayesianNodeXml();
+		final SimpleGraphicalModelNodeXml xml = new SimpleGraphicalModelNodeXml();
 		this.toXml(xml, namer);
 		return xml;
 	}
 
 	@Override
-	public void toXml(final BayesianNodeXml jaxbObject, final Namer<Object> namer)
+	public void toXml(final GraphicalModelNodeXml jaxbObject, final Namer<Object> namer)
 	{
 		//set learned states
 		if (jaxbObject.getLearnedStates() == null)
 		{
-			jaxbObject.setLearnedStates(new SimpleBayesianNodeXml.LearnedStates());
+			jaxbObject.setLearnedStates(new SimpleGraphicalModelNodeXml.LearnedStates());
 		}
 		for (S learnedState : learnedStates)
 		{
@@ -252,10 +250,9 @@ public class SimpleGraphicalModelNode<S> extends AbstractContextNode<GraphicalMo
 		jaxbObject.getState().setName(namer.getNameOrCreate(this.state));
 
 		//set evidence map
-		if ((jaxbObject instanceof SimpleBayesianNodeXml) && (this.evidence != null))
+		if ((jaxbObject instanceof SimpleGraphicalModelNodeXml) && (this.evidence != null))
 		{
-			((SimpleBayesianNodeXml) jaxbObject).setEvidence(this.evidence.toXml(namer));
+			((SimpleGraphicalModelNodeXml) jaxbObject).setEvidence(this.evidence.toXml(namer));
 		}
 	}
-	*/
 }
diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/StateEvidence.java b/src/main/java/com/syncleus/dann/graphicalmodel/StateEvidence.java
index 760c9179..e326b6e0 100644
--- a/src/main/java/com/syncleus/dann/graphicalmodel/StateEvidence.java
+++ b/src/main/java/com/syncleus/dann/graphicalmodel/StateEvidence.java
@@ -20,11 +20,11 @@ package com.syncleus.dann.graphicalmodel;
 
 import java.util.HashMap;
 import java.util.Map;
-//import com.syncleus.dann.graphicalmodel.bayesian.xml.StateEvidenceElementXml;
-//import com.syncleus.dann.graphicalmodel.bayesian.xml.StateEvidenceXml;
-//import com.syncleus.dann.xml.*;
+import com.syncleus.dann.graphicalmodel.xml.StateEvidenceElementXml;
+import com.syncleus.dann.graphicalmodel.xml.StateEvidenceXml;
+import com.syncleus.dann.xml.*;
 
-public class StateEvidence<S> extends HashMap<S, Integer>// implements XmlSerializable<StateEvidenceXml, Object>
+public class StateEvidence<S> extends HashMap<S, Integer> implements XmlSerializable<StateEvidenceXml, Object>
 {
 	private static final long serialVersionUID = 4276706788994272957L;
 	private long totalEvidence;
@@ -68,7 +68,7 @@ public class StateEvidence<S> extends HashMap<S, Integer>// implements XmlSerial
 		}
 	}
 
-/*
+
 	@Override
 	public StateEvidenceXml toXml()
 	{
@@ -138,5 +138,4 @@ public class StateEvidence<S> extends HashMap<S, Integer>// implements XmlSerial
 			jaxbObject.getStates().getStates().add(stateXml);
 		}
 	}
-*/
 }
diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/bayesian/ImmutableBayesianAdjacencyNetwork.java b/src/main/java/com/syncleus/dann/graphicalmodel/bayesian/ImmutableBayesianAdjacencyNetwork.java
index 9a9054ea..424b4b7a 100644
--- a/src/main/java/com/syncleus/dann/graphicalmodel/bayesian/ImmutableBayesianAdjacencyNetwork.java
+++ b/src/main/java/com/syncleus/dann/graphicalmodel/bayesian/ImmutableBayesianAdjacencyNetwork.java
@@ -27,7 +27,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import com.syncleus.dann.graph.DirectedEdge;
-import com.syncleus.dann.graphicalmodel.AbstractGraphicalModelAdjacencyGraph;
 import com.syncleus.dann.graphicalmodel.GraphicalModelNode;
 
 public class ImmutableBayesianAdjacencyNetwork<N extends GraphicalModelNode, E extends DirectedEdge<N>> extends AbstractBayesianAdjacencyNetwork<N, E>
diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/bayesian/MutableBayesianAdjacencyNetwork.java b/src/main/java/com/syncleus/dann/graphicalmodel/bayesian/MutableBayesianAdjacencyNetwork.java
index 8730a3f9..bd6e39cf 100644
--- a/src/main/java/com/syncleus/dann/graphicalmodel/bayesian/MutableBayesianAdjacencyNetwork.java
+++ b/src/main/java/com/syncleus/dann/graphicalmodel/bayesian/MutableBayesianAdjacencyNetwork.java
@@ -25,7 +25,6 @@ import java.util.Set;
 import com.syncleus.dann.graph.DirectedEdge;
 import com.syncleus.dann.graph.context.ContextGraphElement;
 import com.syncleus.dann.graph.Graph;
-import com.syncleus.dann.graphicalmodel.AbstractGraphicalModelAdjacencyGraph;
 import com.syncleus.dann.graphicalmodel.GraphicalModelNode;
 
 public class MutableBayesianAdjacencyNetwork<N extends GraphicalModelNode, E extends DirectedEdge<N>> extends AbstractBayesianAdjacencyNetwork<N, E> implements MutableBayesianNetwork<N, E>
diff --git a/src/main/resources/com.syncleus.dann.graphicalmodel.bayesian.xsd b/src/main/resources/com.syncleus.dann.graphicalmodel.bayesian.xsd
index 20716f5d..52eb9436 100644
--- a/src/main/resources/com.syncleus.dann.graphicalmodel.bayesian.xsd
+++ b/src/main/resources/com.syncleus.dann.graphicalmodel.bayesian.xsd
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <xsd:schema
         xmlns="http://127.0.0.1:8080/Aide/com/syncleus/dann/graphicalmodel/bayesian/xml"
+		xmlns:graphicalmodel="http://127.0.0.1:8080/Aide/com/syncleus/dann/graphicalmodel/xml"
         xmlns:dann="http://127.0.0.1:8080/Aide/com/syncleus/dann/xml"
         xmlns:graph="http://127.0.0.1:8080/Aide/com/syncleus/dann/graph/xml"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
@@ -19,6 +20,8 @@
                 schemaLocation="com.syncleus.dann.xml.xsd"/>
     <xsd:import namespace="http://127.0.0.1:8080/Aide/com/syncleus/dann/graph/xml"
                 schemaLocation="com.syncleus.dann.graph.xml.xsd"/>
+    <xsd:import namespace="http://127.0.0.1:8080/Aide/com/syncleus/dann/graphicalmodel/xml"
+                schemaLocation="com.syncleus.dann.graphicalmodel.xsd"/>
 
 
     <!-- Global annotations -->
@@ -51,7 +54,7 @@
                 <jaxb:class name="BayesianNetworkElementXml"/>
                 <annox:annotate target="class">
                     <!-- this allows for proper unmarshalling, can not be used on classes which already generate this-->
-                    <anno:XmlSeeAlso value="BayesianNodeXml"/>
+                    <anno:XmlSeeAlso value="com.syncleus.dann.graphicalmodel.xml.GraphicalModelNodeXml"/>
                 </annox:annotate>
             </xsd:appinfo>
         </xsd:annotation>
@@ -93,210 +96,9 @@
     <!-- MarkovRandomField Type, contains references to instanced objects -->
     <xsd:complexType name="BayesianNetwork">
         <xsd:complexContent>
-            <xsd:extension base="graph:Graph"/>
+            <xsd:extension base="graphicalmodel:GraphicalModel"/>
         </xsd:complexContent>
     </xsd:complexType>
 
 
-    <!-- Nodes -->
-
-    <!-- BayesianNode Type, Abstract representing types common to all Bayesian Nodes -->
-    <xsd:complexType name="BayesianNode" abstract="true">
-        <xsd:sequence>
-            <xsd:element name="learnedStates" maxOccurs="1">
-                <xsd:complexType>
-                    <xsd:sequence>
-                        <xsd:element name="learnedState" type="dann:Name" maxOccurs="unbounded">
-                            <xsd:annotation>
-                                <xsd:appinfo>
-                                    <jaxb:property name="states"/>
-                                </xsd:appinfo>
-                            </xsd:annotation>
-                        </xsd:element>
-                    </xsd:sequence>
-                </xsd:complexType>
-            </xsd:element>
-            <xsd:element name="State" type="dann:Name" minOccurs="1" maxOccurs="1"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- SimpleBayesianNode Element, contains instances -->
-    <xsd:element name="SimpleBayesianNode">
-        <xsd:annotation>
-            <xsd:appinfo>
-                <jaxb:class name="SimpleBayesianNodeElementXml"/>
-            </xsd:appinfo>
-        </xsd:annotation>
-        <xsd:complexType>
-            <xsd:complexContent>
-                <xsd:extension base="SimpleBayesianNode">
-                    <xsd:sequence>
-                        <xsd:element name="stateInstances" maxOccurs="1">
-                            <xsd:complexType>
-                                <xsd:sequence>
-                                    <xsd:element name="learnedState" type="dann:NamedValue" maxOccurs="unbounded">
-                                        <xsd:annotation>
-                                            <xsd:appinfo>
-                                                <jaxb:property name="states"/>
-                                            </xsd:appinfo>
-                                        </xsd:annotation>
-                                    </xsd:element>
-                                </xsd:sequence>
-                            </xsd:complexType>
-                        </xsd:element>
-                    </xsd:sequence>
-                </xsd:extension>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-    <!-- SimpleBayesianNode Type, contains references to instanced objects -->
-    <xsd:complexType name="SimpleBayesianNode">
-        <xsd:complexContent>
-            <xsd:extension base="BayesianNode">
-                <xsd:sequence>
-                    <xsd:element name="Evidence" type="EvidenceMap" minOccurs="1" maxOccurs="1"/>
-                </xsd:sequence>
-            </xsd:extension>
-        </xsd:complexContent>
-    </xsd:complexType>
-
-    <!-- EvidenceMap Element, contains instances -->
-    <xsd:element name="EvidenceMap">
-        <xsd:annotation>
-            <xsd:appinfo>
-                <jaxb:class name="EvidenceMapElementXml"/>
-            </xsd:appinfo>
-        </xsd:annotation>
-        <xsd:complexType>
-            <xsd:complexContent>
-                <xsd:extension base="EvidenceMap">
-                    <xsd:sequence>
-                        <xsd:element name="stateInstances" maxOccurs="1">
-                            <xsd:complexType>
-                                <xsd:sequence>
-                                    <xsd:element name="learnedState" type="dann:NamedValue" maxOccurs="unbounded">
-                                        <xsd:annotation>
-                                            <xsd:appinfo>
-                                                <jaxb:property name="states"/>
-                                            </xsd:appinfo>
-                                        </xsd:annotation>
-                                    </xsd:element>
-                                </xsd:sequence>
-                            </xsd:complexType>
-                        </xsd:element>
-                        <xsd:element name="nodeInstances" maxOccurs="1">
-                            <xsd:complexType>
-                                <xsd:sequence>
-                                    <xsd:element name="node" type="dann:NamedValue" maxOccurs="unbounded">
-                                        <xsd:annotation>
-                                            <xsd:appinfo>
-                                                <jaxb:property name="nodes"/>
-                                            </xsd:appinfo>
-                                        </xsd:annotation>
-                                    </xsd:element>
-                                </xsd:sequence>
-                            </xsd:complexType>
-                        </xsd:element>
-                    </xsd:sequence>
-                </xsd:extension>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-    <!-- EvidenceMap Type, contains references to instanced objects -->
-    <xsd:complexType name="EvidenceMap">
-        <xsd:sequence>
-            <xsd:element name="influencedEvidences" maxOccurs="1">
-                <xsd:complexType>
-                    <xsd:sequence>
-                        <xsd:element name="influencedEvidence" minOccurs="1" maxOccurs="unbounded">
-                            <xsd:annotation>
-                                <xsd:appinfo>
-                                    <jaxb:property name="influencedEvidences"/>
-                                </xsd:appinfo>
-                            </xsd:annotation>
-                            <xsd:complexType>
-                                <xsd:sequence>
-                                    <xsd:element name="Influences" minOccurs="1" maxOccurs="1">
-                                        <xsd:complexType>
-                                            <xsd:sequence>
-                                                <xsd:element name="influence" minOccurs="1" maxOccurs="unbounded">
-                                                    <xsd:annotation>
-                                                        <xsd:appinfo>
-                                                            <jaxb:property name="influences"/>
-                                                        </xsd:appinfo>
-                                                    </xsd:annotation>
-                                                    <xsd:complexType>
-                                                        <xsd:attribute name="node" use="required"/>
-                                                        <xsd:attribute name="state" use="required"/>
-                                                    </xsd:complexType>
-                                                </xsd:element>
-                                            </xsd:sequence>
-                                        </xsd:complexType>
-                                    </xsd:element>
-                                    <xsd:element name="StateEvidence" type="StateEvidence" minOccurs="1" maxOccurs="1"/>
-                                </xsd:sequence>
-                            </xsd:complexType>
-                        </xsd:element>
-                    </xsd:sequence>
-                </xsd:complexType>
-            </xsd:element>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- StateEvidence Element, contains instances -->
-    <xsd:element name="StateEvidence">
-        <xsd:annotation>
-            <xsd:appinfo>
-                <jaxb:class name="StateEvidenceElementXml"/>
-            </xsd:appinfo>
-        </xsd:annotation>
-        <xsd:complexType>
-            <xsd:complexContent>
-                <xsd:extension base="StateEvidence">
-                    <xsd:sequence>
-                        <xsd:element name="stateInstances" maxOccurs="1">
-                            <xsd:complexType>
-                                <xsd:sequence>
-                                    <xsd:element name="learnedState" type="dann:NamedValue" maxOccurs="unbounded">
-                                        <xsd:annotation>
-                                            <xsd:appinfo>
-                                                <jaxb:property name="states"/>
-                                            </xsd:appinfo>
-                                        </xsd:annotation>
-                                    </xsd:element>
-                                </xsd:sequence>
-                            </xsd:complexType>
-                        </xsd:element>
-                    </xsd:sequence>
-                </xsd:extension>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-    <!-- StateEvidence Type, contains references to instanced objects -->
-    <xsd:complexType name="StateEvidence">
-        <xsd:sequence>
-            <xsd:element name="States">
-                <xsd:complexType>
-                    <xsd:sequence>
-                        <xsd:element name="State" minOccurs="1" maxOccurs="unbounded">
-                            <xsd:annotation>
-                                <xsd:appinfo>
-                                    <jaxb:property name="states"/>
-                                </xsd:appinfo>
-                            </xsd:annotation>
-                            <xsd:complexType>
-                                <xsd:complexContent>
-                                    <xsd:extension base="dann:Name">
-                                        <xsd:attribute name="count" type="xsd:int" use="required"/>
-                                    </xsd:extension>
-                                </xsd:complexContent>
-                            </xsd:complexType>
-                        </xsd:element>
-                    </xsd:sequence>
-                </xsd:complexType>
-            </xsd:element>
-        </xsd:sequence>
-    </xsd:complexType>
-
-
 </xsd:schema>
\ No newline at end of file
diff --git a/src/main/resources/com.syncleus.dann.graphicalmodel.xsd b/src/main/resources/com.syncleus.dann.graphicalmodel.xsd
new file mode 100644
index 00000000..4f054467
--- /dev/null
+++ b/src/main/resources/com.syncleus.dann.graphicalmodel.xsd
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema
+        xmlns="http://127.0.0.1:8080/Aide/com/syncleus/dann/graphicalmodel/xml"
+        xmlns:dann="http://127.0.0.1:8080/Aide/com/syncleus/dann/xml"
+        xmlns:graph="http://127.0.0.1:8080/Aide/com/syncleus/dann/graph/xml"
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
+        xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
+        xmlns:annox="http://annox.dev.java.net"
+        xmlns:anno="http://annox.dev.java.net/javax.xml.bind.annotation"
+        targetNamespace="http://127.0.0.1:8080/Aide/com/syncleus/dann/graphicalmodel/xml"
+        jaxb:version="2.0"
+        jaxb:extensionBindingPrefixes="xjc annox"
+        attributeFormDefault="unqualified"
+        elementFormDefault="unqualified">
+
+
+    <xsd:import namespace="http://127.0.0.1:8080/Aide/com/syncleus/dann/xml"
+                schemaLocation="com.syncleus.dann.xml.xsd"/>
+    <xsd:import namespace="http://127.0.0.1:8080/Aide/com/syncleus/dann/graph/xml"
+                schemaLocation="com.syncleus.dann.graph.xml.xsd"/>
+
+
+    <!-- Global annotations -->
+    <xsd:annotation>
+        <xsd:appinfo>
+            <jaxb:globalBindings
+                    fixedAttributeAsConstantProperty="true"
+                    collectionType="java.util.ArrayList"
+                    typesafeEnumBase="xsd:NCName"
+                    choiceContentProperty="true"
+                    typesafeEnumMemberName="generateError"
+                    enableFailFastCheck="false"
+                    generateIsSetMethod="true"/>
+            <jaxb:schemaBindings>
+                <jaxb:package name="com.syncleus.dann.graphicalmodel.xml"/>
+                <jaxb:nameXmlTransform>
+                    <jaxb:typeName suffix="Xml"/>
+                </jaxb:nameXmlTransform>
+            </jaxb:schemaBindings>
+        </xsd:appinfo>
+    </xsd:annotation>
+
+
+    <!-- Graphs -->
+
+    <!-- MarkovRandomField Element, contains instances -->
+    <xsd:element name="GraphicalModel">
+        <xsd:annotation>
+            <xsd:appinfo>
+                <jaxb:class name="GraphicalModelElementXml"/>
+                <annox:annotate target="class">
+                    <!-- this allows for proper unmarshalling, can not be used on classes which already generate this-->
+                    <anno:XmlSeeAlso value="GraphicalModelNodeXml"/>
+                </annox:annotate>
+            </xsd:appinfo>
+        </xsd:annotation>
+        <xsd:complexType>
+            <xsd:complexContent>
+                <xsd:extension base="GraphicalModel">
+                    <xsd:sequence>
+                        <xsd:element name="nodeInstances" maxOccurs="1">
+                            <xsd:complexType>
+                                <xsd:sequence>
+                                    <xsd:element name="node" type="dann:NamedValue" maxOccurs="unbounded">
+                                        <xsd:annotation>
+                                            <xsd:appinfo>
+                                                <jaxb:property name="nodes"/>
+                                            </xsd:appinfo>
+                                        </xsd:annotation>
+                                    </xsd:element>
+                                </xsd:sequence>
+                            </xsd:complexType>
+                        </xsd:element>
+                        <xsd:element name="stateInstances" maxOccurs="1">
+                            <xsd:complexType>
+                                <xsd:sequence>
+                                    <xsd:element name="learnedState" type="dann:NamedValue" maxOccurs="unbounded">
+                                        <xsd:annotation>
+                                            <xsd:appinfo>
+                                                <jaxb:property name="states"/>
+                                            </xsd:appinfo>
+                                        </xsd:annotation>
+                                    </xsd:element>
+                                </xsd:sequence>
+                            </xsd:complexType>
+                        </xsd:element>
+                    </xsd:sequence>
+                </xsd:extension>
+            </xsd:complexContent>
+        </xsd:complexType>
+    </xsd:element>
+    <!-- MarkovRandomField Type, contains references to instanced objects -->
+    <xsd:complexType name="GraphicalModel">
+        <xsd:complexContent>
+            <xsd:extension base="graph:Graph"/>
+        </xsd:complexContent>
+    </xsd:complexType>
+
+
+    <!-- Nodes -->
+
+    <!-- BayesianNode Type, Abstract representing types common to all Bayesian Nodes -->
+    <xsd:complexType name="GraphicalModelNode" abstract="true">
+        <xsd:sequence>
+            <xsd:element name="learnedStates" maxOccurs="1">
+                <xsd:complexType>
+                    <xsd:sequence>
+                        <xsd:element name="learnedState" type="dann:Name" maxOccurs="unbounded">
+                            <xsd:annotation>
+                                <xsd:appinfo>
+                                    <jaxb:property name="states"/>
+                                </xsd:appinfo>
+                            </xsd:annotation>
+                        </xsd:element>
+                    </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+            <xsd:element name="State" type="dann:Name" minOccurs="1" maxOccurs="1"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- SimpleBayesianNode Element, contains instances -->
+    <xsd:element name="SimpleGraphicalModelNode">
+        <xsd:annotation>
+            <xsd:appinfo>
+                <jaxb:class name="SimpleGraphicalModelNodeElementXml"/>
+            </xsd:appinfo>
+        </xsd:annotation>
+        <xsd:complexType>
+            <xsd:complexContent>
+                <xsd:extension base="SimpleGraphicalModelNode">
+                    <xsd:sequence>
+                        <xsd:element name="stateInstances" maxOccurs="1">
+                            <xsd:complexType>
+                                <xsd:sequence>
+                                    <xsd:element name="learnedState" type="dann:NamedValue" maxOccurs="unbounded">
+                                        <xsd:annotation>
+                                            <xsd:appinfo>
+                                                <jaxb:property name="states"/>
+                                            </xsd:appinfo>
+                                        </xsd:annotation>
+                                    </xsd:element>
+                                </xsd:sequence>
+                            </xsd:complexType>
+                        </xsd:element>
+                    </xsd:sequence>
+                </xsd:extension>
+            </xsd:complexContent>
+        </xsd:complexType>
+    </xsd:element>
+    <!-- SimpleBayesianNode Type, contains references to instanced objects -->
+    <xsd:complexType name="SimpleGraphicalModelNode">
+        <xsd:complexContent>
+            <xsd:extension base="GraphicalModelNode">
+                <xsd:sequence>
+                    <xsd:element name="Evidence" type="EvidenceMap" minOccurs="1" maxOccurs="1"/>
+                </xsd:sequence>
+            </xsd:extension>
+        </xsd:complexContent>
+    </xsd:complexType>
+
+    <!-- EvidenceMap Element, contains instances -->
+    <xsd:element name="EvidenceMap">
+        <xsd:annotation>
+            <xsd:appinfo>
+                <jaxb:class name="EvidenceMapElementXml"/>
+            </xsd:appinfo>
+        </xsd:annotation>
+        <xsd:complexType>
+            <xsd:complexContent>
+                <xsd:extension base="EvidenceMap">
+                    <xsd:sequence>
+                        <xsd:element name="stateInstances" maxOccurs="1">
+                            <xsd:complexType>
+                                <xsd:sequence>
+                                    <xsd:element name="learnedState" type="dann:NamedValue" maxOccurs="unbounded">
+                                        <xsd:annotation>
+                                            <xsd:appinfo>
+                                                <jaxb:property name="states"/>
+                                            </xsd:appinfo>
+                                        </xsd:annotation>
+                                    </xsd:element>
+                                </xsd:sequence>
+                            </xsd:complexType>
+                        </xsd:element>
+                        <xsd:element name="nodeInstances" maxOccurs="1">
+                            <xsd:complexType>
+                                <xsd:sequence>
+                                    <xsd:element name="node" type="dann:NamedValue" maxOccurs="unbounded">
+                                        <xsd:annotation>
+                                            <xsd:appinfo>
+                                                <jaxb:property name="nodes"/>
+                                            </xsd:appinfo>
+                                        </xsd:annotation>
+                                    </xsd:element>
+                                </xsd:sequence>
+                            </xsd:complexType>
+                        </xsd:element>
+                    </xsd:sequence>
+                </xsd:extension>
+            </xsd:complexContent>
+        </xsd:complexType>
+    </xsd:element>
+    <!-- EvidenceMap Type, contains references to instanced objects -->
+    <xsd:complexType name="EvidenceMap">
+        <xsd:sequence>
+            <xsd:element name="influencedEvidences" maxOccurs="1">
+                <xsd:complexType>
+                    <xsd:sequence>
+                        <xsd:element name="influencedEvidence" minOccurs="1" maxOccurs="unbounded">
+                            <xsd:annotation>
+                                <xsd:appinfo>
+                                    <jaxb:property name="influencedEvidences"/>
+                                </xsd:appinfo>
+                            </xsd:annotation>
+                            <xsd:complexType>
+                                <xsd:sequence>
+                                    <xsd:element name="Influences" minOccurs="1" maxOccurs="1">
+                                        <xsd:complexType>
+                                            <xsd:sequence>
+                                                <xsd:element name="influence" minOccurs="1" maxOccurs="unbounded">
+                                                    <xsd:annotation>
+                                                        <xsd:appinfo>
+                                                            <jaxb:property name="influences"/>
+                                                        </xsd:appinfo>
+                                                    </xsd:annotation>
+                                                    <xsd:complexType>
+                                                        <xsd:attribute name="node" use="required"/>
+                                                        <xsd:attribute name="state" use="required"/>
+                                                    </xsd:complexType>
+                                                </xsd:element>
+                                            </xsd:sequence>
+                                        </xsd:complexType>
+                                    </xsd:element>
+                                    <xsd:element name="StateEvidence" type="StateEvidence" minOccurs="1" maxOccurs="1"/>
+                                </xsd:sequence>
+                            </xsd:complexType>
+                        </xsd:element>
+                    </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- StateEvidence Element, contains instances -->
+    <xsd:element name="StateEvidence">
+        <xsd:annotation>
+            <xsd:appinfo>
+                <jaxb:class name="StateEvidenceElementXml"/>
+            </xsd:appinfo>
+        </xsd:annotation>
+        <xsd:complexType>
+            <xsd:complexContent>
+                <xsd:extension base="StateEvidence">
+                    <xsd:sequence>
+                        <xsd:element name="stateInstances" maxOccurs="1">
+                            <xsd:complexType>
+                                <xsd:sequence>
+                                    <xsd:element name="learnedState" type="dann:NamedValue" maxOccurs="unbounded">
+                                        <xsd:annotation>
+                                            <xsd:appinfo>
+                                                <jaxb:property name="states"/>
+                                            </xsd:appinfo>
+                                        </xsd:annotation>
+                                    </xsd:element>
+                                </xsd:sequence>
+                            </xsd:complexType>
+                        </xsd:element>
+                    </xsd:sequence>
+                </xsd:extension>
+            </xsd:complexContent>
+        </xsd:complexType>
+    </xsd:element>
+    <!-- StateEvidence Type, contains references to instanced objects -->
+    <xsd:complexType name="StateEvidence">
+        <xsd:sequence>
+            <xsd:element name="States">
+                <xsd:complexType>
+                    <xsd:sequence>
+                        <xsd:element name="State" minOccurs="1" maxOccurs="unbounded">
+                            <xsd:annotation>
+                                <xsd:appinfo>
+                                    <jaxb:property name="states"/>
+                                </xsd:appinfo>
+                            </xsd:annotation>
+                            <xsd:complexType>
+                                <xsd:complexContent>
+                                    <xsd:extension base="dann:Name">
+                                        <xsd:attribute name="count" type="xsd:int" use="required"/>
+                                    </xsd:extension>
+                                </xsd:complexContent>
+                            </xsd:complexType>
+                        </xsd:element>
+                    </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+        </xsd:sequence>
+    </xsd:complexType>
+
+
+</xsd:schema>
\ No newline at end of file
diff --git a/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java b/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java
index 76b8714c..81b37756 100644
--- a/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java
+++ b/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java
@@ -26,7 +26,7 @@ import java.util.*;
 import com.syncleus.dann.graph.ImmutableUndirectedEdge;
 import com.syncleus.dann.graphicalmodel.GraphicalModelNode;
 import com.syncleus.dann.graphicalmodel.SimpleGraphicalModelNode;
-import com.syncleus.dann.graphicalmodel.bayesian.xml.BayesianNetworkXml;
+import com.syncleus.dann.graphicalmodel.xml.GraphicalModelXml;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -72,7 +72,7 @@ public class TestSicknessRandomMarkovField
 		testOverall();
 
 		//mashall it
-		JAXBContext context = JAXBContext.newInstance(BayesianNetworkXml.class, TestSicknessRandomMarkovField.FeverState.class, TestSicknessRandomMarkovField.AgeState.class, TestSicknessRandomMarkovField.BooleanState.class, TestSicknessRandomMarkovField.SeasonState.class);
+		JAXBContext context = JAXBContext.newInstance(GraphicalModelXml.class, TestSicknessRandomMarkovField.FeverState.class, TestSicknessRandomMarkovField.AgeState.class, TestSicknessRandomMarkovField.BooleanState.class, TestSicknessRandomMarkovField.SeasonState.class);
 		Marshaller marshal = context.createMarshaller();
 
 		StringWriter writer = new StringWriter();
@@ -80,7 +80,7 @@ public class TestSicknessRandomMarkovField
 
 		//unmarshall it
 		StringReader reader = new StringReader(writer.toString());
-		BayesianNetworkXml xml = JAXB.unmarshal(reader, BayesianNetworkXml.class);
+		GraphicalModelXml xml = JAXB.unmarshal(reader, GraphicalModelXml.class);
 
 		Assert.assertTrue("could not unmarshal object!", xml != null);
 		Assert.assertTrue("Wrong number of edges after unmarshaling: " + xml.getEdges().getEdges().size(), xml.getEdges().getEdges().size() == 14);
-- 
GitLab