Module: ActiveSesame::ResultParser

Defined in:
lib/active_sesame/result_parser.rb

Class Method Summary collapse

Class Method Details

.hash_values(xml_document) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/active_sesame/result_parser.rb', line 26

def self.hash_values(xml_document)
  xml_document = REXML::Document.new(xml_document) if xml_document.class == String
  keys = []
  xml_document.elements.each("/sparql/head/variable") do |variable|
    keys << variable.attributes["name"]
	end
  xml_document = REXML::Document.new(xml_document) if xml_document.class == String
  hash = {}
	xml_document.elements.each("/sparql/results/result") do |result|
	  hash[result.elements["binding[@name='#{keys[0]}']/uri|literal"].text] = result.elements["binding[@name='#{keys[1]}']/uri|literal"].text
	end
	return hash
end

.singular_values(xml_document) ⇒ Object



19
20
21
22
23
24
# File 'lib/active_sesame/result_parser.rb', line 19

def self.singular_values(xml_document)
  xml_document = self.to_document(xml_document)
  values = []
	xml_document.find("/sparql/results/result/binding").each {|binding| values << self.value_from_binding(binding) }
	return values
end

.tableize(xml_document) ⇒ Object

def ResultParser.append_features(someClass)



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/active_sesame/result_parser.rb', line 5

def self.tableize(xml_document)
  xml_document = self.to_document(xml_document)
  rows = []
  xml_document.find("/sparql/results/result").each do |result|
    hash = {}
    result.each_element do |binding|
      key = binding.attributes.to_h["name"]
      hash[key] = value_from_binding(binding)
    end
    rows << hash
  end
  return rows
end

.type_cast_literal(literal_element) ⇒ Object



50
51
52
53
54
# File 'lib/active_sesame/result_parser.rb', line 50

def self.type_cast_literal(literal_element)
	#puts literal_element.attributes["datatype"] #Use when Exception thrown "nil is not a Symbol"
	return literal_element.content.send(RDFConstants.literal_to_proc_hash[literal_element.attributes.to_h["datatype"]]) if literal_element.attributes.to_h["datatype"]
	return literal_element.text
end

.value_from_binding(binding) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/active_sesame/result_parser.rb', line 40

def self.value_from_binding(binding)
  literal = binding.find_first("literal")
  uri = binding.find_first("uri")
  if uri
    uri.content
  elsif literal
    type_cast_literal(literal)
  end
end