Пример #1
0
        public static void GenerateCSLTable(OntologyInputData inputData,
                                            Dictionary <string, string> ontology_id,
                                            List <string> meta,
                                            Dictionary <string, List <string> > metas,
                                            List <string> node,
                                            string[] nums)
        {
            var ucOntoList = new Dictionary <string, List <string> >();

            foreach (var ss in ProgectData.GroupsSs)
            {
                if (ucOntoList.ContainsKey(ss.Group))
                {
                    ucOntoList[ss.Group].Add(ss.UC_Id);
                }
                else
                {
                    var list = new List <string>();
                    list.Add(ss.UC_Id);
                    ucOntoList.Add(ss.Group, list);
                }
            }
            foreach (var pr in ProgectData.GroupsPr)
            {
                if (ucOntoList.ContainsKey(pr.Group))
                {
                    ucOntoList[pr.Group].Add(pr.UC_Id);
                }
                else
                {
                    var list = new List <string>();
                    list.Add(pr.UC_Id);
                    ucOntoList.Add(pr.Group, list);
                }
            }

            ProgectData.UniclassGroupDescription.Clear();
            int idGroup = 1;
            var csl_id  = new Dictionary <string, int>();

            UniClassGroup_generated = new BindingList <UniClassGroup>();
            foreach (var key in inputData.ontology_UC.Keys)
            {
                var ss_key = new HashSet <string>();
                var pr_key = new HashSet <string>();
                if (key.Contains("csl_floor_str"))
                {
                }
                foreach (var value in inputData.ontology_UC[key])
                {
                    ss_key.Add(value.Ss);
                    pr_key.Add(value.Pr);
                }
                foreach (var ss_item in ss_key)
                {
                    string ss      = ontology_id[ss_item];
                    var    pr_list = new HashSet <string>();
                    foreach (var pr_item in pr_key)
                    {
                        string pr = ontology_id[pr_item];
                        foreach (var x in ucOntoList[pr])
                        {
                            pr_list.Add(x);
                        }
                    }
                    var prop = new List <string>();
                    if (inputData.prop.ContainsKey(key))
                    {
                        prop = inputData.prop[key];
                    }
                    CreateNewGroup(idGroup,
                                   UniClassGroup_generated,
                                   ucOntoList[ss],
                                   pr_list.ToList(),
                                   prop,
                                   key.Split(new[] { '|' })[1]
                                   );
                    if (!ProgectData.UniclassGroupDescription.ContainsKey(idGroup))
                    {
                        ProgectData.UniclassGroupDescription.Add(idGroup, key.Split(new[] { '|' })[1]);
                    }
                    if (!csl_id.ContainsKey(key))
                    {
                        csl_id.Add(key, idGroup);
                    }
                }
                idGroup++;


                //string ss = ontology_id[inputData.ontology_UC[key].Ss];
                //string pr = ontology_id[inputData.ontology_UC[key].Pr];
                //var prop = new List<string>();
                //if (inputData.prop.ContainsKey(key))
                //    prop = inputData.prop[key];
                //CreateNewGroup(idGroup,
                //    UniClassGroup_generated,
                //    ucOntoList[ss],
                //    ucOntoList[pr],
                //    prop,
                //    key.Split(new[] { '|' })[1]
                //    );
                //csl_id.Add(key, idGroup);
            }
            GenerateLimitationTable(meta, inputData, csl_id, metas, node, nums);
        }
