//------------------------------------------------------------------------------------------------ private void ParseDiscreteEvidentialMapping(XmlNode node) { //Create the ReferenceList: XmlNode frame = node.SelectSingleNode("subframe"); if (frame == null) { throw new InvalidBeliefModelException("The xml model element \"evidential-mapping\" should contain an element called \"subframe\" to define the frame of discernment!"); } string frameName = frame.Attributes["name"].InnerText; StringReferenceList references = new StringReferenceList(); try { foreach (XmlNode n in frame.ChildNodes) { references.Add(n.InnerText); } } catch (IncompatibleReferenceListException) { throw new InvalidBeliefModelException("The xml model element file \"evidential-mapping\" has a state defined multiple times in the frame node!"); } DiscreteEvidentialMapping mapping = new DiscreteEvidentialMapping(frameName, references); //Load evidential vectors: XmlNodeList vectors = node.SelectNodes("mapping-vector"); if (vectors == null) { throw new InvalidBeliefModelException("An evidential mapping should contain mapping vectors!"); } foreach (XmlNode n in vectors) { XmlNode fr = n.SelectSingleNode("from"); DiscreteMappingVector mp = new DiscreteMappingVector(new DiscreteElement(references, fr.Attributes["element"].InnerText.Split(' '))); XmlNodeList to = n.SelectNodes("to"); foreach (XmlNode t in to) { mp.AddPoint(new DiscreteMappingPoint(new DiscreteElement(_refList, t.Attributes["element"].InnerText.Split(' ')), Convert.ToDouble(t.InnerText))); } mapping.AddVector(mp); } _mappings.Add(mapping); }