Reference data are imported from text files or from stdin and exported to text files or to stdout. The data model sticks closely to the RIS specification that most Windows-based reference managers understand. refdb natively understands both the tagged RIS format used by other reference management software and an XML format according to the risx.dtd similar to RIS.
Input filters can be used to convert references from various sources to the RIS format. Currently refdb ships with Medline, BibTeX, MARC, and DocBook filters. You are free to use or write any other input filter that you may need. These filters must either create an output file or write the results to stdout for further plumbing. This way, input filters can be written in almost any programming language and it should be easy to extend the list of reference information formats that refdb can import.
In addition, SGML- or XML-based data formats can be easily transformed to risx using DSSSL or XSLT stylesheets.
Extended notes are supplied as XML files according to the xnote.dtd.
The query language is fairly simple yet powerful. You can search in all fields in the database. You can use the Boolean operators AND, OR, NOT to combine search expressions. You can use brackets () to group search expressions. All alphanumeric fields (i.e. most except e.g. the publication year) treat the search string as a Unix-style regular expression which gives you enormous flexibility in your search strategies. The readline library reads the user input in all interactive clients. You can recall any previous search strings with a few keystrokes and re-run them or modify them as needed.
The query results can be displayed in a variety of formats. The standard backends create screen, HTML, XHTML, BiBTeX, DocBook (SGML and XML), TEI, RIS, and risx formats. All output can either be viewed on stdout or with a pager, or the output can be redirected into a file or into a pipe for further manipulation. refdb provides a simple API to implement custom backends if you need other output formats.
In addition, Perl programmers can use the risx output and the RefDBClient module to easily create any output format they desire.
refdb handles the AV field of the RIS input files in a very flexible way. You can specify a path to a PDF or Postscript version of the document on your harddrive or on the web. The local path can be split into a variable and a static part. The variable part can be specified on the command line e.g. if you access your data remotely via a NFS-mounted share.
refdb knows the concept of a personal reference list. This feature is useful if a database is shared among several users in a workgroup. In this case, all users benefit from the larger stock of references available in the database. refdb keeps track of the user who added a reference to the database. You can use a switch in the getref command to restrict your search on those references that are associated with your username. On the other hand, if you find out that even your colleagues have one or two interesting papers, you can use the pickref command to add these references to your personal reference list. The personal part of the reference information (the reprint status, the availability, and the notes) are saved for each user individually.
In a similar fashion, the display of extended notes can be limited to the notes of the current user, or all available extended notes are used.