:- use_module(library(semweb/rdf11)). [nondet]rdf(?S, 
?P, ?O)
[nondet]rdf(?S, 
?P, ?O)Triples consist of the following three terms:
Alias:Local, 
where Alias and Local are atoms. Each abbreviated IRI is expanded by the 
system to a full IRI.
^^ Type
Datatype IRI Prolog term xsd:float float xsd:double float xsd:decimal float (1) xsd:integer integer XSD integer sub-types integer xsd:boolean trueorfalsexsd:date date(Y,M,D)xsd:dateTime date_time(Y,M,D,HH,MM,SS)(2,3)xsd:gDay integer xsd:gMonth integer xsd:gMonthDay month_day(M,D)xsd:gYear integer xsd:gYearMonth year_month(Y,M)xsd:time time(HH,MM,SS)(2)
Notes:
(1) The current implementation of xsd:decimal values as 
floats is formally incorrect. Future versions of SWI-Prolog may 
introduce decimal as a subtype of rational.
(2) SS fields denote the number of seconds. This can either be an integer or a float.
(3) The date_time structure can have a 7th field that 
denotes the timezone offset in seconds as an integer.
In addition, a ground object value is translated into a properly typed RDF literal using rdf_canonical_literal/2.
There is a fine distinction in how duplicate statements are handled in rdf/[3,4]: backtracking over rdf/3 will never return duplicate triples that appear in multiple graphs. rdf/4 will return such duplicate triples, because their graph term differs.
| S | is the subject term. It is either a blank node or IRI. | 
| P | is the predicate term. It is always an IRI. | 
| O | is the object term. It is either a 
literal, a blank node or IRI (except for trueandfalsethat denote the values of datatype XSD boolean). | 
| G | is the graph term. It is always an IRI. | 
:- use_module(library(semweb/rdf_db)). [nondet]rdf(?Subject, 
?Predicate, ?Object)
[nondet]rdf(?Subject, 
?Predicate, ?Object)literal(Value) 
if the object is a literal value. If a value of the form 
NameSpaceID:LocalName is provided it is expanded to a ground atom using expand_goal/2. 
This implies you can use this construct in compiled code without paying 
a performance penalty. Literal values take one of the following forms:
rdf:datatype
TypeID. The Value is either the textual 
representation or a natural Prolog representation. See the option 
convert_typed_literal(:Convertor) of the parser. The storage layer 
provides efficient handling of atoms, integers (64-bit) and floats 
(native C-doubles). All other data is represented as a Prolog record.
For literal querying purposes, Object can be of the form
literal(+Query, -Value), where Query is one of the terms 
below. If the Query takes a literal argument and the value has a numeric 
type numerical comparison is performed.
icase(Text). Backward compatibility.
Backtracking never returns duplicate triples. Duplicates can be 
retrieved using rdf/4. The predicate rdf/3 
raises a type-error if called with improper arguments. If rdf/3 
is called with a term literal(_) as Subject or Predicate 
object it fails silently. This allows for graph matching goals like
rdf(S,P,O),rdf(O,P2,O2) to proceed without 
errors.