Skip to content

wardley-map.fbl

Example document wardley-map.fbl

Views generated from the file

This view is drawn by this site from wardley-map.fbl itself. It shows the data in the document, not the notation the diagram draws.

Bindings of wardley-map.fbl. Flowchart of the bindings in wardley-map.fbl: 1 binding(s) (map) as boxes with the files they claim and their body's format family, and 19 element rule(s) and 0 relation rule(s) as rounded boxes with the type each produces.
Generated from wardley-map.fbl at 46e5f91
Diagram as text (Mermaid)
flowchart LR
  accTitle: Bindings of wardley-map.fbl
  accDescr: Flowchart of the bindings in wardley-map.fbl: 1 binding(s) (map) as boxes with the files they claim and their body's format family, and 19 element rule(s) and 0 relation rule(s) as rounded boxes with the type each produces.
  b_map["Online Wardley Maps text<br/>map<br/>.owm .wm, grammar family"]
  e_map_title("title<br/>Title")
  b_map -->|element| e_map_title
  e_map_style("style<br/>Style")
  b_map -->|element| e_map_style
  e_map_size("size<br/>Size")
  b_map -->|element| e_map_size
  e_map_component("component<br/>Component")
  b_map -->|element| e_map_component
  e_map_anchor("anchor<br/>Anchor")
  b_map -->|element| e_map_anchor
  e_map_submap("submap<br/>Submap")
  b_map -->|element| e_map_submap
  e_map_url("url<br/>Url")
  b_map -->|element| e_map_url
  e_map_evolve("evolve<br/>Evolve")
  b_map -->|element| e_map_evolve
  e_map_pipeline("pipeline<br/>Pipeline")
  b_map -->|element| e_map_pipeline
  e_map_legacyPipeline("legacyPipeline<br/>LegacyPipeline")
  b_map -->|element| e_map_legacyPipeline
  e_map_pipelineComponent("pipelineComponent<br/>PipelineComponent")
  b_map -->|element| e_map_pipelineComponent
  e_map_note("note<br/>Note")
  b_map -->|element| e_map_note
  e_map_annotation("annotation<br/>Annotation")
  b_map -->|element| e_map_annotation
  e_map_annotations("annotations<br/>AnnotationsPosition")
  b_map -->|element| e_map_annotations
  e_map_accelerator("accelerator<br/>Accelerator")
  b_map -->|element| e_map_accelerator
  e_map_deaccelerator("deaccelerator<br/>Accelerator")
  b_map -->|element| e_map_deaccelerator
  e_map_attitude("attitude<br/>Attitude")
  b_map -->|element| e_map_attitude
  e_map_dependency("dependency<br/>Dependency")
  b_map -->|element| e_map_dependency
  e_map_flow("flow<br/>Flow")
  b_map -->|element| e_map_flow

The file

Download wardley-map.fbl (24,469 bytes, unchanged from the source).

