#include "core.h" bool LSR_is_init = false; /* * Initial namespace map. */ static char *nsm_str[][2] = { {"ebucore", "http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#"}, {"rsrc", LSR_RSRC_PFX}, {"lsup", "http://data.knowledgetx.com/onto/lsup#"}, {"premis", "http://www.loc.gov/premis/rdf/v1#"}, {NULL, NULL} }; /* * Repo-managed predicates. */ static char *mgd_pred_str[] = { "ebucore:hasMimeType", "lsup:created", "lsup:createdBy", "lsup:lastModified", "lsup:lastModifiedBy", "premis:hasSize", "premis:hasMessageDigest", NULL }; /* * Repo-managed RDF types. */ static char *mgd_type_str[] = { "lsup:AdminMetadata", "lsup:DataResource", "lsup:DescriptionResource", "lsup:List", "lsup:ListItem", "lsup:Metadata", "lsup:Proxy", "lsup:Resource", "lsup:Set", "lsup:UserMetadata", NULL }; LSR_TermMap *LSR_managed_preds, *LSR_managed_types; LSUP_rc LSR_init (void) { if (LSR_is_init) return LSUP_NOACTION; LSUP_rc rc = LSUP_init(); if (rc < 0) return rc; // Load additional LSUP_repo namespaces into store and memory. LSUP_NSMap *nsm = LSUP_default_env->nsm; for (int i = 0; nsm_str[i][0] != NULL; i++) LSUP_nsmap_add (nsm, nsm_str[i][0], nsm_str[i][1]); // Store the additional NS if this is the first time. LSUP_mdbstore_nsm_store (LSUP_default_env->mdb_store, nsm); // Cache managed predicates. for (int i = 0; mgd_pred_str[i] != NULL; i++) { LSUP_Term *uri = LSUP_iriref_new ( mgd_pred_str[i], LSUP_default_env->nsm); LSR_TermMap *titem; MALLOC_GUARD (titem, LSUP_MEM_ERR); titem->term = uri; titem->key = LSUP_term_hash (uri); HASH_ADD (hh, LSR_managed_preds, key, sizeof (titem->key), titem); } // Cache managed types. for (int i = 0; mgd_type_str[i] != NULL; i++) { LSUP_Term *uri = LSUP_iriref_new ( mgd_type_str[i], LSUP_default_env->nsm); LSR_TermMap *titem; MALLOC_GUARD (titem, LSUP_MEM_ERR); titem->term = uri; titem->key = LSUP_term_hash (uri); HASH_ADD (hh, LSR_managed_types, key, sizeof (titem->key), titem); } LSR_is_init = true; atexit (LSR_done); return LSUP_OK; } void LSR_done (void) { if (!LSR_is_init) return; log_info ("Tering down LSUP repo environment."); LSR_TermMap *entry, *tmp; HASH_ITER (hh, LSR_managed_preds, entry, tmp) { HASH_DEL (LSR_managed_preds, entry); LSUP_term_free (entry->term); free (entry); } HASH_ITER (hh, LSR_managed_types, entry, tmp) { HASH_DEL (LSR_managed_types, entry); LSUP_term_free (entry->term); free (entry); } LSUP_done(); LSR_is_init = false; } LSUP_Term *LSR_id_to_urn (const uuid_t id, const char *frag);