[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:lpg-modeler":3},"\u003Ch1>LPG Modeler\u003C\u002Fh1>\u003Cp align=\"center\">\n  \u003Cstrong>Design a property graph once. Generate every schema from it.\u003C\u002Fstrong>\n\u003C\u002Fp>\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fvolland.github.io\u002Flpg-modeler\u002F\" rel=\"nofollow ugc noopener\">Documentation\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=pavlyshyn.lpg-modeler\" rel=\"nofollow ugc noopener\">Marketplace\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fvolland.github.io\u002Flpg-modeler\u002Fexamples.html\" rel=\"nofollow ugc noopener\">Examples\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fvolland.github.io\u002Flpg-modeler\u002Fmodel-format.html\" rel=\"nofollow ugc noopener\">Model format\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fvolland.github.io\u002Flpg-modeler\u002Farchitecture.html\" rel=\"nofollow ugc noopener\">Design notes\u003C\u002Fa>\n\u003C\u002Fp>\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=pavlyshyn.lpg-modeler\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fvisual-studio-marketplace\u002Fv\u002Fpavlyshyn.lpg-modeler?color=2f5fe0&amp;label=marketplace\" alt=\"Marketplace version\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FVolland\u002Flpg-modeler\u002Fblob\u002FHEAD\u002FLICENSE\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-2f5fe0\" alt=\"MIT licensed\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\u003Cp>A VS Code extension and CLI for authoring Labeled Property Graph schemas as text, viewing them\nas ERD-like diagrams, and generating database DDL and RDF artifacts from a single model.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FVolland\u002Flpg-modeler\u002FHEAD\u002Fdocs\u002Fassets\u002Fdiagrams\u002Fpipeline.png\" alt=\"One model, four artifacts\" \u002F>\u003C\u002Fp>\n\u003Ch2>What it does\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Authors the model as reviewable YAML\u003C\u002Fstrong>, validated by a contributed JSON Schema — so completion and hover come from the YAML tooling you already have.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Edits it on a canvas beside the file.\u003C\u002Fstrong> Every canvas action becomes a targeted text splice, applied as a workspace edit. Coordinates live in a sidecar, so moving a box produces no semantic diff.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Models inheritance and mixins as separate tools.\u003C\u002Fstrong> An abstract label hierarchy says what a thing \u003Cem>is\u003C\u002Fem> and carries keys and edges down to every descendant; a mixin is a bag of properties a type applies, with no supertype and no identity. Both are flattened before any generator sees the model.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Generates nine targets\u003C\u002Fstrong> from one model: LadybugDB DDL, Neo4j constraints, FalkorDB schema, Memgraph schema, SHACL shapes, and an OWL ontology — plus three standards artifacts, GQL graph types (ISO\u002FIEC 39075), PG-Schema, and LinkML.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Imports what you already have.\u003C\u002Fstrong> A model can start from a SHACL shapes graph, an OWL ontology or LadybugDB DDL rather than from an empty file. Several files are read together, because each carries what the others cannot — and whatever could not be recovered is reported rather than guessed.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Reports every downgrade.\u003C\u002Fstrong> Anything a target cannot enforce becomes an editor diagnostic \u003Cem>and\u003C\u002Fem> a comment at the lossy line of the artifact. Nothing disappears quietly.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Models lists, enums, open types and cardinality\u003C\u002Fstrong> — and cardinality is genuinely enforced where it can be: LadybugDB rejects a violating write, and SHACL bounds both directions.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Stays interoperable.\u003C\u002Fstrong> The model file is self-describing, its scalar types answer to their GQL names, and the JSON Schema is 2020-12 — so a model is readable outside this tool, not only inside it.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Runs in CI.\u003C\u002Fstrong> The same validation, with no editor present, so a pull request can be gated on schema validity.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Full feature tour: \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fvolland.github.io\u002Flpg-modeler\u002F\" rel=\"nofollow ugc noopener\">https:\u002F\u002Fvolland.github.io\u002Flpg-modeler\u002F\u003C\u002Fa>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Ch2>The editor\u003C\u002Fh2>\n\u003Cp>The canvas opens beside the model file, in the manner of Markdown preview. Every box is a\nnode type, every row a property, and every action on it a targeted edit to the YAML.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FVolland\u002Flpg-modeler\u002FHEAD\u002Fdocs\u002Fassets\u002Fscreenshots\u002Fcanvas.png\" alt=\"The canvas, showing an abstract hierarchy and three mixins\" \u002F>\u003C\u002Fp>\n\u003Cp>This is \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FVolland\u002Flpg-modeler\u002Fblob\u002FHEAD\u002Fdocs\u002Fexamples\u002Ffleet.lpg.yaml\" rel=\"nofollow ugc noopener\">\u003Ccode>fleet.lpg.yaml\u003C\u002Fcode>\u003C\u002Fa>, one of the downloadable examples\nbelow. \u003Ccode>Asset\u003C\u002Fcode> and \u003Ccode>Vehicle\u003C\u002Fcode> are abstract — drawn with a dashed border and an \u003Ccode>abstract\u003C\u002Fcode>\nbadge, and emitting no table. \u003Ccode>Truck\u003C\u002Fcode> sits three levels down: \u003Ccode>assetTag\u003C\u002Fcode> arrives from\n\u003Ccode>Asset\u003C\u002Fcode>, \u003Ccode>vin\u003C\u002Fcode> from \u003Ccode>Vehicle\u003C\u002Fcode>, and each inherited row names its source with \u003Ccode>↑\u003C\u002Fcode>. Properties\nthat came from a mixin are marked \u003Ccode>◇\u003C\u002Fcode> instead, because a supertype and a bag of properties\nare not the same claim about a type. \u003Ccode>STATIONED_AT\u003C\u002Fcode> is declared once on \u003Ccode>Asset\u003C\u002Fcode> and drawn\non \u003Ccode>Asset\u003C\u002Fcode> alone: repeating it on fo\u003C\u002Fp>\n",1790587590829]