module RDF::Enumerable

An RDF statement enumeration mixin.

Classes that include this module must implement an ‘#each` method that yields {RDF::Statement RDF statements}.

@example Checking whether any statements exist

enumerable.empty?

@example Checking how many statements exist

enumerable.count

@example Checking whether a specific statement exists

enumerable.statement?(RDF::Statement(subject, predicate, object))
enumerable.triple?([subject, predicate, object])
enumerable.quad?([subject, predicate, object, graph_name])

@example Checking whether a specific value exists

enumerable.subject?(RDF::URI("https://rubygems.org/gems/rdf"))
enumerable.predicate?(RDF::RDFS.label)
enumerable.object?(RDF::Literal("A Ruby library for working with Resource Description Framework (RDF) data.", language: :en))
enumerable.graph?(RDF::URI("http://ar.to/#self"))

@example Enumerating all statements

enumerable.each_statement do |statement|
  puts statement.inspect
end

@example Enumerating all statements in the form of triples

enumerable.each_triple do |subject, predicate, object|
  puts [subject, predicate, object].inspect
end

@example Enumerating all statements in the form of quads

enumerable.each_quad do |subject, predicate, object, graph_name|
  puts [subject, predicate, object, graph_name].inspect
end

@example Enumerating all terms

enumerable.each_subject   { |term| puts term.inspect }
enumerable.each_predicate { |term| puts term.inspect }
enumerable.each_object    { |term| puts term.inspect }
enumerable.each_term      { |term| puts term.inspect }

@example Obtaining all statements

enumerable.statements  #=> [RDF::Statement(subject1, predicate1, object1), ...]
enumerable.triples     #=> [[subject1, predicate1, object1], ...]
enumerable.quads       #=> [[subject1, predicate1, object1, graph_name1], ...]

@example Obtaining all unique values

enumerable.subjects(unique: true)    #=> [subject1, subject2, subject3, ...]
enumerable.predicates(unique: true)  #=> [predicate1, predicate2, predicate3, ...]
enumerable.objects(unique: true)     #=> [object1, object2, object3, ...]
enumerable.graph_names(unique: true) #=> [graph_name1, graph_name2, graph_name3, ...]

@see RDF::Graph @see RDF::Repository