aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2017-01-06 14:48:03 -0500
committerDavid Robillard <d@drobilla.net>2017-01-06 21:39:01 -0500
commit5475750ecf496c774a082464b3e60f5adce9cc8a (patch)
tree57e844edc09637096d1b5ea16dcc5ebb69f88345
parent52590dbeb23100320417d6f72e20fadf215479e5 (diff)
downloadserd-5475750ecf496c774a082464b3e60f5adce9cc8a.tar.gz
serd-5475750ecf496c774a082464b3e60f5adce9cc8a.tar.bz2
serd-5475750ecf496c774a082464b3e60f5adce9cc8a.zip
Add support for reading TriG
-rw-r--r--NEWS5
-rw-r--r--doc/serdi.14
-rw-r--r--serd/serd.h9
-rw-r--r--src/reader.c137
-rw-r--r--src/serdi.c13
-rw-r--r--src/writer.c21
-rw-r--r--tests/TrigTests/HYPHEN_MINUS_in_localName.nq2
-rw-r--r--tests/TrigTests/HYPHEN_MINUS_in_localName.trig3
-rw-r--r--tests/TrigTests/IRIREF_datatype.nq2
-rw-r--r--tests/TrigTests/IRIREF_datatype.trig2
-rw-r--r--tests/TrigTests/IRI_spo.nq2
-rw-r--r--tests/TrigTests/IRI_subject.trig2
-rw-r--r--tests/TrigTests/IRI_with_all_punctuation.nq2
-rw-r--r--tests/TrigTests/IRI_with_all_punctuation.trig2
-rw-r--r--tests/TrigTests/IRI_with_eight_digit_numeric_escape.trig2
-rw-r--r--tests/TrigTests/IRI_with_four_digit_numeric_escape.trig2
-rw-r--r--tests/TrigTests/LICENSE48
-rw-r--r--tests/TrigTests/LITERAL1.nq2
-rw-r--r--tests/TrigTests/LITERAL1.trig2
-rw-r--r--tests/TrigTests/LITERAL1_all_controls.nq2
-rw-r--r--tests/TrigTests/LITERAL1_all_controls.trigbin0 -> 180 bytes
-rw-r--r--tests/TrigTests/LITERAL1_all_punctuation.nq2
-rw-r--r--tests/TrigTests/LITERAL1_all_punctuation.trig2
-rw-r--r--tests/TrigTests/LITERAL1_ascii_boundaries.nq2
-rw-r--r--tests/TrigTests/LITERAL1_ascii_boundaries.trigbin0 -> 141 bytes
-rw-r--r--tests/TrigTests/LITERAL1_with_UTF8_boundaries.trig1
-rw-r--r--tests/TrigTests/LITERAL2.trig2
-rw-r--r--tests/TrigTests/LITERAL2_ascii_boundaries.nq2
-rw-r--r--tests/TrigTests/LITERAL2_ascii_boundaries.trigbin0 -> 141 bytes
-rw-r--r--tests/TrigTests/LITERAL2_with_UTF8_boundaries.trig1
-rw-r--r--tests/TrigTests/LITERAL_LONG1.trig2
-rw-r--r--tests/TrigTests/LITERAL_LONG1_ascii_boundaries.nq2
-rw-r--r--tests/TrigTests/LITERAL_LONG1_ascii_boundaries.trigbin0 -> 133 bytes
-rw-r--r--tests/TrigTests/LITERAL_LONG1_with_1_squote.nq2
-rw-r--r--tests/TrigTests/LITERAL_LONG1_with_1_squote.trig2
-rw-r--r--tests/TrigTests/LITERAL_LONG1_with_2_squotes.nq2
-rw-r--r--tests/TrigTests/LITERAL_LONG1_with_2_squotes.trig2
-rw-r--r--tests/TrigTests/LITERAL_LONG1_with_UTF8_boundaries.trig1
-rw-r--r--tests/TrigTests/LITERAL_LONG2.trig2
-rw-r--r--tests/TrigTests/LITERAL_LONG2_ascii_boundaries.nq2
-rw-r--r--tests/TrigTests/LITERAL_LONG2_ascii_boundaries.trigbin0 -> 133 bytes
-rw-r--r--tests/TrigTests/LITERAL_LONG2_with_1_squote.nq2
-rw-r--r--tests/TrigTests/LITERAL_LONG2_with_1_squote.trig2
-rw-r--r--tests/TrigTests/LITERAL_LONG2_with_2_squotes.nq2
-rw-r--r--tests/TrigTests/LITERAL_LONG2_with_2_squotes.trig2
-rw-r--r--tests/TrigTests/LITERAL_LONG2_with_REVERSE_SOLIDUS.nq2
-rw-r--r--tests/TrigTests/LITERAL_LONG2_with_REVERSE_SOLIDUS.trig4
-rw-r--r--tests/TrigTests/LITERAL_LONG2_with_UTF8_boundaries.trig1
-rw-r--r--tests/TrigTests/LITERAL_with_UTF8_boundaries.nq1
-rw-r--r--tests/TrigTests/README41
-rw-r--r--tests/TrigTests/SPARQL_style_base.trig3
-rw-r--r--tests/TrigTests/SPARQL_style_prefix.trig3
-rw-r--r--tests/TrigTests/alternating_bnode_graphs.nq4
-rw-r--r--tests/TrigTests/alternating_bnode_graphs.trig5
-rw-r--r--tests/TrigTests/alternating_iri_graphs.nq4
-rw-r--r--tests/TrigTests/alternating_iri_graphs.trig5
-rw-r--r--tests/TrigTests/anonymous_blank_node_graph.trig1
-rw-r--r--tests/TrigTests/anonymous_blank_node_object.nq2
-rw-r--r--tests/TrigTests/anonymous_blank_node_object.trig2
-rw-r--r--tests/TrigTests/anonymous_blank_node_subject.nq2
-rw-r--r--tests/TrigTests/anonymous_blank_node_subject.trig2
-rw-r--r--tests/TrigTests/bareword_a_predicate.nq2
-rw-r--r--tests/TrigTests/bareword_a_predicate.trig2
-rw-r--r--tests/TrigTests/bareword_decimal.nq2
-rw-r--r--tests/TrigTests/bareword_decimal.trig2
-rw-r--r--tests/TrigTests/bareword_double.nq2
-rw-r--r--tests/TrigTests/bareword_double.trig2
-rw-r--r--tests/TrigTests/bareword_integer.trig2
-rw-r--r--tests/TrigTests/blankNodePropertyList_as_object.nq4
-rw-r--r--tests/TrigTests/blankNodePropertyList_as_object.trig2
-rw-r--r--tests/TrigTests/blankNodePropertyList_as_subject.nq4
-rw-r--r--tests/TrigTests/blankNodePropertyList_as_subject.trig2
-rw-r--r--tests/TrigTests/blankNodePropertyList_containing_collection.nq6
-rw-r--r--tests/TrigTests/blankNodePropertyList_containing_collection.trig2
-rw-r--r--tests/TrigTests/blankNodePropertyList_with_multiple_triples.nq6
-rw-r--r--tests/TrigTests/blankNodePropertyList_with_multiple_triples.trig2
-rw-r--r--tests/TrigTests/collection_object.nq6
-rw-r--r--tests/TrigTests/collection_object.trig2
-rw-r--r--tests/TrigTests/collection_subject.nq6
-rw-r--r--tests/TrigTests/collection_subject.trig2
-rw-r--r--tests/TrigTests/comment_following_PNAME_NS.nq1
-rw-r--r--tests/TrigTests/comment_following_PNAME_NS.trig3
-rw-r--r--tests/TrigTests/comment_following_localName.trig8
-rw-r--r--tests/TrigTests/default_namespace_IRI.trig3
-rw-r--r--tests/TrigTests/double_lower_case_e.nq2
-rw-r--r--tests/TrigTests/double_lower_case_e.trig2
-rw-r--r--tests/TrigTests/empty_collection.nq2
-rw-r--r--tests/TrigTests/empty_collection.trig2
-rw-r--r--tests/TrigTests/first.nq14
-rw-r--r--tests/TrigTests/first.trig2
-rw-r--r--tests/TrigTests/labeled_blank_node_graph.nq1
-rw-r--r--tests/TrigTests/labeled_blank_node_graph.trig1
-rw-r--r--tests/TrigTests/labeled_blank_node_object.nq2
-rw-r--r--tests/TrigTests/labeled_blank_node_object.trig2
-rw-r--r--tests/TrigTests/labeled_blank_node_subject.nq2
-rw-r--r--tests/TrigTests/labeled_blank_node_subject.trig2
-rw-r--r--tests/TrigTests/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.nq2
-rw-r--r--tests/TrigTests/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.trig2
-rw-r--r--tests/TrigTests/labeled_blank_node_with_leading_digit.nq2
-rw-r--r--tests/TrigTests/labeled_blank_node_with_leading_digit.trig2
-rw-r--r--tests/TrigTests/labeled_blank_node_with_leading_underscore.nq2
-rw-r--r--tests/TrigTests/labeled_blank_node_with_leading_underscore.trig2
-rw-r--r--tests/TrigTests/labeled_blank_node_with_non_leading_extras.nq2
-rw-r--r--tests/TrigTests/labeled_blank_node_with_non_leading_extras.trig2
-rw-r--r--tests/TrigTests/langtagged_LONG.trig2
-rw-r--r--tests/TrigTests/langtagged_LONG_with_subtag.nq2
-rw-r--r--tests/TrigTests/langtagged_LONG_with_subtag.trig4
-rw-r--r--tests/TrigTests/langtagged_non_LONG.nq2
-rw-r--r--tests/TrigTests/langtagged_non_LONG.trig2
-rw-r--r--tests/TrigTests/lantag_with_subtag.nq2
-rw-r--r--tests/TrigTests/lantag_with_subtag.trig2
-rw-r--r--tests/TrigTests/last.nq14
-rw-r--r--tests/TrigTests/last.trig2
-rw-r--r--tests/TrigTests/literal_false.nq2
-rw-r--r--tests/TrigTests/literal_false.trig2
-rw-r--r--tests/TrigTests/literal_true.nq2
-rw-r--r--tests/TrigTests/literal_true.trig2
-rw-r--r--tests/TrigTests/literal_with_BACKSPACE.nq2
-rw-r--r--tests/TrigTests/literal_with_BACKSPACE.trig2
-rw-r--r--tests/TrigTests/literal_with_CARRIAGE_RETURN.nq2
-rw-r--r--tests/TrigTests/literal_with_CARRIAGE_RETURN.trig2
-rw-r--r--tests/TrigTests/literal_with_CHARACTER_TABULATION.nq2
-rw-r--r--tests/TrigTests/literal_with_CHARACTER_TABULATION.trig2
-rw-r--r--tests/TrigTests/literal_with_FORM_FEED.nq2
-rw-r--r--tests/TrigTests/literal_with_FORM_FEED.trig2
-rw-r--r--tests/TrigTests/literal_with_LINE_FEED.nq2
-rw-r--r--tests/TrigTests/literal_with_LINE_FEED.trig4
-rw-r--r--tests/TrigTests/literal_with_REVERSE_SOLIDUS.nq2
-rw-r--r--tests/TrigTests/literal_with_REVERSE_SOLIDUS.trig2
-rw-r--r--tests/TrigTests/literal_with_escaped_BACKSPACE.trig2
-rw-r--r--tests/TrigTests/literal_with_escaped_CARRIAGE_RETURN.trig2
-rw-r--r--tests/TrigTests/literal_with_escaped_CHARACTER_TABULATION.trig2
-rw-r--r--tests/TrigTests/literal_with_escaped_FORM_FEED.trig2
-rw-r--r--tests/TrigTests/literal_with_escaped_LINE_FEED.trig2
-rw-r--r--tests/TrigTests/literal_with_numeric_escape4.nq2
-rw-r--r--tests/TrigTests/literal_with_numeric_escape4.trig2
-rw-r--r--tests/TrigTests/literal_with_numeric_escape8.trig2
-rw-r--r--tests/TrigTests/localName_with_PN_CHARS_BASE_character_boundaries.nq2
-rw-r--r--tests/TrigTests/localName_with_PN_CHARS_BASE_character_boundaries.trig3
-rw-r--r--tests/TrigTests/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nq2
-rw-r--r--tests/TrigTests/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.trig3
-rw-r--r--tests/TrigTests/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nq2
-rw-r--r--tests/TrigTests/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.trig3
-rw-r--r--tests/TrigTests/localName_with_leading_digit.nq2
-rw-r--r--tests/TrigTests/localName_with_leading_digit.trig3
-rw-r--r--tests/TrigTests/localName_with_leading_underscore.nq2
-rw-r--r--tests/TrigTests/localName_with_leading_underscore.trig3
-rw-r--r--tests/TrigTests/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nq2
-rw-r--r--tests/TrigTests/localName_with_nfc_PN_CHARS_BASE_character_boundaries.trig3
-rw-r--r--tests/TrigTests/localName_with_non_leading_extras.nq2
-rw-r--r--tests/TrigTests/localName_with_non_leading_extras.trig3
-rw-r--r--tests/TrigTests/localname_with_COLON.nq2
-rw-r--r--tests/TrigTests/localname_with_COLON.trig3
-rw-r--r--tests/TrigTests/manifest.ttl2883
-rw-r--r--tests/TrigTests/negative_numeric.nq2
-rw-r--r--tests/TrigTests/negative_numeric.trig2
-rw-r--r--tests/TrigTests/nested_blankNodePropertyLists.nq6
-rw-r--r--tests/TrigTests/nested_blankNodePropertyLists.trig2
-rw-r--r--tests/TrigTests/nested_collection.nq10
-rw-r--r--tests/TrigTests/nested_collection.trig2
-rw-r--r--tests/TrigTests/number_sign_following_PNAME_NS.nq1
-rw-r--r--tests/TrigTests/number_sign_following_PNAME_NS.trig3
-rw-r--r--tests/TrigTests/number_sign_following_localName.nq1
-rw-r--r--tests/TrigTests/number_sign_following_localName.trig3
-rw-r--r--tests/TrigTests/numeric_with_leading_0.nq2
-rw-r--r--tests/TrigTests/numeric_with_leading_0.trig2
-rw-r--r--tests/TrigTests/objectList_with_two_objects.nq4
-rw-r--r--tests/TrigTests/objectList_with_two_objects.trig2
-rw-r--r--tests/TrigTests/old_style_base.trig3
-rw-r--r--tests/TrigTests/old_style_prefix.trig3
-rw-r--r--tests/TrigTests/percent_escaped_localName.nq2
-rw-r--r--tests/TrigTests/percent_escaped_localName.trig3
-rw-r--r--tests/TrigTests/positive_numeric.nq2
-rw-r--r--tests/TrigTests/positive_numeric.trig2
-rw-r--r--tests/TrigTests/predicateObjectList_with_two_objectLists.nq4
-rw-r--r--tests/TrigTests/predicateObjectList_with_two_objectLists.trig2
-rw-r--r--tests/TrigTests/prefix_only_IRI.trig3
-rw-r--r--tests/TrigTests/prefix_reassigned_and_used.nq2
-rw-r--r--tests/TrigTests/prefix_reassigned_and_used.trig4
-rw-r--r--tests/TrigTests/prefix_with_PN_CHARS_BASE_character_boundaries.trig3
-rw-r--r--tests/TrigTests/prefix_with_non_leading_extras.trig3
-rw-r--r--tests/TrigTests/prefixed_IRI_object.trig3
-rw-r--r--tests/TrigTests/prefixed_IRI_predicate.trig3
-rw-r--r--tests/TrigTests/prefixed_name_datatype.trig3
-rw-r--r--tests/TrigTests/repeated_semis_at_end.trig2
-rw-r--r--tests/TrigTests/repeated_semis_not_at_end.nq2
-rw-r--r--tests/TrigTests/repeated_semis_not_at_end.trig2
-rw-r--r--tests/TrigTests/reserved_escaped_localName.nq2
-rw-r--r--tests/TrigTests/reserved_escaped_localName.trig3
-rw-r--r--tests/TrigTests/sole_blankNodePropertyList.nq3
-rw-r--r--tests/TrigTests/sole_blankNodePropertyList.trig3
-rw-r--r--tests/TrigTests/trig-bnodeplist-graph-bad-01.trig4
-rw-r--r--tests/TrigTests/trig-collection-graph-bad-01.trig4
-rw-r--r--tests/TrigTests/trig-collection-graph-bad-02.trig4
-rw-r--r--tests/TrigTests/trig-eval-bad-01.trig2
-rw-r--r--tests/TrigTests/trig-eval-bad-02.trig2
-rw-r--r--tests/TrigTests/trig-eval-bad-03.trig2
-rw-r--r--tests/TrigTests/trig-eval-bad-04.trig2
-rw-r--r--tests/TrigTests/trig-eval-struct-01.nq2
-rw-r--r--tests/TrigTests/trig-eval-struct-01.trig2
-rw-r--r--tests/TrigTests/trig-eval-struct-02.nq4
-rw-r--r--tests/TrigTests/trig-eval-struct-02.trig13
-rw-r--r--tests/TrigTests/trig-graph-bad-01.trig5
-rw-r--r--tests/TrigTests/trig-graph-bad-02.trig6
-rw-r--r--tests/TrigTests/trig-graph-bad-03.trig8
-rw-r--r--tests/TrigTests/trig-graph-bad-04.trig5
-rw-r--r--tests/TrigTests/trig-graph-bad-05.trig5
-rw-r--r--tests/TrigTests/trig-graph-bad-06.trig6
-rw-r--r--tests/TrigTests/trig-graph-bad-07.trig9
-rw-r--r--tests/TrigTests/trig-graph-bad-08.trig5
-rw-r--r--tests/TrigTests/trig-graph-bad-09.trig12
-rw-r--r--tests/TrigTests/trig-graph-bad-10.trig8
-rw-r--r--tests/TrigTests/trig-graph-bad-11.trig8
-rw-r--r--tests/TrigTests/trig-kw-graph-01.trig4
-rw-r--r--tests/TrigTests/trig-kw-graph-02.trig4
-rw-r--r--tests/TrigTests/trig-kw-graph-03.trig4
-rw-r--r--tests/TrigTests/trig-kw-graph-04.trig8
-rw-r--r--tests/TrigTests/trig-kw-graph-05.trig4
-rw-r--r--tests/TrigTests/trig-kw-graph-06.trig4
-rw-r--r--tests/TrigTests/trig-kw-graph-07.trig6
-rw-r--r--tests/TrigTests/trig-kw-graph-08.trig4
-rw-r--r--tests/TrigTests/trig-kw-graph-09.trig4
-rw-r--r--tests/TrigTests/trig-kw-graph-10.trig4
-rw-r--r--tests/TrigTests/trig-subm-01.nq2
-rw-r--r--tests/TrigTests/trig-subm-01.trig3
-rw-r--r--tests/TrigTests/trig-subm-02.nq6
-rw-r--r--tests/TrigTests/trig-subm-02.trig16
-rw-r--r--tests/TrigTests/trig-subm-03.nq6
-rw-r--r--tests/TrigTests/trig-subm-03.trig14
-rw-r--r--tests/TrigTests/trig-subm-04.nq6
-rw-r--r--tests/TrigTests/trig-subm-04.trig14
-rw-r--r--tests/TrigTests/trig-subm-05.nq4
-rw-r--r--tests/TrigTests/trig-subm-05.trig12
-rw-r--r--tests/TrigTests/trig-subm-06.nq8
-rw-r--r--tests/TrigTests/trig-subm-06.trig12
-rw-r--r--tests/TrigTests/trig-subm-07.nq2
-rw-r--r--tests/TrigTests/trig-subm-07.trig4
-rw-r--r--tests/TrigTests/trig-subm-08.nq10
-rw-r--r--tests/TrigTests/trig-subm-08.trig4
-rw-r--r--tests/TrigTests/trig-subm-09.nq2
-rw-r--r--tests/TrigTests/trig-subm-09.trig4
-rw-r--r--tests/TrigTests/trig-subm-10.nq8
-rw-r--r--tests/TrigTests/trig-subm-10.trig20
-rw-r--r--tests/TrigTests/trig-subm-11.nq10
-rw-r--r--tests/TrigTests/trig-subm-11.trig15
-rw-r--r--tests/TrigTests/trig-subm-12.nq8
-rw-r--r--tests/TrigTests/trig-subm-12.trig19
-rw-r--r--tests/TrigTests/trig-subm-13.nq8
-rw-r--r--tests/TrigTests/trig-subm-13.trig18
-rw-r--r--tests/TrigTests/trig-subm-14.nq4
-rw-r--r--tests/TrigTests/trig-subm-14.trig16
-rw-r--r--tests/TrigTests/trig-subm-15.nq2
-rw-r--r--tests/TrigTests/trig-subm-15.trig16
-rw-r--r--tests/TrigTests/trig-subm-16.nq4
-rw-r--r--tests/TrigTests/trig-subm-16.trig43
-rw-r--r--tests/TrigTests/trig-subm-17.nq2
-rw-r--r--tests/TrigTests/trig-subm-17.trig5
-rw-r--r--tests/TrigTests/trig-subm-18.nq4
-rw-r--r--tests/TrigTests/trig-subm-18.trig15
-rw-r--r--tests/TrigTests/trig-subm-19.nq6
-rw-r--r--tests/TrigTests/trig-subm-19.trig13
-rw-r--r--tests/TrigTests/trig-subm-20.nq6
-rw-r--r--tests/TrigTests/trig-subm-20.trig13
-rw-r--r--tests/TrigTests/trig-subm-21.nq2
-rw-r--r--tests/TrigTests/trig-subm-21.trig4
-rw-r--r--tests/TrigTests/trig-subm-22.nq4
-rw-r--r--tests/TrigTests/trig-subm-22.trig11
-rw-r--r--tests/TrigTests/trig-subm-23.nq14
-rw-r--r--tests/TrigTests/trig-subm-23.trig32
-rw-r--r--tests/TrigTests/trig-subm-24.nq2
-rw-r--r--tests/TrigTests/trig-subm-24.trig5
-rw-r--r--tests/TrigTests/trig-subm-25.nq2
-rw-r--r--tests/TrigTests/trig-subm-25.trig5
-rw-r--r--tests/TrigTests/trig-subm-26.nq22
-rw-r--r--tests/TrigTests/trig-subm-26.trig24
-rw-r--r--tests/TrigTests/trig-subm-27.nq5
-rw-r--r--tests/TrigTests/trig-subm-27.trig12
-rw-r--r--tests/TrigTests/trig-syntax-bad-LITERAL2_with_langtag_and_datatype.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-base-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-base-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-base-03.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-base-04.trig4
-rw-r--r--tests/TrigTests/trig-syntax-bad-base-05.trig4
-rw-r--r--tests/TrigTests/trig-syntax-bad-blank-label-dot-end.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-esc-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-esc-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-esc-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-esc-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-kw-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-kw-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-kw-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-kw-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-kw-05.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-lang-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-list-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-list-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-list-03.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-list-04.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-ln-dash-start.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-ln-escape-start.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-ln-escape.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-missing-ns-dot-end.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-missing-ns-dot-start.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-01.trig5
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-02.trig4
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-03.trig9
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-04.trig5
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-05.trig4
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-06.trig4
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-07.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-08.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-09.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-10.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-11.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-12.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-n3-extras-13.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-ns-dot-end.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-ns-dot-start.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-num-01.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-num-02.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-num-03.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-num-04.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-num-05.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-number-dot-in-anon.trig8
-rw-r--r--tests/TrigTests/trig-syntax-bad-pname-01.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-pname-02.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-pname-03.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-prefix-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-prefix-02.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-prefix-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-prefix-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-prefix-05.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-prefix-06.trig4
-rw-r--r--tests/TrigTests/trig-syntax-bad-prefix-07.trig4
-rw-r--r--tests/TrigTests/trig-syntax-bad-string-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-string-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-string-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-string-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-string-05.trig6
-rw-r--r--tests/TrigTests/trig-syntax-bad-string-06.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-string-07.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-05.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-06.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-07.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-09.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-10.trig5
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-12.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-13.trig1
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-14.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-15.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-16.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-struct-17.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-uri-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-uri-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-uri-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-uri-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bad-uri-05.trig2
-rw-r--r--tests/TrigTests/trig-syntax-base-01.trig1
-rw-r--r--tests/TrigTests/trig-syntax-base-02.trig1
-rw-r--r--tests/TrigTests/trig-syntax-base-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-base-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-blank-label.trig6
-rw-r--r--tests/TrigTests/trig-syntax-bnode-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bnode-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bnode-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bnode-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bnode-05.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bnode-06.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bnode-07.trig4
-rw-r--r--tests/TrigTests/trig-syntax-bnode-08.trig2
-rw-r--r--tests/TrigTests/trig-syntax-bnode-09.trig3
-rw-r--r--tests/TrigTests/trig-syntax-bnode-10.trig6
-rw-r--r--tests/TrigTests/trig-syntax-datatypes-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-datatypes-02.trig3
-rw-r--r--tests/TrigTests/trig-syntax-file-01.trig0
-rw-r--r--tests/TrigTests/trig-syntax-file-02.trig1
-rw-r--r--tests/TrigTests/trig-syntax-file-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-kw-01.trig1
-rw-r--r--tests/TrigTests/trig-syntax-kw-02.trig1
-rw-r--r--tests/TrigTests/trig-syntax-kw-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-lists-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-lists-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-lists-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-lists-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-lists-05.trig2
-rw-r--r--tests/TrigTests/trig-syntax-ln-colons.trig8
-rw-r--r--tests/TrigTests/trig-syntax-ln-dots.trig6
-rw-r--r--tests/TrigTests/trig-syntax-minimal-whitespace-01.trig21
-rw-r--r--tests/TrigTests/trig-syntax-ns-dots.trig2
-rw-r--r--tests/TrigTests/trig-syntax-number-01.trig1
-rw-r--r--tests/TrigTests/trig-syntax-number-02.trig1
-rw-r--r--tests/TrigTests/trig-syntax-number-03.trig1
-rw-r--r--tests/TrigTests/trig-syntax-number-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-number-05.trig2
-rw-r--r--tests/TrigTests/trig-syntax-number-06.trig2
-rw-r--r--tests/TrigTests/trig-syntax-number-07.trig2
-rw-r--r--tests/TrigTests/trig-syntax-number-08.trig2
-rw-r--r--tests/TrigTests/trig-syntax-number-09.trig1
-rw-r--r--tests/TrigTests/trig-syntax-number-10.trig1
-rw-r--r--tests/TrigTests/trig-syntax-number-11.trig1
-rw-r--r--tests/TrigTests/trig-syntax-pname-esc-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-pname-esc-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-pname-esc-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-prefix-01.trig1
-rw-r--r--tests/TrigTests/trig-syntax-prefix-02.trig1
-rw-r--r--tests/TrigTests/trig-syntax-prefix-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-prefix-04.trig2
-rw-r--r--tests/TrigTests/trig-syntax-prefix-05.trig2
-rw-r--r--tests/TrigTests/trig-syntax-prefix-06.trig4
-rw-r--r--tests/TrigTests/trig-syntax-prefix-07.trig3
-rw-r--r--tests/TrigTests/trig-syntax-prefix-08.trig3
-rw-r--r--tests/TrigTests/trig-syntax-prefix-09.trig4
-rw-r--r--tests/TrigTests/trig-syntax-str-esc-01.trig1
-rw-r--r--tests/TrigTests/trig-syntax-str-esc-02.trig1
-rw-r--r--tests/TrigTests/trig-syntax-str-esc-03.trig1
-rw-r--r--tests/TrigTests/trig-syntax-string-01.trig1
-rw-r--r--tests/TrigTests/trig-syntax-string-02.trig1
-rw-r--r--tests/TrigTests/trig-syntax-string-03.trig1
-rw-r--r--tests/TrigTests/trig-syntax-string-04.trig1
-rw-r--r--tests/TrigTests/trig-syntax-string-05.trig1
-rw-r--r--tests/TrigTests/trig-syntax-string-06.trig1
-rw-r--r--tests/TrigTests/trig-syntax-string-07.trig1
-rw-r--r--tests/TrigTests/trig-syntax-string-08.trig2
-rw-r--r--tests/TrigTests/trig-syntax-string-09.trig2
-rw-r--r--tests/TrigTests/trig-syntax-string-10.trig2
-rw-r--r--tests/TrigTests/trig-syntax-string-11.trig2
-rw-r--r--tests/TrigTests/trig-syntax-struct-01.trig2
-rw-r--r--tests/TrigTests/trig-syntax-struct-02.trig4
-rw-r--r--tests/TrigTests/trig-syntax-struct-03.trig5
-rw-r--r--tests/TrigTests/trig-syntax-struct-04.trig5
-rw-r--r--tests/TrigTests/trig-syntax-struct-05.trig5
-rw-r--r--tests/TrigTests/trig-syntax-struct-06.trig2
-rw-r--r--tests/TrigTests/trig-syntax-struct-07.trig2
-rw-r--r--tests/TrigTests/trig-syntax-uri-01.trig1
-rw-r--r--tests/TrigTests/trig-syntax-uri-02.trig2
-rw-r--r--tests/TrigTests/trig-syntax-uri-03.trig2
-rw-r--r--tests/TrigTests/trig-syntax-uri-04.trig3
-rw-r--r--tests/TrigTests/trig-turtle-01.trig8
-rw-r--r--tests/TrigTests/trig-turtle-02.trig9
-rw-r--r--tests/TrigTests/trig-turtle-03.trig5
-rw-r--r--tests/TrigTests/trig-turtle-04.trig5
-rw-r--r--tests/TrigTests/trig-turtle-05.trig6
-rw-r--r--tests/TrigTests/trig-turtle-06.trig4
-rw-r--r--tests/TrigTests/trig-turtle-bad-01.trig5
-rw-r--r--tests/TrigTests/trig-turtle-bad-02.trig6
-rw-r--r--tests/TrigTests/two_LITERAL_LONG2s.nq2
-rw-r--r--tests/TrigTests/two_LITERAL_LONG2s.trig6
-rw-r--r--tests/TrigTests/underscore_in_localName.nq1
-rw-r--r--tests/TrigTests/underscore_in_localName.trig2
-rw-r--r--wscript12
453 files changed, 4723 insertions, 60 deletions
diff --git a/NEWS b/NEWS
index 87ef1246..5e4fc9f6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,9 +1,10 @@
serd (0.25.0) unstable;
- * Add support for NQuads
+ * Add support for reading and writing NQuads
* Add support for SPARQL PREFIX and BASE directives
+ * Add support for reading TriG
- -- David Robillard <d@drobilla.net> Thu, 05 Jan 2017 16:20:09 -0500
+ -- David Robillard <d@drobilla.net> Fri, 06 Jan 2017 14:44:10 -0500
serd (0.24.0) stable;
diff --git a/doc/serdi.1 b/doc/serdi.1
index 2bf42084..ad1772fc 100644
--- a/doc/serdi.1
+++ b/doc/serdi.1
@@ -34,7 +34,7 @@ Print the command line options.
.TP
\fB\-i SYNTAX\fR
-Read input in SYNTAX (turtle, ntriples, or nquads).
+Read input in SYNTAX (turtle/ntriples/trig/nquads).
.TP
\fB\-l\fR
@@ -42,7 +42,7 @@ Lax (non-strict) parsing.
.TP
\fB\-o SYNTAX\fR
-Write output in SYNTAX (turtle, ntriples, or nquads).
+Write output in SYNTAX (turtle/ntriples/nquads).
.TP
\fB\-p PREFIX\fR
diff --git a/serd/serd.h b/serd/serd.h
index 3402d576..e7f6ec3b 100644
--- a/serd/serd.h
+++ b/serd/serd.h
@@ -116,7 +116,13 @@ typedef enum {
NQuads - Line-based RDF quads (UTF-8).
@see <a href="https://www.w3.org/TR/n-quads/">NQuads</a>
*/
- SERD_NQUADS = 3
+ SERD_NQUADS = 3,
+
+ /**
+ TRiG - Terse RDF quads (UTF-8).
+ @see <a href="https://www.w3.org/TR/trig/">Trig</a>
+ */
+ SERD_TRIG = 4
} SerdSyntax;
/**
@@ -190,7 +196,6 @@ typedef enum {
<tt>nodeID</tt></a>
*/
SERD_BLANK = 4
-
} SerdType;
/**
diff --git a/src/reader.c b/src/reader.c
index edeb8956..af5fb85c 100644
--- a/src/reader.c
+++ b/src/reader.c
@@ -101,13 +101,13 @@ struct SerdReaderImpl {
static inline bool
supports_fancy_literals(const SerdReader* reader)
{
- return reader->syntax == SERD_TURTLE;
+ return reader->syntax == SERD_TURTLE || reader->syntax == SERD_TRIG;
}
static inline bool
supports_relative_iris(const SerdReader* reader)
{
- return reader->syntax == SERD_TURTLE;
+ return reader->syntax == SERD_TURTLE || reader->syntax == SERD_TRIG;
}
static int
@@ -156,7 +156,7 @@ eat_byte_safe(SerdReader* reader, const uint8_t byte)
{
assert(peek_byte(reader) == byte);
switch (byte) {
- case '\0': reader->eof = true; break;
+ case '\0': reader->eof = (byte != '\0'); break;
case '\n': ++reader->cur.line; reader->cur.col = 0; break;
default: ++reader->cur.col;
}
@@ -520,13 +520,6 @@ read_ws_star(SerdReader* reader)
}
static inline bool
-read_ws_plus(SerdReader* reader)
-{
- TRY_RET(read_ws(reader));
- return read_ws_star(reader);
-}
-
-static inline bool
peek_delim(SerdReader* reader, const char delim)
{
read_ws_star(reader);
@@ -876,17 +869,13 @@ read_IRIREF(SerdReader* reader)
static bool
read_PrefixedName(SerdReader* reader, Ref dest, bool read_prefix, bool* ate_dot)
{
- if (read_prefix) {
- if (read_PN_PREFIX(reader, dest) > SERD_FAILURE) {
- return false;
- }
- }
-
- if (eat_byte_check(reader, ':') != ':') {
+ if (read_prefix && read_PN_PREFIX(reader, dest) > SERD_FAILURE) {
+ return false;
+ } else if (peek_byte(reader) != ':') {
return false;
}
- push_byte(reader, dest, ':');
+ push_byte(reader, dest, eat_byte_safe(reader, ':'));
return read_PN_LOCAL(reader, dest, ate_dot) <= SERD_FAILURE;
}
@@ -1307,7 +1296,7 @@ read_predicateObjectList(SerdReader* reader, ReadContext ctx, bool* ate_dot)
switch (c = peek_byte(reader)) {
case 0:
return false;
- case '.': case ']':
+ case '.': case ']': case '}':
return true;
case ';':
eat_byte_safe(reader, c);
@@ -1396,16 +1385,14 @@ read_collection(SerdReader* reader, ReadContext ctx, Ref* dest)
}
static Ref
-read_subject(SerdReader* reader, ReadContext ctx, Ref* dest, bool* nested)
+read_subject(SerdReader* reader, ReadContext ctx, Ref* dest, char* s_type)
{
bool ate_dot = false;
- switch (peek_byte(reader)) {
+ switch ((*s_type = peek_byte(reader))) {
case '[':
- *nested = true;
read_anon(reader, ctx, true, dest);
break;
case '(':
- *nested = true;
read_collection(reader, ctx, dest);
break;
case '_':
@@ -1417,15 +1404,36 @@ read_subject(SerdReader* reader, ReadContext ctx, Ref* dest, bool* nested)
return ate_dot ? pop_node(reader, *dest) : *dest;
}
+static Ref
+read_labelOrSubject(SerdReader* reader, ReadContext ctx)
+{
+ Ref subject = 0;
+ bool ate_dot = false;
+ switch (peek_byte(reader)) {
+ case '[':
+ eat_byte_safe(reader, '[');
+ read_ws_star(reader);
+ TRY_RET(eat_byte_check(reader, ']'));
+ return blank_id(reader);
+ case '_':
+ return read_BLANK_NODE_LABEL(reader, &ate_dot);
+ default:
+ read_iri(reader, &subject, &ate_dot);
+ }
+ return subject;
+}
+
static bool
read_triples(SerdReader* reader, ReadContext ctx, bool* ate_dot)
{
bool ret = false;
if (ctx.subject) {
- TRY_RET(read_ws_plus(reader));
- if (peek_byte(reader) == '.') {
- eat_byte_safe(reader, '.');
- *ate_dot = true;
+ read_ws_star(reader);
+ switch (peek_byte(reader)) {
+ case '.':
+ *ate_dot = eat_byte_safe(reader, '.');
+ return false;
+ case '}':
return false;
}
ret = read_predicateObjectList(reader, ctx, ate_dot);
@@ -1442,7 +1450,7 @@ read_base(SerdReader* reader, bool sparql, bool token)
}
Ref uri;
- TRY_RET(read_ws_plus(reader));
+ read_ws_star(reader);
TRY_RET(uri = read_IRIREF(reader));
if (reader->base_sink) {
reader->base_sink(reader->handle, deref(reader, uri));
@@ -1466,7 +1474,7 @@ read_prefixID(SerdReader* reader, bool sparql, bool token)
TRY_RET(eat_string(reader, "prefix", 6));
}
- TRY_RET(read_ws_plus(reader));
+ read_ws_star(reader);
bool ret = true;
Ref name = push_node(reader, SERD_LITERAL, "", 0);
if (read_PN_PREFIX(reader, name) > SERD_FAILURE) {
@@ -1521,6 +1529,30 @@ read_directive(SerdReader* reader)
return true;
}
+static bool
+read_wrappedGraph(SerdReader* reader, ReadContext* ctx)
+{
+ bool ate_dot = false;
+ char s_type = 0;
+ TRY_RET(eat_byte_check(reader, '{'));
+ read_ws_star(reader);
+ while (peek_byte(reader) != '}') {
+ ctx->subject = 0;
+ Ref subj = read_subject(reader, *ctx, &ctx->subject, &s_type);
+ if (!subj ||
+ (!read_triples(reader, *ctx, &ate_dot) && s_type != '[')) {
+ return false;
+ }
+ pop_node(reader, subj);
+ read_ws_star(reader);
+ if (peek_byte(reader) == '.') {
+ eat_byte_safe(reader, '.');
+ }
+ read_ws_star(reader);
+ }
+ return eat_byte_check(reader, '}');
+}
+
static int
tokcmp(SerdReader* reader, Ref ref, const char* tok, size_t n)
{
@@ -1545,7 +1577,7 @@ read_statement(SerdReader* reader)
ReadContext ctx = { 0, 0, 0, 0, 0, 0, &flags };
Ref subj = 0;
bool ate_dot = false;
- bool nested = false;
+ char s_type = false;
bool ret = true;
read_ws_star(reader);
switch (peek_byte(reader)) {
@@ -1556,16 +1588,38 @@ read_statement(SerdReader* reader)
TRY_RET(read_directive(reader));
read_ws_star(reader);
break;
+ case '{':
+ if (reader->syntax == SERD_TRIG) {
+ TRY_RET(read_wrappedGraph(reader, &ctx));
+ read_ws_star(reader);
+ } else {
+ return r_err(reader, SERD_ERR_BAD_SYNTAX, "graph in Turtle\n");
+ }
+ break;
default:
- subj = read_subject(reader, ctx, &ctx.subject, &nested);
+ subj = read_subject(reader, ctx, &ctx.subject, &s_type);
if (!tokcmp(reader, ctx.subject, "base", 4)) {
ret = read_base(reader, true, false);
} else if (!tokcmp(reader, ctx.subject, "prefix", 6)) {
ret = read_prefixID(reader, true, false);
+ } else if (!tokcmp(reader, ctx.subject, "graph", 5)) {
+ read_ws_star(reader);
+ TRY_RET((ctx.graph = read_labelOrSubject(reader, ctx)));
+ read_ws_star(reader);
+ TRY_RET(read_wrappedGraph(reader, &ctx));
+ read_ws_star(reader);
+ } else if (read_ws_star(reader) && peek_byte(reader) == '{') {
+ if (s_type == '(' || (s_type == '[' && !*ctx.flags)) {
+ return false; // invalid graph with complex label
+ }
+ ctx.graph = subj;
+ ctx.subject = subj = 0;
+ TRY_RET(read_wrappedGraph(reader, &ctx));
+ read_ws_star(reader);
} else if (!subj) {
ret = r_err(reader, SERD_ERR_BAD_SYNTAX, "bad subject\n");
- } else if (!read_triples(reader, ctx, &ate_dot) && !nested) {
- ret = nested;
+ } else if (!read_triples(reader, ctx, &ate_dot)) {
+ ret = (s_type == '[');
} else if (!ate_dot) {
read_ws_star(reader);
ret = (eat_byte_check(reader, '.') == '.');
@@ -1573,7 +1627,6 @@ read_statement(SerdReader* reader)
pop_node(reader, subj);
break;
}
- read_ws_star(reader); // remove?
return ret;
}
@@ -1587,21 +1640,30 @@ read_turtleDoc(SerdReader* reader)
}
static bool
+read_trigDoc(SerdReader* reader)
+{
+ while (!reader->eof) {
+ TRY_RET(read_statement(reader));
+ }
+ return !reader->error;
+}
+
+static bool
read_nquadsDoc(SerdReader* reader)
{
while (!reader->eof) {
SerdStatementFlags flags = 0;
ReadContext ctx = { 0, 0, 0, 0, 0, 0, &flags };
bool ate_dot = false;
- bool nested = false;
+ char s_type = false;
read_ws_star(reader);
if (peek_byte(reader) == '\0') {
reader->eof = true;
- return !reader->error;
+ break;
}
// subject predicate object
- if (!(ctx.subject = read_subject(reader, ctx, &ctx.subject, &nested)) ||
+ if (!(ctx.subject = read_subject(reader, ctx, &ctx.subject, &s_type)) ||
!read_ws_star(reader) ||
!(ctx.predicate = read_IRIREF(reader)) ||
!read_ws_star(reader) ||
@@ -1642,6 +1704,7 @@ read_doc(SerdReader* reader)
{
switch (reader->syntax) {
case SERD_NQUADS: return read_nquadsDoc(reader);
+ case SERD_TRIG: return read_trigDoc(reader);
default: return read_turtleDoc(reader);
}
}
diff --git a/src/serdi.c b/src/serdi.c
index be52587c..80bba270 100644
--- a/src/serdi.c
+++ b/src/serdi.c
@@ -53,9 +53,9 @@ print_usage(const char* name, bool error)
fprintf(os, " -e Eat input one character at a time.\n");
fprintf(os, " -f Keep full URIs in input (don't qualify).\n");
fprintf(os, " -h Display this help and exit.\n");
- fprintf(os, " -i SYNTAX Input syntax (turtle, ntriples, or nquads).\n");
+ fprintf(os, " -i SYNTAX Input syntax: turtle/ntriples/trig/nquads.\n");
fprintf(os, " -l Lax (non-strict) parsing.\n");
- fprintf(os, " -o SYNTAX Output syntax (turtle, ntriples, or nquads).\n");
+ fprintf(os, " -o SYNTAX Output syntax: turtle/ntriples/nquads.\n");
fprintf(os, " -p PREFIX Add PREFIX to blank node IDs.\n");
fprintf(os, " -q Suppress all output except data.\n");
fprintf(os, " -r ROOT_URI Keep relative URIs within ROOT_URI.\n");
@@ -73,6 +73,8 @@ set_syntax(SerdSyntax* syntax, const char* name)
*syntax = SERD_NTRIPLES;
} else if (!strcmp(name, "nquads")) {
*syntax = SERD_NQUADS;
+ } else if (!strcmp(name, "trig")) {
+ *syntax = SERD_TRIG;
} else {
SERDI_ERRORF("unknown syntax `%s'\n", name);
return false;
@@ -200,16 +202,17 @@ main(int argc, char** argv)
SerdEnv* env = serd_env_new(&base);
int output_style = 0;
- if (output_syntax == SERD_NTRIPLES) {
+ if (output_syntax == SERD_NTRIPLES || output_syntax == SERD_NQUADS) {
output_style |= SERD_STYLE_ASCII;
- } else {
+ } else if (output_syntax == SERD_TURTLE) {
output_style |= SERD_STYLE_ABBREVIATED;
if (!full_uris) {
output_style |= SERD_STYLE_CURIED;
}
}
- if (input_syntax != SERD_NTRIPLES || (output_style & SERD_STYLE_CURIED)) {
+ if ((input_syntax == SERD_TURTLE || input_syntax == SERD_TRIG) ||
+ (output_style & SERD_STYLE_CURIED)) {
// Base URI may change and/or we're abbreviating URIs, so must resolve
output_style |= SERD_STYLE_RESOLVED; // Base may chan
}
diff --git a/src/writer.c b/src/writer.c
index ce13d79b..5bb3bd0d 100644
--- a/src/writer.c
+++ b/src/writer.c
@@ -356,7 +356,7 @@ write_text(SerdWriter* writer, TextContext ctx,
case '"': len += sink("\\\"", 2, writer); continue;
default: break;
}
- if (writer->syntax != SERD_NTRIPLES) {
+ if (writer->syntax == SERD_TURTLE) {
switch (in) {
case '\b': len += sink("\\b", 2, writer); continue;
case '\f': len += sink("\\f", 2, writer); continue;
@@ -438,7 +438,7 @@ typedef enum {
static bool
is_inline_start(const SerdWriter* writer, Field field, SerdStatementFlags flags)
{
- return (writer->syntax != SERD_NTRIPLES &&
+ return (writer->syntax == SERD_TURTLE &&
((field == FIELD_SUBJECT && (flags & SERD_ANON_S_BEGIN)) ||
(field == FIELD_OBJECT && (flags & SERD_ANON_O_BEGIN))));
}
@@ -460,19 +460,19 @@ write_node(SerdWriter* writer,
if (is_inline_start(writer, field, flags)) {
++writer->indent;
write_sep(writer, SEP_ANON_BEGIN);
- } else if (writer->syntax != SERD_NTRIPLES
+ } else if (writer->syntax == SERD_TURTLE
&& (field == FIELD_SUBJECT && (flags & SERD_LIST_S_BEGIN))) {
assert(writer->list_depth == 0);
copy_node(&writer->list_subj, node);
++writer->list_depth;
++writer->indent;
write_sep(writer, SEP_LIST_BEGIN);
- } else if (writer->syntax != SERD_NTRIPLES
+ } else if (writer->syntax == SERD_TURTLE
&& (field == FIELD_OBJECT && (flags & SERD_LIST_O_BEGIN))) {
++writer->indent;
++writer->list_depth;
write_sep(writer, SEP_LIST_BEGIN);
- } else if (writer->syntax != SERD_NTRIPLES
+ } else if (writer->syntax == SERD_TURTLE
&& ((field == FIELD_SUBJECT && (flags & SERD_EMPTY_S))
|| (field == FIELD_OBJECT && (flags & SERD_EMPTY_O)))) {
sink("[]", 2, writer);
@@ -504,6 +504,7 @@ write_node(SerdWriter* writer,
sink(">", 1, writer);
break;
case SERD_TURTLE:
+ case SERD_TRIG:
if (is_inline_start(writer, field, flags)) {
++writer->indent;
write_sep(writer, SEP_ANON_BEGIN);
@@ -536,7 +537,7 @@ write_node(SerdWriter* writer,
break;
}
}
- if (writer->syntax != SERD_NTRIPLES
+ if (writer->syntax == SERD_TURTLE
&& (node->flags & (SERD_HAS_NEWLINE|SERD_HAS_QUOTE))) {
sink("\"\"\"", 3, writer);
write_text(writer, WRITE_LONG_STRING, node->buf, node->n_bytes);
@@ -585,7 +586,7 @@ write_node(SerdWriter* writer,
bool rooted = uri_is_under(&writer->base_uri, &writer->root_uri);
SerdURI* root = rooted ? &writer->root_uri : & writer->base_uri;
if (!uri_is_under(&abs_uri, root) ||
- writer->syntax == SERD_NTRIPLES) {
+ writer->syntax != SERD_TURTLE) {
serd_uri_serialise(&abs_uri, uri_sink, writer);
} else {
serd_uri_serialise_relative(
@@ -761,7 +762,7 @@ SerdStatus
serd_writer_end_anon(SerdWriter* writer,
const SerdNode* node)
{
- if (writer->syntax == SERD_NTRIPLES) {
+ if (writer->syntax == SERD_NTRIPLES || writer->syntax == SERD_NQUADS) {
return SERD_SUCCESS;
}
if (serd_stack_is_empty(&writer->anon_stack) || writer->indent == 0) {
@@ -858,7 +859,7 @@ serd_writer_set_base_uri(SerdWriter* writer,
if (!serd_env_set_base_uri(writer->env, uri)) {
serd_env_get_base_uri(writer->env, &writer->base_uri);
- if (writer->syntax != SERD_NTRIPLES) {
+ if (writer->syntax == SERD_TURTLE || writer->syntax == SERD_TRIG) {
if (writer->context.graph.type || writer->context.subject.type) {
sink(" .\n\n", 4, writer);
reset_context(writer, false);
@@ -896,7 +897,7 @@ serd_writer_set_prefix(SerdWriter* writer,
const SerdNode* uri)
{
if (!serd_env_set_prefix(writer->env, name, uri)) {
- if (writer->syntax != SERD_NTRIPLES) {
+ if (writer->syntax == SERD_TURTLE || writer->syntax == SERD_TRIG) {
if (writer->context.graph.type || writer->context.subject.type) {
sink(" .\n\n", 4, writer);
reset_context(writer, false);
diff --git a/tests/TrigTests/HYPHEN_MINUS_in_localName.nq b/tests/TrigTests/HYPHEN_MINUS_in_localName.nq
new file mode 100644
index 00000000..2de67fd4
--- /dev/null
+++ b/tests/TrigTests/HYPHEN_MINUS_in_localName.nq
@@ -0,0 +1,2 @@
+<http://a.example/s-> <http://a.example/p> <http://a.example/o> .
+<http://a.example/s-> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/HYPHEN_MINUS_in_localName.trig b/tests/TrigTests/HYPHEN_MINUS_in_localName.trig
new file mode 100644
index 00000000..e93280e9
--- /dev/null
+++ b/tests/TrigTests/HYPHEN_MINUS_in_localName.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{p:s- <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:s- <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/IRIREF_datatype.nq b/tests/TrigTests/IRIREF_datatype.nq
new file mode 100644
index 00000000..2ddce8e3
--- /dev/null
+++ b/tests/TrigTests/IRIREF_datatype.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://a.example/s> <http://a.example/p> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
diff --git a/tests/TrigTests/IRIREF_datatype.trig b/tests/TrigTests/IRIREF_datatype.trig
new file mode 100644
index 00000000..f8e89b17
--- /dev/null
+++ b/tests/TrigTests/IRIREF_datatype.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .}
diff --git a/tests/TrigTests/IRI_spo.nq b/tests/TrigTests/IRI_spo.nq
new file mode 100644
index 00000000..9e8bf24d
--- /dev/null
+++ b/tests/TrigTests/IRI_spo.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/o> .
+<http://a.example/s> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/IRI_subject.trig b/tests/TrigTests/IRI_subject.trig
new file mode 100644
index 00000000..0a258598
--- /dev/null
+++ b/tests/TrigTests/IRI_subject.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/IRI_with_all_punctuation.nq b/tests/TrigTests/IRI_with_all_punctuation.nq
new file mode 100644
index 00000000..ea278b6c
--- /dev/null
+++ b/tests/TrigTests/IRI_with_all_punctuation.nq
@@ -0,0 +1,2 @@
+<scheme:!$%25&amp;'()*+,-./0123456789:/@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~?#> <http://a.example/p> <http://a.example/o> .
+<scheme:!$%25&amp;'()*+,-./0123456789:/@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~?#> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/IRI_with_all_punctuation.trig b/tests/TrigTests/IRI_with_all_punctuation.trig
new file mode 100644
index 00000000..4b602a73
--- /dev/null
+++ b/tests/TrigTests/IRI_with_all_punctuation.trig
@@ -0,0 +1,2 @@
+{<scheme:!$%25&amp;'()*+,-./0123456789:/@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~?#> <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {<scheme:!$%25&amp;'()*+,-./0123456789:/@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~?#> <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/IRI_with_eight_digit_numeric_escape.trig b/tests/TrigTests/IRI_with_eight_digit_numeric_escape.trig
new file mode 100644
index 00000000..6042a770
--- /dev/null
+++ b/tests/TrigTests/IRI_with_eight_digit_numeric_escape.trig
@@ -0,0 +1,2 @@
+{<http://a.example/\U00000073> <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {<http://a.example/\U00000073> <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/IRI_with_four_digit_numeric_escape.trig b/tests/TrigTests/IRI_with_four_digit_numeric_escape.trig
new file mode 100644
index 00000000..6c659d06
--- /dev/null
+++ b/tests/TrigTests/IRI_with_four_digit_numeric_escape.trig
@@ -0,0 +1,2 @@
+{<http://a.example/\u0073> <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {<http://a.example/\u0073> <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/LICENSE b/tests/TrigTests/LICENSE
new file mode 100644
index 00000000..3c128537
--- /dev/null
+++ b/tests/TrigTests/LICENSE
@@ -0,0 +1,48 @@
+Summary
+=======
+
+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
+
+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.
+
+
+W3C Test Suite License
+======================
+
+This document, Test Suites and other documents that link to this statement are provided by the copyright holders under the following license: By using and/or copying this document, or the W3C document from which this statement is linked, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:
+
+Permission to copy, and distribute the contents of this document, or the W3C document from which this statement is linked, in any medium for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the document, or portions thereof, that you use:
+
+A link or URL to the original W3C document.
+The pre-existing copyright notice of the original author, or if it doesn't exist, a notice (hypertext is preferred, but a textual representation is permitted) of the form: "Copyright © [$date-of-document] World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) and others. All Rights Reserved. http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html"
+If it exists, the STATUS of the W3C document.
+When space permits, inclusion of the full text of this NOTICE should be provided. We request that authorship attribution be provided in any software, documents, or other items or products that you create pursuant to the implementation of the contents of this document, or any portion thereof.
+
+No right to create modifications or derivatives of W3C documents is granted pursuant to this license. However, if additional requirements (documented in the Copyright FAQ) are satisfied, the right to create modifications or derivatives is sometimes granted by the W3C to individuals complying with those requirements.
+
+If a Test Suite distinguishes the test harness (or, framework for navigation) and the actual tests, permission is given to remove or alter the harness or navigation if the Test Suite in question allows to do so. The tests themselves shall NOT be changed in any way.
+
+The name and trademarks of W3C and other copyright holders may NOT be used in advertising or publicity pertaining to this document or other documents that link to this statement without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders. Permission is given to use the trademarked string W3C within claims of performance concerning W3C Specifications or features described therein, and there only, if the test suite so authorizes.
+
+THIS WORK IS PROVIDED BY W3C, MIT, ERCIM, KEIO UNIVERSITY, THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL W3C, MIT, ERCIM, KEIO UNIVERSITY, THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+W3C 3-clause BSD License
+========================
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ Redistributions of works must retain the original copyright notice, this list of conditions and the following disclaimer.
+
+ Redistributions in binary form must reproduce the original copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ Neither the name of the W3C nor the names of its contributors may be used to endorse or promote products derived from this work without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/tests/TrigTests/LITERAL1.nq b/tests/TrigTests/LITERAL1.nq
new file mode 100644
index 00000000..97b680a5
--- /dev/null
+++ b/tests/TrigTests/LITERAL1.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "x" .
+<http://a.example/s> <http://a.example/p> "x" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL1.trig b/tests/TrigTests/LITERAL1.trig
new file mode 100644
index 00000000..df544ef8
--- /dev/null
+++ b/tests/TrigTests/LITERAL1.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> 'x' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> 'x' .}
diff --git a/tests/TrigTests/LITERAL1_all_controls.nq b/tests/TrigTests/LITERAL1_all_controls.nq
new file mode 100644
index 00000000..3bfb3bd4
--- /dev/null
+++ b/tests/TrigTests/LITERAL1_all_controls.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\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" .
+<http://a.example/s> <http://a.example/p> "\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" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL1_all_controls.trig b/tests/TrigTests/LITERAL1_all_controls.trig
new file mode 100644
index 00000000..1246b619
--- /dev/null
+++ b/tests/TrigTests/LITERAL1_all_controls.trig
Binary files differ
diff --git a/tests/TrigTests/LITERAL1_all_punctuation.nq b/tests/TrigTests/LITERAL1_all_punctuation.nq
new file mode 100644
index 00000000..47ef8763
--- /dev/null
+++ b/tests/TrigTests/LITERAL1_all_punctuation.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> " !\"#$%&():;<=>?@[]^_`{|}~" .
+<http://a.example/s> <http://a.example/p> " !\"#$%&():;<=>?@[]^_`{|}~" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL1_all_punctuation.trig b/tests/TrigTests/LITERAL1_all_punctuation.trig
new file mode 100644
index 00000000..456e7972
--- /dev/null
+++ b/tests/TrigTests/LITERAL1_all_punctuation.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> ' !"#$%&():;<=>?@[]^_`{|}~' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> ' !"#$%&():;<=>?@[]^_`{|}~' .}
diff --git a/tests/TrigTests/LITERAL1_ascii_boundaries.nq b/tests/TrigTests/LITERAL1_ascii_boundaries.nq
new file mode 100644
index 00000000..672da9d1
--- /dev/null
+++ b/tests/TrigTests/LITERAL1_ascii_boundaries.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\u0000\t\u000B\u000C\u000E&([]\u007F" .
+<http://a.example/s> <http://a.example/p> "\u0000\t\u000B\u000C\u000E&([]\u007F" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL1_ascii_boundaries.trig b/tests/TrigTests/LITERAL1_ascii_boundaries.trig
new file mode 100644
index 00000000..cd14a4e8
--- /dev/null
+++ b/tests/TrigTests/LITERAL1_ascii_boundaries.trig
Binary files differ
diff --git a/tests/TrigTests/LITERAL1_with_UTF8_boundaries.trig b/tests/TrigTests/LITERAL1_with_UTF8_boundaries.trig
new file mode 100644
index 00000000..b72eb040
--- /dev/null
+++ b/tests/TrigTests/LITERAL1_with_UTF8_boundaries.trig
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> '€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽' .
diff --git a/tests/TrigTests/LITERAL2.trig b/tests/TrigTests/LITERAL2.trig
new file mode 100644
index 00000000..c2b09ff6
--- /dev/null
+++ b/tests/TrigTests/LITERAL2.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> "x" .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> "x" .}
diff --git a/tests/TrigTests/LITERAL2_ascii_boundaries.nq b/tests/TrigTests/LITERAL2_ascii_boundaries.nq
new file mode 100644
index 00000000..63402430
--- /dev/null
+++ b/tests/TrigTests/LITERAL2_ascii_boundaries.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\u0000\t\u000B\u000C\u000E!#[]\u007F" .
+<http://a.example/s> <http://a.example/p> "\u0000\t\u000B\u000C\u000E!#[]\u007F" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL2_ascii_boundaries.trig b/tests/TrigTests/LITERAL2_ascii_boundaries.trig
new file mode 100644
index 00000000..dd6b3ddf
--- /dev/null
+++ b/tests/TrigTests/LITERAL2_ascii_boundaries.trig
Binary files differ
diff --git a/tests/TrigTests/LITERAL2_with_UTF8_boundaries.trig b/tests/TrigTests/LITERAL2_with_UTF8_boundaries.trig
new file mode 100644
index 00000000..0e1616db
--- /dev/null
+++ b/tests/TrigTests/LITERAL2_with_UTF8_boundaries.trig
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽" .
diff --git a/tests/TrigTests/LITERAL_LONG1.trig b/tests/TrigTests/LITERAL_LONG1.trig
new file mode 100644
index 00000000..5db4af44
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG1.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '''x''' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '''x''' .}
diff --git a/tests/TrigTests/LITERAL_LONG1_ascii_boundaries.nq b/tests/TrigTests/LITERAL_LONG1_ascii_boundaries.nq
new file mode 100644
index 00000000..5dc9b17a
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG1_ascii_boundaries.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\u0000&([]\u007F" .
+<http://a.example/s> <http://a.example/p> "\u0000&([]\u007F" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL_LONG1_ascii_boundaries.trig b/tests/TrigTests/LITERAL_LONG1_ascii_boundaries.trig
new file mode 100644
index 00000000..25db84dd
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG1_ascii_boundaries.trig
Binary files differ
diff --git a/tests/TrigTests/LITERAL_LONG1_with_1_squote.nq b/tests/TrigTests/LITERAL_LONG1_with_1_squote.nq
new file mode 100644
index 00000000..f72af857
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG1_with_1_squote.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "x'y" .
+<http://a.example/s> <http://a.example/p> "x'y" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL_LONG1_with_1_squote.trig b/tests/TrigTests/LITERAL_LONG1_with_1_squote.trig
new file mode 100644
index 00000000..45e742ed
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG1_with_1_squote.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '''x'y''' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '''x'y''' .}
diff --git a/tests/TrigTests/LITERAL_LONG1_with_2_squotes.nq b/tests/TrigTests/LITERAL_LONG1_with_2_squotes.nq
new file mode 100644
index 00000000..5e7a4890
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG1_with_2_squotes.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "x''y" .
+<http://a.example/s> <http://a.example/p> "x''y" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL_LONG1_with_2_squotes.trig b/tests/TrigTests/LITERAL_LONG1_with_2_squotes.trig
new file mode 100644
index 00000000..75f94883
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG1_with_2_squotes.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '''x''y''' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '''x''y''' .}
diff --git a/tests/TrigTests/LITERAL_LONG1_with_UTF8_boundaries.trig b/tests/TrigTests/LITERAL_LONG1_with_UTF8_boundaries.trig
new file mode 100644
index 00000000..e04b675e
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG1_with_UTF8_boundaries.trig
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> '''€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽''' .
diff --git a/tests/TrigTests/LITERAL_LONG2.trig b/tests/TrigTests/LITERAL_LONG2.trig
new file mode 100644
index 00000000..2f1a86ec
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> """x""" .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> """x""" .}
diff --git a/tests/TrigTests/LITERAL_LONG2_ascii_boundaries.nq b/tests/TrigTests/LITERAL_LONG2_ascii_boundaries.nq
new file mode 100644
index 00000000..1dc45f7c
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2_ascii_boundaries.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\u0000!#[]\u007F" .
+<http://a.example/s> <http://a.example/p> "\u0000!#[]\u007F" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL_LONG2_ascii_boundaries.trig b/tests/TrigTests/LITERAL_LONG2_ascii_boundaries.trig
new file mode 100644
index 00000000..804fe250
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2_ascii_boundaries.trig
Binary files differ
diff --git a/tests/TrigTests/LITERAL_LONG2_with_1_squote.nq b/tests/TrigTests/LITERAL_LONG2_with_1_squote.nq
new file mode 100644
index 00000000..3cbb9785
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2_with_1_squote.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "x\"y" .
+<http://a.example/s> <http://a.example/p> "x\"y" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL_LONG2_with_1_squote.trig b/tests/TrigTests/LITERAL_LONG2_with_1_squote.trig
new file mode 100644
index 00000000..fccbe173
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2_with_1_squote.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> """x"y""" .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> """x"y""" .}
diff --git a/tests/TrigTests/LITERAL_LONG2_with_2_squotes.nq b/tests/TrigTests/LITERAL_LONG2_with_2_squotes.nq
new file mode 100644
index 00000000..cdab9945
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2_with_2_squotes.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "x\"\"y" .
+<http://a.example/s> <http://a.example/p> "x\"\"y" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL_LONG2_with_2_squotes.trig b/tests/TrigTests/LITERAL_LONG2_with_2_squotes.trig
new file mode 100644
index 00000000..8d1f3359
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2_with_2_squotes.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> """x""y""" .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> """x""y""" .}
diff --git a/tests/TrigTests/LITERAL_LONG2_with_REVERSE_SOLIDUS.nq b/tests/TrigTests/LITERAL_LONG2_with_REVERSE_SOLIDUS.nq
new file mode 100644
index 00000000..43b76993
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2_with_REVERSE_SOLIDUS.nq
@@ -0,0 +1,2 @@
+<http://example.org/ns#s> <http://example.org/ns#p1> "test-\\" .
+<http://example.org/ns#s> <http://example.org/ns#p1> "test-\\" <http://example/graph> .
diff --git a/tests/TrigTests/LITERAL_LONG2_with_REVERSE_SOLIDUS.trig b/tests/TrigTests/LITERAL_LONG2_with_REVERSE_SOLIDUS.trig
new file mode 100644
index 00000000..4dfe5e1f
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2_with_REVERSE_SOLIDUS.trig
@@ -0,0 +1,4 @@
+@prefix : <http://example.org/ns#> .
+
+{:s :p1 """test-\\""" .}
+<http://example/graph> {:s :p1 """test-\\""" .}
diff --git a/tests/TrigTests/LITERAL_LONG2_with_UTF8_boundaries.trig b/tests/TrigTests/LITERAL_LONG2_with_UTF8_boundaries.trig
new file mode 100644
index 00000000..644b32d8
--- /dev/null
+++ b/tests/TrigTests/LITERAL_LONG2_with_UTF8_boundaries.trig
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> """€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽""" .
diff --git a/tests/TrigTests/LITERAL_with_UTF8_boundaries.nq b/tests/TrigTests/LITERAL_with_UTF8_boundaries.nq
new file mode 100644
index 00000000..47a2527a
--- /dev/null
+++ b/tests/TrigTests/LITERAL_with_UTF8_boundaries.nq
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\u0080\u07FF\u0800\u0FFF\u1000\uCFFF\uD000\uD7FF\uE000\uFFFD\U00010000\U0003FFFD\U00040000\U000FFFFD\U00100000\U0010FFFD" .
diff --git a/tests/TrigTests/README b/tests/TrigTests/README
new file mode 100644
index 00000000..adbb2a3f
--- /dev/null
+++ b/tests/TrigTests/README
@@ -0,0 +1,41 @@
+This README is for the W3C RDF Working Group's TriG test suite.
+This test suite contains three kinds of tests:
+
+ Evaluation (rdft:TestTriGEval) - a pair of an input trig file
+ and reference ntriples file.
+
+ Positive syntax (rdft:TestTriGPositiveSyntax) - an input trig
+ file with no syntax errors.
+
+ Negative syntax (rdft:TestTriGNegativeSyntax) - an input trig
+ file with at least one syntax error.
+
+The manifest.ttl file in this directory lists all of the tests in the
+RDF WG's TriG test suite. Each test is one of the above tests. All
+tests have a name (mf:name) and an input (mf:action). The Evaluation
+tests have an expected result (mf:result).
+
+• An implementation passes an Evaluation test if it parses the input
+ into a graph, parses the expecte result into another graph, and
+ those two graphs are isomorphic (see
+ <http://www.w3.org/TR/rdf11-concepts/#graph-isomorphism>).
+
+• 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 <http://www.w3.org/2013/TriGTests/>.
+Per RFC 3986 section 5.1.3, the base IRI for parsing each file is the
+retrieval IRI for that file. For example, the tests trig-subm-01 and
+trig-subm-27 require relative IRI resolution against a base of
+<http://www.w3.org/2013/TriGTests/trig-subm-01.trig> and
+<http://www.w3.org/2013/TriGTests/trig-subm-27.trig> respectively.
+
+
+See http://www.w3.org/2011/rdf-wg/wiki/TriG_Test_Suite for more details.
+
+
+Eric Prud'hommeaux <eric+turtle@w3.org> - 11 June 2013.
+Gregg Kellogg <gregg@greggkellogg.net> - 12 June 2013.
diff --git a/tests/TrigTests/SPARQL_style_base.trig b/tests/TrigTests/SPARQL_style_base.trig
new file mode 100644
index 00000000..5697b450
--- /dev/null
+++ b/tests/TrigTests/SPARQL_style_base.trig
@@ -0,0 +1,3 @@
+BASE <http://a.example/>
+{<s> <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {<s> <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/SPARQL_style_prefix.trig b/tests/TrigTests/SPARQL_style_prefix.trig
new file mode 100644
index 00000000..49bc9737
--- /dev/null
+++ b/tests/TrigTests/SPARQL_style_prefix.trig
@@ -0,0 +1,3 @@
+PREFIX p: <http://a.example/>
+{p:s <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:s <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/alternating_bnode_graphs.nq b/tests/TrigTests/alternating_bnode_graphs.nq
new file mode 100644
index 00000000..66124112
--- /dev/null
+++ b/tests/TrigTests/alternating_bnode_graphs.nq
@@ -0,0 +1,4 @@
+<http://example/a> <http://example/b> <http://example/c> .
+<http://example/a> <http://example/b> <http://example/d> _:G .
+<http://example/a> <http://example/b> <http://example/e> .
+<http://example/a> <http://example/b> <http://example/f> _:G .
diff --git a/tests/TrigTests/alternating_bnode_graphs.trig b/tests/TrigTests/alternating_bnode_graphs.trig
new file mode 100644
index 00000000..e921099b
--- /dev/null
+++ b/tests/TrigTests/alternating_bnode_graphs.trig
@@ -0,0 +1,5 @@
+@prefix : <http://example/> .
+{:a :b :c.}
+_:G {:a :b :d.}
+{:a :b :e.}
+_:G {:a :b :f.}
diff --git a/tests/TrigTests/alternating_iri_graphs.nq b/tests/TrigTests/alternating_iri_graphs.nq
new file mode 100644
index 00000000..29c063e4
--- /dev/null
+++ b/tests/TrigTests/alternating_iri_graphs.nq
@@ -0,0 +1,4 @@
+<http://example/a> <http://example/b> <http://example/c> .
+<http://example/a> <http://example/b> <http://example/d> <http://example/G> .
+<http://example/a> <http://example/b> <http://example/e> .
+<http://example/a> <http://example/b> <http://example/f> <http://example/G> .
diff --git a/tests/TrigTests/alternating_iri_graphs.trig b/tests/TrigTests/alternating_iri_graphs.trig
new file mode 100644
index 00000000..6ce4d656
--- /dev/null
+++ b/tests/TrigTests/alternating_iri_graphs.trig
@@ -0,0 +1,5 @@
+@prefix : <http://example/> .
+{:a :b :c.}
+:G {:a :b :d.}
+{:a :b :e.}
+:G {:a :b :f.}
diff --git a/tests/TrigTests/anonymous_blank_node_graph.trig b/tests/TrigTests/anonymous_blank_node_graph.trig
new file mode 100644
index 00000000..6dd8d54e
--- /dev/null
+++ b/tests/TrigTests/anonymous_blank_node_graph.trig
@@ -0,0 +1 @@
+[] {<http://a.example/s> <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/anonymous_blank_node_object.nq b/tests/TrigTests/anonymous_blank_node_object.nq
new file mode 100644
index 00000000..a2c997f2
--- /dev/null
+++ b/tests/TrigTests/anonymous_blank_node_object.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> _:b1 .
+<http://a.example/s> <http://a.example/p> _:b2 <http://example/graph> .
diff --git a/tests/TrigTests/anonymous_blank_node_object.trig b/tests/TrigTests/anonymous_blank_node_object.trig
new file mode 100644
index 00000000..e91e7102
--- /dev/null
+++ b/tests/TrigTests/anonymous_blank_node_object.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> [] .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> [] .}
diff --git a/tests/TrigTests/anonymous_blank_node_subject.nq b/tests/TrigTests/anonymous_blank_node_subject.nq
new file mode 100644
index 00000000..b17e189c
--- /dev/null
+++ b/tests/TrigTests/anonymous_blank_node_subject.nq
@@ -0,0 +1,2 @@
+_:b1 <http://a.example/p> <http://a.example/o> .
+_:b2 <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/anonymous_blank_node_subject.trig b/tests/TrigTests/anonymous_blank_node_subject.trig
new file mode 100644
index 00000000..e9866f94
--- /dev/null
+++ b/tests/TrigTests/anonymous_blank_node_subject.trig
@@ -0,0 +1,2 @@
+{[] <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {[] <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/bareword_a_predicate.nq b/tests/TrigTests/bareword_a_predicate.nq
new file mode 100644
index 00000000..fd01c46a
--- /dev/null
+++ b/tests/TrigTests/bareword_a_predicate.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://a.example/o> .
+<http://a.example/s> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/bareword_a_predicate.trig b/tests/TrigTests/bareword_a_predicate.trig
new file mode 100644
index 00000000..315dc9bb
--- /dev/null
+++ b/tests/TrigTests/bareword_a_predicate.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> a <http://a.example/o> .}
+<http://example/graph> {<http://a.example/s> a <http://a.example/o> .}
diff --git a/tests/TrigTests/bareword_decimal.nq b/tests/TrigTests/bareword_decimal.nq
new file mode 100644
index 00000000..ed5de576
--- /dev/null
+++ b/tests/TrigTests/bareword_decimal.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://a.example/s> <http://a.example/p> "1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> <http://example/graph> .
diff --git a/tests/TrigTests/bareword_decimal.trig b/tests/TrigTests/bareword_decimal.trig
new file mode 100644
index 00000000..f862e712
--- /dev/null
+++ b/tests/TrigTests/bareword_decimal.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> 1.0 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> 1.0 .}
diff --git a/tests/TrigTests/bareword_double.nq b/tests/TrigTests/bareword_double.nq
new file mode 100644
index 00000000..f1783256
--- /dev/null
+++ b/tests/TrigTests/bareword_double.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "1E0"^^<http://www.w3.org/2001/XMLSchema#double> .
+<http://a.example/s> <http://a.example/p> "1E0"^^<http://www.w3.org/2001/XMLSchema#double> <http://example/graph> .
diff --git a/tests/TrigTests/bareword_double.trig b/tests/TrigTests/bareword_double.trig
new file mode 100644
index 00000000..788b8cee
--- /dev/null
+++ b/tests/TrigTests/bareword_double.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> 1E0 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> 1E0 .}
diff --git a/tests/TrigTests/bareword_integer.trig b/tests/TrigTests/bareword_integer.trig
new file mode 100644
index 00000000..be1fa8ed
--- /dev/null
+++ b/tests/TrigTests/bareword_integer.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> 1 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> 1 .}
diff --git a/tests/TrigTests/blankNodePropertyList_as_object.nq b/tests/TrigTests/blankNodePropertyList_as_object.nq
new file mode 100644
index 00000000..8e38d4e4
--- /dev/null
+++ b/tests/TrigTests/blankNodePropertyList_as_object.nq
@@ -0,0 +1,4 @@
+<http://a.example/s> <http://a.example/p> _:b1 .
+_:b1 <http://a.example/p2> <http://a.example/o2> .
+<http://a.example/s> <http://a.example/p> _:b2 <http://example/graph> .
+_:b2 <http://a.example/p2> <http://a.example/o2> <http://example/graph> .
diff --git a/tests/TrigTests/blankNodePropertyList_as_object.trig b/tests/TrigTests/blankNodePropertyList_as_object.trig
new file mode 100644
index 00000000..724d77ba
--- /dev/null
+++ b/tests/TrigTests/blankNodePropertyList_as_object.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> [ <http://a.example/p2> <http://a.example/o2> ] .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> [ <http://a.example/p2> <http://a.example/o2> ] .} \ No newline at end of file
diff --git a/tests/TrigTests/blankNodePropertyList_as_subject.nq b/tests/TrigTests/blankNodePropertyList_as_subject.nq
new file mode 100644
index 00000000..b3c274ce
--- /dev/null
+++ b/tests/TrigTests/blankNodePropertyList_as_subject.nq
@@ -0,0 +1,4 @@
+_:b1 <http://a.example/p> <http://a.example/o> .
+_:b1 <http://a.example/p2> <http://a.example/o2> .
+_:b2 <http://a.example/p> <http://a.example/o> <http://example/graph> .
+_:b2 <http://a.example/p2> <http://a.example/o2> <http://example/graph> .
diff --git a/tests/TrigTests/blankNodePropertyList_as_subject.trig b/tests/TrigTests/blankNodePropertyList_as_subject.trig
new file mode 100644
index 00000000..925b680a
--- /dev/null
+++ b/tests/TrigTests/blankNodePropertyList_as_subject.trig
@@ -0,0 +1,2 @@
+{[ <http://a.example/p> <http://a.example/o> ] <http://a.example/p2> <http://a.example/o2> .}
+<http://example/graph> {[ <http://a.example/p> <http://a.example/o> ] <http://a.example/p2> <http://a.example/o2> .}
diff --git a/tests/TrigTests/blankNodePropertyList_containing_collection.nq b/tests/TrigTests/blankNodePropertyList_containing_collection.nq
new file mode 100644
index 00000000..85f272a7
--- /dev/null
+++ b/tests/TrigTests/blankNodePropertyList_containing_collection.nq
@@ -0,0 +1,6 @@
+_:b1 <http://a.example/p1> _:b2 .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+_:b3 <http://a.example/p1> _:b4 <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
diff --git a/tests/TrigTests/blankNodePropertyList_containing_collection.trig b/tests/TrigTests/blankNodePropertyList_containing_collection.trig
new file mode 100644
index 00000000..d23b848c
--- /dev/null
+++ b/tests/TrigTests/blankNodePropertyList_containing_collection.trig
@@ -0,0 +1,2 @@
+{[ <http://a.example/p1> (1) ] .}
+<http://example/graph> {[ <http://a.example/p1> (1) ] .}
diff --git a/tests/TrigTests/blankNodePropertyList_with_multiple_triples.nq b/tests/TrigTests/blankNodePropertyList_with_multiple_triples.nq
new file mode 100644
index 00000000..ac7e6125
--- /dev/null
+++ b/tests/TrigTests/blankNodePropertyList_with_multiple_triples.nq
@@ -0,0 +1,6 @@
+_:b1 <http://a.example/p1> <http://a.example/o1> .
+_:b1 <http://a.example/p2> <http://a.example/o2> .
+_:b1 <http://a.example/p> <http://a.example/o> .
+_:b2 <http://a.example/p1> <http://a.example/o1> <http://example/graph> .
+_:b2 <http://a.example/p2> <http://a.example/o2> <http://example/graph> .
+_:b2 <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/blankNodePropertyList_with_multiple_triples.trig b/tests/TrigTests/blankNodePropertyList_with_multiple_triples.trig
new file mode 100644
index 00000000..dc5b5461
--- /dev/null
+++ b/tests/TrigTests/blankNodePropertyList_with_multiple_triples.trig
@@ -0,0 +1,2 @@
+{[ <http://a.example/p1> <http://a.example/o1> ; <http://a.example/p2> <http://a.example/o2> ] <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {[ <http://a.example/p1> <http://a.example/o1> ; <http://a.example/p2> <http://a.example/o2> ] <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/collection_object.nq b/tests/TrigTests/collection_object.nq
new file mode 100644
index 00000000..8ced4ad1
--- /dev/null
+++ b/tests/TrigTests/collection_object.nq
@@ -0,0 +1,6 @@
+<http://a.example/s> <http://a.example/p> _:b1 .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+<http://a.example/s> <http://a.example/p> _:b2 <http://example/graph> .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
diff --git a/tests/TrigTests/collection_object.trig b/tests/TrigTests/collection_object.trig
new file mode 100644
index 00000000..a86dd42f
--- /dev/null
+++ b/tests/TrigTests/collection_object.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> (1) .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> (1) .} \ No newline at end of file
diff --git a/tests/TrigTests/collection_subject.nq b/tests/TrigTests/collection_subject.nq
new file mode 100644
index 00000000..26858dc1
--- /dev/null
+++ b/tests/TrigTests/collection_subject.nq
@@ -0,0 +1,6 @@
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+_:b1 <http://a.example/p> <http://a.example/o> .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
+_:b2 <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/collection_subject.trig b/tests/TrigTests/collection_subject.trig
new file mode 100644
index 00000000..cb49acd8
--- /dev/null
+++ b/tests/TrigTests/collection_subject.trig
@@ -0,0 +1,2 @@
+{(1) <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {(1) <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/comment_following_PNAME_NS.nq b/tests/TrigTests/comment_following_PNAME_NS.nq
new file mode 100644
index 00000000..a8ca81c5
--- /dev/null
+++ b/tests/TrigTests/comment_following_PNAME_NS.nq
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/> .
diff --git a/tests/TrigTests/comment_following_PNAME_NS.trig b/tests/TrigTests/comment_following_PNAME_NS.trig
new file mode 100644
index 00000000..c03124c4
--- /dev/null
+++ b/tests/TrigTests/comment_following_PNAME_NS.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/> .
+<http://a.example/s> <http://a.example/p> p:#comment
+.
diff --git a/tests/TrigTests/comment_following_localName.trig b/tests/TrigTests/comment_following_localName.trig
new file mode 100644
index 00000000..649a9a59
--- /dev/null
+++ b/tests/TrigTests/comment_following_localName.trig
@@ -0,0 +1,8 @@
+@prefix p: <http://a.example/> .
+<http://a.example/s> <http://a.example/p> p:o#comment
+.
+
+<http://example/graph> {
+ <http://a.example/s> <http://a.example/p> <http://a.example/o>#comment
+ .
+}
diff --git a/tests/TrigTests/default_namespace_IRI.trig b/tests/TrigTests/default_namespace_IRI.trig
new file mode 100644
index 00000000..7eccc879
--- /dev/null
+++ b/tests/TrigTests/default_namespace_IRI.trig
@@ -0,0 +1,3 @@
+@prefix : <http://a.example/>.
+{:s <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {:s <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/double_lower_case_e.nq b/tests/TrigTests/double_lower_case_e.nq
new file mode 100644
index 00000000..c19ca11d
--- /dev/null
+++ b/tests/TrigTests/double_lower_case_e.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "1e0"^^<http://www.w3.org/2001/XMLSchema#double> .
+<http://a.example/s> <http://a.example/p> "1e0"^^<http://www.w3.org/2001/XMLSchema#double> <http://example/graph> .
diff --git a/tests/TrigTests/double_lower_case_e.trig b/tests/TrigTests/double_lower_case_e.trig
new file mode 100644
index 00000000..588669fa
--- /dev/null
+++ b/tests/TrigTests/double_lower_case_e.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> 1e0 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> 1e0 .}
diff --git a/tests/TrigTests/empty_collection.nq b/tests/TrigTests/empty_collection.nq
new file mode 100644
index 00000000..f85ed8fb
--- /dev/null
+++ b/tests/TrigTests/empty_collection.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+<http://a.example/s> <http://a.example/p> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
diff --git a/tests/TrigTests/empty_collection.trig b/tests/TrigTests/empty_collection.trig
new file mode 100644
index 00000000..c6aef8b2
--- /dev/null
+++ b/tests/TrigTests/empty_collection.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> () .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> () .}
diff --git a/tests/TrigTests/first.nq b/tests/TrigTests/first.nq
new file mode 100644
index 00000000..0ba78d55
--- /dev/null
+++ b/tests/TrigTests/first.nq
@@ -0,0 +1,14 @@
+<http://a.example/s> <http://a.example/p> _:b1 .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b2 .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b3 .
+_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "2"^^<http://www.w3.org/2001/XMLSchema#integer> .
+_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+<http://a.example/s> <http://a.example/p> _:b4 <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b5 <http://example/graph> .
+_:b5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+_:b5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b6 <http://example/graph> .
+_:b6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "2"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+_:b6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
diff --git a/tests/TrigTests/first.trig b/tests/TrigTests/first.trig
new file mode 100644
index 00000000..0f80aa69
--- /dev/null
+++ b/tests/TrigTests/first.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> ((1) 2) .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> ((1) 2) .}
diff --git a/tests/TrigTests/labeled_blank_node_graph.nq b/tests/TrigTests/labeled_blank_node_graph.nq
new file mode 100644
index 00000000..0522cbda
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_graph.nq
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/o> _:b1 .
diff --git a/tests/TrigTests/labeled_blank_node_graph.trig b/tests/TrigTests/labeled_blank_node_graph.trig
new file mode 100644
index 00000000..d71ef6b0
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_graph.trig
@@ -0,0 +1 @@
+_:b1 {<http://a.example/s> <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/labeled_blank_node_object.nq b/tests/TrigTests/labeled_blank_node_object.nq
new file mode 100644
index 00000000..58b5fad2
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_object.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> _:o .
+<http://a.example/s> <http://a.example/p> _:o <http://example/graph> .
diff --git a/tests/TrigTests/labeled_blank_node_object.trig b/tests/TrigTests/labeled_blank_node_object.trig
new file mode 100644
index 00000000..1ac7de76
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_object.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> _:o .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> _:o .}
diff --git a/tests/TrigTests/labeled_blank_node_subject.nq b/tests/TrigTests/labeled_blank_node_subject.nq
new file mode 100644
index 00000000..b1f38d51
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_subject.nq
@@ -0,0 +1,2 @@
+_:s <http://a.example/p> <http://a.example/o> .
+_:s <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/labeled_blank_node_subject.trig b/tests/TrigTests/labeled_blank_node_subject.trig
new file mode 100644
index 00000000..4dca0e98
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_subject.trig
@@ -0,0 +1,2 @@
+{_:s <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {_:s <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.nq b/tests/TrigTests/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.nq
new file mode 100644
index 00000000..969c0c2a
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> _:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽 .
+<http://a.example/s> <http://a.example/p> _:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽 <http://example/graph> .
diff --git a/tests/TrigTests/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.trig b/tests/TrigTests/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.trig
new file mode 100644
index 00000000..8920d476
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> _:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> _:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽 .}
diff --git a/tests/TrigTests/labeled_blank_node_with_leading_digit.nq b/tests/TrigTests/labeled_blank_node_with_leading_digit.nq
new file mode 100644
index 00000000..24f52035
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_with_leading_digit.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> _:0 .
+<http://a.example/s> <http://a.example/p> _:0 <http://example/graph> .
diff --git a/tests/TrigTests/labeled_blank_node_with_leading_digit.trig b/tests/TrigTests/labeled_blank_node_with_leading_digit.trig
new file mode 100644
index 00000000..32ff3860
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_with_leading_digit.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> _:0 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> _:0 .}
diff --git a/tests/TrigTests/labeled_blank_node_with_leading_underscore.nq b/tests/TrigTests/labeled_blank_node_with_leading_underscore.nq
new file mode 100644
index 00000000..57d0044e
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_with_leading_underscore.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> _:_ .
+<http://a.example/s> <http://a.example/p> _:_ <http://example/graph> .
diff --git a/tests/TrigTests/labeled_blank_node_with_leading_underscore.trig b/tests/TrigTests/labeled_blank_node_with_leading_underscore.trig
new file mode 100644
index 00000000..11bd621c
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_with_leading_underscore.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> _:_ .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> _:_ .}
diff --git a/tests/TrigTests/labeled_blank_node_with_non_leading_extras.nq b/tests/TrigTests/labeled_blank_node_with_non_leading_extras.nq
new file mode 100644
index 00000000..ebf8024c
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_with_non_leading_extras.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> _:a·̀ͯ‿.⁀ .
+<http://a.example/s> <http://a.example/p> _:a·̀ͯ‿.⁀ <http://example/graph> .
diff --git a/tests/TrigTests/labeled_blank_node_with_non_leading_extras.trig b/tests/TrigTests/labeled_blank_node_with_non_leading_extras.trig
new file mode 100644
index 00000000..dad502a4
--- /dev/null
+++ b/tests/TrigTests/labeled_blank_node_with_non_leading_extras.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> _:a·̀ͯ‿.⁀ .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> _:a·̀ͯ‿.⁀ .}
diff --git a/tests/TrigTests/langtagged_LONG.trig b/tests/TrigTests/langtagged_LONG.trig
new file mode 100644
index 00000000..d63e0e19
--- /dev/null
+++ b/tests/TrigTests/langtagged_LONG.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> """chat"""@en .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> """chat"""@en .}
diff --git a/tests/TrigTests/langtagged_LONG_with_subtag.nq b/tests/TrigTests/langtagged_LONG_with_subtag.nq
new file mode 100644
index 00000000..14b56574
--- /dev/null
+++ b/tests/TrigTests/langtagged_LONG_with_subtag.nq
@@ -0,0 +1,2 @@
+<http://example.org/ex#a> <http://example.org/ex#b> "Cheers"@en-UK .
+<http://example.org/ex#a> <http://example.org/ex#b> "Cheers"@en-UK <http://example/graph> .
diff --git a/tests/TrigTests/langtagged_LONG_with_subtag.trig b/tests/TrigTests/langtagged_LONG_with_subtag.trig
new file mode 100644
index 00000000..c7ba8f2d
--- /dev/null
+++ b/tests/TrigTests/langtagged_LONG_with_subtag.trig
@@ -0,0 +1,4 @@
+# Test long literal with lang tag
+@prefix : <http://example.org/ex#> .
+{:a :b """Cheers"""@en-UK .}
+<http://example/graph> {:a :b """Cheers"""@en-UK .}
diff --git a/tests/TrigTests/langtagged_non_LONG.nq b/tests/TrigTests/langtagged_non_LONG.nq
new file mode 100644
index 00000000..7e0a5b9e
--- /dev/null
+++ b/tests/TrigTests/langtagged_non_LONG.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "chat"@en .
+<http://a.example/s> <http://a.example/p> "chat"@en <http://example/graph> .
diff --git a/tests/TrigTests/langtagged_non_LONG.trig b/tests/TrigTests/langtagged_non_LONG.trig
new file mode 100644
index 00000000..bebcb884
--- /dev/null
+++ b/tests/TrigTests/langtagged_non_LONG.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> "chat"@en .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> "chat"@en .}
diff --git a/tests/TrigTests/lantag_with_subtag.nq b/tests/TrigTests/lantag_with_subtag.nq
new file mode 100644
index 00000000..165aa77c
--- /dev/null
+++ b/tests/TrigTests/lantag_with_subtag.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "chat"@en-us .
+<http://a.example/s> <http://a.example/p> "chat"@en-us <http://example/graph> .
diff --git a/tests/TrigTests/lantag_with_subtag.trig b/tests/TrigTests/lantag_with_subtag.trig
new file mode 100644
index 00000000..d25f1039
--- /dev/null
+++ b/tests/TrigTests/lantag_with_subtag.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> "chat"@en-us .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> "chat"@en-us .}
diff --git a/tests/TrigTests/last.nq b/tests/TrigTests/last.nq
new file mode 100644
index 00000000..54b3d790
--- /dev/null
+++ b/tests/TrigTests/last.nq
@@ -0,0 +1,14 @@
+<http://a.example/s> <http://a.example/p> _:b1 .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b2 .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b3 .
+_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "2"^^<http://www.w3.org/2001/XMLSchema#integer> .
+_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+<http://a.example/s> <http://a.example/p> _:b4 <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b5 <http://example/graph> .
+_:b5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b6 <http://example/graph> .
+_:b6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "2"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+_:b6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
+_:b5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
diff --git a/tests/TrigTests/last.trig b/tests/TrigTests/last.trig
new file mode 100644
index 00000000..6fd17f7f
--- /dev/null
+++ b/tests/TrigTests/last.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> (1 (2)) .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> (1 (2)) .}
diff --git a/tests/TrigTests/literal_false.nq b/tests/TrigTests/literal_false.nq
new file mode 100644
index 00000000..9a334557
--- /dev/null
+++ b/tests/TrigTests/literal_false.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "false"^^<http://www.w3.org/2001/XMLSchema#boolean> .
+<http://a.example/s> <http://a.example/p> "false"^^<http://www.w3.org/2001/XMLSchema#boolean> <http://example/graph> .
diff --git a/tests/TrigTests/literal_false.trig b/tests/TrigTests/literal_false.trig
new file mode 100644
index 00000000..e1f6f447
--- /dev/null
+++ b/tests/TrigTests/literal_false.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> false .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> false .}
diff --git a/tests/TrigTests/literal_true.nq b/tests/TrigTests/literal_true.nq
new file mode 100644
index 00000000..39675c3b
--- /dev/null
+++ b/tests/TrigTests/literal_true.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> .
+<http://a.example/s> <http://a.example/p> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> <http://example/graph> .
diff --git a/tests/TrigTests/literal_true.trig b/tests/TrigTests/literal_true.trig
new file mode 100644
index 00000000..b49aa1ac
--- /dev/null
+++ b/tests/TrigTests/literal_true.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> true .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> true .}
diff --git a/tests/TrigTests/literal_with_BACKSPACE.nq b/tests/TrigTests/literal_with_BACKSPACE.nq
new file mode 100644
index 00000000..e4e9a247
--- /dev/null
+++ b/tests/TrigTests/literal_with_BACKSPACE.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\u0008" .
+<http://a.example/s> <http://a.example/p> "\u0008" <http://example/graph> .
diff --git a/tests/TrigTests/literal_with_BACKSPACE.trig b/tests/TrigTests/literal_with_BACKSPACE.trig
new file mode 100644
index 00000000..0a3a1cac
--- /dev/null
+++ b/tests/TrigTests/literal_with_BACKSPACE.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '' .}
diff --git a/tests/TrigTests/literal_with_CARRIAGE_RETURN.nq b/tests/TrigTests/literal_with_CARRIAGE_RETURN.nq
new file mode 100644
index 00000000..d1ecddce
--- /dev/null
+++ b/tests/TrigTests/literal_with_CARRIAGE_RETURN.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\r" .
+<http://a.example/s> <http://a.example/p> "\r" <http://example/graph> .
diff --git a/tests/TrigTests/literal_with_CARRIAGE_RETURN.trig b/tests/TrigTests/literal_with_CARRIAGE_RETURN.trig
new file mode 100644
index 00000000..18d6fe84
--- /dev/null
+++ b/tests/TrigTests/literal_with_CARRIAGE_RETURN.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> ''' ''' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> ''' ''' .} \ No newline at end of file
diff --git a/tests/TrigTests/literal_with_CHARACTER_TABULATION.nq b/tests/TrigTests/literal_with_CHARACTER_TABULATION.nq
new file mode 100644
index 00000000..4baf1754
--- /dev/null
+++ b/tests/TrigTests/literal_with_CHARACTER_TABULATION.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\t" .
+<http://a.example/s> <http://a.example/p> "\t" <http://example/graph> .
diff --git a/tests/TrigTests/literal_with_CHARACTER_TABULATION.trig b/tests/TrigTests/literal_with_CHARACTER_TABULATION.trig
new file mode 100644
index 00000000..65b4152a
--- /dev/null
+++ b/tests/TrigTests/literal_with_CHARACTER_TABULATION.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> ' ' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> ' ' .}
diff --git a/tests/TrigTests/literal_with_FORM_FEED.nq b/tests/TrigTests/literal_with_FORM_FEED.nq
new file mode 100644
index 00000000..c6157bf3
--- /dev/null
+++ b/tests/TrigTests/literal_with_FORM_FEED.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\u000C" .
+<http://a.example/s> <http://a.example/p> "\u000C" <http://example/graph> .
diff --git a/tests/TrigTests/literal_with_FORM_FEED.trig b/tests/TrigTests/literal_with_FORM_FEED.trig
new file mode 100644
index 00000000..742f7cac
--- /dev/null
+++ b/tests/TrigTests/literal_with_FORM_FEED.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> ' ' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> ' ' .}
diff --git a/tests/TrigTests/literal_with_LINE_FEED.nq b/tests/TrigTests/literal_with_LINE_FEED.nq
new file mode 100644
index 00000000..facb59ec
--- /dev/null
+++ b/tests/TrigTests/literal_with_LINE_FEED.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\n" .
+<http://a.example/s> <http://a.example/p> "\n" <http://example/graph> .
diff --git a/tests/TrigTests/literal_with_LINE_FEED.trig b/tests/TrigTests/literal_with_LINE_FEED.trig
new file mode 100644
index 00000000..26c292d9
--- /dev/null
+++ b/tests/TrigTests/literal_with_LINE_FEED.trig
@@ -0,0 +1,4 @@
+{<http://a.example/s> <http://a.example/p> '''
+''' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '''
+''' .} \ No newline at end of file
diff --git a/tests/TrigTests/literal_with_REVERSE_SOLIDUS.nq b/tests/TrigTests/literal_with_REVERSE_SOLIDUS.nq
new file mode 100644
index 00000000..45674069
--- /dev/null
+++ b/tests/TrigTests/literal_with_REVERSE_SOLIDUS.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "\\" .
+<http://a.example/s> <http://a.example/p> "\\" <http://example/graph> .
diff --git a/tests/TrigTests/literal_with_REVERSE_SOLIDUS.trig b/tests/TrigTests/literal_with_REVERSE_SOLIDUS.trig
new file mode 100644
index 00000000..b939dc28
--- /dev/null
+++ b/tests/TrigTests/literal_with_REVERSE_SOLIDUS.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '\\' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '\\' .}
diff --git a/tests/TrigTests/literal_with_escaped_BACKSPACE.trig b/tests/TrigTests/literal_with_escaped_BACKSPACE.trig
new file mode 100644
index 00000000..f13d246b
--- /dev/null
+++ b/tests/TrigTests/literal_with_escaped_BACKSPACE.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '\b' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '\b' .}
diff --git a/tests/TrigTests/literal_with_escaped_CARRIAGE_RETURN.trig b/tests/TrigTests/literal_with_escaped_CARRIAGE_RETURN.trig
new file mode 100644
index 00000000..c2ded66d
--- /dev/null
+++ b/tests/TrigTests/literal_with_escaped_CARRIAGE_RETURN.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '\r' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '\r' .}
diff --git a/tests/TrigTests/literal_with_escaped_CHARACTER_TABULATION.trig b/tests/TrigTests/literal_with_escaped_CHARACTER_TABULATION.trig
new file mode 100644
index 00000000..60dbac21
--- /dev/null
+++ b/tests/TrigTests/literal_with_escaped_CHARACTER_TABULATION.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '\t' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '\t' .}
diff --git a/tests/TrigTests/literal_with_escaped_FORM_FEED.trig b/tests/TrigTests/literal_with_escaped_FORM_FEED.trig
new file mode 100644
index 00000000..63f8dc97
--- /dev/null
+++ b/tests/TrigTests/literal_with_escaped_FORM_FEED.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '\f' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '\f' .}
diff --git a/tests/TrigTests/literal_with_escaped_LINE_FEED.trig b/tests/TrigTests/literal_with_escaped_LINE_FEED.trig
new file mode 100644
index 00000000..2c1f89a4
--- /dev/null
+++ b/tests/TrigTests/literal_with_escaped_LINE_FEED.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '\n' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '\n' .}
diff --git a/tests/TrigTests/literal_with_numeric_escape4.nq b/tests/TrigTests/literal_with_numeric_escape4.nq
new file mode 100644
index 00000000..84fce641
--- /dev/null
+++ b/tests/TrigTests/literal_with_numeric_escape4.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "o" .
+<http://a.example/s> <http://a.example/p> "o" <http://example/graph> .
diff --git a/tests/TrigTests/literal_with_numeric_escape4.trig b/tests/TrigTests/literal_with_numeric_escape4.trig
new file mode 100644
index 00000000..1c868cc9
--- /dev/null
+++ b/tests/TrigTests/literal_with_numeric_escape4.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '\u006F' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '\u006F' .}
diff --git a/tests/TrigTests/literal_with_numeric_escape8.trig b/tests/TrigTests/literal_with_numeric_escape8.trig
new file mode 100644
index 00000000..b36ff3ea
--- /dev/null
+++ b/tests/TrigTests/literal_with_numeric_escape8.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> '\U0000006F' .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> '\U0000006F' .}
diff --git a/tests/TrigTests/localName_with_PN_CHARS_BASE_character_boundaries.nq b/tests/TrigTests/localName_with_PN_CHARS_BASE_character_boundaries.nq
new file mode 100644
index 00000000..1f93580c
--- /dev/null
+++ b/tests/TrigTests/localName_with_PN_CHARS_BASE_character_boundaries.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/AZaz\u00C0\u00D6\u00D8\u00F6\u00F8\u02FF\u0370\u037D\u037F\u1FFF\u200C\u200D\u2070\u218F\u2C00\u2FEF\u3001\uD7FF\uF900\uFDCF\uFDF0\uFFEF\U00010000\U000EFFFD> .
+<http://a.example/s> <http://a.example/p> <http://a.example/AZaz\u00C0\u00D6\u00D8\u00F6\u00F8\u02FF\u0370\u037D\u037F\u1FFF\u200C\u200D\u2070\u218F\u2C00\u2FEF\u3001\uD7FF\uF900\uFDCF\uFDF0\uFFEF\U00010000\U000EFFFD> <http://example/graph> .
diff --git a/tests/TrigTests/localName_with_PN_CHARS_BASE_character_boundaries.trig b/tests/TrigTests/localName_with_PN_CHARS_BASE_character_boundaries.trig
new file mode 100644
index 00000000..08221635
--- /dev/null
+++ b/tests/TrigTests/localName_with_PN_CHARS_BASE_character_boundaries.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/> .
+{<http://a.example/s> <http://a.example/p> p:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ￯𐀀󯿽 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> p:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ￯𐀀󯿽 .}
diff --git a/tests/TrigTests/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nq b/tests/TrigTests/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nq
new file mode 100644
index 00000000..c347f934
--- /dev/null
+++ b/tests/TrigTests/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/AZaz\u00C0\u00D6\u00D8\u00F6\u00F8\u02FF\u0370\u037D\u0384\u1FFE\u200C\u200D\u2070\u2189\u2C00\u2FD5\u3001\uD7FB\uFA0E\uFDC7\uFDF0\uFFEF\U00010000\U000E01EF> .
+<http://a.example/s> <http://a.example/p> <http://a.example/AZaz\u00C0\u00D6\u00D8\u00F6\u00F8\u02FF\u0370\u037D\u0384\u1FFE\u200C\u200D\u2070\u2189\u2C00\u2FD5\u3001\uD7FB\uFA0E\uFDC7\uFDF0\uFFEF\U00010000\U000E01EF> <http://example/graph> .
diff --git a/tests/TrigTests/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.trig b/tests/TrigTests/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.trig
new file mode 100644
index 00000000..c3f36e9e
--- /dev/null
+++ b/tests/TrigTests/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/> .
+{<http://a.example/s> <http://a.example/p> p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯𐀀󠇯 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯𐀀󠇯 .}
diff --git a/tests/TrigTests/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nq b/tests/TrigTests/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nq
new file mode 100644
index 00000000..988855ef
--- /dev/null
+++ b/tests/TrigTests/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/AZaz\u00C0\u00D6\u00D8\u00F6\u00F8\u02FF\u0370\u037D\u0384\u1FFE\u200C\u200D\u2070\u2189\u2C00\u2FD5\u3001\uD7FB\uFA0E\uFDC7\uFDF0\uFFEF> .
+<http://a.example/s> <http://a.example/p> <http://a.example/AZaz\u00C0\u00D6\u00D8\u00F6\u00F8\u02FF\u0370\u037D\u0384\u1FFE\u200C\u200D\u2070\u2189\u2C00\u2FD5\u3001\uD7FB\uFA0E\uFDC7\uFDF0\uFFEF> <http://example/graph> .
diff --git a/tests/TrigTests/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.trig b/tests/TrigTests/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.trig
new file mode 100644
index 00000000..dd48ac12
--- /dev/null
+++ b/tests/TrigTests/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/> .
+{<http://a.example/s> <http://a.example/p> p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯ .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯ .}
diff --git a/tests/TrigTests/localName_with_leading_digit.nq b/tests/TrigTests/localName_with_leading_digit.nq
new file mode 100644
index 00000000..6f05d1ca
--- /dev/null
+++ b/tests/TrigTests/localName_with_leading_digit.nq
@@ -0,0 +1,2 @@
+<http://a.example/0> <http://a.example/p> <http://a.example/o> .
+<http://a.example/0> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/localName_with_leading_digit.trig b/tests/TrigTests/localName_with_leading_digit.trig
new file mode 100644
index 00000000..540aa007
--- /dev/null
+++ b/tests/TrigTests/localName_with_leading_digit.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{p:0 <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:0 <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/localName_with_leading_underscore.nq b/tests/TrigTests/localName_with_leading_underscore.nq
new file mode 100644
index 00000000..2cb72818
--- /dev/null
+++ b/tests/TrigTests/localName_with_leading_underscore.nq
@@ -0,0 +1,2 @@
+<http://a.example/_> <http://a.example/p> <http://a.example/o> .
+<http://a.example/_> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/localName_with_leading_underscore.trig b/tests/TrigTests/localName_with_leading_underscore.trig
new file mode 100644
index 00000000..72f2e30b
--- /dev/null
+++ b/tests/TrigTests/localName_with_leading_underscore.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{p:_ <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:_ <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nq b/tests/TrigTests/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nq
new file mode 100644
index 00000000..9c6a3d4d
--- /dev/null
+++ b/tests/TrigTests/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/AZaz\u00C0\u00D6\u00D8\u00F6\u00F8\u02FF\u0370\u037D\u037F\u1FFF\u200C\u200D\u2070\u218F\u2C00\u2FEF\u3001\uD7FF\uFA0E\uFDCF\uFDF0\uFFEF\U00010000\U000EFFFD> .
+<http://a.example/s> <http://a.example/p> <http://a.example/AZaz\u00C0\u00D6\u00D8\u00F6\u00F8\u02FF\u0370\u037D\u037F\u1FFF\u200C\u200D\u2070\u218F\u2C00\u2FEF\u3001\uD7FF\uFA0E\uFDCF\uFDF0\uFFEF\U00010000\U000EFFFD> <http://example/graph> .
diff --git a/tests/TrigTests/localName_with_nfc_PN_CHARS_BASE_character_boundaries.trig b/tests/TrigTests/localName_with_nfc_PN_CHARS_BASE_character_boundaries.trig
new file mode 100644
index 00000000..d998e3d4
--- /dev/null
+++ b/tests/TrigTests/localName_with_nfc_PN_CHARS_BASE_character_boundaries.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/> .
+{<http://a.example/s> <http://a.example/p> p:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿﨎﷏ﷰ￯𐀀󯿽 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> p:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿﨎﷏ﷰ￯𐀀󯿽 .}
diff --git a/tests/TrigTests/localName_with_non_leading_extras.nq b/tests/TrigTests/localName_with_non_leading_extras.nq
new file mode 100644
index 00000000..40353439
--- /dev/null
+++ b/tests/TrigTests/localName_with_non_leading_extras.nq
@@ -0,0 +1,2 @@
+<http://a.example/a\u00B7\u0300\u036F\u203F.\u2040> <http://a.example/p> <http://a.example/o> .
+<http://a.example/a\u00B7\u0300\u036F\u203F.\u2040> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/localName_with_non_leading_extras.trig b/tests/TrigTests/localName_with_non_leading_extras.trig
new file mode 100644
index 00000000..bd1c32c8
--- /dev/null
+++ b/tests/TrigTests/localName_with_non_leading_extras.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{p:a·̀ͯ‿.⁀ <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:a·̀ͯ‿.⁀ <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/localname_with_COLON.nq b/tests/TrigTests/localname_with_COLON.nq
new file mode 100644
index 00000000..9a1a0d5a
--- /dev/null
+++ b/tests/TrigTests/localname_with_COLON.nq
@@ -0,0 +1,2 @@
+<http://a.example/s:> <http://a.example/p> <http://a.example/o> .
+<http://a.example/s:> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/localname_with_COLON.trig b/tests/TrigTests/localname_with_COLON.trig
new file mode 100644
index 00000000..e166d575
--- /dev/null
+++ b/tests/TrigTests/localname_with_COLON.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{p:s: <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:s: <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/manifest.ttl b/tests/TrigTests/manifest.ttl
new file mode 100644
index 00000000..34158259
--- /dev/null
+++ b/tests/TrigTests/manifest.ttl
@@ -0,0 +1,2883 @@
+# TriG 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
+
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix mf: <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> .
+@prefix qt: <http://www.w3.org/2001/sw/DataAccess/tests/test-query#> .
+
+@prefix rdft: <http://www.w3.org/ns/rdftest#> .
+
+<> rdf:type mf:Manifest ;
+ mf:name "TriG tests" ;
+ mf:entries
+ (
+ # TriG specific tests
+ <#anonymous_blank_node_graph>
+ <#labeled_blank_node_graph>
+ <#alternating_iri_graphs>
+ <#alternating_bnode_graphs>
+ <#trig-syntax-bad-base-04>
+ <#trig-syntax-bad-base-05>
+ <#trig-syntax-bad-prefix-06>
+ <#trig-syntax-bad-prefix-07>
+ <#trig-syntax-struct-06>
+ <#trig-syntax-struct-07>
+ <#trig-syntax-minimal-whitespace-01>
+
+ # From Turtle tests
+ # atomic tests
+ <#IRI_subject>
+ <#IRI_with_four_digit_numeric_escape>
+ <#IRI_with_eight_digit_numeric_escape>
+ <#IRI_with_all_punctuation>
+ <#bareword_a_predicate>
+ <#old_style_prefix>
+ <#SPARQL_style_prefix>
+ <#prefixed_IRI_predicate>
+ <#prefixed_IRI_object>
+ <#prefix_only_IRI>
+ <#prefix_with_PN_CHARS_BASE_character_boundaries>
+ <#prefix_with_non_leading_extras>
+ <#default_namespace_IRI>
+ <#prefix_reassigned_and_used>
+ <#reserved_escaped_localName>
+ <#percent_escaped_localName>
+ <#HYPHEN_MINUS_in_localName>
+ <#underscore_in_localName>
+ <#localname_with_COLON>
+ <#localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries>
+ <#localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries>
+ <#localName_with_nfc_PN_CHARS_BASE_character_boundaries>
+ <#localName_with_leading_underscore>
+ <#localName_with_leading_digit>
+ <#localName_with_non_leading_extras>
+ <#old_style_base>
+ <#SPARQL_style_base>
+ <#labeled_blank_node_subject>
+ <#labeled_blank_node_object>
+ <#labeled_blank_node_with_PN_CHARS_BASE_character_boundaries>
+ <#labeled_blank_node_with_leading_underscore>
+ <#labeled_blank_node_with_leading_digit>
+ <#labeled_blank_node_with_non_leading_extras>
+ <#anonymous_blank_node_subject>
+ <#anonymous_blank_node_object>
+ <#sole_blankNodePropertyList>
+ <#blankNodePropertyList_as_subject>
+ <#blankNodePropertyList_as_object>
+ <#blankNodePropertyList_with_multiple_triples>
+ <#nested_blankNodePropertyLists>
+ <#blankNodePropertyList_containing_collection>
+ <#collection_subject>
+ <#collection_object>
+ <#empty_collection>
+ <#nested_collection>
+ <#first>
+ <#last>
+ <#LITERAL1>
+ <#LITERAL1_ascii_boundaries>
+ <#LITERAL1_with_UTF8_boundaries>
+ <#LITERAL1_all_controls>
+ <#LITERAL1_all_punctuation>
+ <#LITERAL_LONG1>
+ <#LITERAL_LONG1_ascii_boundaries>
+ <#LITERAL_LONG1_with_UTF8_boundaries>
+ <#LITERAL_LONG1_with_1_squote>
+ <#LITERAL_LONG1_with_2_squotes>
+ <#LITERAL2>
+ <#LITERAL2_ascii_boundaries>
+ <#LITERAL2_with_UTF8_boundaries>
+ <#LITERAL_LONG2>
+ <#LITERAL_LONG2_ascii_boundaries>
+ <#LITERAL_LONG2_with_UTF8_boundaries>
+ <#LITERAL_LONG2_with_1_squote>
+ <#LITERAL_LONG2_with_2_squotes>
+ <#literal_with_CHARACTER_TABULATION>
+ <#literal_with_BACKSPACE>
+ <#literal_with_LINE_FEED>
+ <#literal_with_CARRIAGE_RETURN>
+ <#literal_with_FORM_FEED>
+ <#literal_with_REVERSE_SOLIDUS>
+ <#literal_with_escaped_CHARACTER_TABULATION>
+ <#literal_with_escaped_BACKSPACE>
+ <#literal_with_escaped_LINE_FEED>
+ <#literal_with_escaped_CARRIAGE_RETURN>
+ <#literal_with_escaped_FORM_FEED>
+ <#literal_with_numeric_escape4>
+ <#literal_with_numeric_escape8>
+ <#IRIREF_datatype>
+ <#prefixed_name_datatype>
+ <#bareword_integer>
+ <#bareword_decimal>
+ <#bareword_double>
+ <#double_lower_case_e>
+ <#negative_numeric>
+ <#positive_numeric>
+ <#numeric_with_leading_0>
+ <#literal_true>
+ <#literal_false>
+ <#langtagged_non_LONG>
+ <#langtagged_LONG>
+ <#lantag_with_subtag>
+ <#objectList_with_two_objects>
+ <#predicateObjectList_with_two_objectLists>
+ <#repeated_semis_at_end>
+ <#repeated_semis_not_at_end>
+
+ # tests requested by Jeremy Carroll
+ # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c35
+ <#comment_following_localName>
+ <#number_sign_following_localName>
+ <#comment_following_PNAME_NS>
+ <#number_sign_following_PNAME_NS>
+
+ # tests from Dave Beckett
+ # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c28
+ <#LITERAL_LONG2_with_REVERSE_SOLIDUS>
+ <#trig-syntax-bad-LITERAL2_with_langtag_and_datatype>
+ <#two_LITERAL_LONG2s>
+ <#langtagged_LONG_with_subtag>
+
+ # original tests-ttl
+ <#trig-syntax-file-01>
+ <#trig-syntax-file-02>
+ <#trig-syntax-file-03>
+ <#trig-syntax-uri-01>
+ <#trig-syntax-uri-02>
+ <#trig-syntax-uri-03>
+ <#trig-syntax-uri-04>
+ <#trig-syntax-base-01>
+ <#trig-syntax-base-02>
+ <#trig-syntax-base-03>
+ <#trig-syntax-base-04>
+ <#trig-syntax-prefix-01>
+ <#trig-syntax-prefix-02>
+ <#trig-syntax-prefix-03>
+ <#trig-syntax-prefix-04>
+ <#trig-syntax-prefix-05>
+ <#trig-syntax-prefix-06>
+ <#trig-syntax-prefix-07>
+ <#trig-syntax-prefix-08>
+ <#trig-syntax-prefix-09>
+ <#trig-syntax-string-01>
+ <#trig-syntax-string-02>
+ <#trig-syntax-string-03>
+ <#trig-syntax-string-04>
+ <#trig-syntax-string-05>
+ <#trig-syntax-string-06>
+ <#trig-syntax-string-07>
+ <#trig-syntax-string-08>
+ <#trig-syntax-string-09>
+ <#trig-syntax-string-10>
+ <#trig-syntax-string-11>
+ <#trig-syntax-str-esc-01>
+ <#trig-syntax-str-esc-02>
+ <#trig-syntax-str-esc-03>
+ <#trig-syntax-pname-esc-01>
+ <#trig-syntax-pname-esc-02>
+ <#trig-syntax-pname-esc-03>
+ <#trig-syntax-bnode-01>
+ <#trig-syntax-bnode-02>
+ <#trig-syntax-bnode-03>
+ <#trig-syntax-bnode-04>
+ <#trig-syntax-bnode-05>
+ <#trig-syntax-bnode-06>
+ <#trig-syntax-bnode-07>
+ <#trig-syntax-bnode-08>
+ <#trig-syntax-bnode-09>
+ <#trig-syntax-bnode-10>
+ <#trig-syntax-number-01>
+ <#trig-syntax-number-02>
+ <#trig-syntax-number-03>
+ <#trig-syntax-number-04>
+ <#trig-syntax-number-05>
+ <#trig-syntax-number-06>
+ <#trig-syntax-number-07>
+ <#trig-syntax-number-08>
+ <#trig-syntax-number-09>
+ <#trig-syntax-number-10>
+ <#trig-syntax-number-11>
+ <#trig-syntax-datatypes-01>
+ <#trig-syntax-datatypes-02>
+ <#trig-syntax-kw-01>
+ <#trig-syntax-kw-02>
+ <#trig-syntax-kw-03>
+ <#trig-syntax-struct-01>
+ <#trig-syntax-struct-02>
+ <#trig-syntax-struct-03>
+ <#trig-syntax-struct-04>
+ <#trig-syntax-struct-05>
+ <#trig-syntax-lists-01>
+ <#trig-syntax-lists-02>
+ <#trig-syntax-lists-03>
+ <#trig-syntax-lists-04>
+ <#trig-syntax-lists-05>
+ <#trig-syntax-bad-uri-01>
+ <#trig-syntax-bad-uri-02>
+ <#trig-syntax-bad-uri-03>
+ <#trig-syntax-bad-uri-04>
+ <#trig-syntax-bad-uri-05>
+ <#trig-syntax-bad-prefix-01>
+ <#trig-syntax-bad-prefix-02>
+ <#trig-syntax-bad-prefix-03>
+ <#trig-syntax-bad-prefix-04>
+ <#trig-syntax-bad-prefix-05>
+ <#trig-syntax-bad-base-01>
+ <#trig-syntax-bad-base-02>
+ <#trig-syntax-bad-base-03>
+ <#trig-syntax-bad-struct-02>
+ <#trig-syntax-bad-struct-03>
+ <#trig-syntax-bad-struct-04>
+ <#trig-syntax-bad-struct-05>
+ <#trig-syntax-bad-struct-06>
+ <#trig-syntax-bad-struct-07>
+ <#trig-syntax-bad-kw-01>
+ <#trig-syntax-bad-kw-02>
+ <#trig-syntax-bad-kw-03>
+ <#trig-syntax-bad-kw-04>
+ <#trig-syntax-bad-kw-05>
+ <#trig-syntax-bad-n3-extras-01>
+ <#trig-syntax-bad-n3-extras-02>
+ <#trig-syntax-bad-n3-extras-03>
+ <#trig-syntax-bad-n3-extras-04>
+ <#trig-syntax-bad-n3-extras-05>
+ <#trig-syntax-bad-n3-extras-06>
+ <#trig-syntax-bad-n3-extras-07>
+ <#trig-syntax-bad-n3-extras-08>
+ <#trig-syntax-bad-n3-extras-09>
+ <#trig-syntax-bad-n3-extras-10>
+ <#trig-syntax-bad-n3-extras-11>
+ <#trig-syntax-bad-n3-extras-12>
+ <#trig-syntax-bad-n3-extras-13>
+ <#trig-syntax-bad-struct-09>
+ <#trig-syntax-bad-struct-10>
+ <#trig-syntax-bad-struct-12>
+ <#trig-syntax-bad-struct-13>
+ <#trig-syntax-bad-struct-14>
+ <#trig-syntax-bad-struct-15>
+ <#trig-syntax-bad-struct-16>
+ <#trig-syntax-bad-struct-17>
+ <#trig-syntax-bad-lang-01>
+ <#trig-syntax-bad-esc-01>
+ <#trig-syntax-bad-esc-02>
+ <#trig-syntax-bad-esc-03>
+ <#trig-syntax-bad-esc-04>
+ <#trig-syntax-bad-pname-01>
+ <#trig-syntax-bad-pname-02>
+ <#trig-syntax-bad-pname-03>
+ <#trig-syntax-bad-string-01>
+ <#trig-syntax-bad-string-02>
+ <#trig-syntax-bad-string-03>
+ <#trig-syntax-bad-string-04>
+ <#trig-syntax-bad-string-05>
+ <#trig-syntax-bad-string-06>
+ <#trig-syntax-bad-string-07>
+ <#trig-syntax-bad-num-01>
+ <#trig-syntax-bad-num-02>
+ <#trig-syntax-bad-num-03>
+ <#trig-syntax-bad-num-04>
+ <#trig-syntax-bad-num-05>
+ <#trig-eval-struct-01>
+ <#trig-eval-struct-02>
+ <#trig-subm-01>
+ <#trig-subm-02>
+ <#trig-subm-03>
+ <#trig-subm-04>
+ <#trig-subm-05>
+ <#trig-subm-06>
+ <#trig-subm-07>
+ <#trig-subm-08>
+ <#trig-subm-09>
+ <#trig-subm-10>
+ <#trig-subm-11>
+ <#trig-subm-12>
+ <#trig-subm-13>
+ <#trig-subm-14>
+ <#trig-subm-15>
+ <#trig-subm-16>
+ <#trig-subm-17>
+ <#trig-subm-18>
+ <#trig-subm-19>
+ <#trig-subm-20>
+ <#trig-subm-21>
+ <#trig-subm-22>
+ <#trig-subm-23>
+ <#trig-subm-24>
+ <#trig-subm-25>
+ <#trig-subm-26>
+ <#trig-subm-27>
+ <#trig-eval-bad-01>
+ <#trig-eval-bad-02>
+ <#trig-eval-bad-03>
+ <#trig-eval-bad-04>
+
+ # tests from David Robillard
+ # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c21
+ <#trig-syntax-bad-blank-label-dot-end>
+ <#trig-syntax-bad-ln-dash-start>
+ <#trig-syntax-bad-ln-escape-start>
+ <#trig-syntax-bad-ln-escape>
+ <#trig-syntax-bad-missing-ns-dot-end>
+ <#trig-syntax-bad-missing-ns-dot-start>
+ <#trig-syntax-bad-ns-dot-end>
+ <#trig-syntax-bad-ns-dot-start>
+ <#trig-syntax-bad-number-dot-in-anon>
+ <#trig-syntax-bad-list-01>
+ <#trig-syntax-bad-list-02>
+ <#trig-syntax-bad-list-03>
+ <#trig-syntax-bad-list-04>
+
+ <#trig-syntax-blank-label>
+ <#trig-syntax-ln-colons>
+ <#trig-syntax-ln-dots>
+ <#trig-syntax-ns-dots>
+
+ # tests for bnode graph names, optional GRAPH keyword and
+ # triples outside {}
+ <#trig-kw-graph-01>
+ <#trig-kw-graph-02>
+ <#trig-kw-graph-03>
+ <#trig-kw-graph-04>
+ <#trig-kw-graph-05>
+
+ <#trig-kw-graph-06>
+ <#trig-kw-graph-07>
+ <#trig-kw-graph-08>
+ <#trig-kw-graph-09>
+
+ <#trig-kw-graph-10>
+
+ <#trig-graph-bad-01>
+ <#trig-graph-bad-02>
+ <#trig-graph-bad-03>
+ <#trig-graph-bad-04>
+ <#trig-graph-bad-05>
+
+ <#trig-graph-bad-06>
+ <#trig-graph-bad-07>
+ <#trig-graph-bad-08>
+ <#trig-graph-bad-09>
+
+ <#trig-graph-bad-10>
+ <#trig-graph-bad-11>
+
+ <#trig-bnodeplist-graph-01>
+
+ <#trig-collection-graph-01>
+ <#trig-collection-graph-02>
+
+ <#trig-turtle-01>
+ <#trig-turtle-02>
+ <#trig-turtle-03>
+ <#trig-turtle-04>
+ <#trig-turtle-05>
+
+ <#trig-turtle-06>
+
+ <#trig-turtle-bad-01>
+ <#trig-turtle-bad-02>
+
+ # Tests from N-Triples/N-Quads
+ ) .
+
+# TriG tests
+<#anonymous_blank_node_graph> rdf:type rdft:TestTrigEval ;
+ mf:name "anonymous_blank_node_graph" ;
+ rdfs:comment "anonymous blank node graph" ;
+ rdft:approval rdft:Approved ;
+ mf:action <anonymous_blank_node_graph.trig> ;
+ mf:result <labeled_blank_node_graph.nq> ;
+ .
+
+<#labeled_blank_node_graph> rdf:type rdft:TestTrigEval ;
+ mf:name "labeled_blank_node_graph" ;
+ rdfs:comment "labeled blank node graph" ;
+ rdft:approval rdft:Approved ;
+ mf:action <labeled_blank_node_graph.trig> ;
+ mf:result <labeled_blank_node_graph.nq> ;
+ .
+<#alternating_iri_graphs> rdf:type rdft:TestTrigEval ;
+ mf:name "alternating_iri_graphs" ;
+ rdfs:comment "alternating graphs with IRI names" ;
+ rdft:approval rdft:Approved ;
+ mf:action <alternating_iri_graphs.trig> ;
+ mf:result <alternating_iri_graphs.nq> ;
+ .
+
+<#alternating_bnode_graphs> rdf:type rdft:TestTrigEval ;
+ mf:name "alternating_bnode_graphs" ;
+ rdfs:comment "alternating graphs with BNode names" ;
+ rdft:approval rdft:Approved ;
+ mf:action <alternating_bnode_graphs.trig> ;
+ mf:result <alternating_bnode_graphs.nq> ;
+ .
+
+<#trig-syntax-bad-base-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-base-04" ;
+ rdfs:comment "@base inside graph (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-base-04.trig> ;
+ .
+
+<#trig-syntax-bad-base-05> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-base-05" ;
+ rdfs:comment "BASE inside graph (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-base-05.trig> ;
+ .
+
+<#trig-syntax-bad-prefix-06> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-prefix-06" ;
+ rdfs:comment "@prefix inside graph (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-prefix-06.trig> ;
+ .
+
+<#trig-syntax-bad-prefix-07> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-prefix-07" ;
+ rdfs:comment "PREFIX inside graph (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-prefix-07.trig> ;
+ .
+
+<#trig-syntax-struct-06> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-struct-06" ;
+ rdfs:comment "missing '.'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-struct-06.trig> ;
+ .
+
+<#trig-syntax-struct-07> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-struct-07" ;
+ rdfs:comment "trailing ';' no '.'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-struct-07.trig> ;
+ .
+
+<#trig-syntax-minimal-whitespace-01> a rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-minimal-whitespace-01" ;
+ rdfs:comment "tests absense of whitespace in various positions" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-minimal-whitespace-01.trig> ;
+ .
+# Original Turtle tests
+# atomic tests
+<#IRI_subject> rdf:type rdft:TestTrigEval ;
+ mf:name "IRI_subject" ;
+ rdfs:comment "IRI subject" ;
+ rdft:approval rdft:Approved ;
+ mf:action <IRI_subject.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#IRI_with_four_digit_numeric_escape> rdf:type rdft:TestTrigEval ;
+ mf:name "IRI_with_four_digit_numeric_escape" ;
+ rdfs:comment "IRI with four digit numeric escape (\\u)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <IRI_with_four_digit_numeric_escape.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#IRI_with_eight_digit_numeric_escape> rdf:type rdft:TestTrigEval ;
+ mf:name "IRI_with_eight_digit_numeric_escape" ;
+ rdfs:comment "IRI with eight digit numeric escape (\\U)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <IRI_with_eight_digit_numeric_escape.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#IRI_with_all_punctuation> rdf:type rdft:TestTrigEval ;
+ mf:name "IRI_with_all_punctuation" ;
+ rdfs:comment "IRI with all punctuation" ;
+ rdft:approval rdft:Approved ;
+ mf:action <IRI_with_all_punctuation.trig> ;
+ mf:result <IRI_with_all_punctuation.nq> ;
+ .
+
+<#bareword_a_predicate> rdf:type rdft:TestTrigEval ;
+ mf:name "bareword_a_predicate" ;
+ rdfs:comment "bareword a predicate" ;
+ rdft:approval rdft:Approved ;
+ mf:action <bareword_a_predicate.trig> ;
+ mf:result <bareword_a_predicate.nq> ;
+ .
+
+<#old_style_prefix> rdf:type rdft:TestTrigEval ;
+ mf:name "old_style_prefix" ;
+ rdfs:comment "old-style prefix" ;
+ rdft:approval rdft:Approved ;
+ mf:action <old_style_prefix.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#SPARQL_style_prefix> rdf:type rdft:TestTrigEval ;
+ mf:name "SPARQL_style_prefix" ;
+ rdfs:comment "SPARQL-style prefix" ;
+ rdft:approval rdft:Approved ;
+ mf:action <SPARQL_style_prefix.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#prefixed_IRI_predicate> rdf:type rdft:TestTrigEval ;
+ mf:name "prefixed_IRI_predicate" ;
+ rdfs:comment "prefixed IRI predicate" ;
+ rdft:approval rdft:Approved ;
+ mf:action <prefixed_IRI_predicate.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#prefixed_IRI_object> rdf:type rdft:TestTrigEval ;
+ mf:name "prefixed_IRI_object" ;
+ rdfs:comment "prefixed IRI object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <prefixed_IRI_object.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#prefix_only_IRI> rdf:type rdft:TestTrigEval ;
+ mf:name "prefix_only_IRI" ;
+ rdfs:comment "prefix-only IRI (p:)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <prefix_only_IRI.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#prefix_with_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "prefix_with_PN_CHARS_BASE_character_boundaries" ;
+ rdfs:comment "prefix with PN CHARS BASE character boundaries (prefix: AZazÀÖØöø...:)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <prefix_with_PN_CHARS_BASE_character_boundaries.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#prefix_with_non_leading_extras> rdf:type rdft:TestTrigEval ;
+ mf:name "prefix_with_non_leading_extras" ;
+ rdfs:comment "prefix with_non_leading_extras (_:a·̀ͯ‿.⁀)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <prefix_with_non_leading_extras.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries" ;
+ rdfs:comment "localName with assigned, NFC-normalized, basic-multilingual-plane PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.trig> ;
+ mf:result <localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nq> ;
+ .
+
+<#localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries" ;
+ rdfs:comment "localName with assigned, NFC-normalized PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.trig> ;
+ mf:result <localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nq> ;
+ .
+
+<#localName_with_nfc_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "localName_with_nfc_PN_CHARS_BASE_character_boundaries" ;
+ rdfs:comment "localName with nfc-normalize PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <localName_with_nfc_PN_CHARS_BASE_character_boundaries.trig> ;
+ mf:result <localName_with_nfc_PN_CHARS_BASE_character_boundaries.nq> ;
+ .
+
+<#default_namespace_IRI> rdf:type rdft:TestTrigEval ;
+ mf:name "default_namespace_IRI" ;
+ rdfs:comment "default namespace IRI (:ln)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <default_namespace_IRI.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#prefix_reassigned_and_used> rdf:type rdft:TestTrigEval ;
+ mf:name "prefix_reassigned_and_used" ;
+ rdfs:comment "prefix reassigned and used" ;
+ rdft:approval rdft:Approved ;
+ mf:action <prefix_reassigned_and_used.trig> ;
+ mf:result <prefix_reassigned_and_used.nq> ;
+ .
+
+<#reserved_escaped_localName> rdf:type rdft:TestTrigEval ;
+ mf:name "reserved_escaped_localName" ;
+ rdfs:comment "reserved-escaped local name" ;
+ rdft:approval rdft:Approved ;
+ mf:action <reserved_escaped_localName.trig> ;
+ mf:result <reserved_escaped_localName.nq> ;
+ .
+
+<#percent_escaped_localName> rdf:type rdft:TestTrigEval ;
+ mf:name "percent_escaped_localName" ;
+ rdfs:comment "percent-escaped local name" ;
+ rdft:approval rdft:Approved ;
+ mf:action <percent_escaped_localName.trig> ;
+ mf:result <percent_escaped_localName.nq> ;
+ .
+
+<#HYPHEN_MINUS_in_localName> rdf:type rdft:TestTrigEval ;
+ mf:name "HYPHEN_MINUS_in_localName" ;
+ rdfs:comment "HYPHEN-MINUS in local name" ;
+ rdft:approval rdft:Approved ;
+ mf:action <HYPHEN_MINUS_in_localName.trig> ;
+ mf:result <HYPHEN_MINUS_in_localName.nq> ;
+ .
+
+<#underscore_in_localName> rdf:type rdft:TestTrigEval ;
+ mf:name "underscore_in_localName" ;
+ rdfs:comment "underscore in local name" ;
+ rdft:approval rdft:Approved ;
+ mf:action <underscore_in_localName.trig> ;
+ mf:result <underscore_in_localName.nq> ;
+ .
+
+<#localname_with_COLON> rdf:type rdft:TestTrigEval ;
+ mf:name "localname_with_COLON" ;
+ rdfs:comment "localname with COLON" ;
+ rdft:approval rdft:Approved ;
+ mf:action <localname_with_COLON.trig> ;
+ mf:result <localname_with_COLON.nq> ;
+ .
+
+<#localName_with_leading_underscore> rdf:type rdft:TestTrigEval ;
+ mf:name "localName_with_leading_underscore" ;
+ rdfs:comment "localName with leading underscore (p:_)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <localName_with_leading_underscore.trig> ;
+ mf:result <localName_with_leading_underscore.nq> ;
+ .
+
+<#localName_with_leading_digit> rdf:type rdft:TestTrigEval ;
+ mf:name "localName_with_leading_digit" ;
+ rdfs:comment "localName with leading digit (p:_)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <localName_with_leading_digit.trig> ;
+ mf:result <localName_with_leading_digit.nq> ;
+ .
+
+<#localName_with_non_leading_extras> rdf:type rdft:TestTrigEval ;
+ mf:name "localName_with_non_leading_extras" ;
+ rdfs:comment "localName with_non_leading_extras (_:a·̀ͯ‿.⁀)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <localName_with_non_leading_extras.trig> ;
+ mf:result <localName_with_non_leading_extras.nq> ;
+ .
+
+<#old_style_base> rdf:type rdft:TestTrigEval ;
+ mf:name "old_style_base" ;
+ rdfs:comment "old-style base" ;
+ rdft:approval rdft:Approved ;
+ mf:action <old_style_base.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#SPARQL_style_base> rdf:type rdft:TestTrigEval ;
+ mf:name "SPARQL_style_base" ;
+ rdfs:comment "SPARQL-style base" ;
+ rdft:approval rdft:Approved ;
+ mf:action <SPARQL_style_base.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#labeled_blank_node_subject> rdf:type rdft:TestTrigEval ;
+ mf:name "labeled_blank_node_subject" ;
+ rdfs:comment "labeled blank node subject" ;
+ rdft:approval rdft:Approved ;
+ mf:action <labeled_blank_node_subject.trig> ;
+ mf:result <labeled_blank_node_subject.nq> ;
+ .
+
+<#labeled_blank_node_object> rdf:type rdft:TestTrigEval ;
+ mf:name "labeled_blank_node_object" ;
+ rdfs:comment "labeled blank node object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <labeled_blank_node_object.trig> ;
+ mf:result <labeled_blank_node_object.nq> ;
+ .
+
+<#labeled_blank_node_with_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "labeled_blank_node_with_PN_CHARS_BASE_character_boundaries" ;
+ rdfs:comment "labeled blank node with PN_CHARS_BASE character boundaries (_:AZazÀÖØöø...)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.trig> ;
+ mf:result <labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.nq> ;
+ .
+
+<#labeled_blank_node_with_leading_underscore> rdf:type rdft:TestTrigEval ;
+ mf:name "labeled_blank_node_with_leading_underscore" ;
+ rdfs:comment "labeled blank node with_leading_underscore (_:_)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <labeled_blank_node_with_leading_underscore.trig> ;
+ mf:result <labeled_blank_node_with_leading_underscore.nq> ;
+ .
+
+<#labeled_blank_node_with_leading_digit> rdf:type rdft:TestTrigEval ;
+ mf:name "labeled_blank_node_with_leading_digit" ;
+ rdfs:comment "labeled blank node with_leading_digit (_:0)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <labeled_blank_node_with_leading_digit.trig> ;
+ mf:result <labeled_blank_node_with_leading_digit.nq> ;
+ .
+
+<#labeled_blank_node_with_non_leading_extras> rdf:type rdft:TestTrigEval ;
+ mf:name "labeled_blank_node_with_non_leading_extras" ;
+ rdfs:comment "labeled blank node with_non_leading_extras (_:a·̀ͯ‿.⁀)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <labeled_blank_node_with_non_leading_extras.trig> ;
+ mf:result <labeled_blank_node_with_non_leading_extras.nq> ;
+ .
+
+<#anonymous_blank_node_subject> rdf:type rdft:TestTrigEval ;
+ mf:name "anonymous_blank_node_subject" ;
+ rdfs:comment "anonymous blank node subject" ;
+ rdft:approval rdft:Approved ;
+ mf:action <anonymous_blank_node_subject.trig> ;
+ mf:result <anonymous_blank_node_subject.nq> ;
+ .
+
+<#anonymous_blank_node_object> rdf:type rdft:TestTrigEval ;
+ mf:name "anonymous_blank_node_object" ;
+ rdfs:comment "anonymous blank node object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <anonymous_blank_node_object.trig> ;
+ mf:result <anonymous_blank_node_object.nq> ;
+ .
+
+<#sole_blankNodePropertyList> rdf:type rdft:TestTrigEval ;
+ mf:name "sole_blankNodePropertyList" ;
+ rdfs:comment "sole blankNodePropertyList [ <p> <o> ] ." ;
+ rdft:approval rdft:Approved ;
+ mf:action <sole_blankNodePropertyList.trig> ;
+ mf:result <sole_blankNodePropertyList.nq> ;
+ .
+
+<#blankNodePropertyList_as_subject> rdf:type rdft:TestTrigEval ;
+ mf:name "blankNodePropertyList_as_subject" ;
+ rdfs:comment "blankNodePropertyList as subject [ … ] <p> <o> ." ;
+ rdft:approval rdft:Approved ;
+ mf:action <blankNodePropertyList_as_subject.trig> ;
+ mf:result <blankNodePropertyList_as_subject.nq> ;
+ .
+
+<#blankNodePropertyList_as_object> rdf:type rdft:TestTrigEval ;
+ mf:name "blankNodePropertyList_as_object" ;
+ rdfs:comment "blankNodePropertyList as object <s> <p> [ … ] ." ;
+ rdft:approval rdft:Approved ;
+ mf:action <blankNodePropertyList_as_object.trig> ;
+ mf:result <blankNodePropertyList_as_object.nq> ;
+ .
+
+<#blankNodePropertyList_with_multiple_triples> rdf:type rdft:TestTrigEval ;
+ mf:name "blankNodePropertyList_with_multiple_triples" ;
+ rdfs:comment "blankNodePropertyList with multiple triples [ <s> <p> ; <s2> <p2> ]" ;
+ rdft:approval rdft:Approved ;
+ mf:action <blankNodePropertyList_with_multiple_triples.trig> ;
+ mf:result <blankNodePropertyList_with_multiple_triples.nq> ;
+ .
+
+<#nested_blankNodePropertyLists> rdf:type rdft:TestTrigEval ;
+ mf:name "nested_blankNodePropertyLists" ;
+ rdfs:comment "nested blankNodePropertyLists [ <p1> [ <p2> <o2> ] ; <p3> <o3> ]" ;
+ rdft:approval rdft:Approved ;
+ mf:action <nested_blankNodePropertyLists.trig> ;
+ mf:result <nested_blankNodePropertyLists.nq> ;
+ .
+
+<#blankNodePropertyList_containing_collection> rdf:type rdft:TestTrigEval ;
+ mf:name "blankNodePropertyList_containing_collection" ;
+ rdfs:comment "blankNodePropertyList containing collection [ <p1> ( … ) ]" ;
+ rdft:approval rdft:Approved ;
+ mf:action <blankNodePropertyList_containing_collection.trig> ;
+ mf:result <blankNodePropertyList_containing_collection.nq> ;
+ .
+
+<#collection_subject> rdf:type rdft:TestTrigEval ;
+ mf:name "collection_subject" ;
+ rdfs:comment "collection subject" ;
+ rdft:approval rdft:Approved ;
+ mf:action <collection_subject.trig> ;
+ mf:result <collection_subject.nq> ;
+ .
+
+<#collection_object> rdf:type rdft:TestTrigEval ;
+ mf:name "collection_object" ;
+ rdfs:comment "collection object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <collection_object.trig> ;
+ mf:result <collection_object.nq> ;
+ .
+
+<#empty_collection> rdf:type rdft:TestTrigEval ;
+ mf:name "empty_collection" ;
+ rdfs:comment "empty collection ()" ;
+ rdft:approval rdft:Approved ;
+ mf:action <empty_collection.trig> ;
+ mf:result <empty_collection.nq> ;
+ .
+
+<#nested_collection> rdf:type rdft:TestTrigEval ;
+ mf:name "nested_collection" ;
+ rdfs:comment "nested collection (())" ;
+ rdft:approval rdft:Approved ;
+ mf:action <nested_collection.trig> ;
+ mf:result <nested_collection.nq> ;
+ .
+
+<#first> rdf:type rdft:TestTrigEval ;
+ mf:name "first" ;
+ rdfs:comment "first, not last, non-empty nested collection" ;
+ rdft:approval rdft:Approved ;
+ mf:action <first.trig> ;
+ mf:result <first.nq> ;
+ .
+
+<#last> rdf:type rdft:TestTrigEval ;
+ mf:name "last" ;
+ rdfs:comment "last, not first, non-empty nested collection" ;
+ rdft:approval rdft:Approved ;
+ mf:action <last.trig> ;
+ mf:result <last.nq> ;
+ .
+
+<#LITERAL1> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL1" ;
+ rdfs:comment "LITERAL1 'x'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL1.trig> ;
+ mf:result <LITERAL1.nq> ;
+ .
+
+<#LITERAL1_ascii_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL1_ascii_boundaries" ;
+ rdfs:comment "LITERAL1_ascii_boundaries '\\x00\\x09\\x0b\\x0c\\x0e\\x26\\x28...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL1_ascii_boundaries.trig> ;
+ mf:result <LITERAL1_ascii_boundaries.nq> ;
+ .
+
+<#LITERAL1_with_UTF8_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL1_with_UTF8_boundaries" ;
+ rdfs:comment "LITERAL1_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL1_with_UTF8_boundaries.trig> ;
+ mf:result <LITERAL_with_UTF8_boundaries.nq> ;
+ .
+
+<#LITERAL1_all_controls> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL1_all_controls" ;
+ rdfs:comment "LITERAL1_all_controls '\\x00\\x01\\x02\\x03\\x04...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL1_all_controls.trig> ;
+ mf:result <LITERAL1_all_controls.nq> ;
+ .
+
+<#LITERAL1_all_punctuation> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL1_all_punctuation" ;
+ rdfs:comment "LITERAL1_all_punctuation '!\"#$%&()...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL1_all_punctuation.trig> ;
+ mf:result <LITERAL1_all_punctuation.nq> ;
+ .
+
+<#LITERAL_LONG1> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG1" ;
+ rdfs:comment "LITERAL_LONG1 '''x'''" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG1.trig> ;
+ mf:result <LITERAL1.nq> ;
+ .
+
+<#LITERAL_LONG1_ascii_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG1_ascii_boundaries" ;
+ rdfs:comment "LITERAL_LONG1_ascii_boundaries '\\x00\\x26\\x28...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG1_ascii_boundaries.trig> ;
+ mf:result <LITERAL_LONG1_ascii_boundaries.nq> ;
+ .
+
+<#LITERAL_LONG1_with_UTF8_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG1_with_UTF8_boundaries" ;
+ rdfs:comment "LITERAL_LONG1_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG1_with_UTF8_boundaries.trig> ;
+ mf:result <LITERAL_with_UTF8_boundaries.nq> ;
+ .
+
+<#LITERAL_LONG1_with_1_squote> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG1_with_1_squote" ;
+ rdfs:comment "LITERAL_LONG1 with 1 squote '''a'b'''" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG1_with_1_squote.trig> ;
+ mf:result <LITERAL_LONG1_with_1_squote.nq> ;
+ .
+
+<#LITERAL_LONG1_with_2_squotes> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG1_with_2_squotes" ;
+ rdfs:comment "LITERAL_LONG1 with 2 squotes '''a''b'''" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG1_with_2_squotes.trig> ;
+ mf:result <LITERAL_LONG1_with_2_squotes.nq> ;
+ .
+
+<#LITERAL2> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL2" ;
+ rdfs:comment "LITERAL2 \"x\"" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL2.trig> ;
+ mf:result <LITERAL1.nq> ;
+ .
+
+<#LITERAL2_ascii_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL2_ascii_boundaries" ;
+ rdfs:comment "LITERAL2_ascii_boundaries '\\x00\\x09\\x0b\\x0c\\x0e\\x21\\x23...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL2_ascii_boundaries.trig> ;
+ mf:result <LITERAL2_ascii_boundaries.nq> ;
+ .
+
+<#LITERAL2_with_UTF8_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL2_with_UTF8_boundaries" ;
+ rdfs:comment "LITERAL2_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL2_with_UTF8_boundaries.trig> ;
+ mf:result <LITERAL_with_UTF8_boundaries.nq> ;
+ .
+
+<#LITERAL_LONG2> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG2" ;
+ rdfs:comment "LITERAL_LONG2 \"\"\"x\"\"\"" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG2.trig> ;
+ mf:result <LITERAL1.nq> ;
+ .
+
+<#LITERAL_LONG2_ascii_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG2_ascii_boundaries" ;
+ rdfs:comment "LITERAL_LONG2_ascii_boundaries '\\x00\\x21\\x23...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG2_ascii_boundaries.trig> ;
+ mf:result <LITERAL_LONG2_ascii_boundaries.nq> ;
+ .
+
+<#LITERAL_LONG2_with_UTF8_boundaries> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG2_with_UTF8_boundaries" ;
+ rdfs:comment "LITERAL_LONG2_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG2_with_UTF8_boundaries.trig> ;
+ mf:result <LITERAL_with_UTF8_boundaries.nq> ;
+ .
+
+<#LITERAL_LONG2_with_1_squote> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG2_with_1_squote" ;
+ rdfs:comment "LITERAL_LONG2 with 1 squote \"\"\"a\"b\"\"\"" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG2_with_1_squote.trig> ;
+ mf:result <LITERAL_LONG2_with_1_squote.nq> ;
+ .
+
+<#LITERAL_LONG2_with_2_squotes> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG2_with_2_squotes" ;
+ rdfs:comment "LITERAL_LONG2 with 2 squotes \"\"\"a\"\"b\"\"\"" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG2_with_2_squotes.trig> ;
+ mf:result <LITERAL_LONG2_with_2_squotes.nq> ;
+ .
+
+<#literal_with_CHARACTER_TABULATION> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_CHARACTER_TABULATION" ;
+ rdfs:comment "literal with CHARACTER TABULATION" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_CHARACTER_TABULATION.trig> ;
+ mf:result <literal_with_CHARACTER_TABULATION.nq> ;
+ .
+
+<#literal_with_BACKSPACE> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_BACKSPACE" ;
+ rdfs:comment "literal with BACKSPACE" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_BACKSPACE.trig> ;
+ mf:result <literal_with_BACKSPACE.nq> ;
+ .
+
+<#literal_with_LINE_FEED> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_LINE_FEED" ;
+ rdfs:comment "literal with LINE FEED" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_LINE_FEED.trig> ;
+ mf:result <literal_with_LINE_FEED.nq> ;
+ .
+
+<#literal_with_CARRIAGE_RETURN> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_CARRIAGE_RETURN" ;
+ rdfs:comment "literal with CARRIAGE RETURN" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_CARRIAGE_RETURN.trig> ;
+ mf:result <literal_with_CARRIAGE_RETURN.nq> ;
+ .
+
+<#literal_with_FORM_FEED> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_FORM_FEED" ;
+ rdfs:comment "literal with FORM FEED" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_FORM_FEED.trig> ;
+ mf:result <literal_with_FORM_FEED.nq> ;
+ .
+
+<#literal_with_REVERSE_SOLIDUS> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_REVERSE_SOLIDUS" ;
+ rdfs:comment "literal with REVERSE SOLIDUS" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_REVERSE_SOLIDUS.trig> ;
+ mf:result <literal_with_REVERSE_SOLIDUS.nq> ;
+ .
+
+<#literal_with_escaped_CHARACTER_TABULATION> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_escaped_CHARACTER_TABULATION" ;
+ rdfs:comment "literal with escaped CHARACTER TABULATION" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_escaped_CHARACTER_TABULATION.trig> ;
+ mf:result <literal_with_CHARACTER_TABULATION.nq> ;
+ .
+
+<#literal_with_escaped_BACKSPACE> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_escaped_BACKSPACE" ;
+ rdfs:comment "literal with escaped BACKSPACE" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_escaped_BACKSPACE.trig> ;
+ mf:result <literal_with_BACKSPACE.nq> ;
+ .
+
+<#literal_with_escaped_LINE_FEED> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_escaped_LINE_FEED" ;
+ rdfs:comment "literal with escaped LINE FEED" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_escaped_LINE_FEED.trig> ;
+ mf:result <literal_with_LINE_FEED.nq> ;
+ .
+
+<#literal_with_escaped_CARRIAGE_RETURN> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_escaped_CARRIAGE_RETURN" ;
+ rdfs:comment "literal with escaped CARRIAGE RETURN" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_escaped_CARRIAGE_RETURN.trig> ;
+ mf:result <literal_with_CARRIAGE_RETURN.nq> ;
+ .
+
+<#literal_with_escaped_FORM_FEED> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_escaped_FORM_FEED" ;
+ rdfs:comment "literal with escaped FORM FEED" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_escaped_FORM_FEED.trig> ;
+ mf:result <literal_with_FORM_FEED.nq> ;
+ .
+
+<#literal_with_numeric_escape4> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_numeric_escape4" ;
+ rdfs:comment "literal with numeric escape4 \\u" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_numeric_escape4.trig> ;
+ mf:result <literal_with_numeric_escape4.nq> ;
+ .
+
+<#literal_with_numeric_escape8> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_with_numeric_escape8" ;
+ rdfs:comment "literal with numeric escape8 \\U" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_with_numeric_escape8.trig> ;
+ mf:result <literal_with_numeric_escape4.nq> ;
+ .
+
+<#IRIREF_datatype> rdf:type rdft:TestTrigEval ;
+ mf:name "IRIREF_datatype" ;
+ rdfs:comment "IRIREF datatype \"\"^^<t>" ;
+ rdft:approval rdft:Approved ;
+ mf:action <IRIREF_datatype.trig> ;
+ mf:result <IRIREF_datatype.nq> ;
+ .
+
+<#prefixed_name_datatype> rdf:type rdft:TestTrigEval ;
+ mf:name "prefixed_name_datatype" ;
+ rdfs:comment "prefixed name datatype \"\"^^p:t" ;
+ rdft:approval rdft:Approved ;
+ mf:action <prefixed_name_datatype.trig> ;
+ mf:result <IRIREF_datatype.nq> ;
+ .
+
+<#bareword_integer> rdf:type rdft:TestTrigEval ;
+ mf:name "bareword_integer" ;
+ rdfs:comment "bareword integer" ;
+ rdft:approval rdft:Approved ;
+ mf:action <bareword_integer.trig> ;
+ mf:result <IRIREF_datatype.nq> ;
+ .
+
+<#bareword_decimal> rdf:type rdft:TestTrigEval ;
+ mf:name "bareword_decimal" ;
+ rdfs:comment "bareword decimal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <bareword_decimal.trig> ;
+ mf:result <bareword_decimal.nq> ;
+ .
+
+<#bareword_double> rdf:type rdft:TestTrigEval ;
+ mf:name "bareword_double" ;
+ rdfs:comment "bareword double" ;
+ rdft:approval rdft:Approved ;
+ mf:action <bareword_double.trig> ;
+ mf:result <bareword_double.nq> ;
+ .
+
+<#double_lower_case_e> rdf:type rdft:TestTrigEval ;
+ mf:name "double_lower_case_e" ;
+ rdfs:comment "double lower case e" ;
+ rdft:approval rdft:Approved ;
+ mf:action <double_lower_case_e.trig> ;
+ mf:result <double_lower_case_e.nq> ;
+ .
+
+<#negative_numeric> rdf:type rdft:TestTrigEval ;
+ mf:name "negative_numeric" ;
+ rdfs:comment "negative numeric" ;
+ rdft:approval rdft:Approved ;
+ mf:action <negative_numeric.trig> ;
+ mf:result <negative_numeric.nq> ;
+ .
+
+<#positive_numeric> rdf:type rdft:TestTrigEval ;
+ mf:name "positive_numeric" ;
+ rdfs:comment "positive numeric" ;
+ rdft:approval rdft:Approved ;
+ mf:action <positive_numeric.trig> ;
+ mf:result <positive_numeric.nq> ;
+ .
+
+<#numeric_with_leading_0> rdf:type rdft:TestTrigEval ;
+ mf:name "numeric_with_leading_0" ;
+ rdfs:comment "numeric with leading 0" ;
+ rdft:approval rdft:Approved ;
+ mf:action <numeric_with_leading_0.trig> ;
+ mf:result <numeric_with_leading_0.nq> ;
+ .
+
+<#literal_true> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_true" ;
+ rdfs:comment "literal true" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_true.trig> ;
+ mf:result <literal_true.nq> ;
+ .
+
+<#literal_false> rdf:type rdft:TestTrigEval ;
+ mf:name "literal_false" ;
+ rdfs:comment "literal false" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_false.trig> ;
+ mf:result <literal_false.nq> ;
+ .
+
+<#langtagged_non_LONG> rdf:type rdft:TestTrigEval ;
+ mf:name "langtagged_non_LONG" ;
+ rdfs:comment "langtagged non-LONG \"x\"@en" ;
+ rdft:approval rdft:Approved ;
+ mf:action <langtagged_non_LONG.trig> ;
+ mf:result <langtagged_non_LONG.nq> ;
+ .
+
+<#langtagged_LONG> rdf:type rdft:TestTrigEval ;
+ mf:name "langtagged_LONG" ;
+ rdfs:comment "langtagged LONG \"\"\"x\"\"\"@en" ;
+ rdft:approval rdft:Approved ;
+ mf:action <langtagged_LONG.trig> ;
+ mf:result <langtagged_non_LONG.nq> ;
+ .
+
+<#lantag_with_subtag> rdf:type rdft:TestTrigEval ;
+ mf:name "lantag_with_subtag" ;
+ rdfs:comment "lantag with subtag \"x\"@en-us" ;
+ rdft:approval rdft:Approved ;
+ mf:action <lantag_with_subtag.trig> ;
+ mf:result <lantag_with_subtag.nq> ;
+ .
+
+<#objectList_with_two_objects> rdf:type rdft:TestTrigEval ;
+ mf:name "objectList_with_two_objects" ;
+ rdfs:comment "objectList with two objects … <o1>,<o2>" ;
+ rdft:approval rdft:Approved ;
+ mf:action <objectList_with_two_objects.trig> ;
+ mf:result <objectList_with_two_objects.nq> ;
+ .
+
+<#predicateObjectList_with_two_objectLists> rdf:type rdft:TestTrigEval ;
+ mf:name "predicateObjectList_with_two_objectLists" ;
+ rdfs:comment "predicateObjectList with two objectLists … <o1>,<o2>" ;
+ rdft:approval rdft:Approved ;
+ mf:action <predicateObjectList_with_two_objectLists.trig> ;
+ mf:result <predicateObjectList_with_two_objectLists.nq> ;
+ .
+
+<#repeated_semis_at_end> rdf:type rdft:TestTrigEval ;
+ mf:name "repeated_semis_at_end" ;
+ rdfs:comment "repeated semis at end <s> <p> <o> ;; <p2> <o2> ." ;
+ rdft:approval rdft:Approved ;
+ mf:action <repeated_semis_at_end.trig> ;
+ mf:result <predicateObjectList_with_two_objectLists.nq> ;
+ .
+
+<#repeated_semis_not_at_end> rdf:type rdft:TestTrigEval ;
+ mf:name "repeated_semis_not_at_end" ;
+ rdfs:comment "repeated semis not at end <s> <p> <o> ;;." ;
+ rdft:approval rdft:Approved ;
+ mf:action <repeated_semis_not_at_end.trig> ;
+ mf:result <repeated_semis_not_at_end.nq> ;
+ .
+
+# original tests-ttl
+<#trig-syntax-file-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-file-01" ;
+ rdfs:comment "Empty file" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-file-01.trig> ;
+ .
+
+<#trig-syntax-file-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-file-02" ;
+ rdfs:comment "Only comment" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-file-02.trig> ;
+ .
+
+<#trig-syntax-file-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-file-03" ;
+ rdfs:comment "One comment, one empty line" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-file-03.trig> ;
+ .
+
+<#trig-syntax-uri-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-uri-01" ;
+ rdfs:comment "Only IRIs" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-uri-01.trig> ;
+ .
+
+<#trig-syntax-uri-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-uri-02" ;
+ rdfs:comment "IRIs with Unicode escape" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-uri-02.trig> ;
+ .
+
+<#trig-syntax-uri-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-uri-03" ;
+ rdfs:comment "IRIs with long Unicode escape" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-uri-03.trig> ;
+ .
+
+<#trig-syntax-uri-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-uri-04" ;
+ rdfs:comment "Legal IRIs" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-uri-04.trig> ;
+ .
+
+<#trig-syntax-base-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-base-01" ;
+ rdfs:comment "@base" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-base-01.trig> ;
+ .
+
+<#trig-syntax-base-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-base-02" ;
+ rdfs:comment "BASE" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-base-02.trig> ;
+ .
+
+<#trig-syntax-base-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-base-03" ;
+ rdfs:comment "@base with relative IRIs" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-base-03.trig> ;
+ .
+
+<#trig-syntax-base-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-base-04" ;
+ rdfs:comment "base with relative IRIs" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-base-04.trig> ;
+ .
+
+<#trig-syntax-prefix-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-prefix-01" ;
+ rdfs:comment "@prefix" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-prefix-01.trig> ;
+ .
+
+<#trig-syntax-prefix-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-prefix-02" ;
+ rdfs:comment "PreFIX" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-prefix-02.trig> ;
+ .
+
+<#trig-syntax-prefix-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-prefix-03" ;
+ rdfs:comment "Empty PREFIX" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-prefix-03.trig> ;
+ .
+
+<#trig-syntax-prefix-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-prefix-04" ;
+ rdfs:comment "Empty @prefix with % escape" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-prefix-04.trig> ;
+ .
+
+<#trig-syntax-prefix-05> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-prefix-05" ;
+ rdfs:comment "@prefix with no suffix" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-prefix-05.trig> ;
+ .
+
+<#trig-syntax-prefix-06> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-prefix-06" ;
+ rdfs:comment "colon is a legal pname character" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-prefix-06.trig> ;
+ .
+
+<#trig-syntax-prefix-07> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-prefix-07" ;
+ rdfs:comment "dash is a legal pname character" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-prefix-07.trig> ;
+ .
+
+<#trig-syntax-prefix-08> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-prefix-08" ;
+ rdfs:comment "underscore is a legal pname character" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-prefix-08.trig> ;
+ .
+
+<#trig-syntax-prefix-09> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-prefix-09" ;
+ rdfs:comment "percents in pnames" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-prefix-09.trig> ;
+ .
+
+<#trig-syntax-string-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-01" ;
+ rdfs:comment "string literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-01.trig> ;
+ .
+
+<#trig-syntax-string-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-02" ;
+ rdfs:comment "langString literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-02.trig> ;
+ .
+
+<#trig-syntax-string-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-03" ;
+ rdfs:comment "langString literal with region" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-03.trig> ;
+ .
+
+<#trig-syntax-string-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-04" ;
+ rdfs:comment "squote string literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-04.trig> ;
+ .
+
+<#trig-syntax-string-05> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-05" ;
+ rdfs:comment "squote langString literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-05.trig> ;
+ .
+
+<#trig-syntax-string-06> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-06" ;
+ rdfs:comment "squote langString literal with region" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-06.trig> ;
+ .
+
+<#trig-syntax-string-07> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-07" ;
+ rdfs:comment "long string literal with embedded single- and double-quotes" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-07.trig> ;
+ .
+
+<#trig-syntax-string-08> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-08" ;
+ rdfs:comment "long string literal with embedded newline" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-08.trig> ;
+ .
+
+<#trig-syntax-string-09> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-09" ;
+ rdfs:comment "squote long string literal with embedded single- and double-quotes" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-09.trig> ;
+ .
+
+<#trig-syntax-string-10> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-10" ;
+ rdfs:comment "long langString literal with embedded newline" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-10.trig> ;
+ .
+
+<#trig-syntax-string-11> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-string-11" ;
+ rdfs:comment "squote long langString literal with embedded newline" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-string-11.trig> ;
+ .
+
+<#trig-syntax-str-esc-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-str-esc-01" ;
+ rdfs:comment "string literal with escaped newline" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-str-esc-01.trig> ;
+ .
+
+<#trig-syntax-str-esc-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-str-esc-02" ;
+ rdfs:comment "string literal with Unicode escape" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-str-esc-02.trig> ;
+ .
+
+<#trig-syntax-str-esc-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-str-esc-03" ;
+ rdfs:comment "string literal with long Unicode escape" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-str-esc-03.trig> ;
+ .
+
+<#trig-syntax-pname-esc-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-pname-esc-01" ;
+ rdfs:comment "pname with back-slash escapes" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-pname-esc-01.trig> ;
+ .
+
+<#trig-syntax-pname-esc-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-pname-esc-02" ;
+ rdfs:comment "pname with back-slash escapes (2)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-pname-esc-02.trig> ;
+ .
+
+<#trig-syntax-pname-esc-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-pname-esc-03" ;
+ rdfs:comment "pname with back-slash escapes (3)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-pname-esc-03.trig> ;
+ .
+
+<#trig-syntax-bnode-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-01" ;
+ rdfs:comment "bnode subject" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-01.trig> ;
+ .
+
+<#trig-syntax-bnode-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-02" ;
+ rdfs:comment "bnode object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-02.trig> ;
+ .
+
+<#trig-syntax-bnode-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-03" ;
+ rdfs:comment "bnode property list object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-03.trig> ;
+ .
+
+<#trig-syntax-bnode-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-04" ;
+ rdfs:comment "bnode property list object (2)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-04.trig> ;
+ .
+
+<#trig-syntax-bnode-05> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-05" ;
+ rdfs:comment "bnode property list subject" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-05.trig> ;
+ .
+
+<#trig-syntax-bnode-06> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-06" ;
+ rdfs:comment "labeled bnode subject" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-06.trig> ;
+ .
+
+<#trig-syntax-bnode-07> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-07" ;
+ rdfs:comment "labeled bnode subject and object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-07.trig> ;
+ .
+
+<#trig-syntax-bnode-08> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-08" ;
+ rdfs:comment "bare bnode property list" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-08.trig> ;
+ .
+
+<#trig-syntax-bnode-09> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-09" ;
+ rdfs:comment "bnode property list" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-09.trig> ;
+ .
+
+<#trig-syntax-bnode-10> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-bnode-10" ;
+ rdfs:comment "mixed bnode property list and triple" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bnode-10.trig> ;
+ .
+
+<#trig-syntax-number-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-01" ;
+ rdfs:comment "integer literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-01.trig> ;
+ .
+
+<#trig-syntax-number-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-02" ;
+ rdfs:comment "negative integer literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-02.trig> ;
+ .
+
+<#trig-syntax-number-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-03" ;
+ rdfs:comment "positive integer literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-03.trig> ;
+ .
+
+<#trig-syntax-number-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-04" ;
+ rdfs:comment "decimal literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-04.trig> ;
+ .
+
+<#trig-syntax-number-05> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-05" ;
+ rdfs:comment "decimal literal (no leading digits)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-05.trig> ;
+ .
+
+<#trig-syntax-number-06> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-06" ;
+ rdfs:comment "negative decimal literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-06.trig> ;
+ .
+
+<#trig-syntax-number-07> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-07" ;
+ rdfs:comment "positive decimal literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-07.trig> ;
+ .
+
+<#trig-syntax-number-08> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-08" ;
+ rdfs:comment "integer literal with decimal lexical confusion" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-08.trig> ;
+ .
+
+<#trig-syntax-number-09> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-09" ;
+ rdfs:comment "double literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-09.trig> ;
+ .
+
+<#trig-syntax-number-10> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-10" ;
+ rdfs:comment "negative double literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-10.trig> ;
+ .
+
+<#trig-syntax-number-11> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-number-11" ;
+ rdfs:comment "double literal no fraction" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-number-11.trig> ;
+ .
+
+<#trig-syntax-datatypes-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-datatypes-01" ;
+ rdfs:comment "xsd:byte literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-datatypes-01.trig> ;
+ .
+
+<#trig-syntax-datatypes-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-datatypes-02" ;
+ rdfs:comment "integer as xsd:string" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-datatypes-02.trig> ;
+ .
+
+<#trig-syntax-kw-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-kw-01" ;
+ rdfs:comment "boolean literal (true)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-kw-01.trig> ;
+ .
+
+<#trig-syntax-kw-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-kw-02" ;
+ rdfs:comment "boolean literal (false)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-kw-02.trig> ;
+ .
+
+<#trig-syntax-kw-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-kw-03" ;
+ rdfs:comment "'a' as keyword" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-kw-03.trig> ;
+ .
+
+<#trig-syntax-struct-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-struct-01" ;
+ rdfs:comment "object list" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-struct-01.trig> ;
+ .
+
+<#trig-syntax-struct-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-struct-02" ;
+ rdfs:comment "predicate list with object list" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-struct-02.trig> ;
+ .
+
+<#trig-syntax-struct-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-struct-03" ;
+ rdfs:comment "predicate list with object list and dangling ';'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-struct-03.trig> ;
+ .
+
+<#trig-syntax-struct-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-struct-04" ;
+ rdfs:comment "predicate list with multiple ;;" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-struct-04.trig> ;
+ .
+
+<#trig-syntax-struct-05> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-struct-05" ;
+ rdfs:comment "predicate list with multiple ;;" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-struct-05.trig> ;
+ .
+
+<#trig-syntax-lists-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-lists-01" ;
+ rdfs:comment "empty list" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-lists-01.trig> ;
+ .
+
+<#trig-syntax-lists-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-lists-02" ;
+ rdfs:comment "mixed list" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-lists-02.trig> ;
+ .
+
+<#trig-syntax-lists-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-lists-03" ;
+ rdfs:comment "isomorphic list as subject and object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-lists-03.trig> ;
+ .
+
+<#trig-syntax-lists-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-lists-04" ;
+ rdfs:comment "lists of lists" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-lists-04.trig> ;
+ .
+
+<#trig-syntax-lists-05> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-syntax-lists-05" ;
+ rdfs:comment "mixed lists with embedded lists" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-lists-05.trig> ;
+ .
+
+<#trig-syntax-bad-uri-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-uri-01" ;
+ rdfs:comment "Bad IRI : space (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-uri-01.trig> ;
+ .
+
+<#trig-syntax-bad-uri-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-uri-02" ;
+ rdfs:comment "Bad IRI : bad escape (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-uri-02.trig> ;
+ .
+
+<#trig-syntax-bad-uri-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-uri-03" ;
+ rdfs:comment "Bad IRI : bad long escape (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-uri-03.trig> ;
+ .
+
+<#trig-syntax-bad-uri-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-uri-04" ;
+ rdfs:comment "Bad IRI : character escapes not allowed (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-uri-04.trig> ;
+ .
+
+<#trig-syntax-bad-uri-05> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-uri-05" ;
+ rdfs:comment "Bad IRI : character escapes not allowed (2) (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-uri-05.trig> ;
+ .
+
+<#trig-syntax-bad-prefix-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-prefix-01" ;
+ rdfs:comment "No prefix (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-prefix-01.trig> ;
+ .
+
+<#trig-syntax-bad-prefix-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-prefix-02" ;
+ rdfs:comment "No prefix (2) (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-prefix-02.trig> ;
+ .
+
+<#trig-syntax-bad-prefix-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-prefix-03" ;
+ rdfs:comment "@prefix without URI (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-prefix-03.trig> ;
+ .
+
+<#trig-syntax-bad-prefix-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-prefix-04" ;
+ rdfs:comment "@prefix without prefix name (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-prefix-04.trig> ;
+ .
+
+<#trig-syntax-bad-prefix-05> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-prefix-05" ;
+ rdfs:comment "@prefix without ':' (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-prefix-05.trig> ;
+ .
+
+<#trig-syntax-bad-base-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-base-01" ;
+ rdfs:comment "@base without URI (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-base-01.trig> ;
+ .
+
+<#trig-syntax-bad-base-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-base-02" ;
+ rdfs:comment "@base in wrong case (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-base-02.trig> ;
+ .
+
+<#trig-syntax-bad-base-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-base-03" ;
+ rdfs:comment "BASE without URI (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-base-03.trig> ;
+ .
+
+<#trig-syntax-bad-struct-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-02" ;
+ rdfs:comment "Turtle is not N3 (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-02.trig> ;
+ .
+
+<#trig-syntax-bad-struct-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-03" ;
+ rdfs:comment "Turtle is not NQuads (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-03.trig> ;
+ .
+
+<#trig-syntax-bad-struct-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-04" ;
+ rdfs:comment "Turtle does not allow literals-as-subjects (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-04.trig> ;
+ .
+
+<#trig-syntax-bad-struct-05> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-05" ;
+ rdfs:comment "Turtle does not allow literals-as-predicates (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-05.trig> ;
+ .
+
+<#trig-syntax-bad-struct-06> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-06" ;
+ rdfs:comment "Turtle does not allow bnodes-as-predicates (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-06.trig> ;
+ .
+
+<#trig-syntax-bad-struct-07> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-07" ;
+ rdfs:comment "Turtle does not allow labeled bnodes-as-predicates (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-07.trig> ;
+ .
+
+<#trig-syntax-bad-kw-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-kw-01" ;
+ rdfs:comment "'A' is not a keyword (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-kw-01.trig> ;
+ .
+
+<#trig-syntax-bad-kw-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-kw-02" ;
+ rdfs:comment "'a' cannot be used as subject (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-kw-02.trig> ;
+ .
+
+<#trig-syntax-bad-kw-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-kw-03" ;
+ rdfs:comment "'a' cannot be used as object (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-kw-03.trig> ;
+ .
+
+<#trig-syntax-bad-kw-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-kw-04" ;
+ rdfs:comment "'true' cannot be used as subject (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-kw-04.trig> ;
+ .
+
+<#trig-syntax-bad-kw-05> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-kw-05" ;
+ rdfs:comment "'true' cannot be used as object (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-kw-05.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-01" ;
+ rdfs:comment "{} fomulae not in Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-01.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-02" ;
+ rdfs:comment "= is not Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-02.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-03" ;
+ rdfs:comment "N3 paths not in Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-03.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-04" ;
+ rdfs:comment "N3 paths not in Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-04.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-05> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-05" ;
+ rdfs:comment "N3 is...of not in Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-05.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-06> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-06" ;
+ rdfs:comment "N3 paths not in Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-06.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-07> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-07" ;
+ rdfs:comment "@keywords is not Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-07.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-08> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-08" ;
+ rdfs:comment "@keywords is not Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-08.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-09> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-09" ;
+ rdfs:comment "=> is not Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-09.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-10> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-10" ;
+ rdfs:comment "<= is not Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-10.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-11> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-11" ;
+ rdfs:comment "@forSome is not Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-11.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-12> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-12" ;
+ rdfs:comment "@forAll is not Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-12.trig> ;
+ .
+
+<#trig-syntax-bad-n3-extras-13> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-n3-extras-13" ;
+ rdfs:comment "@keywords is not Turtle (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-n3-extras-13.trig> ;
+ .
+
+<#trig-syntax-bad-struct-09> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-09" ;
+ rdfs:comment "extra '.' (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-09.trig> ;
+ .
+
+<#trig-syntax-bad-struct-10> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-10" ;
+ rdfs:comment "extra '.' (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-10.trig> ;
+ .
+
+<#trig-syntax-bad-struct-12> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-12" ;
+ rdfs:comment "subject, predicate, no object (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-12.trig> ;
+ .
+
+<#trig-syntax-bad-struct-13> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-13" ;
+ rdfs:comment "subject, predicate, no object (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-13.trig> ;
+ .
+
+<#trig-syntax-bad-struct-14> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-14" ;
+ rdfs:comment "literal as subject (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-14.trig> ;
+ .
+
+<#trig-syntax-bad-struct-15> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-15" ;
+ rdfs:comment "literal as predicate (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-15.trig> ;
+ .
+
+<#trig-syntax-bad-struct-16> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-16" ;
+ rdfs:comment "bnode as predicate (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-16.trig> ;
+ .
+
+<#trig-syntax-bad-struct-17> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-struct-17" ;
+ rdfs:comment "labeled bnode as predicate (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-struct-17.trig> ;
+ .
+
+<#trig-syntax-bad-lang-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-lang-01" ;
+ rdfs:comment "langString with bad lang (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-lang-01.trig> ;
+ .
+
+<#trig-syntax-bad-esc-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-esc-01" ;
+ rdfs:comment "Bad string escape (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-esc-01.trig> ;
+ .
+
+<#trig-syntax-bad-esc-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-esc-02" ;
+ rdfs:comment "Bad string escape (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-esc-02.trig> ;
+ .
+
+<#trig-syntax-bad-esc-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-esc-03" ;
+ rdfs:comment "Bad string escape (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-esc-03.trig> ;
+ .
+
+<#trig-syntax-bad-esc-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-esc-04" ;
+ rdfs:comment "Bad string escape (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-esc-04.trig> ;
+ .
+
+<#trig-syntax-bad-pname-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-pname-01" ;
+ rdfs:comment "'~' must be escaped in pname (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-pname-01.trig> ;
+ .
+
+<#trig-syntax-bad-pname-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-pname-02" ;
+ rdfs:comment "Bad %-sequence in pname (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-pname-02.trig> ;
+ .
+
+<#trig-syntax-bad-pname-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-pname-03" ;
+ rdfs:comment "Bad unicode escape in pname (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-pname-03.trig> ;
+ .
+
+<#trig-syntax-bad-string-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-string-01" ;
+ rdfs:comment "mismatching string literal open/close (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-string-01.trig> ;
+ .
+
+<#trig-syntax-bad-string-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-string-02" ;
+ rdfs:comment "mismatching string literal open/close (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-string-02.trig> ;
+ .
+
+<#trig-syntax-bad-string-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-string-03" ;
+ rdfs:comment "mismatching string literal long/short (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-string-03.trig> ;
+ .
+
+<#trig-syntax-bad-string-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-string-04" ;
+ rdfs:comment "mismatching long string literal open/close (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-string-04.trig> ;
+ .
+
+<#trig-syntax-bad-string-05> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-string-05" ;
+ rdfs:comment "Long literal with missing end (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-string-05.trig> ;
+ .
+
+<#trig-syntax-bad-string-06> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-string-06" ;
+ rdfs:comment "Long literal with extra quote (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-string-06.trig> ;
+ .
+
+<#trig-syntax-bad-string-07> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-string-07" ;
+ rdfs:comment "Long literal with extra squote (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-string-07.trig> ;
+ .
+
+<#trig-syntax-bad-num-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-num-01" ;
+ rdfs:comment "Bad number format (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-num-01.trig> ;
+ .
+
+<#trig-syntax-bad-num-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-num-02" ;
+ rdfs:comment "Bad number format (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-num-02.trig> ;
+ .
+
+<#trig-syntax-bad-num-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-num-03" ;
+ rdfs:comment "Bad number format (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-num-03.trig> ;
+ .
+
+<#trig-syntax-bad-num-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-num-04" ;
+ rdfs:comment "Bad number format (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-num-04.trig> ;
+ .
+
+<#trig-syntax-bad-num-05> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-num-05" ;
+ rdfs:comment "Bad number format (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-num-05.trig> ;
+ .
+
+<#trig-eval-struct-01> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-eval-struct-01" ;
+ rdfs:comment "triple with IRIs" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-eval-struct-01.trig> ;
+ mf:result <trig-eval-struct-01.nq> ;
+ .
+
+<#trig-eval-struct-02> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-eval-struct-02" ;
+ rdfs:comment "triple with IRIs and embedded whitespace" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-eval-struct-02.trig> ;
+ mf:result <trig-eval-struct-02.nq> ;
+ .
+
+<#trig-subm-01> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-01" ;
+ rdfs:comment "Blank subject" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-01.trig> ;
+ mf:result <trig-subm-01.nq> ;
+ .
+
+<#trig-subm-02> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-02" ;
+ rdfs:comment "@prefix and qnames" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-02.trig> ;
+ mf:result <trig-subm-02.nq> ;
+ .
+
+<#trig-subm-03> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-03" ;
+ rdfs:comment ", operator" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-03.trig> ;
+ mf:result <trig-subm-03.nq> ;
+ .
+
+<#trig-subm-04> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-04" ;
+ rdfs:comment "; operator" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-04.trig> ;
+ mf:result <trig-subm-04.nq> ;
+ .
+
+<#trig-subm-05> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-05" ;
+ rdfs:comment "empty [] as subject and object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-05.trig> ;
+ mf:result <trig-subm-05.nq> ;
+ .
+
+<#trig-subm-06> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-06" ;
+ rdfs:comment "non-empty [] as subject and object" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-06.trig> ;
+ mf:result <trig-subm-06.nq> ;
+ .
+
+<#trig-subm-07> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-07" ;
+ rdfs:comment "'a' as predicate" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-07.trig> ;
+ mf:result <trig-subm-07.nq> ;
+ .
+
+<#trig-subm-08> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-08" ;
+ rdfs:comment "simple collection" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-08.trig> ;
+ mf:result <trig-subm-08.nq> ;
+ .
+
+<#trig-subm-09> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-09" ;
+ rdfs:comment "empty collection" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-09.trig> ;
+ mf:result <trig-subm-09.nq> ;
+ .
+
+<#trig-subm-10> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-10" ;
+ rdfs:comment "integer datatyped literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-10.trig> ;
+ mf:result <trig-subm-10.nq> ;
+ .
+
+<#trig-subm-11> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-11" ;
+ rdfs:comment "decimal integer canonicalization" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-11.trig> ;
+ mf:result <trig-subm-11.nq> ;
+ .
+
+<#trig-subm-12> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-12" ;
+ rdfs:comment "- and _ in names and qnames" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-12.trig> ;
+ mf:result <trig-subm-12.nq> ;
+ .
+
+<#trig-subm-13> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-13" ;
+ rdfs:comment "tests for rdf:_<numbers> and other qnames starting with _" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-13.trig> ;
+ mf:result <trig-subm-13.nq> ;
+ .
+
+<#trig-subm-14> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-14" ;
+ rdfs:comment "bare : allowed" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-14.trig> ;
+ mf:result <trig-subm-14.nq> ;
+ .
+
+<#trig-subm-15> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-15" ;
+ rdfs:comment "simple long literal" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-15.trig> ;
+ mf:result <trig-subm-15.nq> ;
+ .
+
+<#trig-subm-16> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-16" ;
+ rdfs:comment "long literals with escapes" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-16.trig> ;
+ mf:result <trig-subm-16.nq> ;
+ .
+
+<#trig-subm-17> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-17" ;
+ rdfs:comment "floating point number" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-17.trig> ;
+ mf:result <trig-subm-17.nq> ;
+ .
+
+<#trig-subm-18> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-18" ;
+ rdfs:comment "empty literals, normal and long variant" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-18.trig> ;
+ mf:result <trig-subm-18.nq> ;
+ .
+
+<#trig-subm-19> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-19" ;
+ rdfs:comment "positive integer, decimal and doubles" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-19.trig> ;
+ mf:result <trig-subm-19.nq> ;
+ .
+
+<#trig-subm-20> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-20" ;
+ rdfs:comment "negative integer, decimal and doubles" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-20.trig> ;
+ mf:result <trig-subm-20.nq> ;
+ .
+
+<#trig-subm-21> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-21" ;
+ rdfs:comment "long literal ending in double quote" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-21.trig> ;
+ mf:result <trig-subm-21.nq> ;
+ .
+
+<#trig-subm-22> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-22" ;
+ rdfs:comment "boolean literals" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-22.trig> ;
+ mf:result <trig-subm-22.nq> ;
+ .
+
+<#trig-subm-23> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-23" ;
+ rdfs:comment "comments" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-23.trig> ;
+ mf:result <trig-subm-23.nq> ;
+ .
+
+<#trig-subm-24> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-24" ;
+ rdfs:comment "no final mewline" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-24.trig> ;
+ mf:result <trig-subm-24.nq> ;
+ .
+
+<#trig-subm-25> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-25" ;
+ rdfs:comment "repeating a @prefix changes pname definition" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-25.trig> ;
+ mf:result <trig-subm-25.nq> ;
+ .
+
+<#trig-subm-26> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-26" ;
+ rdfs:comment "Variations on decimal canonicalization" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-26.trig> ;
+ mf:result <trig-subm-26.nq> ;
+ .
+
+<#trig-subm-27> rdf:type rdft:TestTrigEval ;
+ mf:name "trig-subm-27" ;
+ rdfs:comment "Repeating @base changes base for relative IRI lookup" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-subm-27.trig> ;
+ mf:result <trig-subm-27.nq> ;
+ .
+
+<#trig-eval-bad-01> rdf:type rdft:TestTrigNegativeEval ;
+ mf:name "trig-eval-bad-01" ;
+ rdfs:comment "Bad IRI : good escape, bad charcater (negative evaluation test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-eval-bad-01.trig> ;
+ .
+
+<#trig-eval-bad-02> rdf:type rdft:TestTrigNegativeEval ;
+ mf:name "trig-eval-bad-02" ;
+ rdfs:comment "Bad IRI : hex 3C is < (negative evaluation test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-eval-bad-02.trig> ;
+ .
+
+<#trig-eval-bad-03> rdf:type rdft:TestTrigNegativeEval ;
+ mf:name "trig-eval-bad-03" ;
+ rdfs:comment "Bad IRI : hex 3E is (negative evaluation test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-eval-bad-03.trig> ;
+ .
+
+<#trig-eval-bad-04> rdf:type rdft:TestTrigNegativeEval ;
+ mf:name "trig-eval-bad-04" ;
+ rdfs:comment "Bad IRI : {abc} (negative evaluation test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-eval-bad-04.trig> ;
+ .
+
+# tests requested by Jeremy Carroll
+# http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c35
+<#comment_following_localName> rdf:type rdft:TestTrigEval ;
+ mf:name "comment_following_localName" ;
+ rdfs:comment "comment following localName" ;
+ rdft:approval rdft:Approved ;
+ mf:action <comment_following_localName.trig> ;
+ mf:result <IRI_spo.nq> ;
+ .
+
+<#number_sign_following_localName> rdf:type rdft:TestTrigEval ;
+ mf:name "number_sign_following_localName" ;
+ rdfs:comment "number sign following localName" ;
+ rdft:approval rdft:Approved ;
+ mf:action <number_sign_following_localName.trig> ;
+ mf:result <number_sign_following_localName.nq> ;
+ .
+
+<#comment_following_PNAME_NS> rdf:type rdft:TestTrigEval ;
+ mf:name "comment_following_PNAME_NS" ;
+ rdfs:comment "comment following PNAME_NS" ;
+ rdft:approval rdft:Approved ;
+ mf:action <comment_following_PNAME_NS.trig> ;
+ mf:result <comment_following_PNAME_NS.nq> ;
+ .
+
+<#number_sign_following_PNAME_NS> rdf:type rdft:TestTrigEval ;
+ mf:name "number_sign_following_PNAME_NS" ;
+ rdfs:comment "number sign following PNAME_NS" ;
+ rdft:approval rdft:Approved ;
+ mf:action <number_sign_following_PNAME_NS.trig> ;
+ mf:result <number_sign_following_PNAME_NS.nq> ;
+ .
+
+# tests from Dave Beckett
+# http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c28
+<#LITERAL_LONG2_with_REVERSE_SOLIDUS> rdf:type rdft:TestTrigEval ;
+ mf:name "LITERAL_LONG2_with_REVERSE_SOLIDUS" ;
+ rdfs:comment "REVERSE SOLIDUS at end of LITERAL_LONG2" ;
+ rdft:approval rdft:Approved ;
+ mf:action <LITERAL_LONG2_with_REVERSE_SOLIDUS.trig> ;
+ mf:result <LITERAL_LONG2_with_REVERSE_SOLIDUS.nq> ;
+ .
+
+<#trig-syntax-bad-LITERAL2_with_langtag_and_datatype> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-syntax-bad-num-05" ;
+ rdfs:comment "Bad number format (negative test)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-LITERAL2_with_langtag_and_datatype.trig> ;
+ .
+
+<#two_LITERAL_LONG2s> rdf:type rdft:TestTrigEval ;
+ mf:name "two_LITERAL_LONG2s" ;
+ rdfs:comment "two LITERAL_LONG2s testing quote delimiter overrun" ;
+ rdft:approval rdft:Approved ;
+ mf:action <two_LITERAL_LONG2s.trig> ;
+ mf:result <two_LITERAL_LONG2s.nq> ;
+ .
+
+<#langtagged_LONG_with_subtag> rdf:type rdft:TestTrigEval ;
+ mf:name "langtagged_LONG_with_subtag" ;
+ rdfs:comment "langtagged LONG with subtag \"\"\"Cheers\"\"\"@en-UK" ;
+ rdft:approval rdft:Approved ;
+ mf:action <langtagged_LONG_with_subtag.trig> ;
+ mf:result <langtagged_LONG_with_subtag.nq> ;
+ .
+
+# tests from David Robillard
+# http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c21
+<#trig-syntax-bad-blank-label-dot-end>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Blank node label must not end in dot" ;
+ mf:name "trig-syntax-bad-blank-label-dot-end" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-blank-label-dot-end.trig> .
+
+<#trig-syntax-bad-number-dot-in-anon>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Dot delimeter may not appear in anonymous nodes" ;
+ mf:name "trig-syntax-bad-number-dot-in-anon" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-number-dot-in-anon.trig> .
+
+<#trig-syntax-bad-ln-dash-start>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Local name must not begin with dash" ;
+ mf:name "trig-syntax-bad-ln-dash-start" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-ln-dash-start.trig> .
+
+<#trig-syntax-bad-ln-escape>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Bad hex escape in local name" ;
+ mf:name "trig-syntax-bad-ln-escape" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-ln-escape.trig> .
+
+<#trig-syntax-bad-ln-escape-start>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Bad hex escape at start of local name" ;
+ mf:name "trig-syntax-bad-ln-escape-start" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-ln-escape-start.trig> .
+
+<#trig-syntax-bad-ns-dot-end>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Prefix must not end in dot" ;
+ mf:name "trig-syntax-bad-ns-dot-end" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-ns-dot-end.trig> .
+
+<#trig-syntax-bad-ns-dot-start>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Prefix must not start with dot" ;
+ mf:name "trig-syntax-bad-ns-dot-start" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-ns-dot-start.trig> .
+
+<#trig-syntax-bad-missing-ns-dot-end>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Prefix must not end in dot (error in triple, not prefix directive like trig-syntax-bad-ns-dot-end)" ;
+ mf:name "trig-syntax-bad-missing-ns-dot-end" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-missing-ns-dot-end.trig> .
+
+<#trig-syntax-bad-missing-ns-dot-start>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Prefix must not start with dot (error in triple, not prefix directive like trig-syntax-bad-ns-dot-end)" ;
+ mf:name "trig-syntax-bad-missing-ns-dot-start" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-missing-ns-dot-start.trig> .
+
+<#trig-syntax-bad-list-01>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Free-standing list outside {} : bad syntax" ;
+ mf:name "trig-syntax-bad-list-01" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-list-01.trig>
+ .
+
+<#trig-syntax-bad-list-02>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Free-standing list of zero-elements outside {} : bad syntax" ;
+ mf:name "trig-syntax-bad-list-02" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-list-02.trig>
+ .
+
+<#trig-syntax-bad-list-03>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Free-standing list inside {} : bad syntax" ;
+ mf:name "trig-syntax-bad-list-03" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-list-03.trig>
+ .
+
+<#trig-syntax-bad-list-04>
+ rdf:type rdft:TestTrigNegativeSyntax ;
+ rdfs:comment "Free-standing list of zero elements : bad syntax" ;
+ mf:name "trig-syntax-bad-list-04" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-bad-list-04.trig>
+ .
+
+<#trig-syntax-ln-dots>
+ rdf:type rdft:TestTrigPositiveSyntax ;
+ rdfs:comment "Dots in pname local names" ;
+ mf:name "trig-syntax-ln-dots" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-ln-dots.trig> .
+
+<#trig-syntax-ln-colons>
+ rdf:type rdft:TestTrigPositiveSyntax ;
+ rdfs:comment "Colons in pname local names" ;
+ mf:name "trig-syntax-ln-colons" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-ln-colons.trig> .
+
+<#trig-syntax-ns-dots>
+ rdf:type rdft:TestTrigPositiveSyntax ;
+ rdfs:comment "Dots in namespace names" ;
+ mf:name "trig-syntax-ns-dots" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-ns-dots.trig> .
+
+<#trig-syntax-blank-label>
+ rdf:type rdft:TestTrigPositiveSyntax ;
+ rdfs:comment "Characters allowed in blank node labels" ;
+ mf:name "trig-syntax-blank-label" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-syntax-blank-label.trig> .
+
+# tests for bnode graph names, optional GRAPH keyword and
+# triples outside {}
+
+<#trig-kw-graph-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-01" ;
+ rdfs:comment "Named graphs can be proceeded by GRAPH" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-01.trig> ;
+ .
+
+<#trig-kw-graph-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-02" ;
+ rdfs:comment "Trailing . not necessary inside {}" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-02.trig> ;
+ .
+
+<#trig-kw-graph-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-03" ;
+ rdfs:comment "Named graph may be empty" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-03.trig> ;
+ .
+
+<#trig-kw-graph-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-04" ;
+ rdfs:comment "" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-04.trig> ;
+ .
+
+<#trig-kw-graph-05> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-05" ;
+ rdfs:comment "Use of empty prefix inside named graph" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-05.trig> ;
+ .
+
+<#trig-kw-graph-06> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-06" ;
+ rdfs:comment "" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-06.trig> ;
+ .
+
+<#trig-kw-graph-07> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-07" ;
+ rdfs:comment "Named graph may be named with BNode _:a" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-07.trig> ;
+ .
+
+<#trig-kw-graph-08> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-08" ;
+ rdfs:comment "Named graph may be named with BNode []" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-08.trig> ;
+ .
+
+<#trig-kw-graph-09> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-09" ;
+ rdfs:comment "Named graph may be named with PNAME" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-09.trig> ;
+ .
+
+<#trig-kw-graph-10> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-kw-graph-10" ;
+ rdfs:comment "Named graph with PNAME and empty graph" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-kw-graph-10.trig> ;
+ .
+
+<#trig-graph-bad-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-01" ;
+ rdfs:comment "GRAPH but no name - GRAPH is not used with the default graph" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-01.trig> ;
+ .
+
+<#trig-graph-bad-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-02" ;
+ rdfs:comment "GRAPH not followed by DOT" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-02.trig> ;
+ .
+
+<#trig-graph-bad-03> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-03" ;
+ rdfs:comment "GRAPH needs {}" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-03.trig> ;
+ .
+
+<#trig-graph-bad-04> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-04" ;
+ rdfs:comment "GRAPH needs {}" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-04.trig> ;
+ .
+
+<#trig-graph-bad-05> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-05" ;
+ rdfs:comment "GRAPH and a name, not several" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-05.trig> ;
+ .
+
+<#trig-graph-bad-06> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-06" ;
+ rdfs:comment "GRAPH - Must close {}" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-06.trig> ;
+ .
+
+<#trig-graph-bad-07> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-07" ;
+ rdfs:comment "GRAPH may not include a GRAPH" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-07.trig> ;
+ .
+
+<#trig-graph-bad-08> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-08" ;
+ rdfs:comment "@graph is not a keyword" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-08.trig> ;
+ .
+
+<#trig-graph-bad-09> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-09" ;
+ rdfs:comment "Directives not allowed inside GRAPH" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-09.trig> ;
+ .
+
+<#trig-graph-bad-10> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-10" ;
+ rdfs:comment "A graph may not be named with an empty collection" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-10.trig> ;
+ .
+
+<#trig-graph-bad-11> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-graph-bad-11" ;
+ rdfs:comment "A graph may not be named with a collection" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-graph-bad-11.trig> ;
+ .
+
+<#trig-bnodeplist-graph-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-bnodeplist-graph-bad-01" ;
+ rdfs:comment "A graph may not be named with a blankNodePropertyList" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-bnodeplist-graph-bad-01.trig> ;
+ .
+
+<#trig-collection-graph-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-collection-graph-bad-01" ;
+ rdfs:comment "A graph may not be named with an empty collection" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-collection-graph-bad-01.trig> ;
+ .
+
+<#trig-collection-graph-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-collection-graph-bad-02" ;
+ rdfs:comment "A graph may not be named with a collection" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-collection-graph-bad-02.trig> ;
+ .
+
+<#trig-turtle-01> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-turtle-01" ;
+ rdfs:comment "TriG can parse Turtle" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-turtle-01.trig> ;
+ .
+
+<#trig-turtle-02> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-turtle-02" ;
+ rdfs:comment "TriG can parse Turtle (repeated PREFIX)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-turtle-02.trig> ;
+ .
+
+<#trig-turtle-03> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-turtle-03" ;
+ rdfs:comment "TriG can parse Turtle (blankNodePropertyList subject)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-turtle-03.trig> ;
+ .
+
+<#trig-turtle-04> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-turtle-04" ;
+ rdfs:comment "TriG can parse Turtle (blankNodePropertyList subject)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-turtle-04.trig> ;
+ .
+
+<#trig-turtle-05> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-turtle-05" ;
+ rdfs:comment "TriG can parse Turtle (bare blankNodePropertyList)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-turtle-05.trig> ;
+ .
+
+<#trig-turtle-06> rdf:type rdft:TestTrigPositiveSyntax ;
+ mf:name "trig-turtle-06" ;
+ rdfs:comment "TriG can parse Turtle (collection subject and object)" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-turtle-06.trig> ;
+ .
+
+<#trig-turtle-bad-01> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-turtle-bad-01" ;
+ rdfs:comment "Trailing dot required in Turtle block" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-turtle-bad-01.trig> ;
+ .
+
+<#trig-turtle-bad-02> rdf:type rdft:TestTrigNegativeSyntax ;
+ mf:name "trig-turtle-bad-02" ;
+ rdfs:comment "TriG is not N-Quads" ;
+ rdft:approval rdft:Approved ;
+ mf:action <trig-turtle-bad-02.trig> ;
+ .
diff --git a/tests/TrigTests/negative_numeric.nq b/tests/TrigTests/negative_numeric.nq
new file mode 100644
index 00000000..9c7f8126
--- /dev/null
+++ b/tests/TrigTests/negative_numeric.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "-1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://a.example/s> <http://a.example/p> "-1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
diff --git a/tests/TrigTests/negative_numeric.trig b/tests/TrigTests/negative_numeric.trig
new file mode 100644
index 00000000..cbfe85f8
--- /dev/null
+++ b/tests/TrigTests/negative_numeric.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> -1 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> -1 .}
diff --git a/tests/TrigTests/nested_blankNodePropertyLists.nq b/tests/TrigTests/nested_blankNodePropertyLists.nq
new file mode 100644
index 00000000..541cd3b9
--- /dev/null
+++ b/tests/TrigTests/nested_blankNodePropertyLists.nq
@@ -0,0 +1,6 @@
+_:b1 <http://a.example/p1> _:b2 .
+_:b2 <http://a.example/p2> <http://a.example/o2> .
+_:b1 <http://a.example/p> <http://a.example/o> .
+_:b3 <http://a.example/p1> _:b4 <http://example/graph> .
+_:b4 <http://a.example/p2> <http://a.example/o2> <http://example/graph> .
+_:b3 <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/nested_blankNodePropertyLists.trig b/tests/TrigTests/nested_blankNodePropertyLists.trig
new file mode 100644
index 00000000..5b28195a
--- /dev/null
+++ b/tests/TrigTests/nested_blankNodePropertyLists.trig
@@ -0,0 +1,2 @@
+{[ <http://a.example/p1> [ <http://a.example/p2> <http://a.example/o2> ] ; <http://a.example/p> <http://a.example/o> ].}
+<http://example/graph> {[ <http://a.example/p1> [ <http://a.example/p2> <http://a.example/o2> ] ; <http://a.example/p> <http://a.example/o> ].}
diff --git a/tests/TrigTests/nested_collection.nq b/tests/TrigTests/nested_collection.nq
new file mode 100644
index 00000000..f504b3aa
--- /dev/null
+++ b/tests/TrigTests/nested_collection.nq
@@ -0,0 +1,10 @@
+<http://a.example/s> <http://a.example/p> _:b1 .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b2 .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+<http://a.example/s> <http://a.example/p> _:b3 <http://example/graph> .
+_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:b4 <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
+_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
diff --git a/tests/TrigTests/nested_collection.trig b/tests/TrigTests/nested_collection.trig
new file mode 100644
index 00000000..5d4a3017
--- /dev/null
+++ b/tests/TrigTests/nested_collection.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> ((1)) .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> ((1)) .}
diff --git a/tests/TrigTests/number_sign_following_PNAME_NS.nq b/tests/TrigTests/number_sign_following_PNAME_NS.nq
new file mode 100644
index 00000000..82d9629a
--- /dev/null
+++ b/tests/TrigTests/number_sign_following_PNAME_NS.nq
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/#numbersign> .
diff --git a/tests/TrigTests/number_sign_following_PNAME_NS.trig b/tests/TrigTests/number_sign_following_PNAME_NS.trig
new file mode 100644
index 00000000..2003fa4d
--- /dev/null
+++ b/tests/TrigTests/number_sign_following_PNAME_NS.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+<http://a.example/s> <http://a.example/p> p:\#numbersign
+.
diff --git a/tests/TrigTests/number_sign_following_localName.nq b/tests/TrigTests/number_sign_following_localName.nq
new file mode 100644
index 00000000..5ae57b8d
--- /dev/null
+++ b/tests/TrigTests/number_sign_following_localName.nq
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/o#numbersign> .
diff --git a/tests/TrigTests/number_sign_following_localName.trig b/tests/TrigTests/number_sign_following_localName.trig
new file mode 100644
index 00000000..a0e39ecd
--- /dev/null
+++ b/tests/TrigTests/number_sign_following_localName.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/> .
+<http://a.example/s> <http://a.example/p> p:o\#numbersign
+.
diff --git a/tests/TrigTests/numeric_with_leading_0.nq b/tests/TrigTests/numeric_with_leading_0.nq
new file mode 100644
index 00000000..f028e790
--- /dev/null
+++ b/tests/TrigTests/numeric_with_leading_0.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "01"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://a.example/s> <http://a.example/p> "01"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
diff --git a/tests/TrigTests/numeric_with_leading_0.trig b/tests/TrigTests/numeric_with_leading_0.trig
new file mode 100644
index 00000000..6da8ad89
--- /dev/null
+++ b/tests/TrigTests/numeric_with_leading_0.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> 01 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> 01 .}
diff --git a/tests/TrigTests/objectList_with_two_objects.nq b/tests/TrigTests/objectList_with_two_objects.nq
new file mode 100644
index 00000000..4b4e044b
--- /dev/null
+++ b/tests/TrigTests/objectList_with_two_objects.nq
@@ -0,0 +1,4 @@
+<http://a.example/s> <http://a.example/p> <http://a.example/o1> .
+<http://a.example/s> <http://a.example/p> <http://a.example/o2> .
+<http://a.example/s> <http://a.example/p> <http://a.example/o1> <http://example/graph> .
+<http://a.example/s> <http://a.example/p> <http://a.example/o2> <http://example/graph> .
diff --git a/tests/TrigTests/objectList_with_two_objects.trig b/tests/TrigTests/objectList_with_two_objects.trig
new file mode 100644
index 00000000..6dbe9792
--- /dev/null
+++ b/tests/TrigTests/objectList_with_two_objects.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> <http://a.example/o1>, <http://a.example/o2> .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> <http://a.example/o1>, <http://a.example/o2> .}
diff --git a/tests/TrigTests/old_style_base.trig b/tests/TrigTests/old_style_base.trig
new file mode 100644
index 00000000..d1f5d4a2
--- /dev/null
+++ b/tests/TrigTests/old_style_base.trig
@@ -0,0 +1,3 @@
+@base <http://a.example/>.
+{<s> <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {<s> <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/old_style_prefix.trig b/tests/TrigTests/old_style_prefix.trig
new file mode 100644
index 00000000..014c1f0d
--- /dev/null
+++ b/tests/TrigTests/old_style_prefix.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{p:s <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:s <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/percent_escaped_localName.nq b/tests/TrigTests/percent_escaped_localName.nq
new file mode 100644
index 00000000..85273e95
--- /dev/null
+++ b/tests/TrigTests/percent_escaped_localName.nq
@@ -0,0 +1,2 @@
+<http://a.example/%25> <http://a.example/p> <http://a.example/o> .
+<http://a.example/%25> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/percent_escaped_localName.trig b/tests/TrigTests/percent_escaped_localName.trig
new file mode 100644
index 00000000..a2b55c90
--- /dev/null
+++ b/tests/TrigTests/percent_escaped_localName.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{p:%25 <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:%25 <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/positive_numeric.nq b/tests/TrigTests/positive_numeric.nq
new file mode 100644
index 00000000..25337582
--- /dev/null
+++ b/tests/TrigTests/positive_numeric.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p> "+1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://a.example/s> <http://a.example/p> "+1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
diff --git a/tests/TrigTests/positive_numeric.trig b/tests/TrigTests/positive_numeric.trig
new file mode 100644
index 00000000..5c7a166d
--- /dev/null
+++ b/tests/TrigTests/positive_numeric.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p> +1 .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> +1 .}
diff --git a/tests/TrigTests/predicateObjectList_with_two_objectLists.nq b/tests/TrigTests/predicateObjectList_with_two_objectLists.nq
new file mode 100644
index 00000000..0c203403
--- /dev/null
+++ b/tests/TrigTests/predicateObjectList_with_two_objectLists.nq
@@ -0,0 +1,4 @@
+<http://a.example/s> <http://a.example/p1> <http://a.example/o1> .
+<http://a.example/s> <http://a.example/p2> <http://a.example/o2> .
+<http://a.example/s> <http://a.example/p1> <http://a.example/o1> <http://example/graph> .
+<http://a.example/s> <http://a.example/p2> <http://a.example/o2> <http://example/graph> .
diff --git a/tests/TrigTests/predicateObjectList_with_two_objectLists.trig b/tests/TrigTests/predicateObjectList_with_two_objectLists.trig
new file mode 100644
index 00000000..0513be26
--- /dev/null
+++ b/tests/TrigTests/predicateObjectList_with_two_objectLists.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p1> <http://a.example/o1>; <http://a.example/p2> <http://a.example/o2> .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p1> <http://a.example/o1>; <http://a.example/p2> <http://a.example/o2> .}
diff --git a/tests/TrigTests/prefix_only_IRI.trig b/tests/TrigTests/prefix_only_IRI.trig
new file mode 100644
index 00000000..c0f4d441
--- /dev/null
+++ b/tests/TrigTests/prefix_only_IRI.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/s>.
+{p: <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p: <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/prefix_reassigned_and_used.nq b/tests/TrigTests/prefix_reassigned_and_used.nq
new file mode 100644
index 00000000..5e65c13f
--- /dev/null
+++ b/tests/TrigTests/prefix_reassigned_and_used.nq
@@ -0,0 +1,2 @@
+<http://b.example/s> <http://a.example/p> <http://a.example/o> .
+<http://b.example/s> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/prefix_reassigned_and_used.trig b/tests/TrigTests/prefix_reassigned_and_used.trig
new file mode 100644
index 00000000..6abd7ea9
--- /dev/null
+++ b/tests/TrigTests/prefix_reassigned_and_used.trig
@@ -0,0 +1,4 @@
+@prefix p: <http://a.example/>.
+@prefix p: <http://b.example/>.
+{p:s <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:s <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/prefix_with_PN_CHARS_BASE_character_boundaries.trig b/tests/TrigTests/prefix_with_PN_CHARS_BASE_character_boundaries.trig
new file mode 100644
index 00000000..30b7b8ab
--- /dev/null
+++ b/tests/TrigTests/prefix_with_PN_CHARS_BASE_character_boundaries.trig
@@ -0,0 +1,3 @@
+@prefix AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽: <http://a.example/> .
+{<http://a.example/s> <http://a.example/p> AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽:o}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽:o}
diff --git a/tests/TrigTests/prefix_with_non_leading_extras.trig b/tests/TrigTests/prefix_with_non_leading_extras.trig
new file mode 100644
index 00000000..64e86f37
--- /dev/null
+++ b/tests/TrigTests/prefix_with_non_leading_extras.trig
@@ -0,0 +1,3 @@
+@prefix a·̀ͯ‿.⁀: <http://a.example/>.
+{a·̀ͯ‿.⁀:s <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {a·̀ͯ‿.⁀:s <http://a.example/p> <http://a.example/o> .} \ No newline at end of file
diff --git a/tests/TrigTests/prefixed_IRI_object.trig b/tests/TrigTests/prefixed_IRI_object.trig
new file mode 100644
index 00000000..2c04b80b
--- /dev/null
+++ b/tests/TrigTests/prefixed_IRI_object.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{<http://a.example/s> <http://a.example/p> p:o .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> p:o .}
diff --git a/tests/TrigTests/prefixed_IRI_predicate.trig b/tests/TrigTests/prefixed_IRI_predicate.trig
new file mode 100644
index 00000000..f41e7a35
--- /dev/null
+++ b/tests/TrigTests/prefixed_IRI_predicate.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{<http://a.example/s> p:p <http://a.example/o> .}
+<http://example/graph> {<http://a.example/s> p:p <http://a.example/o> .}
diff --git a/tests/TrigTests/prefixed_name_datatype.trig b/tests/TrigTests/prefixed_name_datatype.trig
new file mode 100644
index 00000000..45d53873
--- /dev/null
+++ b/tests/TrigTests/prefixed_name_datatype.trig
@@ -0,0 +1,3 @@
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+{<http://a.example/s> <http://a.example/p> "1"^^xsd:integer .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p> "1"^^xsd:integer .}
diff --git a/tests/TrigTests/repeated_semis_at_end.trig b/tests/TrigTests/repeated_semis_at_end.trig
new file mode 100644
index 00000000..e4131b94
--- /dev/null
+++ b/tests/TrigTests/repeated_semis_at_end.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p1> <http://a.example/o1>;; <http://a.example/p2> <http://a.example/o2> .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p1> <http://a.example/o1>;; <http://a.example/p2> <http://a.example/o2> .}
diff --git a/tests/TrigTests/repeated_semis_not_at_end.nq b/tests/TrigTests/repeated_semis_not_at_end.nq
new file mode 100644
index 00000000..81f01397
--- /dev/null
+++ b/tests/TrigTests/repeated_semis_not_at_end.nq
@@ -0,0 +1,2 @@
+<http://a.example/s> <http://a.example/p1> <http://a.example/o1> .
+<http://a.example/s> <http://a.example/p1> <http://a.example/o1> <http://example/graph> .
diff --git a/tests/TrigTests/repeated_semis_not_at_end.trig b/tests/TrigTests/repeated_semis_not_at_end.trig
new file mode 100644
index 00000000..270ac985
--- /dev/null
+++ b/tests/TrigTests/repeated_semis_not_at_end.trig
@@ -0,0 +1,2 @@
+{<http://a.example/s> <http://a.example/p1> <http://a.example/o1>;; .}
+<http://example/graph> {<http://a.example/s> <http://a.example/p1> <http://a.example/o1>;; .}
diff --git a/tests/TrigTests/reserved_escaped_localName.nq b/tests/TrigTests/reserved_escaped_localName.nq
new file mode 100644
index 00000000..d965ceb0
--- /dev/null
+++ b/tests/TrigTests/reserved_escaped_localName.nq
@@ -0,0 +1,2 @@
+<http://a.example/_~.-!$&'()*+,;=/?#@%00> <http://a.example/p> <http://a.example/o> .
+<http://a.example/_~.-!$&'()*+,;=/?#@%00> <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/reserved_escaped_localName.trig b/tests/TrigTests/reserved_escaped_localName.trig
new file mode 100644
index 00000000..991594ad
--- /dev/null
+++ b/tests/TrigTests/reserved_escaped_localName.trig
@@ -0,0 +1,3 @@
+@prefix p: <http://a.example/>.
+{p:\_\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\%00 <http://a.example/p> <http://a.example/o> .}
+<http://example/graph> {p:\_\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\%00 <http://a.example/p> <http://a.example/o> .}
diff --git a/tests/TrigTests/sole_blankNodePropertyList.nq b/tests/TrigTests/sole_blankNodePropertyList.nq
new file mode 100644
index 00000000..ae23b3de
--- /dev/null
+++ b/tests/TrigTests/sole_blankNodePropertyList.nq
@@ -0,0 +1,3 @@
+_:b1 <http://a.example/p> <http://a.example/o> .
+_:b2 <http://a.example/p> <http://a.example/o> <http://example/graph> .
+_:b3 <http://a.example/p> <http://a.example/o> <http://example/graph> .
diff --git a/tests/TrigTests/sole_blankNodePropertyList.trig b/tests/TrigTests/sole_blankNodePropertyList.trig
new file mode 100644
index 00000000..ae3765f5
--- /dev/null
+++ b/tests/TrigTests/sole_blankNodePropertyList.trig
@@ -0,0 +1,3 @@
+{[ <http://a.example/p> <http://a.example/o> ] .}
+<http://example/graph> { [ <http://a.example/p> <http://a.example/o> ] .}
+<http://example/graph> { [ <http://a.example/p> <http://a.example/o> ] }
diff --git a/tests/TrigTests/trig-bnodeplist-graph-bad-01.trig b/tests/TrigTests/trig-bnodeplist-graph-bad-01.trig
new file mode 100644
index 00000000..2b9a8d36
--- /dev/null
+++ b/tests/TrigTests/trig-bnodeplist-graph-bad-01.trig
@@ -0,0 +1,4 @@
+# BlankNodePropertyList as Graph Name
+PREFIX : <http://example/>
+
+[:p1 :o1] {:s :p :o}
diff --git a/tests/TrigTests/trig-collection-graph-bad-01.trig b/tests/TrigTests/trig-collection-graph-bad-01.trig
new file mode 100644
index 00000000..e8a7eaeb
--- /dev/null
+++ b/tests/TrigTests/trig-collection-graph-bad-01.trig
@@ -0,0 +1,4 @@
+# Collection as Graph Name
+PREFIX : <http://example/>
+
+() {:s :p :o}
diff --git a/tests/TrigTests/trig-collection-graph-bad-02.trig b/tests/TrigTests/trig-collection-graph-bad-02.trig
new file mode 100644
index 00000000..ba90bcfd
--- /dev/null
+++ b/tests/TrigTests/trig-collection-graph-bad-02.trig
@@ -0,0 +1,4 @@
+# Collection as Graph Name
+PREFIX : <http://example/>
+
+(1 2) {:s :p :o}
diff --git a/tests/TrigTests/trig-eval-bad-01.trig b/tests/TrigTests/trig-eval-bad-01.trig
new file mode 100644
index 00000000..36f66252
--- /dev/null
+++ b/tests/TrigTests/trig-eval-bad-01.trig
@@ -0,0 +1,2 @@
+# Bad IRI : good escape, bad charcater
+{<http://example/\u0020> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-eval-bad-02.trig b/tests/TrigTests/trig-eval-bad-02.trig
new file mode 100644
index 00000000..2fc1aa3d
--- /dev/null
+++ b/tests/TrigTests/trig-eval-bad-02.trig
@@ -0,0 +1,2 @@
+# Bad IRI : hex 3C is <
+{<http://example/\u003C> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-eval-bad-03.trig b/tests/TrigTests/trig-eval-bad-03.trig
new file mode 100644
index 00000000..4024af55
--- /dev/null
+++ b/tests/TrigTests/trig-eval-bad-03.trig
@@ -0,0 +1,2 @@
+# Bad IRI : hex 3E is >
+{<http://example/\u003E> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-eval-bad-04.trig b/tests/TrigTests/trig-eval-bad-04.trig
new file mode 100644
index 00000000..b43b6814
--- /dev/null
+++ b/tests/TrigTests/trig-eval-bad-04.trig
@@ -0,0 +1,2 @@
+# Bad IRI
+{<http://example/{abc}> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-eval-struct-01.nq b/tests/TrigTests/trig-eval-struct-01.nq
new file mode 100644
index 00000000..6106c139
--- /dev/null
+++ b/tests/TrigTests/trig-eval-struct-01.nq
@@ -0,0 +1,2 @@
+<http://example/s> <http://example/p> <http://example/o> .
+<http://example/s> <http://example/p> <http://example/o> <http://example/graph> .
diff --git a/tests/TrigTests/trig-eval-struct-01.trig b/tests/TrigTests/trig-eval-struct-01.trig
new file mode 100644
index 00000000..c6003461
--- /dev/null
+++ b/tests/TrigTests/trig-eval-struct-01.trig
@@ -0,0 +1,2 @@
+{<http://example/s> <http://example/p> <http://example/o> .}
+<http://example/graph> {<http://example/s> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-eval-struct-02.nq b/tests/TrigTests/trig-eval-struct-02.nq
new file mode 100644
index 00000000..a4e416e9
--- /dev/null
+++ b/tests/TrigTests/trig-eval-struct-02.nq
@@ -0,0 +1,4 @@
+<http://example/s> <http://example/p1> <http://example/o1> .
+<http://example/s> <http://example/p2> <http://example/o2> .
+<http://example/s> <http://example/p1> <http://example/o1> <http://example/graph> .
+<http://example/s> <http://example/p2> <http://example/o2> <http://example/graph> .
diff --git a/tests/TrigTests/trig-eval-struct-02.trig b/tests/TrigTests/trig-eval-struct-02.trig
new file mode 100644
index 00000000..332af23c
--- /dev/null
+++ b/tests/TrigTests/trig-eval-struct-02.trig
@@ -0,0 +1,13 @@
+{
+ <http://example/s>
+ <http://example/p1> <http://example/o1> ;
+ <http://example/p2> <http://example/o2> ;
+ .
+}
+
+<http://example/graph> {
+ <http://example/s>
+ <http://example/p1> <http://example/o1> ;
+ <http://example/p2> <http://example/o2> ;
+ .
+}
diff --git a/tests/TrigTests/trig-graph-bad-01.trig b/tests/TrigTests/trig-graph-bad-01.trig
new file mode 100644
index 00000000..a247a68c
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-01.trig
@@ -0,0 +1,5 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH but no name - GRAPH is not used with the default graph
+GRAPH { :s :p :o }
diff --git a/tests/TrigTests/trig-graph-bad-02.trig b/tests/TrigTests/trig-graph-bad-02.trig
new file mode 100644
index 00000000..47bbda62
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-02.trig
@@ -0,0 +1,6 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH not followed by DOT
+GRAPH :g1 { :s :p :o } .
+GRAPH :g2 { :s :p :o } .
diff --git a/tests/TrigTests/trig-graph-bad-03.trig b/tests/TrigTests/trig-graph-bad-03.trig
new file mode 100644
index 00000000..31af19f8
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-03.trig
@@ -0,0 +1,8 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH needs {}
+GRAPH :g
+ :s :p :o .
+
+
diff --git a/tests/TrigTests/trig-graph-bad-04.trig b/tests/TrigTests/trig-graph-bad-04.trig
new file mode 100644
index 00000000..23e23a21
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-04.trig
@@ -0,0 +1,5 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH needs {}
+GRAPH :s :p :o
diff --git a/tests/TrigTests/trig-graph-bad-05.trig b/tests/TrigTests/trig-graph-bad-05.trig
new file mode 100644
index 00000000..7bf470a6
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-05.trig
@@ -0,0 +1,5 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH and a name, not several.
+GRAPH :g1 :g2 { :s :p :o }
diff --git a/tests/TrigTests/trig-graph-bad-06.trig b/tests/TrigTests/trig-graph-bad-06.trig
new file mode 100644
index 00000000..487ae9e0
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-06.trig
@@ -0,0 +1,6 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH - Must close {}
+GRAPH :g { :s :p :o
+
diff --git a/tests/TrigTests/trig-graph-bad-07.trig b/tests/TrigTests/trig-graph-bad-07.trig
new file mode 100644
index 00000000..de618384
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-07.trig
@@ -0,0 +1,9 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH and a triples block.
+GRAPH :g {
+ :s :p :o .
+ GRAPH :g1 { :s1 :p1 :o1 }
+}
+
diff --git a/tests/TrigTests/trig-graph-bad-08.trig b/tests/TrigTests/trig-graph-bad-08.trig
new file mode 100644
index 00000000..190d2c0f
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-08.trig
@@ -0,0 +1,5 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH and a triples block.
+@graph :g { :s :p :o }
diff --git a/tests/TrigTests/trig-graph-bad-09.trig b/tests/TrigTests/trig-graph-bad-09.trig
new file mode 100644
index 00000000..3cfca535
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-09.trig
@@ -0,0 +1,12 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH - no directives
+graph :g {
+ :s :p :o
+prefix x: <http://example/x#>
+ x:s1 x:p1 x:o1 .
+}
+
+
+
diff --git a/tests/TrigTests/trig-graph-bad-10.trig b/tests/TrigTests/trig-graph-bad-10.trig
new file mode 100644
index 00000000..fc0531f8
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-10.trig
@@ -0,0 +1,8 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH - no lists
+GRAPH () { :s :p :o }
+
+
+
diff --git a/tests/TrigTests/trig-graph-bad-11.trig b/tests/TrigTests/trig-graph-bad-11.trig
new file mode 100644
index 00000000..c7b0ffd5
--- /dev/null
+++ b/tests/TrigTests/trig-graph-bad-11.trig
@@ -0,0 +1,8 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+# GRAPH - no lists
+graph (1 2) { :s :p :o }
+
+
+
diff --git a/tests/TrigTests/trig-kw-graph-01.trig b/tests/TrigTests/trig-kw-graph-01.trig
new file mode 100644
index 00000000..acf739bf
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-01.trig
@@ -0,0 +1,4 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH :g { :s :p :o } \ No newline at end of file
diff --git a/tests/TrigTests/trig-kw-graph-02.trig b/tests/TrigTests/trig-kw-graph-02.trig
new file mode 100644
index 00000000..6b4f904b
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-02.trig
@@ -0,0 +1,4 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH :g { :s :p :o . }
diff --git a/tests/TrigTests/trig-kw-graph-03.trig b/tests/TrigTests/trig-kw-graph-03.trig
new file mode 100644
index 00000000..cfb67fe9
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-03.trig
@@ -0,0 +1,4 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH :g { } \ No newline at end of file
diff --git a/tests/TrigTests/trig-kw-graph-04.trig b/tests/TrigTests/trig-kw-graph-04.trig
new file mode 100644
index 00000000..8a38e30e
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-04.trig
@@ -0,0 +1,8 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH :g1 { :s :p :o }
+GRAPH :g2 { :s :p :o }
+:g3 { :s :p :o }
+GRAPH :g4 { :s :p :o }
+GRAPH :g5 { :s :p :o }
diff --git a/tests/TrigTests/trig-kw-graph-05.trig b/tests/TrigTests/trig-kw-graph-05.trig
new file mode 100644
index 00000000..acf739bf
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-05.trig
@@ -0,0 +1,4 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH :g { :s :p :o } \ No newline at end of file
diff --git a/tests/TrigTests/trig-kw-graph-06.trig b/tests/TrigTests/trig-kw-graph-06.trig
new file mode 100644
index 00000000..9c5ca1a6
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-06.trig
@@ -0,0 +1,4 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH _:a { :s :p :o } \ No newline at end of file
diff --git a/tests/TrigTests/trig-kw-graph-07.trig b/tests/TrigTests/trig-kw-graph-07.trig
new file mode 100644
index 00000000..3cd8aeb7
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-07.trig
@@ -0,0 +1,6 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH [] { :s :p :o }
+[] { :s :p :o }
+GRAPH [] { :s :p :o }
diff --git a/tests/TrigTests/trig-kw-graph-08.trig b/tests/TrigTests/trig-kw-graph-08.trig
new file mode 100644
index 00000000..acf739bf
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-08.trig
@@ -0,0 +1,4 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH :g { :s :p :o } \ No newline at end of file
diff --git a/tests/TrigTests/trig-kw-graph-09.trig b/tests/TrigTests/trig-kw-graph-09.trig
new file mode 100644
index 00000000..acf739bf
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-09.trig
@@ -0,0 +1,4 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH :g { :s :p :o } \ No newline at end of file
diff --git a/tests/TrigTests/trig-kw-graph-10.trig b/tests/TrigTests/trig-kw-graph-10.trig
new file mode 100644
index 00000000..cfb67fe9
--- /dev/null
+++ b/tests/TrigTests/trig-kw-graph-10.trig
@@ -0,0 +1,4 @@
+# GRAPH tests
+PREFIX : <http://example/>
+
+GRAPH :g { } \ No newline at end of file
diff --git a/tests/TrigTests/trig-subm-01.nq b/tests/TrigTests/trig-subm-01.nq
new file mode 100644
index 00000000..16f21cb9
--- /dev/null
+++ b/tests/TrigTests/trig-subm-01.nq
@@ -0,0 +1,2 @@
+_:b1 <http://www.w3.org/2013/TriGTests/trig-subm-01.trig#x> <http://www.w3.org/2013/TriGTests/trig-subm-01.trig#y> .
+_:b2 <http://www.w3.org/2013/TriGTests/trig-subm-01.trig#x> <http://www.w3.org/2013/TriGTests/trig-subm-01.trig#y> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-01.trig b/tests/TrigTests/trig-subm-01.trig
new file mode 100644
index 00000000..9a89c660
--- /dev/null
+++ b/tests/TrigTests/trig-subm-01.trig
@@ -0,0 +1,3 @@
+@prefix : <#> .
+{[] :x :y .}
+<http://example/graph> {[] :x :y .}
diff --git a/tests/TrigTests/trig-subm-02.nq b/tests/TrigTests/trig-subm-02.nq
new file mode 100644
index 00000000..299f1cd6
--- /dev/null
+++ b/tests/TrigTests/trig-subm-02.nq
@@ -0,0 +1,6 @@
+<http://example.org/base1#a> <http://example.org/base1#b> <http://example.org/base1#c> .
+<http://example.org/base2#a> <http://example.org/base2#b> <http://example.org/base2#c> .
+<http://example.org/base1#a> <http://example.org/base2#a> <http://example.org/base3#a> .
+<http://example.org/base1#a> <http://example.org/base1#b> <http://example.org/base1#c> <http://example/graph> .
+<http://example.org/base2#a> <http://example.org/base2#b> <http://example.org/base2#c> <http://example/graph> .
+<http://example.org/base1#a> <http://example.org/base2#a> <http://example.org/base3#a> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-02.trig b/tests/TrigTests/trig-subm-02.trig
new file mode 100644
index 00000000..c94a8039
--- /dev/null
+++ b/tests/TrigTests/trig-subm-02.trig
@@ -0,0 +1,16 @@
+# Test @prefix and qnames
+@prefix : <http://example.org/base1#> .
+@prefix a: <http://example.org/base2#> .
+@prefix b: <http://example.org/base3#> .
+
+{
+ :a :b :c .
+ a:a a:b a:c .
+ :a a:a b:a .
+}
+
+<http://example/graph> {
+ :a :b :c .
+ a:a a:b a:c .
+ :a a:a b:a .
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-subm-03.nq b/tests/TrigTests/trig-subm-03.nq
new file mode 100644
index 00000000..aeb54197
--- /dev/null
+++ b/tests/TrigTests/trig-subm-03.nq
@@ -0,0 +1,6 @@
+<http://example.org/base#a> <http://example.org/base#b> <http://example.org/base#c> .
+<http://example.org/base#a> <http://example.org/base#b> <http://example.org/base#d> .
+<http://example.org/base#a> <http://example.org/base#b> <http://example.org/base#e> .
+<http://example.org/base#a> <http://example.org/base#b> <http://example.org/base#c> <http://example/graph> .
+<http://example.org/base#a> <http://example.org/base#b> <http://example.org/base#d> <http://example/graph> .
+<http://example.org/base#a> <http://example.org/base#b> <http://example.org/base#e> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-03.trig b/tests/TrigTests/trig-subm-03.trig
new file mode 100644
index 00000000..b52f7c9a
--- /dev/null
+++ b/tests/TrigTests/trig-subm-03.trig
@@ -0,0 +1,14 @@
+# Test , operator
+@prefix : <http://example.org/base#> .
+
+{
+:a :b :c,
+ :d,
+ :e .
+}
+
+<http://example/graph> {
+:a :b :c,
+ :d,
+ :e .
+}
diff --git a/tests/TrigTests/trig-subm-04.nq b/tests/TrigTests/trig-subm-04.nq
new file mode 100644
index 00000000..acf2a1dd
--- /dev/null
+++ b/tests/TrigTests/trig-subm-04.nq
@@ -0,0 +1,6 @@
+<http://example.org/base#a> <http://example.org/base#b> <http://example.org/base#c> .
+<http://example.org/base#a> <http://example.org/base#d> <http://example.org/base#e> .
+<http://example.org/base#a> <http://example.org/base#f> <http://example.org/base#g> .
+<http://example.org/base#a> <http://example.org/base#b> <http://example.org/base#c> <http://example/graph> .
+<http://example.org/base#a> <http://example.org/base#d> <http://example.org/base#e> <http://example/graph> .
+<http://example.org/base#a> <http://example.org/base#f> <http://example.org/base#g> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-04.trig b/tests/TrigTests/trig-subm-04.trig
new file mode 100644
index 00000000..2f57b30b
--- /dev/null
+++ b/tests/TrigTests/trig-subm-04.trig
@@ -0,0 +1,14 @@
+# Test ; operator
+@prefix : <http://example.org/base#> .
+
+{
+:a :b :c ;
+ :d :e ;
+ :f :g .
+}
+
+<http://example/graph> {
+:a :b :c ;
+ :d :e ;
+ :f :g .
+}
diff --git a/tests/TrigTests/trig-subm-05.nq b/tests/TrigTests/trig-subm-05.nq
new file mode 100644
index 00000000..cf4eb939
--- /dev/null
+++ b/tests/TrigTests/trig-subm-05.nq
@@ -0,0 +1,4 @@
+_:b1 <http://example.org/base#a> <http://example.org/base#b> .
+<http://example.org/base#c> <http://example.org/base#d> _:b2 .
+_:b3 <http://example.org/base#a> <http://example.org/base#b> <http://example/graph> .
+<http://example.org/base#c> <http://example.org/base#d> _:b4 <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-05.trig b/tests/TrigTests/trig-subm-05.trig
new file mode 100644
index 00000000..8c202b99
--- /dev/null
+++ b/tests/TrigTests/trig-subm-05.trig
@@ -0,0 +1,12 @@
+# Test empty [] operator; not allowed as predicate
+@prefix : <http://example.org/base#> .
+
+{
+[] :a :b .
+:c :d [] .
+}
+
+<http://example/graph> {
+[] :a :b .
+:c :d [] .
+}
diff --git a/tests/TrigTests/trig-subm-06.nq b/tests/TrigTests/trig-subm-06.nq
new file mode 100644
index 00000000..4ede34b6
--- /dev/null
+++ b/tests/TrigTests/trig-subm-06.nq
@@ -0,0 +1,8 @@
+_:b1 <http://example.org/base#a> <http://example.org/base#b> .
+_:b1 <http://example.org/base#c> <http://example.org/base#d> .
+<http://example.org/base#e> <http://example.org/base#f> _:b2 .
+_:b2 <http://example.org/base#g> <http://example.org/base#h> .
+_:b3 <http://example.org/base#a> <http://example.org/base#b> <http://example/graph> .
+_:b3 <http://example.org/base#c> <http://example.org/base#d> <http://example/graph> .
+<http://example.org/base#e> <http://example.org/base#f> _:b4 <http://example/graph> .
+_:b4 <http://example.org/base#g> <http://example.org/base#h> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-06.trig b/tests/TrigTests/trig-subm-06.trig
new file mode 100644
index 00000000..280c48d5
--- /dev/null
+++ b/tests/TrigTests/trig-subm-06.trig
@@ -0,0 +1,12 @@
+# Test non empty [] operator; not allowed as predicate
+@prefix : <http://example.org/base#> .
+
+{
+[ :a :b ] :c :d .
+:e :f [ :g :h ] .
+}
+
+<http://example/graph> {
+[ :a :b ] :c :d .
+:e :f [ :g :h ] .
+}
diff --git a/tests/TrigTests/trig-subm-07.nq b/tests/TrigTests/trig-subm-07.nq
new file mode 100644
index 00000000..7c96d3ba
--- /dev/null
+++ b/tests/TrigTests/trig-subm-07.nq
@@ -0,0 +1,2 @@
+<http://example.org/base#a> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/base#b> .
+<http://example.org/base#a> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/base#b> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-07.trig b/tests/TrigTests/trig-subm-07.trig
new file mode 100644
index 00000000..b5e254af
--- /dev/null
+++ b/tests/TrigTests/trig-subm-07.trig
@@ -0,0 +1,4 @@
+# 'a' only allowed as a predicate
+@prefix : <http://example.org/base#> .
+{:a a :b .}
+<http://example/graph> {:a a :b .}
diff --git a/tests/TrigTests/trig-subm-08.nq b/tests/TrigTests/trig-subm-08.nq
new file mode 100644
index 00000000..fbb430bd
--- /dev/null
+++ b/tests/TrigTests/trig-subm-08.nq
@@ -0,0 +1,10 @@
+<http://example.org/stuff/1.0/a> <http://example.org/stuff/1.0/b> _:b1 .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "apple" .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b2 .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "banana" .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+<http://example.org/stuff/1.0/a> <http://example.org/stuff/1.0/b> _:b3 <http://example/graph> .
+_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "apple" <http://example/graph> .
+_:b3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:b4 <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "banana" <http://example/graph> .
+_:b4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-08.trig b/tests/TrigTests/trig-subm-08.trig
new file mode 100644
index 00000000..7e88c18c
--- /dev/null
+++ b/tests/TrigTests/trig-subm-08.trig
@@ -0,0 +1,4 @@
+@prefix : <http://example.org/stuff/1.0/> .
+{:a :b ( "apple" "banana" ) .}
+<http://example/graph> {:a :b ( "apple" "banana" ) .}
+
diff --git a/tests/TrigTests/trig-subm-09.nq b/tests/TrigTests/trig-subm-09.nq
new file mode 100644
index 00000000..7c2c83b8
--- /dev/null
+++ b/tests/TrigTests/trig-subm-09.nq
@@ -0,0 +1,2 @@
+<http://example.org/stuff/1.0/a> <http://example.org/stuff/1.0/b> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
+<http://example.org/stuff/1.0/a> <http://example.org/stuff/1.0/b> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-09.trig b/tests/TrigTests/trig-subm-09.trig
new file mode 100644
index 00000000..7cbd40a8
--- /dev/null
+++ b/tests/TrigTests/trig-subm-09.trig
@@ -0,0 +1,4 @@
+@prefix : <http://example.org/stuff/1.0/> .
+{:a :b ( ) .}
+<http://example/graph> {:a :b ( ) .}
+
diff --git a/tests/TrigTests/trig-subm-10.nq b/tests/TrigTests/trig-subm-10.nq
new file mode 100644
index 00000000..3a84a4c6
--- /dev/null
+++ b/tests/TrigTests/trig-subm-10.nq
@@ -0,0 +1,8 @@
+_:hasParent <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#ObjectProperty> .
+_:b1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Restriction> .
+_:b1 <http://www.w3.org/2002/07/owl#onProperty> _:hasParent .
+_:b1 <http://www.w3.org/2002/07/owl#maxCardinality> "2"^^<http://www.w3.org/2001/XMLSchema#integer> .
+_:hasParent <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#ObjectProperty> <http://example/graph> .
+_:b2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Restriction> <http://example/graph> .
+_:b2 <http://www.w3.org/2002/07/owl#onProperty> _:hasParent <http://example/graph> .
+_:b2 <http://www.w3.org/2002/07/owl#maxCardinality> "2"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-10.trig b/tests/TrigTests/trig-subm-10.trig
new file mode 100644
index 00000000..23bd02de
--- /dev/null
+++ b/tests/TrigTests/trig-subm-10.trig
@@ -0,0 +1,20 @@
+# Test integer datatyped literals using an OWL cardinality constraint
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+
+# based on examples in the OWL Reference
+
+{
+_:hasParent a owl:ObjectProperty .
+
+[] a owl:Restriction ;
+ owl:onProperty _:hasParent ;
+ owl:maxCardinality 2 .
+}
+
+<http://example/graph> {
+_:hasParent a owl:ObjectProperty .
+
+[] a owl:Restriction ;
+ owl:onProperty _:hasParent ;
+ owl:maxCardinality 2 .
+}
diff --git a/tests/TrigTests/trig-subm-11.nq b/tests/TrigTests/trig-subm-11.nq
new file mode 100644
index 00000000..76147a3a
--- /dev/null
+++ b/tests/TrigTests/trig-subm-11.nq
@@ -0,0 +1,10 @@
+<http://example.org/res1> <http://example.org/prop1> "000000"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://example.org/res2> <http://example.org/prop2> "0"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://example.org/res3> <http://example.org/prop3> "000001"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://example.org/res4> <http://example.org/prop4> "2"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://example.org/res5> <http://example.org/prop5> "4"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://example.org/res1> <http://example.org/prop1> "000000"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+<http://example.org/res2> <http://example.org/prop2> "0"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+<http://example.org/res3> <http://example.org/prop3> "000001"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+<http://example.org/res4> <http://example.org/prop4> "2"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+<http://example.org/res5> <http://example.org/prop5> "4"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-11.trig b/tests/TrigTests/trig-subm-11.trig
new file mode 100644
index 00000000..bb1c4991
--- /dev/null
+++ b/tests/TrigTests/trig-subm-11.trig
@@ -0,0 +1,15 @@
+{
+<http://example.org/res1> <http://example.org/prop1> 000000 .
+<http://example.org/res2> <http://example.org/prop2> 0 .
+<http://example.org/res3> <http://example.org/prop3> 000001 .
+<http://example.org/res4> <http://example.org/prop4> 2 .
+<http://example.org/res5> <http://example.org/prop5> 4 .
+}
+
+<http://example/graph> {
+<http://example.org/res1> <http://example.org/prop1> 000000 .
+<http://example.org/res2> <http://example.org/prop2> 0 .
+<http://example.org/res3> <http://example.org/prop3> 000001 .
+<http://example.org/res4> <http://example.org/prop4> 2 .
+<http://example.org/res5> <http://example.org/prop5> 4 .
+}
diff --git a/tests/TrigTests/trig-subm-12.nq b/tests/TrigTests/trig-subm-12.nq
new file mode 100644
index 00000000..32b15c50
--- /dev/null
+++ b/tests/TrigTests/trig-subm-12.nq
@@ -0,0 +1,8 @@
+<http://example.org/ex1#foo-bar> <http://example.org/ex1#foo_bar> "a" .
+<http://example.org/ex2#foo-bar> <http://example.org/ex2#foo_bar> "b" .
+<http://example.org/ex3#foo-bar> <http://example.org/ex3#foo_bar> "c" .
+<http://example.org/ex4#foo-bar> <http://example.org/ex4#foo_bar> "d" .
+<http://example.org/ex1#foo-bar> <http://example.org/ex1#foo_bar> "a" <http://example/graph> .
+<http://example.org/ex2#foo-bar> <http://example.org/ex2#foo_bar> "b" <http://example/graph> .
+<http://example.org/ex3#foo-bar> <http://example.org/ex3#foo_bar> "c" <http://example/graph> .
+<http://example.org/ex4#foo-bar> <http://example.org/ex4#foo_bar> "d" <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-12.trig b/tests/TrigTests/trig-subm-12.trig
new file mode 100644
index 00000000..b0f8ff83
--- /dev/null
+++ b/tests/TrigTests/trig-subm-12.trig
@@ -0,0 +1,19 @@
+# Tests for - and _ in names, qnames
+@prefix ex1: <http://example.org/ex1#> .
+@prefix ex-2: <http://example.org/ex2#> .
+@prefix ex3_: <http://example.org/ex3#> .
+@prefix ex4-: <http://example.org/ex4#> .
+
+{
+ex1:foo-bar ex1:foo_bar "a" .
+ex-2:foo-bar ex-2:foo_bar "b" .
+ex3_:foo-bar ex3_:foo_bar "c" .
+ex4-:foo-bar ex4-:foo_bar "d" .
+}
+
+<http://example/graph> {
+ex1:foo-bar ex1:foo_bar "a" .
+ex-2:foo-bar ex-2:foo_bar "b" .
+ex3_:foo-bar ex3_:foo_bar "c" .
+ex4-:foo-bar ex4-:foo_bar "d" .
+}
diff --git a/tests/TrigTests/trig-subm-13.nq b/tests/TrigTests/trig-subm-13.nq
new file mode 100644
index 00000000..84c2a2e5
--- /dev/null
+++ b/tests/TrigTests/trig-subm-13.nq
@@ -0,0 +1,8 @@
+<http://example.org/ex#foo> <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1> "1" .
+<http://example.org/ex#foo> <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2> "2" .
+<http://example.org/ex#foo> <http://example.org/myprop#_abc> "def" .
+<http://example.org/ex#foo> <http://example.org/myprop#_345> "678" .
+<http://example.org/ex#foo> <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1> "1" <http://example/graph> .
+<http://example.org/ex#foo> <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2> "2" <http://example/graph> .
+<http://example.org/ex#foo> <http://example.org/myprop#_abc> "def" <http://example/graph> .
+<http://example.org/ex#foo> <http://example.org/myprop#_345> "678" <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-13.trig b/tests/TrigTests/trig-subm-13.trig
new file mode 100644
index 00000000..8d1b44da
--- /dev/null
+++ b/tests/TrigTests/trig-subm-13.trig
@@ -0,0 +1,18 @@
+# Tests for rdf:_<numbers> and other qnames starting with _
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix ex: <http://example.org/ex#> .
+@prefix : <http://example.org/myprop#> .
+
+{
+ex:foo rdf:_1 "1" .
+ex:foo rdf:_2 "2" .
+ex:foo :_abc "def" .
+ex:foo :_345 "678" .
+}
+
+<http://example/graph> {
+ex:foo rdf:_1 "1" .
+ex:foo rdf:_2 "2" .
+ex:foo :_abc "def" .
+ex:foo :_345 "678" .
+}
diff --git a/tests/TrigTests/trig-subm-14.nq b/tests/TrigTests/trig-subm-14.nq
new file mode 100644
index 00000000..89f5b292
--- /dev/null
+++ b/tests/TrigTests/trig-subm-14.nq
@@ -0,0 +1,4 @@
+_:b1 <http://example.org/ron> _:b2 .
+<http://example.org/ron> <http://example.org/ron> <http://example.org/ron> .
+_:b3 <http://example.org/ron> _:b4 <http://example/graph> .
+<http://example.org/ron> <http://example.org/ron> <http://example.org/ron> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-14.trig b/tests/TrigTests/trig-subm-14.trig
new file mode 100644
index 00000000..c70300e1
--- /dev/null
+++ b/tests/TrigTests/trig-subm-14.trig
@@ -0,0 +1,16 @@
+# Test for : allowed
+@prefix : <http://example.org/ron> .
+
+{
+[] : [] .
+
+: : : .
+
+}
+
+<http://example/graph> {
+[] : [] .
+
+: : : .
+
+}
diff --git a/tests/TrigTests/trig-subm-15.nq b/tests/TrigTests/trig-subm-15.nq
new file mode 100644
index 00000000..8d01c44f
--- /dev/null
+++ b/tests/TrigTests/trig-subm-15.nq
@@ -0,0 +1,2 @@
+<http://example.org/ex#a> <http://example.org/ex#b> "a long\n\tliteral\nwith\nnewlines" .
+<http://example.org/ex#a> <http://example.org/ex#b> "a long\n\tliteral\nwith\nnewlines" <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-15.trig b/tests/TrigTests/trig-subm-15.trig
new file mode 100644
index 00000000..93fbc41a
--- /dev/null
+++ b/tests/TrigTests/trig-subm-15.trig
@@ -0,0 +1,16 @@
+# Test long literal
+@prefix : <http://example.org/ex#> .
+
+{
+:a :b """a long
+ literal
+with
+newlines""" .
+}
+
+<http://example/graph> {
+:a :b """a long
+ literal
+with
+newlines""" .
+}
diff --git a/tests/TrigTests/trig-subm-16.nq b/tests/TrigTests/trig-subm-16.nq
new file mode 100644
index 00000000..2e5fac4e
--- /dev/null
+++ b/tests/TrigTests/trig-subm-16.nq
@@ -0,0 +1,4 @@
+<http://example.org/foo#a> <http://example.org/foo#b> "\nthis \ris a \U00012451long\t\nliteral\uABCD\n" .
+<http://example.org/foo#d> <http://example.org/foo#e> "\tThis \uABCDis\r \U00012451another\n\none\n" .
+<http://example.org/foo#a> <http://example.org/foo#b> "\nthis \ris a \U00012451long\t\nliteral\uABCD\n" <http://example/graph> .
+<http://example.org/foo#d> <http://example.org/foo#e> "\tThis \uABCDis\r \U00012451another\n\none\n" <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-16.trig b/tests/TrigTests/trig-subm-16.trig
new file mode 100644
index 00000000..86cb22d5
--- /dev/null
+++ b/tests/TrigTests/trig-subm-16.trig
@@ -0,0 +1,43 @@
+@prefix : <http://example.org/foo#> .
+
+{
+## \U00015678 is a not a legal codepoint
+## :a :b """\nthis \ris a \U00015678long\t
+## literal\uABCD
+## """ .
+##
+## :d :e """\tThis \uABCDis\r \U00015678another\n
+## one
+## """ .
+
+# \U00015678 is a not a legal codepoint
+# \U00012451 in Cuneiform numeric ban 3
+:a :b """\nthis \ris a \U00012451long\t
+literal\uABCD
+""" .
+
+:d :e """\tThis \uABCDis\r \U00012451another\n
+one
+""" .
+}
+
+<http://example/graph> {
+## \U00015678 is a not a legal codepoint
+## :a :b """\nthis \ris a \U00015678long\t
+## literal\uABCD
+## """ .
+##
+## :d :e """\tThis \uABCDis\r \U00015678another\n
+## one
+## """ .
+
+# \U00015678 is a not a legal codepoint
+# \U00012451 in Cuneiform numeric ban 3
+:a :b """\nthis \ris a \U00012451long\t
+literal\uABCD
+""" .
+
+:d :e """\tThis \uABCDis\r \U00012451another\n
+one
+""" .
+}
diff --git a/tests/TrigTests/trig-subm-17.nq b/tests/TrigTests/trig-subm-17.nq
new file mode 100644
index 00000000..7c5d273f
--- /dev/null
+++ b/tests/TrigTests/trig-subm-17.nq
@@ -0,0 +1,2 @@
+<http://example.org/#a> <http://example.org/#b> "1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/#a> <http://example.org/#b> "1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-17.trig b/tests/TrigTests/trig-subm-17.trig
new file mode 100644
index 00000000..345ca231
--- /dev/null
+++ b/tests/TrigTests/trig-subm-17.trig
@@ -0,0 +1,5 @@
+@prefix : <http://example.org/#> .
+
+{:a :b 1.0 .}
+<http://example/graph> {:a :b 1.0 .}
+
diff --git a/tests/TrigTests/trig-subm-18.nq b/tests/TrigTests/trig-subm-18.nq
new file mode 100644
index 00000000..58b0a4c4
--- /dev/null
+++ b/tests/TrigTests/trig-subm-18.nq
@@ -0,0 +1,4 @@
+<http://example.org/#a> <http://example.org/#b> "" .
+<http://example.org/#c> <http://example.org/#d> "" .
+<http://example.org/#a> <http://example.org/#b> "" <http://example/graph> .
+<http://example.org/#c> <http://example.org/#d> "" <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-18.trig b/tests/TrigTests/trig-subm-18.trig
new file mode 100644
index 00000000..f5b4a516
--- /dev/null
+++ b/tests/TrigTests/trig-subm-18.trig
@@ -0,0 +1,15 @@
+@prefix : <http://example.org/#> .
+
+{
+:a :b "" .
+
+:c :d """""" .
+
+}
+
+<http://example/graph> {
+:a :b "" .
+
+:c :d """""" .
+
+}
diff --git a/tests/TrigTests/trig-subm-19.nq b/tests/TrigTests/trig-subm-19.nq
new file mode 100644
index 00000000..b3cf8075
--- /dev/null
+++ b/tests/TrigTests/trig-subm-19.nq
@@ -0,0 +1,6 @@
+<http://example.org#a> <http://example.org#b> "1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org#c> <http://example.org#d> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://example.org#e> <http://example.org#f> "1.0e0"^^<http://www.w3.org/2001/XMLSchema#double> .
+<http://example.org#a> <http://example.org#b> "1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> <http://example/graph> .
+<http://example.org#c> <http://example.org#d> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+<http://example.org#e> <http://example.org#f> "1.0e0"^^<http://www.w3.org/2001/XMLSchema#double> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-19.trig b/tests/TrigTests/trig-subm-19.trig
new file mode 100644
index 00000000..7cd14eee
--- /dev/null
+++ b/tests/TrigTests/trig-subm-19.trig
@@ -0,0 +1,13 @@
+@prefix : <http://example.org#> .
+
+{
+:a :b 1.0 .
+:c :d 1 .
+:e :f 1.0e0 .
+}
+
+<http://example/graph> {
+:a :b 1.0 .
+:c :d 1 .
+:e :f 1.0e0 .
+}
diff --git a/tests/TrigTests/trig-subm-20.nq b/tests/TrigTests/trig-subm-20.nq
new file mode 100644
index 00000000..46f48c74
--- /dev/null
+++ b/tests/TrigTests/trig-subm-20.nq
@@ -0,0 +1,6 @@
+<http://example.org#a> <http://example.org#b> "-1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org#c> <http://example.org#d> "-1"^^<http://www.w3.org/2001/XMLSchema#integer> .
+<http://example.org#e> <http://example.org#f> "-1.0e0"^^<http://www.w3.org/2001/XMLSchema#double> .
+<http://example.org#a> <http://example.org#b> "-1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> <http://example/graph> .
+<http://example.org#c> <http://example.org#d> "-1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
+<http://example.org#e> <http://example.org#f> "-1.0e0"^^<http://www.w3.org/2001/XMLSchema#double> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-20.trig b/tests/TrigTests/trig-subm-20.trig
new file mode 100644
index 00000000..6e3032e5
--- /dev/null
+++ b/tests/TrigTests/trig-subm-20.trig
@@ -0,0 +1,13 @@
+@prefix : <http://example.org#> .
+
+{
+:a :b -1.0 .
+:c :d -1 .
+:e :f -1.0e0 .
+}
+
+<http://example/graph> {
+:a :b -1.0 .
+:c :d -1 .
+:e :f -1.0e0 .
+}
diff --git a/tests/TrigTests/trig-subm-21.nq b/tests/TrigTests/trig-subm-21.nq
new file mode 100644
index 00000000..90aec6da
--- /dev/null
+++ b/tests/TrigTests/trig-subm-21.nq
@@ -0,0 +1,2 @@
+<http://example.org/ex#a> <http://example.org/ex#b> "John said: \"Hello World!\"" .
+<http://example.org/ex#a> <http://example.org/ex#b> "John said: \"Hello World!\"" <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-21.trig b/tests/TrigTests/trig-subm-21.trig
new file mode 100644
index 00000000..05870fbd
--- /dev/null
+++ b/tests/TrigTests/trig-subm-21.trig
@@ -0,0 +1,4 @@
+# Test long literal
+@prefix : <http://example.org/ex#> .
+{:a :b """John said: "Hello World!\"""" .}
+<http://example/graph> {:a :b """John said: "Hello World!\"""" .}
diff --git a/tests/TrigTests/trig-subm-22.nq b/tests/TrigTests/trig-subm-22.nq
new file mode 100644
index 00000000..01ab3571
--- /dev/null
+++ b/tests/TrigTests/trig-subm-22.nq
@@ -0,0 +1,4 @@
+<http://example.org#a> <http://example.org#b> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> .
+<http://example.org#c> <http://example.org#d> "false"^^<http://www.w3.org/2001/XMLSchema#boolean> .
+<http://example.org#a> <http://example.org#b> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> <http://example/graph> .
+<http://example.org#c> <http://example.org#d> "false"^^<http://www.w3.org/2001/XMLSchema#boolean> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-22.trig b/tests/TrigTests/trig-subm-22.trig
new file mode 100644
index 00000000..2b546609
--- /dev/null
+++ b/tests/TrigTests/trig-subm-22.trig
@@ -0,0 +1,11 @@
+@prefix : <http://example.org#> .
+
+{
+:a :b true .
+:c :d false .
+}
+
+<http://example/graph> {
+:a :b true .
+:c :d false .
+}
diff --git a/tests/TrigTests/trig-subm-23.nq b/tests/TrigTests/trig-subm-23.nq
new file mode 100644
index 00000000..11328c97
--- /dev/null
+++ b/tests/TrigTests/trig-subm-23.nq
@@ -0,0 +1,14 @@
+<http://example.org/#a> <http://example.org/#b> <http://example.org/#c> .
+<http://example.org/#d> <http://example.org/#e> <http://example.org/#f> .
+<http://example.org/#g> <http://example.org/#h> <http://example.org/#i> .
+<http://example.org/#g> <http://example.org/#h> <http://example.org/#j> .
+<http://example.org/#k> <http://example.org/#l> <http://example.org/#m> .
+<http://example.org/#k> <http://example.org/#n> <http://example.org/#o> .
+<http://example.org/#k> <http://example.org/#p> <http://example.org/#q> .
+<http://example.org/#a> <http://example.org/#b> <http://example.org/#c> <http://example/graph> .
+<http://example.org/#d> <http://example.org/#e> <http://example.org/#f> <http://example/graph> .
+<http://example.org/#g> <http://example.org/#h> <http://example.org/#i> <http://example/graph> .
+<http://example.org/#g> <http://example.org/#h> <http://example.org/#j> <http://example/graph> .
+<http://example.org/#k> <http://example.org/#l> <http://example.org/#m> <http://example/graph> .
+<http://example.org/#k> <http://example.org/#n> <http://example.org/#o> <http://example/graph> .
+<http://example.org/#k> <http://example.org/#p> <http://example.org/#q> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-23.trig b/tests/TrigTests/trig-subm-23.trig
new file mode 100644
index 00000000..3cb24f50
--- /dev/null
+++ b/tests/TrigTests/trig-subm-23.trig
@@ -0,0 +1,32 @@
+# comment test
+@prefix : <http://example.org/#> .
+
+{
+:a :b :c . # end of line comment
+:d # ignore me
+ :e # and me
+ :f # and me
+ .
+:g :h #ignore me
+ :i, # and me
+ :j . # and me
+
+:k :l :m ; #ignore me
+ :n :o ; # and me
+ :p :q . # and me
+}
+
+<http://example/graph> {
+:a :b :c . # end of line comment
+:d # ignore me
+ :e # and me
+ :f # and me
+ .
+:g :h #ignore me
+ :i, # and me
+ :j . # and me
+
+:k :l :m ; #ignore me
+ :n :o ; # and me
+ :p :q . # and me
+}
diff --git a/tests/TrigTests/trig-subm-24.nq b/tests/TrigTests/trig-subm-24.nq
new file mode 100644
index 00000000..9de4a324
--- /dev/null
+++ b/tests/TrigTests/trig-subm-24.nq
@@ -0,0 +1,2 @@
+<http://example.org/#a> <http://example.org/#b> <http://example.org/#c> .
+<http://example.org/#a> <http://example.org/#b> <http://example.org/#c> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-24.trig b/tests/TrigTests/trig-subm-24.trig
new file mode 100644
index 00000000..22ae97ca
--- /dev/null
+++ b/tests/TrigTests/trig-subm-24.trig
@@ -0,0 +1,5 @@
+# comment line with no final newline test
+@prefix : <http://example.org/#> .
+{:a :b :c .}
+<http://example/graph> {:a :b :c .}
+#foo
diff --git a/tests/TrigTests/trig-subm-25.nq b/tests/TrigTests/trig-subm-25.nq
new file mode 100644
index 00000000..bcb4647a
--- /dev/null
+++ b/tests/TrigTests/trig-subm-25.nq
@@ -0,0 +1,2 @@
+<http://example.org/bar#blah> <http://example.org/bar#blah> <http://example.org/bar#blah> .
+<http://example.org/bar#blah> <http://example.org/bar#blah> <http://example.org/bar#blah> <http://example/graph> .
diff --git a/tests/TrigTests/trig-subm-25.trig b/tests/TrigTests/trig-subm-25.trig
new file mode 100644
index 00000000..7c3b9f2a
--- /dev/null
+++ b/tests/TrigTests/trig-subm-25.trig
@@ -0,0 +1,5 @@
+@prefix foo: <http://example.org/foo#> .
+@prefix foo: <http://example.org/bar#> .
+
+{foo:blah foo:blah foo:blah .}
+<http://example/graph> {foo:blah foo:blah foo:blah .}
diff --git a/tests/TrigTests/trig-subm-26.nq b/tests/TrigTests/trig-subm-26.nq
new file mode 100644
index 00000000..7357dd40
--- /dev/null
+++ b/tests/TrigTests/trig-subm-26.nq
@@ -0,0 +1,22 @@
+<http://example.org/foo> <http://example.org/bar> "2.345"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1."^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1.000000000"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.3"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1.2345678901234567890123457890"^^<http://www.w3.org/2001/XMLSchema#decimal> .
diff --git a/tests/TrigTests/trig-subm-26.trig b/tests/TrigTests/trig-subm-26.trig
new file mode 100644
index 00000000..c590800f
--- /dev/null
+++ b/tests/TrigTests/trig-subm-26.trig
@@ -0,0 +1,24 @@
+{
+<http://example.org/foo> <http://example.org/bar> "2.345"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1.0"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1."^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1.000000000"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.3"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.234000000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.2340000000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "2.23400000000000000000005"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+<http://example.org/foo> <http://example.org/bar> "1.2345678901234567890123457890"^^<http://www.w3.org/2001/XMLSchema#decimal> .
+}
diff --git a/tests/TrigTests/trig-subm-27.nq b/tests/TrigTests/trig-subm-27.nq
new file mode 100644
index 00000000..95e9abbc
--- /dev/null
+++ b/tests/TrigTests/trig-subm-27.nq
@@ -0,0 +1,5 @@
+<http://www.w3.org/2013/TriGTests/a1> <http://www.w3.org/2013/TriGTests/b1> <http://www.w3.org/2013/TriGTests/c1> .
+<http://example.org/ns/a2> <http://example.org/ns/b2> <http://example.org/ns/c2> .
+<http://example.org/ns/foo/a3> <http://example.org/ns/foo/b3> <http://example.org/ns/foo/c3> .
+<http://example.org/ns/foo/bar#a4> <http://example.org/ns/foo/bar#b4> <http://example.org/ns/foo/bar#c4> .
+<http://example.org/ns2#a5> <http://example.org/ns2#b5> <http://example.org/ns2#c5> .
diff --git a/tests/TrigTests/trig-subm-27.trig b/tests/TrigTests/trig-subm-27.trig
new file mode 100644
index 00000000..4bb98b8f
--- /dev/null
+++ b/tests/TrigTests/trig-subm-27.trig
@@ -0,0 +1,12 @@
+# In-scope base URI is <http://www.w3.org/2013/TriGTests/trig-subm-27.trig> at this point
+{<a1> <b1> <c1> .}
+@base <http://example.org/ns/> .
+# In-scope base URI is http://example.org/ns/ at this point
+{<a2> <http://example.org/ns/b2> <c2> .}
+@base <foo/> .
+# In-scope base URI is http://example.org/ns/foo/ at this point
+{<a3> <b3> <c3> .}
+@prefix : <bar#> .
+{:a4 :b4 :c4 .}
+@prefix : <http://example.org/ns2#> .
+{:a5 :b5 :c5 .}
diff --git a/tests/TrigTests/trig-syntax-bad-LITERAL2_with_langtag_and_datatype.trig b/tests/TrigTests/trig-syntax-bad-LITERAL2_with_langtag_and_datatype.trig
new file mode 100644
index 00000000..7748dd1e
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-LITERAL2_with_langtag_and_datatype.trig
@@ -0,0 +1 @@
+{<http://example.org/resource> <http://example.org#pred> "value"@en^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .}
diff --git a/tests/TrigTests/trig-syntax-bad-base-01.trig b/tests/TrigTests/trig-syntax-bad-base-01.trig
new file mode 100644
index 00000000..7b0412f8
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-base-01.trig
@@ -0,0 +1,2 @@
+# @base without URI.
+@base .
diff --git a/tests/TrigTests/trig-syntax-bad-base-02.trig b/tests/TrigTests/trig-syntax-bad-base-02.trig
new file mode 100644
index 00000000..1b2e4845
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-base-02.trig
@@ -0,0 +1,2 @@
+# @base in wrong case.
+@BASE <http://example/> .
diff --git a/tests/TrigTests/trig-syntax-bad-base-03.trig b/tests/TrigTests/trig-syntax-bad-base-03.trig
new file mode 100644
index 00000000..b8f587fa
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-base-03.trig
@@ -0,0 +1,3 @@
+# FULL STOP used after SPARQL BASE
+BASE <http://example/> .
+{<s> <p> <o> .}
diff --git a/tests/TrigTests/trig-syntax-bad-base-04.trig b/tests/TrigTests/trig-syntax-bad-base-04.trig
new file mode 100644
index 00000000..83c5789b
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-base-04.trig
@@ -0,0 +1,4 @@
+# @base inside graph
+{
+ @base <http://example/> .
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-syntax-bad-base-05.trig b/tests/TrigTests/trig-syntax-bad-base-05.trig
new file mode 100644
index 00000000..fa915d53
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-base-05.trig
@@ -0,0 +1,4 @@
+# BASE inside graph
+{
+ BASE <http://example/>
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-syntax-bad-blank-label-dot-end.trig b/tests/TrigTests/trig-syntax-bad-blank-label-dot-end.trig
new file mode 100644
index 00000000..33d5edf2
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-blank-label-dot-end.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{_:b1. :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bad-esc-01.trig b/tests/TrigTests/trig-syntax-bad-esc-01.trig
new file mode 100644
index 00000000..abe7fde0
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-esc-01.trig
@@ -0,0 +1,2 @@
+# Bad string escape
+{<http://example/s> <http://example/p> "a\zb" .}
diff --git a/tests/TrigTests/trig-syntax-bad-esc-02.trig b/tests/TrigTests/trig-syntax-bad-esc-02.trig
new file mode 100644
index 00000000..80f18c81
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-esc-02.trig
@@ -0,0 +1,2 @@
+# Bad string escape
+{<http://example/s> <http://example/p> "\uWXYZ" .}
diff --git a/tests/TrigTests/trig-syntax-bad-esc-03.trig b/tests/TrigTests/trig-syntax-bad-esc-03.trig
new file mode 100644
index 00000000..b45f7044
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-esc-03.trig
@@ -0,0 +1,2 @@
+# Bad string escape
+{<http://example/s> <http://example/p> "\U0000WXYZ" .}
diff --git a/tests/TrigTests/trig-syntax-bad-esc-04.trig b/tests/TrigTests/trig-syntax-bad-esc-04.trig
new file mode 100644
index 00000000..b45f7044
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-esc-04.trig
@@ -0,0 +1,2 @@
+# Bad string escape
+{<http://example/s> <http://example/p> "\U0000WXYZ" .}
diff --git a/tests/TrigTests/trig-syntax-bad-kw-01.trig b/tests/TrigTests/trig-syntax-bad-kw-01.trig
new file mode 100644
index 00000000..75753b2d
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-kw-01.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s A :C .}
diff --git a/tests/TrigTests/trig-syntax-bad-kw-02.trig b/tests/TrigTests/trig-syntax-bad-kw-02.trig
new file mode 100644
index 00000000..036179dd
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-kw-02.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{a :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bad-kw-03.trig b/tests/TrigTests/trig-syntax-bad-kw-03.trig
new file mode 100644
index 00000000..84f456e5
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-kw-03.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p a .}
diff --git a/tests/TrigTests/trig-syntax-bad-kw-04.trig b/tests/TrigTests/trig-syntax-bad-kw-04.trig
new file mode 100644
index 00000000..28d864c4
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-kw-04.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{true :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bad-kw-05.trig b/tests/TrigTests/trig-syntax-bad-kw-05.trig
new file mode 100644
index 00000000..c12694bf
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-kw-05.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s true :o .}
diff --git a/tests/TrigTests/trig-syntax-bad-lang-01.trig b/tests/TrigTests/trig-syntax-bad-lang-01.trig
new file mode 100644
index 00000000..a2032634
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-lang-01.trig
@@ -0,0 +1,2 @@
+# Bad lang tag
+{<http://example/s> <http://example/p> "string"@1 .}
diff --git a/tests/TrigTests/trig-syntax-bad-list-01.trig b/tests/TrigTests/trig-syntax-bad-list-01.trig
new file mode 100644
index 00000000..15d82710
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-list-01.trig
@@ -0,0 +1,2 @@
+# RDF collection without predicate-object-list
+( 1 2 3 ) .
diff --git a/tests/TrigTests/trig-syntax-bad-list-02.trig b/tests/TrigTests/trig-syntax-bad-list-02.trig
new file mode 100644
index 00000000..15d82710
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-list-02.trig
@@ -0,0 +1,2 @@
+# RDF collection without predicate-object-list
+( 1 2 3 ) .
diff --git a/tests/TrigTests/trig-syntax-bad-list-03.trig b/tests/TrigTests/trig-syntax-bad-list-03.trig
new file mode 100644
index 00000000..6b5269dd
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-list-03.trig
@@ -0,0 +1,3 @@
+# RDF collection without predicate-object-list
+{ ( 1 2 3 ) }
+
diff --git a/tests/TrigTests/trig-syntax-bad-list-04.trig b/tests/TrigTests/trig-syntax-bad-list-04.trig
new file mode 100644
index 00000000..377846a9
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-list-04.trig
@@ -0,0 +1,3 @@
+# RDF collection without predicate-object-list
+{ ( ) }
+
diff --git a/tests/TrigTests/trig-syntax-bad-ln-dash-start.trig b/tests/TrigTests/trig-syntax-bad-ln-dash-start.trig
new file mode 100644
index 00000000..48f78eed
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-ln-dash-start.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p :-o .}
diff --git a/tests/TrigTests/trig-syntax-bad-ln-escape-start.trig b/tests/TrigTests/trig-syntax-bad-ln-escape-start.trig
new file mode 100644
index 00000000..d3e71e4e
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-ln-escape-start.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p :%2o .}
diff --git a/tests/TrigTests/trig-syntax-bad-ln-escape.trig b/tests/TrigTests/trig-syntax-bad-ln-escape.trig
new file mode 100644
index 00000000..dcdd0592
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-ln-escape.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p :o%2 .}
diff --git a/tests/TrigTests/trig-syntax-bad-missing-ns-dot-end.trig b/tests/TrigTests/trig-syntax-bad-missing-ns-dot-end.trig
new file mode 100644
index 00000000..7fe09943
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-missing-ns-dot-end.trig
@@ -0,0 +1 @@
+{valid:s valid:p invalid.:o .}
diff --git a/tests/TrigTests/trig-syntax-bad-missing-ns-dot-start.trig b/tests/TrigTests/trig-syntax-bad-missing-ns-dot-start.trig
new file mode 100644
index 00000000..3ae9b6bb
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-missing-ns-dot-start.trig
@@ -0,0 +1 @@
+{.undefined:s .undefined:p .undefined:o .}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-01.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-01.trig
new file mode 100644
index 00000000..9dbf21e2
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-01.trig
@@ -0,0 +1,5 @@
+# {} formulae not in Turtle
+@prefix : <http://example/> .
+
+{ :a :q :c . } :p :z .
+
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-02.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-02.trig
new file mode 100644
index 00000000..8edf2c2b
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-02.trig
@@ -0,0 +1,4 @@
+# = is not Turtle
+@prefix : <http://example/> .
+
+{:a = :b .}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-03.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-03.trig
new file mode 100644
index 00000000..bb21bf08
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-03.trig
@@ -0,0 +1,9 @@
+# N3 paths
+@prefix : <http://example/> .
+@prefix ns: <http://example/p#> .
+
+{
+:x.
+ ns:p.
+ ns:q :p :z .
+}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-04.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-04.trig
new file mode 100644
index 00000000..adee6b55
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-04.trig
@@ -0,0 +1,5 @@
+# N3 paths
+@prefix : <http://example/> .
+@prefix ns: <http://example/p#> .
+
+{:x^ns:p :p :z .}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-05.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-05.trig
new file mode 100644
index 00000000..2fbf0840
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-05.trig
@@ -0,0 +1,4 @@
+# N3 is...of
+@prefix : <http://example/> .
+
+{:z is :p of :x .}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-06.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-06.trig
new file mode 100644
index 00000000..d1945544
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-06.trig
@@ -0,0 +1,4 @@
+# = is not Turtle
+@prefix : <http://example/> .
+
+{:a.:b.:c .}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-07.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-07.trig
new file mode 100644
index 00000000..ece79325
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-07.trig
@@ -0,0 +1,3 @@
+# @keywords is not Turtle
+@keywords a .
+{x a Item .}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-08.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-08.trig
new file mode 100644
index 00000000..ece79325
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-08.trig
@@ -0,0 +1,3 @@
+# @keywords is not Turtle
+@keywords a .
+{x a Item .}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-09.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-09.trig
new file mode 100644
index 00000000..cc70bc12
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-09.trig
@@ -0,0 +1,3 @@
+# => is not Turtle
+@prefix : <http://example/> .
+{:s => :o .}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-10.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-10.trig
new file mode 100644
index 00000000..7470dda3
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-10.trig
@@ -0,0 +1,3 @@
+# <= is not Turtle
+@prefix : <http://example/> .
+{:s <= :o .}
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-11.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-11.trig
new file mode 100644
index 00000000..dabadf02
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-11.trig
@@ -0,0 +1,3 @@
+# @forSome is not Turtle
+@prefix : <http://example/> .
+@forSome :x .
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-12.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-12.trig
new file mode 100644
index 00000000..5a6c3562
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-12.trig
@@ -0,0 +1,3 @@
+# @forAll is not Turtle
+@prefix : <http://example/> .
+@forAll :x .
diff --git a/tests/TrigTests/trig-syntax-bad-n3-extras-13.trig b/tests/TrigTests/trig-syntax-bad-n3-extras-13.trig
new file mode 100644
index 00000000..c4fe67a0
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-n3-extras-13.trig
@@ -0,0 +1,3 @@
+# @keywords is not Turtle
+@keywords .
+{x @a Item .}
diff --git a/tests/TrigTests/trig-syntax-bad-ns-dot-end.trig b/tests/TrigTests/trig-syntax-bad-ns-dot-end.trig
new file mode 100644
index 00000000..d2b53225
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-ns-dot-end.trig
@@ -0,0 +1,2 @@
+@prefix eg. : <http://example/> .
+{eg.:s eg.:p eg.:o .}
diff --git a/tests/TrigTests/trig-syntax-bad-ns-dot-start.trig b/tests/TrigTests/trig-syntax-bad-ns-dot-start.trig
new file mode 100644
index 00000000..9cebce12
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-ns-dot-start.trig
@@ -0,0 +1,2 @@
+@prefix .eg : <http://example/> .
+{.eg:s .eg:p .eg:o .}
diff --git a/tests/TrigTests/trig-syntax-bad-num-01.trig b/tests/TrigTests/trig-syntax-bad-num-01.trig
new file mode 100644
index 00000000..87fa61d4
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-num-01.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> 123.abc .}
diff --git a/tests/TrigTests/trig-syntax-bad-num-02.trig b/tests/TrigTests/trig-syntax-bad-num-02.trig
new file mode 100644
index 00000000..4e257b08
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-num-02.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> 123e .}
diff --git a/tests/TrigTests/trig-syntax-bad-num-03.trig b/tests/TrigTests/trig-syntax-bad-num-03.trig
new file mode 100644
index 00000000..72414507
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-num-03.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> 123abc .}
diff --git a/tests/TrigTests/trig-syntax-bad-num-04.trig b/tests/TrigTests/trig-syntax-bad-num-04.trig
new file mode 100644
index 00000000..c5828732
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-num-04.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> 0x123 .}
diff --git a/tests/TrigTests/trig-syntax-bad-num-05.trig b/tests/TrigTests/trig-syntax-bad-num-05.trig
new file mode 100644
index 00000000..7de52461
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-num-05.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> +-1 .}
diff --git a/tests/TrigTests/trig-syntax-bad-number-dot-in-anon.trig b/tests/TrigTests/trig-syntax-bad-number-dot-in-anon.trig
new file mode 100644
index 00000000..3c4b8e45
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-number-dot-in-anon.trig
@@ -0,0 +1,8 @@
+@prefix : <http://example/> .
+
+{
+:s
+ :p [
+ :p1 27.
+ ] .
+}
diff --git a/tests/TrigTests/trig-syntax-bad-pname-01.trig b/tests/TrigTests/trig-syntax-bad-pname-01.trig
new file mode 100644
index 00000000..a03be7af
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-pname-01.trig
@@ -0,0 +1,3 @@
+# ~ must be escaped.
+@prefix : <http://example/> .
+{:a~b :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bad-pname-02.trig b/tests/TrigTests/trig-syntax-bad-pname-02.trig
new file mode 100644
index 00000000..39d14ee4
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-pname-02.trig
@@ -0,0 +1,3 @@
+# Bad %-sequence
+@prefix : <http://example/> .
+{:a%2 :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bad-pname-03.trig b/tests/TrigTests/trig-syntax-bad-pname-03.trig
new file mode 100644
index 00000000..5ed44f65
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-pname-03.trig
@@ -0,0 +1,3 @@
+# No \u (x39 is "9")
+@prefix : <http://example/> .
+{:a\u0039 :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bad-prefix-01.trig b/tests/TrigTests/trig-syntax-bad-prefix-01.trig
new file mode 100644
index 00000000..32d781d1
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-prefix-01.trig
@@ -0,0 +1,2 @@
+# No prefix
+{:s <http://example/p> "x" .}
diff --git a/tests/TrigTests/trig-syntax-bad-prefix-02.trig b/tests/TrigTests/trig-syntax-bad-prefix-02.trig
new file mode 100644
index 00000000..6d03cf5f
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-prefix-02.trig
@@ -0,0 +1,3 @@
+# No prefix
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+{<http://example/s> rdf:type :C .}
diff --git a/tests/TrigTests/trig-syntax-bad-prefix-03.trig b/tests/TrigTests/trig-syntax-bad-prefix-03.trig
new file mode 100644
index 00000000..1ab01e7b
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-prefix-03.trig
@@ -0,0 +1,2 @@
+# @prefix without URI.
+@prefix ex: .
diff --git a/tests/TrigTests/trig-syntax-bad-prefix-04.trig b/tests/TrigTests/trig-syntax-bad-prefix-04.trig
new file mode 100644
index 00000000..dbbda05b
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-prefix-04.trig
@@ -0,0 +1,2 @@
+# @prefix without prefix name .
+@prefix <http://example/> .
diff --git a/tests/TrigTests/trig-syntax-bad-prefix-05.trig b/tests/TrigTests/trig-syntax-bad-prefix-05.trig
new file mode 100644
index 00000000..6d145e07
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-prefix-05.trig
@@ -0,0 +1,2 @@
+# @prefix without :
+@prefix x <http://example/> .
diff --git a/tests/TrigTests/trig-syntax-bad-prefix-06.trig b/tests/TrigTests/trig-syntax-bad-prefix-06.trig
new file mode 100644
index 00000000..52939065
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-prefix-06.trig
@@ -0,0 +1,4 @@
+# @prefix inside graph
+{
+ @prefix ex: <http://example/> .
+}
diff --git a/tests/TrigTests/trig-syntax-bad-prefix-07.trig b/tests/TrigTests/trig-syntax-bad-prefix-07.trig
new file mode 100644
index 00000000..1230063a
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-prefix-07.trig
@@ -0,0 +1,4 @@
+# PREFIX inside graph
+{
+ PREFIX ex: <http://example/>
+}
diff --git a/tests/TrigTests/trig-syntax-bad-string-01.trig b/tests/TrigTests/trig-syntax-bad-string-01.trig
new file mode 100644
index 00000000..9decfb3c
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-string-01.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p "abc' .}
diff --git a/tests/TrigTests/trig-syntax-bad-string-02.trig b/tests/TrigTests/trig-syntax-bad-string-02.trig
new file mode 100644
index 00000000..95537104
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-string-02.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p 'abc" .}
diff --git a/tests/TrigTests/trig-syntax-bad-string-03.trig b/tests/TrigTests/trig-syntax-bad-string-03.trig
new file mode 100644
index 00000000..b60d18b8
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-string-03.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p '''abc' .}
diff --git a/tests/TrigTests/trig-syntax-bad-string-04.trig b/tests/TrigTests/trig-syntax-bad-string-04.trig
new file mode 100644
index 00000000..06173937
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-string-04.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p """abc''' .}
diff --git a/tests/TrigTests/trig-syntax-bad-string-05.trig b/tests/TrigTests/trig-syntax-bad-string-05.trig
new file mode 100644
index 00000000..52e3fed4
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-string-05.trig
@@ -0,0 +1,6 @@
+# Long literal with missing end
+@prefix : <http://example/> .
+{
+:s :p """abc
+def
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-syntax-bad-string-06.trig b/tests/TrigTests/trig-syntax-bad-string-06.trig
new file mode 100644
index 00000000..e4c9d936
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-string-06.trig
@@ -0,0 +1,3 @@
+# Long literal with 4"
+@prefix : <http://example/> .
+{:s :p """abc""""@en .}
diff --git a/tests/TrigTests/trig-syntax-bad-string-07.trig b/tests/TrigTests/trig-syntax-bad-string-07.trig
new file mode 100644
index 00000000..de68cb4a
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-string-07.trig
@@ -0,0 +1,3 @@
+# Long literal with 4'
+@prefix : <http://example/> .
+{:s :p '''abc''''@en .}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-02.trig b/tests/TrigTests/trig-syntax-bad-struct-02.trig
new file mode 100644
index 00000000..1f38c451
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-02.trig
@@ -0,0 +1,2 @@
+# TriG is not N3
+<http://example/s> = <http://example/o> .
diff --git a/tests/TrigTests/trig-syntax-bad-struct-03.trig b/tests/TrigTests/trig-syntax-bad-struct-03.trig
new file mode 100644
index 00000000..b7e97b81
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-03.trig
@@ -0,0 +1,2 @@
+# TriG is not NQuads
+<http://example/s> <http://example/p> <http://example/o> <http://example/graph> .
diff --git a/tests/TrigTests/trig-syntax-bad-struct-04.trig b/tests/TrigTests/trig-syntax-bad-struct-04.trig
new file mode 100644
index 00000000..319d1067
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-04.trig
@@ -0,0 +1,2 @@
+# TriG does not allow literals-as-subjects
+{"hello" <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-05.trig b/tests/TrigTests/trig-syntax-bad-struct-05.trig
new file mode 100644
index 00000000..317b6326
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-05.trig
@@ -0,0 +1,2 @@
+# TriG does not allow literals-as-predicates
+{<http://example/s> "hello" <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-06.trig b/tests/TrigTests/trig-syntax-bad-struct-06.trig
new file mode 100644
index 00000000..8e6e7202
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-06.trig
@@ -0,0 +1,2 @@
+# TriG does not allow bnodes-as-predicates
+{<http://example/s> [] <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-07.trig b/tests/TrigTests/trig-syntax-bad-struct-07.trig
new file mode 100644
index 00000000..91152ba3
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-07.trig
@@ -0,0 +1,2 @@
+# TriG does not allow bnodes-as-predicates
+{<http://example/s> _:p <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-09.trig b/tests/TrigTests/trig-syntax-bad-struct-09.trig
new file mode 100644
index 00000000..abc20261
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-09.trig
@@ -0,0 +1,2 @@
+# Too many DOTs
+{<http://example/s> <http://example/p> <http://example/o> . .}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-10.trig b/tests/TrigTests/trig-syntax-bad-struct-10.trig
new file mode 100644
index 00000000..5d5c58fa
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-10.trig
@@ -0,0 +1,5 @@
+# Too many DOTs
+{
+<http://example/s> <http://example/p> <http://example/o> . .
+<http://example/s1> <http://example/p1> <http://example/o1> .
+}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-12.trig b/tests/TrigTests/trig-syntax-bad-struct-12.trig
new file mode 100644
index 00000000..b7bdff6a
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-12.trig
@@ -0,0 +1 @@
+{<http://example/s> }
diff --git a/tests/TrigTests/trig-syntax-bad-struct-13.trig b/tests/TrigTests/trig-syntax-bad-struct-13.trig
new file mode 100644
index 00000000..0712e0f0
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-13.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> }
diff --git a/tests/TrigTests/trig-syntax-bad-struct-14.trig b/tests/TrigTests/trig-syntax-bad-struct-14.trig
new file mode 100644
index 00000000..69bc9c21
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-14.trig
@@ -0,0 +1,2 @@
+# Literal as subject
+{"abc" <http://example/p> <http://example/p> .}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-15.trig b/tests/TrigTests/trig-syntax-bad-struct-15.trig
new file mode 100644
index 00000000..27be5519
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-15.trig
@@ -0,0 +1,2 @@
+# Literal as predicate
+{<http://example/s> "abc" <http://example/p> .}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-16.trig b/tests/TrigTests/trig-syntax-bad-struct-16.trig
new file mode 100644
index 00000000..b08748f4
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-16.trig
@@ -0,0 +1,2 @@
+# BNode as predicate
+{<http://example/s> [] <http://example/p> .}
diff --git a/tests/TrigTests/trig-syntax-bad-struct-17.trig b/tests/TrigTests/trig-syntax-bad-struct-17.trig
new file mode 100644
index 00000000..cdd301a1
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-struct-17.trig
@@ -0,0 +1,2 @@
+# BNode as predicate
+{<http://example/s> _:a <http://example/p> .}
diff --git a/tests/TrigTests/trig-syntax-bad-uri-01.trig b/tests/TrigTests/trig-syntax-bad-uri-01.trig
new file mode 100644
index 00000000..ed06b92d
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-uri-01.trig
@@ -0,0 +1,2 @@
+# Bad IRI : space.
+{<http://example/ space> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-bad-uri-02.trig b/tests/TrigTests/trig-syntax-bad-uri-02.trig
new file mode 100644
index 00000000..fb862172
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-uri-02.trig
@@ -0,0 +1,2 @@
+# Bad IRI : bad escape
+{<http://example/\u00ZZ11> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-bad-uri-03.trig b/tests/TrigTests/trig-syntax-bad-uri-03.trig
new file mode 100644
index 00000000..7fa62dcc
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-uri-03.trig
@@ -0,0 +1,2 @@
+# Bad IRI : bad escape
+{<http://example/\U00ZZ1111> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-bad-uri-04.trig b/tests/TrigTests/trig-syntax-bad-uri-04.trig
new file mode 100644
index 00000000..ba9cd2d7
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-uri-04.trig
@@ -0,0 +1,2 @@
+# Bad IRI : character escapes not allowed.
+{<http://example/\n> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-bad-uri-05.trig b/tests/TrigTests/trig-syntax-bad-uri-05.trig
new file mode 100644
index 00000000..d332a6e6
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bad-uri-05.trig
@@ -0,0 +1,2 @@
+# Bad IRI : character escapes not allowed.
+{<http://example/\/> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-base-01.trig b/tests/TrigTests/trig-syntax-base-01.trig
new file mode 100644
index 00000000..dff1b3b4
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-base-01.trig
@@ -0,0 +1 @@
+@base <http://example/> .
diff --git a/tests/TrigTests/trig-syntax-base-02.trig b/tests/TrigTests/trig-syntax-base-02.trig
new file mode 100644
index 00000000..04f1bfdb
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-base-02.trig
@@ -0,0 +1 @@
+BASE <http://example/>
diff --git a/tests/TrigTests/trig-syntax-base-03.trig b/tests/TrigTests/trig-syntax-base-03.trig
new file mode 100644
index 00000000..2b7ae01d
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-base-03.trig
@@ -0,0 +1,2 @@
+@base <http://example/> .
+{<s> <p> <o> .}
diff --git a/tests/TrigTests/trig-syntax-base-04.trig b/tests/TrigTests/trig-syntax-base-04.trig
new file mode 100644
index 00000000..ad742cff
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-base-04.trig
@@ -0,0 +1,2 @@
+base <http://example/>
+{<s> <p> <o> .}
diff --git a/tests/TrigTests/trig-syntax-blank-label.trig b/tests/TrigTests/trig-syntax-blank-label.trig
new file mode 100644
index 00000000..2cebf8f5
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-blank-label.trig
@@ -0,0 +1,6 @@
+@prefix : <http://example/> .
+{
+_:0b :p :o . # Starts with digit
+_:_b :p :o . # Starts with underscore
+_:b.0 :p :o . # Contains dot, ends with digit
+}
diff --git a/tests/TrigTests/trig-syntax-bnode-01.trig b/tests/TrigTests/trig-syntax-bnode-01.trig
new file mode 100644
index 00000000..50c66c4d
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-01.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{[] :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bnode-02.trig b/tests/TrigTests/trig-syntax-bnode-02.trig
new file mode 100644
index 00000000..745dc11c
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-02.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p [] .}
diff --git a/tests/TrigTests/trig-syntax-bnode-03.trig b/tests/TrigTests/trig-syntax-bnode-03.trig
new file mode 100644
index 00000000..292b2791
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-03.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p [ :q :o ] .}
diff --git a/tests/TrigTests/trig-syntax-bnode-04.trig b/tests/TrigTests/trig-syntax-bnode-04.trig
new file mode 100644
index 00000000..7bde07d6
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-04.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p [ :q1 :o1 ; :q2 :o2 ] .}
diff --git a/tests/TrigTests/trig-syntax-bnode-05.trig b/tests/TrigTests/trig-syntax-bnode-05.trig
new file mode 100644
index 00000000..86419083
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-05.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{[ :q1 :o1 ; :q2 :o2 ] :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bnode-06.trig b/tests/TrigTests/trig-syntax-bnode-06.trig
new file mode 100644
index 00000000..4f06e5fc
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-06.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{_:a :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bnode-07.trig b/tests/TrigTests/trig-syntax-bnode-07.trig
new file mode 100644
index 00000000..001e9ba0
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-07.trig
@@ -0,0 +1,4 @@
+@prefix : <http://example/> .
+{:s :p _:a .
+_:a :p :o .
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-syntax-bnode-08.trig b/tests/TrigTests/trig-syntax-bnode-08.trig
new file mode 100644
index 00000000..853ab8af
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-08.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{[ :p :o ] .}
diff --git a/tests/TrigTests/trig-syntax-bnode-09.trig b/tests/TrigTests/trig-syntax-bnode-09.trig
new file mode 100644
index 00000000..36b1eca8
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-09.trig
@@ -0,0 +1,3 @@
+@prefix : <http://example/> .
+{[ :p :o1,:2 ] .
+:s :p :o .}
diff --git a/tests/TrigTests/trig-syntax-bnode-10.trig b/tests/TrigTests/trig-syntax-bnode-10.trig
new file mode 100644
index 00000000..b6d308dd
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-bnode-10.trig
@@ -0,0 +1,6 @@
+@prefix : <http://example/> .
+{
+:s1 :p :o .
+[ :p1 :o1 ; :p2 :o2 ] .
+:s2 :p :o .
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-syntax-datatypes-01.trig b/tests/TrigTests/trig-syntax-datatypes-01.trig
new file mode 100644
index 00000000..304793af
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-datatypes-01.trig
@@ -0,0 +1,2 @@
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+{<s> <p> "123"^^xsd:byte .}
diff --git a/tests/TrigTests/trig-syntax-datatypes-02.trig b/tests/TrigTests/trig-syntax-datatypes-02.trig
new file mode 100644
index 00000000..7daeb166
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-datatypes-02.trig
@@ -0,0 +1,3 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+{<s> <p> "123"^^xsd:string .}
diff --git a/tests/TrigTests/trig-syntax-file-01.trig b/tests/TrigTests/trig-syntax-file-01.trig
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-file-01.trig
diff --git a/tests/TrigTests/trig-syntax-file-02.trig b/tests/TrigTests/trig-syntax-file-02.trig
new file mode 100644
index 00000000..e6d327d5
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-file-02.trig
@@ -0,0 +1 @@
+#Empty file.
diff --git a/tests/TrigTests/trig-syntax-file-03.trig b/tests/TrigTests/trig-syntax-file-03.trig
new file mode 100644
index 00000000..a9ca0358
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-file-03.trig
@@ -0,0 +1,2 @@
+#One comment, one empty line.
+
diff --git a/tests/TrigTests/trig-syntax-kw-01.trig b/tests/TrigTests/trig-syntax-kw-01.trig
new file mode 100644
index 00000000..c1a426bb
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-kw-01.trig
@@ -0,0 +1 @@
+{<s> <p> true .}
diff --git a/tests/TrigTests/trig-syntax-kw-02.trig b/tests/TrigTests/trig-syntax-kw-02.trig
new file mode 100644
index 00000000..7ceaee70
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-kw-02.trig
@@ -0,0 +1 @@
+{<s> <p> false .}
diff --git a/tests/TrigTests/trig-syntax-kw-03.trig b/tests/TrigTests/trig-syntax-kw-03.trig
new file mode 100644
index 00000000..3c9e1405
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-kw-03.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s a :C .}
diff --git a/tests/TrigTests/trig-syntax-lists-01.trig b/tests/TrigTests/trig-syntax-lists-01.trig
new file mode 100644
index 00000000..ff2de971
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-lists-01.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p () .}
diff --git a/tests/TrigTests/trig-syntax-lists-02.trig b/tests/TrigTests/trig-syntax-lists-02.trig
new file mode 100644
index 00000000..cce118aa
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-lists-02.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p (1 "2" :o) .}
diff --git a/tests/TrigTests/trig-syntax-lists-03.trig b/tests/TrigTests/trig-syntax-lists-03.trig
new file mode 100644
index 00000000..ee59d4c1
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-lists-03.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{(1) :p (1) .}
diff --git a/tests/TrigTests/trig-syntax-lists-04.trig b/tests/TrigTests/trig-syntax-lists-04.trig
new file mode 100644
index 00000000..6b26b478
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-lists-04.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{(()) :p (()) .}
diff --git a/tests/TrigTests/trig-syntax-lists-05.trig b/tests/TrigTests/trig-syntax-lists-05.trig
new file mode 100644
index 00000000..9e103cdd
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-lists-05.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{(1 2 (1 2)) :p (( "a") "b" :o) .}
diff --git a/tests/TrigTests/trig-syntax-ln-colons.trig b/tests/TrigTests/trig-syntax-ln-colons.trig
new file mode 100644
index 00000000..d0fd5d45
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-ln-colons.trig
@@ -0,0 +1,8 @@
+@prefix : <http://example/> .
+{
+:s:1 :p:1 :o:1 .
+:s::2 :p::2 :o::2 .
+:3:s :3:p :3 .
+::s ::p ::o .
+::s: ::p: ::o: .
+}
diff --git a/tests/TrigTests/trig-syntax-ln-dots.trig b/tests/TrigTests/trig-syntax-ln-dots.trig
new file mode 100644
index 00000000..f420e8a9
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-ln-dots.trig
@@ -0,0 +1,6 @@
+@prefix : <http://example/> .
+{
+:s.1 :p.1 :o.1 .
+:s..2 :p..2 :o..2.
+:3.s :3.p :3.
+}
diff --git a/tests/TrigTests/trig-syntax-minimal-whitespace-01.trig b/tests/TrigTests/trig-syntax-minimal-whitespace-01.trig
new file mode 100644
index 00000000..f53451f8
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-minimal-whitespace-01.trig
@@ -0,0 +1,21 @@
+BASE<http://example/base>
+@base<http://example/base>.
+PREFIX :<http://example/a/>
+PREFIX b:<http://example/b/>
+@prefix:<http://example/c/>.
+@prefix
+d:<http://example/d/>.
+
+{<http://example/s><http://example/p><http://example/o>.<http://example/s><http://example/p>"Alice".<http://example/s><http://example/p>_:o.}
+{:s :p :o .:s :p"Alice".:s :p _:o.}
+{b:s b:p b:o .b:s b:p"Alice".b:s b:p _:o.}
+{_:s:p :o ._:s:p"Alice". _:s:p _:o .}
+{[:p :o].[:p"Alice"].[:p _:o].}
+{[:p(:o)].[:p(_:o)].[:p("Alice")].[:p(<http://example/o>)].}
+{:s :p :o,:o2 .:s :p"Alice","Ted".:s :p _:o,_:o2.}
+{:s :p :o;:p2 :o2 .:s :p"Alice";:p2 "Ted".:s :p _:o;:p2 _:o2.}
+<http://example/g>{:s :p :o .:s :p"Alice".:s :p _:o.}
+:s{:s :p :o .:s :p"Alice".:s :p _:o.}
+_:s{:s :p :o .:s :p"Alice".:s :p _:o.}
+:{: : :}{: : :}:{: : :}
+:{():()}{():[]}:{[]:[]}
diff --git a/tests/TrigTests/trig-syntax-ns-dots.trig b/tests/TrigTests/trig-syntax-ns-dots.trig
new file mode 100644
index 00000000..7526a125
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-ns-dots.trig
@@ -0,0 +1,2 @@
+@prefix e.g: <http://example/> .
+{e.g:s e.g:p e.g:o .}
diff --git a/tests/TrigTests/trig-syntax-number-01.trig b/tests/TrigTests/trig-syntax-number-01.trig
new file mode 100644
index 00000000..45d9b177
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-01.trig
@@ -0,0 +1 @@
+{<s> <p> 123 .}
diff --git a/tests/TrigTests/trig-syntax-number-02.trig b/tests/TrigTests/trig-syntax-number-02.trig
new file mode 100644
index 00000000..6cbb9b49
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-02.trig
@@ -0,0 +1 @@
+{<s> <p> -123 .}
diff --git a/tests/TrigTests/trig-syntax-number-03.trig b/tests/TrigTests/trig-syntax-number-03.trig
new file mode 100644
index 00000000..69021b45
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-03.trig
@@ -0,0 +1 @@
+{<s> <p> +123 .}
diff --git a/tests/TrigTests/trig-syntax-number-04.trig b/tests/TrigTests/trig-syntax-number-04.trig
new file mode 100644
index 00000000..f826907c
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-04.trig
@@ -0,0 +1,2 @@
+# This is a decimal.
+{<s> <p> 123.0 . }
diff --git a/tests/TrigTests/trig-syntax-number-05.trig b/tests/TrigTests/trig-syntax-number-05.trig
new file mode 100644
index 00000000..72d44600
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-05.trig
@@ -0,0 +1,2 @@
+# This is a decimal.
+{<s> <p> .1 . }
diff --git a/tests/TrigTests/trig-syntax-number-06.trig b/tests/TrigTests/trig-syntax-number-06.trig
new file mode 100644
index 00000000..adcbffd8
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-06.trig
@@ -0,0 +1,2 @@
+# This is a decimal.
+{<s> <p> -123.0 . }
diff --git a/tests/TrigTests/trig-syntax-number-07.trig b/tests/TrigTests/trig-syntax-number-07.trig
new file mode 100644
index 00000000..a4802735
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-07.trig
@@ -0,0 +1,2 @@
+# This is a decimal.
+{<s> <p> +123.0 . }
diff --git a/tests/TrigTests/trig-syntax-number-08.trig b/tests/TrigTests/trig-syntax-number-08.trig
new file mode 100644
index 00000000..b0093500
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-08.trig
@@ -0,0 +1,2 @@
+# This is an integer
+{<s> <p> 123.}
diff --git a/tests/TrigTests/trig-syntax-number-09.trig b/tests/TrigTests/trig-syntax-number-09.trig
new file mode 100644
index 00000000..157456d2
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-09.trig
@@ -0,0 +1 @@
+{<s> <p> 123.0e1 .}
diff --git a/tests/TrigTests/trig-syntax-number-10.trig b/tests/TrigTests/trig-syntax-number-10.trig
new file mode 100644
index 00000000..1426fda6
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-10.trig
@@ -0,0 +1 @@
+{<s> <p> -123e-1 .}
diff --git a/tests/TrigTests/trig-syntax-number-11.trig b/tests/TrigTests/trig-syntax-number-11.trig
new file mode 100644
index 00000000..6ec517dd
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-number-11.trig
@@ -0,0 +1 @@
+{<s> <p> 123.E+1 .}
diff --git a/tests/TrigTests/trig-syntax-pname-esc-01.trig b/tests/TrigTests/trig-syntax-pname-esc-01.trig
new file mode 100644
index 00000000..4c7dd31d
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-pname-esc-01.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p :\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\_\%AA .}
diff --git a/tests/TrigTests/trig-syntax-pname-esc-02.trig b/tests/TrigTests/trig-syntax-pname-esc-02.trig
new file mode 100644
index 00000000..2e6bd389
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-pname-esc-02.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p :0123\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\_\%AA123 .}
diff --git a/tests/TrigTests/trig-syntax-pname-esc-03.trig b/tests/TrigTests/trig-syntax-pname-esc-03.trig
new file mode 100644
index 00000000..433b9955
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-pname-esc-03.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:xyz\~ :abc\.: : .}
diff --git a/tests/TrigTests/trig-syntax-prefix-01.trig b/tests/TrigTests/trig-syntax-prefix-01.trig
new file mode 100644
index 00000000..89e08cc7
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-prefix-01.trig
@@ -0,0 +1 @@
+@prefix : <http://example/> .
diff --git a/tests/TrigTests/trig-syntax-prefix-02.trig b/tests/TrigTests/trig-syntax-prefix-02.trig
new file mode 100644
index 00000000..5869e8bd
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-prefix-02.trig
@@ -0,0 +1 @@
+PreFIX : <http://example/>
diff --git a/tests/TrigTests/trig-syntax-prefix-03.trig b/tests/TrigTests/trig-syntax-prefix-03.trig
new file mode 100644
index 00000000..beb18c03
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-prefix-03.trig
@@ -0,0 +1,2 @@
+PREFIX : <http://example/>
+{:s :p :123 .}
diff --git a/tests/TrigTests/trig-syntax-prefix-04.trig b/tests/TrigTests/trig-syntax-prefix-04.trig
new file mode 100644
index 00000000..682cf0ae
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-prefix-04.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p :%20 .}
diff --git a/tests/TrigTests/trig-syntax-prefix-05.trig b/tests/TrigTests/trig-syntax-prefix-05.trig
new file mode 100644
index 00000000..7c463e7c
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-prefix-05.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{: : : .}
diff --git a/tests/TrigTests/trig-syntax-prefix-06.trig b/tests/TrigTests/trig-syntax-prefix-06.trig
new file mode 100644
index 00000000..b7a71c9a
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-prefix-06.trig
@@ -0,0 +1,4 @@
+# colon is a legal pname character
+@prefix : <http://example/> .
+@prefix x: <http://example/> .
+{:a:b:c x:d:e:f :::: .}
diff --git a/tests/TrigTests/trig-syntax-prefix-07.trig b/tests/TrigTests/trig-syntax-prefix-07.trig
new file mode 100644
index 00000000..3337f3eb
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-prefix-07.trig
@@ -0,0 +1,3 @@
+# dash is a legal pname character
+@prefix x: <http://example/> .
+{x:a-b-c x:p x:o .}
diff --git a/tests/TrigTests/trig-syntax-prefix-08.trig b/tests/TrigTests/trig-syntax-prefix-08.trig
new file mode 100644
index 00000000..669573aa
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-prefix-08.trig
@@ -0,0 +1,3 @@
+# underscore is a legal pname character
+@prefix x: <http://example/> .
+{x:_ x:p_1 x:o .}
diff --git a/tests/TrigTests/trig-syntax-prefix-09.trig b/tests/TrigTests/trig-syntax-prefix-09.trig
new file mode 100644
index 00000000..ba50306c
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-prefix-09.trig
@@ -0,0 +1,4 @@
+# percents
+@prefix : <http://example/> .
+@prefix x: <http://example/> .
+{:a%3E x:%25 :a%3Eb .}
diff --git a/tests/TrigTests/trig-syntax-str-esc-01.trig b/tests/TrigTests/trig-syntax-str-esc-01.trig
new file mode 100644
index 00000000..5db8be67
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-str-esc-01.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> "a\n" .}
diff --git a/tests/TrigTests/trig-syntax-str-esc-02.trig b/tests/TrigTests/trig-syntax-str-esc-02.trig
new file mode 100644
index 00000000..57cbdd6d
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-str-esc-02.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> "a\u0020b" .}
diff --git a/tests/TrigTests/trig-syntax-str-esc-03.trig b/tests/TrigTests/trig-syntax-str-esc-03.trig
new file mode 100644
index 00000000..55f9b26f
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-str-esc-03.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> "a\U00000020b" .}
diff --git a/tests/TrigTests/trig-syntax-string-01.trig b/tests/TrigTests/trig-syntax-string-01.trig
new file mode 100644
index 00000000..72230b7f
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-01.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> "string" .}
diff --git a/tests/TrigTests/trig-syntax-string-02.trig b/tests/TrigTests/trig-syntax-string-02.trig
new file mode 100644
index 00000000..a9ca8697
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-02.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> "string"@en .}
diff --git a/tests/TrigTests/trig-syntax-string-03.trig b/tests/TrigTests/trig-syntax-string-03.trig
new file mode 100644
index 00000000..9dc53ef6
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-03.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> "string"@en-uk .}
diff --git a/tests/TrigTests/trig-syntax-string-04.trig b/tests/TrigTests/trig-syntax-string-04.trig
new file mode 100644
index 00000000..d5859b22
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-04.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> 'string' .}
diff --git a/tests/TrigTests/trig-syntax-string-05.trig b/tests/TrigTests/trig-syntax-string-05.trig
new file mode 100644
index 00000000..10292cca
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-05.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> 'string'@en .}
diff --git a/tests/TrigTests/trig-syntax-string-06.trig b/tests/TrigTests/trig-syntax-string-06.trig
new file mode 100644
index 00000000..2ab1e863
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-06.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> 'string'@en-uk .}
diff --git a/tests/TrigTests/trig-syntax-string-07.trig b/tests/TrigTests/trig-syntax-string-07.trig
new file mode 100644
index 00000000..98edec55
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-07.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> """abc""def''ghi""" .}
diff --git a/tests/TrigTests/trig-syntax-string-08.trig b/tests/TrigTests/trig-syntax-string-08.trig
new file mode 100644
index 00000000..3612dec1
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-08.trig
@@ -0,0 +1,2 @@
+{<http://example/s> <http://example/p> """abc
+def""" .}
diff --git a/tests/TrigTests/trig-syntax-string-09.trig b/tests/TrigTests/trig-syntax-string-09.trig
new file mode 100644
index 00000000..5d98aea6
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-09.trig
@@ -0,0 +1,2 @@
+{<http://example/s> <http://example/p> '''abc
+def''' .}
diff --git a/tests/TrigTests/trig-syntax-string-10.trig b/tests/TrigTests/trig-syntax-string-10.trig
new file mode 100644
index 00000000..f6112a2e
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-10.trig
@@ -0,0 +1,2 @@
+{<http://example/s> <http://example/p> """abc
+def"""@en .}
diff --git a/tests/TrigTests/trig-syntax-string-11.trig b/tests/TrigTests/trig-syntax-string-11.trig
new file mode 100644
index 00000000..450dc549
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-string-11.trig
@@ -0,0 +1,2 @@
+{<http://example/s> <http://example/p> '''abc
+def'''@en .}
diff --git a/tests/TrigTests/trig-syntax-struct-01.trig b/tests/TrigTests/trig-syntax-struct-01.trig
new file mode 100644
index 00000000..52c26c1c
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-struct-01.trig
@@ -0,0 +1,2 @@
+@prefix : <http://example/> .
+{:s :p :o1 , :o2 .}
diff --git a/tests/TrigTests/trig-syntax-struct-02.trig b/tests/TrigTests/trig-syntax-struct-02.trig
new file mode 100644
index 00000000..24535fad
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-struct-02.trig
@@ -0,0 +1,4 @@
+@prefix : <http://example/> .
+{:s :p1 :o1 ;
+ :p2 :o2 .
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-syntax-struct-03.trig b/tests/TrigTests/trig-syntax-struct-03.trig
new file mode 100644
index 00000000..43d81074
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-struct-03.trig
@@ -0,0 +1,5 @@
+@prefix : <http://example/> .
+{:s :p1 :o1 ;
+ :p2 :o2 ;
+ .
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-syntax-struct-04.trig b/tests/TrigTests/trig-syntax-struct-04.trig
new file mode 100644
index 00000000..5a80fdf7
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-struct-04.trig
@@ -0,0 +1,5 @@
+@prefix : <http://example/> .
+{:s :p1 :o1 ;;
+ :p2 :o2
+ .
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-syntax-struct-05.trig b/tests/TrigTests/trig-syntax-struct-05.trig
new file mode 100644
index 00000000..3a756523
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-struct-05.trig
@@ -0,0 +1,5 @@
+@prefix : <http://example/> .
+{:s :p1 :o1 ;
+ :p2 :o2 ;;
+ .
+} \ No newline at end of file
diff --git a/tests/TrigTests/trig-syntax-struct-06.trig b/tests/TrigTests/trig-syntax-struct-06.trig
new file mode 100644
index 00000000..81a5135c
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-struct-06.trig
@@ -0,0 +1,2 @@
+# No DOT
+{<http://example/s> <http://example/p> <http://example/o>}
diff --git a/tests/TrigTests/trig-syntax-struct-07.trig b/tests/TrigTests/trig-syntax-struct-07.trig
new file mode 100644
index 00000000..45f09d34
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-struct-07.trig
@@ -0,0 +1,2 @@
+# Trailing ;
+{<http://example/s> <http://example/p> <http://example/o> ;}
diff --git a/tests/TrigTests/trig-syntax-uri-01.trig b/tests/TrigTests/trig-syntax-uri-01.trig
new file mode 100644
index 00000000..2f634298
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-uri-01.trig
@@ -0,0 +1 @@
+{<http://example/s> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-uri-02.trig b/tests/TrigTests/trig-syntax-uri-02.trig
new file mode 100644
index 00000000..2276868e
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-uri-02.trig
@@ -0,0 +1,2 @@
+# x53 is capital S
+{<http://example/\u0053> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-uri-03.trig b/tests/TrigTests/trig-syntax-uri-03.trig
new file mode 100644
index 00000000..6467687a
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-uri-03.trig
@@ -0,0 +1,2 @@
+# x53 is capital S
+{<http://example/\U00000053> <http://example/p> <http://example/o> .}
diff --git a/tests/TrigTests/trig-syntax-uri-04.trig b/tests/TrigTests/trig-syntax-uri-04.trig
new file mode 100644
index 00000000..d4a6ed29
--- /dev/null
+++ b/tests/TrigTests/trig-syntax-uri-04.trig
@@ -0,0 +1,3 @@
+# IRI with all chars in it.
+{<http://example/s> <http://example/p>
+<scheme:!$%25&'()*+,-./0123456789:/@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~?#> .}
diff --git a/tests/TrigTests/trig-turtle-01.trig b/tests/TrigTests/trig-turtle-01.trig
new file mode 100644
index 00000000..785f04cb
--- /dev/null
+++ b/tests/TrigTests/trig-turtle-01.trig
@@ -0,0 +1,8 @@
+# Turtle is TriG
+PREFIX : <http://example/>
+
+:s :p :o ;
+ :q 123 , 456 .
+
+:s1 :p1 "more" .
+
diff --git a/tests/TrigTests/trig-turtle-02.trig b/tests/TrigTests/trig-turtle-02.trig
new file mode 100644
index 00000000..4dd160b6
--- /dev/null
+++ b/tests/TrigTests/trig-turtle-02.trig
@@ -0,0 +1,9 @@
+# Turtle is TriG
+PREFIX : <http://example/>
+
+:s :p :o ;
+ :q 123 , 456 .
+
+PREFIX : <http://example/ns#>
+
+:s :p :o .
diff --git a/tests/TrigTests/trig-turtle-03.trig b/tests/TrigTests/trig-turtle-03.trig
new file mode 100644
index 00000000..b58574d1
--- /dev/null
+++ b/tests/TrigTests/trig-turtle-03.trig
@@ -0,0 +1,5 @@
+# Turtle is TriG
+prefix : <http://example/>
+
+[ :p 123 ; :q 456 ] :r 1 .
+
diff --git a/tests/TrigTests/trig-turtle-04.trig b/tests/TrigTests/trig-turtle-04.trig
new file mode 100644
index 00000000..50ed5133
--- /dev/null
+++ b/tests/TrigTests/trig-turtle-04.trig
@@ -0,0 +1,5 @@
+# Turtle is TriG
+prefix : <http://example/>
+
+[] :p :o .
+
diff --git a/tests/TrigTests/trig-turtle-05.trig b/tests/TrigTests/trig-turtle-05.trig
new file mode 100644
index 00000000..06aaf659
--- /dev/null
+++ b/tests/TrigTests/trig-turtle-05.trig
@@ -0,0 +1,6 @@
+# Turtle is TriG
+prefix : <http://example/>
+
+[ :p :o ] .
+
+
diff --git a/tests/TrigTests/trig-turtle-06.trig b/tests/TrigTests/trig-turtle-06.trig
new file mode 100644
index 00000000..b69fddeb
--- /dev/null
+++ b/tests/TrigTests/trig-turtle-06.trig
@@ -0,0 +1,4 @@
+# Turtle is TriG
+prefix : <http://example/>
+
+( 1 2 3 ) :p ( 4 5 6 ) . \ No newline at end of file
diff --git a/tests/TrigTests/trig-turtle-bad-01.trig b/tests/TrigTests/trig-turtle-bad-01.trig
new file mode 100644
index 00000000..1bad23f5
--- /dev/null
+++ b/tests/TrigTests/trig-turtle-bad-01.trig
@@ -0,0 +1,5 @@
+# Turtle is TriG
+
+# Trailing dot required in Turtle block.
+
+:s :p :o
diff --git a/tests/TrigTests/trig-turtle-bad-02.trig b/tests/TrigTests/trig-turtle-bad-02.trig
new file mode 100644
index 00000000..f46fc1c5
--- /dev/null
+++ b/tests/TrigTests/trig-turtle-bad-02.trig
@@ -0,0 +1,6 @@
+# Turtle is TriG
+
+# N-Quads.
+
+:s :p :o :g .
+
diff --git a/tests/TrigTests/two_LITERAL_LONG2s.nq b/tests/TrigTests/two_LITERAL_LONG2s.nq
new file mode 100644
index 00000000..af94fe6a
--- /dev/null
+++ b/tests/TrigTests/two_LITERAL_LONG2s.nq
@@ -0,0 +1,2 @@
+<http://example.org/ex#a> <http://example.org/ex#b> "first long literal" .
+<http://example.org/ex#c> <http://example.org/ex#d> "second long literal" .
diff --git a/tests/TrigTests/two_LITERAL_LONG2s.trig b/tests/TrigTests/two_LITERAL_LONG2s.trig
new file mode 100644
index 00000000..93aea524
--- /dev/null
+++ b/tests/TrigTests/two_LITERAL_LONG2s.trig
@@ -0,0 +1,6 @@
+# Test long literal twice to ensure it does not over-quote
+@prefix : <http://example.org/ex#> .
+{
+:a :b """first long literal""" .
+:c :d """second long literal""" .
+}
diff --git a/tests/TrigTests/underscore_in_localName.nq b/tests/TrigTests/underscore_in_localName.nq
new file mode 100644
index 00000000..f9d0c4f1
--- /dev/null
+++ b/tests/TrigTests/underscore_in_localName.nq
@@ -0,0 +1 @@
+<http://a.example/s_> <http://a.example/p> <http://a.example/o> .
diff --git a/tests/TrigTests/underscore_in_localName.trig b/tests/TrigTests/underscore_in_localName.trig
new file mode 100644
index 00000000..e10726bd
--- /dev/null
+++ b/tests/TrigTests/underscore_in_localName.trig
@@ -0,0 +1,2 @@
+@prefix p: <http://a.example/>.
+{p:s_ <http://a.example/p> <http://a.example/o> .}
diff --git a/wscript b/wscript
index 7762cff7..8c8d86a4 100644
--- a/wscript
+++ b/wscript
@@ -359,7 +359,8 @@ def test_manifest(ctx, srcdir, testdir, report, base_uri, isyntax, osyntax, test
result = os.path.join(srcdir, 'tests', testdir, result_node)
passed = check_output(output, result)
- test_thru(ctx, base_uri + action_node, action, result, "")
+ if isyntax != 'trig':
+ test_thru(ctx, base_uri + action_node, action, result, "")
report.write(earl_assertion(test, passed, asserter))
autowaf.end_tests(ctx, APPNAME, str(test_class))
@@ -369,7 +370,7 @@ def test_manifest(ctx, srcdir, testdir, report, base_uri, isyntax, osyntax, test
def test(ctx):
blddir = autowaf.build_dir(APPNAME, 'tests')
- for i in ['', 'bad', 'good', 'new', 'TurtleTests', 'NQuadsTests', 'extra']:
+ for i in ['', 'bad', 'good', 'new', 'TurtleTests', 'NQuadsTests', 'TrigTests', 'extra']:
try:
os.makedirs(os.path.join(blddir, i))
except:
@@ -534,6 +535,13 @@ def test(ctx):
[rdft.TestNQuadsNegativeSyntax, 1, False],
[rdft.TestNQuadsNegativeEval, 1, False],
[rdft.TestNQuadsEval, 0, True]])
+
+ trig_tests = 'http://www.w3.org/2013/TriGTests/'
+ test_manifest(ctx, srcdir, 'TrigTests', report, trig_tests, 'trig', 'nquads',
+ [[rdft.TestTrigPositiveSyntax, 0, False],
+ [rdft.TestTrigNegativeSyntax, 1, False],
+ [rdft.TestTrigNegativeEval, 1, False],
+ [rdft.TestTrigEval, 0, True]])
report.close()
except: