public void WriteXml(System.Xml.XmlWriter writer)
        {
            writer.WriteAttributeString("xmlVersion", xmlVersion.ToString());

            writer.WriteStartElement("Info");
            writer.WriteElementString("ID", ID);
            writer.WriteElementString("Version", Version);
            writer.WriteElementString("Label", Label);
            writer.WriteElementString("Name", Classname);
            writer.WriteElementString("Author", Author);
            writer.WriteElementString("Description", Description);
            writer.WriteEndElement();

            writer.WriteStartElement("Input");
            foreach (IOItemDefinition item in IOSpecDefinition.Input.Values)
            {
                item.WriteXml(writer);
            }
            writer.WriteEndElement();

            writer.WriteStartElement("Output");
            foreach (IOItemDefinition item in IOSpecDefinition.Output.Values)
            {
                item.WriteXml(writer);
            }
            writer.WriteEndElement();

            ConfigurationWrapperDefinition.WriteXml(writer);

            writer.WriteStartElement("ComponentGraph");
            TraceLab.Core.Experiments.ExperimentSerializer.SerializeExperiment(writer, ComponentGraph);
            writer.WriteEndElement();
        }
        public void ReadXml(System.Xml.XmlReader reader)
        {
            int version = int.Parse(reader.GetAttribute("xmlVersion"));

            if (version != xmlVersion && version != 1)
            {
                throw new InvalidOperationException("Version file not recognized");
            }

            XPathDocument  doc = new XPathDocument(reader);
            XPathNavigator nav = doc.CreateNavigator();

            XPathNavigator iter = ReadComponentInfo(nav);

            if (version == xmlVersion)
            {
                ReadCurrentVersionIODefinitions(nav);
            }
            else if (version == 1)
            {
                ReadOldIODefinitions(nav);
            }

            iter = nav.SelectSingleNode("/CompositeComponentMetadataDefinition/ConfigDefinition");
            ConfigurationWrapperDefinition.ReadXml(iter.ReadSubtree());

            //get experiment xml -> reading this xml is done in PostProcessReadXml
            iter            = nav.SelectSingleNode("/CompositeComponentMetadataDefinition/ComponentGraph");
            m_experimentXml = iter.InnerXml;

            //read tags
            Tags = new ComponentTags(ID);

            XPathNodeIterator tagsIterator = nav.Select("/CompositeComponentMetadataDefinition/Tags//Tag");

            while (tagsIterator.MoveNext())
            {
                string tagValue = tagsIterator.Current.Value;
                Tags.SetTag(tagValue, false);
            }
        }