コード例 #1
0
            public ReaderWorker(
                GraphMLDeserializer <TVertex, TEdge, TGraph> serializer,
                XmlReader reader,
                TGraph visitedGraph,
                IdentifiableVertexFactory <TVertex> vertexFactory,
                IdentifiableEdgeFactory <TVertex, TEdge> edgeFactory
                )
            {
                Contract.Requires(serializer != null);
                Contract.Requires(reader != null);
                Contract.Requires(visitedGraph != null);
                Contract.Requires(vertexFactory != null);
                Contract.Requires(edgeFactory != null);

                this.serializer    = serializer;
                this.reader        = reader;
                this.visitedGraph  = visitedGraph;
                this.vertexFactory = vertexFactory;
                this.edgeFactory   = edgeFactory;
            }
コード例 #2
0
        public void Deserialize(
            XmlReader reader,
            TGraph visitedGraph,
            IdentifiableVertexFactory <TVertex> vertexFactory,
            IdentifiableEdgeFactory <TVertex, TEdge> edgeFactory)
        {
            Contract.Requires(reader != null);
            Contract.Requires(visitedGraph != null);
            Contract.Requires(vertexFactory != null);
            Contract.Requires(edgeFactory != null);

            var worker = new ReaderWorker(
                this,
                reader,
                visitedGraph,
                vertexFactory,
                edgeFactory);

            worker.Deserialize();
        }
コード例 #3
0
        public static void DeserializeFromGraphML <TVertex, TEdge, TGraph>(
            this TGraph graph, TextReader reader,
            IdentifiableVertexFactory <TVertex> vertexFactory,
            IdentifiableEdgeFactory <TVertex, TEdge> edgeFactory)
            where TEdge : IEdge <TVertex>
            where TGraph : IMutableVertexAndEdgeListGraph <TVertex, TEdge>
        {
            Contract.Requires(graph != null);
            Contract.Requires(reader != null);
            Contract.Requires(vertexFactory != null);
            Contract.Requires(edgeFactory != null);

            var settings = new XmlReaderSettings();

            settings.DtdProcessing   = DtdProcessing.Ignore;
            settings.ValidationFlags = XmlSchemaValidationFlags.None;
            settings.XmlResolver     = new GraphMLXmlResolver();

            using (var xreader = XmlReader.Create(reader, settings))
                DeserializeFromGraphML <TVertex, TEdge, TGraph>(graph, xreader, vertexFactory, edgeFactory);
        }
コード例 #4
0
        public static void DeserializeFromGraphML <TVertex, TEdge, TGraph>(
#if !NET20
            this
#endif
            TGraph graph,
            XmlReader reader,
            IdentifiableVertexFactory <TVertex> vertexFactory,
            IdentifiableEdgeFactory <TVertex, TEdge> edgeFactory
            )
            where TEdge : IEdge <TVertex>
            where TGraph : IMutableVertexAndEdgeListGraph <TVertex, TEdge>
        {
            Contract.Requires(graph != null);
            Contract.Requires(reader != null);
            Contract.Requires(vertexFactory != null);
            Contract.Requires(edgeFactory != null);

            var serializer = new GraphMLDeserializer <TVertex, TEdge, TGraph>();

            serializer.Deserialize(reader, graph, vertexFactory, edgeFactory);
        }
