Beispiel #1
0
        public RDFGraph(string path)
        {
            Path = path;
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            PType tp_triple = new PTypeRecord(
                new NamedType("subj", new PType(PTypeEnumeration.integer)),
                new NamedType("pred", new PType(PTypeEnumeration.integer)),
                new NamedType("obj", ObjectVariantsPolarType.ObjectVariantPolarType));

            table    = new TableView(path + "triples", tp_triple);
            ps_index = new IndexCascadingDynamic <int>(path + "ps_index",
                                                       (IBearingTableImmutable)table,
                                                       ob => (int)((object[])((object[])ob)[1])[1],
                                                       ob => (int)((object[])((object[])ob)[1])[0],
                                                       i => i);
            po_index = new IndexCascadingDynamic <ObjectVariants>(path + "po_index",
                                                                  (IBearingTableImmutable)table,
                                                                  ob => (int)((object[])((object[])ob)[1])[1],
                                                                  ob => ((object[])((object[])ob)[1])[2].ToOVariant(NodeGenerator),
                                                                  ov => ov.GetHashCode());
            textObjectIndex =
                new TextObjectIndex((ulong)(table.TableCell.IsEmpty ? 10 : table.TableCell.Root.Count() / 3 + 1),
                                    this);
            OnAddPortion += po_index.index_arr.FillPortion;
            OnAddPortion += ps_index.index_arr.FillPortion;
            OnAddPortion += textObjectIndex.FillPortion;
            NodeGenerator = NodeGeneratorInt.Create(new NameTableDictionaryRam(path)); //new NametableLinearBuffered(path));
            _ng           = NodeGenerator as NodeGeneratorInt;
            ((NameTableDictionaryRam)_ng.coding_table).Expand((int)10000 / 3 + 1, Enumerable.Repeat(SpecialTypesClass.RdfType, 1));

            Start();
        }
        public FirstIntGraph(string path)
        {
            PType tp_tabelement = new PTypeRecord(
                new NamedType("subject", new PType(PTypeEnumeration.integer)),
                new NamedType("predicate", new PType(PTypeEnumeration.integer)),
                new NamedType("obj", ObjectVariantsPolarType.ObjectVariantPolarType));
            Func <object, SPO_Troyka> spokeyproducer = v =>
            {
                object[] va = (object[])((object[])v)[1];
                return(new SPO_Troyka((int)va[0], (int)va[1], va[2].ToOVariant(ng.coding_table.GetStringByCode)));    //.ToComparable()
            };
            Func <object, PO_Pair> pokeyproducer = v =>
            {
                object[] va = (object[])((object[])v)[1];
                return(new PO_Pair((int)va[1], va[2].ToOVariant(ng.coding_table.GetStringByCode)));
            };
            Func <object, PO_Pair> oskeyproducer = v =>
            {
                object[] va = (object[])((object[])v)[1];
                return(new PO_Pair((int)va[0], va[2].ToOVariant(ng.coding_table.GetStringByCode)));
            };
            Func <object, SP_Pair> spkeyproducer = v =>
            {
                object[] va = (object[])((object[])v)[1];
                return(new SP_Pair((int)va[0], (int)va[1]));
            };

            Func <object, int> skeyproducer = v =>
            {
                object[] va = (object[])((object[])v)[1];
                return((int)va[0]);
            };
            Func <object, int> pkeyproducer = v =>
            {
                object[] va = (object[])((object[])v)[1];
                return((int)va[1]);
            };
            Func <object, ObjectVariants> okeyproducer = v =>
            {
                object[] va = (object[])((object[])v)[1];
                return(va[2].ToOVariant(ng.coding_table.GetStringByCode));
            };

            // Опорная таблица
            table = new TableView(path + "stable", tp_tabelement);
            if (table.Count() == 0)
            {
                table.Fill(new object[0]);
            }
            ng = new NodeGeneratorInt(path + "coding", table.Count() == 0);
            // Индекс spo
            spo_ind = new IndexDynamic <SPO_Troyka, IndexHalfkeyImmutable <SPO_Troyka> >(false)
            {
                Table      = table,
                IndexArray = new IndexHalfkeyImmutable <SPO_Troyka>(path + "spo_ind")
                {
                    Table        = table,
                    KeyProducer  = spokeyproducer,
                    HalfProducer = sp => sp.GetHashCode()
                },
                KeyProducer = spokeyproducer,
            };
            po_ind = new IndexDynamic <PO_Pair, IndexHalfkeyImmutable <PO_Pair> >(false)
            {
                Table      = table,
                IndexArray = new IndexHalfkeyImmutable <PO_Pair>(path + "po_ind")
                {
                    Table        = table,
                    KeyProducer  = pokeyproducer,
                    HalfProducer = sp => sp.GetHashCode()
                },
                KeyProducer = pokeyproducer
            };
            so_ind = new IndexDynamic <PO_Pair, IndexHalfkeyImmutable <PO_Pair> >(false)
            {
                Table      = table,
                IndexArray = new IndexHalfkeyImmutable <PO_Pair>(path + "so_ind")
                {
                    Table        = table,
                    KeyProducer  = oskeyproducer,
                    HalfProducer = sp => sp.GetHashCode()
                },
                KeyProducer = pokeyproducer
            };
            sp_ind = new IndexDynamic <SP_Pair, IndexHalfkeyImmutable <SP_Pair> >(false)
            {
                Table      = table,
                IndexArray = new IndexHalfkeyImmutable <SP_Pair>(path + "sp_ind")
                {
                    Table        = table,
                    KeyProducer  = spkeyproducer,
                    HalfProducer = sp => sp.GetHashCode()
                },
                KeyProducer = spkeyproducer
            };
            s_ind = new IndexDynamic <int, IndexKeyImmutable <int> >(false)
            {
                Table      = table,
                IndexArray = new IndexKeyImmutable <int>(path + "s_ind")
                {
                    Table       = table,
                    KeyProducer = skeyproducer,
                },
                KeyProducer = skeyproducer
            };
            p_ind = new IndexDynamic <int, IndexKeyImmutable <int> >(false)
            {
                Table      = table,
                IndexArray = new IndexKeyImmutable <int>(path + "p_ind")
                {
                    Table       = table,
                    KeyProducer = pkeyproducer,
                },
                KeyProducer = pkeyproducer
            };
            o_ind = new IndexDynamic <ObjectVariants, IndexHalfkeyImmutable <ObjectVariants> >(false)
            {
                Table      = table,
                IndexArray = new IndexHalfkeyImmutable <ObjectVariants>(path + "o_ind")
                {
                    Table        = table,
                    KeyProducer  = okeyproducer,
                    HalfProducer = sp => sp.GetHashCode()
                },
                KeyProducer = okeyproducer
            };
        }