Ace::Object man page on Fedora

Man page or keyword search:  
man Server   31170 pages
apropos Keyword Search (all sections)
Output format
Fedora logo
[printable version]

Ace::Object(3)	      User Contributed Perl Documentation	Ace::Object(3)

NAME
       Ace::Object - Manipulate	 Ace Data Objects

SYNOPSIS
	   # open database connection and get an object
	   use Ace;
	   $db = Ace->connect(-host => 'beta.crbm.cnrs-mop.fr',
			      -port => 20000100);
	   $sequence  = $db->fetch(Sequence => 'D12345');

	   # Inspect the object
	   $r	 = $sequence->at('Visible.Overlap_Right');
	   @row	 = $sequence->row;
	   @col	 = $sequence->col;
	   @tags = $sequence->tags;

	   # Explore object substructure
	   @more_tags = $sequence->at('Visible')->tags;
	   @col	      = $sequence->at("Visible.$more_tags[1]")->col;

	   # Follow a pointer into database
	   $r	  = $sequence->at('Visible.Overlap_Right')->fetch;
	   $next  = $r->at('Visible.Overlap_left')->fetch;

	   # Classy way to do the same thing
	   $r	  = $sequence->Overlap_right;
	   $next  = $sequence->Overlap_left;

	   # Pretty-print object
	   print $sequence->asString;
	   print $sequence->asTabs;
	   print $sequence->asHTML;

	   # Update object
	   $sequence->replace('Visible.Overlap_Right',$r,'M55555');
	   $sequence->add('Visible.Homology','GR91198');
	   $sequence->delete('Source.Clone','MBR122');
	   $sequence->commit();

	   # Rollback changes
	   $sequence->rollback()

	   # Get errors
	   print $sequence->error;

DESCRIPTION
       Ace::Object is the base class for objects returned from ACEDB
       databases. Currently there is only one type of Ace::Object, but this
       may change in the future to support more interesting object-specific
       behaviors.

       Using the Ace::Object interface, you can explore the internal structure
       of an Ace::Object, retrieve its content, and convert it into various
       types of text representation.  You can also fetch a representation of
       any object as a GIF image.

       If you have write access to the databases, add new data to an object,
       replace existing data, or kill it entirely.  You can also create a new
       object de novo and write it into the database.

       For information on connecting to ACEDB databases and querying them, see
       Ace.

