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; } }
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); }
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); }