Scrydon

Ontologie

La couche sémantique typée qui s'appuie sur vos tables gérées et votre base de connaissances — Objets, Liens, Actions et l'atelier qui les crée.

La couche d'ontologie est la colonne vertébrale sémantique typée de Scrydon. Elle prend des données brutes (tables gérées, pages de base de connaissances, tâches de flux de processus) et fournit aux agents, à la vue graphique et à l'analyste une vue stable, typée et gouvernée du monde.

Au lieu d'« une ligne dans la table regulated_entities », un workflow raisonne sur une « RegulatedEntity avec un legalName, un riskClassification, et des liens vers ses affiliatedPersons ». La plateforme projette l'Objet typé à partir de la ligne sous-jacente au moment de la lecture — pas d'ETL en batch, pas de copie.

Concepts fondamentaux

ConceptDescription
Type d'objetUne entité typée (Transaction, Customer, RegulatedEntity). Possède des propriétés, des règles d'identité, un titre et une icône optionnels.
Type de lienUne relation typée entre deux types d'objets (Customer → owns → Account).
Type d'actionUne mutation côté serveur typée, conditionnée par le point de décision de politique (AssignAsset, FileSAR).
Liaison« Comment construire un Objet typé à partir d'une source réelle » — une ligne de table gérée, une page de base de connaissances, une tâche de flux de processus.
PackUn bundle réutilisable de types d'objets, de liens, d'actions et de liaisons, livré sous forme d'extension.
BrancheLe schéma est versionné. main est en lecture seule ; les modifications passent par des propositions.

Position dans l'architecture

La couche d'ontologie — types d'objets, types de liens, types d'actions, liaisons, branches et propositions — forme une bande unique, mise en accent, au-dessus de trois sources : tables gérées, base de connaissances et flux de processus. Une flèche remonte de chaque source vers la couche, avec la mention « project on read » : une RegulatedEntity typée peut être adossée à n'importe laquelle d'entre elles, sans copie ni ETL par lots.

Une instance RegulatedEntity typée peut être adossée à l'une quelconque de ces sources — au niveau du type, l'appelant n'a pas besoin de le savoir.

Points d'accès en lecture

AppelantPoint d'entrée
Agents de workflowLe bloc Get Object + les outils scrydon:ontology
Vue graphique/graph — affiche le graphe du schéma
Analyste/analyst — requêtes en langage naturel sur les Objets typés
Agents avec récupération augmentéeLe moteur de contexte — recherche sémantique sur les instances typées

Les quatre passent par le même chemin de projection, donc le masquage des colonnes, les filtres de lignes et les étiquettes DLP s'appliquent de manière uniforme.

Lire un schéma versionné depuis un service

Les services côté serveur limités à un espace de travail peuvent utiliser @scrydon/ontology-sdk/client pour lire le schéma d'ontologie publié avec des réponses strictement validées à l'exécution. Le client expose des espaces de noms distincts types, linkTypes et actionTypes ; chaque réponse identifie la révision et la branche résolues.

import {
  createKernelClient,
  OntologyApiError,
} from "@scrydon/ontology-sdk/client";

const ontology = createKernelClient({
  baseUrl: `${ontologyServiceUrl}/api/ontology`,
  headers: () => ({
    ...admittedCallerHeaders(),
    "x-organization-id": organizationId,
    "x-workspace-id": workspaceId,
    "x-workspace-environment-id": workspaceEnvironmentId,
  }),
});

try {
  const current = await ontology.types.list({ ontology: "crm" });
  const owns = await ontology.linkTypes.get({
    ontology: "crm",
    name: "Owns",
    revisionId: current.revision.revisionId,
  });
  const actions = await ontology.actionTypes.list({
    ontology: "crm",
    revisionId: current.revision.revisionId,
  });
} catch (error) {
  if (error instanceof OntologyApiError) {
    console.error(error.code, error.httpStatus, error.details);
  }
  throw error;
}

Omettez revisionId pour résoudre une seule fois le pointeur publié courant. Passez ensuite la valeur revision.revisionId retournée afin d'épingler les lectures suivantes à cette révision de schéma immuable. Le callback synchrone headers s'exécute à chaque requête et doit renvoyer le tuple de tenant complet ainsi que le transport admis de l'appelant courant ; n'exposez jamais des identifiants de service ni des en-têtes utilisateur mis en cache au code du navigateur. Les requêtes échouées lèvent OntologyApiError, dont le statut HTTP est disponible via httpStatus. Une réponse non-2xx dépourvue d'enveloppe d'erreur du noyau — un 502 HTML renvoyé par un proxy, un 401 vide provenant du maillage — est elle aussi une OntologyApiError : son code est MALFORMED_ERROR_RESPONSE, httpStatus reprend le statut retourné et details contient le type de contenu de la réponse ainsi qu'un aperçu borné du corps.

Lire des objets et des liens depuis un service

