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.
| Source | is a term Graph:Line. If Source is instantiated, passing an atom is the same as passing Atom:_. | 
rdf(Subject, Predicate, Object) is 
true exploiting the rdfs:subPropertyOf predicate as well as inverse 
predicates declared using rdf_set_predicate/2 
with the
inverse_of property.inverse_of(Pred).symmetric(true) 
or inverse_of(P2) properties.
If used with either Subject or Object unbound, it first returns the origin, followed by the reachable nodes in breadth-first search-order. The implementation internally looks one solution ahead and succeeds deterministically on the last solution. This predicate never generates the same node twice and is robust against cycles in the transitive relation.
With all arguments instantiated, it succeeds deterministically if a path can be found from Subject to Object. Searching starts at Subject, assuming the branching factor is normally lower. A call with both Subject and Object unbound raises an instantiation error. The following example generates all subclasses of rdfs:Resource:
?- rdf_reachable(X, rdfs:subClassOf, rdfs:'Resource'). X = 'http://www.w3.org/2000/01/rdf-schema#Resource' ; X = 'http://www.w3.org/2000/01/rdf-schema#Class' ; X = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#Property' ; ...
infinite to impose no distance-limit.