0
Like a Can Opener for your Data Silo
simple access through AtomPub and Jangle
A short history of library APIs
Z39.50

• Amazingly, yes, this has to be considered an API


• Own network protocol


• @or @and @attr 1=1003 quot;Hemingw...
SRU

• Improvement: XML over HTTP


• CQL vastly more user & developer friendly than RPN/PQF


• Unknown/unused outside of...
OAI-PMH

• Simple and effective


• Provides unambiguous, reusable identifiers for records


• Read only


• No search capa...
DLF ILS-DI API

• “Best of Breed” approach


  • OAI-PMH


  • SRU


  • NCIP, possibly
Proprietary APIs

• RDBMS Access


• SirsiDynix Unicorn/Symphony API


• Ex Libris X-Server
The net effect

• scattershot


• niche


• awkward


• limiting
Atom Publishing Protocol
AtomPub

• IETF Standard (RFC 5023) for publishing content on the web


• Atom Syndication Format + REST = AtomPub


• Wor...
AtomPub continued

• Used by Google, Microsoft, IBM


• Available in Wordpress, MovableType, Drupal, etc.


  • Broad clie...
Jangle

• Applies a common data model to library services using AtomPub


• Four discrete collection types (Entities)


  ...
Jangle

• Applies a common data model to library services using AtomPub


• Four discrete collection types (Entities)


  ...
Resources

• The primary objects being exposed by this service


  • Bibliographic records


  • Reserve records


  • Arc...
Jangle

• Applies a common data model to library services using AtomPub


• Four discrete collection types (Entities)


  ...
Items

• A specific physical representation of a Resource


  • A copy of a book


  • Serials holdings


  • An electronic...
Jangle

• Applies a common data model to library services using AtomPub


• Four discrete collection types (Entities)


  ...
Actors

• The ‘users’ of a system


   • Borrowers


   • Submitters


   • Account holders


   • Content creators
Jangle

• Applies a common data model to library services using AtomPub


• Four discrete collection types (Entities)


  ...
Collections

• Any combination of the other entities


• Can be homogenous or heterogenous among entity types
Jangle

• Applies a common data model to library services using AtomPub


• Four discrete collection types (Entities)


  ...
Connectors

• Provide the business logic for specific systems


• Provide responses as JSON objects


• Four response type:...
Jangle

• Applies a common data model to library services using AtomPub


• Four discrete collection types (Entities)


  ...
The Jangle Core

• The AtomPub public facing interface


• Proxies requests for one or many connectors


• Serializes conn...
http://ex.example.org/jconnector/resources/?offset=300



                                                                ...
ex.example.org
http://example.org/other/actors/1234?format=vcard




                             GET
                    ...
