Skip to content

Make committed TriG base-relative (base applied at load time) - #9

Merged
namedgraph merged 1 commit into
masterfrom
base-relative-trig
Jul 24, 2026
Merged

Make committed TriG base-relative (base applied at load time)#9
namedgraph merged 1 commit into
masterfrom
base-relative-trig

Conversation

@namedgraph

Copy link
Copy Markdown
Member

Kodėl

Užfiksuoti datasets/current/**/*.trig failai koduodavo diegimo host'ą į kiekvieną URI
(<https://linkeddata.lt/persons/84854/#this>, ~717k kartų). Dėl to bazė būdavo „įkepta“
į duomenis: perjungiant BASE (localhost dev ↔ linkeddata.lt prod) reikėdavo perkurti visą
rinkinį, o failai nebūdavo perkeliami.

Kas pakeista

Užfiksuoti failai dabar naudoja santykines URI be @base (<persons/84854/#this>); bazė
pritaikoma krovimo / skaitymo / validavimo metu. Tas pats rinkinys tinka bet kuriai bazei —
perkurti nereikia. RDF saugo tik absoliučias URI, tad į Fuseki užkraunami duomenys identiški
keičiasi tik git serializacija. Išorinės URI (Wikidata, Commons, lrs.lt, schema.org, ES lentelės,
mailto/tel) lieka absoliučios.

Mapping'ai vis dar generuoja absoliučias URI atmintyje — naujas etl/lib/relativize.sh perrašo
arq/rdflib išvestį į santykinę rašymo metu (riot srautinis rašytojas + nuimtas @base).

  • Rašymas: relativize.sh; graphify.sh praleidžia arq per jį; reconcile/photos tampa
    bazei jautrūs per rdflib publicID ir relativizuojami išvestyje.
  • Skaitymas: validate.sh/shacl.sh/run.sh priima bazę ir išsprendžia santykines→absoliučias.
  • Krovimas: tdb-loader išsprendžia pagal BASE_URI (.env) su riotcmd.riot prieš
    tdb2.tdbloader; make load perduoda -e BASE_URI.
  • CI + dokumentai: shacl-validation.yml, CLAUDE.md, README.md, URI-SCHEME.md, config.mk.

Verifikacija (Jena 5.6.0)

  • Round-trip identiškumas visiems 19 failų: riot --base=$B --output=nquads iš santykinio
    failo == ankstesni absoliutūs trejetai (rūšiuoti) — įskaitant 673k ketvertų streets.trig.
  • validate.sh/shacl.sh praeina teisingais grafų skaičiais (148 Seimo nariai, 10 apskričių…);
    cross-graph užklausos (committee-chairs, 4 lygių territorial-chain) grąžina pilnus rezultatus.
  • Tas pats failas teisingai užsikrauna ir localhost, ir linkeddata.lt bazėje; riotcmd.riot
    patvirtintas fuseki image'e.
  • Užfiksuoti failai perrašyti relativizuojant vietoje (be duomenų dreifo) — baitiškai identiški
    tam, ką dabar generuoja pipeline'as, ir vienodi tarp Jena 5.6.0/6.1.0.

Pastaba (jau egzistavusi, nesusijusi klaida)

config.mk numatytoji JENA_HOME = 6.1.0, bet arq 6.1.0 negali įvykdyti quad CONSTRUCT
(No dataset writer for Turtle_pretty) — veikia tik 5.6.0. Aplinka eksportuoja 5.6.0, tad realiai
nekliūva, bet make -C etl su config numatytąja verte nulūžtų. Verta sutvarkyti atskirai.

🤖 Generated with Claude Code

Committed datasets/current/**/*.trig now use base-relative IRIs with no
@base (e.g. <persons/84854/#this>) instead of absolute
https://linkeddata.lt/… URIs. The base is supplied at load/parse/validate
time, so one committed dataset serves any deployment base (localhost dev,
linkeddata.lt prod) with no regeneration.

RDF stores only absolute IRIs, so the data loaded into Fuseki is identical;
only the git serialization changes. The mappings still mint absolute IRIs
in-model — a new etl/lib/relativize.sh rewrites arq/rdflib output to
relative on write (riot streaming writer + strip @base), leaving external
URIs (Wikidata, Commons, lrs.lt, schema.org, EU tables, mailto/tel) absolute.

- write: relativize.sh; graphify.sh pipes arq through it; reconcile/photos
  become base-aware via rdflib publicID and are relativized on write
- read: validate.sh/shacl.sh/run.sh take a base, resolving relative→absolute
- load: tdb-loader resolves against BASE_URI (.env) via riotcmd.riot before
  tdb2.tdbloader; make load passes -e BASE_URI
- CI (shacl-validation.yml) + docs (CLAUDE.md, README, URI-SCHEME, config.mk)

Verified with Jena 5.6.0: round-trip (riot --base=$B --output=nquads) of
every relativized file is byte-identical to the prior absolute triples;
validation, cross-graph queries, and load-time rebase to both bases pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@namedgraph
namedgraph merged commit e3d245d into master Jul 24, 2026
4 checks passed
@namedgraph
namedgraph deleted the base-relative-trig branch July 24, 2026 22:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant