{"id":1294,"date":"2026-02-15T20:14:30","date_gmt":"2026-02-15T20:14:30","guid":{"rendered":"https:\/\/docs.ai.drawconclusions.org\/?page_id=1294"},"modified":"2026-02-24T12:45:55","modified_gmt":"2026-02-24T12:45:55","slug":"architecture-relations-soto","status":"publish","type":"page","link":"https:\/\/docs.ai.drawconclusions.org\/?page_id=1294","title":{"rendered":"Architecture: Relations (SOTO)"},"content":{"rendered":"<h2>Overview<\/h2>\n<ul>\n<li>SOTO = text-embedded semantic relations.<\/li>\n<li>The relation is authored inside a content field and parsed into DB relations.<\/li>\n<\/ul>\n<h2>Key Components (Legacy)<\/h2>\n<h2>Components<\/h2>\n<ul>\n<li>Storage entity: <code>- old\/dracon\/src\/Entity\/Item\/Relation\/SimpleOneToOneRelation\/SotoDbRelationEntity.php<\/code><\/li>\n<li>Auto item trait: <code>- old\/dracon\/src\/Entity\/Item\/AutoItem\/RelationTrait\/AutoItemEntitySotoRelationTrait.php<\/code><\/li>\n<li>Stores <code>soto_string<\/code> and active\/passive relation collections.<\/li>\n<li>Relation convention: <code>- old\/dracon\/src\/Conventions\/App\/RelationConvention.php<\/code><\/li>\n<\/ul>\n<h2>Behavior<\/h2>\n<ul>\n<li>Active item = the item containing the reference tag.<\/li>\n<li>Passive item = the referenced item.<\/li>\n<li>Unique constraint: one active\/passive pair per relation type.<\/li>\n<\/ul>\n<h2>Next Layer<\/h2>\n<h2>Next<\/h2>\n<ul>\n<li>Implementation Notes: <code>implementation_soto.md<\/code><\/li>\n<\/ul>\n<p class=\"developerdocs-id-search\" aria-hidden=\"true\">DeveloperDoc ID: dd_id_bbb13b9988<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overview SOTO = text-embedded semantic relations. The relation is authored inside a content field and parsed into DB relations. Key Components (Legacy) Components Storage entity: &#8211; old\/dracon\/src\/Entity\/Item\/Relation\/SimpleOneToOneRelation\/SotoDbRelationEntity.php Auto item trait: &#8211; old\/dracon\/src\/Entity\/Item\/AutoItem\/RelationTrait\/AutoItemEntitySotoRelationTrait.php Stores soto_string and active\/passive relation collections. Relation convention: &#8211; old\/dracon\/src\/Conventions\/App\/RelationConvention.php Behavior Active item = the item containing the reference tag. Passive item = [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1292,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"doc_category":[],"doc_layer":[30],"class_list":["post-1294","page","type-page","status-publish","hentry","layer-dd_id_8f59177ca0"],"_links":{"self":[{"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages\/1294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1294"}],"version-history":[{"count":5,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages\/1294\/revisions"}],"predecessor-version":[{"id":3809,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages\/1294\/revisions\/3809"}],"up":[{"embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=\/wp\/v2\/pages\/1292"}],"wp:attachment":[{"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1294"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=%2Fwp%2Fv2%2Fdoc_category&post=1294"},{"taxonomy":"doc_layer","embeddable":true,"href":"https:\/\/docs.ai.drawconclusions.org\/index.php?rest_route=%2Fwp%2Fv2%2Fdoc_layer&post=1294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}