public void ConformanceTestPasses(string id, string testname, ConformanceCase conformanceCase)
        {
            JToken result = conformanceCase.run();

            if (conformanceCase.error != null)
            {
                Assert.True(((string)result["error"]).StartsWith((string)conformanceCase.error), "Resulting error doesn't match expectations.");
            }
            else
            {
                if (!JsonLdUtils.DeepCompare(result, conformanceCase.output))
                {
                    #if DEBUG
                    Console.WriteLine(id);
                    Console.WriteLine("Actual:");
                    Console.Write(JSONUtils.ToPrettyString(result));
                    Console.WriteLine("--------------------------");
                    Console.WriteLine("Expected:");
                    Console.Write(JSONUtils.ToPrettyString(conformanceCase.output));
                    Console.WriteLine("--------------------------");
                    #endif

                    Assert.True(false, "Returned JSON doesn't match expectations.");
                }
            }
        }
        public void ExtendedFunctionalityTestPasses(string id, ExtendedFunctionalityTestCase testCase)
        {
            JToken result = testCase.run();

            if (testCase.error != null)
            {
                Assert.True(((string)result["error"]).StartsWith((string)testCase.error), "Resulting error doesn't match expectations.");
            }
            else
            {
                if (!JsonLdUtils.DeepCompare(result, testCase.output, true))
                {
#if DEBUG
                    Console.WriteLine(id);
                    Console.WriteLine("Actual:");
                    Console.Write(JSONUtils.ToPrettyString(result));
                    Console.WriteLine("--------------------------");
                    Console.WriteLine("Expected:");
                    Console.Write(JSONUtils.ToPrettyString(testCase.output));
                    Console.WriteLine("--------------------------");
#endif

                    Assert.True(false, "Returned JSON doesn't match expectations.");
                }
            }
        }
Example #3
0
        static void Main(string[] args)
        {
            var input    = GetJson("TestCases\\event-input.jsonld");
            var expected = File.ReadAllText("TestCases\\event-output.nq").Replace("\\", "");

            var options = new JsonLdOptions("http://json-ld.org/test-suite/tests/startup");

            options.format = "application/nquads";
            var result = new JValue(((string)JsonLdProcessor.ToRDF(input, options)).Replace("\n", "\r\n"));

            Console.WriteLine(JSONUtils.ToPrettyString(result));
            Console.WriteLine(JSONUtils.ToPrettyString(result) == JSONUtils.ToPrettyString(expected));
            bool isSame = JsonLdUtils.DeepCompare(result, expected);

            Console.WriteLine(JsonLdUtils.DeepCompare(result, expected));
        }
Example #4
0
        private INode MakeNode(IRdfHandler handler, JToken token, Uri graphIri, bool allowRelativeIri = false)
        {
            if (token is JValue)
            {
                var stringValue = token.Value <string>();
                if (JsonLdUtils.IsBlankNodeIdentifier(stringValue))
                {
                    return(handler.CreateBlankNode(stringValue.Substring(2)));
                }
                if (Uri.TryCreate(stringValue, allowRelativeIri ? UriKind.RelativeOrAbsolute : UriKind.Absolute, out Uri iri))
                {
                    if (!Uri.IsWellFormedUriString(stringValue, allowRelativeIri ? UriKind.RelativeOrAbsolute : UriKind.Absolute))
                    {
                        return(null);
                    }
                    return(handler.CreateUriNode(iri));
                }
                return(null);
            }

            if (JsonLdUtils.IsValueObject(token))
            {
                string literalValue = null;
                var    valueObject  = token as JObject;
                var    value        = valueObject["@value"];
                var    datatype     = valueObject.Property("@type")?.Value.Value <string>();
                var    language     = valueObject.Property("@language")?.Value.Value <string>();
                if (datatype == "@json")
                {
                    datatype = RdfNs + "JSON";
                    var serializer = new JsonLiteralSerializer();
                    literalValue = serializer.Serialize(value);
                }
                else if (value.Type == JTokenType.Boolean)
                {
                    literalValue = value.Value <bool>() ? "true" : "false";
                    if (datatype == null)
                    {
                        datatype = XsdNs + "boolean";
                    }
                }
                else if (value.Type == JTokenType.Float ||
                         value.Type == JTokenType.Integer && datatype != null && datatype.Equals(XsdNs + "double"))
                {
                    var doubleValue  = value.Value <double>();
                    var roundedValue = Math.Round(doubleValue);
                    if (doubleValue.Equals(roundedValue) && doubleValue < 1000000000000000000000.0 && datatype == null)
                    {
                        // Integer values up to 10^21 should be rendered as a fixed-point integer
                        literalValue = roundedValue.ToString("F0");
                        datatype     = XsdNs + "integer";
                    }
                    else
                    {
                        literalValue = value.Value <double>().ToString("E15", CultureInfo.InvariantCulture);
                        literalValue = ExponentialFormatMatcher.Replace(literalValue, "$1E");
                        if (literalValue.EndsWith("E"))
                        {
                            literalValue = literalValue + "0";
                        }
                        if (datatype == null)
                        {
                            datatype = XsdNs + "double";
                        }
                    }
                }
                else if (value.Type == JTokenType.Integer ||
                         value.Type == JTokenType.Float && datatype != null && datatype.Equals(XsdNs + "integer"))
                {
                    literalValue = value.Value <long>().ToString("D", CultureInfo.InvariantCulture);
                    if (datatype == null)
                    {
                        datatype = XsdNs + "integer";
                    }
                }
                else if (valueObject.ContainsKey("@direction") && ParserOptions.RdfDirection.HasValue)
                {
                    literalValue = value.Value <string>();
                    var direction = valueObject["@direction"].Value <string>();
                    language = valueObject.ContainsKey("@language")
                        ? valueObject["@language"].Value <string>().ToLowerInvariant()
                        : string.Empty;
                    if (ParserOptions.RdfDirection == JsonLdRdfDirectionMode.I18NDatatype)
                    {
                        datatype = "https://www.w3.org/ns/i18n#" + language + "_" + direction;
                        return(handler.CreateLiteralNode(literalValue, new Uri(datatype)));
                    }
                    // Otherwise direction mode is CompoundLiteral
                    var literalNode = handler.CreateBlankNode();
                    var xsdString   =
                        UriFactory.Create(XmlSpecsHelper.XmlSchemaDataTypeString);
                    handler.HandleTriple(new Triple(
                                             literalNode,
                                             handler.CreateUriNode(UriFactory.Create(RdfSpecsHelper.RdfValue)),
                                             handler.CreateLiteralNode(literalValue, xsdString),
                                             graphIri));
                    if (!string.IsNullOrEmpty(language))
                    {
                        handler.HandleTriple(new Triple(
                                                 literalNode,
                                                 handler.CreateUriNode(UriFactory.Create(RdfSpecsHelper.RdfLanguage)),
                                                 handler.CreateLiteralNode(language, xsdString),
                                                 graphIri));
                    }

                    handler.HandleTriple(new Triple(
                                             literalNode,
                                             handler.CreateUriNode(UriFactory.Create(RdfSpecsHelper.RdfDirection)),
                                             handler.CreateLiteralNode(direction, xsdString),
                                             graphIri));

                    return(literalNode);
                }
                else
                {
                    literalValue = value.Value <string>();
                    if (datatype == null && language == null)
                    {
                        datatype = XsdNs + "string";
                    }
                }

                if (language != null)
                {
                    return(LanguageTag.IsWellFormed(language) ? handler.CreateLiteralNode(literalValue, language) : null);
                }
                return(handler.CreateLiteralNode(literalValue, new Uri(datatype)));
            }
            if (JsonLdUtils.IsListObject(token))
            {
                var listArray = token["@list"] as JArray;
                return(MakeRdfList(handler, listArray, graphIri));
            }

            if ((token as JObject)?.Property("@id") != null)
            {
                // Must be a node object
                var nodeObject = (JObject)token;
                return(MakeNode(handler, nodeObject["@id"], graphIri));
            }

            return(null);
        }
