Esempio n. 1
0
        protected static bool TryParseRsdResource(XPathNavigator resource, out XPathNavigator navigator, out Version version)
        {
            bool resourceConformsToFormat = false;
            XmlNamespaceManager manager   = null;

            Guard.ArgumentNotNull(resource, "resource");

            manager = new XmlNamespaceManager(resource.NameTable);
            manager.AddNamespace("rsd", "http://archipelago.phrasewise.com/rsd");

            version = null;
            if ((navigator = resource.SelectSingleNode("rsd", manager)) != null || (navigator = resource.SelectSingleNode("rsd:rsd", manager)) != null)
            {
                version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version");
                Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml);

                if (namespaces.ContainsValue("http://archipelago.phrasewise.com/rsd"))
                {
                    resourceConformsToFormat = true;
                    if (version == null)
                    {
                        version = new Version(1, 0);
                    }
                }
                else if (String.Compare(navigator.Name, "rsd", StringComparison.OrdinalIgnoreCase) == 0 && version != null)
                {
                    //  Most web log software actually fails to provide the default XML namespace per RSD spec, so this is a hack/compromise
                    resourceConformsToFormat = true;
                }
            }

            return(resourceConformsToFormat);
        }
Esempio n. 2
0
        protected static bool TryParseOpenSearchDescriptionResource(XPathNavigator resource, out XPathNavigator navigator, out Version version)
        {
            bool resourceConformsToFormat = false;
            XmlNamespaceManager manager   = null;

            Guard.ArgumentNotNull(resource, "resource");

            manager = new XmlNamespaceManager(resource.NameTable);
            manager.AddNamespace("search", "http://a9.com/-/spec/opensearch/1.1/");

            version = null;
            if ((navigator = resource.SelectSingleNode("OpenSearchDescription", manager)) != null || (navigator = resource.SelectSingleNode("search:OpenSearchDescription", manager)) != null)
            {
                version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version");
                Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml);

                if (namespaces.ContainsValue("http://a9.com/-/spec/opensearch/1.1/"))
                {
                    resourceConformsToFormat = true;
                    if (version == null)
                    {
                        version = new Version(1, 1);
                    }
                }
            }

            return(resourceConformsToFormat);
        }
Esempio n. 3
0
        protected static bool TryParseMicroSummaryGeneratorResource(XPathNavigator resource, out XPathNavigator navigator, out Version version)
        {
            bool resourceConformsToFormat = false;
            XmlNamespaceManager manager   = null;

            Guard.ArgumentNotNull(resource, "resource");

            manager = new XmlNamespaceManager(resource.NameTable);
            manager.AddNamespace("micro", "http://www.mozilla.org/microsummaries/0.1");

            version = null;
            if ((navigator = resource.SelectSingleNode("generator", manager)) != null || (navigator = resource.SelectSingleNode("micro:generator", manager)) != null)
            {
                version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version");
                Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml);

                if (namespaces.ContainsValue("http://www.mozilla.org/microsummaries/0.1"))
                {
                    resourceConformsToFormat = true;
                    if (version == null)
                    {
                        version = new Version(0, 1);
                    }
                }
            }

            return(resourceConformsToFormat);
        }
Esempio n. 4
0
        protected static bool TryParseBlogMLResource(XPathNavigator resource, out XPathNavigator navigator, out Version version)
        {
            bool resourceConformsToFormat = false;
            XmlNamespaceManager manager   = null;

            Guard.ArgumentNotNull(resource, "resource");

            manager = new XmlNamespaceManager(resource.NameTable);
            manager.AddNamespace("blogML", "http://www.blogml.com/2006/09/BlogML");

            version = null;
            if ((navigator = resource.SelectSingleNode("blog", manager)) != null || (navigator = resource.SelectSingleNode("blogML:blog", manager)) != null)
            {
                version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version");
                Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml);

                if (namespaces.ContainsValue("http://www.blogml.com/2006/09/BlogML"))
                {
                    resourceConformsToFormat = true;
                    if (version == null)
                    {
                        version = new Version(2, 0);
                    }
                }
            }

            return(resourceConformsToFormat);
        }
