コード例 #1
0
        public XDocument Serialize(IGraphSerializable graph, bool useShortTags = false)
        {
            IXmlElementName nameProvider = new XmlStandardElementNames();

            if (useShortTags)
            {
                nameProvider = new XmlShortElementNames();
            }

            XDocument result = serializer.Serialize(graph, useShortTags);

            if (result != null)
            {
                XElement extensionNode = new XElement(extNames.ExtensionListElement);
                // pour chaque extensions on rempli le noeud extension
                foreach (IXmlExtension ext in extensions)
                {
                    extensionNode.Add(GenerateExtensionElement(ext));
                }

                result.Root.Element(nameProvider.TypeListElement).AddAfterSelf(extensionNode);
            }

            return(result);
        }
コード例 #2
0
        private void BuildTables(IGraphSerializable g)
        {
            int typeAlias = 0;
            int nodeId    = 0;

            foreach (IVertex v in g)
            {
                if (!typeAliasTable.ContainsKey(v.TypeIdentity))
                {
                    typeAliasTable.Add(v.TypeIdentity, typeAlias++);
                }
                if (!nodeIdTable.ContainsKey(v))
                {
                    nodeIdTable.Add(v, nodeId++);
                }
                foreach (IEdge e in v.Links)
                {
                    if (!typeAliasTable.ContainsKey(e.TypeIdentity))
                    {
                        typeAliasTable.Add(e.TypeIdentity, typeAlias++);
                    }
                }
            }
            if (g is Graph)
            {
                Graph graph = g as Graph;
                foreach (GraphObjectTypeInfo typeInfo in graph.RegisteredTypes)
                {
                    if (!typeAliasTable.ContainsKey(typeInfo))
                    {
                        typeAliasTable.Add(typeInfo, typeAlias++);
                    }
                }
            }
        }
コード例 #3
0
        private void BuildTables(IGraphSerializable g)
        {
            int nodeId = 0;

            foreach (IVertex v in g)
            {
                if (!nodeIdTable.ContainsKey(v))
                {
                    nodeIdTable.Add(v, nodeId++);
                }
            }
        }
コード例 #4
0
        private XElement GenerateAnnotationsElement(IGraphSerializable g)
        {
            XElement result = new XElement(nameProvider.AnnotationListElement);

            foreach (Tuple <Guid, Annotation> t in g.GetAllAnnotations())
            {
                result.Add(new XElement(nameProvider.AnnotationElement,
                                        new XAttribute(nameProvider.AnnotationNamespaceAttribute, t.Item2.Namespace ?? ""),
                                        new XAttribute(nameProvider.AnnotationKeyAttribute, t.Item2.Key),
                                        new XAttribute(nameProvider.AnnotationValueAttribute, t.Item2.Value),
                                        new XElement(nameProvider.AnnotationTargetElement,
                                                     new XAttribute(nameProvider.AnnotationTargetTypeAttribute, nameProvider.AnnotationTargetAttributeValueExternal),
                                                     new XAttribute(nameProvider.AnnotationTargetIdAttribute, t.Item1))));
            }

            return(result);
        }
コード例 #5
0
        public XDocument Serialize(IGraphSerializable g, bool useShortTags = false)
        {
            BuildTables(g);
            XDocument doc  = new XDocument();
            XElement  root = new XElement(XmlHeaderNames.RootElement,
                                          new XElement(XmlHeaderNames.HeaderElement,
                                                       new XAttribute(XmlHeaderNames.VersionAttribute, "1.0"),
                                                       new XAttribute(XmlHeaderNames.UseShortTagsAttribute,
                                                                      useShortTags ? XmlHeaderNames.StringBooleanValueTrue : XmlHeaderNames.StringBooleanValueFalse)));

            doc.Add(root);
            if (useShortTags)
            {
                nameProvider = new XmlShortElementNames();
            }

            root.Add(GenerateTypesElement());
            root.Add(GenerateNodesElement());
            root.Add(GenerateEdgesElement());
            root.Add(GenerateAnnotationsElement(g));

            return(doc);
        }