示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#5
0
        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);
        }