This document report test subject conformance for and related specifications for TriG [[TRIG]] according to the requirements of the Evaluation and Report Language (EARL) 1.0 Schema [[EARL10-SCHEMA]].

This report is also available in alternate formats: Turtle and JSON-LD

Instructions for submitting implementation reports

Tests should be run using the test manifests defined in the Test Manifests Section.

The assumed base URI for the tests is <http://example/base/> if needed.

Reports should be submitted in Turtle format to public-rdf-comments@w3.org and include an earl:Assertion for each test, referencing the test resource from the associated manifest and the test subject being reported upon. An example test entry is be the following:

  [ a earl:Assertion;
    earl:assertedBy <http://greggkellogg.net/foaf#me>;
    earl:subject <http://rubygems.org/gems/rdf-turtle>;
    earl:test <http://www.w3.org/2013/TurtleTests/manifest.ttl#turtle-syntax-file-01>;
    earl:result [
      a earl:TestResult;
      earl:outcome earl:passed;
      dc:date "2013-02-22T15:12:30-08:00"^^xsd:dateTime];
    earl:mode earl:automatic ] .

The Test Subject should be defined as a doap:Project, including the name, homepage and developer(s) of the software (see [[DOAP]]). Optionally, including the project description and programming language. An example test subject description is the following:

  <> foaf:primaryTopic <http://rubygems.org/gems/rdf-trig>
    dc:issued "2013-06-18T17:30:22-07:00"^^xsd:dateTime ;
    foaf:maker <http://greggkellogg.net/foaf#me> .

  <http://rubygems.org/gems/rdf-trig> a doap:Project, earl:TestSubject, earl:Software ;
    doap:name          "RDF::TriG" ;
    doap:homepage      <http://ruby-rdf.github.com/rdf-trig> ;
    doap:license       <http://creativecommons.org/licenses/publicdomain/> ;
    doap:description   "RDF::TriG is an TriG reader/writer for the RDF.rb library suite."@en ;
    doap:created       "2011-08-29"^^xsd:date ;
    doap:programming-language "Ruby" ;
    doap:implements    <http://www.w3.org/TR/trig/> ;
    doap:category      <http://dbpedia.org/resource/Resource_Description_Framework>,
                       <http://dbpedia.org/resource/Ruby_(programming_language)> ;
    doap:developer     <http://greggkellogg.net/foaf#me> ;
    dc:title           "RDF::TriG" ;
    dc:description     "RDF::TriG is an TriG reader/writer for the RDF.rb library suite."@en ;
    dc:date            "2011-08-29"^^xsd:date ;
    .

The software developer, either an organization or one or more individuals SHOULD be referenced from doap:developer using [[FOAF]]. For example:

  <http://greggkellogg.net/foaf#me> a foaf:Person, earl:Assertor;
    foaf:name "Gregg Kellogg";
    foaf:title "Implementor";
    foaf:homepage <http://greggkellogg.net/> .

See Turtle Test Suite Wiki for more information.

Test Manifests

TriG tests

