public static void GenerateTripletFlowNt2(string fileName, long limit, sema2012m.Engine engine, sema2012m.LogLine turlog)
        {
            StreamReader sr = new StreamReader(fileName);
            // Начало транзакции ввода
            engine.InitAdapterBuffers();

            //engine.IncludeXElement(xelement);
            XElement xelement = null;
            string current_subject = null;

            long cnt = 0;
            string line = null;
            bool skip = false;
            while ((line = sr.ReadLine()) != null)
            {
                if (cnt > limit) break;     cnt++;
                if (cnt % 1000000 == 0) turlog("Загружено: " + cnt + " линий.");
                if (string.IsNullOrWhiteSpace(line) || line[0] == '@') continue;
                string subject;
                int position = GetEntityOrLiteral(line, 0, out subject);
                if (subject == null) continue;
                string predicate;
                position = GetEntityOrLiteral(line, position, out predicate);
                if (predicate == null) continue;
                string obj;
                bool isObjectProperty = line[position] == '\"' ? false : true;
                position = GetEntityOrLiteral(line, position, out obj);
                if (obj == null) continue;

                if (xelement == null || subject != current_subject)
                {
                    if (!skip && xelement != null) engine.IncludeXElement(xelement);
                    xelement = new XElement(sema2012m.ONames.rdfdescription, new XAttribute(sema2012m.ONames.rdfabout, subject));
                    current_subject = subject;
                }

                if (xelement.Elements().Count() > 100) continue;
                if (isObjectProperty)
                {
                    xelement.Add(new XElement(sema2012m.ONames.GetXName(predicate), new XAttribute(sema2012m.ONames.rdfresource, obj)));
                }
                else // DatatypeProperty
                {
                    xelement.Add(new XElement(sema2012m.ONames.GetXName(predicate), obj)); // пока без языкового спецификатора
                }

            }
            if (!skip && xelement != null) engine.IncludeXElement(xelement);
            // Конец транзакции ввода
            engine.FlushAdapterBuffers();
        }