ACEDB::OBJECT METHODS
       The structure of an Ace::Object is very similar to that of an Acedb
       object.	It is a tree structure like this one (an Author object):

	Thierry-Mieg J->Full_name ->Jean Thierry-Mieg
			 |
			Laboratory->FF
			 |
			Address->Mail->CRBM duCNRS
			 |	  |	|
			 |	  |    BP 5051
			 |	  |	|
			 |	  |    34033 Montpellier
			 |	  |	|
			 |	  |    FRANCE
			 |	  |
			 |	 E_mail->mieg@kaa.cnrs-mop.fr
			 |	  |
			 |	 Phone ->33-67-613324
			 |	  |
			 |	 Fax   ->33-67-521559
			 |
			Paper->The C. elegans sequencing project
				|
			       Genome Project Database
				|
			       Genome Sequencing
				|
				How to get ACEDB for your Sun
				|
			       ACEDB is Hungry

       Each object in the tree has two pointers, a "right" pointer to the node
       on its right, and a "down" pointer to the node beneath it.  Right
       pointers are used to store hierarchical relationships, such as
       Address->Mail->E_mail, while down pointers are used to store lists,
       such as the multiple papers written by the Author.

       Each node in the tree has a type and a name.  Types include integers,
       strings, text, floating point numbers, as well as specialized
       biological types, such as "dna" and "peptide."  Another fundamental
       type is "tag," which is a text identifier used to label portions of the
       tree.  Examples of tags include "Paper" and "Laboratory" in the example
       above.

       In addition to these built-in types, there are constructed types known
       as classes.  These types are specified by the data model.  In the above
       example, "Thierry-Mieg J" is an object of the "Author" class, and
       "Genome Project Database" is an object of the "Paper" class.  An
       interesting feature of objects is that you can follow them into the
       database, retrieving further information.  For example, after
       retrieving the "Genome Project Database" Paper from the Author object,
       you could fetch more information about it, either by following its
       right pointer, or by using one of the specialized navigation routines
       described below.

   new() method
	   $object = new Ace::Object($class,$name,$database);
	   $object = new Ace::Object(-class=>$class,
				     -name=>$name,
				     -db=>database);

       You can create a new Ace::Object from scratch by calling the new()
       routine with the object's class, its identifier and a handle to the
       database to create it in.  The object won't actually be created in the
       database until you add() one or more tags to it and commit() it (see
       below).	If you do not provide a database handle, the object will be
       created in memory only.

       Arguments can be passed positionally, or as named parameters, as shown
       above.

       This routine is usually used internally.	 See also add_row(),
       add_tree(), delete() and replace() for ways to manipulate this object.

   name() method
	   $name = $object->name();

       Return the name of the Ace::Object.  This happens automatically
       whenever you use the object in a context that requires a string or a
       number.	For example:

	   $object = $db->fetch(Author,"Thierry-Mieg J");
	   print "$object did not write 'Pride and Prejudice.'\n";

   class() method
	   $class = $object->class();

       Return the class of the object.	The return value may be one of
       "float," "int," "date," "tag," "txt," "dna," "peptide," and "scalar."
       (The last is used internally by Perl to represent objects created
       programatically prior to committing them to the database.)  The class
       may also be a user-constructed type such as Sequence, Clone or Author.
       These user-constructed types usually have an initial capital letter.

   db() method
	    $db = $object->db();

       Return the database that the object is associated with.

   isClass() method
	    $bool = $object->isClass();

       Returns true if the object is a class (can be fetched from the
       database).

   isTag() method
	    $bool = $object->isTag();

       Returns true if the object is a tag.

   tags() method
	    @tags = $object->tags();

       Return all the top-level tags in the object as a list.  In the Author
       example above, the returned list would be
       ('Full_name','Laboratory','Address','Paper').

       You can fetch tags more deeply nested in the structure by navigating
       inwards using the methods listed below.

   right() and down() methods
	    $subtree = $object->right;
	    $subtree = $object->right($position);
	    $subtree = $object->down;
	    $subtree = $object->down($position);

       right() and down() provide a low-level way of traversing the tree
       structure by following the tree's right and down pointers.  Called
       without any arguments, these two methods will move one step.  Called
       with a numeric argument >= 0 they will move the indicated number of
       steps (zero indicates no movement).

	    $full_name = $object->right->right;
	    $full_name = $object->right(2);

	    $city = $object->right->down->down->right->right->down->down;
	    $city = $object->right->down(2)->right(2)->down(2);

       If $object contains the "Thierry-Mieg J" Author object, then the first
       series of accesses shown above retrieves the string "Jean Thierry-Mieg"
       and the second retrieves "34033 Montpellier."  If the right or bottom
       pointers are NULL, these methods will return undef.

       In addition to being somewhat awkard, you will probably never need to
       use these methods.  A simpler way to retrieve the same information
       would be to use the at() method described in the next section.

       The right() and down() methods always walk through the tree of the
       current object.	They do not follow object pointers into the database.
       Use fetch() (or the deprecated pick() or follow() methods) instead.

   at() method
	   $subtree    = $object->at($tag_path);
	   @values     = $object->at($tag_path);

       at() is a simple way to fetch the portion of the tree that you are
       interested in.  It takes a single argument, a simple tag or a path.  A
       simple tag, such as "Full_name", must correspond to a tag in the column
       immediately to the right of the root of the tree.  A path such as
       "Address.Mail" is a dot-delimited path to the subtree.  Some examples
       are given below.

	   ($full_name)	  = $object->at('Full_name');
	   @address_lines = $object->at('Address.Mail');

       The second line above is equivalent to:

	   @address = $object->at('Address')->at('Mail');

       Called without a tag name, at() just dereferences the object, returning
       whatever is to the right of it, the same as $object->right

       If a path component already has a dot in it, you may escape the dot
       with a backslash, as in:

	   $s=$db->fetch('Sequence','M4');
	   @homologies = $s->at('Homol.DNA_homol.yk192f7\.3';

       This also demonstrates that path components don't necessarily have to
       be tags, although in practice they usually are.

       at() returns slightly different results depending on the context in
       which it is called.  In a list context, it returns the column of values
       to the right of the tag.	 However, in a scalar context, it returns the
       subtree rooted at the tag.  To appreciate the difference, consider
       these two cases:

	   $name1   = $object->at('Full_name');
	   ($name2) = $object->at('Full_name');

       After these two statements run, $name1 will be the tag object named
       "Full_name", and $name2 will be the text object "Jean Thierry-Mieg",
       The relationship between the two is that $name1->right leads to $name2.
       This is a powerful and useful construct, but it can be a trap for the
       unwary.	If this behavior drives you crazy, use this construct:

	   $name1   = $object->at('Full_name')->at();

       For finer control over navigation, path components can include optional
       indexes to indicate navigation to the right of the current path
       component.  Here is the syntax:

	   $object->at('tag1[index1].tag2[index2].tag3[index3]...');

       Indexes are zero-based.	An index of [0] indicates no movement relative
       to the current component, and is the same as not using an index at all.
       An index of [1] navigates one step to the right, [2] moves two steps to
       the right, and so on.  Using the Thierry-Mieg object as an example
       again, here are the results of various indexes:

	   $object = $db->fetch(Author,"Thierry-Mieg J");
	   $a = $object->at('Address[0]')   --> "Address"
	   $a = $object->at('Address[1]')   --> "Mail"
	   $a = $object->at('Address[2]')   --> "CRBM duCNRS"

       In an array context, the last index in the path does something very
       interesting.  It returns the entire column of data K steps to the right
       of the path, where K is the index.  This is used to implement so-called
       "tag[2]" syntax, and is very useful in some circumstances.  For
       example, here is a fragment of code to return the Thierry-Mieg object's
       full address without having to refer to each of the intervening "Mail",
       "E_Mail" and "Phone" tags explicitly.

	  @address = $object->at('Address[2]');
	  --> ('CRBM duCNRS','BP 5051','34033 Montpellier','FRANCE',
	       'mieg@kaa.cnrs-mop.fr,'33-67-613324','33-67-521559')

       Similarly, "tag[3]" will return the column of data three hops to the
       right of the tag.  "tag[1]" is identical to "tag" (with no index), and
       will return the column of data to the immediate right.  There is no
       special behavior associated with using "tag[0]" in an array context; it
       will always return the subtree rooted at the indicated tag.

       Internal indices such as "Homol[2].BLASTN", do not have special
       behavior in an array context.  They are always treated as if they were
       called in a scalar context.

       Also see col() and get().

   get() method
	   $subtree    = $object->get($tag);
	   @values     = $object->get($tag);
	   @values     = $object->get($tag, $position);
	   @values     = $object->get($tag => $subtag, $position);

       The get() method will perform a breadth-first search through the object
       (columns first, followed by rows) for the tag indicated by the
       argument, returning the column of the portion of the subtree it points
       to.  For example, this code fragment will return the value of the "Fax"
       tag.

	   ($fax_no) = $object->get('Fax');
		--> "33-67-521559"

       The list versus scalar context semantics are the same as in at(), so if
       you want to retrieve the scalar value pointed to by the indicated tag,
       either use a list context as shown in the example, above, or a
       dereference, as in:

	    $fax_no = $object->get('Fax');
		--> "Fax"
	    $fax_no = $object->get('Fax')->at;
		--> "33-67-521559"

       An optional second argument to get(), $position, allows you to navigate
       the tree relative to the retrieved subtree.  Like the at() navigational
       indexes, $position must be a number greater than or equal to zero.  In
       a scalar context, $position moves rightward through the tree.  In an
       array context, $position implements "tag[2]" semantics.

       For example:

	    $fax_no = $object->get('Fax',0);
		 --> "Fax"

	    $fax_no = $object->get('Fax',1);
		 --> "33-67-521559"

	    $fax_no = $object->get('Fax',2);
		 --> undef  # nothing beyond the fax number

	    @address = $object->get('Address',2);
		 --> ('CRBM duCNRS','BP 5051','34033 Montpellier','FRANCE',
		      'mieg@kaa.cnrs-mop.fr,'33-67-613324','33-67-521559')

       It is important to note that get() only traverses tags.	It will not
       traverse nodes that aren't tags, such as strings, integers or objects.
       This is in keeping with the behavior of the Ace query language "show"
       command.

       This restriction can lead to confusing results.	For example, consider
       the following object:

	Clone: B0280  Position	  Map		 Sequence-III  Ends   Left   3569
								      Right  3585
				  Pmap		 ctg377	       -1040  -1024
		      Positive	  Positive_locus nhr-10
		      Sequence	  B0280
		      Location	  RW
		      FingerPrint Gel_Number	 0
				  Canonical_for	 T20H1
						 K10E5
				  Bands		 1354	       18

       The following attempt to fetch the left and right positions of the
       clone will fail, because the search for the "Left" and "Right" tags
       cannot traverse "Sequence-III", which is an object, not a tag:

	 my $left = $clone->get('Left');    # will NOT work
	 my $right = $clone->get('Right');  # neither will this one

       You must explicitly step over the non-tag node in order to make this
       query work.  This syntax will work:

	 my $left = $clone->get('Map',1)->get('Left');	 # works
	 my $left = $clone->get('Map',1)->get('Right');	 # works

       Or you might prefer to use the tag[2] syntax here:

	 my($left,$right) = $clone->get('Map',1)->at('Ends[2]');

       Although not frequently used, there is a form of get() which allows you
       to stack subtags:

	   $locus = $object->get('Positive'=>'Positive_locus');

       Only on subtag is allowed.  You can follow this by a position if wish
       to offset from the subtag.

	   $locus = $object->get('Positive'=>'Positive_locus',1);

   search() method
       This is a deprecated synonym for get().

   Autogenerated Access Methods
	    $scalar = $object->Name_of_tag;
	    $scalar = $object->Name_of_tag($position);
	    @array  = $object->Name_of_tag;
	    @array  = $object->Name_of_tag($position);
	    @array  = $object->Name_of_tag($subtag=>$position);
	    @array  = $object->Name_of_tag(-fill=>$tag);

       The module attempts to autogenerate data access methods as needed.  For
       example, if you refer to a method named "Fax" (which doesn't correspond
       to any of the built-in methods), then the code will call the get()
       method to find a tag named "Fax" and return its contents.

       Unlike get(), this method will always step into objects.	 This means
       that:

	  $map = $clone->Map;

       will return the Sequence_Map object pointed to by the Clone's Map tag
       and not simply a pointer to a portion of the Clone tree.	 Therefore
       autogenerated methods are functionally equivalent to the following:

	  $map = $clone->get('Map')->fetch;

       The scalar context semantics are also slightly different.  In a scalar
       context, the autogenerated function will *always* move one step to the
       right.

       The list context semantics are identical to get().  If you want to
       dereference all members of a multivalued tag, you have to do so
       manually:

	 @papers = $author->Paper;
	 foreach (@papers) {
	   my $paper = $_->fetch;
	   print  $paper->asString;
	 }

       You can provide an optional positional index to rapidly navigate
       through the tree or to obtain tag[2] behavior.  In the following
       examples, the first two return the object's Fax number, and the third
       returns all data two hops to the right of Address.

	    $object   = $db->fetch(Author => 'Thierry-Mieg J');
	    ($fax_no) = $object->Fax;
	    $fax_no   = $object->Fax(1);
	    @address  = $object->Address(2);

       You may also position at a subtag, using this syntax:

	    $representative = $object->Laboratory('Representative');

       Both named tags and positions can be combined as follows:

	    $lab_address = $object->Laboratory(Address=>2);

       If you provide a -fill=>$tag argument, then the object fetch will
       automatically fill the specified subtree, greatly improving
       performance.  For example:

	     $lab_address = $object->Laboratory(-filled=>'Address');

       ** NOTE: In a scalar context, if the node to the right of the tag is **
       an object, the method will perform an implicit dereference of the **
       object.	For example, in the case of:

	   $lab = $author->Laboratory;

       **NOTE: The object returned is the dereferenced Laboratory object, not
       a node in the Author object.  You can control this by giving the
       autogenerated method a numeric offset, such as Laboratory(0) or
       Laboratory(1).  For backwards compatibility, Laboratory('@') is
       equivalent to Laboratory(1).

       The semantics of the autogenerated methods have changed subtly between
       version 1.57 (the last stable release) and version 1.62.	 In earlier
       versions, calling an autogenerated method in a scalar context returned
       the subtree rooted at the tag.  In the current version, an implicit
       right() and dereference is performed.

   fetch() method
	   $new_object = $object->fetch;
	   $new_object = $object->fetch($tag);

       Follow object into the database, returning a new object.	 This is the
       best way to follow object references.  For example:

	   $laboratory = $object->at('Laboratory')->fetch;
	   print $laboratory->asString;

       Because the previous example is a frequent idiom, the optional $tag
       argument allows you to combine the two operations into a single one:

	   $laboratory = $object->fetch('Laboratory');

   follow() method
	   @papers	  = $object->follow('Paper');
	   @filled_papers = $object->follow(-tag=>'Paper',-filled=>1);
	   @filled_papers = $object->follow(-tag=>'Paper',-filled=>'Author');

       The follow() method will follow a tag into the database, dereferencing
       the column to its right and returning the objects resulting from this
       operation.  Beware!  If you follow a tag that points to an object, such
       as the Author "Paper" tag, you will get a list of all the Paper
       objects.	 If you follow a tag that points to a scalar, such as
       "Full_name", you will get an empty string.  In a scalar context, this
       method will return the number of objects that would have been followed.

       The full named-argument form of this call accepts the arguments -tag
       (mandatory) and -filled (optional).  The former points to the tag to
       follow.	The latter accepts a boolean argument or the name of a subtag.
       A numeric true argument will return completely "filled" objects,
       increasing network and memory usage, but possibly boosting performance
       if you have a high database access latency.  Alternatively, you may
       provide the name of a tag to follow, in which case just the named
       portion of the subtree in the followed objects will be filled (v.g.)

       For backward compatability, if follow() is called without any
       arguments, it will act like fetch().

   pick() method
       Deprecated method.  This has the same semantics as fetch(), which
       should be used instead.

   col() method
	    @column = $object->col;
	    @column = $object->col($position);

       col() flattens a portion of the tree by returning the column one hop to
       the right of the current subtree. You can provide an additional
       positional index to navigate through the tree using "tag[2]" behavior.
       This example returns the author's mailing address:

	 @mailing_address = $object->at('Address.Mail')->col();

       This example returns the author's entire address including mail, e-mail
       and phone:

	 @address = $object->at('Address')->col(2);

       It is equivalent to any of these calls:

	 $object->at('Address[2]');
	 $object->get('Address',2);
	 $object->Address(2);

       Use whatever syntax is most comfortable for you.

       In a scalar context, col() returns the number of items in the column.

   row() method
	    @row=$object->row();
	    @row=$object->row($position);

       row() will return the row of data to the right of the object.  The
       first member of the list will be the object itself.  In the case of the
       "Thierry-Mieg J" object, the example below will return the list
       ('Address','Mail','CRBM duCNRS').

	    @row = $object->Address->row();

       You can provide an optional position to move rightward one or more
       places before retrieving the row.  This code fragment will return
       ('Mail','CRBM duCNRS'):

	    @row = $object->Address->row(1);

       In a scalar context, row() returns the number of items in the row.

   asString() method
	   $object->asString;

       asString() returns a pretty-printed ASCII representation of the object
       tree.

   asTable() method
	   $object->asTable;

       asTable() returns the object as a tab-delimited text table.

   asAce() method
	   $object->asAce;

       asAce() returns the object as a tab-delimited text table in ".ace"
       format.

   asHTML() method
	  $object->asHTML;
	  $object->asHTML(\&tree_traversal_code);

       asHTML() returns an HTML 3 table representing the object, suitable for
       incorporation into a Web browser page.  The callback routine, if
       provided, will have a chance to modify the object representation before
       it is incorporated into the table, for example by turning it into an
       HREF link.  The callback takes a single argument containing the object,
       and must return a string-valued result.	It may also return a list as
       its result, in which case the first member of the list is the string
       representation of the object, and the second member is a boolean
       indicating whether to prune the table at this level.  For example, you
       can prune large repetitive lists.

       Here's a complete example:

	  sub process_cell {
	    my $obj = shift;
	    return "$obj" unless $obj->isObject || $obj->isTag;

	    my @col = $obj->col;
	    my $cnt = scalar(@col);
	    return ("$obj -- $cnt members",1);	# prune
		   if $cnt > 10			# if subtree to big

	    # tags are bold
	    return "<B>$obj</B>" if $obj->isTag;

	    # objects are blue
	    return qq{<FONT COLOR="blue">$obj</FONT>} if $obj->isObject;
	  }

	  $object->asHTML(\&process_cell);

   asXML() method
	  $result = $object->asXML;

       asXML() returns a well-formed XML representation of the object.	The
       particular representation is still under discussion, so this feature is
       primarily for demonstration.

   asGIF() method
	 ($gif,$boxes) = $object->asGIF();
	 ($gif,$boxes) = $object->asGIF(-clicks=>[[$x1,$y1],[$x2,$y2]...]
					-dimensions=> [$width,$height],
					-coords	   => [$top,$bottom],
					-display   => $display_type,
					-view	   => $view_type,
					-getcoords => $true_or_false
					);

       asGIF() returns the object as a GIF image.  The contents of the GIF
       will be whatever xace would ordinarily display in graphics mode, and
       will vary for different object classes.

       You can optionally provide asGIF with a -clicks argument to simulate
       the action of a user clicking on the image.  The click coordinates
       should be formatted as an array reference that contains a series of
       two-element subarrays, each corresponding to the X and Y coordinates of
       a single mouse click.  There is currently no way to pass information
       about middle or right mouse clicks, dragging operations, or keystrokes.
       You may also specify a -dimensions to control the width and height of
       the returned GIF.  Since there is no way of obtaining the preferred
       size of the image in advance, this is not usually useful.

       The optional -display argument allows you to specify an alternate
       display for the object.	For example, Clones can be displayed either
       with the PMAP display or with the TREE display.	If not specified, the
       default display is used.

       The optional -view argument allows you to specify an alternative view
       for MAP objects only.  If not specified, you'll get the default view.

       The option -coords argument allows you to provide the top and bottom of
       the display for MAP objects only.  These coordinates are in the map's
       native coordinate system (cM, bp).  By default, AceDB will show most
       (but not necessarily all) of the map according to xace's display rules.
       If you call this method with the -getcoords argument and a true value,
       it will return a two-element array containing the coordinates of the
       top and bottom of the map.

       asGIF() returns a two-element array.  The first element is the GIF
       data.  The second element is an array reference that indicates special
       areas of the image called "boxes."  Boxes are rectangular areas that
       surround buttons, and certain displayed objects.	 Using the contents of
       the boxes array, you can turn the GIF image into a client-side image
       map.  Unfortunately, not everything that is clickable is represented as
       a box.  You still have to pass clicks on unknown image areas back to
       the server for processing.

       Each box in the array is a hash reference containing the following
       keys:

	   'coordinates'  => [$left,$top,$right,$bottom]
	   'class'	  => object class or "BUTTON"
	   'name'	  => object name, if any
	   'comment'	  => a text comment of some sort

       coordinates points to an array of points indicating the top-left and
       bottom-right corners of the rectangle.  class indicates the class of
       the object this rectangle surrounds.  It may be a database object, or
       the special word "BUTTON" for one of the display action buttons.	 name
       indicates the name of the object or the button.	comment is some piece
       of information about the object in question.  You can display it in the
       status bar of the browser or in a popup window if your browser provides
       that facility.

   asDNA() and asPeptide() methods
	   $dna = $object->asDNA();
	   $peptide = $object->asPeptide();

       If you are dealing with a sequence object of some sort, these methods
       will return strings corresponding to the DNA or peptide sequence in
       FASTA format.

   add_row() method
	   $result_code = $object->add_row($tag=>$value);
	   $result_code = $object->add_row($tag=>[list,of,values]);
	   $result_code = $object->add(-path=>$tag,
				       -value=>$value);

       add_row() updates the tree by adding data to the indicated tag path.
       The example given below adds the value "555-1212" to a new Address
       entry named "Pager".  You may call add_row() a second time to add a new
       value under this tag, creating multi-valued entries.

	$object->add_row('Address.Pager'=>'555-1212');

       You may provide a list of values to add an entire row of data.  For
       example:

	$sequence->add_row('Assembly_tags'=>['Finished Left',38949,38952,'AC3']);

       Actually, the array reference is not entirely necessary, and if you
       prefer you can use this more concise notation:

	$sequence->add_row('Assembly_tags','Finished Left',38949,38952,'AC3');

       No check is done against the database model for the correct data type
       or tag path.  The update isn't actually performed until you call
       commit(), at which time a result code indicates whether the database
       update was successful.

       You may create objects that reference other objects this way:

	   $lab = new Ace::Object('Laboratory','LM',$db);
	   $lab->add_row('Full_name','The Laboratory of Medicine');
	   $lab->add_row('City','Cincinatti');
	   $lab->add_row('Country','USA');

	   $author = new Ace::Object('Author','Smith J',$db);
	   $author->add_row('Full_name','Joseph M. Smith');
	   $author->add_row('Laboratory',$lab);

	   $lab->commit();
	   $author->commit();

       The result code indicates whether the addition was syntactically
       correct.	 add_row() will fail if you attempt to add a duplicate entry
       (that is, one with exactly the same tag and value).  In this case, use
       replace() instead.  Currently there is no checking for an attempt to
       add multiple values to a single-valued (UNIQUE) tag.  The error will be
       detected and reported at commit() time however.

       The add() method is an alias for add_row().

       See also the Ace->new() method.

   add_tree()
	 $result_code = $object->add_tree($tag=>$ace_object);
	 $result_code = $object->add_tree(-tag=>$tag,-tree=>$ace_object);

       The add_tree() method will insert an entire Ace subtree into the object
       to the right of the indicated tag.  This can be used to build up
       complex Ace objects, or to copy portions of objects from one database
       to another.  The first argument is a tag path, and the second is the
       tree that you wish to insert.  As with add_row() the database will only
       be updated when you call commit().

       When inserting a subtree, you must be careful to remember that
       everything to the *right* of the node that you are pointing at will be
       inserted; not the node itself.  For example, given this Sequence
       object:

	 Sequence AC3
	   DB_info     Database	   EMBL
	   Assembly_tags   Finished Left   1   4   AC3
			   Clone left end      1   4   AC3
			   Clone right end     5512    5515    K07C5
					       38949   38952   AC3
			   Finished Right      38949   38952   AC3

       If we use at('Assembly_tags') to fetch the subtree rooted on the
       "Assembly_tags" tag, it is the tree to the right of this tag, beginning
       with "Finished Left", that will be inserted.

       Here is an example of copying the "Assembly_tags" subtree from one
       database object to another:

	$remote = Ace->connect(-port=>200005)  || die "can't connect";
	$ac3 = $remote->fetch(Sequence=>'AC3') || die "can't get AC7";
	my $assembly = $ac3->at('Assembly_tags');

	$local = Ace->connect(-path=>'~acedb') || die "can't connect";
	$AC3copy = Ace::Object->new(Sequence=>'AC3copy',$local);
	$AC3copy->add_tree('Assembly_tags'=>$tags);
	$AC3copy->commit || warn $AC3copy->error;

       Notice that this syntax will not work the way you think it should:

	$AC3copy->add_tree('Assembly_tags'=>$ac3->at('Assembly_tags'));

       This is because call at() in an array context returns the column to the
       right of the tag, not the tag itself.

       Here's an example of building up a complex structure from scratch using
       a combination of add() and add_tree():

	$newObj = Ace::Object->new(Sequence=>'A555',$local);
	my $assembly = Ace::Object->new(tag=>'Assembly_tags');
	$assembly->add('Finished Left'=>[10,20,'ABC']);
	$assembly->add('Clone right end'=>[1000,2000,'DEF']);
	$assembly->add('Clone right end'=>[8000,9876,'FRED']);
	$assembly->add('Finished Right'=>[1000,3000,'ETHEL']);
	$newObj->add_tree('Assembly_tags'=>$assembly);
	$newObj->commit || warn $newObj->error;

   delete() method
	   $result_code = $object->delete($tag_path,$value);
	   $result_code = $object->delete(-path=>$tag_path,
					  -value=>$value);

       Delete the indicated tag and value from the object.  This example
       deletes the address line "FRANCE" from the Author's mailing address:

	   $object->delete('Address.Mail','FRANCE');

       No actual database deletion occurs until you call commit().  The
       delete() result code indicates whether the deletion was successful.
       Currently it is always true, since the database model is not checked.

   replace() method
	   $result_code = $object->replace($tag_path,$oldvalue,$newvalue);
	   $result_code = $object->replace(-path=>$tag_path,
					   -old=>$oldvalue,
					   -new=>$newvalue);

       Replaces the indicated tag and value with the new value.	 This example
       changes the address line "FRANCE" to "LANGUEDOC" in the Author's
       mailing address:

	   $object->delete('Address.Mail','FRANCE','LANGUEDOC');

       No actual database changes occur until you call commit().  The delete()
       result code indicates whether the replace was successful.  Currently is
       true if the old value was identified.

   commit() method
	    $result_code = $object->commit;

       Commits all add(), replace() and delete() operations to the database.
       It can also be used to write a completely new object into the database.
       The result code indicates whether the object was successfully written.
       If an error occurred, further details can be found in the Ace->error()
       error string.

   rollback() method
	   $object->rollback;

       Discard all adds, deletions and replacements, returning the object to
       the state it was in prior to the last commit().

       rollback() works by deleting the object from Perl memory and fetching
       the object anew from AceDB.  If someone has changed the object in the
       database while you were working with it, you will see this version, ot
       the one you originally fetched.

       If you are creating an entirely new object, you must add at least one
       tag in order to enter the object into the database.

   kill() method
	   $result_code = $object->kill;

       This will remove the object from the database immediately and
       completely.  It does not wait for a commit(), and does not respond to a
       rollback().  If successful, you will be left with an empty object that
       contains just the class and object names.  Use with care!

       In the case of failure, which commonly happens when the database is not
       open for writing, this method will return undef.	 A description of the
       problem can be found by calling the error() method.

   date_style() method
	  $object->date_style('ace');

       This is a convenience method that can be used to set the date format
       for all objects returned by the database.  It is exactly equivalent to

	  $object->db->date_style('ace');

       Note that the text representation of the date will change for all
       objects returned from this database, not just the current one.

   isRoot() method
	   print "Top level object" if $object->isRoot;

       This method will return true if the object is a "top level" object,
       that is the root of an object tree rather than a subtree.

   model() method
	   $model = $object->model;

       This method will return the object's model as an Ace::Model object, or
       undef if the object does not have a model. See Ace::Model for details.

   timestamp() method
	  $stamp = $object->timestamp;

       The timestamp() method will retrieve the modification time and date
       from the object.	 This works both with top level objects and with
       subtrees.  Timestamp handling must be turned on in the database, or
       timestamp() will return undef.

       The returned timestamp is actually a UserSession object which can be
       printed and explored like any other object.  However, there is
       currently no useful information in UserSession other than its name.

   comment() method
	  $comment = $object->comment;

       This returns the comment attached to an object or object subtree, if
       any.  Comments are Comment objects and have the interesting property
       that a single comment can refer to multiple objects.  If there is no
       comment attached to the current subtree, this method will return undef.

       Currently you cannot create a new comment in AcePerl or edit an old
       one.

   error() method
	   $error = $object->error;

       Returns the error from the previous operation, if any.  As in
       Ace::error(), this string will only have meaning if the previous
       operation returned a result code indicating an error.

   factory() method
       WARNING - THIS IS DEFUNCT AND NO LONGER WORKS.  USE THE Ace->class()
       METHOD INSTEAD

	   $package = $object->factory;

       When a root Ace object instantiates its tree of tags and values, it
       creates a hierarchical structure of Ace::Object objects.	 The factory()
       method determines what class to bless these subsidiary objects into.
       By default, they are Ace::Object objects, but you can override this
       method in a child class in order to create more specialized Ace::Object
       classes.	 The method should return a string corresponding to the
       package to bless the object into.  It receives the current Ace::Object
       as its first argument.

   debug() method
	   $object->debug(1);

       Change the debugging mode.  A zero turns off debugging messages.
       Integer values produce debug messages on standard error.	 Higher
       integers produce progressively more verbose messages.  This actually is
       just a front end to Ace->debug(), so the debugging level is global.

SEE ALSO
       Ace, Ace::Model, Ace::Object, Ace::Local,
       Ace::Sequence,Ace::Sequence::Multi

AUTHOR
       Lincoln Stein <lstein@cshl.org> with extensive help from Jean Thierry-
       Mieg <mieg@kaa.crbm.cnrs-mop.fr>

       Copyright (c) 1997-1998, Lincoln D. Stein

       This library is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself.  See DISCLAIMER.txt for
       disclaimers of warranty.

perl v5.14.1			  2005-04-20			Ace::Object(3)
[top]

List of man pages available for Fedora

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net