123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #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 ("Tearing 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);
|