Test Apache Jena RDF::TriG rdflib
anonymous_blank_node_graph PASS PASS PASS
labeled_blank_node_graph PASS PASS PASS
alternating_iri_graphs PASS PASS PASS
alternating_bnode_graphs PASS PASS PASS
trig-syntax-bad-base-04 PASS PASS PASS
trig-syntax-bad-base-05 PASS PASS PASS
trig-syntax-bad-prefix-06 PASS PASS PASS
trig-syntax-bad-prefix-07 PASS PASS PASS
trig-syntax-struct-06 PASS PASS PASS
trig-syntax-struct-07 PASS PASS PASS
trig-syntax-minimal-whitespace-01 PASS PASS PASS
IRI_subject PASS PASS PASS
IRI_with_four_digit_numeric_escape PASS PASS PASS
IRI_with_eight_digit_numeric_escape PASS PASS PASS
IRI_with_all_punctuation PASS PASS PASS
bareword_a_predicate PASS PASS PASS
old_style_prefix PASS PASS PASS
SPARQL_style_prefix PASS PASS PASS
prefixed_IRI_predicate PASS PASS PASS
prefixed_IRI_object PASS PASS PASS
prefix_only_IRI PASS PASS PASS
prefix_with_PN_CHARS_BASE_character_boundaries PASS PASS PASS
prefix_with_non_leading_extras PASS PASS PASS
default_namespace_IRI PASS PASS PASS
prefix_reassigned_and_used PASS PASS PASS
reserved_escaped_localName PASS PASS PASS
percent_escaped_localName PASS PASS PASS
HYPHEN_MINUS_in_localName PASS PASS PASS
underscore_in_localName PASS PASS PASS
localname_with_COLON PASS PASS PASS
localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries PASS PASS PASS
localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries PASS PASS PASS
localName_with_nfc_PN_CHARS_BASE_character_boundaries PASS PASS PASS
localName_with_leading_underscore PASS PASS PASS
localName_with_leading_digit PASS PASS PASS
localName_with_non_leading_extras PASS PASS PASS
old_style_base PASS PASS PASS
SPARQL_style_base PASS PASS PASS
labeled_blank_node_subject PASS PASS PASS
labeled_blank_node_object PASS PASS PASS
labeled_blank_node_with_PN_CHARS_BASE_character_boundaries PASS PASS PASS
labeled_blank_node_with_leading_underscore PASS PASS PASS
labeled_blank_node_with_leading_digit PASS PASS PASS
labeled_blank_node_with_non_leading_extras PASS PASS PASS
anonymous_blank_node_subject PASS PASS PASS
anonymous_blank_node_object PASS PASS PASS
sole_blankNodePropertyList PASS PASS PASS
blankNodePropertyList_as_subject PASS PASS PASS
blankNodePropertyList_as_object PASS PASS PASS
blankNodePropertyList_with_multiple_triples PASS PASS PASS
nested_blankNodePropertyLists PASS PASS PASS
blankNodePropertyList_containing_collection PASS PASS PASS
collection_subject PASS PASS PASS
collection_object PASS PASS PASS
empty_collection PASS PASS PASS
nested_collection PASS PASS PASS
first PASS PASS PASS
last PASS PASS PASS
LITERAL1 PASS PASS PASS
LITERAL1_ascii_boundaries PASS PASS PASS
LITERAL1_with_UTF8_boundaries PASS PASS PASS
LITERAL1_all_controls PASS PASS PASS
LITERAL1_all_punctuation PASS PASS PASS
LITERAL_LONG1 PASS PASS PASS
LITERAL_LONG1_ascii_boundaries PASS PASS PASS
LITERAL_LONG1_with_UTF8_boundaries PASS PASS PASS
LITERAL_LONG1_with_1_squote PASS PASS PASS
LITERAL_LONG1_with_2_squotes PASS PASS PASS
LITERAL2 PASS PASS PASS
LITERAL2_ascii_boundaries PASS PASS PASS
LITERAL2_with_UTF8_boundaries PASS PASS PASS
LITERAL_LONG2 PASS PASS PASS
LITERAL_LONG2_ascii_boundaries PASS PASS PASS
LITERAL_LONG2_with_UTF8_boundaries PASS PASS PASS
LITERAL_LONG2_with_1_squote PASS PASS PASS
LITERAL_LONG2_with_2_squotes PASS PASS PASS
literal_with_CHARACTER_TABULATION PASS PASS PASS
literal_with_BACKSPACE PASS PASS PASS
literal_with_LINE_FEED PASS PASS PASS
literal_with_CARRIAGE_RETURN PASS PASS PASS
literal_with_FORM_FEED PASS PASS PASS
literal_with_REVERSE_SOLIDUS PASS PASS PASS
literal_with_escaped_CHARACTER_TABULATION PASS PASS PASS
literal_with_escaped_BACKSPACE PASS PASS PASS
literal_with_escaped_LINE_FEED PASS PASS PASS
literal_with_escaped_CARRIAGE_RETURN PASS PASS PASS
literal_with_escaped_FORM_FEED PASS PASS PASS
literal_with_numeric_escape4 PASS PASS PASS
literal_with_numeric_escape8 PASS PASS PASS
IRIREF_datatype PASS PASS PASS
prefixed_name_datatype PASS PASS PASS
bareword_integer PASS PASS PASS
bareword_decimal PASS PASS PASS
bareword_double PASS PASS PASS
double_lower_case_e PASS PASS PASS
negative_numeric PASS PASS PASS
positive_numeric PASS PASS PASS
numeric_with_leading_0 PASS PASS PASS
literal_true PASS PASS PASS
literal_false PASS PASS PASS
langtagged_non_LONG PASS PASS PASS
langtagged_LONG PASS PASS PASS
lantag_with_subtag PASS PASS PASS
objectList_with_two_objects PASS PASS PASS
predicateObjectList_with_two_objectLists PASS PASS PASS
repeated_semis_at_end PASS PASS PASS
repeated_semis_not_at_end PASS PASS PASS
comment_following_localName PASS PASS PASS
number_sign_following_localName PASS PASS PASS
comment_following_PNAME_NS PASS PASS PASS
number_sign_following_PNAME_NS PASS PASS PASS
LITERAL_LONG2_with_REVERSE_SOLIDUS PASS PASS PASS
trig-syntax-bad-num-05 PASS PASS PASS
two_LITERAL_LONG2s PASS PASS PASS
langtagged_LONG_with_subtag PASS PASS PASS
trig-syntax-file-01 PASS PASS PASS
trig-syntax-file-02 PASS PASS PASS
trig-syntax-file-03 PASS PASS PASS
trig-syntax-uri-01 PASS PASS PASS
trig-syntax-uri-02 PASS PASS PASS
trig-syntax-uri-03 PASS PASS PASS
trig-syntax-uri-04 PASS PASS PASS
trig-syntax-base-01 PASS PASS PASS
trig-syntax-base-02 PASS PASS PASS
trig-syntax-base-03 PASS PASS PASS
trig-syntax-base-04 PASS PASS PASS
trig-syntax-prefix-01 PASS PASS PASS
trig-syntax-prefix-02 PASS PASS PASS
trig-syntax-prefix-03 PASS PASS PASS
trig-syntax-prefix-04 PASS PASS PASS
trig-syntax-prefix-05 PASS PASS PASS
trig-syntax-prefix-06 PASS PASS PASS
trig-syntax-prefix-07 PASS PASS PASS
trig-syntax-prefix-08 PASS PASS PASS
trig-syntax-prefix-09 PASS PASS PASS
trig-syntax-string-01 PASS PASS PASS
trig-syntax-string-02 PASS PASS PASS
trig-syntax-string-03 PASS PASS PASS
trig-syntax-string-04 PASS PASS PASS
trig-syntax-string-05 PASS PASS PASS
trig-syntax-string-06 PASS PASS PASS
trig-syntax-string-07 PASS PASS PASS
trig-syntax-string-08 PASS PASS PASS
trig-syntax-string-09 PASS PASS PASS
trig-syntax-string-10 PASS PASS PASS
trig-syntax-string-11 PASS PASS PASS
trig-syntax-str-esc-01 PASS PASS PASS
trig-syntax-str-esc-02 PASS PASS PASS
trig-syntax-str-esc-03 PASS PASS PASS
trig-syntax-pname-esc-01 PASS PASS PASS
trig-syntax-pname-esc-02 PASS PASS PASS
trig-syntax-pname-esc-03 PASS PASS PASS
trig-syntax-bnode-01 PASS PASS PASS
trig-syntax-bnode-02 PASS PASS PASS
trig-syntax-bnode-03 PASS PASS PASS
trig-syntax-bnode-04 PASS PASS PASS
trig-syntax-bnode-05 PASS PASS PASS
trig-syntax-bnode-06 PASS PASS PASS
trig-syntax-bnode-07 PASS PASS PASS
trig-syntax-bnode-08 PASS PASS PASS
trig-syntax-bnode-09 PASS PASS PASS
trig-syntax-bnode-10 PASS PASS PASS
trig-syntax-number-01 PASS PASS PASS
trig-syntax-number-02 PASS PASS PASS
trig-syntax-number-03 PASS PASS PASS
trig-syntax-number-04 PASS PASS PASS
trig-syntax-number-05 PASS PASS PASS
trig-syntax-number-06 PASS PASS PASS
trig-syntax-number-07 PASS PASS PASS
trig-syntax-number-08 PASS PASS PASS
trig-syntax-number-09 PASS PASS PASS
trig-syntax-number-10 PASS PASS PASS
trig-syntax-number-11 PASS PASS PASS
trig-syntax-datatypes-01 PASS PASS PASS
trig-syntax-datatypes-02 PASS PASS PASS
trig-syntax-kw-01 PASS PASS PASS
trig-syntax-kw-02 PASS PASS PASS
trig-syntax-kw-03 PASS PASS PASS
trig-syntax-struct-01 PASS PASS PASS
trig-syntax-struct-02 PASS PASS PASS
trig-syntax-struct-03 PASS PASS PASS
trig-syntax-struct-04 PASS PASS PASS
trig-syntax-struct-05 PASS PASS PASS
trig-syntax-lists-01 PASS PASS PASS
trig-syntax-lists-02 PASS PASS PASS
trig-syntax-lists-03 PASS PASS PASS
trig-syntax-lists-04 PASS PASS PASS
trig-syntax-lists-05 PASS PASS PASS
trig-syntax-bad-uri-01 PASS PASS PASS
trig-syntax-bad-uri-02 PASS PASS PASS
trig-syntax-bad-uri-03 PASS PASS PASS
trig-syntax-bad-uri-04 PASS PASS PASS
trig-syntax-bad-uri-05 PASS PASS PASS
trig-syntax-bad-prefix-01 PASS PASS PASS
trig-syntax-bad-prefix-02 PASS PASS PASS
trig-syntax-bad-prefix-03 PASS PASS PASS
trig-syntax-bad-prefix-04 PASS PASS PASS
trig-syntax-bad-prefix-05 PASS PASS PASS
trig-syntax-bad-base-01 PASS PASS PASS
trig-syntax-bad-base-02 PASS PASS PASS
trig-syntax-bad-base-03 PASS PASS PASS
trig-syntax-bad-struct-02 PASS PASS PASS
trig-syntax-bad-struct-03 PASS PASS PASS
trig-syntax-bad-struct-04 PASS PASS PASS
trig-syntax-bad-struct-05 PASS PASS PASS
trig-syntax-bad-struct-06 PASS PASS PASS
trig-syntax-bad-struct-07 PASS PASS PASS
trig-syntax-bad-kw-01 PASS PASS PASS
trig-syntax-bad-kw-02 PASS PASS PASS
trig-syntax-bad-kw-03 PASS PASS PASS
trig-syntax-bad-kw-04 PASS PASS PASS
trig-syntax-bad-kw-05 PASS PASS PASS
trig-syntax-bad-n3-extras-01 PASS PASS PASS
trig-syntax-bad-n3-extras-02 PASS PASS PASS
trig-syntax-bad-n3-extras-03 PASS PASS PASS
trig-syntax-bad-n3-extras-04 PASS PASS PASS
trig-syntax-bad-n3-extras-05 PASS PASS PASS
trig-syntax-bad-n3-extras-06 PASS PASS PASS
trig-syntax-bad-n3-extras-07 PASS PASS PASS
trig-syntax-bad-n3-extras-08 PASS PASS PASS
trig-syntax-bad-n3-extras-09 PASS PASS PASS
trig-syntax-bad-n3-extras-10 PASS PASS PASS
trig-syntax-bad-n3-extras-11 PASS PASS PASS
trig-syntax-bad-n3-extras-12 PASS PASS PASS
trig-syntax-bad-n3-extras-13 PASS PASS PASS
trig-syntax-bad-struct-09 PASS PASS PASS
trig-syntax-bad-struct-10 PASS PASS PASS
trig-syntax-bad-struct-12 PASS PASS PASS
trig-syntax-bad-struct-13 PASS PASS PASS
trig-syntax-bad-struct-14 PASS PASS PASS
trig-syntax-bad-struct-15 PASS PASS PASS
trig-syntax-bad-struct-16 PASS PASS PASS
trig-syntax-bad-struct-17 PASS PASS PASS
trig-syntax-bad-lang-01 PASS PASS PASS
trig-syntax-bad-esc-01 PASS PASS PASS
trig-syntax-bad-esc-02 PASS PASS PASS
trig-syntax-bad-esc-03 PASS PASS PASS
trig-syntax-bad-esc-04 PASS PASS PASS
trig-syntax-bad-pname-01 PASS PASS PASS
trig-syntax-bad-pname-02 PASS PASS PASS
trig-syntax-bad-pname-03 PASS PASS PASS
trig-syntax-bad-string-01 PASS PASS PASS
trig-syntax-bad-string-02 PASS PASS PASS
trig-syntax-bad-string-03 PASS PASS PASS
trig-syntax-bad-string-04 PASS PASS PASS
trig-syntax-bad-string-05 PASS PASS PASS
trig-syntax-bad-string-06 PASS PASS PASS
trig-syntax-bad-string-07 PASS PASS PASS
trig-syntax-bad-num-01 PASS PASS PASS
trig-syntax-bad-num-02 PASS PASS PASS
trig-syntax-bad-num-03 PASS PASS PASS
trig-syntax-bad-num-04 PASS PASS PASS
trig-syntax-bad-num-05 PASS PASS PASS
trig-eval-struct-01 PASS PASS PASS
trig-eval-struct-02 PASS PASS PASS
trig-subm-01 PASS PASS PASS
trig-subm-02 PASS PASS PASS
trig-subm-03 PASS PASS PASS
trig-subm-04 PASS PASS PASS
trig-subm-05 PASS PASS PASS
trig-subm-06 PASS PASS PASS
trig-subm-07 PASS PASS PASS
trig-subm-08 PASS PASS PASS
trig-subm-09 PASS PASS PASS
trig-subm-10 PASS PASS PASS
trig-subm-11 PASS PASS PASS
trig-subm-12 PASS PASS PASS
trig-subm-13 PASS PASS PASS
trig-subm-14 PASS PASS PASS
trig-subm-15 PASS PASS PASS
trig-subm-16 PASS PASS PASS
trig-subm-17 PASS PASS PASS
trig-subm-18 PASS PASS PASS
trig-subm-19 PASS PASS PASS
trig-subm-20 PASS PASS PASS
trig-subm-21 PASS PASS PASS
trig-subm-22 PASS PASS PASS
trig-subm-23 PASS PASS PASS
trig-subm-24 PASS PASS PASS
trig-subm-25 PASS PASS PASS
trig-subm-26 PASS PASS PASS
trig-subm-27 PASS PASS PASS
trig-eval-bad-01 PASS PASS PASS
trig-eval-bad-02 PASS PASS PASS
trig-eval-bad-03 PASS PASS PASS
trig-eval-bad-04 PASS PASS PASS
trig-syntax-bad-blank-label-dot-end PASS PASS PASS
trig-syntax-bad-ln-dash-start PASS PASS PASS
trig-syntax-bad-ln-escape-start PASS PASS PASS
trig-syntax-bad-ln-escape PASS PASS PASS
trig-syntax-bad-missing-ns-dot-end PASS PASS PASS
trig-syntax-bad-missing-ns-dot-start PASS PASS PASS
trig-syntax-bad-ns-dot-end PASS PASS PASS
trig-syntax-bad-ns-dot-start PASS PASS PASS
trig-syntax-bad-number-dot-in-anon PASS PASS PASS
trig-syntax-bad-list-01 PASS PASS PASS
trig-syntax-bad-list-02 PASS PASS PASS
trig-syntax-bad-list-03 PASS PASS PASS
trig-syntax-bad-list-04 PASS PASS PASS
trig-syntax-blank-label PASS PASS PASS
trig-syntax-ln-colons PASS PASS PASS
trig-syntax-ln-dots PASS PASS PASS
trig-syntax-ns-dots PASS PASS PASS
trig-kw-graph-01 PASS PASS PASS
trig-kw-graph-02 PASS PASS PASS
trig-kw-graph-03 PASS PASS PASS
trig-kw-graph-04 PASS PASS PASS
trig-kw-graph-05 PASS PASS PASS
trig-kw-graph-06 PASS PASS PASS
trig-kw-graph-07 PASS PASS PASS
trig-kw-graph-08 PASS PASS PASS
trig-kw-graph-09 PASS PASS PASS
trig-kw-graph-10 PASS PASS PASS
trig-graph-bad-01 PASS PASS PASS
trig-graph-bad-02 PASS PASS PASS
trig-graph-bad-03 PASS PASS PASS
trig-graph-bad-04 PASS PASS PASS
trig-graph-bad-05 PASS PASS PASS
trig-graph-bad-06 PASS PASS PASS
trig-graph-bad-07 PASS PASS PASS
trig-graph-bad-08 PASS PASS PASS
trig-graph-bad-09 PASS PASS PASS
trig-graph-bad-10 PASS PASS PASS
trig-graph-bad-11 PASS PASS PASS
trig-bnodeplist-graph-bad-01 PASS PASS PASS
trig-collection-graph-bad-01 PASS PASS PASS
trig-collection-graph-bad-02 PASS PASS PASS
trig-turtle-01 PASS PASS PASS
trig-turtle-02 PASS PASS PASS
trig-turtle-03 PASS PASS PASS
trig-turtle-04 PASS PASS PASS
trig-turtle-05 PASS PASS PASS
trig-turtle-06 PASS PASS PASS
trig-turtle-bad-01 PASS PASS PASS
trig-turtle-bad-02 PASS PASS PASS
Percentage passed out of 335 Tests 100.0% 100.0% 100.0%

