Class: RedGrape::Serializer::GraphMLSerializer
- Defined in:
- lib/red_grape/serializer/graphml_serializer.rb
Constant Summary collapse
- NAMESPACES =
{ 'xmlns' => 'http://graphml.graphdrawing.org/xmlns', 'xsi' => 'http://www.w3.org/2001/XMLSchema-instance' }
Instance Attribute Summary collapse
-
#graph ⇒ Object
readonly
Returns the value of attribute graph.
Instance Method Summary collapse
-
#initialize(graph) ⇒ GraphMLSerializer
constructor
A new instance of GraphMLSerializer.
- #load(filename) ⇒ Object
- #nodes(xml, elm) ⇒ Object
-
#parse_xml(xml) ⇒ Object
assumption: any sub-graph does not exist.
- #save ⇒ Object
Constructor Details
#initialize(graph) ⇒ GraphMLSerializer
Returns a new instance of GraphMLSerializer.
13 14 15 |
# File 'lib/red_grape/serializer/graphml_serializer.rb', line 13 def initialize(graph) @graph = graph end |
Instance Attribute Details
#graph ⇒ Object (readonly)
Returns the value of attribute graph.
11 12 13 |
# File 'lib/red_grape/serializer/graphml_serializer.rb', line 11 def graph @graph end |
Instance Method Details
#load(filename) ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/red_grape/serializer/graphml_serializer.rb', line 17 def load(filename) if filename =~ /^<\?xml/ parse_xml Nokogiri::XML(filename) else File.open(filename, 'r') do |file| parse_xml Nokogiri::XML(file) end end @graph end |
#nodes(xml, elm) ⇒ Object
65 66 67 |
# File 'lib/red_grape/serializer/graphml_serializer.rb', line 65 def nodes(xml, elm) xml.xpath(".//xmlns:#{elm}", NAMESPACES) end |
#parse_xml(xml) ⇒ Object
assumption: any sub-graph does not exist.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/red_grape/serializer/graphml_serializer.rb', line 29 def parse_xml(xml) vertices = {} edges = {} property_descriptions = {} nodes(xml, 'key').each do |key_elm| defaults = nodes key_elm, 'default' default = defaults.size == 0 ? nil : defaults.first.children.to_s prop = PropertyDescription.new key_elm['attr.name'], key_elm['attr.type'], default (property_descriptions[key_elm['for']] ||= {})[key_elm['id']] = prop end @graph.instance_variable_set :@property_descriptions, property_descriptions nodes(xml, 'node').each do |node_elm| vertex = Vertex.new @graph, node_elm['id'], :property_description => property_descriptions['node'] data = nodes node_elm, 'data' data.each do |data_elm| vertex.set_property data_elm['key'], data_elm.children.first.to_s end vertices[vertex.id] = vertex end @graph.instance_variable_set :@vertices, vertices nodes(xml, 'edge').each do |edge_elm| edge = Edge.new @graph, edge_elm['id'], edge_elm['source'], edge_elm['target'], edge_elm['label'], :property_description => property_descriptions['edge'] data = nodes edge_elm, 'data' data.each do |data_elm| edge.set_property data_elm['key'], data_elm.children.first.to_s end edges[edge.id] = edge end @graph.instance_variable_set :@edges, edges end |
#save ⇒ Object
69 70 |
# File 'lib/red_grape/serializer/graphml_serializer.rb', line 69 def save end |