Tim Berners-Lee
Date: 1998, last change: $Id: Notation3.html,v 1.49
2001/11/27 23:59:33 timbl Exp $
Status: Tries to keep ahead of changes to the code. There are
now machine-readable grammars for N3.
Up to Design Issues
An RDF language for the Semantic Web
Notation 3 - original handwritten grammar
See the main Notation3 page.
Original hand-written grammar
Tokenizing not explicitly specified in that white space is
not in the BNF for simplicity here. White space must be
inserted whenever the following token could start with a
character which could extend the preceding token.
All URIs are quoted with angle brackets. Qualified names have
colons, so unquoted alphanumerics are all keywords, unless
the @keywords directive is given, in which case the keywords
given are keywords and anything else is a localname in the
default namespace. Any keyword may be given even if not in
the keyword list by prefacing it with "@".
Non-terminal productions are defined first, terminals after
-
document
-
void
statementlist period
-
statement
-
subject propertylist
directive
universal
existential
-
statementlist
-
void
subject property-list
statement period statementlist
-
subject
-
item
-
verb
-
prop (same as: has xxx)
has prop (same
as: xxx )
is prop
of (inverse direction)
a (same as: has rdf:type )
= (same as: has daml:equivaent)
=> (same as: log:implies )
<= (same as: is log:implies of
)
-
prop
-
node
-
node
-
uri-ref2
anonnode
variable
number
string
this (identifies the current formula
- deprectaed from 2002/08
-
anonnode
-
[ property-list ] (a
blank node, rerad as "something which ..." )
{ statementlist } (
a formula, the statementlist itself as a literal resource
)
( itemlist
) ( short for: eg [rdf:first node1;
rdf:rest [ rdf:first node2; rdf:rest: rdf:nil ]])
-
universal
-
@forAll uriref2list period
-
existential
-
@forSome urirefslist period
-
uriref2list
-
void
uriref2 uriref2list
-
prefix
-
alpha
prefix alphanumeric
_ (special ntuples hack. Everything in _ namespace is
implictly existentially qualified at the current scope.
Must not be used in >1 scope.)
-
variable
-
? localname
(rule writing hack - implicitly universally quantified
in parent formula of current)
-
propertylist
-
void ( to allow an anonymous node
by itself [:a :b ]. But :a. generates no statements. )
verb objectlist
verb objectlist ; propertylist
-
objectlist
-
object
object , objectlist
-
item
-
path
node of path (Not implemented, just an idea)
-
itemlist
-
void
item itemlist
-
path
-
node
path traverse
node ( same as [ is node of path
] )
path uparrow
node (same as [node path] )
-
uri-ref2
-
qname
< URI-Reference >
-
qname
-
prefix : localname
localname ??? Allow omit
colon when prefix void - keyword clash
-
object
-
item
-
directive
-
@prefix prefix
: uri-ref2
period ( Namespace declaration,
valid until changed. )
@keywords keywordlist period
-
localname
-
alpha
localname alphanumeric
-
keywordlist
-
void
keywordlist localname
-
number
-
integer
rational
real
-
integer
-
sign
digitstring
-
sign
-
+
-
void
-
digitstring
-
digit
digit digitstring
-
rational
-
integer / digitstring ratio between first
integer and digitstring
integer .
digitstring rational number
expressed as a decimal
-
real
-
integer e integer (a real number roughly equal to
i1 * ten ^ i2)
@prefix @keywords a this = => <= < >
: are all terminals which are just the strings
themselves. The following are other terminal symbols:
-
alpha
-
any letter a-z or A-Z case sensitive
-
ialpha
-
any unicode character not in the USASCII set and not
puctuation. Be conservative. @@ need precise category
membership, but beware that unicode character categories
change with addition of new characters.
-
ichar
-
any unicode character > U+007F. @@ Must excluse weird
cases such as byte-order mark
-
alphanumeric
-
alpha
any digit 0-9
_ (the underscore)
-
digit
-
any digit 0 - 9
-
period
-
A dot ".". (Was: a dot which, looking ahead, is
not followed by anything
except a closing bracket,
brace, or whitespace.)
-
traverse
-
An exclamation mark, "!". (was: A full stop "." which
is followed by alphanuemric, or open bracket or brace or
uriref etc)
-
string
-
" constant-value-with-escaping
"
""" constant value with escaping including
single or double occurences of quotes and/or newlines
"""
-
uparrow
-
"^"
-
URI-Reference
-
An absolute or relative URI, with or without a "#" in it.
See RFC____ as being amedended. Whitespace within the
URI-reference is ignored to ease the
inclusion oflong URIs in files. ASCII space (-0x20)
characters should obviously be escaped if they are actually
part of the URI.
-
void
-
nothing at all.