Test Subjects

This report was tested using the following test subjects:

Apache Jena
Description
Apache Jena provides a complete framework for building Semantic Web and Linked Data applications in Java, and provides: parsers for RDF/XML, Turtle and N-triples; a Java programming API; a complete implementation of the SPARQL query language; a rule-based inference engine for RDFS and OWL entailments; TDB (a non-SQL persistent triple store); SDB (a persistent triples store built on a relational store) and Fuseki, an RDF server using web protocols. Jena complies with all relevant recommendations for RDF and related technologies from the W3C.
Programming Language
Java
Home Page
http://jena.apache.org
Developer
Rob Vesse
Paolo Castagna
Chris Dollin
Stephen Allen
Ian Dickinson
Damian Steer
Andy Seaborne
Claude Warren
Dave Reynolds
Test Suite Compliance
335/335 (100.0%)
RDF::TriG
Description
TriG reader/writer for RDF.rb
Programming Language
Ruby
Home Page
http://github.com/ruby-rdf/rdf-trig
Developer
Home Page
http://greggkellogg.net/
Test Suite Compliance
335/335 (100.0%)
rdflib
Home Page
https://github.com/RDFLib/rdflib
Developer
Gunnar Aastrand Grimnes
Home Page
http://gromgull.net
Test Suite Compliance
335/335 (100.0%)

Individual Test Results

Individual test results used to construct this report are available here:

Test Definitions

Test anonymous_blank_node_graph

anonymous blank node graph

