internal static string ToNQuad(RdfDataset.Quad triple, string graphName) { return(ToNQuad(triple, graphName, null)); }
/// <summary>Parses RDF in the form of N-Quads.</summary> /// <remarks>Parses RDF in the form of N-Quads.</remarks> /// <param name="input">the N-Quads input to parse.</param> /// <returns>an RDF dataset.</returns> /// <exception cref="JsonLD.Core.JsonLdError"></exception> public static RdfDataset ParseNQuads(string input) { // build RDF dataset var dataset = new RdfDataset(); // split N-Quad input into lines var lines = Regex.Eoln.Split(input); var lineNumber = 0; foreach (var line in lines) { lineNumber++; // skip empty lines if (Regex.EmptyOrComment.Matcher(line).Matches()) { continue; } // parse quad var match = Regex.Quad.Matcher(line); if (!match.Matches()) { throw new JsonLdError(JsonLdError.Error.SyntaxError, "Error while parsing N-Quads; invalid quad. line:" + lineNumber); } // get subject RdfDataset.Node subject; if (match.Group(1) != null) { var subjectIri = Unescape(match.Group(1)); AssertAbsoluteIri(subjectIri); subject = new RdfDataset.IRI(subjectIri); } else { subject = new RdfDataset.BlankNode(Unescape(match.Group(2))); } // get predicate var predicateIri = Unescape(match.Group(3)); AssertAbsoluteIri(predicateIri); RdfDataset.Node predicate = new RdfDataset.IRI(predicateIri); // get object RdfDataset.Node @object; if (match.Group(4) != null) { var objectIri = Unescape(match.Group(4)); AssertAbsoluteIri(objectIri); @object = new RdfDataset.IRI(objectIri); } else { if (match.Group(5) != null) { @object = new RdfDataset.BlankNode(Unescape(match.Group(5))); } else { var language = Unescape(match.Group(8)); var datatype = match.Group(7) != null?Unescape(match.Group(7)) : match.Group (8) != null ? JsonLdConsts.RdfLangstring : JsonLdConsts.XsdString; AssertAbsoluteIri(datatype); var unescaped = Unescape(match.Group(6)); @object = new RdfDataset.Literal(unescaped, datatype, language); } } // get graph name ('@default' is used for the default graph) var name = "@default"; if (match.Group(9) != null) { name = Unescape(match.Group(9)); AssertAbsoluteIri(name); } else { if (match.Group(10) != null) { name = Unescape(match.Group(10)); } } var triple = new RdfDataset.Quad(subject, predicate, @object, name); // initialise graph in dataset if (!dataset.ContainsKey(name)) { IList <RdfDataset.Quad> tmp = new List <RdfDataset.Quad>(); tmp.Add(triple); dataset[name] = tmp; } else { // add triple if unique to its graph var triples = (IList <RdfDataset.Quad>)dataset[name]; if (!triples.Contains(triple)) { triples.Add(triple); } } } return(dataset); }
internal static string ToNQuad(RdfDataset.Quad triple, string graphName, string bnode ) { var s = triple.GetSubject(); var p = triple.GetPredicate(); var o = triple.GetObject(); var quad = string.Empty; // subject is an IRI or bnode if (s.IsIRI()) { quad += "<" + Escape(s.GetValue()) + ">"; } else { // normalization mode if (bnode != null) { quad += bnode.Equals(s.GetValue()) ? "_:a" : "_:z"; } else { quad += s.GetValue(); } } if (p.IsIRI()) { quad += " <" + Escape(p.GetValue()) + "> "; } else { quad += " " + Escape(p.GetValue()) + " "; } // object is IRI, bnode or literal if (o.IsIRI()) { quad += "<" + Escape(o.GetValue()) + ">"; } else { if (o.IsBlankNode()) { // normalization mode if (bnode != null) { quad += bnode.Equals(o.GetValue()) ? "_:a" : "_:z"; } else { quad += o.GetValue(); } } else { var escaped = Escape(o.GetValue()); quad += "\"" + escaped + "\""; if (JsonLdConsts.RdfLangstring.Equals(o.GetDatatype())) { quad += "@" + o.GetLanguage(); } else { if (!JsonLdConsts.XsdString.Equals(o.GetDatatype())) { quad += "^^<" + Escape(o.GetDatatype()) + ">"; } } } } // graph if (graphName != null) { if (graphName.IndexOf("_:") != 0) { quad += " <" + Escape(graphName) + ">"; } else { if (bnode != null) { quad += " _:g"; } else { quad += " " + graphName; } } } quad += " .\n"; return(quad); }