Пример #1
0
        /// <summary>
        /// Returns the Feed Content information for a content object
        /// </summary>
        /// <param name="de">Parent DE</param>
        /// <param name="co">Content Object</param>
        /// <returns>Feed Content Interface</returns>
        public static IFeedContent FeedContent(DEv1_0 de, ContentObject co)
        {
            IFeedContent myContent  = null;
            XElement     xmlContent = co.XMLContent.EmbeddedXMLContent[0];

            //TODO: Fix this hack caused by fix to gml pos element name
            string contentString = xmlContent.ToString();

            contentString = contentString.Replace("gml:Pos", "gml:pos");
            var document = XDocument.Parse(contentString);

            xmlContent = document.Root;
            string deHash = DEUtilities.ComputeDELookupID(de).ToString();

            //TODO: Update FeedContent method to support all supported standards
            //content is a SensorThings Observation
            //if (xmlContent.Name.LocalName.Equals("Observation", StringComparison.InvariantCultureIgnoreCase) &&
            //  xmlContent.Name.NamespaceName.Equals(EDXLSharp.MQTTSensorThingsLib.Constants.STApiNamespace, StringComparison.InvariantCultureIgnoreCase) )
            //{
            //  XmlSerializer serializer = new XmlSerializer(typeof(Observation));
            //  Observation observation = (Observation)serializer.Deserialize(xmlContent.CreateReader());
            //  myContent = new STContent(observation, deHash);
            //}
            //content could be CoT or NIEM EMLC, need to check the namespace to know for sure
            if (xmlContent.Name.LocalName.Equals("event", StringComparison.InvariantCultureIgnoreCase))
            {
                //content could be CoT or NIEM EMLC, need to check the namespace to know for sure
                //if (xmlContent.Name.NamespaceName.Equals(@"urn:cot:mitre:org", StringComparison.InvariantCultureIgnoreCase))
                //{
                //  string cotString = xmlContent.ToString();
                //  //remove namespace or CoTLibrary blows up
                //  //brute force method
                //  int index, end, len;
                //  index = cotString.IndexOf("xmlns=");
                //  while (index != -1)
                //  {
                //    end = cotString.IndexOf('"', index);
                //    end++;
                //    end = cotString.IndexOf('"', end);
                //    end++;
                //    len = end - index;
                //    cotString = cotString.Remove(index, len);
                //    index = cotString.IndexOf("xmlns=");
                //  }
                //  CoT_Library.CotEvent anEvent = new CoT_Library.CotEvent(cotString);

                //  CoTContent mCC = new CoTContent(anEvent, deHash);

                //  myContent = mCC;
                //}
                if (xmlContent.Name.NamespaceName.Equals(@"http://release.niem.gov/niem/domains/emergencyManagement/3.1/emevent/0.1/emlc/", StringComparison.InvariantCultureIgnoreCase))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(Event));
                    Event         emlc       = (Event)serializer.Deserialize(xmlContent.CreateReader());
                    myContent = new EMLCContent(emlc, deHash);
                }
            }

            return(myContent);
        }