[] {<http://a.example/s> <http://a.example/p> <http://a.example/o> .}
<http://a.example/s> <http://a.example/p> <http://a.example/o> _:b1 .
Test labeled_blank_node_graph

labeled blank node graph

_:g {<http://a.example/s> <http://a.example/p> <http://a.example/o> .}
<http://a.example/s> <http://a.example/p> <http://a.example/o> _:b1 .
Test alternating_iri_graphs

alternating graphs with IRI names

@prefix : <http://example/> .
{:a :b :c.}
:G {:a :b :d.}
{:a :b :e.}
:G {:a :b :f.}
<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> .
Test alternating_bnode_graphs

alternating graphs with BNode names

@prefix : <http://example/> .
{:a :b :c.}
_:G {:a :b :d.}
{:a :b :e.}
_:G {:a :b :f.}
<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 .
Test trig-syntax-bad-base-04

@base inside graph (negative test)

# @base inside graph
{
@base <http://example/> .
}
Test trig-syntax-bad-base-05

BASE inside graph (negative test)

# BASE inside graph
{
BASE <http://example/>
}
Test trig-syntax-bad-prefix-06

@prefix inside graph (negative test)

# @prefix inside graph
{
@prefix ex: <http://example/> .
}
Test trig-syntax-bad-prefix-07

PREFIX inside graph (negative test)

# PREFIX inside graph
{
PREFIX ex: <http://example/>
}
Test trig-syntax-struct-06

missing '.'

# No DOT
{<http://example/s> <http://example/p> <http://example/o>}
Test trig-syntax-struct-07

trailing ';' no '.'

# Trailing ;
{<http://example/s> <http://example/p> <http://example/o> ;}
Test trig-syntax-minimal-whitespace-01

tests absense of whitespace in various positions

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.}
:{: : :}{: : :}:{: : :}
:{():()}{():[]}:{[]:[]}
Test IRI_subject

IRI subject

{<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> .}
<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> .
Test IRI_with_four_digit_numeric_escape

IRI with four digit numeric escape (\u)

{<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> .}
<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> .
Test IRI_with_eight_digit_numeric_escape

IRI with eight digit numeric escape (\U)

{<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> .}
<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> .
Test IRI_with_all_punctuation

IRI with all punctuation

{<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> .}
<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> .
Test bareword_a_predicate

bareword a predicate

{<http://a.example/s> a <http://a.example/o> .}
<http://example/graph> {<http://a.example/s> a <http://a.example/o> .}
<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> .
Test old_style_prefix

old-style prefix

@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> .}
<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> .
Test SPARQL_style_prefix

SPARQL-style prefix

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> .}
<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> .
Test prefixed_IRI_predicate

prefixed IRI predicate

@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> .}
<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> .
Test prefixed_IRI_object

prefixed IRI object

@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 .}
<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> .
Test prefix_only_IRI

prefix-only IRI (p:)

@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> .}
<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> .
Test prefix_with_PN_CHARS_BASE_character_boundaries

prefix with PN CHARS BASE character boundaries (prefix: AZazÀÖØöø...:)

@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}
<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> .
Test prefix_with_non_leading_extras

prefix with_non_leading_extras (_:a·̀ͯ‿.⁀)

@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> .}
<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> .
Test default_namespace_IRI

default namespace IRI (:ln)

@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> .}
<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> .
Test prefix_reassigned_and_used

prefix reassigned and used

@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> .}
<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> .
Test reserved_escaped_localName

reserved-escaped local name

@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> .}
<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> .
Test percent_escaped_localName

percent-escaped local name

@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> .}
<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> .
Test HYPHEN_MINUS_in_localName

HYPHEN-MINUS in local name

@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> .}
<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> .
Test underscore_in_localName

underscore in local name

@prefix p: <http://a.example/>.
{p:s_ <http://a.example/p> <http://a.example/o> .}
<http://a.example/s_> <http://a.example/p> <http://a.example/o> .
Test localname_with_COLON

localname with COLON

@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> .}
<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>.
Test localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries

localName with assigned, NFC-normalized, basic-multilingual-plane PN CHARS BASE character boundaries (p:AZazÀÖØöø...)

@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ÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯ .}
<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> .
Test localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries

localName with assigned, NFC-normalized PN CHARS BASE character boundaries (p:AZazÀÖØöø...)

@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ÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯𐀀󠇯 .}
<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> .
Test localName_with_nfc_PN_CHARS_BASE_character_boundaries

localName with nfc-normalize PN CHARS BASE character boundaries (p:AZazÀÖØöø...)

@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ÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿﨎﷏ﷰ￯𐀀󯿽 .}
<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> .
Test localName_with_leading_underscore

localName with leading underscore (p:_)

@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> .}
<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> .
Test localName_with_leading_digit

localName with leading digit (p:_)

@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> .}
<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> .
Test localName_with_non_leading_extras

localName with_non_leading_extras (_:a·̀ͯ‿.⁀)

@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> .}
<http://a.example/a·̀ͯ‿.⁀> <http://a.example/p> <http://a.example/o> .
<http://a.example/a·̀ͯ‿.⁀> <http://a.example/p> <http://a.example/o> <http://example/graph> .
Test old_style_base

old-style base

@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> .}
<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> .
Test SPARQL_style_base

SPARQL-style base

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> .}
<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> .
Test labeled_blank_node_subject

labeled blank node subject

