<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-henderickx-meta-graph-schema-00" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true">

<front>
<title>Graph based Meta Schema for collaborative Operations</title><seriesInfo value="draft-henderickx-meta-graph-schema-00" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author role="editor" surname="Henderickx" fullname="Wim Henderickx"><organization>Nokia</organization><address><postal><street></street>
</postal><email>wim.henderickx@nokia.com</email>
</address></author><date/>
<area>Operations and Management </area>
<workgroup>NMOP</workgroup>

<abstract>
<t>Graph based Meta Schema for collaborative Operation</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>Modern automation environments require systems, users, and tools to
operate on various data models in a coordinated manner.  These models
typically span heterogeneous technologies and administrative domains.
Existing data modeling approaches, such as YANG, OpenAPI, and
JSON Schema, ... focus primarily on syntax and validation but provide
limited support for collaboration and conflict-aware operations.</t>
<t>The Graph-based Meta Schema introduces a graph-oriented representation
of resources and their relationships, effectively forming a knowledge
graph that connects data, intent, and operational context.  This
knowledge graph provides a unified semantic layer where machine and
human actors can reason about dependencies, ownership, and intent across
distributed systems.</t>
<t>By representing APIs and their relationships as a graph, the Meta Schema
enables higher-level reasoning and automation patterns such as impact
analysis, dependency tracing, and intent reconciliation.  It provides a
foundation for agents, controllers, and user interfaces to interact
consistently, enabling multi-party automation where intent, observation,
and orchestration operate through the meta schema.</t>
<t>This mechanism does not replace existing modeling languages; rather, it
defines a meta-layer that integrates them and standardizes how resources
and relations are described, linked, and managed.</t>
</section>

<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;,
&quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and
&quot;OPTIONAL&quot; in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.</t>

<section anchor="terminology"><name>Terminology</name>

<ul>
<li><t>Resource:<br />
A distinct API object defined by the schema, representing an API modelled entity using YANG, openAPI, JSONSchema, ... . A resource is identified using a unique identifier by group/version/kind. A resource could be global scoped or tenant scoped.</t>

<ul>
<li><t>Group:
A resource group is a logical grouping of resources. It disambiguates different APIs that may happen to have identically named kinds</t>
</li>
<li><t>Version:
A resource version defines the stability of the API and backward compatibility guarantees</t>
</li>
<li><t>Kind
A resource kind is the name of the API</t>
</li>
<li><t>Scope
A resource scope defines if a resource is global or tenant scoped.</t>
</li>
</ul></li>
<li><t>Node:<br />
A graph vertex representing a resource instance with a unique instance api identifier using group/version/kind/name/(tenant)</t>
</li>
<li><t>Edge:<br />
A directed relationship between two nodes (resource) that expresses
containment, dependency, or association and the respective constraints.</t>
</li>
<li><t>Meta Schema:<br />
A schema of schemas that describes how resources, attributes,
relations, and operations are defined, versioned, and composed.</t>
</li>
<li><t>Conflict Management:<br />
Mechanisms that allow multiple actors (human or automated) to operate
on shared resources safely, including field ownership, merge rules,
and version control.</t>
</li>
</ul>
</section>
</section>

<section anchor="meta-schema"><name>Meta Schema</name>
<t>The Meta Schema provides a structural and semantic layer that
integrates existing modeling frameworks (e.g., YANG, OpenAPI,
JSON Schema) under a unified model.  Implementations <bcp14>MAY</bcp14> embed or
reference definitions from these sources as resources.</t>
<t>The Meta Schema defines:</t>

<ol spacing="compact">
<li>Graph Topology – how resources are linked via typed relations
and its constraints.<br />
</li>
<li>Schema Semantics – how attributes, lists, and maps are defined,
including types, constraints and validation rules.<br />
</li>
<li>Operational Semantics – how API operations (create, update,
delete, apply, watch, etc.) interact with resource state.<br />
</li>
<li>User Semantics – how metadata supports visualization, grouping,
and human-friendly interaction (e.g., labels, icons, colors, categories).</li>
</ol>
<t>This integration allows a single schema definition to be reused across
API servers, UI frameworks, and automation agents/workflows.</t>
</section>

<section anchor="graph-based-schema"><name>Graph based schema</name>
<t>The graph model treats each resource as a Node and each relationship
as an Edge.  Relationships <bcp14>MUST</bcp14> specify direction and type, and
MAY include additional attributes/constraints (e.g., cardinality, constraints, requiredness).</t>
<t>Example relations include:</t>

