Domain-Map & Traversierung
GET /osl/domain-map
Abschnitt betitelt „GET /osl/domain-map“Der vereinheitlichte Domain-Graph: der semantische Graph des Tenants, so wie
ein OSL-Konsument ihn sieht. Die Prämisse lautet alles ist eine Entity — ein
einziger entity-Knotentyp, getaggt nach composition (structured |
structured+content | content), plus metric- und candidate-Knoten. N-N
Junction-Tabellen sind keine Knoten: Sie kollabieren zu einer direkten N-N
Kante zwischen den Entities, die sie verbinden.
Deterministisch aus dem Manifest gebaut. Kein Request-Body.
{ "nodes": [ { "id": "entity:Customer", "kind": "entity", "name": "Customer", "plane": "mixed", "state": "existing", "composition": "structured+content", "description": null, "attributes": [ { "name": "customer_id", "role": "pk", "type": "string", "description": "Primary key of the entity." }, { "name": "sentiment", "role": "derived", "type": null, "description": "Derived attribute, extracted from content (AI)." } ], "meta": { "pk": "customer_id", "model": "customer", "legs": ["call_transcripts"] } }, { "id": "metric:arr", "kind": "metric", "name": "arr", "plane": "structured", "state": "existing", "composition": null, "attributes": [{ "name": "arr", "role": "metric", "type": null, "description": null }], "meta": {} } ], "edges": [ { "id": "asignacion~advisor:customer", "source": "entity:Customer", "target": "entity:advisor", "kind": "nn", "label": "asignacion · N-N", "declared": true, "source_attr": "customer_id", "target_attr": "advisor_id" } ], "bridges": ["asignacion"]}Traversierung — die TRAVERSE(...)-Form
Abschnitt betitelt „Traversierung — die TRAVERSE(...)-Form“Traversierung ist jetzt eine Form von OSL-SQL,
kein separater Endpoint (/osl/traverse wurde entfernt). Du SELECTest aus der
TRAVERSE(...)-Table-Function in einem POST /osl/query-Body:
SELECT concepto, amount_eurFROM TRAVERSE(anchor => 'customer', target => 'orders', keys => ('c-anna', 'c-bruno'))Es ist ein L2-Walk des strukturierten Beziehungsgraphen, Hop für Hop (einschließlich N-N über Brücken) — eine Sequenz beschränkter Gleichheits-Lookups (ein Filter, keine Join-Engine), mit einem verpflichtenden Kardinalitäts-Limit pro Hop plus Dedup, deterministisch. Beantwortet „Pablos Rechnungen“: gegeben die Schlüssel einer Anker-Entity, gib die verwandten Target-Entities zurück, jede gesteuert durch die Grants des Aufrufers.
Gesteuerte Content-Vorschau — POST /osl/sample
Abschnitt betitelt „Gesteuerte Content-Vorschau — POST /osl/sample“Ein paar echte Zeilen einer kuratierten Tabelle oder ein paar Chunks einer
Facette, gefiltert per ACL und redigiert nach Sensitivität/PII serverseitig.
kind ist "table" oder "facet"; limit ist standardmäßig 8 (table) / 5
(facet). Die Actor-Rollen über X-Actor-Roles — fehlend → deny-by-default bei
Facetten mit ACL. Die Antwort listet redacted_columns[] / redacted_fields[];
maskierte Zellen enthalten das Literal "[redacted]".