Пример #2
0
        private static OntologyInputData CreateInputData(List <string> obj, List <string> relation, List <string> meta, List <string> node, Dictionary <string, List <string> > nodes)
        {
            var result = new OntologyInputData();

            result.ontology_UC = new Dictionary <string, List <UniPairOntology> >();
            result.relation    = new Dictionary <string, List <RelationFromOntology> >();
            result.prop        = new Dictionary <string, List <string> >();
            var prop = new Dictionary <string, List <string> >();

            var listSubProperty = new List <string> {
                "has_object_bearing_function",
                "has_location"
            };

            foreach (var value in obj)
            {
                var list_ss = new List <string>();
                list_ss.AddRange(relation.Where(i => i.Contains(value + " has_csl_object")));
                var list_pr = new List <string>();
                list_pr.AddRange(relation.Where(i => i.Contains(value + " has_csl_material")));
                foreach (var item_ss in list_ss)
                {
                    string ss = item_ss.Split(new[] { '|' })[2];
                    foreach (var item_pr in list_pr)
                    {
                        string pr       = item_pr.Split(new[] { '|' })[2];
                        var    uniclass = new UniPairOntology()
                        {
                            Ss = ss,
                            Pr = pr
                        };
                        if (result.ontology_UC.ContainsKey(value))
                        {
                            result.ontology_UC[value].Add(uniclass);
                        }
                        else
                        {
                            var list = new List <UniPairOntology>();
                            list.Add(uniclass);
                            result.ontology_UC.Add(value, list);
                        }
                    }
                }

                //var uniclass = new UniPairOntology() {
                //    Ss = relation
                //    .Where(i => i.Contains(value + " has_csl_object"))
                //    .First()
                //    .Split(new[] { '|' })[2],

                //    Pr = relation
                //    .Where(i => i.Contains(value + " has_csl_material"))
                //    .First()
                //    .Split(new[] { '|' })[2]
                //};


                var list_prop = new List <string>();
                list_prop.AddRange(relation.Where(x => x.Contains(value) && listSubProperty.Contains(x.Split(new[] { ' ' })[1])));
                if (list_prop.Count != 0)
                {
                    prop.Add(value, list_prop);
                    result.prop.Add(value, list_prop);
                }

                var listrel = new List <string>();
                listrel.AddRange(relation.Where(x =>
                                                x.Contains(value) &&
                                                !x.Contains("subclass_of") &&
                                                !x.Contains("has_meta_connection") &&
                                                !x.Contains("has_csl_object") &&
                                                !x.Contains("has_csl_material") &&
                                                !listSubProperty.Contains(x.Split(new[] { ' ' })[1])));

                if (listrel.Count != 0)
                {
                    var result_list = new List <RelationFromOntology>();
                    foreach (var item in listrel)
                    {
                        string source     = item.Split(new[] { ' ' })[2];
                        var    checkMNode = CheackIsNode(source, node);
                        if (checkMNode != "")
                        {
                            var listSource = nodes[checkMNode];
                            if (listSource.Count != 0)
                            {
                                foreach (var x in listSource)
                                {
                                    var newRelation = new RelationFromOntology();
                                    newRelation.target = value;
                                    if (list_prop.Count != 0)
                                    {
                                        newRelation.property = new List <string>();
                                        newRelation.property.AddRange(list_prop);
                                    }
                                    newRelation.source   = x;
                                    newRelation.relation = item.Split(new[] { ' ' })[1];
                                    result_list.Add(newRelation);
                                }
                            }
                        }
                        else
                        {
                            var newRelation = new RelationFromOntology();
                            newRelation.target = value;
                            if (list_prop.Count != 0)
                            {
                                newRelation.property = new List <string>();
                                newRelation.property.AddRange(list_prop);
                            }
                            newRelation.source   = source;
                            newRelation.relation = item.Split(new[] { ' ' })[1];
                            result_list.Add(newRelation);
                        }
                    }
                    result.relation.Add(value, result_list);
                }



                //if(meta.Contains(value))
                //    result.meta_description.Add(value, value.Split(new[] { '|' })[1]);
                //else {
                //    foreach (var item in meta) {
                //        var list = new List<string>();
                //        list.AddRange(GetAllLeafSubClasses(item));
                //        if (list.Contains(value)) {
                //            result.meta_description.Add(value, item.Split(new[] { '|' })[1]);
                //            break;
                //        }
                //    }
                //}
            }
            return(result);
        }
