Exemple #1
0
        public void LoadTurtle(string filepath)
        {
            DateTime tt0 = DateTime.Now;

            Load(filepath);
            Console.WriteLine("Load ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now;


            PrepareArrays();
            Console.WriteLine("PrepareArrays ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now;

            // Упорядочивание otriples по s-p-o
            SPOComparer spo_compare = new SPOComparer();

            otriples.Root.SortByKey <SubjPredObjInt>(rec => new SubjPredObjInt(rec), spo_compare);
            Console.WriteLine("otriples.Root.Sort ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now;

            SPComparer sp_compare = new SPComparer();

            // Упорядочивание otriples_op по o-p
            otriples_op.Root.SortByKey <SubjPredInt>(rec =>
            {
                object[] r = (object[])rec;
                return(new SubjPredInt()
                {
                    pred = (int)r[1], subj = (int)r[2]
                });
            }, sp_compare);
            Console.WriteLine("otriples_op Sort ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now;

            // Упорядочивание dtriples_sp по s-p
            dtriples_sp.Root.SortByKey(rec =>
            {
                object[] r = (object[])rec;
                return(new SubjPredInt()
                {
                    pred = (int)r[1], subj = (int)r[0]
                });
            }, sp_compare);
            Console.WriteLine("dtriples_sp.Root.Sort ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now;


            Scale.WriteScale(otriples);
            Console.WriteLine("CreateScale ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now;

            // Создание "широкой" таблицы
            ewt.Load();
            Console.WriteLine("ewt.Load() ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now;

            // Вычисление кеша. Это можно не делать, все равно - кеш в оперативной памяти
            ewtHash.Load();
            Console.WriteLine("ewtHash.Load() ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now;
        }
        public void LoadTurtle(string filepath)
        {
            otriples.Clear();
            otriples.Fill(new object[0]);
            dtriples.Clear();
            dtriples.Fill(new object[0]);

            // Только для специальных целей:
            TurtleInt.sarr = new List <string>();

            int i = 0;

            //Entity e = new Entity();
            foreach (var triple in TurtleInt.LoadGraph(filepath))
            {
                if (i % 10000 == 0)
                {
                    Console.Write("{0} ", i / 10000);
                }
                i++;
                if (triple is OTripleInt)
                {
                    var tr = (OTripleInt)triple;
                    otriples.Root.AppendElement(new object[]
                    {
                        tr.subject,
                        tr.predicate,
                        tr.obj
                    });
                }
                else
                {
                    var      tr  = (DTripleInt)triple;
                    Literal  lit = tr.data;
                    object[] da;
                    switch (lit.vid)
                    {
                    case LiteralVidEnumeration.integer:
                        da = new object[] { 1, lit.Value };
                        break;

                    case LiteralVidEnumeration.date:
                        da = new object[] { 3, lit.Value };
                        break;

                    case LiteralVidEnumeration.boolean:
                        da = new object[] { 4, lit.Value };
                        break;

                    case LiteralVidEnumeration.text:
                    {
                        Text t = (Text)lit.Value;
                        da = new object[] { 2, new object[] { t.Value, t.Lang } };
                    }
                    break;

                    case LiteralVidEnumeration.typedObject:
                    {
                        TypedObject t = (TypedObject)lit.Value;
                        da = new object[] { 5, new object[] { t.Value, t.Type } };
                    }
                    break;

                    default:
                        da = new object[] { 0, null };
                        break;
                    }
                    dtriples.Root.AppendElement(new object[]
                    {
                        tr.subject,
                        tr.predicate,
                        da
                    });
                }
            }
            Console.WriteLine();
            otriples.Flush();
            dtriples.Flush();

            // Только для специальных целей:
            bool specialpurposes = false;

            if (specialpurposes)
            {
                int ii = 0;
                foreach (string s in TurtleInt.sarr)
                {
                    if (ii % 20 == 0)
                    {
                        Console.WriteLine("\"{0}\", ", s);
                    }
                    ii++;
                }
                Console.WriteLine("sarr.Count() = {0}", TurtleInt.sarr.Count());
            }


            SPOComparer spo_compare = new SPOComparer();
            SPComparer  sp_compare  = new SPComparer();

            // Создание и упорядочивание дополнительных структур
            otriples_op.Clear();
            otriples_op.Fill(new object[0]);
            foreach (object v in otriples.Root.ElementValues())
            {
                otriples_op.Root.AppendElement(v);
            }
            otriples_op.Flush();
            dtriples_sp.Clear();
            dtriples_sp.Fill(new object[0]);
            foreach (PaEntry entry in dtriples.Root.Elements())
            {
                int s = (int)entry.Field(0).Get();
                int p = (int)entry.Field(1).Get();
                dtriples_sp.Root.AppendElement(new object[] { s, p, entry.offset });
            }
            dtriples_sp.Flush();
            // Упорядочивание otriples по s-p-o
            otriples.Root.SortByKey <SubjPredObjInt>(rec => new SubjPredObjInt(rec), spo_compare);
            // Упорядочивание otriples_op по o-p
            otriples_op.Root.SortByKey <SubjPredInt>(rec =>
            {
                object[] r = (object[])rec;
                return(new SubjPredInt()
                {
                    pred = (int)r[1], subj = (int)r[2]
                });
            }, sp_compare);
            // Упорядочивание dtriples_sp по s-p
            dtriples_sp.Root.SortByKey(rec =>
            {
                object[] r = (object[])rec;
                return(new SubjPredInt()
                {
                    pred = (int)r[1], subj = (int)r[0]
                });
            }, sp_compare);

            // Индексирование
            if (spo_o_index == null)
            {
                OpenCreateIndexes();
            }
            //spo_o_index.Load(spo_compare);
            //sp_d_index.Load(sp_compare);
            //op_o_index.Load(sp_compare);
            if (filescale)
            {
                // Создание шкалы (Надо переделать)
                CreateScale();
                //ShowScale();
                oscale.Clear();
                oscale.Fill(new object[0]);
                foreach (int v in scale.Values())
                {
                    oscale.Root.AppendElement(v);
                }
                oscale.Flush();
                CalculateRange(); // Наверное, range считается в CreateScale()
            }

            ewt.Load();
            ewtHash.Load();



            //getable.ConstructGroupedEntities(new DiapLinksScanner[] {
            //    new DiapLinksScanner(otriples, 0),
            //    new DiapLinksScanner(otriples_op, 2),
            //    new DiapLinksScanner(dtriples_sp, 0)});
        }