Tuesday, 2020/08/18
10:00 am ET
Terrell Russell, Kory Draughn, Alan King, Dave Fellinger, Ton Smeele (Utrecht), Deep Patel (NIEHS), Mike Conway (NIEHS)
Update/Discussion:
- YODA has incorporated atomic endpoint - looking good so far - part of an update to manage users and groups
- CEDAR based on JSON-LD, not just JSON-Schema - could be additional requirements
- COVID-related research... https://www.go-fair.org/implementation-networks/overview/vodan/ - defining metadata vocabularies for COVID research in Netherlands - one is CEDAR-based and one is YODA-based
- Mike/Kory to work on Jargon testing framework to use atomic metadata API endpoint
USE CASES
-
GETTING DATA FROM CATALOG INTO GUI
- From GUI - Pass a collection, and 'resolve metadata templates'
- Look at AVUs associated with that collection
- AVU each would say I am attribute x of element y
- Json Array of templates used, and any leftover/orphan elements
- Return this to the GUI
-
SENDING UPDATES FROM GUI INTO CATALOG
- Gui, click pencil/edit icon… then editor would be informed by the template information about what kind of drop downs / counters to draw for each item
- Submitting, would go back through converter to get applied/saved in the database
-
Get/show all templates above this point that are involved in this point of the tree
-
Allow optional / available (not required) templates to be included/used
-
Possible labels / classification around multiple templates themselves - for findability / organization
ELEMENTS OF ARCHITECTURE
- CREATION/DEFINITION of templates (punt to CEDAR / others)
- HOSTING of templates (perhaps CEDAR, perhaps irods.org or github)
- BINDING/MANAGEMENT of templates to collections/data (part of MTWG MVP)
- USE of templates in GUI (part of MTWG MVP)
VERBS
- BIND - external reference, cache it, version it…
- imports json, marks its origin, creates a guid Puts it into irods
- template binding is then always to an irods object via path or avu
- RESOLVE - given logical path, give me universe of templates bound there and above
- MERGE - template + content -> AVU and back again
- EITHER... "ikea" bag of templates and data pairs… or pre-assembled merged single json payload…
- Probably go with the first, so applications can decide to show/ignore some of the metadata
- Or BOTH available in the API, so applications can choose which they want to use?
- EITHER... "ikea" bag of templates and data pairs… or pre-assembled merged single json payload…
TODO: Generate first draft of Swagger MT-iRODS API
- List overall available MT in the pool
- Add external MT into 'pool'
- List attached MTs on an object/collection
- Attach/Apply MT to an object/collection as required/optional
- Remove MT from an object/collection
- Resolve instance of MT based on an object/collection JSON
- Resolve json schema(s) that defines the metadata to be applied via template X to collection Y
- BONUS - Rasterize / Pre-assemble? Set of nested/attached schemas down into a single schema
YODA is using server-side functions, but exposed via Swagger API for lightweight clients - all consistent. We would like to emulate that approach with MT...
To implement the Swagger documented metadata template interface, one could prototype reusing components that we have developed for use in Yoda.
The basic idea is that Python rules residing in the iRODS server are tagged as part of an API using a decorator. iRODS clients, e.g. browser or likewise, can call the rule in a standardized way. The processing includes argument handling/validation and error handling.
To give you a flavor of what we are doing, the Yoda API is being defined in OpenAPI format, this can be rendered in Swagger: https://petstore.swagger.io/?url=https://utrechtuniversity.github.io/irods-ruleset-uu/api.json#/browse/post_browse_folder NB: this is in development, we are refactoring relevant Yoda functions to be part of the API.
Now the relevant API components are:
- CLIENT/BROWSER: some javascript code to execute client side, wraps an Ajax POST call to the web server
- name of iRODS rule to call (string)
- arguments serialized as a JSON structure
- receives JSON encoded function results including any error-info
- see: https://github.com/UtrechtUniversity/yoda-portal-research/blob/development/public/static/js/research.js#L489-L495
- WEB SERVER: passes the rule call onto iRODS
- calls requested rule
- passes the JSON encoded argument object to the rule
- returns STDOUT from rule back to client (not much magic in here, just calling the rule)
- iRODS PYTHON RULE ENGINE: processes the api call
- Python functions suitable to be called as part of the API are decorated as "@api"
- the decorator maps (+validates) the JSON argument object to parameters for the Python function
- the decorator encodes function results and any error-info into a JSON structure, writes to STDOUT
- see: https://github.com/UtrechtUniversity/irods-ruleset-uu/blob/development/browse.py#L18
- to see the code of the decorator:
- For your reference, Lazlo and Chris have presented these decorators at the recent UGM2020.
The decorator code and the javascript wrapper code are generic elements that help to make life very easy for the client application developer and for rule developers.