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.
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.
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.
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
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
<http://example.org/ns#> is defined, any mention of a
URI later in the document may use a qualified name that
foo: to stand for the longer URI. So for
example, the qualified name
foo:bar is a shorthand for
# 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
@ and the language tag. Datatype URIs
^^ 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
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:
\r(U+000D, carriage return)
\"(U+0022, double quote - only allowed inside strings)
\>(U+003E, greater than - only allowed inside IRI_REFs)
\UHHHHHHHH for writing Unicode characters by hexadecimal codepoint where H is a single hexadecimal digit.
See the String escapes section for full details.
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 .
a is equivalent to the URI
# this is a complete turtle document @prefix doc: <http://example.org/#ns> . <http://example.org/path> a doc:Document .
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
false and correspond to the
the XML Schema Datatype
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>
, 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 .
; 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 .
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.