The Resource Description Framework (RDF) is a general-purpose language for representing information in the Web.

This document defines a textual syntax for RDF called Turtle that allows RDF graphs to be completely written in a compact and natural text form, with abbreviations for common usage patterns and datatypes. Turtle provides levels of compatibility with the existing N-Triples and Notation 3 formats as well as the triple pattern syntax of the SPARQL W3C Recommendation.

This document specifies a language that is in common usage under the name "Turtle". It is intended to be compatible with, and a subset of, Notation 3.

Introduction

This document defines Turtle, the Terse RDF Triple Language, a concrete syntax for RDF as defined in the RDF Concepts and Abstract Syntax ([[!RDF-CONCEPTS]]) W3C Recommendation. Turtle is an extension of N-Triples ([[!N-TRIPLES]]) carefully taking the most useful and appropriate things added from Notation 3 ([[N3]]) while staying within the RDF model.

The recommended XML syntax for RDF, RDF/XML ([[RDF-SYNTAX-GRAMMAR]]) has certain restrictions imposed by XML and the use of XML Namespaces that prevent it encoding all RDF graphs (some predicate URIs are forbidden and XML 1.0 forbids encoding some Unicode codepoints). These restrictions do not apply to Turtle.

Turtle is intended to be compatible with, and a subset of, Notation 3 (see Turtle compared to Notation 3), and is generally usable in systems that support N3.

The Turtle grammar for triples is a subset of the SPARQL Query Language for RDF [[RDF-SPARQL-QUERY]] grammar for TriplesBlock. The two grammars share production and terminal names where possible.

An Introduction to Turtle (Informative)

This section is informative. The Turtle Syntax and Turtle Grammar sections formally define the language.

A Turtle document allows writing down an RDF graph in a compact textual form. It consists of a sequence of directives, triple-generating statements or blank lines. Comments may be given after a # and continue to the end of the line.

Simple triples are a sequence of (subject, predicate, object) terms, separated by whitespace and terminated by '.' after each triple. This corresponds to N-Triples [[N-TRIPLES]].

There are three types of RDF Term: RDF URI References (URIs for short), literals and blank nodes.

RDF Terms

URIs are written enclosed in '<' and '>' and may be absolute RDF URI References or relative to the current base URI (described below).

# this is not a complete turtle document
<http://example.org/path/>
<http://example.org/path/#fragment>
</path>
<#fragment>
<>
				

URIs may also be abbreviated by using Turtle's @prefix directive that allows declaring a short prefix name for a long prefix of repeated URIs. This is useful for many RDF vocabularies that are all defined in nearby namespace URIs, possibly using XML's namespace mechanism that works in a similar fashion.

Once a prefix such as @prefix foo: <http://example.org/ns#> is defined, any mention of a URI later in the document may use a qualified name that starts foo: to stand for the longer URI. So for example, the qualified name foo:bar is a shorthand for the URI http://example.org/ns#bar.

# this is a complete turtle document
@prefix foo: <http://example.org/ns#> .
@prefix : <http://other.example.org/ns#> .
foo:bar foo: : .
:bar : foo:bar .
				

Literals are written either using double-quotes when they do not contain linebreaks like "simple literal" or """long literal""" when they may contain linebreaks.

# this is not a complete turtle document
"a string"
"""a string"""
"""a string
with newlines
"""
				

Literals may be given either a language suffix or a datatype URI but not both. Languages are indicated by appending the simple literal with @ and the language tag. Datatype URIs similarly append ^^ followed by any legal URI form (full or qualified) as described above to give the datatype URI.

# this is not a complete turtle document
"chat"
"chat"@en
"chat"@fr
"foo"^^<http://example.org/my/datatype>
"""10"""^^xsd:decimal
				

Blank nodes are written as _:BLANK_NODE_LABEL to provide a blank node either from the given BLANK_NODE_LABEL. A generated blank node may also be made with [] which is useful to provide the subject of RDF triples for each pair from the predicateObjectList or the root of the collection.

# this is not a complete turtle document
_:me
_:a1234
				

Literals and URIs may also contain escapes to encode surrounding syntax, non-printable characters and to encode Unicode characters by codepoint number (although they may also be given directly, encoded as UTF-8). The character escapes are:

See the String escapes section for full details.

Abbreviating URIs

The current base URI may be altered in a Turtle document using the @base directive. It allows further abbreviation of URIs but is usually for simplifying the URIs in the data, where the prefix directives are for vocabularies that describe the data.

Whenever this directive appears, it defines the base URI for which all relative URIs are resolved against. That includes URIs, qualified names, prefix directives as well as later base directives.

# this is a complete turtle document
# In-scope base URI is the document URI 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 .
				

The token a is equivalent to the URI <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>

# this is a complete turtle document
@prefix doc: <http://example.org/#ns> .
<http://example.org/path> a doc:Document .
				

Abbreviating common datatypes

Decimal integers may be written directly and correspond to the XML Schema Datatype xsd:integer. in both syntax and datatype URI.

# this is not a complete turtle document
-5
0
1
10
+1
# some long form examples
"-5"^^xsd:integer
"10"^^<http://www.w3.org/2001/XMLSchema#integer>
				

Decimal floating point double/fixed precision numbers may be written directly and correspond to the XML Schema Datatype xsd:double in both syntax and datatype URI.

# this is not a complete turtle document
1.3e2
10e0
-12.5e10
# some long form examples
"1.3e2"^^xsd:double
"-12.5e10"^^<http://www.w3.org/2001/XMLSchema#double>
				

Decimal floating point arbitrary precision numbers may be written directly and correspond to the XML Schema Datatype xsd:decimal. in both syntax and datatype URI.

# this is not a complete turtle document
0.0
1.0
1.234567890123456789
-5.0
# some long form examples
"0.0"^^xsd:decimal
"-5.0"^^<http://www.w3.org/2001/XMLSchema#decimal>
				

Boolean may be written directly as true or false and correspond to the the XML Schema Datatype xsd:boolean in both syntax and datatype URI.

# this is not a complete turtle document
true
false
# same in long form
"true"^^xsd:boolean
"false"^^<http://www.w3.org/2001/XMLSchema#boolean>
				

Abbreviating groups of triples

The , symbol may be used to repeat the subject and predicate of triples that only differ in the object RDF term.

# this is not a complete turtle document
:a :b :c ,
	:d .
# the last triple is :a :b :d .
				

The ; symbol may be used to repeat the subject of of triples that vary only in predicate and object RDF terms.

# this is not a complete turtle document
:a :b :c ;
:d :e .
# the last triple is :a :d :e .
				

Abbreviating RDF Collections

An RDF Collection may be abbreviated using a sequence of RDF Terms enclosed in ( ) brackets. Whitespace may be used to separate them, as usual. This format provides a blank node at the start of RDF Collection which may be used in further abbreviations.

# this is a complete turtle document
@prefix : <http://example.org/foo> .
# the value of this triple is the RDF collection blank node
:subject :predicate ( :a : b : c ) .

# an empty collection value - rdf:nil
:subject :predicate2 () .
				

See section Collections for the details on the long form of the generated triples.