Пример #1
0
        public static Map ToMap(this AHGHEEParser.KvpsContext kvps)
        {
            try
            {
                var items = new List <KeyValue>();
                foreach (var pair in kvps.pair())
                {
                    KeyValue kvp = default(KeyValue);
                    if (pair.kvp() != null)
                    {
                        var key   = pair.kvp().STRING().GetText().Trim('"');
                        var value = pair.kvp().value().ToData();
                        kvp = Utils.PropData(key, value, 0L);
                    }
                    else if (pair.edge() != null)
                    {
                        var key   = pair.edge().STRING(0).GetText().Trim('"');
                        var value = pair.edge().STRING(1).GetText().Trim('"');
                        var id    = Utils.Id(value);
                        kvp = Utils.PropData(key, Utils.DataId(id), 0L);
                    }
                    else if (pair.fedge() != null)
                    {
                        var key   = pair.edge().STRING(0).GetText().Trim('"');
                        var id    = Utils.Id(key);
                        var value = pair.edge().STRING(1).GetText().Trim('"');
                        kvp = Utils.Prop(0L, Utils.DataId(id),
                                         Utils.DBString(value));
                    }
                    else if (pair.dedge() != null)
                    {
                        var key     = pair.edge().STRING(0).GetText().Trim('"');
                        var value   = pair.edge().STRING(1).GetText().Trim('"');
                        var keyId   = Utils.Id(key);
                        var valueId = Utils.Id(value);
                        kvp = Utils.Prop(0L, Utils.DataId(keyId),
                                         Utils.DataId(valueId));
                    }
                    else
                    {
                        continue;
                    }
                    items.Add(kvp);
                }

                return(new Map()
                {
                    Items = items
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine(kvps.GetText());
                Console.WriteLine(ex.Message + "\n" + ex.StackTrace);
                throw;
            }
        }
Пример #2
0
        //
        public static NodeID ToNodeId(this NTRIPLESParser.SubjContext ctx, Func <string, string> BNToId)
        {
            var subIRI = ctx.IRI()?.GetText()?.Trim('<', '>');

            if (subIRI == null)
            {
                var subjBN = ctx.BLANKNODE().GetText();
                subIRI = BNToId(subjBN);
            }

            return(Utils.Id(subIRI));
        }
Пример #3
0
        public static (Primitive, Primitive?) ToDataBlock(this NTRIPLESParser.ObjContext ctx, Func <string?, string> BNToId)
        {
            // VALUE with optional stuffs
            var literalString = ctx.literal()?.STRING()?.GetText().Trim('"');

            if (literalString != null)
            {
                var str = Utils.DBString(literalString);

                var literalStringTypeIri = ctx.literal()?.IRI()?.GetText().Trim('<', '>');
                var literalStringLang    = ctx.literal()?.LANGTAG()?.GetText();
                if (literalStringTypeIri != null)
                {
                    return(str, Utils.DataId(Utils.Id(literalStringTypeIri)));
                }

                if (literalStringLang != null)
                {
                    return(str, Utils.DBString($"lang:{literalStringLang}"));
                }
                return(str, null);
            }

            // Value Pointer
            var objPointer = ctx.IRI()?.GetText()?.Trim('<', '>');

            if (objPointer != null)
            {
                return(Utils.DataId(Utils.Id(objPointer)), null);
            }

            // Value BlankNode, got this far, we have to have a blankNode, or something is broken.
            if (ctx.BLANKNODE() == null)
            {
                // this likely indicates are corrupt file, or upstream corruption in the parsing of the file.
            }
            var objVal = ctx.BLANKNODE()?.GetText();

            var objBn = BNToId(objVal);

            return(Utils.DataId(Utils.Id(objBn)), null);
        }
Пример #4
0
 public static Primitive ToDataBlockNodeID(this string str)
 {
     return(Utils.DataId(Utils.Id(str)));
 }
Пример #5
0
        public static Primitive ToData(this AHGHEEParser.ValueContext v)
        {
            if (v.STRING() != null)
            {
                return(Utils.DBString(v.STRING().GetText().Trim('"')));
            }
            else if (v.NUMBER() != null)
            {
                var numberstr = v.NUMBER().GetText();
                if (Int32.TryParse(numberstr, out var i32))
                {
                    return(i32);
                }
                else if (Int64.TryParse(numberstr, out var i64))
                {
                    return(i64);
                }
                else if (UInt64.TryParse(numberstr, out var ui64))
                {
                    return(ui64);
                }
                else if (Single.TryParse(numberstr, out var sing))
                {
                    return(sing);
                }
                else if (Double.TryParse(numberstr, out var doub))
                {
                    return(doub);
                }
            }
            else if (v.obj() != null && v.obj().kvps() != null)
            {
                return(v.obj().kvps().ToMap());
            }
            else if (v.arr() != null)
            {
                return(v.arr().ToArray());
            }
            else if (!string.IsNullOrWhiteSpace(v.GetText()))
            {
                var t = v.GetText().Trim('"');
                if (Boolean.TryParse(t, out var boo))
                {
                    return(boo);
                }
                else if (t == "null")
                {
                    // do nothing.
                }
            }
            // json fallback
            // todo: allow smart strings such as xml/json etc.. maybe just let them
            // specify the type before or after the string content.
            // could also let them pass binary in base64 or something

            Debugger.Break();
            var jsonstuff = v.GetText(); // must be some kind of json at this point.. (I hope :P)
            var tb        = new TypeBytes {
                TypeIri = "application/json", ByteArray = Encoding.UTF8.GetBytes(jsonstuff)
            };

            return(tb);
        }