It's very nice to know that you can access Java libraries from within a Ruby. For example I decided to do a little experiment to create a TreeModel to display the contents of the loaded XSD definition in a JTree.
Here's an initial (and incomplete) implementation of the model:
require "java"
include_class 'javax.swing.JTree'
include_class 'javax.swing.JFrame'
include_class 'javax.swing.JScrollPane'
include_class 'java.awt.BorderLayout'
include_class 'javax.swing.tree.TreeModel'
class XsdTreeModel 
  include TreeModel
  attr_reader :schema
  def initialize(s)
    @schema = s
  end
  def getChild(a,i)      
    case a
      when XSDInfo::SchemaInformation
        return a.elements.values[i]                                 
      when XSDInfo::SchemaElement
        return a.element_type
      when XSDInfo::SchemaComplexType
        return a.attributes.values[i]
      end
  end
        def getChildCount(a)
    case a
      when XSDInfo::SchemaInformation
        return a.elements.length
      when XSDInfo::SchemaElement
        return 1
      when XSDInfo::SchemaComplexType
        return a.attributes.length
      else
        return 0
      end
  end
  def getIndexOfChild(a,h) 
    case a
      when XSDInfo::SchemaInformation
        return a.elements.values.index(h)
      when XSDInfo::SchemaElement
        return 0
      when XSDInfo::SchemaComplexType
        return a.attributes.index(h)
      else 
        return -1
      end
  end
  def getRoot()
    return @schema
  end
  def isLeaf(o)
    return false
  end
  # Interface methods without implementation 
  def addTreeModelListener(l)
  end
  def removeTreeModelListener(l)
  end
  def valueForPathChanged(arg0, arg1) 
  end
end
Now we can use it:
sc = XSDInfo::SchemaCollection.new
sc.add_schema XSDInfo::SchemaInformation.new("xhtml1-strict.xsd")
sc.namespaces.each {|ns| sc[ns].solve_references sc}
a_schema = sc[sc.namespaces[0]]
f = JFrame.new
f.setSize(300,300)
f.getContentPane.setLayout(BorderLayout.new)
tree = JTree.new
sp = JScrollPane.new(tree)
tree.setModel(XsdTreeModel.new(a_schema))
f.getContentPane.add(sp,BorderLayout::CENTER)
f.setVisible(true)
Running this program generates the desired tree:
 
