private OlsplPattern CreateClone(OlsplPattern pattern) { var newPattern = new OlsplPattern(); newPattern.Comment = pattern.Comment; newPattern.Rule = pattern.Rule; newPattern.Entity1 = new RdfEntity { EntityIndex = pattern.Entity1.EntityIndex, Label = pattern.Entity1.Label, //Type = pattern.Entity1.Type, TypeTerm = pattern.Entity1.TypeTerm, }; if (pattern.TotalTriplet != null) { newPattern.Entity2 = new RdfEntity { EntityIndex = pattern.Entity2.EntityIndex, Label = pattern.Entity2.Label, //Type = pattern.Entity2.Type, TypeTerm = pattern.Entity2.TypeTerm, }; newPattern.TotalTriplet = new Triplet { RdfSubject = pattern.TotalTriplet.RdfSubject, RdfPredicate = pattern.TotalTriplet.RdfPredicate, RdfObject = pattern.TotalTriplet.RdfObject, }; } return(newPattern); }
private OlsplPattern GetFilledPattern(Fact fact, OlsplPattern pattern) { var newPattern = CreateClone(pattern); var label1 = GetLabelFromFact(fact, newPattern.Entity1.TypeTerm); if (label1 == null) { return(null); } newPattern.Entity1.Label = label1; if (newPattern.Entity2 != null) { var label2 = GetLabelFromFact(fact, newPattern.Entity2.TypeTerm); if (label2 == null) { return(null); } newPattern.Entity2.Label = label2; } return(newPattern); }
private List <OlsplPattern> GetOlsplPatternsViaClassLabels(List <OwlClass> classes) { var patterns = new List <OlsplPattern>(); foreach (var owlClass in classes) { foreach (var label in owlClass.Labels) { var classUri = owlClass.ObjectClassURI; var classLocalName = classUri.GetLocalName(); var rule1 = $"{classLocalName} - {label}"; var entity = new RdfEntity { //Type = classUri.ToString(), TypeTerm = classLocalName, Label = Var1, EntityIndex = 1, }; var comment = "Generated via class labels"; var pattern = new OlsplPattern { Rule = rule1, Entity1 = entity, Comment = comment, }; patterns.Add(pattern); } } return(patterns); }
public List <string> CreateInvividualsForSimplePattern(OlsplPattern pattern) { var result = new List <string>(); var individualBlock = $" <owl:NamedIndividual rdf:about=\"{pattern.Entity1.Name}\">\n" + $" <rdf:type rdf:resource = \"{pattern.Entity1.Type}\" />\n" + $" <rdfs:label>{pattern.Entity1.Label}</rdfs:label>\n" + " </owl:NamedIndividual>\n\n"; result.Add(individualBlock); return(result); }
private OlsplPattern GetOlsplPatternFromBlock(List <string> block) { if (block.Count != 4 && block.Count != 7) { var message = $"Неверный формат OLSPL-паттерна.{Environment.NewLine}" + $"Заголовок OLSPL-паттерна должен содержать комментарий и правило. Тело паттерна должно содержать 2 или 5 триплетов"; throw new FormatException(message); } var comment = block[0]; var rule = block[1]; var entity1Type = GetEntityType(block[2], block[3]); var entity1Term = entity1Type.GetLocalName(); var pattern = new OlsplPattern { Comment = comment, Rule = rule, Entity1 = new RdfEntity { EntityIndex = 1, Label = Var1, //Type = entity1Type, TypeTerm = entity1Term, }, }; if (block.Count == 7) { var entity2Type = GetEntityType(block[4], block[5]); var entity2Term = entity2Type.GetLocalName(); pattern.Entity2 = new RdfEntity { EntityIndex = 2, Label = Var2, //Type = entity2Type, TypeTerm = entity2Term, }; var tripletElems = block[6].Split(' '); pattern.TotalTriplet = new Triplet { RdfSubject = $"{Constants.OwntologyUri}#{Constants.NewEntity}1", RdfPredicate = tripletElems[1], RdfObject = $"{Constants.OwntologyUri}#{Constants.NewEntity}2", }; } return(pattern); }
public List <string> CreateInvividualsForComplexPattern(OlsplPattern pattern) { var result = new List <string>(); var individualBlock1 = $" <owl:NamedIndividual rdf:about=\"{pattern.TotalTriplet.RdfSubject}\">\n" + $" <rdf:type rdf:resource = \"{pattern.Entity1.Type}\" />\n" + $" <rdfs:label>{pattern.Entity1.Label}</rdfs:label>\n" + $" <{pattern.TotalTriplet.RdfPredicate} rdf:resource = \"{pattern.TotalTriplet.RdfObject}\"/>\n" + " </owl:NamedIndividual>\n\n"; var individualBlock2 = $" <owl:NamedIndividual rdf:about=\"{pattern.TotalTriplet.RdfObject}\">\n" + $" <rdf:type rdf:resource = \"{pattern.Entity2.Type}\" />\n" + $" <rdfs:label>{pattern.Entity2.Label}</rdfs:label>\n" + " </owl:NamedIndividual>\n\n"; result.Add(individualBlock1); result.Add(individualBlock2); return(result); }