diff --git a/graph/formats/rdf/LICENSE.md b/graph/formats/rdf/LICENSE.md
index 18aee556..9ddabcbe 100644
--- a/graph/formats/rdf/LICENSE.md
+++ b/graph/formats/rdf/LICENSE.md
@@ -1,9 +1,10 @@
Test suite license
-This document refers to nquad_tests.tar.gz and ntriple_tests.tar.gz. The original files can be obtained here:
+This document refers to nquad_tests.tar.gz, ntriple_tests.tar.gz and normalization tests in testdata. The original files can be obtained here:
- [nquad_tests.tar.gz](https://w3c.github.io/rdf-tests/nquads/TESTS.tar.gz)
- [ntriple_tests.tar.gz](https://w3c.github.io/rdf-tests/ntriples/TESTS.tar.gz)
+- [normalization tests](https://json-ld.github.io/rdf-dataset-canonicalization/).
Distributed under both the [W3C Test Suite License](https://www.w3.org/Consortium/Legal/2008/04-testsuite-license) and the [W3C 3-clause BSD License](https://www.w3.org/Consortium/Legal/2008/03-bsd-license).
To contribute to a W3C Test Suite, see the [policies and contribution forms](href="https://www.w3.org/2004/10/27-testcases").
diff --git a/graph/formats/rdf/testdata/index.html b/graph/formats/rdf/testdata/index.html
new file mode 100644
index 00000000..f24a2ce7
--- /dev/null
+++ b/graph/formats/rdf/testdata/index.html
@@ -0,0 +1,3124 @@
+
+
+
+
+
+
+
+
+ RDF Dataset Normalization Test Cases
+
+
+
+
+
+
+
+
+
+ RDF Dataset Normalization Test Cases
+ Includes manifests for different application profiles.
+ This page describes RDF Dataset Normalization tests for URGNA2012 and URDNA2015 profiles. These tests are also described in JSON-LD and Turtle formats for convenience. The manifest vocabulary is described in the RDF Dataset Normalization Test Vocabulary (JSON-LD , Turtle ) and is based on the RDF Test Vocabulary .
+ General instructions for running the RDF Dataset Normalization Test suites
+ FIXME
+ Contributing Tests
+ The test manifests and entries are built automatically from manifest.csv using mk_manifest.rb , where each row defines a combination of RDF, JSON and Validation tests for the same action and implicit files. Tests may be contributed via pull request to https://github.com/json-ld/normalization with suitable changes to the manifest.csv and necessary action and result files. Tests will also be considered if a contribution is sent to public-credentials@w3.org .
+ Distribution
+ Distributed under both the W3C Test Suite License and the W3C 3-clause BSD License . To contribute to a W3C Test Suite, see the policies and contribution forms .
+ Disclaimer
+ UNDER BOTH MUTUALLY EXCLUSIVE LICENSES, THIS DOCUMENT AND ALL DOCUMENTS, TESTS AND SOFTWARE THAT LINK THIS STATEMENT ARE PROVIDED “AS IS,” AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.
+
+
+
+
+
+
diff --git a/graph/formats/rdf/testdata/manifest-urdna2015.jsonld b/graph/formats/rdf/testdata/manifest-urdna2015.jsonld
new file mode 100644
index 00000000..7de18e12
--- /dev/null
+++ b/graph/formats/rdf/testdata/manifest-urdna2015.jsonld
@@ -0,0 +1,596 @@
+{
+ "@context": {
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
+ "mf": "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#",
+ "mq": "http://www.w3.org/2001/sw/DataAccess/tests/test-query#",
+ "rdfn": "http://json-ld.github.io/normalization/test-vocab#",
+ "rdft": "http://www.w3.org/ns/rdftest#",
+ "id": "@id",
+ "type": "@type",
+ "action": {
+ "@id": "mf:action",
+ "@type": "@id"
+ },
+ "approval": {
+ "@id": "rdft:approval",
+ "@type": "@id"
+ },
+ "comment": "rdfs:comment",
+ "entries": {
+ "@id": "mf:entries",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "label": "rdfs:label",
+ "name": "mf:name",
+ "result": {
+ "@id": "mf:result",
+ "@type": "@id"
+ }
+ },
+ "id": "manifest-urdna2015",
+ "type": "mf:Manifest",
+ "label": "RDF Dataset Normalization (URDNA2015)",
+ "comment": "Tests the 2015 version of RDF Dataset Normalization.",
+ "entries": [
+ {
+ "id": "manifest-urdna2015#test001",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "simple id",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test001-in.nq",
+ "result": "test001-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test002",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "duplicate property iri values",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test002-in.nq",
+ "result": "test002-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test003",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "bnode",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test003-in.nq",
+ "result": "test003-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test004",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "bnode plus embed w/subject",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test004-in.nq",
+ "result": "test004-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test005",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "bnode embed",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test005-in.nq",
+ "result": "test005-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test006",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "multiple rdf types",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test006-in.nq",
+ "result": "test006-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test007",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "coerce CURIE value",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test007-in.nq",
+ "result": "test007-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test008",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "single subject complex",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test008-in.nq",
+ "result": "test008-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test009",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "multiple subjects - complex",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test009-in.nq",
+ "result": "test009-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test010",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "type",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test010-in.nq",
+ "result": "test010-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test011",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "type-coerced type",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test011-in.nq",
+ "result": "test011-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test012",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "type-coerced type, remove duplicate reference",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test012-in.nq",
+ "result": "test012-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test013",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "type-coerced type, cycle",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test013-in.nq",
+ "result": "test013-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test014",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "check types",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test014-in.nq",
+ "result": "test014-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test015",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "top level context",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test015-in.nq",
+ "result": "test015-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test016",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - dual link - embed",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test016-in.nq",
+ "result": "test016-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test017",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - dual link - non-embed",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test017-in.nq",
+ "result": "test017-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test018",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - self link",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test018-in.nq",
+ "result": "test018-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test019",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - disjoint self links",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test019-in.nq",
+ "result": "test019-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test020",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - diamond",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test020-in.nq",
+ "result": "test020-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test021",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - circle of 2",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test021-in.nq",
+ "result": "test021-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test022",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - double circle of 2",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test022-in.nq",
+ "result": "test022-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test023",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - circle of 3",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test023-in.nq",
+ "result": "test023-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test024",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - double circle of 3 (1-2-3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test024-in.nq",
+ "result": "test024-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test025",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - double circle of 3 (1-3-2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test025-in.nq",
+ "result": "test025-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test026",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - double circle of 3 (2-1-3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test026-in.nq",
+ "result": "test026-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test027",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - double circle of 3 (2-3-1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test027-in.nq",
+ "result": "test027-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test028",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - double circle of 3 (3-2-1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test028-in.nq",
+ "result": "test028-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test029",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - double circle of 3 (3-1-2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test029-in.nq",
+ "result": "test029-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test030",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "blank node - point at circle of 3",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test030-in.nq",
+ "result": "test030-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test031",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "bnode (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test031-in.nq",
+ "result": "test031-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test032",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "bnode (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test032-in.nq",
+ "result": "test032-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test033",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "disjoint identical subgraphs (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test033-in.nq",
+ "result": "test033-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test034",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "disjoint identical subgraphs (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test034-in.nq",
+ "result": "test034-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test035",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "reordered w/strings (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test035-in.nq",
+ "result": "test035-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test036",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "reordered w/strings (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test036-in.nq",
+ "result": "test036-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test037",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "reordered w/strings (3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test037-in.nq",
+ "result": "test037-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test038",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "reordered 4 bnodes, reordered 2 properties (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test038-in.nq",
+ "result": "test038-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test039",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "reordered 4 bnodes, reordered 2 properties (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test039-in.nq",
+ "result": "test039-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test040",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "reordered 6 bnodes (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test040-in.nq",
+ "result": "test040-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test041",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "reordered 6 bnodes (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test041-in.nq",
+ "result": "test041-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test042",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "reordered 6 bnodes (3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test042-in.nq",
+ "result": "test042-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test043",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "literal with language",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test043-in.nq",
+ "result": "test043-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test044",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "evil (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test044-in.nq",
+ "result": "test044-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test045",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "evil (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test045-in.nq",
+ "result": "test045-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test046",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "evil (3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test046-in.nq",
+ "result": "test046-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test047",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "deep diff (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test047-in.nq",
+ "result": "test047-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test048",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "deep diff (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test048-in.nq",
+ "result": "test048-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test049",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "remove null",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test049-in.nq",
+ "result": "test049-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test050",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "nulls",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test050-in.nq",
+ "result": "test050-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test051",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "merging subjects",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test051-in.nq",
+ "result": "test051-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test052",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "alias keywords",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test052-in.nq",
+ "result": "test052-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test053",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "@list",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test053-in.nq",
+ "result": "test053-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test054",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "t-graph",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test054-in.nq",
+ "result": "test054-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test055",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "simple reorder (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test055-in.nq",
+ "result": "test055-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test056",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "simple reorder (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test056-in.nq",
+ "result": "test056-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test057",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "unnamed graph",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test057-in.nq",
+ "result": "test057-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test058",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "unnamed graph with blank node objects",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test058-in.nq",
+ "result": "test058-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test059",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "n-quads parsing",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test059-in.nq",
+ "result": "test059-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test060",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "n-quads escaping",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test060-in.nq",
+ "result": "test060-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test061",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "same literal value with multiple languages",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test061-in.nq",
+ "result": "test061-urdna2015.nq"
+ },
+ {
+ "id": "manifest-urdna2015#test062",
+ "type": "rdfn:Urdna2015EvalTest",
+ "name": "same literal value with multiple datatypes",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test062-in.nq",
+ "result": "test062-urdna2015.nq"
+ }
+ ]
+}
diff --git a/graph/formats/rdf/testdata/manifest-urdna2015.ttl b/graph/formats/rdf/testdata/manifest-urdna2015.ttl
new file mode 100644
index 00000000..af6fd1e2
--- /dev/null
+++ b/graph/formats/rdf/testdata/manifest-urdna2015.ttl
@@ -0,0 +1,467 @@
+## RDF Dataset Normalization tests
+## Distributed under both the W3C Test Suite License[1] and the W3C 3-
+## clause BSD License[2]. To contribute to a W3C Test Suite, see the
+## policies and contribution forms [3]
+##
+## 1. http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+## 2. http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+## 3. http://www.w3.org/2004/10/27-testcases
+##
+## Test types
+## * rdfn:Urgna2012EvalTest - Normalization using URGNA2012
+## * rdfn:Urdna2015EvalTest - Normalization using URDNA2015
+
+@prefix : .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix mf: .
+@prefix rdft: .
+@prefix rdfn: .
+
+ a mf:Manifest ;
+
+ rdfs:label "RDF Dataset Normalization (URDNA2015)";
+ rdfs:comment "Tests the 2015 version of RDF Dataset Normalization.";
+ mf:entries (
+ :test001 :test002 :test003 :test004 :test005 :test006 :test007 :test008 :test009 :test010
+ :test011 :test012 :test013 :test014 :test015 :test016 :test017 :test018 :test019 :test020
+ :test021 :test022 :test023 :test024 :test025 :test026 :test027 :test028 :test029 :test030
+ :test031 :test032 :test033 :test034 :test035 :test036 :test037 :test038 :test039 :test040
+ :test041 :test042 :test043 :test044 :test045 :test046 :test047 :test048 :test049 :test050
+ :test051 :test052 :test053 :test054 :test055 :test056 :test057 :test058 :test059 :test060
+ :test061 :test062
+ ) .
+
+:test001 a rdfn:Urdna2015EvalTest;
+ mf:name "simple id";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test002 a rdfn:Urdna2015EvalTest;
+ mf:name "duplicate property iri values";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test003 a rdfn:Urdna2015EvalTest;
+ mf:name "bnode";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test004 a rdfn:Urdna2015EvalTest;
+ mf:name "bnode plus embed w/subject";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test005 a rdfn:Urdna2015EvalTest;
+ mf:name "bnode embed";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test006 a rdfn:Urdna2015EvalTest;
+ mf:name "multiple rdf types";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test007 a rdfn:Urdna2015EvalTest;
+ mf:name "coerce CURIE value";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test008 a rdfn:Urdna2015EvalTest;
+ mf:name "single subject complex";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test009 a rdfn:Urdna2015EvalTest;
+ mf:name "multiple subjects - complex";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test010 a rdfn:Urdna2015EvalTest;
+ mf:name "type";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test011 a rdfn:Urdna2015EvalTest;
+ mf:name "type-coerced type";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test012 a rdfn:Urdna2015EvalTest;
+ mf:name "type-coerced type, remove duplicate reference";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test013 a rdfn:Urdna2015EvalTest;
+ mf:name "type-coerced type, cycle";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test014 a rdfn:Urdna2015EvalTest;
+ mf:name "check types";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test015 a rdfn:Urdna2015EvalTest;
+ mf:name "top level context";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test016 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - dual link - embed";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test017 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - dual link - non-embed";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test018 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - self link";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test019 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - disjoint self links";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test020 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - diamond";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test021 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - circle of 2";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test022 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - double circle of 2";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test023 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - circle of 3";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test024 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - double circle of 3 (1-2-3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test025 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - double circle of 3 (1-3-2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test026 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - double circle of 3 (2-1-3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test027 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - double circle of 3 (2-3-1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test028 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - double circle of 3 (3-2-1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test029 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - double circle of 3 (3-1-2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test030 a rdfn:Urdna2015EvalTest;
+ mf:name "blank node - point at circle of 3";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test031 a rdfn:Urdna2015EvalTest;
+ mf:name "bnode (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test032 a rdfn:Urdna2015EvalTest;
+ mf:name "bnode (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test033 a rdfn:Urdna2015EvalTest;
+ mf:name "disjoint identical subgraphs (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test034 a rdfn:Urdna2015EvalTest;
+ mf:name "disjoint identical subgraphs (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test035 a rdfn:Urdna2015EvalTest;
+ mf:name "reordered w/strings (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test036 a rdfn:Urdna2015EvalTest;
+ mf:name "reordered w/strings (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test037 a rdfn:Urdna2015EvalTest;
+ mf:name "reordered w/strings (3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test038 a rdfn:Urdna2015EvalTest;
+ mf:name "reordered 4 bnodes, reordered 2 properties (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test039 a rdfn:Urdna2015EvalTest;
+ mf:name "reordered 4 bnodes, reordered 2 properties (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test040 a rdfn:Urdna2015EvalTest;
+ mf:name "reordered 6 bnodes (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test041 a rdfn:Urdna2015EvalTest;
+ mf:name "reordered 6 bnodes (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test042 a rdfn:Urdna2015EvalTest;
+ mf:name "reordered 6 bnodes (3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test043 a rdfn:Urdna2015EvalTest;
+ mf:name "literal with language";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test044 a rdfn:Urdna2015EvalTest;
+ mf:name "evil (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test045 a rdfn:Urdna2015EvalTest;
+ mf:name "evil (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test046 a rdfn:Urdna2015EvalTest;
+ mf:name "evil (3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test047 a rdfn:Urdna2015EvalTest;
+ mf:name "deep diff (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test048 a rdfn:Urdna2015EvalTest;
+ mf:name "deep diff (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test049 a rdfn:Urdna2015EvalTest;
+ mf:name "remove null";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test050 a rdfn:Urdna2015EvalTest;
+ mf:name "nulls";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test051 a rdfn:Urdna2015EvalTest;
+ mf:name "merging subjects";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test052 a rdfn:Urdna2015EvalTest;
+ mf:name "alias keywords";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test053 a rdfn:Urdna2015EvalTest;
+ mf:name "@list";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test054 a rdfn:Urdna2015EvalTest;
+ mf:name "t-graph";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test055 a rdfn:Urdna2015EvalTest;
+ mf:name "simple reorder (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test056 a rdfn:Urdna2015EvalTest;
+ mf:name "simple reorder (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test057 a rdfn:Urdna2015EvalTest;
+ mf:name "unnamed graph";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test058 a rdfn:Urdna2015EvalTest;
+ mf:name "unnamed graph with blank node objects";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test059 a rdfn:Urdna2015EvalTest;
+ mf:name "n-quads parsing";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test060 a rdfn:Urdna2015EvalTest;
+ mf:name "n-quads escaping";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test061 a rdfn:Urdna2015EvalTest;
+ mf:name "same literal value with multiple languages";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test062 a rdfn:Urdna2015EvalTest;
+ mf:name "same literal value with multiple datatypes";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
diff --git a/graph/formats/rdf/testdata/manifest-urgna2012.jsonld b/graph/formats/rdf/testdata/manifest-urgna2012.jsonld
new file mode 100644
index 00000000..786f84a7
--- /dev/null
+++ b/graph/formats/rdf/testdata/manifest-urgna2012.jsonld
@@ -0,0 +1,569 @@
+{
+ "@context": {
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+ "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
+ "mf": "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#",
+ "mq": "http://www.w3.org/2001/sw/DataAccess/tests/test-query#",
+ "rdfn": "http://json-ld.github.io/normalization/test-vocab#",
+ "rdft": "http://www.w3.org/ns/rdftest#",
+ "id": "@id",
+ "type": "@type",
+ "action": {
+ "@id": "mf:action",
+ "@type": "@id"
+ },
+ "approval": {
+ "@id": "rdft:approval",
+ "@type": "@id"
+ },
+ "comment": "rdfs:comment",
+ "entries": {
+ "@id": "mf:entries",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "label": "rdfs:label",
+ "name": "mf:name",
+ "result": {
+ "@id": "mf:result",
+ "@type": "@id"
+ }
+ },
+ "id": "manifest-urgna2012",
+ "type": "mf:Manifest",
+ "label": "RDF Graph Normalization (URGNA2012)",
+ "comment": "Tests the 2012 version of RDF Graph Normalization.",
+ "entries": [
+ {
+ "id": "manifest-urgna2012#test001",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "simple id",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test001-in.nq",
+ "result": "test001-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test002",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "duplicate property iri values",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test002-in.nq",
+ "result": "test002-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test003",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "bnode",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test003-in.nq",
+ "result": "test003-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test004",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "bnode plus embed w/subject",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test004-in.nq",
+ "result": "test004-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test005",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "bnode embed",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test005-in.nq",
+ "result": "test005-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test006",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "multiple rdf types",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test006-in.nq",
+ "result": "test006-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test007",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "coerce CURIE value",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test007-in.nq",
+ "result": "test007-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test008",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "single subject complex",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test008-in.nq",
+ "result": "test008-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test009",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "multiple subjects - complex",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test009-in.nq",
+ "result": "test009-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test010",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "type",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test010-in.nq",
+ "result": "test010-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test011",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "type-coerced type",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test011-in.nq",
+ "result": "test011-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test012",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "type-coerced type, remove duplicate reference",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test012-in.nq",
+ "result": "test012-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test013",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "type-coerced type, cycle",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test013-in.nq",
+ "result": "test013-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test014",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "check types",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test014-in.nq",
+ "result": "test014-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test015",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "top level context",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test015-in.nq",
+ "result": "test015-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test016",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - dual link - embed",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test016-in.nq",
+ "result": "test016-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test017",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - dual link - non-embed",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test017-in.nq",
+ "result": "test017-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test018",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - self link",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test018-in.nq",
+ "result": "test018-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test019",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - disjoint self links",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test019-in.nq",
+ "result": "test019-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test020",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - diamond",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test020-in.nq",
+ "result": "test020-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test021",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - circle of 2",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test021-in.nq",
+ "result": "test021-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test022",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - double circle of 2",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test022-in.nq",
+ "result": "test022-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test023",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - circle of 3",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test023-in.nq",
+ "result": "test023-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test024",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - double circle of 3 (1-2-3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test024-in.nq",
+ "result": "test024-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test025",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - double circle of 3 (1-3-2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test025-in.nq",
+ "result": "test025-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test026",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - double circle of 3 (2-1-3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test026-in.nq",
+ "result": "test026-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test027",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - double circle of 3 (2-3-1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test027-in.nq",
+ "result": "test027-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test028",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - double circle of 3 (3-2-1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test028-in.nq",
+ "result": "test028-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test029",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - double circle of 3 (3-1-2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test029-in.nq",
+ "result": "test029-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test030",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "blank node - point at circle of 3",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test030-in.nq",
+ "result": "test030-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test031",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "bnode (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test031-in.nq",
+ "result": "test031-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test032",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "bnode (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test032-in.nq",
+ "result": "test032-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test033",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "disjoint identical subgraphs (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test033-in.nq",
+ "result": "test033-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test034",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "disjoint identical subgraphs (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test034-in.nq",
+ "result": "test034-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test035",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "reordered w/strings (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test035-in.nq",
+ "result": "test035-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test036",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "reordered w/strings (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test036-in.nq",
+ "result": "test036-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test037",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "reordered w/strings (3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test037-in.nq",
+ "result": "test037-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test038",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "reordered 4 bnodes, reordered 2 properties (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test038-in.nq",
+ "result": "test038-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test039",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "reordered 4 bnodes, reordered 2 properties (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test039-in.nq",
+ "result": "test039-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test040",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "reordered 6 bnodes (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test040-in.nq",
+ "result": "test040-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test041",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "reordered 6 bnodes (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test041-in.nq",
+ "result": "test041-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test042",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "reordered 6 bnodes (3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test042-in.nq",
+ "result": "test042-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test043",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "literal with language",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test043-in.nq",
+ "result": "test043-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test044",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "evil (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test044-in.nq",
+ "result": "test044-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test045",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "evil (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test045-in.nq",
+ "result": "test045-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test046",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "evil (3)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test046-in.nq",
+ "result": "test046-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test047",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "deep diff (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test047-in.nq",
+ "result": "test047-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test048",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "deep diff (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test048-in.nq",
+ "result": "test048-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test049",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "remove null",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test049-in.nq",
+ "result": "test049-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test050",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "nulls",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test050-in.nq",
+ "result": "test050-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test051",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "merging subjects",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test051-in.nq",
+ "result": "test051-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test052",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "alias keywords",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test052-in.nq",
+ "result": "test052-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test053",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "@list",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test053-in.nq",
+ "result": "test053-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test054",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "t-graph",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test054-in.nq",
+ "result": "test054-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test055",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "simple reorder (1)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test055-in.nq",
+ "result": "test055-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test056",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "simple reorder (2)",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test056-in.nq",
+ "result": "test056-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test060",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "n-quads escaping",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test060-in.nq",
+ "result": "test060-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test061",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "same literal value with multiple languages",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test061-in.nq",
+ "result": "test061-urgna2012.nq"
+ },
+ {
+ "id": "manifest-urgna2012#test062",
+ "type": "rdfn:Urgna2012EvalTest",
+ "name": "same literal value with multiple datatypes",
+ "comment": null,
+ "approval": "rdft:Proposed",
+ "action": "test062-in.nq",
+ "result": "test062-urgna2012.nq"
+ }
+ ]
+}
diff --git a/graph/formats/rdf/testdata/manifest-urgna2012.ttl b/graph/formats/rdf/testdata/manifest-urgna2012.ttl
new file mode 100644
index 00000000..61fa02e7
--- /dev/null
+++ b/graph/formats/rdf/testdata/manifest-urgna2012.ttl
@@ -0,0 +1,445 @@
+## RDF Dataset Normalization tests
+## Distributed under both the W3C Test Suite License[1] and the W3C 3-
+## clause BSD License[2]. To contribute to a W3C Test Suite, see the
+## policies and contribution forms [3]
+##
+## 1. http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+## 2. http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+## 3. http://www.w3.org/2004/10/27-testcases
+##
+## Test types
+## * rdfn:Urgna2012EvalTest - Normalization using URGNA2012
+## * rdfn:Urdna2015EvalTest - Normalization using URDNA2015
+
+@prefix : .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix mf: .
+@prefix rdft: .
+@prefix rdfn: .
+
+ a mf:Manifest ;
+
+ rdfs:label "RDF Graph Normalization (URGNA2012)";
+ rdfs:comment "Tests the 2012 version of RDF Graph Normalization.";
+ mf:entries (
+ :test001 :test002 :test003 :test004 :test005 :test006 :test007 :test008 :test009 :test010
+ :test011 :test012 :test013 :test014 :test015 :test016 :test017 :test018 :test019 :test020
+ :test021 :test022 :test023 :test024 :test025 :test026 :test027 :test028 :test029 :test030
+ :test031 :test032 :test033 :test034 :test035 :test036 :test037 :test038 :test039 :test040
+ :test041 :test042 :test043 :test044 :test045 :test046 :test047 :test048 :test049 :test050
+ :test051 :test052 :test053 :test054 :test055 :test056 :test060 :test061 :test062
+ ) .
+
+:test001 a rdfn:Urgna2012EvalTest;
+ mf:name "simple id";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test002 a rdfn:Urgna2012EvalTest;
+ mf:name "duplicate property iri values";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test003 a rdfn:Urgna2012EvalTest;
+ mf:name "bnode";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test004 a rdfn:Urgna2012EvalTest;
+ mf:name "bnode plus embed w/subject";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test005 a rdfn:Urgna2012EvalTest;
+ mf:name "bnode embed";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test006 a rdfn:Urgna2012EvalTest;
+ mf:name "multiple rdf types";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test007 a rdfn:Urgna2012EvalTest;
+ mf:name "coerce CURIE value";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test008 a rdfn:Urgna2012EvalTest;
+ mf:name "single subject complex";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test009 a rdfn:Urgna2012EvalTest;
+ mf:name "multiple subjects - complex";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test010 a rdfn:Urgna2012EvalTest;
+ mf:name "type";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test011 a rdfn:Urgna2012EvalTest;
+ mf:name "type-coerced type";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test012 a rdfn:Urgna2012EvalTest;
+ mf:name "type-coerced type, remove duplicate reference";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test013 a rdfn:Urgna2012EvalTest;
+ mf:name "type-coerced type, cycle";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test014 a rdfn:Urgna2012EvalTest;
+ mf:name "check types";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test015 a rdfn:Urgna2012EvalTest;
+ mf:name "top level context";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test016 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - dual link - embed";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test017 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - dual link - non-embed";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test018 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - self link";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test019 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - disjoint self links";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test020 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - diamond";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test021 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - circle of 2";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test022 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - double circle of 2";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test023 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - circle of 3";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test024 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - double circle of 3 (1-2-3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test025 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - double circle of 3 (1-3-2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test026 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - double circle of 3 (2-1-3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test027 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - double circle of 3 (2-3-1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test028 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - double circle of 3 (3-2-1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test029 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - double circle of 3 (3-1-2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test030 a rdfn:Urgna2012EvalTest;
+ mf:name "blank node - point at circle of 3";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test031 a rdfn:Urgna2012EvalTest;
+ mf:name "bnode (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test032 a rdfn:Urgna2012EvalTest;
+ mf:name "bnode (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test033 a rdfn:Urgna2012EvalTest;
+ mf:name "disjoint identical subgraphs (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test034 a rdfn:Urgna2012EvalTest;
+ mf:name "disjoint identical subgraphs (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test035 a rdfn:Urgna2012EvalTest;
+ mf:name "reordered w/strings (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test036 a rdfn:Urgna2012EvalTest;
+ mf:name "reordered w/strings (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test037 a rdfn:Urgna2012EvalTest;
+ mf:name "reordered w/strings (3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test038 a rdfn:Urgna2012EvalTest;
+ mf:name "reordered 4 bnodes, reordered 2 properties (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test039 a rdfn:Urgna2012EvalTest;
+ mf:name "reordered 4 bnodes, reordered 2 properties (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test040 a rdfn:Urgna2012EvalTest;
+ mf:name "reordered 6 bnodes (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test041 a rdfn:Urgna2012EvalTest;
+ mf:name "reordered 6 bnodes (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test042 a rdfn:Urgna2012EvalTest;
+ mf:name "reordered 6 bnodes (3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test043 a rdfn:Urgna2012EvalTest;
+ mf:name "literal with language";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test044 a rdfn:Urgna2012EvalTest;
+ mf:name "evil (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test045 a rdfn:Urgna2012EvalTest;
+ mf:name "evil (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test046 a rdfn:Urgna2012EvalTest;
+ mf:name "evil (3)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test047 a rdfn:Urgna2012EvalTest;
+ mf:name "deep diff (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test048 a rdfn:Urgna2012EvalTest;
+ mf:name "deep diff (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test049 a rdfn:Urgna2012EvalTest;
+ mf:name "remove null";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test050 a rdfn:Urgna2012EvalTest;
+ mf:name "nulls";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test051 a rdfn:Urgna2012EvalTest;
+ mf:name "merging subjects";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test052 a rdfn:Urgna2012EvalTest;
+ mf:name "alias keywords";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test053 a rdfn:Urgna2012EvalTest;
+ mf:name "@list";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test054 a rdfn:Urgna2012EvalTest;
+ mf:name "t-graph";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test055 a rdfn:Urgna2012EvalTest;
+ mf:name "simple reorder (1)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test056 a rdfn:Urgna2012EvalTest;
+ mf:name "simple reorder (2)";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test060 a rdfn:Urgna2012EvalTest;
+ mf:name "n-quads escaping";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result ;
+ .
+
+:test061 a rdfn:Urgna2012EvalTest;
+ mf:name "same literal value with multiple languages";
+ rdft:approval rdft:Proposed;
+ mf:action ;
+ mf:result