# Enumerating instances The RDF store contains various predicates for enumerating instances such as predicates, resources, graphs, etc. These are strictly speaking not needed as one can enumerate all predicates using a call like this:
distinct(rdf(_,P,_)).
This however is rather slow as it enumerates all triples in the database and checks them against a table of already produced predicates. The generator rdf_current_predicate/1 is much more efficient. It however does not guarantee that the predicate still has triples. In most cases generating too many resources will not change the result and a call to e.g., `rdf(_,P,_)` can be replaced by `rdf_current_predicate(P)`. If it is necessary that there are triples known using this pattern:
rdf_current_predicate(P), once(rdf(_,P,_)).
The available enumerators are given below. All of them, except for rdf_subject/1 may return too many answers, typically returning objects that have existed or exist inside a transaction or snapshot that is not visible from the current context. - rdf_current_predicate/1 - rdf_current_literal/1 - rdf_graph/1 - rdf_resource/1 - rdf_subject/1