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); }
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); }
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); }