ACEDB Version 4_8
A Guide To Using URLs in ACEDB
Originally written by
Richard Durbin <rd@sanger.ac.uk>, July 2000
Richard Durbins description of the current system
There is in fact a standard acedb way to put URLs into acedb, which I
guess Arnthor has found since he says it works for him. This is not a
specific class, but rather a display type. It's behaviour is
potentially quite complex, though it is easy to do the standard simple
things.
I think it is worth describing the full behaviour because it might be
good to reimplement it in AceBrowser for consistency. The original code
is in doWWWDisplay() in display.c.
1) If the object contains the tag "Url" then use the following text as
the URL (that's the easy case!).
Else if the object contains the tag "Web_location" followed by
then we expect that the object corresponding to contains template
information that will tell you how to construct the URL from the
original object. The principle is that first you find some base text,
then apply some rewriting rules. This allows many objects to share one
URL construction template.
First to get the base text:
2) If the tag "Reference_tag" occurs in the template followed by some
text, then assume that text is a tag name, and look for the base text
to follow this tag in the original object. There is some code that
allows this to be done in a class-specific way, so that e.g.
Reference_tag Foo Sequence
Bar Clone
would use the Foo tag when this template is applied to Sequence
objects and the Bar tag when applied to Clones. The default if just
Reference_tag Foo
is to look following Foo in the original object independent of class.
3) If (2) gave nothing, and the tag "Use_name" is found in the template,
then use the name of the original object. This too can be class
qualified, so that
Use_name Locus
Allele
would mean that this template only uses gets the base text from the
name for the Locus and Allele classes. Again, the default if the tag
"Use_name" is not followed by anything is to use the name for the
base text whatever is being displayed.
4) Next protect unclean URL characters.
5) Next if the tag "Rewrite" exists in the template, then apply the
first of the rewrite rules that matches and display. Else just
display the base text. Rewrite rules are given via
Rewrite <new prefix> <new suffix> [<old prefix> [<old suffix>]]
if an old prefix and/or suffix is given, then it is required to match
to that for the rule to apply. If there is a match, then these are
deleted. Following which, the new prefix and suffix are pre- and
post-pended.
Example:
Protein SP:P15501
Web_location Expasy
URL_template Expasy
Use_name
Rewrite http://www.expasy.ch/cgi-bin/niceprot.pl? "" SP:
would, if Protein SP:P15501 were displayed with display method WWW,
generate the URL "http://www.expasy.ch/cgi-bin/niceprot.pl?P15501"
Note that you would think that the absolute default behaviour if neither
Url nor Web_location is given in the original object would be to use the
name of the object as the URL. That doesn't seem to be the case.
Shouldn't it be, Simon?
Richard
Lincoln Steins comments
Richard,
Thanks for the information. This sounds a bit hairy, but I
think I can code it. It's a little more difficult to assign
special behaviors to tags (and combinations) of tags, than to
specific classes, and I'm going to have to do a bit of client
side caching of the templates in order to avoid a double-trip
to the server for each URL displayed.
Any reason you didn't do it like this?
Url ?Url_template text
where text is the variant part of the Url? Then the rewrite
rule could just contain a placeholder for the substitution,
such as http://foo.bar/cgi-bin?lookup=%1
I notice that the C elegans models.wrm has two URL things:
?Url Url UNIQUE Text // Simple, text of URL
Template UNIQUE ?Url // use this object as a generic template
Reference_tag UNIQUE Text // look for this tag in the reffing object for url
Remove_prefix UNIQUE Text // prefix to remove to make url
Remove_postfix UNIQUE Text // postfix to remove to make url
Prepend UNIQUE Text // then add this to the beginning
Append UNIQUE Text // then add this to the end
Web_location UNIQUE ?WWW_server
?WWW_server Url UNIQUE Text // Simple, text of URL
Use_name Text // (optional) Classname
Rewrite Text UNIQUE Text Text UNIQUE Text
Reference_tag UNIQUE Text // look for this tag in the reffing object for
url
While RiceGenes (and many of the other agro databases) do something else:
?Database Name Text // Full name
Contents ?Text // Description of material included
WWW Arg1_URL_prefix UNIQUE Text
Arg1_URL_suffix UNIQUE Text
Arg2_URL_prefix UNIQUE Text
Arg2_URL_suffix UNIQUE Text
I guess this has been through a number of iterations. Should I contact
Sam Cartinhour, Dave Matthews and the UK Cropnet folk and poll them on
whether they are dependent on any particular version of the URL model?
Lincoln
ACEDB Version 4_8
Ed Griffiths <edgrif@sanger.ac.uk>
Last modified: Tue Feb 6 13:21:44 GMT 2001