Copyright © 2004-2023 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
This page describes W3C RDF 1.1 Working Group's test suite.
The test manifests and entries are built automatically from manifest.ttl using a Rake task. Tests may be contributed via pull request to https://github.com/w3c/rdf-tests with suitable changes to the manifest.ttl and referenced files.
Distributed under both the W3C Test Suite License and the W3C 3-clause BSD License. To contribute to a W3C Test Suite, see the policies and contribution forms.
UNDER BOTH MUTUALLY EXCLUSIVE LICENSES, THIS DOCUMENT AND ALL DOCUMENTS, TESTS AND SOFTWARE THAT LINK THIS STATEMENT ARE PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.
anonymous blank node graph
labeled blank node graph
alternating graphs with IRI names
alternating graphs with BNode names
@base inside graph (negative test)
BASE inside graph (negative test)
@prefix inside graph (negative test)
PREFIX inside graph (negative test)
missing '.'
trailing ';' no '.'
tests absense of whitespace in various positions
IRI subject
IRI with four digit numeric escape (\u)
IRI with eight digit numeric escape (\U)
IRI with all punctuation
bareword a predicate
old-style prefix
SPARQL-style prefix
prefixed IRI predicate
prefixed IRI object
prefix-only IRI (p:)
prefix with PN CHARS BASE character boundaries (prefix: AZazÀÖØöø…:)
prefix with_non_leading_extras (_:a·̀ͯ‿.⁀)
default namespace IRI (:ln)
prefix reassigned and used
reserved-escaped local name
percent-escaped local name
HYPHEN-MINUS in local name
underscore in local name
localname with COLON
localName with assigned, NFC-normalized, basic-multilingual-plane PN CHARS BASE character boundaries (p:AZazÀÖØöø…)
localName with assigned, NFC-normalized PN CHARS BASE character boundaries (p:AZazÀÖØöø…)
localName with nfc-normalize PN CHARS BASE character boundaries (p:AZazÀÖØöø…)
localName with leading underscore (p:_)
localName with leading digit (p:_)
localName with_non_leading_extras (_:a·̀ͯ‿.⁀)
old-style base
SPARQL-style base
labeled blank node subject
labeled blank node object
labeled blank node with PN_CHARS_BASE character boundaries (_:AZazÀÖØöø…)
labeled blank node with_leading_underscore (:)
labeled blank node with_leading_digit (_:0)
labeled blank node with_non_leading_extras (_:a·̀ͯ‿.⁀)
anonymous blank node subject
anonymous blank node object
sole blankNodePropertyList [ <p>
blankNodePropertyList as subject [ … ] <p>
blankNodePropertyList as object <p> [ … ] .
blankNodePropertyList with multiple triples [ <p> ;
nested blankNodePropertyLists [
blankNodePropertyList containing collection [
collection subject
collection object
empty collection ()
nested collection (())
first, not last, non-empty nested collection
last, not first, non-empty nested collection
LITERAL1 'x'
LITERAL1_ascii_boundaries '\x00\x09\x0b\x0c\x0e\x26\x28…'
LITERAL1_with_UTF8_boundaries '\x80\x7ff\x800\xfff…'
LITERAL1_all_controls '\x00\x01\x02\x03\x04…'
LITERAL1_all_punctuation '!"#$%&()…'
LITERAL_LONG1 '''x'''
LITERAL_LONG1_ascii_boundaries '\x00\x26\x28…'
LITERAL_LONG1_with_UTF8_boundaries '\x80\x7ff\x800\xfff…'
LITERAL_LONG1 with 1 squote '''a'b'''
LITERAL_LONG1 with 2 squotes '''a''b'''
LITERAL2 "x"
LITERAL2_ascii_boundaries '\x00\x09\x0b\x0c\x0e\x21\x23…'
LITERAL2_with_UTF8_boundaries '\x80\x7ff\x800\xfff…'
LITERAL_LONG2 """x"""
LITERAL_LONG2_ascii_boundaries '\x00\x21\x23…'
LITERAL_LONG2_with_UTF8_boundaries '\x80\x7ff\x800\xfff…'
LITERAL_LONG2 with 1 squote """a"b"""
LITERAL_LONG2 with 2 squotes """a""b"""
literal with CHARACTER TABULATION
literal with BACKSPACE
literal with LINE FEED
literal with CARRIAGE RETURN
literal with FORM FEED
literal with REVERSE SOLIDUS
literal with escaped CHARACTER TABULATION
literal with escaped BACKSPACE
literal with escaped LINE FEED
literal with escaped CARRIAGE RETURN
literal with escaped FORM FEED
literal with numeric escape4 \u
literal with numeric escape8 \U
IRIREF datatype ""^^
prefixed name datatype ""^^p:t
bareword integer
bareword decimal
bareword double
double lower case e
negative numeric
positive numeric
numeric with leading 0
literal true
literal false
langtagged non-LONG "x"@en
langtagged LONG """x"""@en
lantag with subtag "x"@en-us
objectList with two objects …
predicateObjectList with two objectLists …
repeated semis at end <p>
repeated semis not at end <p>
comment following localName
number sign following localName
comment following PNAME_NS
number sign following PNAME_NS
REVERSE SOLIDUS at end of LITERAL_LONG2
Bad number format (negative test)
two LITERAL_LONG2s testing quote delimiter overrun
langtagged LONG with subtag """Cheers"""@en-UK
Empty file
Only comment
One comment, one empty line
Only IRIs
IRIs with Unicode escape
IRIs with long Unicode escape
Legal IRIs
@base
BASE
@base with relative IRIs
base with relative IRIs
@prefix
PreFIX
Empty PREFIX
Empty @prefix with % escape
@prefix with no suffix
colon is a legal pname character
dash is a legal pname character
underscore is a legal pname character
percents in pnames
string literal
langString literal
langString literal with region
squote string literal
squote langString literal
squote langString literal with region
long string literal with embedded single- and double-quotes
long string literal with embedded newline
squote long string literal with embedded single- and double-quotes
long langString literal with embedded newline
squote long langString literal with embedded newline
string literal with escaped newline
string literal with Unicode escape
string literal with long Unicode escape
pname with back-slash escapes
pname with back-slash escapes (2)
pname with back-slash escapes (3)
bnode subject
bnode object
bnode property list object
bnode property list object (2)
bnode property list subject
labeled bnode subject
labeled bnode subject and object
bare bnode property list
bnode property list
mixed bnode property list and triple
integer literal
negative integer literal
positive integer literal
decimal literal
decimal literal (no leading digits)
negative decimal literal
positive decimal literal
integer literal with decimal lexical confusion
double literal
negative double literal
double literal no fraction
xsd:byte literal
integer as xsd:string
boolean literal (true)
boolean literal (false)
'a' as keyword
object list
predicate list with object list
predicate list with object list and dangling ';'
predicate list with multiple ;;
predicate list with multiple ;;
empty list
mixed list
isomorphic list as subject and object
lists of lists
mixed lists with embedded lists
Bad IRI : space (negative test)
Bad IRI : bad escape (negative test)
Bad IRI : bad long escape (negative test)
Bad IRI : character escapes not allowed (negative test)
Bad IRI : character escapes not allowed (2) (negative test)
No prefix (negative test)
No prefix (2) (negative test)
@prefix without URI (negative test)
@prefix without prefix name (negative test)
@prefix without ':' (negative test)
@base without URI (negative test)
@base in wrong case (negative test)
BASE without URI (negative test)
Colon in bnode label not allowed (negative test)
Colon in bnode label not allowed (negative test)
Turtle is not N3 (negative test)
Turtle is not NQuads (negative test)
Turtle does not allow literals-as-subjects (negative test)
Turtle does not allow literals-as-predicates (negative test)
Turtle does not allow bnodes-as-predicates (negative test)
Turtle does not allow labeled bnodes-as-predicates (negative test)
'A' is not a keyword (negative test)
'a' cannot be used as subject (negative test)
'a' cannot be used as object (negative test)
'true' cannot be used as subject (negative test)
'true' cannot be used as object (negative test)
{} fomulae not in TriG (negative test)
= is not TriG (negative test)
N3 paths not in TriG (negative test)
N3 paths not in TriG (negative test)
N3 is…of not in TriG (negative test)
N3 paths not in TriG (negative test)
@keywords is not TriG (negative test)
@keywords is not TriG (negative test)
=> is not TriG (negative test)
<= is not TriG (negative test)
@forSome is not TriG (negative test)
@forAll is not TriG (negative test)
@keywords is not TriG (negative test)
extra '.' (negative test)
extra '.' (negative test)
subject, predicate, no object (negative test)
subject, predicate, no object (negative test)
literal as subject (negative test)
literal as predicate (negative test)
bnode as predicate (negative test)
labeled bnode as predicate (negative test)
langString with bad lang (negative test)
Bad string escape (negative test)
Bad string escape (negative test)
Bad string escape (negative test)
Bad string escape (negative test)
'~' must be escaped in pname (negative test)
Bad %-sequence in pname (negative test)
Bad unicode escape in pname (negative test)
mismatching string literal open/close (negative test)
mismatching string literal open/close (negative test)
mismatching string literal long/short (negative test)
mismatching long string literal open/close (negative test)
Long literal with missing end (negative test)
Long literal with extra quote (negative test)
Long literal with extra squote (negative test)
Bad number format (negative test)
Bad number format (negative test)
Bad number format (negative test)
Bad number format (negative test)
Bad number format (negative test)
triple with IRIs
triple with IRIs and embedded whitespace
Blank subject
@prefix and qnames
, operator
; operator
empty [] as subject and object
non-empty [] as subject and object
'a' as predicate
simple collection
empty collection
integer datatyped literal
decimal integer canonicalization
tests for rdf:_
bare : allowed
simple long literal
long literals with escapes
floating point number
empty literals, normal and long variant
positive integer, decimal and doubles
negative integer, decimal and doubles
long literal ending in double quote
boolean literals
comments
no final mewline
repeating a @prefix changes pname definition
Variations on decimal canonicalization
Repeating @base changes base for relative IRI lookup
Bad IRI : good escape, bad charcater (negative evaluation test)
Bad IRI : hex 3C is < (negative evaluation test)
Bad IRI : hex 3E is (negative evaluation test)
Bad IRI : {abc} (negative evaluation test)
Blank node label must not end in dot
Local name must not begin with dash
Bad hex escape at start of local name
Bad hex escape in local name
Prefix must not end in dot (error in triple, not prefix directive like trig-syntax-bad-ns-dot-end)
Prefix must not start with dot (error in triple, not prefix directive like trig-syntax-bad-ns-dot-end)
Prefix must not end in dot
Prefix must not start with dot
Dot delimeter may not appear in anonymous nodes
Free-standing list outside {} : bad syntax
Free-standing list of zero-elements outside {} : bad syntax
Free-standing list inside {} : bad syntax
Free-standing list of zero elements : bad syntax
Characters allowed in blank node labels
Colons in pname local names
Dots in pname local names
Dots in namespace names
Named graphs can be proceeded by GRAPH
Trailing . not necessary inside {}
Named graph may be empty
Use of empty prefix inside named graph
Named graph may be named with BNode _:a
Named graph may be named with BNode []
Named graph may be named with PNAME
Named graph with PNAME and empty graph
GRAPH but no name - GRAPH is not used with the default graph
GRAPH not followed by DOT
GRAPH needs {}
GRAPH needs {}
GRAPH and a name, not several
GRAPH - Must close {}
GRAPH may not include a GRAPH
@graph is not a keyword
Directives not allowed inside GRAPH
A graph may not be named with an empty collection
A graph may not be named with a collection
A graph may not be named with a blankNodePropertyList
A graph may not be named with an empty collection
A graph may not be named with a collection
TriG can parse Turtle
TriG can parse Turtle (repeated PREFIX)
TriG can parse Turtle (blankNodePropertyList subject)
TriG can parse Turtle (blankNodePropertyList subject)
TriG can parse Turtle (bare blankNodePropertyList)
TriG can parse Turtle (collection subject and object)
Trailing dot required in Turtle block
TriG is not N-Quads
IRI resolution (RFC3986 original cases)
IRI resolution (RFC3986 using base IRI with trailing slash)
IRI resolution (RFC3986 using base IRI with file path)
IRI resolution (miscellaneous cases)