diff --git a/JsonLD.Portable/JsonLD.Portable.csproj b/JsonLD.Portable/JsonLD.Portable.csproj index 8d709c4..dc79ba7 100644 --- a/JsonLD.Portable/JsonLD.Portable.csproj +++ b/JsonLD.Portable/JsonLD.Portable.csproj @@ -110,8 +110,9 @@ - + ..\packages\Newtonsoft.Json.6.0.1\lib\portable-net45+wp80+win8\Newtonsoft.Json.dll + True diff --git a/JsonLD.Portable/packages.config b/JsonLD.Portable/packages.config index 5626215..97531c7 100644 --- a/JsonLD.Portable/packages.config +++ b/JsonLD.Portable/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/src/JsonLD/Core/JsonLdProcessor.cs b/src/JsonLD/Core/JsonLdProcessor.cs index b5a7eab..f383f2c 100644 --- a/src/JsonLD/Core/JsonLdProcessor.cs +++ b/src/JsonLD/Core/JsonLdProcessor.cs @@ -66,8 +66,28 @@ public static JArray Expand(JToken input, JsonLdOptions opts) { // 1) // TODO: look into java futures/promises - // 2) TODO: better verification of DOMString IRI - if (input.Type == JTokenType.String && ((string)input).Contains(":")) + + // 2) verification of DOMString IRI + bool isIriString = input.Type == JTokenType.String; + if (isIriString) + { + bool hasColon = false; + foreach (var c in ((string) input)) + { + if (c == ':') + { + hasColon = true; + } + + if (!hasColon && (c == '{' || c == '[')) + { + isIriString = false; + break; + } + } + } + + if (isIriString) { try { diff --git a/src/JsonLD/Core/JsonLdUtils.cs b/src/JsonLD/Core/JsonLdUtils.cs index e8d466e..b0d61b8 100644 --- a/src/JsonLD/Core/JsonLdUtils.cs +++ b/src/JsonLD/Core/JsonLdUtils.cs @@ -199,7 +199,7 @@ internal static void MergeCompactedValue(JObject obj, string public static bool IsAbsoluteIri(string value) { // TODO: this is a bit simplistic! - return value.Contains(":"); + return value != null && value.Contains(":"); } /// Returns true if the given value is a subject with properties. diff --git a/src/JsonLD/Core/RDFDataset.cs b/src/JsonLD/Core/RDFDataset.cs index 6823ad3..0652783 100644 --- a/src/JsonLD/Core/RDFDataset.cs +++ b/src/JsonLD/Core/RDFDataset.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.Globalization; using JsonLD.Core; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace JsonLD.Core @@ -220,7 +222,7 @@ internal virtual JObject ToObject(bool useNativeTypes) { try { - double d = double.Parse(value); + double d = double.Parse(value, CultureInfo.InvariantCulture); if (!double.IsNaN(d) && !double.IsInfinity(d)) { if (JSONLDConsts.XsdInteger.Equals(type)) @@ -732,7 +734,8 @@ private RDFDataset.Node ObjectToRDF(JToken item) // convert to XSD datatype if (value.Type == JTokenType.Boolean) { - return new RDFDataset.Literal(value.ToString(), datatype.IsNull() ? JSONLDConsts.XsdBoolean + var serializeObject = JsonConvert.SerializeObject(value, Formatting.None).Trim('"'); + return new RDFDataset.Literal(serializeObject, datatype.IsNull() ? JSONLDConsts.XsdBoolean : (string)datatype, null); } else @@ -746,7 +749,7 @@ private RDFDataset.Node ObjectToRDF(JToken item) value = new JValue((double)number); } // canonical double representation - return new RDFDataset.Literal(string.Format("{0:0.0###############E0}", (double)value), datatype.IsNull() ? JSONLDConsts.XsdDouble + return new RDFDataset.Literal(string.Format(CultureInfo.InvariantCulture, "{0:0.0###############E0}", (double)value), datatype.IsNull() ? JSONLDConsts.XsdDouble : (string)datatype, null); } else @@ -765,7 +768,8 @@ private RDFDataset.Node ObjectToRDF(JToken item) } else { - return new RDFDataset.Literal((string)value, datatype.IsNull() ? JSONLDConsts.XsdString + var serializeObject = JsonConvert.SerializeObject(value, Formatting.None).Trim('"'); + return new RDFDataset.Literal(serializeObject, datatype.IsNull() ? JSONLDConsts.XsdString : (string)datatype, null); } } diff --git a/src/JsonLD/Core/RDFDatasetUtils.cs b/src/JsonLD/Core/RDFDatasetUtils.cs index 7663cc4..df92c92 100644 --- a/src/JsonLD/Core/RDFDatasetUtils.cs +++ b/src/JsonLD/Core/RDFDatasetUtils.cs @@ -544,14 +544,19 @@ public static string Escape(string str) private class Regex { - public static readonly Pattern Iri = Pattern.Compile("(?:<([^>]*)>)"); + public static readonly Pattern HEX = Pattern.Compile("[0-9A-Fa-f]"); - public static readonly Pattern Bnode = Pattern.Compile("(_:(?:[A-Za-z][A-Za-z0-9]*))" - ); + public static readonly Pattern UCHAR = Pattern.Compile("\\\\u" + HEX + "{4}|\\\\U" + HEX + "{8}"); + + public static readonly Pattern Iri = Pattern.Compile("(?:<((?:[^\\x00-\\x20<>\"{}|^`\\\\]|" + UCHAR + ")*)>)"); - public static readonly Pattern Plain = Pattern.Compile("\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"" + public static readonly Pattern Bnode = Pattern.Compile("(_:(?:[A-Za-z0-9](?:[A-Za-z0-9\\-\\.]*[A-Za-z0-9])?))" ); + public static readonly Pattern ECHAR = Pattern.Compile("\\\\[tbnrf\"'\\\\]"); + + public static readonly Pattern Plain = Pattern.Compile("\"((?:[^\\x22\\x5C\\x0A\\x0D]|" + ECHAR + "|" + UCHAR + ")*)\""); + public static readonly Pattern Datatype = Pattern.Compile("(?:\\^\\^" + Iri + ")" ); @@ -561,19 +566,16 @@ private class Regex public static readonly Pattern Literal = Pattern.Compile("(?:" + Plain + "(?:" + Datatype + "|" + Language + ")?)"); - public static readonly Pattern Ws = Pattern.Compile("[ \\t]+"); - public static readonly Pattern Wso = Pattern.Compile("[ \\t]*"); public static readonly Pattern Eoln = Pattern.Compile("(?:\r\n)|(?:\n)|(?:\r)"); - public static readonly Pattern Empty = Pattern.Compile("^" + Wso + "$"); + public static readonly Pattern EmptyOrComment = Pattern.Compile("^" + Wso + "(#.*)?$"); public static readonly Pattern Subject = Pattern.Compile("(?:" + Iri + "|" + Bnode - + ")" + Ws); + + ")" + Wso); - public static readonly Pattern Property = Pattern.Compile(Iri.GetPattern() + Ws.GetPattern - ()); + public static readonly Pattern Property = Pattern.Compile(Iri.GetPattern() + Wso); public static readonly Pattern Object = Pattern.Compile("(?:" + Iri + "|" + Bnode + "|" + Literal + ")" + Wso); @@ -582,7 +584,7 @@ private class Regex + Bnode + ")" + Wso + "\\.))"); public static readonly Pattern Quad = Pattern.Compile("^" + Wso + Subject + Property - + Object + Graph + Wso + "$"); + + Object + Graph + Wso + "(#.*)?$"); // define partial regexes // final public static Pattern IRI = // Pattern.compile("(?:<([^:]+:[^>]*)>)"); @@ -606,7 +608,7 @@ public static RDFDataset ParseNQuads(string input) { lineNumber++; // skip empty lines - if (RDFDatasetUtils.Regex.Empty.Matcher(line).Matches()) + if (RDFDatasetUtils.Regex.EmptyOrComment.Matcher(line).Matches()) { continue; } @@ -621,19 +623,25 @@ public static RDFDataset ParseNQuads(string input) RDFDataset.Node subject; if (match.Group(1) != null) { - subject = new RDFDataset.IRI(Unescape(match.Group(1))); + var subjectIri = Unescape(match.Group(1)); + AssertAbsoluteIri(subjectIri); + subject = new RDFDataset.IRI(subjectIri); } else { subject = new RDFDataset.BlankNode(Unescape(match.Group(2))); } // get predicate - RDFDataset.Node predicate = new RDFDataset.IRI(Unescape(match.Group(3))); + 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) { - @object = new RDFDataset.IRI(Unescape(match.Group(4))); + var objectIri = Unescape(match.Group(4)); + AssertAbsoluteIri(objectIri); + @object = new RDFDataset.IRI(objectIri); } else { @@ -646,6 +654,7 @@ public static RDFDataset ParseNQuads(string input) string language = Unescape(match.Group(8)); string datatype = match.Group(7) != null ? Unescape(match.Group(7)) : match.Group (8) != null ? JSONLDConsts.RdfLangstring : JSONLDConsts.XsdString; + AssertAbsoluteIri(datatype); string unescaped = Unescape(match.Group(6)); @object = new RDFDataset.Literal(unescaped, datatype, language); } @@ -655,6 +664,7 @@ public static RDFDataset ParseNQuads(string input) if (match.Group(9) != null) { name = Unescape(match.Group(9)); + AssertAbsoluteIri(name); } else { @@ -683,5 +693,13 @@ public static RDFDataset ParseNQuads(string input) } return dataset; } + + private static void AssertAbsoluteIri(string iri) + { + if (Uri.IsWellFormedUriString(Uri.EscapeUriString(iri), UriKind.Absolute) == false) + { + throw new JsonLdError(JsonLdError.Error.SyntaxError, "Invalid absolute URI <" + iri + ">"); + } + } } } diff --git a/src/JsonLD/JsonLD.csproj b/src/JsonLD/JsonLD.csproj index 88c5bd9..c5758f7 100644 --- a/src/JsonLD/JsonLD.csproj +++ b/src/JsonLD/JsonLD.csproj @@ -36,9 +36,9 @@ false - - False - ..\..\packages\Newtonsoft.Json.4.0.1\lib\40\Newtonsoft.Json.dll + + ..\..\packages\Newtonsoft.Json.6.0.1\lib\net40\Newtonsoft.Json.dll + True diff --git a/src/JsonLD/Util/JavaCompat.cs b/src/JsonLD/Util/JavaCompat.cs index 3489301..0dc17d6 100644 --- a/src/JsonLD/Util/JavaCompat.cs +++ b/src/JsonLD/Util/JavaCompat.cs @@ -67,7 +67,7 @@ public static bool SafeCompare(this JToken token, T val) { try { - return token.Value().Equals(val); + return token == null ? val == null : token.Value().Equals(val); } catch { diff --git a/src/JsonLD/packages.config b/src/JsonLD/packages.config index cc24f2e..af4e42b 100644 --- a/src/JsonLD/packages.config +++ b/src/JsonLD/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/tests/JsonLD.Test/ConformanceTests.cs b/tests/JsonLD.Test/ConformanceTests.cs index d3ce18b..6b6cbf4 100644 --- a/tests/JsonLD.Test/ConformanceTests.cs +++ b/tests/JsonLD.Test/ConformanceTests.cs @@ -230,7 +230,10 @@ private JToken GetJson(JToken j) if (j.Type == JTokenType.Null) return null; using ( Stream manifestStream = File.OpenRead("W3C\\" + (string)j)) using (TextReader reader = new StreamReader(manifestStream)) - using (JsonReader jreader = new Newtonsoft.Json.JsonTextReader(reader)) + using (JsonReader jreader = new Newtonsoft.Json.JsonTextReader(reader) + { + DateParseHandling = DateParseHandling.None + }) { return JToken.ReadFrom(jreader); } diff --git a/tests/JsonLD.Test/JsonLD.Test.csproj b/tests/JsonLD.Test/JsonLD.Test.csproj index 60b7d2a..a2e9684 100644 --- a/tests/JsonLD.Test/JsonLD.Test.csproj +++ b/tests/JsonLD.Test/JsonLD.Test.csproj @@ -36,9 +36,9 @@ false - - False - ..\..\packages\Newtonsoft.Json.4.0.1\lib\40\Newtonsoft.Json.dll + + ..\..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll + True @@ -58,8 +58,14 @@ + + + + Always + + PreserveNewest @@ -3005,6 +3011,7 @@ JsonLD + diff --git a/tests/JsonLD.Test/NQuads/README b/tests/JsonLD.Test/NQuads/README new file mode 100644 index 0000000..7aef79d --- /dev/null +++ b/tests/JsonLD.Test/NQuads/README @@ -0,0 +1,25 @@ +This README is for the W3C RDF Working Group's N-Quads test suite. +This test suite contains two kinds of tests: + + Positive syntax (rdft:TestNQuadsPositiveSyntax) - an input N-Quads + file with no syntax errors. + + Negative syntax (rdft:TestNQuadsNegativeSyntax) - an input N-Quads + file with at least one syntax error. + +The manifest.ttl file in this directory lists tests in the +RDF WG's N-Quads test suite. All +tests have a name (mf:name) and an input (mf:action). + +• An implementation passes a positive syntax test if it parses the + input. + +• An implementation passes a negative syntax test if it fails to parse + the input. + +The home of the test suite is . + +See http://www.w3.org/2011/rdf-wg/wiki/RDF_Test_Suites for more details. + +Eric Prud'hommeaux - 11 June 2013. +Gregg Kellogg - 26 June 2013. diff --git a/tests/JsonLD.Test/NQuads/comment_following_triple.nq b/tests/JsonLD.Test/NQuads/comment_following_triple.nq new file mode 100644 index 0000000..5619459 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/comment_following_triple.nq @@ -0,0 +1,5 @@ + . # comment + _:o . # comment + "o" . # comment + "o"^^ . # comment + "o"@en . # comment diff --git a/tests/JsonLD.Test/NQuads/langtagged_string.nq b/tests/JsonLD.Test/NQuads/langtagged_string.nq new file mode 100644 index 0000000..1bddb04 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/langtagged_string.nq @@ -0,0 +1 @@ + "chat"@en . diff --git a/tests/JsonLD.Test/NQuads/lantag_with_subtag.nq b/tests/JsonLD.Test/NQuads/lantag_with_subtag.nq new file mode 100644 index 0000000..629cbf4 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/lantag_with_subtag.nq @@ -0,0 +1 @@ + "Cheers"@en-UK . diff --git a/tests/JsonLD.Test/NQuads/literal.nq b/tests/JsonLD.Test/NQuads/literal.nq new file mode 100644 index 0000000..3aba89e --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal.nq @@ -0,0 +1 @@ + "x" . diff --git a/tests/JsonLD.Test/NQuads/literal_all_controls.nq b/tests/JsonLD.Test/NQuads/literal_all_controls.nq new file mode 100644 index 0000000..91c8af1 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_all_controls.nq @@ -0,0 +1 @@ + "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\t\u000B\u000C\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" . diff --git a/tests/JsonLD.Test/NQuads/literal_all_punctuation.nq b/tests/JsonLD.Test/NQuads/literal_all_punctuation.nq new file mode 100644 index 0000000..c25d818 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_all_punctuation.nq @@ -0,0 +1 @@ + " !\"#$%&():;<=>?@[]^_`{|}~" . diff --git a/tests/JsonLD.Test/NQuads/literal_ascii_boundaries.nq b/tests/JsonLD.Test/NQuads/literal_ascii_boundaries.nq new file mode 100644 index 0000000..7a4dc71 Binary files /dev/null and b/tests/JsonLD.Test/NQuads/literal_ascii_boundaries.nq differ diff --git a/tests/JsonLD.Test/NQuads/literal_false.nq b/tests/JsonLD.Test/NQuads/literal_false.nq new file mode 100644 index 0000000..5bbbae8 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_false.nq @@ -0,0 +1 @@ + "false"^^ . diff --git a/tests/JsonLD.Test/NQuads/literal_true.nq b/tests/JsonLD.Test/NQuads/literal_true.nq new file mode 100644 index 0000000..054b229 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_true.nq @@ -0,0 +1 @@ + "true"^^ . diff --git a/tests/JsonLD.Test/NQuads/literal_with_2_dquotes.nq b/tests/JsonLD.Test/NQuads/literal_with_2_dquotes.nq new file mode 100644 index 0000000..3e69dc1 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_2_dquotes.nq @@ -0,0 +1 @@ + "x\"\"y" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_2_squotes.nq b/tests/JsonLD.Test/NQuads/literal_with_2_squotes.nq new file mode 100644 index 0000000..8ddc52e --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_2_squotes.nq @@ -0,0 +1 @@ + "x''y" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_BACKSPACE.nq b/tests/JsonLD.Test/NQuads/literal_with_BACKSPACE.nq new file mode 100644 index 0000000..339013d --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_BACKSPACE.nq @@ -0,0 +1 @@ + "\b" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_CARRIAGE_RETURN.nq b/tests/JsonLD.Test/NQuads/literal_with_CARRIAGE_RETURN.nq new file mode 100644 index 0000000..91b85c8 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_CARRIAGE_RETURN.nq @@ -0,0 +1 @@ + "\r" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_CHARACTER_TABULATION.nq b/tests/JsonLD.Test/NQuads/literal_with_CHARACTER_TABULATION.nq new file mode 100644 index 0000000..a6a9d9f --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_CHARACTER_TABULATION.nq @@ -0,0 +1 @@ + "\t" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_FORM_FEED.nq b/tests/JsonLD.Test/NQuads/literal_with_FORM_FEED.nq new file mode 100644 index 0000000..10d2c6d --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_FORM_FEED.nq @@ -0,0 +1 @@ + "\f" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_LINE_FEED.nq b/tests/JsonLD.Test/NQuads/literal_with_LINE_FEED.nq new file mode 100644 index 0000000..462f97a --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_LINE_FEED.nq @@ -0,0 +1 @@ + "\n" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_REVERSE_SOLIDUS.nq b/tests/JsonLD.Test/NQuads/literal_with_REVERSE_SOLIDUS.nq new file mode 100644 index 0000000..ebc846e --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_REVERSE_SOLIDUS.nq @@ -0,0 +1 @@ + "\\" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_REVERSE_SOLIDUS2.nq b/tests/JsonLD.Test/NQuads/literal_with_REVERSE_SOLIDUS2.nq new file mode 100644 index 0000000..586e364 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_REVERSE_SOLIDUS2.nq @@ -0,0 +1 @@ + "test-\\" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_UTF8_boundaries.nq b/tests/JsonLD.Test/NQuads/literal_with_UTF8_boundaries.nq new file mode 100644 index 0000000..0e1616d --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_UTF8_boundaries.nq @@ -0,0 +1 @@ + "€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_dquote.nq b/tests/JsonLD.Test/NQuads/literal_with_dquote.nq new file mode 100644 index 0000000..05a1fd3 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_dquote.nq @@ -0,0 +1 @@ + "x\"y" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_numeric_escape4.nq b/tests/JsonLD.Test/NQuads/literal_with_numeric_escape4.nq new file mode 100644 index 0000000..16f0a03 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_numeric_escape4.nq @@ -0,0 +1 @@ + "\u006F" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_numeric_escape8.nq b/tests/JsonLD.Test/NQuads/literal_with_numeric_escape8.nq new file mode 100644 index 0000000..e909a79 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_numeric_escape8.nq @@ -0,0 +1 @@ + "\U0000006F" . diff --git a/tests/JsonLD.Test/NQuads/literal_with_squote.nq b/tests/JsonLD.Test/NQuads/literal_with_squote.nq new file mode 100644 index 0000000..acf7f58 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/literal_with_squote.nq @@ -0,0 +1 @@ + "x'y" . diff --git a/tests/JsonLD.Test/NQuads/manifest.ttl b/tests/JsonLD.Test/NQuads/manifest.ttl new file mode 100644 index 0000000..2f61f75 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/manifest.ttl @@ -0,0 +1,695 @@ +# N-Quads Syntax tests + +@prefix rdfs: . +@prefix mf: . +@prefix qt: . + +@prefix rdft: . + +<> a mf:Manifest ; + mf:name "N-Quads tests" ; + mf:entries + ( + <#nq-syntax-uri-01> + <#nq-syntax-uri-02> + <#nq-syntax-uri-03> + <#nq-syntax-uri-04> + <#nq-syntax-uri-05> + <#nq-syntax-uri-06> + <#nq-syntax-bnode-01> + <#nq-syntax-bnode-02> + <#nq-syntax-bnode-03> + <#nq-syntax-bnode-04> + <#nq-syntax-bnode-05> + <#nq-syntax-bnode-06> + <#nq-syntax-bad-literal-01> + <#nq-syntax-bad-literal-02> + <#nq-syntax-bad-literal-03> + <#nq-syntax-bad-uri-01> + <#nq-syntax-bad-quint-01> + <#nt-syntax-file-01> + <#nt-syntax-file-02> + <#nt-syntax-file-03> + <#nt-syntax-uri-01> + <#nt-syntax-uri-02> + <#nt-syntax-uri-03> + <#nt-syntax-uri-04> + <#nt-syntax-string-01> + <#nt-syntax-string-02> + <#nt-syntax-string-03> + <#nt-syntax-str-esc-01> + <#nt-syntax-str-esc-02> + <#nt-syntax-str-esc-03> + <#nt-syntax-bnode-01> + <#nt-syntax-bnode-02> + <#nt-syntax-bnode-03> + <#nt-syntax-datatypes-01> + <#nt-syntax-datatypes-02> + <#nt-syntax-bad-uri-01> + <#nt-syntax-bad-uri-02> + <#nt-syntax-bad-uri-03> + <#nt-syntax-bad-uri-04> + <#nt-syntax-bad-uri-05> + <#nt-syntax-bad-uri-06> + <#nt-syntax-bad-uri-07> + <#nt-syntax-bad-uri-08> + <#nt-syntax-bad-uri-09> + <#nt-syntax-bad-prefix-01> + <#nt-syntax-bad-base-01> + <#nt-syntax-bad-struct-01> + <#nt-syntax-bad-struct-02> + <#nt-syntax-bad-lang-01> + <#nt-syntax-bad-esc-01> + <#nt-syntax-bad-esc-02> + <#nt-syntax-bad-esc-03> + <#nt-syntax-bad-string-01> + <#nt-syntax-bad-string-02> + <#nt-syntax-bad-string-03> + <#nt-syntax-bad-string-04> + <#nt-syntax-bad-string-05> + <#nt-syntax-bad-string-06> + <#nt-syntax-bad-string-07> + <#nt-syntax-bad-num-01> + <#nt-syntax-bad-num-02> + <#nt-syntax-bad-num-03> + <#nt-syntax-subm-01> + <#comment_following_triple> + <#literal> + <#literal_all_controls> + <#literal_all_punctuation> + <#literal_ascii_boundaries> + <#literal_with_2_dquotes> + <#literal_with_2_squotes> + <#literal_with_BACKSPACE> + <#literal_with_CARRIAGE_RETURN> + <#literal_with_CHARACTER_TABULATION> + <#literal_with_dquote> + <#literal_with_FORM_FEED> + <#literal_with_LINE_FEED> + <#literal_with_numeric_escape4> + <#literal_with_numeric_escape8> + <#literal_with_REVERSE_SOLIDUS> + <#literal_with_REVERSE_SOLIDUS2> + <#literal_with_squote> + <#literal_with_UTF8_boundaries> + <#langtagged_string> + <#lantag_with_subtag> + <#minimal_whitespace> + ) . + +<#nq-syntax-uri-01> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-uri-01" ; + rdfs:comment "URI graph with URI triple" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-uri-02> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-uri-02" ; + rdfs:comment "URI graph with BNode subject" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-uri-03> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-uri-03" ; + rdfs:comment "URI graph with BNode object" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-uri-04> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-uri-04" ; + rdfs:comment "URI graph with simple literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-uri-05> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-uri-05" ; + rdfs:comment "URI graph with language tagged literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-uri-06> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-uri-06" ; + rdfs:comment "URI graph with datatyped literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bnode-01> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-bnode-01" ; + rdfs:comment "BNode graph with URI triple" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bnode-02> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-bnode-02" ; + rdfs:comment "BNode graph with BNode subject" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bnode-03> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-bnode-03" ; + rdfs:comment "BNode graph with BNode object" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bnode-04> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-bnode-04" ; + rdfs:comment "BNode graph with simple literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bnode-05> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-bnode-05" ; + rdfs:comment "BNode graph with language tagged literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bnode-06> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nq-syntax-bnode-06" ; + rdfs:comment "BNode graph with datatyped literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bad-literal-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nq-syntax-bad-literal-01" ; + rdfs:comment "Graph name may not be a simple literal (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bad-literal-02> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nq-syntax-bad-literal-02" ; + rdfs:comment "Graph name may not be a language tagged literal (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bad-literal-03> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nq-syntax-bad-literal-03" ; + rdfs:comment "Graph name may not be a datatyped literal (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bad-uri-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nq-syntax-bad-uri-01" ; + rdfs:comment "Graph name URI must be absolute (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nq-syntax-bad-quint-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nq-syntax-bad-quint-01" ; + rdfs:comment "N-Quads does not have a fifth element (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-file-01> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-file-01" ; + rdfs:comment "Empty file" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-file-02> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-file-02" ; + rdfs:comment "Only comment" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-file-03> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-file-03" ; + rdfs:comment "One comment, one empty line" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-uri-01> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-uri-01" ; + rdfs:comment "Only IRIs" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-uri-02> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-uri-02" ; + rdfs:comment "IRIs with Unicode escape" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-uri-03> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-uri-03" ; + rdfs:comment "IRIs with long Unicode escape" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-uri-04> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-uri-04" ; + rdfs:comment "Legal IRIs" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-string-01> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-string-01" ; + rdfs:comment "string literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-string-02> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-string-02" ; + rdfs:comment "langString literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-string-03> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-string-03" ; + rdfs:comment "langString literal with region" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-str-esc-01> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-str-esc-01" ; + rdfs:comment "string literal with escaped newline" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-str-esc-02> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-str-esc-02" ; + rdfs:comment "string literal with Unicode escape" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-str-esc-03> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-str-esc-03" ; + rdfs:comment "string literal with long Unicode escape" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bnode-01> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-bnode-01" ; + rdfs:comment "bnode subject" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bnode-02> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-bnode-02" ; + rdfs:comment "bnode object" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bnode-03> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-bnode-03" ; + rdfs:comment "Blank node labels may start with a digit" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-datatypes-01> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-datatypes-01" ; + rdfs:comment "xsd:byte literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-datatypes-02> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-datatypes-02" ; + rdfs:comment "integer as xsd:string" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-uri-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-uri-01" ; + rdfs:comment "Bad IRI : space (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-uri-02> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-uri-02" ; + rdfs:comment "Bad IRI : bad escape (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-uri-03> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-uri-03" ; + rdfs:comment "Bad IRI : bad long escape (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-uri-04> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-uri-04" ; + rdfs:comment "Bad IRI : character escapes not allowed (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-uri-05> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-uri-05" ; + rdfs:comment "Bad IRI : character escapes not allowed (2) (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-uri-06> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-uri-06" ; + rdfs:comment "Bad IRI : relative IRI not allowed in subject (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-uri-07> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-uri-07" ; + rdfs:comment "Bad IRI : relative IRI not allowed in predicate (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-uri-08> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-uri-08" ; + rdfs:comment "Bad IRI : relative IRI not allowed in object (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-uri-09> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-uri-09" ; + rdfs:comment "Bad IRI : relative IRI not allowed in datatype (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-prefix-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-prefix-01" ; + rdfs:comment "@prefix not allowed in n-triples (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-base-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-base-01" ; + rdfs:comment "@base not allowed in N-Triples (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-struct-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-struct-01" ; + rdfs:comment "N-Triples does not have objectList (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-struct-02> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-struct-02" ; + rdfs:comment "N-Triples does not have predicateObjectList (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-lang-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-lang-01" ; + rdfs:comment "langString with bad lang (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-esc-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-esc-01" ; + rdfs:comment "Bad string escape (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-esc-02> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-esc-02" ; + rdfs:comment "Bad string escape (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-esc-03> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-esc-03" ; + rdfs:comment "Bad string escape (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-string-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-string-01" ; + rdfs:comment "mismatching string literal open/close (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-string-02> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-string-02" ; + rdfs:comment "mismatching string literal open/close (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-string-03> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-string-03" ; + rdfs:comment "single quotes (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-string-04> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-string-04" ; + rdfs:comment "long single string literal (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-string-05> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-string-05" ; + rdfs:comment "long double string literal (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-string-06> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-string-06" ; + rdfs:comment "string literal with no end (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-string-07> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-string-07" ; + rdfs:comment "string literal with no start (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-num-01> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-num-01" ; + rdfs:comment "no numbers in N-Triples (integer) (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-num-02> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-num-02" ; + rdfs:comment "no numbers in N-Triples (decimal) (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-bad-num-03> a rdft:TestNQuadsNegativeSyntax ; + mf:name "nt-syntax-bad-num-03" ; + rdfs:comment "no numbers in N-Triples (float) (negative test)" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#nt-syntax-subm-01> a rdft:TestNQuadsPositiveSyntax ; + mf:name "nt-syntax-subm-01" ; + rdfs:comment "Submission test from Original RDF Test Cases" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#comment_following_triple> a rdft:TestNQuadsPositiveSyntax ; + mf:name "comment_following_triple" ; + rdfs:comment "Tests comments after a triple" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_ascii_boundaries> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_ascii_boundaries" ; + rdfs:comment "literal_ascii_boundaries '\\x00\\x26\\x28...'" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_UTF8_boundaries> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_UTF8_boundaries" ; + rdfs:comment "literal_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_all_controls> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_all_controls" ; + rdfs:comment "literal_all_controls '\\x00\\x01\\x02\\x03\\x04...'" ; + rdft:approval rdft:Approved ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_all_punctuation> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_all_punctuation" ; + rdfs:comment "literal_all_punctuation '!\"#$%&()...'" ; + rdft:approval rdft:Approved ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_squote> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_squote" ; + rdfs:comment "literal with squote \"x'y\"" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_2_squotes> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_2_squotes" ; + rdfs:comment "literal with 2 squotes \"x''y\"" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal" ; + rdfs:comment "literal \"\"\"x\"\"\"" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_dquote> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_dquote" ; + rdfs:comment 'literal with dquote "x\"y"' ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_2_dquotes> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_2_dquotes" ; + rdfs:comment "literal with 2 squotes \"\"\"a\"\"b\"\"\"" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_REVERSE_SOLIDUS2> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_REVERSE_SOLIDUS2" ; + rdfs:comment "REVERSE SOLIDUS at end of literal" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_CHARACTER_TABULATION> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_CHARACTER_TABULATION" ; + rdfs:comment "literal with CHARACTER TABULATION" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_BACKSPACE> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_BACKSPACE" ; + rdfs:comment "literal with BACKSPACE" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_LINE_FEED> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_LINE_FEED" ; + rdfs:comment "literal with LINE FEED" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_CARRIAGE_RETURN> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_CARRIAGE_RETURN" ; + rdfs:comment "literal with CARRIAGE RETURN" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_FORM_FEED> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_FORM_FEED" ; + rdfs:comment "literal with FORM FEED" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_REVERSE_SOLIDUS> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_REVERSE_SOLIDUS" ; + rdfs:comment "literal with REVERSE SOLIDUS" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_numeric_escape4> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_numeric_escape4" ; + rdfs:comment "literal with numeric escape4 \\u" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#literal_with_numeric_escape8> a rdft:TestNQuadsPositiveSyntax ; + mf:name "literal_with_numeric_escape8" ; + rdfs:comment "literal with numeric escape8 \\U" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#langtagged_string> a rdft:TestNQuadsPositiveSyntax ; + mf:name "langtagged_string" ; + rdfs:comment "langtagged string \"x\"@en" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#lantag_with_subtag> a rdft:TestNQuadsPositiveSyntax ; + mf:name "lantag_with_subtag" ; + rdfs:comment "lantag with subtag \"x\"@en-us" ; + rdft:approval rdft:Approved ; + mf:action ; + . + +<#minimal_whitespace> a rdft:TestNQuadsPositiveSyntax ; + mf:name "minimal_whitespace" ; + rdfs:comment "tests absense of whitespace between subject, predicate, object and end-of-statement" ; + rdft:approval rdft:Approved ; + mf:action ; + . diff --git a/tests/JsonLD.Test/NQuads/minimal_whitespace.nq b/tests/JsonLD.Test/NQuads/minimal_whitespace.nq new file mode 100644 index 0000000..e9e3a80 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/minimal_whitespace.nq @@ -0,0 +1,6 @@ +. +"Alice". +_:o. +_:s. +_:s"Alice". +_:s_:bnode1. diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bad-literal-01.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bad-literal-01.nq new file mode 100644 index 0000000..bb17eb3 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bad-literal-01.nq @@ -0,0 +1 @@ + "o" . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bad-literal-02.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bad-literal-02.nq new file mode 100644 index 0000000..ea303b2 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bad-literal-02.nq @@ -0,0 +1 @@ + "o"@en . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bad-literal-03.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bad-literal-03.nq new file mode 100644 index 0000000..854b867 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bad-literal-03.nq @@ -0,0 +1 @@ + "o"^^ . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bad-quint-01.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bad-quint-01.nq new file mode 100644 index 0000000..52b7581 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bad-quint-01.nq @@ -0,0 +1,2 @@ +# N-Quads rejects a quint + . diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bad-uri-01.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bad-uri-01.nq new file mode 100644 index 0000000..3bf4dbd --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bad-uri-01.nq @@ -0,0 +1,2 @@ +# No relative IRIs in N-Quads + . diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bnode-01.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-01.nq new file mode 100644 index 0000000..b7acbd5 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-01.nq @@ -0,0 +1 @@ + _:g . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bnode-02.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-02.nq new file mode 100644 index 0000000..07c9263 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-02.nq @@ -0,0 +1 @@ +_:s _:g . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bnode-03.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-03.nq new file mode 100644 index 0000000..5f89bd9 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-03.nq @@ -0,0 +1 @@ + _:o _:g . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bnode-04.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-04.nq new file mode 100644 index 0000000..f89ca81 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-04.nq @@ -0,0 +1 @@ + "o" _:g . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bnode-05.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-05.nq new file mode 100644 index 0000000..9bb45ce --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-05.nq @@ -0,0 +1 @@ + "o"@en _:g . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-bnode-06.nq b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-06.nq new file mode 100644 index 0000000..194ffdc --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-bnode-06.nq @@ -0,0 +1 @@ + "o"^^ _:g . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-uri-01.nq b/tests/JsonLD.Test/NQuads/nq-syntax-uri-01.nq new file mode 100644 index 0000000..3026e12 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-uri-01.nq @@ -0,0 +1 @@ + . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-uri-02.nq b/tests/JsonLD.Test/NQuads/nq-syntax-uri-02.nq new file mode 100644 index 0000000..1590ab9 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-uri-02.nq @@ -0,0 +1 @@ +_:s . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-uri-03.nq b/tests/JsonLD.Test/NQuads/nq-syntax-uri-03.nq new file mode 100644 index 0000000..4592edc --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-uri-03.nq @@ -0,0 +1 @@ + _:o . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-uri-04.nq b/tests/JsonLD.Test/NQuads/nq-syntax-uri-04.nq new file mode 100644 index 0000000..f7b834a --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-uri-04.nq @@ -0,0 +1 @@ + "o" . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-uri-05.nq b/tests/JsonLD.Test/NQuads/nq-syntax-uri-05.nq new file mode 100644 index 0000000..cf5a0ee --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-uri-05.nq @@ -0,0 +1 @@ + "o"@en . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nq-syntax-uri-06.nq b/tests/JsonLD.Test/NQuads/nq-syntax-uri-06.nq new file mode 100644 index 0000000..65e7703 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nq-syntax-uri-06.nq @@ -0,0 +1 @@ + "o"^^ . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-base-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-base-01.nq new file mode 100644 index 0000000..dff1b3b --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-base-01.nq @@ -0,0 +1 @@ +@base . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-esc-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-esc-01.nq new file mode 100644 index 0000000..f7a88ad --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-esc-01.nq @@ -0,0 +1,2 @@ +# Bad string escape + "a\zb" . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-esc-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-esc-02.nq new file mode 100644 index 0000000..72711d4 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-esc-02.nq @@ -0,0 +1,2 @@ +# Bad string escape + "\uWXYZ" . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-esc-03.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-esc-03.nq new file mode 100644 index 0000000..3a4522f --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-esc-03.nq @@ -0,0 +1,2 @@ +# Bad string escape + "\U0000WXYZ" . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-lang-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-lang-01.nq new file mode 100644 index 0000000..a4d952c --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-lang-01.nq @@ -0,0 +1,2 @@ +# Bad lang tag + "string"@1 . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-num-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-num-01.nq new file mode 100644 index 0000000..2be6f51 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-num-01.nq @@ -0,0 +1 @@ + 1 . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-num-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-num-02.nq new file mode 100644 index 0000000..e1d5b06 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-num-02.nq @@ -0,0 +1 @@ + 1.0 . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-num-03.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-num-03.nq new file mode 100644 index 0000000..a9be82f --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-num-03.nq @@ -0,0 +1 @@ + 1.0e0 . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-prefix-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-prefix-01.nq new file mode 100644 index 0000000..89e08cc --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-prefix-01.nq @@ -0,0 +1 @@ +@prefix : . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-01.nq new file mode 100644 index 0000000..988af87 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-01.nq @@ -0,0 +1 @@ + "abc' . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-02.nq new file mode 100644 index 0000000..e1d5b06 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-02.nq @@ -0,0 +1 @@ + 1.0 . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-03.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-03.nq new file mode 100644 index 0000000..64d343d --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-03.nq @@ -0,0 +1 @@ + 1.0e1 . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-04.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-04.nq new file mode 100644 index 0000000..af4ff28 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-04.nq @@ -0,0 +1 @@ + '''abc''' . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-05.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-05.nq new file mode 100644 index 0000000..75ad4b2 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-05.nq @@ -0,0 +1 @@ + """abc""" . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-06.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-06.nq new file mode 100644 index 0000000..56dcbc6 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-06.nq @@ -0,0 +1 @@ + "abc . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-07.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-07.nq new file mode 100644 index 0000000..7f1ee80 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-string-07.nq @@ -0,0 +1 @@ + abc" . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-struct-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-struct-01.nq new file mode 100644 index 0000000..d546d56 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-struct-01.nq @@ -0,0 +1 @@ + , . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-struct-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-struct-02.nq new file mode 100644 index 0000000..1f388c6 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-struct-02.nq @@ -0,0 +1 @@ + ; , . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-01.nq new file mode 100644 index 0000000..0e69dc0 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-01.nq @@ -0,0 +1,2 @@ +# Bad IRI : space. + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-02.nq new file mode 100644 index 0000000..36d91af --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-02.nq @@ -0,0 +1,2 @@ +# Bad IRI : bad escape + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-03.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-03.nq new file mode 100644 index 0000000..f512345 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-03.nq @@ -0,0 +1,2 @@ +# Bad IRI : bad escape + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-04.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-04.nq new file mode 100644 index 0000000..5cab062 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-04.nq @@ -0,0 +1,2 @@ +# Bad IRI : character escapes not allowed. + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-05.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-05.nq new file mode 100644 index 0000000..be0a21e --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-05.nq @@ -0,0 +1,2 @@ +# Bad IRI : character escapes not allowed. + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-06.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-06.nq new file mode 100644 index 0000000..b4e6459 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-06.nq @@ -0,0 +1,2 @@ +# No relative IRIs in N-Triples + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-07.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-07.nq new file mode 100644 index 0000000..74534dd --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-07.nq @@ -0,0 +1,2 @@ +# No relative IRIs in N-Triples +

. diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-08.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-08.nq new file mode 100644 index 0000000..41a953d --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-08.nq @@ -0,0 +1,2 @@ +# No relative IRIs in N-Triples + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-09.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-09.nq new file mode 100644 index 0000000..58821da --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bad-uri-09.nq @@ -0,0 +1,2 @@ +# No relative IRIs in N-Triples + "foo"^^

. diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bnode-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bnode-01.nq new file mode 100644 index 0000000..5fb0d0f --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bnode-01.nq @@ -0,0 +1 @@ +_:a . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bnode-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bnode-02.nq new file mode 100644 index 0000000..737e81b --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bnode-02.nq @@ -0,0 +1,2 @@ + _:a . +_:a . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-bnode-03.nq b/tests/JsonLD.Test/NQuads/nt-syntax-bnode-03.nq new file mode 100644 index 0000000..1a1f1c9 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-bnode-03.nq @@ -0,0 +1,2 @@ + _:1a . +_:1a . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-datatypes-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-datatypes-01.nq new file mode 100644 index 0000000..9126309 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-datatypes-01.nq @@ -0,0 +1 @@ + "123"^^ . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-datatypes-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-datatypes-02.nq new file mode 100644 index 0000000..d49cc27 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-datatypes-02.nq @@ -0,0 +1 @@ + "123"^^ . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-file-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-file-01.nq new file mode 100644 index 0000000..e69de29 diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-file-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-file-02.nq new file mode 100644 index 0000000..e6d327d --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-file-02.nq @@ -0,0 +1 @@ +#Empty file. diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-file-03.nq b/tests/JsonLD.Test/NQuads/nt-syntax-file-03.nq new file mode 100644 index 0000000..a9ca035 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-file-03.nq @@ -0,0 +1,2 @@ +#One comment, one empty line. + diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-str-esc-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-str-esc-01.nq new file mode 100644 index 0000000..3925f2e --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-str-esc-01.nq @@ -0,0 +1 @@ + "a\n" . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-str-esc-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-str-esc-02.nq new file mode 100644 index 0000000..e7d032f --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-str-esc-02.nq @@ -0,0 +1 @@ + "a\u0020b" . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-str-esc-03.nq b/tests/JsonLD.Test/NQuads/nt-syntax-str-esc-03.nq new file mode 100644 index 0000000..b8588c7 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-str-esc-03.nq @@ -0,0 +1 @@ + "a\U00000020b" . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-string-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-string-01.nq new file mode 100644 index 0000000..5333aef --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-string-01.nq @@ -0,0 +1 @@ + "string" . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-string-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-string-02.nq new file mode 100644 index 0000000..1ab55a3 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-string-02.nq @@ -0,0 +1 @@ + "string"@en . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-string-03.nq b/tests/JsonLD.Test/NQuads/nt-syntax-string-03.nq new file mode 100644 index 0000000..b34ca0f --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-string-03.nq @@ -0,0 +1 @@ + "string"@en-uk . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-subm-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-subm-01.nq new file mode 100644 index 0000000..91b4988 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-subm-01.nq @@ -0,0 +1,79 @@ +# +# Copyright World Wide Web Consortium, (Massachusetts Institute of +# Technology, Institut National de Recherche en Informatique et en +# Automatique, Keio University). +# +# All Rights Reserved. +# +# Please see the full Copyright clause at +# +# +# Test file with a variety of legal N-Triples +# +# Dave Beckett - http://purl.org/net/dajobe/ +# +# $Id: test.nt,v 1.7 2003/10/06 15:52:19 dbeckett2 Exp $ +# +##################################################################### + +# comment lines + # comment line after whitespace +# empty blank line, then one with spaces and tabs + + + . +_:anon . + _:anon . +# spaces and tabs throughout: + . + +# line ending with CR NL (ASCII 13, ASCII 10) + . + +# 2 statement lines separated by single CR (ASCII 10) + . + . + + +# All literal escapes + "simple literal" . + "backslash:\\" . + "dquote:\"" . + "newline:\n" . + "return\r" . + "tab:\t" . + +# Space is optional before final . + . + "x". + _:anon. + +# \u and \U escapes +# latin small letter e with acute symbol \u00E9 - 3 UTF-8 bytes #xC3 #A9 + "\u00E9" . +# Euro symbol \u20ac - 3 UTF-8 bytes #xE2 #x82 #xAC + "\u20AC" . +# resource18 test removed +# resource19 test removed +# resource20 test removed + +# XML Literals as Datatyped Literals + ""^^ . + " "^^ . + "x"^^ . + "\""^^ . + ""^^ . + "a "^^ . + "a c"^^ . + "a\n\nc"^^ . + "chat"^^ . +# resource28 test removed 2003-08-03 +# resource29 test removed 2003-08-03 + +# Plain literals with languages + "chat"@fr . + "chat"@en . + +# Typed Literals + "abc"^^ . +# resource33 test removed 2003-08-03 diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-uri-01.nq b/tests/JsonLD.Test/NQuads/nt-syntax-uri-01.nq new file mode 100644 index 0000000..02e6ba9 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-uri-01.nq @@ -0,0 +1 @@ + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-uri-02.nq b/tests/JsonLD.Test/NQuads/nt-syntax-uri-02.nq new file mode 100644 index 0000000..664feea --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-uri-02.nq @@ -0,0 +1,2 @@ +# x53 is capital S + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-uri-03.nq b/tests/JsonLD.Test/NQuads/nt-syntax-uri-03.nq new file mode 100644 index 0000000..b5aeb26 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-uri-03.nq @@ -0,0 +1,2 @@ +# x53 is capital S + . diff --git a/tests/JsonLD.Test/NQuads/nt-syntax-uri-04.nq b/tests/JsonLD.Test/NQuads/nt-syntax-uri-04.nq new file mode 100644 index 0000000..49bacca --- /dev/null +++ b/tests/JsonLD.Test/NQuads/nt-syntax-uri-04.nq @@ -0,0 +1,2 @@ +# IRI with all chars in it. + . diff --git a/tests/JsonLD.Test/NQuads/rdf11blanknodes.nq b/tests/JsonLD.Test/NQuads/rdf11blanknodes.nq new file mode 100644 index 0000000..be74b00 --- /dev/null +++ b/tests/JsonLD.Test/NQuads/rdf11blanknodes.nq @@ -0,0 +1,2 @@ +# blank nodes with hyphen and period +_:aa-aa _:bb.bb . \ No newline at end of file diff --git a/tests/JsonLD.Test/NQuadsParserTests.cs b/tests/JsonLD.Test/NQuadsParserTests.cs new file mode 100644 index 0000000..83faeb0 --- /dev/null +++ b/tests/JsonLD.Test/NQuadsParserTests.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using JsonLD.Core; +using JsonLD.Impl; +using Newtonsoft.Json.Linq; +using Xunit; +using Xunit.Extensions; + +namespace JsonLD.Test +{ + public class NQuadsParserTests + { + private const string BasePath = @"NQuads\"; + private const string ManifestPath = BasePath + "manifest.ttl"; + private static readonly JObject ManifestFrame = JObject.Parse(@" +{ + '@context': { + 'mf': 'http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#', + 'rdfs': 'http://www.w3.org/2000/01/rdf-schema#', + 'rdft': 'http://www.w3.org/ns/rdftest#', + 'mf:entries': { '@container': '@list'}, + 'mf:action': { '@type': '@id'} + }, + '@type': 'mf:Manifest' +}"); + + private readonly NQuadRDFParser _parser; + + public NQuadsParserTests() + { + _parser = new NQuadRDFParser(); + } + + [Theory] + [PropertyData("PositiveTestCases")] + public void PositiveParseTest(string path) + { + // given + string quads = File.ReadAllText(BasePath + path); + + // when + _parser.Parse(quads); + } + + [Theory] + [PropertyData("NegativeTestCases")] + public void NegativeParseTest(string path) + { + // given + string quads = File.ReadAllText(BasePath + path); + + // when + Assert.Throws(() => _parser.Parse(quads)); + } + + [Fact] + public void ParseBlankNodesTest() + { + // given + const string path = "rdf11blanknodes.nq"; + string quads = File.ReadAllText(BasePath + path); + + // when + _parser.Parse(quads); + } + + public static IEnumerable PositiveTestCases + { + get + { + var manifest = JsonLdProcessor.FromRDF(File.ReadAllText(ManifestPath), new TurtleRDFParser()); + var framed = JsonLdProcessor.Frame(manifest, ManifestFrame, new JsonLdOptions()); + + return from testCase in framed["@graph"][0]["mf:entries"] + where (string)testCase["@type"] != "rdft:TestNQuadsNegativeSyntax" + select new object[] { (string)testCase["mf:action"] }; + } + } + + public static IEnumerable NegativeTestCases + { + get + { + var manifest = JsonLdProcessor.FromRDF(File.ReadAllText(ManifestPath), new TurtleRDFParser()); + var framed = JsonLdProcessor.Frame(manifest, ManifestFrame, new JsonLdOptions()); + + return from testCase in framed["@graph"][0]["mf:entries"] + where (string)testCase["@type"] == "rdft:TestNQuadsNegativeSyntax" + select new object[] { (string)testCase["mf:action"] }; + } + } + } +} \ No newline at end of file diff --git a/tests/JsonLD.Test/packages.config b/tests/JsonLD.Test/packages.config index 8f1db80..45263aa 100644 --- a/tests/JsonLD.Test/packages.config +++ b/tests/JsonLD.Test/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file