123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /** @file core.h
- *
- * @brief LSUP_REPO core module.
- */
- #ifndef _LSR_CORE_H
- #define _LSR_CORE_H
- #include "lsup_rdf.h"
- /*
- * Defines.
- */
- /// URI prefix for all managed resources.
- #define LSR_RSRC_PFX "rsrc"
- #define LSR_RSRC_NS "urn:lsres:"
- /// Label for descriptive resource type.
- #define LSR_TYPE_DESC "DESC_R"
- /// Label for data resource type.
- #define LSR_TYPE_DATA "DATA_R"
- /// Default graph back end.
- #define LSR_DEFAULT_BACKEND LSUP_STORE_MDB
- /// Determine if an IRI is an LSR resource.
- #define LSR_IS_RSRC_IRI(term) \
- (LSUP_IS_IRI (term) && strstr ((term)->data, LSR_RSRC_NS) == (term)->data)
- /*
- * Data types.
- */
- /// LS identifier type.
- typedef char LSR_id[UUIDSTR_SIZE];
- /// Term to key hash map.
- typedef struct hashmap LSR_TermMap;
- /// Resource flag type.
- typedef enum res_flags_t {
- LSR_RS_MANAGED = 1 << 0, ///< Managed by the repo.
- LSR_RS_DIRTY = 1 << 1, ///< Dirty buffer.
- } LSR_ResFlags;
- /*
- * Global variables.
- */
- /// Whether the environment is initialized.
- extern bool LSR_is_init;
- /// Managed predicates.
- extern LSR_TermMap *LSR_managed_preds;
- /// Managed RDF types.
- extern LSR_TermMap *LSR_managed_types;
- /// Default back end store.
- extern LSUP_Store *LSR_store;
- /*
- * API.
- */
- /** @brief Initialize LSUP and LSR environments.
- *
- * This function is idempotent.
- */
- LSUP_rc LSR_init (void);
- /** @brief Tear down LSUP and LSR environments.
- *
- * This function is idempotent. It is also called automatically at the end of
- * a program (`atexit()`).
- */
- void LSR_done (void);
- /** @brief Create a new URN term from a resource ID and optional fragment.
- *
- * @param[in] id Resource ID.
- *
- * @param[in] frag Fragment to add to the URN. If not NULL, it is appended to
- * the URN and an additional `#` character.
- *
- * @return New term. The default namespace map is associated with the term.
- * It should be freed with #LSUP_term_free().
- */
- inline LSUP_Term *LSR_id_to_urn (const uuid_t id, const char *frag)
- {
- char id_str[UUID_STR_LEN];
- uuid_unparse_lower (id, id_str);
- char *urn_str;
- if (frag) {
- // +2 for the : and #, NUL is included in UUID_STR_LEN.
- urn_str = malloc (
- strlen (LSR_RSRC_PFX) + UUID_STR_LEN + strlen (frag) + 2);
- if (! urn_str) return NULL;
- sprintf (urn_str, "%s:%s#%s", LSR_RSRC_PFX, id_str, frag);
- } else {
- urn_str = malloc (strlen (LSR_RSRC_PFX) + UUID_STR_LEN + 1);
- if (! urn_str) return NULL;
- sprintf (urn_str, "%s:%s", LSR_RSRC_PFX, id_str);
- }
- LSUP_Term *urn = LSUP_iriref_new (urn_str, LSUP_default_nsm);
- free (urn_str);
- return urn;
- }
- #endif /* _LSR_CODE_H */
|