{
  "$schema": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Document",
  "fbl": "0.12",
  "doc": "The Wardley map's .owm, the text of Online Wardley Maps, bound in the grammar family (FBL 0.12): a pipeline whose { stands on the line below it, a component's segments in any order, an annotation's positions as structured items, and ids by kind and natural key with an ordinal for each later holder of one key, read from the legacy identities file the standalone tool writes. Built from etalii.adp.ide.standalone's WardleyMapParser and WardleyIdentityKeys at ad1a4680a; definitions/diagrams/wardley-map.md records what it does not read.",
  "bindings": {
    "map": {
      "title": "Online Wardley Maps text",
      "doc": "The .owm text of the Wardley map, read by the grammar family with wardley-map.lark beside this document (FBL 0.12). Ids are never written in the body: each element is known by its kind and natural key, as the tool keys it (WardleyIdentityKeys), and its id is kept beside the body, in the registration's identities: block or in the legacy {base}.identities.json the tool writes. The statements the tool keeps without modelling them, and a line no statement reads, are text no rule maps, kept byte for byte.",
      "claims": {
        "extensions": [
          ".owm",
          ".wm"
        ],
        "origins": [
          "wardley/map"
        ]
      },
      "body": {
        "kind": "file",
        "family": "grammar",
        "grammar": {
          "file": "wardley-map.lark"
        },
        "recover": {
          "unit": "unit",
          "sync": [
            "_NL"
          ],
          "nested": {
            "open": "OPEN",
            "close": "CLOSE"
          }
        }
      },
      "reader": "declared",
      "text": {
        "newline": "lf",
        "indent": 2,
        "finalNewline": true
      },
      "elements": [
        {
          "name": "title",
          "type": "Title",
          "doc": "The map's title; of two, each is read, and the tool shows the second.",
          "at": "/title",
          "attributes": {
            "title": {
              "node": "text",
              "empty": "keep"
            }
          }
        },
        {
          "name": "style",
          "type": "Style",
          "at": "/style",
          "readOnly": true,
          "attributes": {
            "style": {
              "node": "text"
            }
          }
        },
        {
          "name": "size",
          "type": "Size",
          "at": "/size",
          "readOnly": true,
          "attributes": {
            "width": {
              "node": "width",
              "number": "shortest"
            },
            "height": {
              "node": "height",
              "number": "shortest"
            }
          }
        },
        {
          "name": "component",
          "type": "Component",
          "doc": "A component; its segments after the coordinates stand in any order (section 4.9).",
          "at": "/component",
          "id": {
            "sidecar": {
              "key": "entry.children[0].text",
              "kind": "component",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "name": {
              "node": "name",
              "empty": "refuse"
            },
            "visibility": {
              "node": "coords/visibility",
              "number": {
                "decimals": 4
              }
            },
            "maturity": {
              "node": "coords/maturity",
              "number": {
                "decimals": 4
              }
            },
            "coordinates": {
              "node": "coords",
              "readOnly": true
            },
            "labelOffset": {
              "node": "label",
              "match": "[Ll][Aa][Bb][Ee][Ll][ \\t]*\\[[ \\t]*(?<value>[^\\]]*[^ \\t\\]])[ \\t]*\\]",
              "empty": "remove",
              "create": {
                "emit": " label [{value}]",
                "after": [
                  "coordinates"
                ]
              }
            },
            "decorators": {
              "node": "decorator",
              "match": "\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
              "empty": "remove",
              "create": {
                "emit": " ({value})",
                "after": [
                  "coordinates"
                ]
              }
            },
            "inertia": {
              "node": "inertia",
              "map": {
                "inertia": "true",
                "": "false"
              },
              "default": "false",
              "empty": "remove",
              "create": {
                "emit": " {value}",
                "after": [
                  "coordinates"
                ]
              }
            },
            "url": {
              "node": "url_ref",
              "match": "[Uu][Rr][Ll][ \\t]*\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
              "readOnly": true
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "component {name} \\[{visibility}, {maturity}\\]"
          },
          "remove": {
            "cascade": [
              "dependency",
              "flow",
              "evolve"
            ]
          }
        },
        {
          "name": "anchor",
          "type": "Anchor",
          "doc": "An anchor, keyed in the components' key space, as the tool keys it.",
          "at": "/anchor",
          "id": {
            "sidecar": {
              "key": "entry.children[0].text",
              "kind": "component",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "name": {
              "node": "name",
              "empty": "refuse"
            },
            "visibility": {
              "node": "coords/visibility",
              "number": {
                "decimals": 4
              }
            },
            "maturity": {
              "node": "coords/maturity",
              "number": {
                "decimals": 4
              }
            },
            "coordinates": {
              "node": "coords",
              "readOnly": true
            },
            "labelOffset": {
              "node": "label",
              "match": "[Ll][Aa][Bb][Ee][Ll][ \\t]*\\[[ \\t]*(?<value>[^\\]]*[^ \\t\\]])[ \\t]*\\]",
              "empty": "remove",
              "create": {
                "emit": " label [{value}]",
                "after": [
                  "coordinates"
                ]
              }
            },
            "decorators": {
              "node": "decorator",
              "match": "\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
              "empty": "remove",
              "create": {
                "emit": " ({value})",
                "after": [
                  "coordinates"
                ]
              }
            },
            "inertia": {
              "node": "inertia",
              "map": {
                "inertia": "true",
                "": "false"
              },
              "default": "false",
              "empty": "remove",
              "create": {
                "emit": " {value}",
                "after": [
                  "coordinates"
                ]
              }
            },
            "url": {
              "node": "url_ref",
              "match": "[Uu][Rr][Ll][ \\t]*\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
              "readOnly": true
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "anchor {name} \\[{visibility}, {maturity}\\]"
          },
          "remove": {
            "cascade": [
              "dependency",
              "flow",
              "evolve"
            ]
          }
        },
        {
          "name": "submap",
          "type": "Submap",
          "doc": "A submap, keyed in the components' key space, as the tool keys it.",
          "at": "/submap",
          "id": {
            "sidecar": {
              "key": "entry.children[0].text",
              "kind": "component",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "name": {
              "node": "name",
              "empty": "refuse"
            },
            "visibility": {
              "node": "coords/visibility",
              "number": {
                "decimals": 4
              }
            },
            "maturity": {
              "node": "coords/maturity",
              "number": {
                "decimals": 4
              }
            },
            "coordinates": {
              "node": "coords",
              "readOnly": true
            },
            "labelOffset": {
              "node": "label",
              "match": "[Ll][Aa][Bb][Ee][Ll][ \\t]*\\[[ \\t]*(?<value>[^\\]]*[^ \\t\\]])[ \\t]*\\]",
              "empty": "remove",
              "create": {
                "emit": " label [{value}]",
                "after": [
                  "coordinates"
                ]
              }
            },
            "decorators": {
              "node": "decorator",
              "match": "\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
              "empty": "remove",
              "create": {
                "emit": " ({value})",
                "after": [
                  "coordinates"
                ]
              }
            },
            "inertia": {
              "node": "inertia",
              "map": {
                "inertia": "true",
                "": "false"
              },
              "default": "false",
              "empty": "remove",
              "create": {
                "emit": " {value}",
                "after": [
                  "coordinates"
                ]
              }
            },
            "url": {
              "node": "url_ref",
              "match": "[Uu][Rr][Ll][ \\t]*\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
              "readOnly": true
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "submap {name} \\[{visibility}, {maturity}\\]"
          },
          "remove": {
            "cascade": [
              "dependency",
              "flow",
              "evolve"
            ]
          }
        },
        {
          "name": "url",
          "type": "Url",
          "at": "/url",
          "readOnly": true,
          "attributes": {
            "name": {
              "node": "url_name"
            },
            "address": {
              "node": "address"
            }
          }
        },
        {
          "name": "evolve",
          "type": "Evolve",
          "doc": "An evolution has no identity kind in the tool, so it has no stored id and takes the one DISL derives.",
          "at": "/evolve",
          "attributes": {
            "component": {
              "node": "evolved",
              "reference": {
                "to": [
                  "component",
                  "anchor",
                  "submap"
                ],
                "by": "name"
              },
              "empty": "refuse"
            },
            "becomes": {
              "node": "becomes",
              "match": "->[ \\t]*(?<value>.*)",
              "empty": "remove",
              "create": {
                "emit": "->{value}",
                "after": [
                  "component"
                ]
              }
            },
            "maturity": {
              "node": "maturity",
              "number": {
                "decimals": 4
              }
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "evolve {component}[->{becomes}] {maturity}"
          },
          "remove": {}
        },
        {
          "name": "pipeline",
          "type": "Pipeline",
          "doc": "The nested form, whose { may stand on the line below it; a first component added to a pipeline without a block writes its block with the brace on its own line, as the tool does.",
          "at": "/pipeline",
          "opens": {
            "open": "\n{",
            "close": "}"
          },
          "id": {
            "sidecar": {
              "key": "entry.children[0].text",
              "kind": "pipeline",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "component": {
              "node": "name",
              "reference": {
                "to": [
                  "component",
                  "anchor",
                  "submap"
                ],
                "by": "name"
              },
              "empty": "refuse"
            },
            "form": {
              "value": "'nested'"
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "pipeline {component}\n{\n}"
          },
          "remove": {}
        },
        {
          "name": "legacyPipeline",
          "type": "LegacyPipeline",
          "doc": "The older form, two numbers on the statement's line, read as a visibility and a maturity, as every pair of this format is; read, never written.",
          "at": "/legacy_pipeline",
          "readOnly": true,
          "id": {
            "sidecar": {
              "key": "entry.children[0].text",
              "kind": "pipeline",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "component": {
              "node": "name",
              "reference": {
                "to": [
                  "component",
                  "anchor",
                  "submap"
                ],
                "by": "name"
              }
            },
            "visibility": {
              "node": "coords/visibility",
              "number": {
                "decimals": 4
              }
            },
            "maturity": {
              "node": "coords/maturity",
              "number": {
                "decimals": 4
              }
            },
            "form": {
              "value": "'legacy'"
            }
          }
        },
        {
          "name": "pipelineComponent",
          "type": "PipelineComponent",
          "at": "/pipeline/pipeline_component",
          "parent": {
            "rules": [
              "pipeline"
            ],
            "slot": "components"
          },
          "id": {
            "sidecar": {
              "key": "parent.children[0].text + '\\u001f' + entry.children[0].text",
              "kind": "pipeline-child",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "name": {
              "node": "name",
              "empty": "refuse"
            },
            "maturity": {
              "node": "maturity",
              "number": {
                "decimals": 4
              }
            }
          },
          "insert": {
            "place": "last-child",
            "emit": "component {name} \\[{maturity}\\]"
          },
          "remove": {}
        },
        {
          "name": "note",
          "type": "Note",
          "at": "/note",
          "id": {
            "sidecar": {
              "key": "entry.children[0].text",
              "kind": "note",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "text": {
              "node": "note_text",
              "empty": "refuse"
            },
            "visibility": {
              "node": "coords/visibility",
              "number": {
                "decimals": 4
              }
            },
            "maturity": {
              "node": "coords/maturity",
              "number": {
                "decimals": 4
              }
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "note {text} \\[{visibility}, {maturity}\\]"
          },
          "remove": {}
        },
        {
          "name": "annotation",
          "type": "Annotation",
          "doc": "A numbered annotation pinned at one position or more; the positions are one list of structured values (section 5.2).",
          "at": "/annotation",
          "id": {
            "sidecar": {
              "key": "entry.children[0].text",
              "kind": "annotation",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "number": {
              "node": "number",
              "readOnly": true
            },
            "positions": {
              "node": "positions/position",
              "items": {
                "visibility": {
                  "node": "visibility"
                },
                "maturity": {
                  "node": "maturity"
                }
              },
              "separator": ",",
              "create": {
                "emit": "[{visibility},{maturity}]"
              }
            },
            "text": {
              "node": "text",
              "empty": "remove",
              "create": {
                "emit": " {value}",
                "after": [
                  "positions"
                ]
              }
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "annotation {number} \\[{positions}\\][ {text}]"
          },
          "remove": {}
        },
        {
          "name": "annotations",
          "type": "AnnotationsPosition",
          "at": "/annotations",
          "readOnly": true,
          "attributes": {
            "visibility": {
              "node": "coords/visibility",
              "number": {
                "decimals": 4
              }
            },
            "maturity": {
              "node": "coords/maturity",
              "number": {
                "decimals": 4
              }
            }
          }
        },
        {
          "name": "accelerator",
          "type": "Accelerator",
          "at": "/accelerator",
          "id": {
            "sidecar": {
              "key": "entry.children[0].text + '\\u001fac'",
              "kind": "accelerator",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "name": {
              "node": "name",
              "empty": "refuse"
            },
            "visibility": {
              "node": "coords/visibility",
              "number": {
                "decimals": 4
              }
            },
            "maturity": {
              "node": "coords/maturity",
              "number": {
                "decimals": 4
              }
            },
            "deaccelerator": {
              "value": "false"
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "accelerator {name} \\[{visibility}, {maturity}\\]"
          },
          "remove": {}
        },
        {
          "name": "deaccelerator",
          "type": "Accelerator",
          "at": "/deaccelerator",
          "id": {
            "sidecar": {
              "key": "entry.children[0].text + '\\u001fde'",
              "kind": "accelerator",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "name": {
              "node": "name",
              "empty": "refuse"
            },
            "visibility": {
              "node": "coords/visibility",
              "number": {
                "decimals": 4
              }
            },
            "maturity": {
              "node": "coords/maturity",
              "number": {
                "decimals": 4
              }
            },
            "deaccelerator": {
              "value": "true"
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "deaccelerator {name} \\[{visibility}, {maturity}\\]"
          },
          "remove": {}
        },
        {
          "name": "attitude",
          "type": "Attitude",
          "at": "/attitude",
          "id": {
            "sidecar": {
              "key": "(entry.children[0].text.lowerAscii() == 'pioneers' ? 'Pioneers' : entry.children[0].text.lowerAscii() == 'settlers' ? 'Settlers' : 'TownPlanners') + '\\u001f' + string(double(entry.children[1].text)) + '\\u001f' + string(double(entry.children[2].text))",
              "kind": "attitude",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "attitude": {
              "node": "ATTITUDE",
              "readOnly": true
            },
            "visibility1": {
              "node": "visibility",
              "number": {
                "decimals": 4
              }
            },
            "maturity1": {
              "node": "maturity",
              "number": {
                "decimals": 4
              }
            },
            "visibility2": {
              "node": "visibility2",
              "number": {
                "decimals": 4
              }
            },
            "maturity2": {
              "node": "maturity2",
              "number": {
                "decimals": 4
              }
            }
          },
          "remove": {}
        },
        {
          "name": "dependency",
          "type": "Dependency",
          "at": "/dependency",
          "id": {
            "sidecar": {
              "key": "entry.children[0].text + '\\u001f' + entry.children[1].text + '\\u001fDependency'",
              "kind": "link",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "from": {
              "node": "source",
              "reference": {
                "to": [
                  "component",
                  "anchor",
                  "submap"
                ],
                "by": "name"
              },
              "empty": "refuse"
            },
            "to": {
              "node": "target",
              "reference": {
                "to": [
                  "component",
                  "anchor",
                  "submap"
                ],
                "by": "name"
              },
              "empty": "refuse"
            },
            "context": {
              "node": "context",
              "match": ";[ \\t]*(?<value>.*)",
              "empty": "remove",
              "create": {
                "emit": "; {value}",
                "after": [
                  "to"
                ]
              }
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "{from}->{to}[; {context}]"
          },
          "remove": {}
        },
        {
          "name": "flow",
          "type": "Flow",
          "at": "/flow",
          "id": {
            "sidecar": {
              "key": "entry.children[0].text + '\\u001f' + entry.children[1].text + '\\u001fFlow'",
              "kind": "link",
              "ordinal": "\u001f{n}\t"
            }
          },
          "attributes": {
            "from": {
              "node": "source",
              "reference": {
                "to": [
                  "component",
                  "anchor",
                  "submap"
                ],
                "by": "name"
              },
              "empty": "refuse"
            },
            "to": {
              "node": "target",
              "reference": {
                "to": [
                  "component",
                  "anchor",
                  "submap"
                ],
                "by": "name"
              },
              "empty": "refuse"
            },
            "context": {
              "node": "context",
              "match": ";[ \\t]*(?<value>.*)",
              "empty": "remove",
              "create": {
                "emit": "; {value}",
                "after": [
                  "to"
                ]
              }
            }
          },
          "insert": {
            "place": "end-of-document",
            "emit": "{from}+>{to}[; {context}]"
          },
          "remove": {}
        }
      ],
      "registration": {
        "createOnFirstPlacement": false,
        "legacyIdentities": "{base}.identities.json"
      },
      "template": {
        "text": "title {base}\n"
      }
    }
  }
}

In an IDE

No IDE host runs this example yet.