Esempio n. 5
0
        protected static bool TryParseAtomPublishingServiceResource(XPathNavigator resource, out XPathNavigator navigator, out Version version)
        {
            bool resourceConformsToFormat = false;
            XmlNamespaceManager manager   = null;

            Guard.ArgumentNotNull(resource, "resource");

            manager = new XmlNamespaceManager(resource.NameTable);
            manager.AddNamespace("atom", "http://www.w3.org/2005/Atom");
            manager.AddNamespace("atom03", "http://purl.org/atom/ns#");
            manager.AddNamespace("app", "http://www.w3.org/2007/app");

            version = null;
            if ((navigator = resource.SelectSingleNode("service", manager)) != null || (navigator = resource.SelectSingleNode("app:service", manager)) != null)
            {
                version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version");
                Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml);

                if (namespaces.ContainsValue("http://www.w3.org/2007/app"))
                {
                    resourceConformsToFormat = true;
                    if (version == null)
                    {
                        version = new Version(1, 0);
                    }
                }
            }

            return(resourceConformsToFormat);
        }
Esempio n. 6
0
        protected static bool TryParseRssResource(XPathNavigator resource, out XPathNavigator navigator, out Version version)
        {
            bool resourceConformsToFormat = false;
            XmlNamespaceManager manager   = null;

            Guard.ArgumentNotNull(resource, "resource");

            manager = new XmlNamespaceManager(resource.NameTable);
            manager.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
            manager.AddNamespace("rss09", "http://my.netscape.com/rdf/simple/0.9/");
            manager.AddNamespace("rss10", "http://purl.org/rss/1.0/");

            version = null;
            if ((navigator = resource.SelectSingleNode("rss", manager)) != null)
            {
                version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version");
                Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml);

                resourceConformsToFormat = true;
                if (version == null)
                {
                    version = new Version(2, 0);
                }
            }
            else if ((navigator = resource.SelectSingleNode("rdf:RDF", manager)) != null)
            {
                version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version");
                Dictionary <string, string> namespaces = (Dictionary <string, string>)navigator.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml);

                if (namespaces.ContainsValue("http://purl.org/rss/1.0/"))
                {
                    resourceConformsToFormat = true;
                    version = new Version(1, 0);
                }
                else if (namespaces.ContainsValue("http://my.netscape.com/rdf/simple/0.9/"))
                {
                    resourceConformsToFormat = true;
                    version = new Version(0, 9);
                }
            }

            return(resourceConformsToFormat);
        }
Esempio n. 7
0
        protected static bool TryParseOpmlResource(XPathNavigator resource, out XPathNavigator navigator, out Version version)
        {
            bool resourceConformsToFormat = false;

            Guard.ArgumentNotNull(resource, "resource");

            version = null;
            if ((navigator = resource.SelectSingleNode("opml")) != null)
            {
                version = SyndicationResourceMetadata.GetVersionFromAttribute(navigator, "version");

                resourceConformsToFormat = true;
                if (version == null)
                {
                    version = new Version(2, 0);
                }
            }

            return(resourceConformsToFormat);
        }
Esempio n. 8
0
        /// <summary>
        /// Extracts the content format, version, and XML namespaces for a syndication resource from the supplied <see cref="XPathNavigator"/>.
        /// </summary>
        /// <param name="resource">The <see cref="XPathNavigator"/> to extract the syndication resource meta-data from.</param>
        /// <exception cref="ArgumentNullException">The <paramref name="resource"/> is a null reference (Nothing in Visual Basic).</exception>
        private void Load(XPathNavigator resource)
        {
            XPathNavigator navigator = null;
            Version        version   = null;

            Guard.ArgumentNotNull(resource, "resource");

            Dictionary <string, string> namespaces = (Dictionary <string, string>)resource.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml);

            foreach (string prefix in namespaces.Keys)
            {
                resourceNamespaces.Add(prefix, namespaces[prefix]);
            }

            resourceVersion = SyndicationResourceMetadata.GetVersionFromAttribute(resource, "version");

            if (SyndicationResourceMetadata.TryParseApmlResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.Apml;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseAtomResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.Atom;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseAtomPublishingCategoriesResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.AtomCategoryDocument;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseAtomPublishingServiceResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.AtomServiceDocument;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseBlogMLResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.BlogML;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseMicroSummaryGeneratorResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.MicroSummaryGenerator;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseNewsMLResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.NewsML;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseOpenSearchDescriptionResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.OpenSearchDescription;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseOpmlResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.Opml;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseRsdResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.Rsd;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else if (SyndicationResourceMetadata.TryParseRssResource(resource, out navigator, out version))
            {
                resourceFormat   = SyndicationContentFormat.Rss;
                resourceRootNode = navigator;
                resourceVersion  = version;
            }
            else
            {
                resourceFormat   = SyndicationContentFormat.None;
                resourceRootNode = null;
                resourceVersion  = null;
            }
        }