To create a Polyrex document from a string representation of a schema (e.g. a[n,x1,x2]/b[y,y2]/c[n]), the following script can be used:

require 'rexml/document'

class PolyrexSchema
include REXML

def initialize(s)

@doc = Document.new
node = Element.new 'root'
@doc.add node

s.scan(/\w+\[[^\]]*\]|\w+/).each do |x|
b1, b2 = x.split('[')
if b2 then
node = append_node node, b1 do |summary|
b2.scan(/\w+(?=[,\]])/).each {|x| summary.add Element.new x}
end
else
node = append_node node, x
end
end

end

def to_s
@doc.to_s
end

private

def append_node(node, name)
new_node = Element.new name
summary = Element.new 'summary'
yield(summary) if block_given?
new_node.add summary
records = Element.new 'records'
new_node.add records
node.add new_node
records
end
end

puts Document.write PolyrexSchema.new('q[n,x1,x2]/b1[y,y2]/c[n]').to_s
# see listing 1.
puts Document.write PolyrexSchema.new('q[n,x1,x2],b1[y,y2],c,g').to_s
# see listing 2.

listing 1.





























listing 2.






























Read more: http://feeds.dzone.com/~r/dzone/snippets/~3/V4KFYEDTAIk/11259