Boulder(3pm) | User Contributed Perl Documentation | Boulder(3pm) |
Boulder - An API for hierarchical tag/value structures
# Read a series of People records from STDIN. # Add an "Eligibility" attribute to all those whose # Age >= 35 and Friends list includes "Fred" use Boulder::Stream; my $stream = Boulder::Stream->newFh; while ( my $record = <$stream> ) { next unless $record->Age >= 35; my @friends = $record->Friends; next unless grep {$_ eq 'Fred'} @friends; $record->insert(Eligibility => 'yes'); print $stream $record; }
Related manual pages:
basics ------ Stone hierarchical tag/value records Stone::Cursor Traverse a hierarchy Boulder::Stream stream-oriented storage for Stones Boulder::Store record-oriented storage for Stones Boulder::XML XML conversion for Stones Boulder::String conversion to strings genome-related --------------- Boulder::Genbank parse Genbank (DNA sequence) records Boulder::Blast parse BLAST (basic local alignment search tool) reports Boulder::Medline parse Medline (pubmed) records Boulder::Omim parse OMIM (online Mendelian inheritance in man) records Boulder::Swissprot parse Swissprot records Boulder::Unigene parse Unigene records
Boulder IO is a simple TAG=VALUE data format designed for sharing data between programs connected via a pipe. It is also simple enough to use as a common data exchange format between databases, Web pages, and other data representations.
The basic data format is very simple. It consists of a series of TAG=VALUE pairs separated by newlines. It is record-oriented. The end of a record is indicated by an empty delimiter alone on a line. The delimiter is "=" by default, but can be adjusted by the user.
An example boulder stream looks like this:
Name=Lincoln Stein Home=/u/bush202/lds32 Organization=Cold Spring Harbor Laboratory Login=lds32 Password_age=20 Password_expires=60 Alias=lstein Alias=steinl = Name=Leigh Deacon Home=/u/bush202/tanager Organization=Cold Spring Harbor Laboratory Login=tanager Password_age=2 Password_expires=60 =
Notes:
The simple boulder format can be extended to accommodate nested relations and other intresting structures. Nested records can be created in this way:
Name=Lincoln Stein Home=/u/bush202/lds32 Organization=Cold Spring Harbor Laboratory Login=lds32 Password_age=20 Password_expires=60 Privileges={ ChangePasswd=yes CronJobs=yes Reboot=yes Shutdown=no } = Name=Leigh Deacon Home=/u/bush202/tanager Organization=Cold Spring Harbor Laboratory Login=tanager Password_age=2 Password_expires=60 Privileges={ ChangePasswd=yes CronJobs=no Reboot=no Shutdown=no } =
As in the original format, tags may be multivalued. For example, there might be several Privilege record assigned to a login account. Each subrecord may contain further subrecords.
Within the program, a hierarchical record is encapsulated within a "Stone", an opaque structure that implements methods for fetching and settings its various tags.
The Boulder API was designed to make reading and writing of complex hierarchical records almost as easy as reading and writing single lines of text.
The Stone object encapsulates a set of tags and values. Any tag can be single- or multivalued, and tags are allowed to contain subtags to any depth. A simple set of methods named tags(), get(), put(), insert(), replace() and so forth, allows you to examine the tags that are available, get and set their values, and search for particular tags. In addition, an autoload mechanism allows you to use method calls to access tags, for example:
my @friends = $record->Friends;
is equivalent to:
my @friends = $record->get('Friends');
A Stone::Cursor class allows you to traverse Stones systematically.
A full explanation of the Stone class can be found in its manual page.
Lincoln D. Stein <lstein@cshl.org>, Cold Spring Harbor Laboratory, Cold Spring Harbor, NY. This module can be used and distributed on the same terms as Perl itself.
Boulder::Blast, Boulder::Genbank, Boulder::Medline, Boulder::Unigene, Boulder::Omim, Boulder::SwissProt
2022-06-08 | perl v5.34.0 |