IRSpy maintains a registry of information retrieval targets supporting the standard IR protocol ANSI/NISO Z39.50 (ISO 23950) and the SRU/SRW web services. Each registry entry consists of both database level information, such as the indexes supported for searching and the record syntax and schemas supported for retrieval, and record level metadata such as titles, authors and descriptions.
IRSpy supports editing of record level metadata, and automatically discovers database level information by probing the registered targets using a set of feature-tests. Tests are implemented by individual plugins, so new tests can be added without changing the core code.
For efficiency, probing of targets is done in parallel, using a pool of a few hundred concurrent connections which is refilled from a queue whenever a target in the pool completes its tests. Testing the entire current registry of 1908 targets takes about three elapsed hours on commodity hardware (Intel CPU, 2.8 GHz, 256 Kb cache, 4 Mbit/s network connection).
IRSpy's Web user interface allows users to search and browse the registry, and to view statistics. Authenticated users may also edit target data, run tests and add new targets from the Web UI. A set of command-line tools is also provided, together with facilities for re-running the tests periodically.
IRSpy is implemented in Perl, using the ZOOM-Perl module to access Z39.50 and SRU/SRW databases. The registry database is implemented using Zebra, also accessed using ZOOM-Perl. The database can be interrogated using SRU/SRW: it conforms to the ZeeRex application profile, and can supply registry records both in extended ZeeRex format (now ratified as ANSI/NISO Z39.92) and in Dublin Core summary format.