コード例 #5
0
        /// <summary>
        /// Deserializes from the given <paramref name="reader"/> (GraphML graph) into the given <paramref name="graph"/>.
        /// </summary>
        /// <typeparam name="TVertex">Vertex type.</typeparam>
        /// <typeparam name="TEdge">Edge type.</typeparam>
        /// <typeparam name="TGraph">Graph type.</typeparam>
        /// <param name="graph">Graph instance to fill.</param>
        /// <param name="reader">Reader stream.</param>
        /// <param name="vertexFactory">Vertex factory method.</param>
        /// <param name="edgeFactory">Edge factory method.</param>
        public static void DeserializeFromGraphML <TVertex, TEdge, TGraph>(
            [NotNull] this TGraph graph,
            [NotNull] TextReader reader,
            [NotNull] IdentifiableVertexFactory <TVertex> vertexFactory,
            [NotNull] IdentifiableEdgeFactory <TVertex, TEdge> edgeFactory)
            where TEdge : IEdge <TVertex>
            where TGraph : IMutableVertexAndEdgeListGraph <TVertex, TEdge>
        {
            if (reader is null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            var settings = new XmlReaderSettings
            {
                ValidationFlags = XmlSchemaValidationFlags.None,
                XmlResolver     = new GraphMLXmlResolver()
            };

            using (XmlReader xmlReader = XmlReader.Create(reader, settings))
                DeserializeFromGraphML(graph, xmlReader, vertexFactory, edgeFactory);
        }
コード例 #6
0
        public static void DeserializeAndValidateFromGraphML <TVertex, TEdge, TGraph>(
#if !NET20
            this
#endif
            TGraph graph,
            TextReader reader,
            IdentifiableVertexFactory <TVertex> vertexFactory,
            IdentifiableEdgeFactory <TVertex, TEdge> edgeFactory
            )
            where TEdge : IEdge <TVertex>
            where TGraph : IMutableVertexAndEdgeListGraph <TVertex, TEdge>
        {
            Contract.Requires(graph != null);
            Contract.Requires(reader != null);
            Contract.Requires(vertexFactory != null);
            Contract.Requires(edgeFactory != null);

            var serializer = new GraphMLDeserializer <TVertex, TEdge, TGraph>();
            var settings   = new XmlReaderSettings();

            // add graphxml schema
            settings.ValidationType = ValidationType.Schema;
            settings.XmlResolver    = new GraphMLXmlResolver();
            AddGraphMLSchema <TVertex, TEdge, TGraph>(settings);

            try
            {
                settings.ValidationEventHandler += ValidationEventHandler;

                // reader and validating
                using (var xreader = XmlReader.Create(reader, settings))
                    serializer.Deserialize(xreader, graph, vertexFactory, edgeFactory);
            }
            finally
            {
                settings.ValidationEventHandler -= ValidationEventHandler;
            }
        }
コード例 #7
0
        /// <summary>
        /// Deserializes from the given <paramref name="reader"/> (GraphML graph) into the given <paramref name="graph"/>
        /// and checks if content is valid.
        /// </summary>
        /// <typeparam name="TVertex">Vertex type.</typeparam>
        /// <typeparam name="TEdge">Edge type.</typeparam>
        /// <typeparam name="TGraph">Graph type.</typeparam>
        /// <param name="graph">Graph instance to fill.</param>
        /// <param name="reader">Reader stream.</param>
        /// <param name="vertexFactory">Vertex factory method.</param>
        /// <param name="edgeFactory">Edge factory method.</param>
        public static void DeserializeAndValidateFromGraphML <TVertex, TEdge, TGraph>(
            [NotNull] this TGraph graph,
            [NotNull] TextReader reader,
            [NotNull] IdentifiableVertexFactory <TVertex> vertexFactory,
            [NotNull] IdentifiableEdgeFactory <TVertex, TEdge> edgeFactory)
            where TEdge : IEdge <TVertex>
            where TGraph : IMutableVertexAndEdgeListGraph <TVertex, TEdge>
        {
            if (reader is null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            var serializer = new GraphMLDeserializer <TVertex, TEdge, TGraph>();

            var settings = new XmlReaderSettings
            {
                ValidationType = ValidationType.Schema,
                XmlResolver    = new GraphMLXmlResolver(),
                DtdProcessing  = DtdProcessing.Ignore
            };

            // Add GraphML schema
            AddGraphMLSchema(settings);

            try
            {
                settings.ValidationEventHandler += ValidationEventHandler;

                // Read and validate
                using (XmlReader xmlReader = XmlReader.Create(reader, settings))
                    serializer.Deserialize(xmlReader, graph, vertexFactory, edgeFactory);
            }
            finally
            {
                settings.ValidationEventHandler -= ValidationEventHandler;
            }
        }