<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Repository modeling on Mergeway</title><link>https://mergewayhq.github.io/docs/how-to/repositories/</link><description>Recent content in Repository modeling on Mergeway</description><generator>Hugo</generator><language>en</language><atom:link href="https://mergewayhq.github.io/docs/how-to/repositories/index.xml" rel="self" type="application/rss+xml"/><item><title>Reuse a JSON Schema</title><link>https://mergewayhq.github.io/docs/how-to/repositories/reuse-json-schema/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://mergewayhq.github.io/docs/how-to/repositories/reuse-json-schema/</guid><description>&lt;h1 id="reuse-a-json-schema"&gt;Reuse a JSON Schema&lt;a class="anchor" href="#reuse-a-json-schema"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Use &lt;code&gt;json_schema&lt;/code&gt; when another tool already owns the record contract or when draft 2020-12 constraints are more suitable than native Mergeway fields. This procedure targets Mergeway v0.10.0 and the release-equivalent &lt;code&gt;examples/json-schema&lt;/code&gt; fixture.&lt;/p&gt;
&lt;h2 id="point-an-entity-at-the-schema"&gt;Point an entity at the schema&lt;a class="anchor" href="#point-an-entity-at-the-schema"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Copy &lt;code&gt;examples/json-schema&lt;/code&gt; to a working directory. Its entry configuration resolves the schema relative to &lt;code&gt;mergeway.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;entities&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;Customer&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;description&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Customers defined via a JSON Schema file.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;identifier&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;include&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;data/customers/*.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;json_schema&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;schemas/customer.json&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Keep &lt;code&gt;fields&lt;/code&gt; absent: &lt;code&gt;json_schema&lt;/code&gt; and native fields are mutually exclusive. The JSON Schema must describe an object and expose the configured identifier in &lt;code&gt;properties&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Load records with JSONPath</title><link>https://mergewayhq.github.io/docs/how-to/repositories/load-jsonpath/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://mergewayhq.github.io/docs/how-to/repositories/load-jsonpath/</guid><description>&lt;h1 id="load-records-with-jsonpath"&gt;Load records with JSONPath&lt;a class="anchor" href="#load-records-with-jsonpath"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Use a selector when a JSON file wraps the records you want beneath another property. This procedure targets Mergeway v0.10.0 and &lt;code&gt;examples/jsonpath&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="add-a-structured-include"&gt;Add a structured include&lt;a class="anchor" href="#add-a-structured-include"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Copy the example, then inspect its &lt;code&gt;User&lt;/code&gt; entity:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;entities&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;User&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;identifier&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;fields&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;include&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;path&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;data/users.json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;selector&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;$.users[*]&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The selector runs against the decoded JSON document. Each selected object becomes one &lt;code&gt;User&lt;/code&gt; record and must provide a usable &lt;code&gt;id&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="check-the-result"&gt;Check the result&lt;a class="anchor" href="#check-the-result"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run these commands from the copied repository:&lt;/p&gt;</description></item><item><title>Model inheritance and reference unions</title><link>https://mergewayhq.github.io/docs/how-to/repositories/inheritance-reference-unions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://mergewayhq.github.io/docs/how-to/repositories/inheritance-reference-unions/</guid><description>&lt;h1 id="model-inheritance-and-reference-unions"&gt;Model inheritance and reference unions&lt;a class="anchor" href="#model-inheritance-and-reference-unions"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Entity inheritance models an assignable family; a reference union models a value that may target one of several independent entities. These procedures target Mergeway v0.10.0 and the release-equivalent &lt;code&gt;examples/inheritance&lt;/code&gt; and &lt;code&gt;examples/reference-union&lt;/code&gt; fixtures.&lt;/p&gt;
&lt;h2 id="reuse-a-parent-schema"&gt;Reuse a parent schema&lt;a class="anchor" href="#reuse-a-parent-schema"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In &lt;code&gt;examples/inheritance&lt;/code&gt;, &lt;code&gt;Animal&lt;/code&gt; supplies identity and common fields while &lt;code&gt;Dog&lt;/code&gt; adds &lt;code&gt;breed&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Animal&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;identifier&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;fields&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;type: string, required&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;type: string, required&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Dog&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;extends&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Animal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;include&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;data/dogs/*.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;fields&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;breed&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;type: string, required&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Animal&lt;/code&gt; may remain schema-only because it has a descendant. A field typed as &lt;code&gt;Animal&lt;/code&gt; accepts an &lt;code&gt;Animal&lt;/code&gt; or descendant record. Validate and observe the assignable query:&lt;/p&gt;</description></item><item><title>Derive identifiers and fields from paths</title><link>https://mergewayhq.github.io/docs/how-to/repositories/path-derived-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://mergewayhq.github.io/docs/how-to/repositories/path-derived-data/</guid><description>&lt;h1 id="derive-identifiers-and-fields-from-paths"&gt;Derive identifiers and fields from paths&lt;a class="anchor" href="#derive-identifiers-and-fields-from-paths"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Use path-derived data when the repository layout already carries stable identity or classification. This procedure targets Mergeway v0.10.0 and &lt;code&gt;examples/path-identifier&lt;/code&gt; plus &lt;code&gt;examples/path-segments&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="use-the-complete-path-as-identity"&gt;Use the complete path as identity&lt;a class="anchor" href="#use-the-complete-path-as-identity"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;examples/path-identifier&lt;/code&gt; configures:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Note&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;identifier&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;$path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;include&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;data/notes/*.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;fields&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;title&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;type: string, required&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;body&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The records do not store an ID. Confirm the normalized repository-relative identifiers:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mergeway-cli --root examples/path-identifier validate
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mergeway-cli --root examples/path-identifier list --type Note
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mergeway-cli --root examples/path-identifier get --type Note data/notes/alpha.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="expose-selected-path-values"&gt;Expose selected path values&lt;a class="anchor" href="#expose-selected-path-values"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;examples/path-segments&lt;/code&gt; keeps a field identifier but derives three read-only fields:&lt;/p&gt;</description></item><item><title>Load Open Knowledge Format documents</title><link>https://mergewayhq.github.io/docs/how-to/repositories/open-knowledge-format/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://mergewayhq.github.io/docs/how-to/repositories/open-knowledge-format/</guid><description>&lt;h1 id="load-open-knowledge-format-documents"&gt;Load Open Knowledge Format documents&lt;a class="anchor" href="#load-open-knowledge-format-documents"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Mergeway v0.10.0 supports the checked &lt;code&gt;examples/okf&lt;/code&gt; fixture, so this workflow is part of the launch documentation rather than deferred content.&lt;/p&gt;
&lt;h2 id="configure-the-mapping"&gt;Configure the mapping&lt;a class="anchor" href="#configure-the-mapping"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Copy &lt;code&gt;examples/okf&lt;/code&gt;. Its &lt;code&gt;Knowledge&lt;/code&gt; entity includes both supported extensions and derives &lt;code&gt;id&lt;/code&gt; from the filename:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Knowledge&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;identifier&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;include&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;data/concepts/*.md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;data/concepts/*.okf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;fields&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;required&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;source&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;path_segment_rev&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;title&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;type: string, required&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;description&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;tags&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;type: string, repeated&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;body&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;type: string, required&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each document begins with YAML frontmatter whose &lt;code&gt;type&lt;/code&gt; is exactly &lt;code&gt;Knowledge&lt;/code&gt;. Mergeway removes &lt;code&gt;type&lt;/code&gt;, maps the other frontmatter keys to fields, and exposes the content after the closing delimiter as &lt;code&gt;body&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>