Services Connector Response
{ quot;requestquot;:quot;http://demo.jangle.org/openbiblio/servicesquot;,
  quot;typequot;:quo...
Service Document

 <workspace>
   <atom:title>openbiblio</atom:title>
    <collection href=quot;http://demo.jangle.org/ope...
Service Document
<service xmlns=quot;http://www.w3.org/2007/appquot; xmlns:atom=quot;http://www.w3.org/2005/Atomquot;>
 <w...
Jangle

• Applies a common data model to library services using AtomPub


• Four discrete collection types (Entities)


  ...
Explain Document
<OpenSearchDescription xmlns=quot;http://a9.com/-/spec/opensearch/1.1/quot; xmlns:jangle=quot;http://jang...
Explain Document

<Query role=quot;examplequot; searchTerms=quot;dc.title=thomasquot;>
 <zr:explain xmlns:zr=quot;http://e...
Atom with extensions

• Jangle adds a few extensions & conventions to establish:


  • relationships between entities


  ...
Jangle Vocabulary

• URIs to unambiguously define relationships, formats, categories


  • http://jangle.org/vocab/formats#...
Feed Document

• http://demo.jangle.org/openbiblio/resources/


  • http://connector.jangle.org/resources/


• http://demo...
Current State of Jangle

• Version 1.0 of the specification approved in November


  • Currently compiling requirements for...
Jangle enabled applications

• Connectors


   • OpenBiblio ILS - Reference ILS implementation


   • Talis Alto


• Helio...
Adapters

• Convert Jangle’s output to other formats


• DLF ILS-DI


  • OAI-PMH


  • Availability Lookup


• Google Sit...
The Future

• Need more connectors to begin establishing community profiles


• Begin experimenting with POST, PUT, DELETE
...
The Community

• http://jangle.org/


   • spec, announcements, HOWTOs


• http://groups.google.com/group/jangle-discuss

...
Questions?
Thanks!
Ross Singer - Talis
rossfsinger@gmail.com
Upcoming SlideShare
Loading in...5
×

Like a can opener for your data silo: simple access through AtomPub and Jangle

1,388

Published on

Jangle is an open specification to apply the Atom Publishing Protocol (AtomPub) to library systems and data. It provides a simple RESTful interface that can be accessed with common Atom Syndication and AtomPub clients making it easier to integrate library data into other applications. This presentation will describe the architecture of Jangle, show how it works and give some ideas as to how it could be used for common integration problems. -- Ross Singer, Talis

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,388
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Like a can opener for your data silo: simple access through AtomPub and Jangle"

  1. 1. Like a Can Opener for your Data Silo simple access through AtomPub and Jangle
  2. 2. A short history of library APIs
  3. 3. Z39.50 • Amazingly, yes, this has to be considered an API • Own network protocol • @or @and @attr 1=1003 quot;Hemingway, Ernestquot; @attr 1=4 quot;The Sun Also Risesquot; @attr 1=4 quot;A Farewell to Armsquot; • Unknown/unused outside of library domain • Client support generally needs to be compiled in • Incredibly high barrier to entry to create services
  4. 4. SRU • Improvement: XML over HTTP • CQL vastly more user & developer friendly than RPN/PQF • Unknown/unused outside of library domain • Uncommon inside the library domain • Read only (currently)
  5. 5. OAI-PMH • Simple and effective • Provides unambiguous, reusable identifiers for records • Read only • No search capability • Retrieve one or everything. No way to request multiple specific identifiers • Can only transport XML
  6. 6. DLF ILS-DI API • “Best of Breed” approach • OAI-PMH • SRU • NCIP, possibly
  7. 7. Proprietary APIs • RDBMS Access • SirsiDynix Unicorn/Symphony API • Ex Libris X-Server
  8. 8. The net effect • scattershot • niche • awkward • limiting
  9. 9. Atom Publishing Protocol
  10. 10. AtomPub • IETF Standard (RFC 5023) for publishing content on the web • Atom Syndication Format + REST = AtomPub • Workspaces, Collections, Entries, Categories • Unambiguous identifiers (via URIs) for every resource • Only two kinds of documents ever served: Atom feeds and service documents
  11. 11. AtomPub continued • Used by Google, Microsoft, IBM • Available in Wordpress, MovableType, Drupal, etc. • Broad client support • Broad awareness outside library domain • No baked in search, but can easily use OpenSearch (which adds a third document type with the description document)
  12. 12. Jangle • Applies a common data model to library services using AtomPub • Four discrete collection types (Entities) • Resources, Items, Actors, Collections • Two components • Core & Connectors • OpenSearch + CQL
  13. 13. Jangle • Applies a common data model to library services using AtomPub • Four discrete collection types (Entities) • Resources, Items, Actors, Collections • Two components • Core & Connectors • OpenSearch + CQL
  14. 14. Resources • The primary objects being exposed by this service • Bibliographic records • Reserve records • Archival collections • Electronic Journals
  15. 15. Jangle • Applies a common data model to library services using AtomPub • Four discrete collection types (Entities) • Resources, Items, Actors, Collections • Two components • Core & Connectors • OpenSearch + CQL
  16. 16. Items • A specific physical representation of a Resource • A copy of a book • Serials holdings • An electronic representation (PDF, PS, JPG, etc.)
  17. 17. Jangle • Applies a common data model to library services using AtomPub • Four discrete collection types (Entities) • Resources, Items, Actors, Collections • Two components • Core & Connectors • OpenSearch + CQL
  18. 18. Actors • The ‘users’ of a system • Borrowers • Submitters • Account holders • Content creators
  19. 19. Jangle • Applies a common data model to library services using AtomPub • Four discrete collection types (Entities) • Resources, Items, Actors, Collections • Two components • Core & Connectors • OpenSearch + CQL
  20. 20. Collections • Any combination of the other entities • Can be homogenous or heterogenous among entity types
  21. 21. Jangle • Applies a common data model to library services using AtomPub • Four discrete collection types (Entities) • Resources, Items, Actors, Collections • Two components • Connectors & Core • OpenSearch + CQL
  22. 22. Connectors • Provide the business logic for specific systems • Provide responses as JSON objects • Four response type: • Service, Feed, Search, Explain • Inspired by, but not identical to, AtomPub
  23. 23. Jangle • Applies a common data model to library services using AtomPub • Four discrete collection types (Entities) • Resources, Items, Actors, Collections • Two components • Connectors & Core • OpenSearch + CQL
  24. 24. The Jangle Core • The AtomPub public facing interface • Proxies requests for one or many connectors • Serializes connector responses into: • Atom service documents • Atom feeds • OpenSearch description documents
  25. 25. http://ex.example.org/jconnector/resources/?offset=300 GET ex.example.org http://example.org/ex/resources/?offset=300 Connector GET JSON Feed Response Jangle Client Core Atom Feed other.example.org Connector
  26. 26. ex.example.org http://example.org/other/actors/1234?format=vcard GET Jangle Client http://other.example.org/actors/1234?format=vcard Core Atom Feed GET other.example.org JSON Feed Response
  27. 27. Services Connector Response { quot;requestquot;:quot;http://demo.jangle.org/openbiblio/servicesquot;, quot;typequot;:quot;servicesquot;, quot;versionquot;:quot;1.0quot;, quot;titlequot;:quot;openbiblioquot;, quot;entitiesquot;: { quot;Actorquot;:{ quot;titlequot;:quot;Borrowersquot;, quot;pathquot;:quot;/actorsquot;, quot;searchablequot;:false },quot;Resourcequot;:{ quot;titlequot;:quot;Bibliographic recordsquot;, quot;pathquot;:quot;/resourcesquot;, quot;searchablequot;:quot;/openbiblio/resources/search/description/quot;, quot;categoriesquot;: [quot;opacquot;] },quot;Itemquot;:{ quot;titlequot;:quot;Holdings recordsquot;, quot;pathquot;:quot;/itemsquot;, quot;searchablequot;:false, quot;categoriesquot;: [quot;copyquot;,quot;holdquot;] }, quot;Collectionquot;: { quot;titlequot;:quot;Categoriesquot;, quot;pathquot;:quot;/collectionsquot;, quot;searchablequot;:false } }, quot;categoriesquot;: { quot;opacquot;:{ quot;schemequot;:quot;http://jangle.org/vocab/terms#dlf-ilsdi-resourcequot; },quot;holdquot;:{ quot;schemequot;:quot;http://jangle.org/vocab/terms#holdquot; },quot;copyquot;:{ quot;schemequot;:quot;http://jangle.org/vocab/terms#copyquot; } } }
  28. 28. Service Document <workspace> <atom:title>openbiblio</atom:title> <collection href=quot;http://demo.jangle.org/openbiblio/actorsquot;> <atom:title>Borrowers</atom:title> </collection> <collection href=quot;http://demo.jangle.org/openbiblio/resourcesquot;> <atom:title>Bibliographic records</atom:title> <atom:category term='opac' scheme='http://jangle.org/vocab/terms#dlf-ilsdi- resource' /> </collection> <collection href=quot;http://demo.jangle.org/openbiblio/itemsquot;> <atom:title>Holdings records</atom:title> <atom:category term='copy' scheme='http://jangle.org/vocab/terms#copy' /> <atom:category term='hold' scheme='http://jangle.org/vocab/terms#hold' /> </collection> <collection href=quot;http://demo.jangle.org/openbiblio/collectionsquot;> <atom:title>Categories</atom:title> </collection> </workspace>
  29. 29. Service Document <service xmlns=quot;http://www.w3.org/2007/appquot; xmlns:atom=quot;http://www.w3.org/2005/Atomquot;> <workspace> <atom:title>openbiblio</atom:title> <collection href=quot;http://demo.jangle.org/openbiblio/actorsquot;> <atom:title>Borrowers</atom:title> </collection> <collection href=quot;http://demo.jangle.org/openbiblio/resourcesquot;> <atom:title>Bibliographic records</atom:title> <atom:category term='opac' scheme='http://jangle.org/vocab/terms#dlf-ilsdi-resource' /> </collection> <collection href=quot;http://demo.jangle.org/openbiblio/itemsquot;> <atom:title>Holdings records</atom:title> <atom:category term='copy' scheme='http://jangle.org/vocab/terms#copy' /> <atom:category term='hold' scheme='http://jangle.org/vocab/terms#hold' /> </collection> <collection href=quot;http://demo.jangle.org/openbiblio/collectionsquot;> <atom:title>Categories</atom:title> </collection> </workspace><workspace> <atom:title>alto</atom:title> <collection href=quot;http://demo.jangle.org/alto/collectionsquot;> <atom:title>Categories</atom:title> </collection> <collection href=quot;http://demo.jangle.org/alto/itemsquot;> <atom:title>Holdings records</atom:title> <atom:category term='copy' scheme='http://jangle.org/vocab/terms#copy' /> <atom:category term='hold' scheme='http://jangle.org/vocab/terms#hold' /> </collection> <collection href=quot;http://demo.jangle.org/alto/resourcesquot;> <atom:title>Bibliographic records</atom:title> <atom:category term='opac' scheme='http://jangle.org/vocab/terms#dlf-ilsdi-resource' /> </collection> <collection href=quot;http://demo.jangle.org/alto/actorsquot;> <atom:title>Borrowers</atom:title> </collection> </workspace> </service>
  30. 30. Jangle • Applies a common data model to library services using AtomPub • Four discrete collection types (Entities) • Resources, Items, Actors, Collections • Two components • Core & Connectors • OpenSearch + CQL
  31. 31. Explain Document <OpenSearchDescription xmlns=quot;http://a9.com/-/spec/opensearch/1.1/quot; xmlns:jangle=quot;http://jangle.org/opensearch/quot;> <ShortName>Bibliographic records</ShortName> <LongName>Search Bibliographic records in OpenBiblio</LongName> <Description>Bibliographic records search. Defaults to keyword anywhere.</Description> <SyndicationRight>open</SyndicationRight> <Tags>catalog library</Tags> <Query role=quot;examplequot; searchTerms=quot;dc.title=thomasquot;> <zr:explain xmlns:zr=quot;http://explain.z3950.org/dtd/2.1/quot;> <zr:indexInfo> <zr:set name=quot;dcquot; identifier=quot;info:srw/cql-context-set/1/dc-v1.1quot;/> <zr:index><zr:map><zr:name set=quot;dcquot;>title</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;dcquot;>creator</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;dcquot;>subject</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;dcquot;>identifier</zr:name></zr:map></zr:index> <zr:set name=quot;recquot; identifier=quot;info:srw/cql-context-set/2/rec-1.1quot;/> <zr:index><zr:map><zr:name set=quot;recquot;>identifier</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;recquot;>collectionName</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;recquot;>lastModificationDate</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;recquot;>creationDate</zr:name></zr:map></zr:index> <zr:set name=quot;cqlquot; identifier=quot;info:srw/cql-context-set/1/cql-v1.2quot;/> <zr:index><zr:map><zr:name set=quot;cqlquot;>allIndexes</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;cqlquot;>anyIndexes</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;cqlquot;>keywords</zr:name></zr:map></zr:index> </zr:indexInfo> </zr:explain> </Query> </OpenSearchDescription>
  32. 32. Explain Document <Query role=quot;examplequot; searchTerms=quot;dc.title=thomasquot;> <zr:explain xmlns:zr=quot;http://explain.z3950.org/dtd/2.1/quot;> <zr:indexInfo> <zr:set name=quot;dcquot; identifier=quot;info:srw/cql-context-set/1/dc-v1.1quot;/> <zr:index><zr:map><zr:name set=quot;dcquot;>title</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;dcquot;>creator</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;dcquot;>subject</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;dcquot;>identifier</zr:name></zr:map></zr:index> <zr:set name=quot;recquot; identifier=quot;info:srw/cql-context-set/2/rec-1.1quot;/> <zr:index><zr:map><zr:name set=quot;recquot;>identifier</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;recquot;>collectionName</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;recquot;>lastModificationDate</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;recquot;>creationDate</zr:name></zr:map></zr:index> <zr:set name=quot;cqlquot; identifier=quot;info:srw/cql-context-set/1/cql-v1.2quot;/> <zr:index><zr:map><zr:name set=quot;cqlquot;>allIndexes</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;cqlquot;>anyIndexes</zr:name></zr:map></zr:index> <zr:index><zr:map><zr:name set=quot;cqlquot;>keywords</zr:name></zr:map></zr:index> </zr:indexInfo> </zr:explain> </Query>
  33. 33. Atom with extensions • Jangle adds a few extensions & conventions to establish: • relationships between entities • alternate metadata formats for resources • indexes for OpenSearch queries
  34. 34. Jangle Vocabulary • URIs to unambiguously define relationships, formats, categories • http://jangle.org/vocab/formats#application/marc • http://jangle.org/vocab/Entity#Actor • http://jangle.org/vocab/terms#dlf-ilsdi-resource • Should eventually move to the NSDL MetadataRegistry or similar service
  35. 35. Feed Document • http://demo.jangle.org/openbiblio/resources/ • http://connector.jangle.org/resources/ • http://demo.jangle.org/openbiblio/actors/1711/items • http://demo.jangle.org/openbiblio/items/-/copy
  36. 36. Current State of Jangle • Version 1.0 of the specification approved in November • Currently compiling requirements for 1.1 • Connector & Core frameworks available in • PHP • Ruby • Groovy
  37. 37. Jangle enabled applications • Connectors • OpenBiblio ILS - Reference ILS implementation • Talis Alto • Helios/fac-back-opac/Kobold Chieftain • Scriblio • Blacklight
  38. 38. Adapters • Convert Jangle’s output to other formats • DLF ILS-DI • OAI-PMH • Availability Lookup • Google SiteMaps
  39. 39. The Future • Need more connectors to begin establishing community profiles • Begin experimenting with POST, PUT, DELETE • SWORD as template? • Examples of non-OPAC based client support • Courseware • Reserves systems
  40. 40. The Community • http://jangle.org/ • spec, announcements, HOWTOs • http://groups.google.com/group/jangle-discuss • Primary discussion forum • http://code.google.com/p/jangle • Source, Issue tracking
  41. 41. Questions?
  42. 42. Thanks! Ross Singer - Talis rossfsinger@gmail.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×