Пример #2
0
        /// <summary>
        /// Will load the referenced schema files and use them to validate the given NIEM xml message.  Returns null
        /// if an error occurs.
        /// </summary>
        /// <param name="xmldata">NIEM message as xml</param>
        /// <param name="errorString">The error list</param>
        /// <returns>True if the message is valid, false otherwise</returns>
        /// <exception cref="IOException">Their was a problem loading the schema files</exception>
        /// <exception cref="FormatException">The schema files could not be parsed</exception>
        public static bool ValidateNiemSchema(string xmldata, out List <string> errorString)
        {
            /*
             * NOTE: When flattening the schema files XMLSpy it will add an "xs:appinfo" element
             * to some of the files.  If this element contains a child element "term:" then the
             * appinfo element must be removed.  Otherwise, visual studio cannot
             * load the schema file properly.
             */

            #region Initialize Readers and Error list

            errorString = null;
            XmlReader         vr      = null;
            XmlReaderSettings xs      = new XmlReaderSettings();
            XmlSchemaSet      coll    = new XmlSchemaSet();
            StringReader      xsdsr   = null;
            StringReader      xmlsr   = new StringReader(xmldata);
            XmlReader         xsdread = null;
            #endregion

            try
            {
                #region Load Schema Files
                string currentFile = ""; // For Error logging, holds schema file being added

                try
                {
                    currentFile = "temporalObjects";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.temporalObjects);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.TEMPORALOBJECTS, xsdread);


                    currentFile = "xs";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.xs);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.XS, xsdread);


                    currentFile = "emlc";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.emlc);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.EMLC, xsdread);


                    currentFile = "fips_10_4";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.fips_10_4);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.FIPS_10_4, xsdread);


                    currentFile = "census_uscounty";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.census_uscounty);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.CENSUS_USCOUNTY, xsdread);


                    currentFile = "mo";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.mo);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.MO, xsdread);


                    currentFile = "em_base";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.em_base);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.EM_BASE, xsdread);


                    currentFile = "fema_rtlt1";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.fema_rtlt1);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.FEMA_RTLT1, xsdread);


                    currentFile = "maid";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.maid);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.MAID, xsdread);


                    currentFile = "emcl";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.emcl);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.EMCL, xsdread);


                    currentFile = "unece_rec20_misc";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.unece_rec20_misc);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.UNECE_REC20_MISC, xsdread);


                    currentFile = "geospatial";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.geospatial);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.GEOSPATIAL, xsdread);


                    currentFile = "fips_5_2";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.fips_5_2);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.FIPS_5_2, xsdread);


                    currentFile = "spatialReferencing";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.spatialReferencing);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.SPATIALREFERENCING, xsdread);


                    currentFile = "core_misc";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.core_misc);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.CORE_MISC, xsdread);


                    currentFile = "niem_core";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.niem_core);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.NIEM_CORE, xsdread);


                    currentFile = "geometry";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.geometry);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.GEOMETRY, xsdread);


                    currentFile = "ols";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.ols);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.OLS, xsdread);


                    currentFile = "structures";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.structures);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.STRUCTURES, xsdread);


                    currentFile = "basicTypes";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.basicTypes);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.BASICTYPES, xsdread);


                    currentFile = "fema_rtlt";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.fema_rtlt);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.FEMA_RTLT, xsdread);


                    currentFile = "xlinks";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.xlinks);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.XLINKS, xsdread);


                    currentFile = "referenceSystems";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.referenceSystems);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.REFERENCESYSTEMS, xsdread);


                    currentFile = "dataQuality";
                    xsdsr       = new StringReader(Fresh.Global.Properties.Resources.dataQuality);
                    xmlsr       = new StringReader(xmldata);
                    xsdread     = XmlReader.Create(xsdsr);
                    coll.Add(ValidationConstants.DATAQUALITY, xsdread);

                    xs.Schemas.Add(coll);
                    currentFile = "";
                }
                catch (Exception Ex)
                {
                    throw new FormatException("There was an error parsing the schema files", Ex);
                    currentFile = "";
                }

                #endregion

                // Will Hold errors found
                List <string> errors = null;

                xs.ValidationType          = ValidationType.Schema;
                xs.ValidationFlags        |= XmlSchemaValidationFlags.ProcessInlineSchema;
                xs.ValidationFlags        |= XmlSchemaValidationFlags.ReportValidationWarnings;
                xs.ValidationEventHandler += new ValidationEventHandler((object sender, ValidationEventArgs args) =>
                {
                    if (args.Severity == XmlSeverityType.Error)
                    {
                        if (errors == null)
                        {
                            errors = new List <string>();
                        }

                        errors.Add(args.Message);
                    }
                });

                vr = XmlReader.Create(xmlsr, xs);
                while (vr.Read())
                {
                }

                // Setting the return value
                errorString = errors;
            }
            catch (IOException Ex)
            {
                DEUtilities.LogMessage(string.Format("[{0}] {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, Ex.Message), DEUtilities.LogLevel.Error, Ex);
                throw;
            }
            catch (FormatException Ex)
            {
                DEUtilities.LogMessage(string.Format("[{0}] {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, Ex.Message), DEUtilities.LogLevel.Error, Ex);
                throw;
            }
            catch (Exception Ex)
            {
                DEUtilities.LogMessage(string.Format("[{0}] {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, Ex.Message), DEUtilities.LogLevel.Error, Ex);

                throw new Exception(string.Format("[{0}] {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, Ex.Message), Ex);
            }
            finally
            {
                // Closing
                if (vr != null)
                {
                    vr.Close();
                }
                if (xmlsr != null)
                {
                    xmlsr.Close();
                }
                if (xsdread != null)
                {
                    xsdread.Close();
                }
                if (xsdsr != null)
                {
                    xsdsr.Close();
                }
            }

            return(errorString == null);
        }