Integrated Library Systems often lack open APIs or existing services are difficult to reuse because of access restrictions, complexity, and poor documentations. This also applies to patron information, such as loans, reservations, and fees. After reviewing standards such as NCIP, SLNP, and the DLF-ILS recommendations, the Patrons Account Information API (PAIA) was specifed at the Common Library Network (GBV).
PAIA consists of a small set of precisely defined access methods to look up patron information including fees, to renew and request documents, and to cancel requests. With PAIA it should be possible to make use of all patron methods that can be access in OPAC interfaces, also in third party applications, such as mobile Apps and discovery interfaces. The specification is divided into core methods (PAIA core) and methods for authentification (PAIA auth). This design will facilitate migration from insecure username/password authentification to more flexible systems based on OAuth 2.0. OAuth is also used by major service providers such as Google, Twitter, and Facebook.
The current draft of PAIA is available at http://gbv.github.com/paia/ and comments are very welcome. The specification is hosted in a git repository, accompanied by a wiki. Both can be accessed publicly to correct and improve the specification until its final release.
PAIA complements the Document Availability Information API (DAIA) which was created to access current availability information about documents in libraries and related institutions. Both PAIA and DAIA are being designed with a mapping to RDF, to also publish library information as linked data.
When I started to create an API for availability lookup of document in libraries in 2008, I was suprised that such a basic service was so poorly defined. The best I could find was the just-published recommendation of the Digital Library Federation (DLF-ILS). Even there availability status was basically a plain text message (section 6.3.1 and appendix 4 and 5). Other parts of the DLF-ILS GetAvailability response were more helpful, so they are all part of the Document Availability Information API (DAIA). Here is a simple mapping from DLF-ILS to DAIA:
- bibliographicIdentifer (string) → document (URI)
- itemIdentifier (string) → item (URI)
- dateAvailable (dateTime) → expected (xs:dateTime or xs:date or „unknown“) or delay (xs:duration or „unknown“)
- location (string) → storage (URI and/or string, plus optional URL)
- call number (string) → label (string)
- holdQueueLength (int) → queue (xs:nonNegativeInteger)
- status (string) and circulating (boolean) → available/unavailable (with service type and additional information)
So you could say that DAIA implements the abstract GetAvailability function from DLF-ILS. I like abstract, language independent specifications, but they must be precise and testable (see Meek’s forgotten paper The seven golden rules for producing language-independent standards). DAIA is more than an implementation: it provides both, an abstract standard and bindings to several data languages (XML, JSON, and RDF). The conceptual DAIA data model defines some basic concepts and relationships (document, items, organisations, locations, services, availabilities, limitations…) independent from whether they are expressed in XML elements, attributes, RDF properties, classes, or any other data structuring method. The only reference to specific formats is the requirement that all unique identifiers must be URIs. Right now there is an XML Schema if you want to express DAIA in XML and an OWL ontology for RDF.
In its fourth year of development (see my previous posts from 2009) DAIA seems to have enough momentum to finally get accepted in practice. We use it in GBV library union (public server at http://daia.gbv.de/), there are independent implementations such as in Doctor-Doc, there is client-support in VuFind and I heard rumors that DAIA capabilities will be build into EBSCO and Summon Discovery Services. Native support in Integrated Library Systems, however, is still lacking – I already have given up hope and prefer a clean DAIA wrapper over a broken DAIA-implementation anyway. If you are interested in creating your own DAIA server/wrapper or client, have a look at my reference implementation DAIA and Plack::App::DAIA at CPAN and Oliver Goldschmidt’s PHP implementation in our common github repository. A conceptual overview as tree (DAIA/JSON, DAIA/XML) and as graph (DAIA/RDF) can be found here.
Still there are some details to be defined and I’d like to solve these issues to come to a version DAIA 1.0. These are
- How to deal with partial publications (you requested an article but only get the full book or you requested a series but only get a single volume).
- How to deal with digital publications (especially its possible service types: is „download“ a service distinct to „loan“ or is „presentation“ similar to online access restricted to the library’s intranet?).
- Final agreement on service types (now there are presentation: item can be used in the institution, loan: item can be used outside of the institution for a limited time, interloan: item can be send to another institution, openaccess: item can be access unrestricted, just get a free copy). Some extensions have been proposed.
- A set of common limitation types (for instance IP-based access restriction, permission-based access etc.).
I’d be happy to get some more feedback on these issues, especially concrete use cases. We are already discussing on the daia-devel mailing list but you can also comment in your own blog, at public-lld, code4lib, ils-di etc.).
In der kommenden Woche findet in Portland, Oregon die
dritte vierte* CODE4LIB-Konferenz statt. Mein französischer Bibliotheks-Informatik-Bruder Nicolas Morin fasst zusammen, auf welche Teile des Programms er sich am meisten freut. Ich war nach zwei sehr produktiven Workshops Ende letzter Woche so konferenzmüde, dass das BarCamp Hannover ausfallen musste. Bei der CODE4LIB wäre ich aber schon gerne dabei, um herauszufinden, was sich hinter so interessanten Vortragstitel wie „Finding Relationships in Marc Data“ von Rob Styles, „Zotero and You, or Bibliography on the Semantic Web“ von Trevor Owens, „Can Resource Description become Rigorous Data?“ von Karen Coyle und „RDF and RDA: declaring and modeling library metadata“ von Corey Harper versteckt und um all die andere Bibliothekstechnik-Nerds zu treffen 🙂
Am ehesten einen Ersatz bietet das Bibcamp am 16 und 17.05.2008 in Berlin, auf das ich hiermit nochmal ausdrücklich hinweisen möchte. Hier wird es im Gegensatz zur CODE4LIB vorranging deutschsprachig und weniger techniklastig zugehen, so dass für alle etwas dabei sein sollte, die an Neuerungen in Bibliotheken interessiert sind. Es wäre nett, sich in die inoffizielle Teilnehmerliste im Wiki einzutragen. Wir sehen uns in Berlin!