Пример #3
0
        public static void GenerateLimitationTable(List <string> meta,
                                                   OntologyInputData inputData,
                                                   Dictionary <string, int> csl_id,
                                                   Dictionary <string, List <string> > metas,
                                                   List <string> node,
                                                   string[] nums)
        {
            CrossSystemsLimitation_generated = new BindingList <CrossSystemsLimitation>();
            int id = 1;

            foreach (var key in meta)
            {
                try {
                    foreach (var target in metas[key])
                    {
                        if (inputData.relation.ContainsKey(target))
                        {
                            foreach (var relation in inputData.relation[target])
                            {
                                var newLimitation = new CrossSystemsLimitation();
                                newLimitation.IDLimitation = GetFunction(relation.relation);
                                newLimitation.N            = id;
                                newLimitation.GroupTarget  = csl_id[target].ToString();
                                string source = CheackIsNode(relation.source, node);
                                newLimitation.GroupSource      = csl_id[source].ToString();
                                newLimitation.ConnectionWeight = "2";
                                newLimitation.Description      = target.Split(new[] { '|' })[1] + "--->" + relation.source.Split(new[] { '|' })[1];
                                newLimitation.Category         = key.Split(new[] { '|' })[1];
                                newLimitation.StrSource        = GetStrSource(source, metas);
                                CrossSystemsLimitation_generated.Add(newLimitation);
                                id++;
                            }
                        }
                    }
                    var list_A1 = new List <string>();
                    if (key.Contains("csl_substructure") || key.Contains("csl_structural_frame"))
                    {
                        list_A1.AddRange(metas[key]);
                        foreach (var target in list_A1)
                        {
                            if (!target.Contains("arch"))
                            {
                                foreach (var source in list_A1)
                                {
                                    if (!source.Contains("arch") && !source.Contains("csl_balks"))
                                    {
                                        var newLimitation = new CrossSystemsLimitation();
                                        newLimitation.IDLimitation = "A1";
                                        newLimitation.N            = id;
                                        newLimitation.GroupTarget  = csl_id[target].ToString();
                                        string s = CheackIsNode(source, node);
                                        newLimitation.GroupSource      = csl_id[s].ToString();
                                        newLimitation.ConnectionWeight = "2";
                                        newLimitation.Description      = target.Split(new[] { '|' })[1] + "--->" + s.Split(new[] { '|' })[1];
                                        newLimitation.Category         = key.Split(new[] { '|' })[1];
                                        newLimitation.StrSource        = GetStrSource(source, metas);
                                        CrossSystemsLimitation_generated.Add(newLimitation);
                                        id++;
                                    }
                                }
                            }
                            else if (target.Contains("arch") && !target.Contains("concrete"))
                            {
                                foreach (var source in list_A1)
                                {
                                    if (source.Contains("arch") && !source.Contains("concrete") && !source.Contains("csl_balks"))
                                    {
                                        var newLimitation = new CrossSystemsLimitation();
                                        newLimitation.IDLimitation = "A1";
                                        newLimitation.N            = id;
                                        newLimitation.GroupTarget  = csl_id[target].ToString();
                                        string s = CheackIsNode(source, node);
                                        newLimitation.GroupSource      = csl_id[s].ToString();
                                        newLimitation.ConnectionWeight = "2";
                                        newLimitation.Description      = target.Split(new[] { '|' })[1] + "--->" + s.Split(new[] { '|' })[1];
                                        newLimitation.Category         = key.Split(new[] { '|' })[1];
                                        newLimitation.StrSource        = GetStrSource(source, metas);
                                        CrossSystemsLimitation_generated.Add(newLimitation);
                                        id++;
                                    }
                                }
                            }
                        }
                    }
                }
                catch {
                }
            }
            GenerateMetaTable(metas, csl_id, nums);
            //GenerAbbreviatedTable(meta, inputData, metas, node, csl_id);
        }