Class: RDF::RDFXML::Reader
- Inherits:
-
RDF::Reader
- Object
- RDF::Reader
- RDF::RDFXML::Reader
- Includes:
- Util::Logger
- Defined in:
- vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader.rb,
vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader/rexml.rb,
vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader/nokogiri.rb
Overview
An RDF/XML parser in Ruby
Based on RDF/XML Syntax Specification: http://www.w3.org/TR/REC-rdf-syntax/
Extension: A nodeElement can also use the rdf:resource attribute, if none of the other standard attributes are defined.
Defined Under Namespace
Constant Summary collapse
- CORE_SYNTAX_TERMS =
%w(RDF ID annotation annotationNodeID about parseType resource nodeID datatype).map {|n| "http://www.w3.org/1999/02/22-rdf-syntax-ns##{n}"}
- OLD_TERMS =
%w(aboutEach aboutEachPrefix bagID).map {|n| "http://www.w3.org/1999/02/22-rdf-syntax-ns##{n}"}
Constants included from Util::Logger
Instance Attribute Summary collapse
-
#implementation ⇒ Module
readonly
Returns the XML implementation module for this reader instance.
-
#version ⇒ String
readonly
Version of RDF to use.
Attributes inherited from RDF::Reader
Attributes included from Enumerable
Instance Method Summary collapse
-
#close ⇒ Object
Document closed when read in initialize.
-
#each_statement {|statement| ... }
Iterates the given block for each RDF statement in the input.
-
#each_triple {|subject, predicate, object| ... }
Iterates the given block for each RDF triple in the input.
-
#initialize(input = $stdin, **options) {|reader| ... } ⇒ reader
constructor
Initializes the RDF/XML reader instance.
-
#rewind ⇒ Object
No need to rewind, as parsing is done in initialize.
Methods included from Util::Logger
#log_debug, #log_depth, #log_error, #log_fatal, #log_info, #log_recover, #log_recovering?, #log_statistics, #log_warn, #logger
Methods inherited from RDF::Reader
#base_uri, #canonicalize?, each, #each_pg_statement, #encoding, #fail_object, #fail_predicate, #fail_subject, for, format, #intern?, #lineno, open, options, #prefix, #prefixes, #prefixes=, #read_statement, #read_triple, #to_sym, to_sym, #valid?, #validate?
Methods included from Util::Aliasing::LateBound
Methods included from Enumerable
add_entailment, #canonicalize, #canonicalize!, #dump, #each_graph, #each_object, #each_predicate, #each_quad, #each_subject, #each_term, #entail, #enum_graph, #enum_object, #enum_predicate, #enum_quad, #enum_statement, #enum_subject, #enum_term, #enum_triple, #graph?, #graph_names, #invalid?, #method_missing, #object?, #objects, #predicate?, #predicates, #project_graph, #quad?, #quads, #respond_to_missing?, #statement?, #statements, #subject?, #subjects, #supports?, #term?, #terms, #to_a, #to_h, #to_set, #triple?, #triples, #valid?, #validate!
Methods included from Isomorphic
#bijection_to, #isomorphic_with?
Methods included from Countable
Methods included from RDF::Readable
Constructor Details
#initialize(input = $stdin, **options) {|reader| ... } ⇒ reader
Initializes the RDF/XML reader instance.
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader.rb', line 159 def initialize(input = $stdin, **, &block) super do @library = case [:library] when nil # Use Nokogiri when available, and REXML otherwise: defined?(::Nokogiri) ? :nokogiri : :rexml when :nokogiri, :rexml [:library] else log_fatal("expected :rexml or :nokogiri, but got #{[:library].inspect}", exception: ArgumentError) end require "rdf/rdfxml/reader/#{@library}" @implementation = case @library when :nokogiri then Nokogiri when :rexml then REXML end self.extend(@implementation) input.rewind if input.respond_to?(:rewind) initialize_xml(input, **) rescue log_fatal($!.) if root.nil? log_info("Empty document") elsif !doc_errors.empty? log_error("Synax errors") {doc_errors} end block.call(self) if block_given? end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RDF::Enumerable
Instance Attribute Details
#implementation ⇒ Module (readonly)
Returns the XML implementation module for this reader instance.
126 127 128 |
# File 'vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader.rb', line 126 def implementation @implementation end |
#version ⇒ String (readonly)
Version of RDF to use. Currently, only "1.2" is defined.
131 132 133 |
# File 'vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader.rb', line 131 def version @version end |
Instance Method Details
#close ⇒ Object
Document closed when read in initialize
195 |
# File 'vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader.rb', line 195 def close; end |
#each_statement {|statement| ... }
This method returns an undefined value.
Iterates the given block for each RDF statement in the input.
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader.rb', line 203 def each_statement(&block) if block_given? # Block called from add_statement @callback = block return unless root log_fatal "root must be a proxy not a #{root.class}" unless root.is_a?(@implementation::NodeProxy) add_debug(root, "base_uri: #{base_uri.inspect}") rdf_nodes = root.xpath("//rdf:RDF", "rdf" => RDF.to_uri.to_s) if rdf_nodes.size == 0 # If none found, root element may be processed as an RDF Node ec = EvaluationContext.new(base_uri, root, @graph) do |prefix, value| prefix(prefix, value) end nodeElement(root, ec) else rdf_nodes.each do |node| log_fatal "node must be a proxy not a #{node.class}" unless node.is_a?(@implementation::NodeProxy) # XXX Skip this element if it's contained within another rdf:RDF element # Extract base, lang, direction, version and namespaces from parents to create proper evaluation context ec = EvaluationContext.new(base_uri, nil, @graph) ec.extract_from_ancestors(node) do |prefix, value| prefix(prefix, value) end node.children.each {|el| next unless el.element? log_fatal "el must be a proxy not a #{el.class}" unless el.is_a?(@implementation::NodeProxy) new_ec = ec.clone(el) do |prefix, value| prefix(prefix, value) end nodeElement(el, new_ec) } end end if validate? && log_statistics[:error] raise RDF::ReaderError, "Errors found during processing" end end enum_for(:each_statement) end |
#each_triple {|subject, predicate, object| ... }
This method returns an undefined value.
Iterates the given block for each RDF triple in the input.
258 259 260 261 262 263 264 265 |
# File 'vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader.rb', line 258 def each_triple(&block) if block_given? each_statement do |statement| block.call(*statement.to_triple) end end enum_for(:each_triple) end |
#rewind ⇒ Object
No need to rewind, as parsing is done in initialize
192 |
# File 'vendor/bundler/ruby/3.4.0/bundler/gems/rdf-rdfxml-14ee5432437b/lib/rdf/rdfxml/reader.rb', line 192 def rewind; end |