current version isis openisis howto about links en espanol
Isi

welcome to OpenIsis.org

current version

DEMOS:
standard or try searching for unicode characters ( unicode index)

Available for download:
Sources Binaries News:

what is isis

Isis is a simple, yet powerful database system with a large installed base since the 80s. Since it's well suited for bibliographic data, it's commonly used in libraries, and since it's very low cost, especially in those running on a low budget.

introduction to the isis db

An isis DB is a list of rows of unspecified structure, each identified by a unique number, the rowid (a.k.a. mfn). Each row is a list of fields, and each field has number (tag) and a string value. Within a row there may be zero, one or more fields with a given tag. While the field's value usually is a textual representation of data in one or the other character encoding (commonly one of the IBM/DOS code pages), it may actually contain arbitrary bytes. This is closely modelled after ISO2709 "Information Interchange Format" (IIF, a.k.a. ANSI/NISO Z39.2)
subfields
There is a convention to encode multiple fields in one by separating them with a '^' followed by one character tagging the subfield. So the field value '^afoo^bbar^bbaz' represents a field having one 'a' subfield with value 'foo' and two 'b' subfields 'bar' and 'baz'. An other separator char may be used, e.g. ASCII character 31 ("Unit Separator") is used in the MARC standard.
formatting
There is a formatting language, with literal text, field and subfield variables, if-else branches (on field existance) and for loops (over field repetitions) (roughly speaking).
indexing
An index is build by converting a row into a list of words (optionally applying formats) and stuffing every word, qualified by the position of it's occurence in the row, into a B+-Tree (which is actually spread to six files). Searching for a word or word prefix is possible with or without qualifying the position (field). Since all fields can be combined into one index, it is usually not necessary (but possible) to set up multiple indexes.
queries
A query language allows for combination of word lookups using and, or and not(without) operators. This is very similar to the "Type-1" query of Z39.50.
usage
While isis lacks most features of RDBMS like complex relations between different entities, it's flexibility comes in handy for many catalogues and directories with highly varying records and one single level of substructure, which today are usually modelled in XML documents rather than table rows. In other words, isis is an ideal storage for many XML applications. The flexible indexing mechanism combines the best of full text searching and structured retrieval.

overview of isis software

The mother of all isis software is a DOS version of "MicroISIS" as an integrated system with textual user interface. There is a BSD version of "CDS/ISIS" which also runs under linux up to some 2.2.x kernels (current 2.4 kernels do not support the iBCS module for COFF binaries). Then there are several versions of "WinISIS" (M$-Windows only, but runs under linux/wine).

A shared library version "isis.dll" of functions to access an isis db from your code exists, despite it's name, also in a linux version ("isilux"); however, you need some pretty special libs to make it run. A set of command line tools ("cisis") performs tasks like importing ISO2709 bibliographic databases, inverting (index building) etc. The thing next to an isis database server is "wwwisis", which runs as CGI or from the command line and performs most isis tasks (win and lin versions). However, it actually runs per request, not as a server itself, and thus cannot provide concurrency control.

This "official" isis software, which is maintained by Unesco and/or Bireme, is accompanied by a couple of independent developments, some of which are in the public domain. Javaisis is an AWT-based GUI (3.5 uses SWING) and a corresponding server, which in turn uses wwwisis. Robert Janusz wrote a C-lib (iAPI) from scratch, which was the starting point for the openisis software.

what is openisis

So why are we writing the openisis software? Because Isis is not open source software, it's not even free software, and that leads to a whole bunch of problems.

problems resulting from closed software

  1. Availability (in theory)
    Versions of the software exist for some operating systems, library versions and languages. For other environments, there is no version of the software, and there is not much one can do about it.
  2. Availability (in practice)
    You may download most the software, but it's partly protected with passwords, which you have to order at some national distributor. You have to pay some fee and/or declare some good reasons, why you want to use the software. Then you have to wait. In germany, for example, it didn't work at all for some time, until the newly founded Isisnetz remedied the situation.
  3. Availability (in legal terms)
    Some parts of the software are accompanied by different documents stating some license terms, others are not. Terms seem to be pretty different between countries. One can not easily figure out, what exactly might be allowed usage.
  4. Availability (of documentation)
    Some documentation is available in english, some only in portugese, espanol or italiano. Only a small part is downloadable at all, most is paperware.
  5. Bugfixing
    There is no way one can fix a bug, and not much one can do about having somebody fix it.
  6. Extending
    The only way one could write a Binding for perl or Java would be using the isis.dll. There are problems with regard to required additional libraries (especially some C++ stuff), there are no statements about thread safety, unicode compatibility and so on. As a consequence, it's practically impossible to write a state-of-the-art web application based on an isis db.
  7. Improving
    Many users develop useful ideas for improvements from practice. Their expertise is lost as they are not able to turn it into improved software.
  8. Enabling
    While open source software enables people all over the world to shape their tools themselves, closed software lets them in dependency.

benefits of open software

To address these problems we feel the need for an open source implementation of isis. Of course it would be best to have all of the existing isis code under one or the other form of open license (GPL, LGPL, artistic or similar as appropriate).

