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)

# => is not Turtle
@prefix : <http://example/> .
{:s => :o .}
Test trig-syntax-bad-n3-extras-10

<= is not Turtle (negative test)

# <= is not Turtle
@prefix : <http://example/> .
{:s <= :o .}
Test trig-syntax-bad-n3-extras-11

@forSome is not Turtle (negative test)

# @forSome is not Turtle
@prefix : <http://example/> .
@forSome :x .
Test trig-syntax-bad-n3-extras-12

@forAll is not Turtle (negative test)

# @forAll is not Turtle
@prefix : <http://example/> .
@forAll :x .
Test trig-syntax-bad-n3-extras-13

@keywords is not Turtle (negative test)

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

extra '.' (negative test)

# Too many DOTs
{<http://example/s> <http://example/p> <http://example/o> . .}
Test trig-syntax-bad-struct-10

extra '.' (negative test)

# Too many DOTs
{
<http://example/s> <http://example/p> <http://example/o> . .
<http://example/s1> <http://example/p1> <http://example/o1> .
}
Test trig-syntax-bad-struct-12

subject, predicate, no object (negative test)

{<http://example/s> }
Test trig-syntax-bad-struct-13

subject, predicate, no object (negative test)

{<http://example/s> <http://example/p> }
Test trig-syntax-bad-struct-14

literal as subject (negative test)

# Literal as subject
{"abc" <http://example/p> <http://example/p> .}
Test trig-syntax-bad-struct-15

literal as predicate (negative test)

# Literal as predicate
{<http://example/s> "abc" <http://example/p> .}
Test trig-syntax-bad-struct-16

bnode as predicate (negative test)

# BNode as predicate
{<http://example/s> [] <http://example/p> .}
Test trig-syntax-bad-struct-17

labeled bnode as predicate (negative test)

# BNode as predicate
{<http://example/s> _:a <http://example/p> .}
Test trig-syntax-bad-lang-01

langString with bad lang (negative test)

# Bad lang tag
{<http://example/s> <http://example/p> "string"@1 .}
Test trig-syntax-bad-esc-01

Bad string escape (negative test)

# Bad string escape
{<http://example/s> <http://example/p> "a\zb" .}
Test trig-syntax-bad-esc-02

Bad string escape (negative test)

# Bad string escape
{<http://example/s> <http://example/p> "\uWXYZ" .}
Test trig-syntax-bad-esc-03

Bad string escape (negative test)

# Bad string escape
{<http://example/s> <http://example/p> "\U0000WXYZ" .}
Test trig-syntax-bad-esc-04

Bad string escape (negative test)

# Bad string escape
{<http://example/s> <http://example/p> "\U0000WXYZ" .}
Test trig-syntax-bad-pname-01

'~' must be escaped in pname (negative test)

# ~ must be escaped.
@prefix : <http://example/> .
{:a~b :p :o .}
Test trig-syntax-bad-pname-02

Bad %-sequence in pname (negative test)

# Bad %-sequence
@prefix : <http://example/> .
{:a%2 :p :o .}
Test trig-syntax-bad-pname-03

Bad unicode escape in pname (negative test)

# No \u (x39 is "9")
@prefix : <http://example/> .
{:a\u0039 :p :o .}
Test trig-syntax-bad-string-01

mismatching string literal open/close (negative test)

@prefix : <http://example/> .
{:s :p "abc' .}
Test trig-syntax-bad-string-02

mismatching string literal open/close (negative test)

@prefix : <http://example/> .
{:s :p 'abc" .}
Test trig-syntax-bad-string-03

mismatching string literal long/short (negative test)

@prefix : <http://example/> .
{:s :p '''abc' .}
Test trig-syntax-bad-string-04

mismatching long string literal open/close (negative test)

@prefix : <http://example/> .
{:s :p """abc''' .}
Test trig-syntax-bad-string-05

Long literal with missing end (negative test)

# Long literal with missing end
@prefix : <http://example/> .
{
:s :p """abc
def
}
Test trig-syntax-bad-string-06

Long literal with extra quote (negative test)

# Long literal with 4"
@prefix : <http://example/> .
{:s :p """abc""""@en .}
Test trig-syntax-bad-string-07

Long literal with extra squote (negative test)

# Long literal with 4'
@prefix : <http://example/> .
{:s :p '''abc''''@en .}
Test trig-syntax-bad-num-01

Bad number format (negative test)

{<http://example/s> <http://example/p> 123.abc .}
Test trig-syntax-bad-num-02

Bad number format (negative test)

{<http://example/s> <http://example/p> 123e .}
Test trig-syntax-bad-num-03

Bad number format (negative test)

{<http://example/s> <http://example/p> 123abc .}
Test trig-syntax-bad-num-04

Bad number format (negative test)

{<http://example/s> <http://example/p> 0x123 .}
Test trig-syntax-bad-num-05

Bad number format (negative test)

{<http://example/s> <http://example/p> +-1 .}
Test trig-eval-struct-01

triple with IRIs

{<http://example/s> <http://example/p> <http://example/o> .}
<http://example/graph> {<http://example/s> <http://example/p> <http://example/o> .}
<http://example/s> <http://example/p> <http://example/o> .
<http://example/s> <http://example/p> <http://example/o> <http://example/graph> .
Test trig-eval-struct-02

triple with IRIs and embedded whitespace

{
<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> ;
.
}
<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> .
Test trig-subm-01

Blank subject

@prefix : <#> .
{[] :x :y .}
<http://example/graph> {[] :x :y .}
_:genid1 <http://www.w3.org/2013/TriGTests/trig-subm-01.trig#x> <http://www.w3.org/2013/TriGTests/trig-subm-01.trig#y> .
_:genid2 <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> .
Test trig-subm-02

@prefix and qnames

# 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 .
}
<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> .
Test trig-subm-03

, operator

# Test , operator
@prefix : <http://example.org/base#> .

{
:a :b :c,
:d,
:e .
}

<http://example/graph> {
:a :b :c,
:d,
:e .
}
<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> .
Test trig-subm-04

; operator

# Test ; operator
@prefix : <http://example.org/base#> .

{
:a :b :c ;
:d :e ;
:f :g .
}

<http://example/graph> {
:a :b :c ;
:d :e ;
:f :g .
}
<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> .
Test trig-subm-05

empty [] as subject and object

# Test empty [] operator; not allowed as predicate
@prefix : <http://example.org/base#> .

{
[] :a :b .
:c :d [] .
}

<http://example/graph> {
[] :a :b .
:c :d [] .
}
_:genid1 <http://example.org/base#a> <http://example.org/base#b> .
<http://example.org/base#c> <http://example.org/base#d> _:genid2 .
_:genid3 <http://example.org/base#a> <http://example.org/base#b> <http://example/graph> .
<http://example.org/base#c> <http://example.org/base#d> _:genid4 <http://example/graph> .
Test trig-subm-06

non-empty [] as subject and object

# 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 ] .
}
_:genid1 <http://example.org/base#a> <http://example.org/base#b> .
_:genid1 <http://example.org/base#c> <http://example.org/base#d> .
_:genid2 <http://example.org/base#g> <http://example.org/base#h> .
<http://example.org/base#e> <http://example.org/base#f> _:genid2 .
_:genid3 <http://example.org/base#a> <http://example.org/base#b> <http://example/graph> .
_:genid3 <http://example.org/base#c> <http://example.org/base#d> <http://example/graph> .
_:genid4 <http://example.org/base#g> <http://example.org/base#h> <http://example/graph> .
<http://example.org/base#e> <http://example.org/base#f> _:genid4 <http://example/graph> .
Test trig-subm-07

'a' as predicate

# 'a' only allowed as a predicate
@prefix : <http://example.org/base#> .
{:a a :b .}
<http://example/graph> {:a a :b .}
<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> .
Test trig-subm-08

simple collection

@prefix : <http://example.org/stuff/1.0/> .
{:a :b ( "apple" "banana" ) .}
<http://example/graph> {:a :b ( "apple" "banana" ) .}

_:genid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "banana" .
_:genid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:genid2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "apple" .
_:genid2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:genid1 .
<http://example.org/stuff/1.0/a> <http://example.org/stuff/1.0/b> _:genid2 .

_:genid3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "banana" <http://example/graph> .
_:genid3 <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> .
_:genid4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "apple" <http://example/graph> .
_:genid4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:genid3 <http://example/graph> .
<http://example.org/stuff/1.0/a> <http://example.org/stuff/1.0/b> _:genid4 <http://example/graph> .
Test trig-subm-09

empty collection

@prefix : <http://example.org/stuff/1.0/> .
{:a :b ( ) .}
<http://example/graph> {:a :b ( ) .}

<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> .
Test trig-subm-10

integer datatyped literal

# 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 .
}
_:hasParent <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#ObjectProperty> .
_:genid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Restriction> .
_:genid1 <http://www.w3.org/2002/07/owl#onProperty> _:hasParent .
_:genid1 <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> .
_:genid3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Restriction> <http://example/graph> .
_:genid3 <http://www.w3.org/2002/07/owl#onProperty> _:hasParent <http://example/graph> .
_:genid3 <http://www.w3.org/2002/07/owl#maxCardinality> "2"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example/graph> .
Test trig-subm-11

decimal integer canonicalization

{
<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 .
}
<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> .
Test trig-subm-12

- and _ in names and qnames

# 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" .
}
<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> .
Test trig-subm-13

tests for rdf:_<numbers> and other qnames starting with _

# 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" .
}
<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> .
Test trig-subm-14

bare : allowed

# Test for : allowed
@prefix : <http://example.org/ron> .

{
[] : [] .

: : : .

}

<http://example/graph> {
[] : [] .

: : : .

}
_:genid1 <http://example.org/ron> _:genid2 .
<http://example.org/ron> <http://example.org/ron> <http://example.org/ron> .
_:genid3 <http://example.org/ron> _:genid4 <http://example/graph> .
<http://example.org/ron> <http://example.org/ron> <http://example.org/ron> <http://example/graph> .
Test trig-subm-15

simple long literal

# 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""" .
}
<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> .
Test trig-subm-16

long literals with escapes

@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
""" .
}
<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> .
Test trig-subm-17

floating point number

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

{:a :b 1.0 .}
<http://example/graph> {:a :b 1.0 .}

<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> .
Test trig-subm-18

empty literals, normal and long variant

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

{
:a :b "" .

:c :d """""" .

}

<http://example/graph> {
:a :b "" .

:c :d """""" .

}
<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> .
Test trig-subm-19

positive integer, decimal and doubles

@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 .
}
<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> .
Test trig-subm-20

negative integer, decimal and doubles

@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 .
}
<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> .
Test trig-subm-21

long literal ending in double quote

# Test long literal
@prefix : <http://example.org/ex#> .
{:a :b """John said: "Hello World!\"""" .}
<http://example/graph> {:a :b """John said: "Hello World!\"""" .}
<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> .
Test trig-subm-22

boolean literals

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

{
:a :b true .
:c :d false .
}

<http://example/graph> {
:a :b true .
:c :d false .
}
<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> .
Test trig-subm-23

comments

# 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
}
<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> .
Test trig-subm-24

no final mewline

# comment line with no final newline test
@prefix : <http://example.org/#> .
{:a :b :c .}
<http://example/graph> {:a :b :c .}
#foo
<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> .
Test trig-subm-25

repeating a @prefix changes pname definition

@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 .}
<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> .
Test trig-subm-26

Variations on decimal canonicalization

{
<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> .
}
<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> .
Test trig-subm-27

Repeating @base changes base for relative IRI lookup

# 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 .}
<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> .
Test trig-eval-bad-01

Bad IRI : good escape, bad charcater (negative evaluation test)

# Bad IRI : good escape, bad charcater
{<http://example/\u0020> <http://example/p> <http://example/o> .}
Test trig-eval-bad-02

Bad IRI : hex 3C is < (negative evaluation test)

# Bad IRI : hex 3C is <
{<http://example/\u003C> <http://example/p> <http://example/o> .}
Test trig-eval-bad-03

Bad IRI : hex 3E is (negative evaluation test)

# Bad IRI : hex 3E is >
{<http://example/\u003E> <http://example/p> <http://example/o> .}
Test trig-eval-bad-04

Bad IRI : {abc} (negative evaluation test)

# Bad IRI
{<http://example/{abc}> <http://example/p> <http://example/o> .}
Test trig-syntax-bad-blank-label-dot-end

Blank node label must not end in dot

@prefix : <http://example/> .
{_:b1. :p :o .}
Test trig-syntax-bad-ln-dash-start

Local name must not begin with dash

@prefix : <http://example/> .
{:s :p :-o .}
Test trig-syntax-bad-ln-escape-start

Bad hex escape at start of local name

@prefix : <http://example/> .
{:s :p :%2o .}
Test trig-syntax-bad-ln-escape

Bad hex escape in local name

@prefix : <http://example/> .
{:s :p :o%2 .}
Test trig-syntax-bad-missing-ns-dot-end

Prefix must not end in dot (error in triple, not prefix directive like trig-syntax-bad-ns-dot-end)

{valid:s valid:p invalid.:o .}
Test trig-syntax-bad-missing-ns-dot-start

Prefix must not start with dot (error in triple, not prefix directive like trig-syntax-bad-ns-dot-end)

{.undefined:s .undefined:p .undefined:o .}
Test trig-syntax-bad-ns-dot-end

Prefix must not end in dot

@prefix eg. : <http://example/> .
{eg.:s eg.:p eg.:o .}
Test trig-syntax-bad-ns-dot-start

Prefix must not start with dot

@prefix .eg : <http://example/> .
{.eg:s .eg:p .eg:o .}
Test trig-syntax-bad-number-dot-in-anon

Dot delimeter may not appear in anonymous nodes

@prefix : <http://example/> .

{
:s
:p [
:p1 27.
] .
}
Test trig-syntax-bad-list-01

Free-standing list outside {} : bad syntax

# RDF collection without predicate-object-list
( 1 2 3 ) .
Test trig-syntax-bad-list-02

Free-standing list of zero-elements outside {} : bad syntax

# RDF collection without predicate-object-list
( 1 2 3 ) .
Test trig-syntax-bad-list-03

Free-standing list inside {} : bad syntax

# RDF collection without predicate-object-list
{ ( 1 2 3 ) }

Test trig-syntax-bad-list-04

Free-standing list of zero elements : bad syntax

# RDF collection without predicate-object-list
{ ( ) }

Test trig-syntax-blank-label

Characters allowed in blank node labels

@prefix : <http://example/> .
{
_:0b :p :o . # Starts with digit
_:_b :p :o . # Starts with underscore
_:b.0 :p :o . # Contains dot, ends with digit
}
Test trig-syntax-ln-colons

Colons in pname local names

@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: .
}
Test trig-syntax-ln-dots

Dots in pname local names

@prefix : <http://example/> .
{
:s.1 :p.1 :o.1 .
:s..2 :p..2 :o..2.
:3.s :3.p :3.
}
Test trig-syntax-ns-dots

Dots in namespace names

@prefix e.g: <http://example/> .
{e.g:s e.g:p e.g:o .}
Test trig-kw-graph-01

Named graphs can be proceeded by GRAPH

# GRAPH tests
PREFIX : <http://example/>

GRAPH :g { :s :p :o }
Test trig-kw-graph-02

Trailing . not necessary inside {}

# GRAPH tests
PREFIX : <http://example/>

GRAPH :g { :s :p :o . }
Test trig-kw-graph-03

Named graph may be empty

# GRAPH tests
PREFIX : <http://example/>

GRAPH :g { }
Test trig-kw-graph-04

# 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 }
Test trig-kw-graph-05

Use of empty prefix inside named graph

# GRAPH tests
PREFIX : <http://example/>

GRAPH :g { :s :p :o }
Test trig-kw-graph-06

# GRAPH tests
PREFIX : <http://example/>

GRAPH _:a { :s :p :o }
Test trig-kw-graph-07

Named graph may be named with BNode _:a

# GRAPH tests
PREFIX : <http://example/>

GRAPH [] { :s :p :o }
[] { :s :p :o }
GRAPH [] { :s :p :o }
Test trig-kw-graph-08

Named graph may be named with BNode []

# GRAPH tests
PREFIX : <http://example/>

GRAPH :g { :s :p :o }
Test trig-kw-graph-09

Named graph may be named with PNAME

# GRAPH tests
PREFIX : <http://example/>

GRAPH :g { :s :p :o }
Test trig-kw-graph-10

Named graph with PNAME and empty graph

# GRAPH tests
PREFIX : <http://example/>

GRAPH :g { }
Test trig-graph-bad-01

GRAPH but no name - GRAPH is not used with the default graph

# GRAPH tests
PREFIX : <http://example/>

# GRAPH but no name - GRAPH is not used with the default graph
GRAPH { :s :p :o }
Test trig-graph-bad-02

GRAPH not followed by DOT

# GRAPH tests
PREFIX : <http://example/>

# GRAPH not followed by DOT
GRAPH :g1 { :s :p :o } .
GRAPH :g2 { :s :p :o } .
Test trig-graph-bad-03

GRAPH needs {}

# GRAPH tests
PREFIX : <http://example/>

# GRAPH needs {}
GRAPH :g
:s :p :o .


Test trig-graph-bad-04

GRAPH needs {}

# GRAPH tests
PREFIX : <http://example/>

# GRAPH needs {}
GRAPH :s :p :o
Test trig-graph-bad-05

GRAPH and a name, not several

# GRAPH tests
PREFIX : <http://example/>

# GRAPH and a name, not several.
GRAPH :g1 :g2 { :s :p :o }
Test trig-graph-bad-06

GRAPH - Must close {}

# GRAPH tests
PREFIX : <http://example/>

# GRAPH - Must close {}
GRAPH :g { :s :p :o

Test trig-graph-bad-07

GRAPH may not include a GRAPH

# GRAPH tests
PREFIX : <http://example/>

# GRAPH and a triples block.
GRAPH :g {
:s :p :o .
GRAPH :g1 { :s1 :p1 :o1 }
}

Test trig-graph-bad-08

@graph is not a keyword

# GRAPH tests
PREFIX : <http://example/>

# GRAPH and a triples block.
@graph :g { :s :p :o }
Test trig-graph-bad-09

Directives not allowed inside GRAPH

# GRAPH tests
PREFIX : <http://example/>

# GRAPH - no directives
graph :g {
:s :p :o
prefix x: <http://example/x#>
x:s1 x:p1 x:o1 .
}



Test trig-graph-bad-10

A graph may not be named with an empty collection

# GRAPH tests
PREFIX : <http://example/>

# GRAPH - no lists
GRAPH () { :s :p :o }



Test trig-graph-bad-11

A graph may not be named with a collection

# GRAPH tests
PREFIX : <http://example/>

# GRAPH - no lists
graph (1 2) { :s :p :o }



Test trig-bnodeplist-graph-bad-01

A graph may not be named with a blankNodePropertyList

# BlankNodePropertyList as Graph Name
PREFIX : <http://example/>

[:p1 :o1] {:s :p :o}
Test trig-collection-graph-bad-01

A graph may not be named with an empty collection

# Collection as Graph Name
PREFIX : <http://example/>

() {:s :p :o}
Test trig-collection-graph-bad-02

A graph may not be named with a collection

# Collection as Graph Name
PREFIX : <http://example/>

(1 2) {:s :p :o}
Test trig-turtle-01

TriG can parse Turtle

# Turtle is TriG
PREFIX : <http://example/>

:s :p :o ;
:q 123 , 456 .

:s1 :p1 "more" .

Test trig-turtle-02

TriG can parse Turtle (repeated PREFIX)

# Turtle is TriG
PREFIX : <http://example/>

:s :p :o ;
:q 123 , 456 .

PREFIX : <http://example/ns#>

:s :p :o .
Test trig-turtle-03

TriG can parse Turtle (blankNodePropertyList subject)

# Turtle is TriG
prefix : <http://example/>

[ :p 123 ; :q 456 ] :r 1 .

Test trig-turtle-04

TriG can parse Turtle (blankNodePropertyList subject)

# Turtle is TriG
prefix : <http://example/>

[] :p :o .

Test trig-turtle-05

TriG can parse Turtle (bare blankNodePropertyList)

# Turtle is TriG
prefix : <http://example/>

[ :p :o ] .


Test trig-turtle-06

TriG can parse Turtle (collection subject and object)

# Turtle is TriG
prefix : <http://example/>

( 1 2 3 ) :p ( 4 5 6 ) .
Test trig-turtle-bad-01

Trailing dot required in Turtle block

# Turtle is TriG

# Trailing dot required in Turtle block.

:s :p :o
Test trig-turtle-bad-02

TriG is not N-Quads

# Turtle is TriG

# N-Quads.

:s :p :o :g .

Report Generation Software

This report generated by earl-report version 0.3.1 an Unlicensed Ruby application. More information is available at https://github.com/gkellogg/earl-report .

This software is provided by Gregg Kellogg in hopes that it might make the lives of conformance testers easier.