Example #5
0
        /// <inheritdoc/>
        public void Load(IRdfHandler handler, TextReader input)
        {
            handler.StartRdf();
            var rdfTypeNode = handler.CreateUriNode(new Uri(RdfNs + "type"));

            try
            {
                JToken element;
                using (var reader = new JsonTextReader(input)
                {
                    DateParseHandling = DateParseHandling.None
                })
                {
                    element = JToken.ReadFrom(reader);
                }
                var expandedElement  = JsonLdProcessor.Expand(element, ParserOptions);
                var nodeMapGenerator = new NodeMapGenerator();
                var nodeMap          = nodeMapGenerator.GenerateNodeMap(expandedElement);
                foreach (var p in nodeMap.Properties())
                {
                    var graphName = p.Name;
                    var graph     = p.Value as JObject;
                    if (graph == null)
                    {
                        continue;
                    }
                    Uri graphIri;
                    if (graphName == "@default")
                    {
                        graphIri = null;
                    }
                    else
                    {
                        if (IsBlankNodeIdentifier(graphName))
                        {
                            graphIri = new Uri("nquads:bnode:" + graphName.Substring(2));
                        }
                        else if (!(Uri.TryCreate(graphName, UriKind.Absolute, out graphIri) && graphIri.IsWellFormedOriginalString()))
                        {
                            continue;
                        }
                    }
                    foreach (var gp in graph.Properties())
                    {
                        var   subject = gp.Name;
                        var   node    = gp.Value as JObject;
                        INode subjectNode;
                        if (IsBlankNodeIdentifier(subject))
                        {
                            subjectNode = handler.CreateBlankNode(subject.Substring(2));
                        }
                        else
                        {
                            if (!(Uri.TryCreate(subject, UriKind.Absolute, out var subjectIri) && subjectIri.IsWellFormedOriginalString()))
                            {
                                continue;
                            }
                            subjectNode = handler.CreateUriNode(subjectIri);
                        }
                        foreach (var np in node.Properties())
                        {
                            var property = np.Name;
                            var values   = np.Value as JArray;
                            if (property.Equals("@type"))
                            {
                                foreach (var type in values)
                                {
                                    var typeNode = MakeNode(handler, type, graphIri);
                                    if (typeNode != null)
                                    {
                                        handler.HandleTriple(new Triple(subjectNode, rdfTypeNode, typeNode, graphIri));
                                    }
                                }
                            }
                            else if (JsonLdUtils.IsBlankNodeIdentifier(property) && ParserOptions.ProduceGeneralizedRdf ||
                                     Uri.IsWellFormedUriString(property, UriKind.Absolute))
                            {
                                foreach (var item in values)
                                {
                                    var predicateNode = MakeNode(handler, property, graphIri);
                                    var objectNode    = MakeNode(handler, item, graphIri);
                                    if (predicateNode != null && objectNode != null)
                                    {
                                        handler.HandleTriple(new Triple(subjectNode, predicateNode, objectNode,
                                                                        graphIri));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
                handler.EndRdf(false);
                throw;
            }
            handler.EndRdf(true);
        }