Libraries
Language implementations, shared semantics, and usage patterns
Implementations
All implementations follow identical semantics for canonicalization, matching, dispatch, and specificity.
| Language | URN Library | Cap Library |
|---|---|---|
| Rust | tagged-urn-rs |
capdag (reference implementation) |
| Go | tagged-urn-go |
capdag-go |
| Python | tagged-urn-py |
capdag-py |
| JavaScript | tagged-urn-js |
capdag-js |
| Swift / Objective-C | tagged-urn-objc |
capdag-objc |
Rust is the reference implementation. All other implementations are tested against the same specification and test vectors.
Shared Semantics
Every implementation guarantees:
- Canonicalization — Tags stored in
BTreeMap(or equivalent sorted structure) for alphabetical ordering. Direction tags (in,out) normalized tomedia:when missing or*. - Matching — Full
?/!/*wildcard truth table for generic Tagged URNs. Simpler tag-presence matching for Cap non-direction tags (no?/!semantics). - Dispatch — Three-axis mixed variance: contravariant input, covariant output, invariant cap-tags. See Dispatch.
- Specificity — Tag-count scoring for Cap URNs (0 or 1 per tag). Graded scoring (0–3) for generic Tagged URNs.
- Conformance —
conforms_tois asymmetric.is_dispatchableuses it with direction-aware variance.
Rust Example
use capdag::CapUrn;
// Direction tags default to media: when omitted
let provider = CapUrn::from_string("cap:op=extract")?;
let request = CapUrn::from_string(
"cap:in=\"media:pdf;bytes\";op=extract;out=\"media:text;utf8\""
)?;
// Use is_dispatchable for routing (NOT accepts)
assert!(provider.is_dispatchable(&request));
Go Example
import "capdag-go/urn"
provider, _ := urn.NewCapUrn("cap:op=extract")
request, _ := urn.NewCapUrn(`cap:in="media:pdf;bytes";op=extract;out="media:text;utf8"`)
// Dispatch check
if provider.IsDispatchable(request) {
// route to provider
}
Python Example
from capdag.urn import CapUrn
provider = CapUrn.from_string("cap:op=extract")
request = CapUrn.from_string('cap:in="media:pdf;bytes";op=extract;out="media:text;utf8"')
if provider.is_dispatchable(request):
# route to provider
pass
Semantics Boundaries
- Generic Tagged URN
?/!/*truth table applies toTaggedUrnAPIs. - Cap direction semantics and Cap non-direction tag matching follow
CapUrn::is_dispatchablebehavior. - Tie-break logic varies by subsystem — do not assume a single global policy. See Ranking for details.