Le même client expose les espaces de noms stricts objects et links. L'appelant utilise un seul contrat, que le type soit stocké dans le registre de Scrydon ou projeté depuis une liaison gouvernée ; le champ origin de chaque résultat indique le plan qui l'a fourni. Les résultats du registre contiennent origin.kind === 'ledger', un marquage et une séquence de registre. Les résultats projetés contiennent origin.kind === 'source', la liaison et sa version, la référence source et les métadonnées de matérialisation. La révision de schéma d'un résultat source identifie le schéma utilisé pour interpréter la ligne ; ce n'est pas un instantané historique de la table en amont.

const assets = await ontology.objects.query({
  ontology: "crm",
  objectTypes: ["Asset"],
  filter: [{ property: "status", op: "eq", value: "active" }],
  limit: 50,
});

const neighborhood = await ontology.objects.neighbors({
  ontologyApiName: "crm",
  objectType: "Asset",
  objectId: assets.sets[0].objects[0].objectId,
  depth: 1,
  limit: 25,
});

const relationships = await ontology.links.list({
  ontologyApiName: "crm",
  linkType: "Owns",
  sourceRef: neighborhood.center.objectId,
});

objects.list et links.list renvoient des curseurs opaques signés ; renvoyez un curseur reçu sans le modifier. objects.query accepte au maximum 20 types d'objets, huit filtres et 200 lignes par ensemble de résultats. objects.neighbors limite le parcours à une profondeur de 3 et à 100 voisins. Les lectures adossées à une source échouent de manière fermée si l'autorisation ou le transport source est indisponible, et les lectures historiques sont réservées aux objets détenus par le registre.

Rechercher des instances d'objets gouvernées

search.query combine une traduction bornée du langage naturel vers des filtres avec une recherche lexicale sur les mêmes lignes source gouvernées. Sélectionnez une ontologie lorsque vous la connaissez ; objectTypes peut encore restreindre le corpus sans élargir la vue de schéma autorisée de l'appelant.

const result = await ontology.search.query({
  target: {
    kind: "ontology-instances",
    ontology: "operations",
    objectTypes: ["Aircraft"],
  },
  query: "aircraft operating in Belgium",
  limit: 25,
});

Chaque ligne indique si elle correspond au DSL d'ontologie, au score lexical ou aux deux. Lorsque la traduction est indisponible, query.degraded vaut true et le chemin lexical continue de fonctionner. Vérifiez poolCapped avant de considérer les décomptes ou agrégats comme exhaustifs, et exposez chaque entrée de reasons : une contrainte de lien impossible à évaluer y est déclarée au lieu d'être ignorée silencieusement. La recherche utilise les lignes source actuelles, conserve l'identité admise et l'habilitation de l'appelant, et échoue de manière fermée si l'autorisation ou le transport source est indisponible. N'envoyez pas d'identifiant utilisateur dans le corps.

Projeter des couches géographiques gouvernées

geo.layers transforme les lignes d'objets actuelles adossées à une source en fonctionnalités prêtes à cartographier, sans obliger l'appelant à parcourir les liaisons ni à deviner les colonnes de coordonnées. Limitez la requête à une ontologie lorsque vous la connaissez et utilisez une boîte englobante inclusive pour ne conserver que les points d'ancrage situés dans une zone.

const aircraft = await ontology.geo.layers({
  ontology: "operations",
  objectTypes: ["Aircraft"],
  limit: 200,
  bbox: {
    minLng: 2.5,
    minLat: 49.4,
    maxLng: 6.4,
    maxLat: 51.6,
  },
});

Chaque couche contient un nom de type, un libellé d'affichage et des fonctionnalités géographiques. Une fonctionnalité peut également contenir une polyligne lorsque la ligne liée fournit une propriété de chemin prise en charge. Les couches vides explicitement demandées et les couches non provisionnées restent dans la réponse afin que les appelants distinguent « aucune ligne correspondante » d'une table sous-jacente absente. La requête accepte au maximum 20 noms de types et 1 000 fonctionnalités par couche ; les requêtes globales trop larges échouent au lieu de renvoyer une carte silencieusement tronquée. La projection géographique est une lecture actuelle de la source et échoue de manière fermée lorsque l'autorisation ou le transport source est indisponible.

Par où commencer

Comment un tenant obtient une ontologie

Trois chemins, tous coexistants :

  1. Installation automatique à la première ouverture. La plateforme livre une ontologie par défaut qui s'installe automatiquement à la première ouverture de l'atelier.
  2. Installation depuis Extensions. Choisissez n'importe quel pack pour lequel votre organisation est licenciée. Crée des types d'objets, de liens, d'actions, des règles d'identité et des liaisons sur une nouvelle branche main.
  3. Création par l'utilisateur. Ajoutez des types d'objets, de liens et d'actions directement via l'onglet Schéma, puis liez-les via Liaisons.

Voir aussi

Sur cette page

Sur cette page