Editors:
Jonathan Borden jonathan@openhealth.org
Pat Hayes phayes@ai.uwf.edu
This version: June 3, 2001
Previous version: May 24, 2001
This document defines an Abstract Syntax or Infoset for RDF [1]. RDF Statements are commonly refered to as triples of {predicate,subject,object}. In practice RDF Datastores may supplement the triple with associated information. This abstract syntax defines the supplemented information items.
A Context is a list (ordered set) of Statements
A Statement is represented by the 6-tuple: <predicate,subject,object, context, index, asserted>
An atom represents either an XML QName, according to XML Namespaces, or a quantified variable matching the EBNF:
atom := (quantvar | QName)
quantvar := ('?' Name) Name as defined in XML 1.0
A predicate is an atom
.
A subject is an atom.
An object is an atom. Note that literal strings may be represented by the data:
URI scheme.
A context is represented by a QName
The context allows separation of statements into lists which can be asserted as a group. Contexts allow 'coloring' of subgraphs. The document from which a set of statements arises forms a context (represented by its URI). Contexts can 'contain' other contexts.
The index
gives the index of a statement within a context in document order.
The index allows preservation of statement order as if each RDF <Description> defines a container, and folds the RDF concept of
container directly into the RDF Abstract Syntax.
The index allows representation of the statements contained by a context as a list which is an ordered set of tuples. Index also allows reference to a statement within a context using the syntax "/" number, where the number refers to the particular statement. This is the syntax of the XPointer child sequence.
If we remove index, how do we represent lists? Also consider using a special statement to indicate the last statement in a list.
asserted flags whether a statement is asserted within the context. Asserted statements are the root statements of expressions formulated from more than one statement.
An asserted statement is a root statement for expressions contained by a context.
If we remove asserted, how will we signal that the statement is the root statement of an expression? This seems to be the sole purpose of this flag.
A statement may be referred to by index
using a syntax consistent with the ChildSeq
syntax of XPointer []. For example,
the 2nd statement in a context is referred to as:
/2
This syntax allows reference to a particular statement in a context as if the context were an <rdf:Seq> container. One can refer to a range of statements by inserting a hyphen between the start and ending index of the range, e.g.: /2-6.
The statement:
(not (says jon (color sky blue))
is represented by the Statements:
The Squish [2] query: (dc:creator, foo, ?x)(foaf:mbox, ?x, mailto:jonathan@openhealth.org)
is represented as:
An s-expression may be represented in XML:
(or a b c d)
becomes
<or> <a/> <b/> <c/> <d/> </or>
In the case of representing an s-expression in RDF, the statement index is used to represent the list.