{_:s <http://a.example/p> <http://a.example/o> .}
<http://example/graph> {_:s <http://a.example/p> <http://a.example/o> .}
_:b1 <http://a.example/p> <http://a.example/o> .
_:b1 <http://a.example/p> <http://a.example/o> <http://example/graph> .
Test labeled_blank_node_object

labeled blank node object

{<http://a.example/s> <http://a.example/p> _:o .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> _:o .}
<http://a.example/s> <http://a.example/p> _:b1 .
<http://a.example/s> <http://a.example/p> _:b1 <http://example/graph> .
Test labeled_blank_node_with_PN_CHARS_BASE_character_boundaries

labeled blank node with PN_CHARS_BASE character boundaries (_:AZazÀÖØöø...)

{<http://a.example/s> <http://a.example/p> _:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽 .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> _:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽 .}
<http://a.example/s> <http://a.example/p> _:b1 .
<http://a.example/s> <http://a.example/p> _:b1 <http://example/graph> .
Test labeled_blank_node_with_leading_underscore

labeled blank node with_leading_underscore (_:_)

{<http://a.example/s> <http://a.example/p> _:_ .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> _:_ .}
<http://a.example/s> <http://a.example/p> _:b1 .
<http://a.example/s> <http://a.example/p> _:b1 <http://example/graph> .
Test labeled_blank_node_with_leading_digit

labeled blank node with_leading_digit (_:0)

{<http://a.example/s> <http://a.example/p> _:0 .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> _:0 .}
<http://a.example/s> <http://a.example/p> _:b1 .
<http://a.example/s> <http://a.example/p> _:b1 <http://example/graph> .
Test labeled_blank_node_with_non_leading_extras

labeled blank node with_non_leading_extras (_:a·̀ͯ‿.⁀)

{<http://a.example/s> <http://a.example/p> _:a·̀ͯ‿.⁀ .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> _:a·̀ͯ‿.⁀ .}
<http://a.example/s> <http://a.example/p> _:b1 .
<http://a.example/s> <http://a.example/p> _:b1 <http://example/graph> .
Test anonymous_blank_node_subject

anonymous blank node subject

{[] <http://a.example/p> <http://a.example/o> .}
<http://example/graph> {[] <http://a.example/p> <http://a.example/o> .}
_:b1 <http://a.example/p> <http://a.example/o> .
_:b2 <http://a.example/p> <http://a.example/o> <http://example/graph> .
Test anonymous_blank_node_object

anonymous blank node object

{<http://a.example/s> <http://a.example/p> [] .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> [] .}
<http://a.example/s> <http://a.example/p> _:b1 .
<http://a.example/s> <http://a.example/p> _:b2 <http://example/graph> .
Test sole_blankNodePropertyList

sole blankNodePropertyList [ <p> <o> ] .

{[ <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> ] }
_: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> .
Test blankNodePropertyList_as_subject

blankNodePropertyList as subject [ … ] <p> <o> .

{[ <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> .}
_: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> .
Test blankNodePropertyList_as_object

blankNodePropertyList as object <s> <p> [ … ] .

{<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> ] .}
<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> .
Test blankNodePropertyList_with_multiple_triples

blankNodePropertyList with multiple triples [ <s> <p> ; <s2> <p2> ]

{[ <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> .}
_: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> .
Test nested_blankNodePropertyLists

nested blankNodePropertyLists [ <p1> [ <p2> <o2> ] ; <p3> <o3> ]

{[ <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> ].}
_: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> .
Test blankNodePropertyList_containing_collection

blankNodePropertyList containing collection [ <p1> ( … ) ]

{[ <http://a.example/p1> (1) ] .}
<http://example/graph> {[ <http://a.example/p1> (1) ] .}
_:b1 <http://a.example/p1> _:el1 .
_:el1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
_:el1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:b2 <http://a.example/p1> _:el2 <http://example/graph> .
_:el2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
_:el2 <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> .
Test collection_subject

collection subject

{(1) <http://a.example/p> <http://a.example/o> .}
<http://example/graph> {(1) <http://a.example/p> <http://a.example/o> .}
_:el1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
_:el1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:el1 <http://a.example/p> <http://a.example/o> .
_:el2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
_:el2 <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> .
_:el2 <http://a.example/p> <http://a.example/o> <http://example/graph> .
Test collection_object

collection object

{<http://a.example/s> <http://a.example/p> (1) .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> (1) .}
<http://a.example/s> <http://a.example/p> _:el1 .
_:el1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
_:el1 <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> _:el2 <http://example/graph> .
_:el2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
_:el2 <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> .
Test empty_collection

empty collection ()

{<http://a.example/s> <http://a.example/p> () .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> () .}
<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> .
Test nested_collection

nested collection (())

{<http://a.example/s> <http://a.example/p> ((1)) .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> ((1)) .}
<http://a.example/s> <http://a.example/p> _:outerEl1 .
_:outerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:innerEl1 .
_:innerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
_:innerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:outerEl1 <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> _:outerEl3 <http://example/graph> .
_:outerEl3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:innerEl3 <http://example/graph> .
_:innerEl3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
_:innerEl3 <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> .
_:outerEl3 <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> .
Test first

first, not last, non-empty nested collection

{<http://a.example/s> <http://a.example/p> ((1) 2) .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> ((1) 2) .}
<http://a.example/s> <http://a.example/p> _:outerEl1 .
_:outerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:innerEl1 .
_:innerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
_:innerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:outerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:outerEl2 .
_:outerEl2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "2"^^<http://www.w3.org/2001/XMLSchema#integer> .
_:outerEl2 <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> _:outerEl3 <http://example/graph> .
_:outerEl3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:innerEl3 <http://example/graph> .
_:innerEl3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
_:innerEl3 <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> .
_:outerEl3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:outerEl4 <http://example/graph> .
_:outerEl4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "2"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
_:outerEl4 <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> .
Test last

last, not first, non-empty nested collection

{<http://a.example/s> <http://a.example/p> (1 (2)) .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> (1 (2)) .}
<http://a.example/s> <http://a.example/p> _:outerEl1 .
_:outerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
_:outerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:outerEl2 .
_:outerEl2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:innerEl1 .
_:innerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "2"^^<http://www.w3.org/2001/XMLSchema#integer> .
_:innerEl1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:outerEl2 <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> _:outerEl3 <http://example/graph> .
_:outerEl3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
_:outerEl3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:outerEl4 <http://example/graph> .
_:outerEl4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:innerEl3 <http://example/graph> .
_:innerEl3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "2"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
_:innerEl3 <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> .
_:outerEl4 <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> .
Test LITERAL1

LITERAL1 'x'

{<http://a.example/s> <http://a.example/p> 'x' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> 'x' .}
<http://a.example/s> <http://a.example/p> "x" .
<http://a.example/s> <http://a.example/p> "x" <http://example/graph> .
Test LITERAL1_ascii_boundaries

LITERAL1_ascii_boundaries '\x00\x09\x0b\x0c\x0e\x26\x28...'

{<http://a.example/s> <http://a.example/p> '	&([]' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> ' &([]' .}
<http://a.example/s> <http://a.example/p> "\u0000\u0009\u000B\u000C\u000E\u0026\u0028\u005B\u005D\u007F" .
<http://a.example/s> <http://a.example/p> "\u0000\u0009\u000B\u000C\u000E\u0026\u0028\u005B\u005D\u007F" <http://example/graph> .
Test LITERAL1_with_UTF8_boundaries

LITERAL1_with_UTF8_boundaries '\x80\x7ff\x800\xfff...'

<http://a.example/s> <http://a.example/p> '€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽' .
<http://a.example/s> <http://a.example/p> "\u0080\u07FF\u0800\u0FFF\u1000\uCFFF\uD000\uD7FF\uE000\uFFFD\U00010000\U0003FFFD\U00040000\U000FFFFD\U00100000\U0010FFFD" .
Test LITERAL1_all_controls

LITERAL1_all_controls '\x00\x01\x02\x03\x04...'

{<http://a.example/s> <http://a.example/p> '	' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> ' ' .}
<http://a.example/s> <http://a.example/p> "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\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\u0009\u000B\u000C\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" <http://example/graph> .
Test LITERAL1_all_punctuation

LITERAL1_all_punctuation '!"#$%&()...'

{<http://a.example/s> <http://a.example/p> ' !"#$%&():;<=>?@[]^_`{|}~' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> ' !"#$%&():;<=>?@[]^_`{|}~' .}
<http://a.example/s> <http://a.example/p> " !\u0022#$%&():;<=>?@[]^_`{|}~" .
<http://a.example/s> <http://a.example/p> " !\u0022#$%&():;<=>?@[]^_`{|}~" <http://example/graph> .
Test LITERAL_LONG1

LITERAL_LONG1 '''x'''

{<http://a.example/s> <http://a.example/p> '''x''' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '''x''' .}
<http://a.example/s> <http://a.example/p> "x" .
<http://a.example/s> <http://a.example/p> "x" <http://example/graph> .
Test LITERAL_LONG1_ascii_boundaries

LITERAL_LONG1_ascii_boundaries '\x00\x26\x28...'

{<http://a.example/s> <http://a.example/p> '&([]' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '&([]' .}
<http://a.example/s> <http://a.example/p> "\u0000\u0026\u0028\u005B\u005D\u007F" .
<http://a.example/s> <http://a.example/p> "\u0000\u0026\u0028\u005B\u005D\u007F" <http://example/graph> .
Test LITERAL_LONG1_with_UTF8_boundaries

LITERAL_LONG1_with_UTF8_boundaries '\x80\x7ff\x800\xfff...'

<http://a.example/s> <http://a.example/p> '''€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽''' .
<http://a.example/s> <http://a.example/p> "\u0080\u07FF\u0800\u0FFF\u1000\uCFFF\uD000\uD7FF\uE000\uFFFD\U00010000\U0003FFFD\U00040000\U000FFFFD\U00100000\U0010FFFD" .
Test LITERAL_LONG1_with_1_squote

LITERAL_LONG1 with 1 squote '''a'b'''

{<http://a.example/s> <http://a.example/p> '''x'y''' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '''x'y''' .}
<http://a.example/s> <http://a.example/p> "x'y" .
<http://a.example/s> <http://a.example/p> "x'y" <http://example/graph> .
Test LITERAL_LONG1_with_2_squotes

LITERAL_LONG1 with 2 squotes '''a''b'''

{<http://a.example/s> <http://a.example/p> '''x''y''' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '''x''y''' .}
<http://a.example/s> <http://a.example/p> "x''y" .
<http://a.example/s> <http://a.example/p> "x''y" <http://example/graph> .
Test LITERAL2

LITERAL2 "x"

{<http://a.example/s> <http://a.example/p> "x" .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> "x" .}
<http://a.example/s> <http://a.example/p> "x" .
<http://a.example/s> <http://a.example/p> "x" <http://example/graph> .
Test LITERAL2_ascii_boundaries

LITERAL2_ascii_boundaries '\x00\x09\x0b\x0c\x0e\x21\x23...'

{<http://a.example/s> <http://a.example/p> "	!#[]" .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> " !#[]" .}
<http://a.example/s> <http://a.example/p> "\u0000\u0009\u000B\u000C\u000E\u0021\u0023\u005B\u005D\u007F" .
<http://a.example/s> <http://a.example/p> "\u0000\u0009\u000B\u000C\u000E\u0021\u0023\u005B\u005D\u007F" <http://example/graph> .
Test LITERAL2_with_UTF8_boundaries

LITERAL2_with_UTF8_boundaries '\x80\x7ff\x800\xfff...'

<http://a.example/s> <http://a.example/p> "€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽" .
<http://a.example/s> <http://a.example/p> "\u0080\u07FF\u0800\u0FFF\u1000\uCFFF\uD000\uD7FF\uE000\uFFFD\U00010000\U0003FFFD\U00040000\U000FFFFD\U00100000\U0010FFFD" .
Test LITERAL_LONG2

LITERAL_LONG2 """x"""

{<http://a.example/s> <http://a.example/p> """x""" .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> """x""" .}
<http://a.example/s> <http://a.example/p> "x" .
<http://a.example/s> <http://a.example/p> "x" <http://example/graph> .
Test LITERAL_LONG2_ascii_boundaries

LITERAL_LONG2_ascii_boundaries '\x00\x21\x23...'

{<http://a.example/s> <http://a.example/p> "!#[]" .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> "!#[]" .}
<http://a.example/s> <http://a.example/p> "\u0000\u0021\u0023\u005B\u005D\u007F" .
<http://a.example/s> <http://a.example/p> "\u0000\u0021\u0023\u005B\u005D\u007F" <http://example/graph> .
Test LITERAL_LONG2_with_UTF8_boundaries

LITERAL_LONG2_with_UTF8_boundaries '\x80\x7ff\x800\xfff...'

<http://a.example/s> <http://a.example/p> """€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽""" .
<http://a.example/s> <http://a.example/p> "\u0080\u07FF\u0800\u0FFF\u1000\uCFFF\uD000\uD7FF\uE000\uFFFD\U00010000\U0003FFFD\U00040000\U000FFFFD\U00100000\U0010FFFD" .
Test LITERAL_LONG2_with_1_squote

LITERAL_LONG2 with 1 squote """a"b"""

{<http://a.example/s> <http://a.example/p> """x"y""" .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> """x"y""" .}
<http://a.example/s> <http://a.example/p> "x\"y" .
<http://a.example/s> <http://a.example/p> "x\"y" <http://example/graph> .
Test LITERAL_LONG2_with_2_squotes

LITERAL_LONG2 with 2 squotes """a""b"""

{<http://a.example/s> <http://a.example/p> """x""y""" .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> """x""y""" .}
<http://a.example/s> <http://a.example/p> "x\"\"y" .
<http://a.example/s> <http://a.example/p> "x\"\"y" <http://example/graph> .
Test literal_with_CHARACTER_TABULATION

literal with CHARACTER TABULATION

{<http://a.example/s> <http://a.example/p> '	' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> ' ' .}
<http://a.example/s> <http://a.example/p> "\t" .
<http://a.example/s> <http://a.example/p> "\t" <http://example/graph> .
Test literal_with_BACKSPACE

literal with BACKSPACE

{<http://a.example/s> <http://a.example/p> '' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '' .}
<http://a.example/s> <http://a.example/p> "\u0008" .
<http://a.example/s> <http://a.example/p> "\u0008" <http://example/graph> .
Test literal_with_LINE_FEED

literal with LINE FEED

{<http://a.example/s> <http://a.example/p> '''
''' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '''
''' .}
<http://a.example/s> <http://a.example/p> "\n" .
<http://a.example/s> <http://a.example/p> "\n" <http://example/graph> .
Test literal_with_CARRIAGE_RETURN

literal with CARRIAGE RETURN

{<http://a.example/s> <http://a.example/p> '''
''' .}

<http://example/graph> {<http://a.example/s> <http://a.example/p> ''' ''' .}
<http://a.example/s> <http://a.example/p> "\r" .
<http://a.example/s> <http://a.example/p> "\r" <http://example/graph> .
Test literal_with_FORM_FEED

literal with FORM FEED

{<http://a.example/s> <http://a.example/p> '' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> ' ' .}
<http://a.example/s> <http://a.example/p> "\u000C" .
<http://a.example/s> <http://a.example/p> "\u000C" <http://example/graph> .
Test literal_with_REVERSE_SOLIDUS

literal with REVERSE SOLIDUS

{<http://a.example/s> <http://a.example/p> '\\' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '\\' .}
<http://a.example/s> <http://a.example/p> "\\" .
<http://a.example/s> <http://a.example/p> "\\" <http://example/graph> .
Test literal_with_escaped_CHARACTER_TABULATION

literal with escaped CHARACTER TABULATION

{<http://a.example/s> <http://a.example/p> '\t' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '\t' .}
<http://a.example/s> <http://a.example/p> "\t" .
<http://a.example/s> <http://a.example/p> "\t" <http://example/graph> .
Test literal_with_escaped_BACKSPACE

literal with escaped BACKSPACE

{<http://a.example/s> <http://a.example/p> '\b' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '\b' .}
<http://a.example/s> <http://a.example/p> "\u0008" .
<http://a.example/s> <http://a.example/p> "\u0008" <http://example/graph> .
Test literal_with_escaped_LINE_FEED

literal with escaped LINE FEED

{<http://a.example/s> <http://a.example/p> '\n' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '\n' .}
<http://a.example/s> <http://a.example/p> "\n" .
<http://a.example/s> <http://a.example/p> "\n" <http://example/graph> .
Test literal_with_escaped_CARRIAGE_RETURN

literal with escaped CARRIAGE RETURN

{<http://a.example/s> <http://a.example/p> '\r' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '\r' .}
<http://a.example/s> <http://a.example/p> "\r" .
<http://a.example/s> <http://a.example/p> "\r" <http://example/graph> .
Test literal_with_escaped_FORM_FEED

literal with escaped FORM FEED

{<http://a.example/s> <http://a.example/p> '\f' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '\f' .}
<http://a.example/s> <http://a.example/p> "\u000C" .
<http://a.example/s> <http://a.example/p> "\u000C" <http://example/graph> .
Test literal_with_numeric_escape4

literal with numeric escape4 \u

{<http://a.example/s> <http://a.example/p> '\u006F' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '\u006F' .}
<http://a.example/s> <http://a.example/p> "o" .
<http://a.example/s> <http://a.example/p> "o" <http://example/graph> .
Test literal_with_numeric_escape8

literal with numeric escape8 \U

{<http://a.example/s> <http://a.example/p> '\U0000006F' .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> '\U0000006F' .}
<http://a.example/s> <http://a.example/p> "o" .
<http://a.example/s> <http://a.example/p> "o" <http://example/graph> .
Test IRIREF_datatype

IRIREF datatype ""^^<t>

{<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> .}
<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> .
Test prefixed_name_datatype

prefixed name datatype ""^^p:t

@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 .}
<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> .
Test bareword_integer

bareword integer

{<http://a.example/s> <http://a.example/p> 1 .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> 1 .}
<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> .
Test bareword_decimal

bareword decimal

{<http://a.example/s> <http://a.example/p> 1.0 .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> 1.0 .}
<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> .
Test bareword_double

bareword double

{<http://a.example/s> <http://a.example/p> 1E0 .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> 1E0 .}
<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> .
Test double_lower_case_e

double lower case e

{<http://a.example/s> <http://a.example/p> 1e0 .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> 1e0 .}
<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> .
Test negative_numeric

negative numeric

{<http://a.example/s> <http://a.example/p> -1 .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> -1 .}
<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> .
Test positive_numeric

positive numeric

{<http://a.example/s> <http://a.example/p> +1 .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> +1 .}
<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> .
Test numeric_with_leading_0

numeric with leading 0

{<http://a.example/s> <http://a.example/p> 01 .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> 01 .}
<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> .
Test literal_true

literal true

{<http://a.example/s> <http://a.example/p> true .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> true .}
<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> .
Test literal_false

literal false

{<http://a.example/s> <http://a.example/p> false .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> false .}
<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> .
Test langtagged_non_LONG

langtagged non-LONG "x"@en

{<http://a.example/s> <http://a.example/p> "chat"@en .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> "chat"@en .}
<http://a.example/s> <http://a.example/p> "chat"@en .
<http://a.example/s> <http://a.example/p> "chat"@en <http://example/graph> .
Test langtagged_LONG

langtagged LONG """x"""@en

{<http://a.example/s> <http://a.example/p> """chat"""@en .}
<http://example/graph> {<http://a.example/s> <http://a.example/p> """chat"""@en .}
<http://a.example/s> <http://a.example/p> "chat"@en .
<http://a.example/s> <http://a.example/p> "chat"@en <http://example/graph> .
Test lantag_with_subtag

lantag with subtag "x"@en-us

{<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 .}
<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> .
Test objectList_with_two_objects

objectList with two objects … <o1>,<o2>

{<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> .}
<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> .
Test predicateObjectList_with_two_objectLists

predicateObjectList with two objectLists … <o1>,<o2>

{<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> .}
<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> .
Test repeated_semis_at_end

repeated semis at end <s> <p> <o> ;; <p2> <o2> .

{<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> .}
<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> .
Test repeated_semis_not_at_end

repeated semis not at end <s> <p> <o> ;;.

{<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>;; .}
<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> .
Test comment_following_localName

comment following localName

@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
.
}
<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> .
Test number_sign_following_localName

number sign following localName

@prefix p: <http://a.example/> .
<http://a.example/s> <http://a.example/p> p:o\#numbersign
.
<http://a.example/s> <http://a.example/p> <http://a.example/o#numbersign> .
Test comment_following_PNAME_NS

comment following PNAME_NS

@prefix p: <http://a.example/> .
<http://a.example/s> <http://a.example/p> p:#comment
.
<http://a.example/s> <http://a.example/p> <http://a.example/> .
Test number_sign_following_PNAME_NS

number sign following PNAME_NS

@prefix p: <http://a.example/>.
<http://a.example/s> <http://a.example/p> p:\#numbersign
.
<http://a.example/s> <http://a.example/p> <http://a.example/#numbersign> .
Test LITERAL_LONG2_with_REVERSE_SOLIDUS

REVERSE SOLIDUS at end of LITERAL_LONG2

@prefix : <http://example.org/ns#> .

{:s :p1 """test-\\""" .}
<http://example/graph> {:s :p1 """test-\\""" .}
<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> .
Test trig-syntax-bad-num-05

Bad number format (negative test)

{<http://example.org/resource> <http://example.org#pred> "value"@en^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .}
Test two_LITERAL_LONG2s

two LITERAL_LONG2s testing quote delimiter overrun

# 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""" .
}
<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" .
Test langtagged_LONG_with_subtag

langtagged LONG with subtag """Cheers"""@en-UK

# Test long literal with lang tag
@prefix : <http://example.org/ex#> .
{:a :b """Cheers"""@en-UK .}
<http://example/graph> {:a :b """Cheers"""@en-UK .}
<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> .
Test trig-syntax-file-01

Empty file


          
Test trig-syntax-file-02

Only comment

#Empty file.
Test trig-syntax-file-03

One comment, one empty line

#One comment, one empty line.

Test trig-syntax-uri-01

Only IRIs

{<http://example/s> <http://example/p> <http://example/o> .}
Test trig-syntax-uri-02

IRIs with Unicode escape

# x53 is capital S
{<http://example/\u0053> <http://example/p> <http://example/o> .}
Test trig-syntax-uri-03

IRIs with long Unicode escape

# x53 is capital S
{<http://example/\U00000053> <http://example/p> <http://example/o> .}
Test trig-syntax-uri-04

Legal IRIs

# IRI with all chars in it.
{<http://example/s> <http://example/p>
<scheme:!$%25&'()*+,-./0123456789:/@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~?#> .}
Test trig-syntax-base-01

@base

@base <http://example/> .
Test trig-syntax-base-02

BASE

BASE <http://example/>
Test trig-syntax-base-03

@base with relative IRIs

@base <http://example/> .
{<s> <p> <o> .}
Test trig-syntax-base-04

base with relative IRIs

base <http://example/>
{<s> <p> <o> .}
Test trig-syntax-prefix-01

@prefix

@prefix : <http://example/> .
Test trig-syntax-prefix-02

PreFIX

PreFIX : <http://example/>
Test trig-syntax-prefix-03

Empty PREFIX

PREFIX : <http://example/>
{:s :p :123 .}
Test trig-syntax-prefix-04

Empty @prefix with % escape

@prefix : <http://example/> .
{:s :p :%20 .}
Test trig-syntax-prefix-05

@prefix with no suffix

@prefix : <http://example/> .
{: : : .}
Test trig-syntax-prefix-06

colon is a legal pname character

# colon is a legal pname character
@prefix : <http://example/> .
@prefix x: <http://example/> .
{:a:b:c x:d:e:f :::: .}
Test trig-syntax-prefix-07

dash is a legal pname character

# dash is a legal pname character
@prefix x: <http://example/> .
{x:a-b-c x:p x:o .}
Test trig-syntax-prefix-08

underscore is a legal pname character

# underscore is a legal pname character
@prefix x: <http://example/> .
{x:_ x:p_1 x:o .}
Test trig-syntax-prefix-09

percents in pnames

# percents
@prefix : <http://example/> .
@prefix x: <http://example/> .
{:a%3E x:%25 :a%3Eb .}
Test trig-syntax-string-01

string literal

{<http://example/s> <http://example/p> "string" .}
Test trig-syntax-string-02

langString literal

{<http://example/s> <http://example/p> "string"@en .}
Test trig-syntax-string-03

langString literal with region

{<http://example/s> <http://example/p> "string"@en-uk .}
Test trig-syntax-string-04

squote string literal

{<http://example/s> <http://example/p> 'string' .}
Test trig-syntax-string-05

squote langString literal

{<http://example/s> <http://example/p> 'string'@en .}
Test trig-syntax-string-06

squote langString literal with region

{<http://example/s> <http://example/p> 'string'@en-uk .}
Test trig-syntax-string-07

long string literal with embedded single- and double-quotes

{<http://example/s> <http://example/p> """abc""def''ghi""" .}
Test trig-syntax-string-08

long string literal with embedded newline

{<http://example/s> <http://example/p> """abc
def""" .}
Test trig-syntax-string-09

squote long string literal with embedded single- and double-quotes

{<http://example/s> <http://example/p> '''abc
def''' .}
Test trig-syntax-string-10

long langString literal with embedded newline

{<http://example/s> <http://example/p> """abc
def"""@en .}
Test trig-syntax-string-11

squote long langString literal with embedded newline

{<http://example/s> <http://example/p> '''abc
def'''@en .}
Test trig-syntax-str-esc-01

string literal with escaped newline

{<http://example/s> <http://example/p> "a\n" .}
Test trig-syntax-str-esc-02

string literal with Unicode escape

{<http://example/s> <http://example/p> "a\u0020b" .}
Test trig-syntax-str-esc-03

string literal with long Unicode escape

{<http://example/s> <http://example/p> "a\U00000020b" .}
Test trig-syntax-pname-esc-01

pname with back-slash escapes

@prefix : <http://example/> .
{:s :p :\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\_\%AA .}
Test trig-syntax-pname-esc-02

pname with back-slash escapes (2)

@prefix : <http://example/> .
{:s :p :0123\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\_\%AA123 .}
Test trig-syntax-pname-esc-03

pname with back-slash escapes (3)

@prefix : <http://example/> .
{:xyz\~ :abc\.: : .}
Test trig-syntax-bnode-01

bnode subject

@prefix : <http://example/> .
{[] :p :o .}
Test trig-syntax-bnode-02

bnode object

@prefix : <http://example/> .
{:s :p [] .}
Test trig-syntax-bnode-03

bnode property list object

@prefix : <http://example/> .
{:s :p [ :q :o ] .}
Test trig-syntax-bnode-04

bnode property list object (2)

@prefix : <http://example/> .
{:s :p [ :q1 :o1 ; :q2 :o2 ] .}
Test trig-syntax-bnode-05

bnode property list subject

@prefix : <http://example/> .
{[ :q1 :o1 ; :q2 :o2 ] :p :o .}
Test trig-syntax-bnode-06

labeled bnode subject

@prefix : <http://example/> .
{_:a :p :o .}
Test trig-syntax-bnode-07

labeled bnode subject and object

@prefix : <http://example/> .
{:s :p _:a .
_:a :p :o .
}
Test trig-syntax-bnode-08

bare bnode property list

@prefix : <http://example/> .
{[ :p :o ] .}
Test trig-syntax-bnode-09

bnode property list

@prefix : <http://example/> .
{[ :p :o1,:2 ] .
:s :p :o .}
Test trig-syntax-bnode-10

mixed bnode property list and triple

@prefix : <http://example/> .
{
:s1 :p :o .
[ :p1 :o1 ; :p2 :o2 ] .
:s2 :p :o .
}
Test trig-syntax-number-01

integer literal

{<s> <p> 123 .}
Test trig-syntax-number-02

negative integer literal

{<s> <p> -123 .}
Test trig-syntax-number-03

positive integer literal

{<s> <p> +123 .}
Test trig-syntax-number-04

decimal literal

# This is a decimal.
{<s> <p> 123.0 . }
Test trig-syntax-number-05

decimal literal (no leading digits)

# This is a decimal.
{<s> <p> .1 . }
Test trig-syntax-number-06

negative decimal literal

# This is a decimal.
{<s> <p> -123.0 . }
Test trig-syntax-number-07

positive decimal literal

# This is a decimal.
{<s> <p> +123.0 . }
Test trig-syntax-number-08

integer literal with decimal lexical confusion

# This is an integer
{<s> <p> 123.}
Test trig-syntax-number-09

double literal

{<s> <p> 123.0e1 .}
Test trig-syntax-number-10

negative double literal

{<s> <p> -123e-1 .}
Test trig-syntax-number-11

double literal no fraction

{<s> <p> 123.E+1 .}
Test trig-syntax-datatypes-01

xsd:byte literal

@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
{<s> <p> "123"^^xsd:byte .}
Test trig-syntax-datatypes-02

integer as xsd:string

@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 .}
Test trig-syntax-kw-01

boolean literal (true)

{<s> <p> true .}
Test trig-syntax-kw-02

boolean literal (false)

{<s> <p> false .}
Test trig-syntax-kw-03

'a' as keyword

@prefix : <http://example/> .
{:s a :C .}
Test trig-syntax-struct-01

object list

@prefix : <http://example/> .
{:s :p :o1 , :o2 .}
Test trig-syntax-struct-02

predicate list with object list

@prefix : <http://example/> .
{:s :p1 :o1 ;
:p2 :o2 .
}
Test trig-syntax-struct-03

predicate list with object list and dangling ';'

@prefix : <http://example/> .
{:s :p1 :o1 ;
:p2 :o2 ;
.
}
Test trig-syntax-struct-04

predicate list with multiple ;;

@prefix : <http://example/> .
{:s :p1 :o1 ;;
:p2 :o2
.
}
Test trig-syntax-struct-05

predicate list with multiple ;;

@prefix : <http://example/> .
{:s :p1 :o1 ;
:p2 :o2 ;;
.
}
Test trig-syntax-lists-01

empty list

@prefix : <http://example/> .
{:s :p () .}
Test trig-syntax-lists-02

mixed list

@prefix : <http://example/> .
{:s :p (1 "2" :o) .}
Test trig-syntax-lists-03

isomorphic list as subject and object

@prefix : <http://example/> .
{(1) :p (1) .}
Test trig-syntax-lists-04

lists of lists

@prefix : <http://example/> .
{(()) :p (()) .}
Test trig-syntax-lists-05

mixed lists with embedded lists

@prefix : <http://example/> .
{(1 2 (1 2)) :p (( "a") "b" :o) .}
Test trig-syntax-bad-uri-01

Bad IRI : space (negative test)

# Bad IRI : space.
{<http://example/ space> <http://example/p> <http://example/o> .}
Test trig-syntax-bad-uri-02

Bad IRI : bad escape (negative test)

# Bad IRI : bad escape
{<http://example/\u00ZZ11> <http://example/p> <http://example/o> .}
Test trig-syntax-bad-uri-03

Bad IRI : bad long escape (negative test)

# Bad IRI : bad escape
{<http://example/\U00ZZ1111> <http://example/p> <http://example/o> .}
Test trig-syntax-bad-uri-04

Bad IRI : character escapes not allowed (negative test)

# Bad IRI : character escapes not allowed.
{<http://example/\n> <http://example/p> <http://example/o> .}
Test trig-syntax-bad-uri-05

Bad IRI : character escapes not allowed (2) (negative test)

# Bad IRI : character escapes not allowed.
{<http://example/\/> <http://example/p> <http://example/o> .}
Test trig-syntax-bad-prefix-01

No prefix (negative test)

# No prefix
{:s <http://example/p> "x" .}
Test trig-syntax-bad-prefix-02

No prefix (2) (negative test)

# No prefix
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
{<http://example/s> rdf:type :C .}
Test trig-syntax-bad-prefix-03

@prefix without URI (negative test)

# @prefix without URI.
@prefix ex: .
Test trig-syntax-bad-prefix-04

@prefix without prefix name (negative test)

# @prefix without prefix name .
@prefix <http://example/> .
Test trig-syntax-bad-prefix-05

@prefix without ':' (negative test)

# @prefix without :
@prefix x <http://example/> .
Test trig-syntax-bad-base-01

@base without URI (negative test)

# @base without URI.
@base .
Test trig-syntax-bad-base-02

@base in wrong case (negative test)

# @base in wrong case.
@BASE <http://example/> .
Test trig-syntax-bad-base-03

BASE without URI (negative test)

# FULL STOP used after SPARQL BASE
BASE <http://example/> .
{<s> <p> <o> .}
Test trig-syntax-bad-struct-02

Turtle is not N3 (negative test)

# TriG is not N3
<http://example/s> = <http://example/o> .
Test trig-syntax-bad-struct-03

Turtle is not NQuads (negative test)

# TriG is not NQuads
<http://example/s> <http://example/p> <http://example/o> <http://example/graph> .
Test trig-syntax-bad-struct-04

Turtle does not allow literals-as-subjects (negative test)

# TriG does not allow literals-as-subjects
{"hello" <http://example/p> <http://example/o> .}
Test trig-syntax-bad-struct-05

Turtle does not allow literals-as-predicates (negative test)

# TriG does not allow literals-as-predicates
{<http://example/s> "hello" <http://example/o> .}
Test trig-syntax-bad-struct-06

Turtle does not allow bnodes-as-predicates (negative test)

# TriG does not allow bnodes-as-predicates
{<http://example/s> [] <http://example/o> .}
Test trig-syntax-bad-struct-07

Turtle does not allow labeled bnodes-as-predicates (negative test)

# TriG does not allow bnodes-as-predicates
{<http://example/s> _:p <http://example/o> .}
Test trig-syntax-bad-kw-01

'A' is not a keyword (negative test)

@prefix : <http://example/> .
{:s A :C .}
Test trig-syntax-bad-kw-02

'a' cannot be used as subject (negative test)

@prefix : <http://example/> .
{a :p :o .}
Test trig-syntax-bad-kw-03

'a' cannot be used as object (negative test)

@prefix : <http://example/> .
{:s :p a .}
Test trig-syntax-bad-kw-04

'true' cannot be used as subject (negative test)

@prefix : <http://example/> .
{true :p :o .}
Test trig-syntax-bad-kw-05

'true' cannot be used as object (negative test)

@prefix : <http://example/> .
{:s true :o .}
Test trig-syntax-bad-n3-extras-01

{} fomulae not in Turtle (negative test)

# {} formulae not in Turtle
@prefix : <http://example/> .

{ :a :q :c . } :p :z .

Test trig-syntax-bad-n3-extras-02

= is not Turtle (negative test)

# = is not Turtle
@prefix : <http://example/> .

{:a = :b .}
Test trig-syntax-bad-n3-extras-03

N3 paths not in Turtle (negative test)

# N3 paths
@prefix : <http://example/> .
@prefix ns: <http://example/p#> .

{
:x.
ns:p.
ns:q :p :z .
}
Test trig-syntax-bad-n3-extras-04

N3 paths not in Turtle (negative test)

# N3 paths
@prefix : <http://example/> .
@prefix ns: <http://example/p#> .

{:x^ns:p :p :z .}
Test trig-syntax-bad-n3-extras-05

N3 is...of not in Turtle (negative test)

# N3 is...of
@prefix : <http://example/> .

{:z is :p of :x .}
Test trig-syntax-bad-n3-extras-06

N3 paths not in Turtle (negative test)

# = is not Turtle
@prefix : <http://example/> .

{:a.:b.:c .}
Test trig-syntax-bad-n3-extras-07

@keywords is not Turtle (negative test)

# @keywords is not Turtle
@keywords a .
{x a Item .}
Test trig-syntax-bad-n3-extras-08

@keywords is not Turtle (negative test)

# @keywords is not Turtle
@keywords a .
{x a Item .}
Test trig-syntax-bad-n3-extras-09

=> is not Turtle (negative test)