Module Bushel_sync.Zotero

DOI resolution via Zotero Translation Server

Zotero Translation Server client for DOI resolution

val src : Logs.src
module Log : Logs.LOG

Types

type paper_metadata = {
  1. title : string;
  2. authors : string list;
  3. year : int;
  4. month : int;
  5. bibtype : string;
  6. publisher : string;
  7. booktitle : string;
  8. journal : string;
  9. institution : string;
  10. pages : string;
  11. volume : string option;
  12. number : string option;
  13. doi : string option;
  14. url : string option;
  15. abstract : string option;
  16. bib : string;
}

Month Parsing

val month_of_string : string -> int
val string_of_month : int -> string

JSON Helpers for Zotero JSON

Zotero returns complex JSON with varying structure. We use pattern matching on the generic json type.

type creator = {
  1. first_name : string;
  2. last_name : string;
}
val creator_jsont : creator Jsont.t
val find_in_json : Jsont.json -> string list -> Jsont.json option

Extract string from generic JSON, returning None if missing or wrong type

val get_string : Jsont.json -> string list -> string option
val get_string_exn : Jsont.json -> string list -> default:string -> string
val get_int : Jsont.json -> string list -> default:int -> int
val get_creators : Jsont.json -> creator list

BibTeX Parsing

val extract_bibtex_field : string -> string -> string option

Simple BibTeX field extraction

val extract_bibtex_type : string -> string

Author Parsing

val parse_authors : string -> string list

Split "Last, First and Last2, First2" into list of names

Zotero Translation Server API

val web_endpoint : string -> string
val export_endpoint : string -> string
val resolve_doi : http:Requests.t -> server_url:string -> string -> (Jsont.json, string) result
val resolve_url : http:Requests.t -> server_url:string -> string -> (Jsont.json, string) result
val export_bibtex : http:Requests.t -> server_url:string -> Jsont.json -> (string, string) result

Metadata Extraction

val extract_metadata : http:Requests.t -> server_url:string -> slug:string -> doi:string option -> Jsont.json -> (paper_metadata, string) result

Extract paper metadata from Zotero JSON + BibTeX response.

DOI Resolution

val resolve : http:Requests.t -> server_url:string -> slug:string -> string -> (paper_metadata, string) result
val resolve_from_url : http:Requests.t -> server_url:string -> slug:string -> string -> (paper_metadata, string) result

Resolve metadata from an arbitrary URL (e.g. a journal article page). The DOI is extracted from the Zotero response if available.

Paper File Generation

val to_yaml_frontmatter : slug:'a -> ver:'b -> paper_metadata -> string

Merging with Existing Papers

val merge_with_existing : existing:Bushel.Paper.t -> paper_metadata -> paper_metadata