<ul spacing="compact">
<li>Parent/Child — hierarchical ownership<br />
</li>
<li>RefersTo — loose association between resources<br />
</li>
<li>Implements — specialization or binding to another kind<br />
</li>
<li>DependsOn — operational dependency</li>
</ul>
<t>Each node carries structured metadata such as labels, annotations,
status, and version, allowing tools to reason about topology, impact,
and dependency chains in a consistent way.</t>
</section>

<section anchor="api-operations"><name>API operations</name>
<t>The Meta Schema defines conventions for API operations acting on
resources.  These conventions enable consistent behavior across REST,
GraphQL, and streaming interfaces.</t>

<section anchor="conflict-management"><name>Conflict Management</name>
<t>Resources <bcp14>SHOULD</bcp14> support field-level ownership tracking (using
the <em>managedFields</em> in the metadata header) to allow concurrent edits by
multiple actors.  Conflicts <bcp14>MUST</bcp14> be detectable and <bcp14>MAY</bcp14> be
resolved using merge policies.</t>
</section>

<section anchor="coordinated-deletion-and-ownership"><name>Coordinated Deletion and Ownership</name>
<t>Resources <bcp14>MAY</bcp14> declare finalizers—named hooks that coordinate deletion
until dependent resources have completed their cleanup.  Ownership and
relation semantics <bcp14>SHOULD</bcp14> guide cascading delete behavior.</t>
</section>

<section anchor="multi-tenancy-and-version-control"><name>Multi-Tenancy and Version Control</name>
<t>A resource definition <bcp14>MAY</bcp14> declare its tenancy scope (e.g., global, tenant).  Version control metadata (e.g., generation,
resourceVersion, branch identifiers) <bcp14>SHOULD</bcp14> be used to coordinate
changes across distributed automation systems.</t>
</section>

<section anchor="bulk-and-dry-run-operations"><name>Bulk and Dry-Run Operations</name>
<t>Implementations <bcp14>SHOULD</bcp14> support bulk operations (e.g., batch delete)
and dry-run modes to safely preview changes before applying them.</t>
</section>

<section anchor="streaming-and-eventing"><name>Streaming and Eventing</name>
<t>The schema <bcp14>MAY</bcp14> declare which resources are observable through event
streams (e.g., watch, subscribe) and specify their event types.  This
enables synchronization between controllers, UI components, and
external systems.</t>
</section>

<section anchor="opaque-metadata"><name>Opaque Metadata</name>
<t>Resources <bcp14>SHOULD</bcp14> support extensible metadata fields such as
<tt>labels</tt> and <tt>annotations</tt> to carry user- or system-specific key/value
pairs without affecting core semantics.</t>
</section>
</section>

<section anchor="example-schema"><name>Example schema</name>

<artwork><![CDATA[apiVersion: apiextensions.c4o.dev/v1
kind: Schema
metadata:
    name: devices.assets.kuid.dev
spec:
    groups:
    - name: assets.kuid.dev
        apis:
        - resource: devices
          kind: Device
          scope: tenant
          ui:
            categories:
            - assets
            - devices
            displayName: Devices
            icon: xxx
            order: 100
        versions:
        - name: v1
          storage: true
          attributes:
          - # YANG, OpenAPI, JSONSchema, ...
          relationships:
          - name: parent
            target: 
              group: location.kuid.dev
              version: v1
              kind: Site
            cardinality: one
          - name: parent
            target: 
              group: assets.kuid.dev
              version: v1
              kind: Rack
            cardinality: one
]]></artwork>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>This document has no IANA actions at this time.</t>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>Schema definitions can expose sensitive structure and metadata about a
system.  Implementations <bcp14>MUST</bcp14> ensure that access control and data
filtering mechanisms prevent unauthorized disclosure.  Field ownership
and event streaming <bcp14>MUST</bcp14> be authenticated and authorized according
to the system’s security model.</t>
</section>

<section anchor="references"><name>References</name>

<ul spacing="compact">
<li>[RFC2119] S. Bradner, <em>Key words for use in RFCs to Indicate
Requirement Levels</em>, March 1997.<br />
</li>
<li>[RFC8174] B. Leiba, <em>Ambiguity of Uppercase vs Lowercase in RFC 2119
Key Words</em>, May 2017.</li>
</ul>
</section>

<section anchor="acknowledgements" numbered="false"><name>Acknowledgements</name>
<t>The author thanks colleagues and contributors from the network
automation and kubenet community for discussions leading to this work.</t>
</section>

<section anchor="authors-addresses" numbered="false"><name>Authors' Addresses</name>
<t>Wim Henderickx
Nokia
50 Copernicuslaan
2018, Antwerp
Belgium</t>
<t>Email: wim.henderickx@nokia.com</t>
</section>

</middle>

</rfc>