On the other hand, an independent secondary implementation has advantages in it's own right. It may have a different focus and develop strengths in one aspect while another aproach performs better in other situations. For example, openisis will have some support for multithreading and unicode, which is paid for by a certain overhead. A rewrite by developers with a different background might introduce new ideas which finally, after having had their indepent test bed, help improve the standard.

OpenIsis as a software to access isis databases is and will be freely available for everybody with full sourcecode, no fee, no restrictions.

developing openisis

In general, there are no plans to reimplement every piece of code ever written for isis. To be of practical value, OpenIsis has to maintain compatibility in the format of the database files anyway. So, one may use winisis or whatever existing import scripts to create and maintain the database, yet deploy OpenIsis' perl interface to run powerful reports and the Java Native Interface to allow queries from a Servlet based web application.

OpenIsis will focus on providing tools rather than applications. For example, there will be no attempt to mirror functionality of winisis unless the GUI toolkit is done. To achive this, OpenIsis provides access from the most important programming languages: Java and PHP for the web (DONE), perl for the scripts (DONE) and Tcl/Tk for platform independent GUIs (partly DONE). All others can, of course, link the lib.

Next steps:

howto open isis

Start by downloading the Software. Unpack everything in some arbitrary directory. For the tests, you will also need some isis database, which must be located as files db/cds/cds.*. Try this one. Make sure filenames are lowercase.

If you are on Windows, you should either get yourself the cygwin environment with tools like gmake and gcc or volunteer as a porter and start writing the Makefile for your make and compiler. Erik has build a Windows version using mingw and Linux gcc as crosscompiler. If you are on Linux, everything is fine. Ports to MAC OS X and other UNIXes should be no problem.

Type "make" and enjoy the compiler messages. (If your make complains, e.g. on BSD, try "gmake"). Type "make demo" and enjoy your first open isis record. (You installed a db/cds/cds.*, didn't you? It has 42 rows?) Type "make run" and watch the guts of your db passing by. Type "make test", there should be no difference between the testout.txt and the testres.txt as provided (using this cds database from winisis and this 15 MB 58.000+ row unesb.zip db). Type "make time" to measure performance, subsequent tries are usually much faster. My 800 MHz P3 random-reads more than 179.000 records a second, once the files are in the system cache. Typical values:

time ./openisis -perf 1000000 -db db/cds/cds >/dev/null

real    0m5.655s
user    0m3.650s
sys     0m2.000s

time ./openisis -perf 100000 -db db/unesb/unesb >/dev/null

real    0m0.991s
user    0m0.670s
sys     0m0.320s

time ./openisis -fmt mfnf -search 'k$' -db db/unesb/unesb >/dev/null
860     rows for        k

real    0m0.044s
user    0m0.040s
sys     0m0.000s
	
Type "make perl" to build the perl stuff; some perl 5.* must be installed beforehand. Type "make java" or, if you just can't get enough, "make jdump", to see it all happen in your shiny new JDK1.3 Java VM. Some 1.2.* JDKs should do, but tell the Makefile to not look in /usr/java/jdk1.3 by setting JAVAHOME.

installing openisis

libopenisis.a can be linked with your code; no installation necessary. You may wan't to install the 'openisis' binary somewhere in your path for the fun of it; go ahead, just copy, no magic registry entries.

To install the perl stuff for general availability in your /usr/lib/perl5 or whatever, cd to the perl subdir (after "make perl") and issue "make install" (as root or otherwise legitimated). After that, try "perldoc OpenIsis" and the demo.pl script.

Java, like perl, needs to dynamically slurp both some stuff in the own language and a native shared object. The former is openisis.jar, set your CLASSPATH to include it, or specify when invoking java like in the Makefile. The latter is libopenjsis.so on linux (yes, it's jsis). The system dynamic linker must be able to find it; see NativeDb.java for details.

about openisis.org

OpenIsis.org is sponsored by allmaxx.de, a service of merconic, Berlin, Germany. As a student's site, allmaxx supports open software with a focus on education and knowledge management. See also the open community for science.

Currently the site is maintained by Erik and Paul. Volunteers are very welcome. Openisis sources are available at SourceForge side by side with Franck Martin's PHP isis project. Thanks, Franck!

links

openisis and PHP isis at sourceforge
isis core sites:
Unesco
Bireme
documentation:
THE BOOK CDS/ISIS reference manual incl. data formats (en espanol)
standards:
ISO2709 "Information Interchange Format", a.k.a. ANSI/NISO Z39.2
(US) MARC 21, overview
Z39.50, overview at OCLC|Pica,
links at indexdata, makers of excellent free Z39.50 software.
people and projects:
Robert Janusz' iAPI
Kafkas Caprazli's EVERYTHING about CDS/ISIS
open source software for libraries
javaisis
Institut Teknologi Bandung IsisOnline in Indonesia
user groups:
Netherlands / international
UK (ISIS PLUS)
Germany (isisnetz)
staff:
Erik Grziwotz
Klaus "Paul" Ripke
Braulio José Solano Rojas

documentation

ISIS, charsets and unicode
What is it about ISIS that makes it ISIS?
the universal ISIS record
record writing implementation
multi-threading performance

$Revision: 1.32 $ last changed $Date: 2002/10/21 10:24:16 $ by $Author: kripke $
(this page intentionally left blank :)