On Fri, Nov 18, 2011 at 8:42 PM, Joel VanderWerf <joelvanderwerf / gmail.com> wrote: > On 11/18/2011 08:09 AM, R. Kumar wrote: >> >> For yaml, is there a way to say "give me title and author where category >> = 'unix' etc in some format. Are there tools that can read up the >> structure of any yml file and allow us to query telling *what* we want >> without having to understand yaml format, and *how* to retrieve it. > > Does ypath help? > > Never used it myself.... > > http://yaml4r.sourceforge.net/doc/page/parsing_yaml_documents.htm > https://www.ruby-toolbox.com/gems/ytools Oh, interesting: XPath for Yaml. Apparently it's part of the std lib - at least with 1.9.2 I did not need to install something: robert@fussel:~/projects/rbp-blog$ irb19 -r yaml irb(main):001:0> players = YAML::parse( <<EOY ) irb(main):002:1" player: irb(main):003:1" - given: Sammy irb(main):004:1" family: Sosa irb(main):005:1" - given: Ken irb(main):006:1" family: Griffey irb(main):007:1" - given: Mark irb(main):008:1" family: McGwire irb(main):009:1" EOY => #<Syck::Map:0x95943c8> irb(main):010:0> players => #<Syck::Map:0x95943c8> irb(main):011:0> players.class => Syck::Map irb(main):012:0> players.select '//given' => [#<Syck::Scalar:0x95953f4>, #<Syck::Scalar:0x9594fe4>, #<Syck::Scalar:0x9594738>] irb(main):013:0> players.select('//given').transform NoMethodError: undefined method `transform' for #<Array:0x98f5058> from (irb):13 from /usr/local/bin/irb19:12:in `<main>' irb(main):014:0> players.select('//given').map &:class => [Syck::Scalar, Syck::Scalar, Syck::Scalar] irb(main):019:0> players.select('//given').map &:value => ["Sammy", "Ken", "Mark"] Still the issue with multiple files would hold. Rahul, I believe this is your major problem: you have to define relationships between data from different sources within the query, because there is no inherent relationship between those files. It's a bit like a federated database approach for RDBMS: if you combine different databases which know nothing of each other to a single database you need a federation layer which does all the SQL interpretation and joining between different sources. Bottom line: you're easier off by having it in one Yaml file only. :-) You could write a transformation routine which reads in all the different sources makes the connections and then allows you to query a single object graph. Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/