prefix-register
Status: Beta - API may change before 1.0 release.
A PostgreSQL-backed namespace prefix registry for CURIE expansion and prefix management.
Features
- Async-only - Built on tokio for high concurrency
- In-memory caching - Prefixes loaded on startup for fast CURIE expansion
- First-prefix-wins - Each URI can only have one registered prefix
- Batch operations - Efficiently store multiple prefixes in a single round trip
- PostgreSQL backend - Durable, scalable storage with connection pooling
- Startup resilience - Optional retry with exponential backoff for container orchestration
- Input validation - Prevents DoS via length limits (prefix max 64, URI max 2048 chars)
- Tracing instrumentation - Built-in spans and events for observability (configure subscriber in your app)
Use Cases
- CURIE expansion in RDF processing
- Namespace prefix management for semantic web applications
- Prefix discovery from Turtle, JSON-LD, XML documents
Installation
Add to your Cargo.toml:
[]
= "0.1"
= { = "1", = ["rt-multi-thread"] }
Database Setup
Create the namespaces table in your PostgreSQL database:
(
uri TEXT PRIMARY KEY,
prefix TEXT NOT NULL UNIQUE
);
Usage
use PrefixRegistry;
async
API
PrefixRegistry
new(database_url, max_connections)- Connect to PostgreSQL and load existing prefixesnew_with_retry(database_url, max_connections, retry_config)- Connect with retry logic for transient failuresget_uri_for_prefix(prefix)- Get the URI for a prefix (cache-first)get_prefix_for_uri(uri)- Get the prefix for a URIstore_prefix_if_new(prefix, uri)- Store a prefix if the URI doesn't have one (returnsbool)store_prefixes_if_new(prefixes)- Batch store prefixes (returnsBatchStoreResult)expand_curie(prefix, local_name)- Expand a CURIE to a full URIget_all_prefixes()- Get all registered prefix mappingsprefix_count()- Get the number of registered prefixes
RetryConfig
Configuration for startup retry behaviour:
default()- 5 retries, 1s initial delay, 30s max delaynone()- No retries (fail immediately)new(max_retries, initial_delay, max_delay)- Custom configuration
BatchStoreResult
Returned by store_prefixes_if_new() for detailed reporting:
stored: usize- Number of new prefixes storedskipped: usize- Number of prefixes skipped (URI already had a prefix)total()- Total prefixes processedall_stored()- Returns true if all were storednone_stored()- Returns true if none were stored
License
Apache-2.0